Subclases
Parte de la sección Programación orientada a objetos del Journey de Ruby de Coddy. Lección 22 de 57.
La herencia construye una clase nueva a partir de una existente. class Dog < Animal convierte a Dog en una subclase de Animal, su superclase. Un perro tiene todos los métodos de un animal, incluido initialize, además de los métodos que añade 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.fetchSalida:
Rex is eating
Rex fetches the ballLos métodos añadidos pertenecen únicamente a la subclase. Un Animal simple no los tiene, y una clase hermana como Cat no puede ver los métodos de 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
endSalida:
breathing
undefined method `fetch' for an instance of Catsuperclass nombra la clase padre de una clase. Una clase de Ruby tiene exactamente una superclase, y una clase declarada sin < hereda de Object, lo que proporciona a cada objeto métodos como to_s y inspect:
class Animal
end
class Dog < Animal
end
puts Dog.superclass
puts Animal.superclass
puts Object.superclassSalida:
Animal
Object
BasicObjectLa herencia representa una relación de es-un: un perro es un animal, una cuenta de ahorros es una cuenta. El comportamiento compartido se coloca una sola vez en la superclase, y cada subclase añade lo que la hace diferente. En esta sección, cada clase vive en su propio archivo, y el archivo de la superclase se carga primero:
# main.rb
require_relative 'animal' # la superclase primero
require_relative 'dog' # class Dog < Animal necesita Animal
require_relative 'cat'Desafío
FácilCompleta las clases. Vehicle almacena un name y un número de wheels, y tiene describe, que devuelve Mini has 4 wheels. Car y Bike son subclases de Vehicle que no definen initialize. Car añade honk, que devuelve Mini says beep, y Bike añade ring, que devuelve BMX rings.
El código proporcionado lee líneas car Mini o bike BMX, crea un Car con 4 ruedas o un Bike con 2, e imprime describe, el sonido (honk o ring) y la superclase de la clase del objeto.
Tu código va en vehicle.rb, car.rb y bike.rb. main.rb contiene el código proporcionado de entrada/salida y no se puede editar.
Pruébalo tú mismo
require_relative 'vehicle'
require_relative 'car'
require_relative 'bike'
# Código de entrada/salida suministrado: déjalo como está
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
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación orientada a objetos
1Clases y objetos
Trabajar con archivosDefinir clasesVariables de instanciaMétodos y selfto_s e inspectRepaso: tarjeta de biblioteca4Encapsulación
Métodos privadosMétodos protegidosAsignadores privadosProtección del estadoRepaso: máquina expendedora7Polimorfismo y tipado pato
PolimorfismoTipado patoMétodos abstractoscase y clasesRepaso: métodos de pago2Accesores y self
Lectores y escritoresSetters personalizadosself en los métodosIdentidad e igualdadRepaso: lista de contactos5Herencia
SubclasesSobrescritura de métodosLlamar a superis_a? y ancestrosRepaso - Nómina del personal8Métodos especiales
Igualdad y hashMétodos de operadoresIndexación y adiciónColecciones personalizadasRepaso: fracciones11Proyecto: Gestión de biblioteca
Libros y miembrosPréstamo de librosPractica por tu cuenta: Compilador de Ruby online