Sottoclassi
Fa parte della sezione Programmazione orientata agli oggetti del percorso Ruby di Coddy. Lezione 22 di 57.
L'ereditarietà crea una nuova classe a partire da una esistente. class Dog < Animal rende Dog una sottoclasse di Animal, la sua superclasse. Un cane ha tutti i metodi di un animale, incluso initialize, oltre ai metodi aggiunti da Dog:
class Animal
attr_reader :name
def initialize(name)
@name = name
end
def eat
"#{name} is eating"
end
end
class Dog < Animal
def fetch
"#{name} fetches the ball"
end
end
rex = Dog.new("Rex")
puts rex.eat
puts rex.fetchOutput:
Rex is eating
Rex fetches the ballI metodi aggiunti appartengono solo alla sottoclasse. Un semplice Animal non li possiede e una classe sorella come Cat non vede i metodi di Dog:
class Animal
def breathe
"breathing"
end
end
class Dog < Animal
def fetch
"fetching"
end
end
class Cat < Animal
end
puts Cat.new.breathe
begin
Cat.new.fetch
rescue NoMethodError => e
puts e.message
endOutput:
breathing
undefined method `fetch' for an instance of Catsuperclass indica la classe genitore di una classe. Una classe Ruby ha esattamente una superclasse e una classe dichiarata senza < eredita da Object, che fornisce a ogni oggetto metodi come to_s e inspect:
class Animal
end
class Dog < Animal
end
puts Dog.superclass
puts Animal.superclass
puts Object.superclassOutput:
Animal
Object
BasicObjectL'ereditarietà corrisponde a una relazione è un: un cane è un animale, un conto di risparmio è un conto. Il comportamento condiviso viene inserito una sola volta nella superclasse, e ogni sottoclasse aggiunge ciò che la distingue. In questa sezione ogni classe si trova nel proprio file e il file della superclasse viene caricato per primo:
# main.rb
require_relative 'animal' # prima la superclasse
require_relative 'dog' # class Dog < Animal richiede Animal
require_relative 'cat'Sfida
FacileCompleta le classi. Vehicle memorizza un name e un numero di wheels e ha describe, che restituisce Mini has 4 wheels. Car e Bike sono sottoclassi di Vehicle che non definiscono initialize. Car aggiunge honk, che restituisce Mini says beep, e Bike aggiunge ring, che restituisce BMX rings.
Il codice fornito legge righe car Mini o bike BMX, crea una Car con 4 ruote o una Bike con 2 e stampa describe, il suono (honk o ring) e la superclasse della classe dell'oggetto.
Il tuo codice va in vehicle.rb, car.rb e bike.rb. main.rb contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
require_relative 'vehicle'
require_relative 'car'
require_relative 'bike'
# Supplied input/output code: keep it as it is
input = []
while (line = gets)
input << line.chomp
end
input.each do |line|
kind, name = line.split(" ", 2)
if kind == "car"
v = Car.new(name, 4)
sound = v.honk
else
v = Bike.new(name, 2)
sound = v.ring
end
puts v.describe
puts sound
puts v.class.superclass
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