Definire le classi
Fa parte della sezione Programmazione orientata agli oggetti del percorso Ruby di Coddy. Lezione 2 di 57.
Una classe descrive un tipo di oggetto: ciò che sa e ciò che può fare. class Dog ... end dichiara la classe e Dog.new crea un oggetto di quella classe, un'istanza. Un metodo definito con def all'interno della classe può essere chiamato su ogni istanza:
class Dog
def speak
"Woof"
end
end
rex = Dog.new
puts rex.speak
puts rex.classOutput:
Woof
Dognew crea l'oggetto e poi chiama il suo metodo initialize con gli argomenti che hai fornito a new. initialize configura l'oggetto, di solito memorizzando gli argomenti in variabili di istanza, i cui nomi iniziano con @:
class Dog
def initialize(name)
@name = name
end
def speak
"#{@name} says Woof"
end
end
puts Dog.new("Rex").speak
puts Dog.new("Bella").speakOutput:
Rex says Woof
Bella says WoofI metodi accettano argomenti come qualsiasi metodo Ruby e restituiscono il valore della loro ultima espressione. Ogni chiamata a new crea un oggetto separato:
class Calculator
def add(a, b)
a + b
end
def average(numbers)
numbers.sum.to_f / numbers.size
end
end
calc = Calculator.new
puts calc.add(2, 3)
puts calc.average([1, 2, 3, 6])Output:
5
3.0I nomi delle classi sono costanti scritte in CamelCase (BankAccount); i nomi dei metodi e delle variabili usano snake_case (deposit_money). new verifica i suoi argomenti confrontandoli con initialize, quindi un argomento mancante genera ArgumentError:
class Point
def initialize(x, y)
@x = x
@y = y
end
end
begin
Point.new(1)
rescue ArgumentError => e
puts e.message
endOutput:
wrong number of arguments (given 1, expected 2)Sfida
FacileCompleta la classe Formatter. Il suo metodo title(text) restituisce il testo con ogni parola in maiuscolo (the hobbit dà The Hobbit), slug(text) restituisce le parole in minuscolo unite da - (the-hobbit) e initials(text) restituisce la prima lettera di ogni parola in maiuscolo (TH).
Il codice fornito crea un oggetto Formatter e, per ogni riga di input, stampa i tre risultati su righe separate.
Il tuo codice va in formatter.rb. main.rb contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
require_relative 'formatter'
# Codice di input/output fornito: lascialo così com'è
input = []
while (line = gets)
input << line.chomp
end
formatter = Formatter.new
input.each do |line|
puts formatter.title(line)
puts formatter.slug(line)
puts formatter.initials(line)
end
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Classi e oggetti
Lavorare con i fileDefinire le classiVariabili d'istanzaMetodi e selfto_s e inspectRipasso - Tessera della biblioteca4Incapsulamento
Metodi privatiMetodi protettiSetter privatiProteggere lo statoRiepilogo - Distributore automatico7Polimorfismo e Duck Typing
PolimorfismoDuck TypingMetodi astratticase e classiRiepilogo - Metodi di pagamento10Pattern di progettazione Parte 2
Delegazione con ForwardablePattern DecoratorPattern BuilderPattern State2Metodi di accesso e self
Metodi di lettura e scritturaSetter personalizzatiself nei metodiIdentità e uguaglianzaRiepilogo - Elenco contatti5Ereditarietà
SottoclassiRidefinizione dei metodiChiamare superis_a? e antenatiRiepilogo - Paghe del personale8Metodi speciali
Uguaglianza e hashMetodi degli operatoriIndicizzazione e appendCollezioni personalizzateRiepilogo - Frazioni11Progetto: Gestione della biblioteca
Libri e iscrittiPrendere in prestito i libriEsercitati da solo: Compilatore Ruby online