InhaltsverzeichnisKlicke auf den Link, um zur gewünschten Stelle zu navigieren
Dieser Inhalt wurde automatisch aus dem Ukrainischen übersetzt.
In Ruby, wie in vielen anderen objektorientierten Programmiersprachen, ist Vererbung ein Mechanismus, durch den eine Klasse Eigenschaften und Methoden einer anderen Klasse erben kann. Die Klasse, die erbt, wird als Unterklasse bezeichnet, und die Klasse, von der geerbt wird, ist die Elternklasse.
Beispiel für schlechte Vererbung in Ruby
class Animal
def speak
puts "Animal speaks"
end
end
class Dog < Animal
def speak
puts "Dog barks"
end
end
class Cat < Animal
# Diese Klasse definiert ihre eigene speak-Methode nicht
end
In diesem Beispiel erbt die Klasse Dog von der Klasse Animal, aber die Klasse Cat bietet keine eigene Implementierung der Methode speak. Wenn Sie versuchen, eine Instanz der Klasse Cat zu erstellen und die Methode speak aufzurufen, wird die Implementierung aus der Klasse Animal verwendet. Das kann problematisch sein, da die Antwort für eine Katze eher miau ist.
Das heißt, wir erwarten den Text 'Cat meows', aber erhalten 'Animal speaks'. Es scheint nicht sehr kritisch zu sein, aber in Klassen, die für die Geschäftslogik verantwortlich sind, kann das zu größeren Problemen führen.
Wir können Folgendes tun:
class Cat < Animal
def speak
puts "Cat meows"
end
end
Das scheint das Problem zu lösen. Aber stellen Sie sich vor, es gibt Dutzende oder Hunderte von Klassen und Methoden. Dieser Ansatz ist keine Best Practice.
Beispiel für gute Vererbung in Ruby
class Shape
def initialize(color)
@color = color
end
def draw
puts "Drawing a #{@color} shape"
end
end
class Circle < Shape
def initialize(color, radius)
super(color)
@radius = radius
end
def draw
puts "Drawing a #{@color} circle with radius #{@radius}"
end
end
class Square < Shape
def initialize(color, side_length)
super(color)
@side_length = side_length
end
def draw
puts "Drawing a #{@color} square with side length #{@side_length}"
end
end
In diesem Beispiel gibt es die Klasse Shape, die die Basisklasse für alle geometrischen Figuren ist. Die Klasse hat ein Attribut color und eine Methode draw, die eine Zeichennachricht ausgibt.
Die Klassen Circle und Square erben von der Klasse Shape und bieten eigene Attribute (radius und side_length) sowie eine Implementierung der Methode draw. Jede Klasse kann die Methode draw aufrufen, jedoch mit ihrem eigenen Kontext und Daten.
Dieser Ansatz ermöglicht es, allgemeine Eigenschaften und Methoden in der Basisklasse zu erstellen und diese dann in den Unterklassen zu erweitern, wobei eine eigene, einzigartige Logik bereitgestellt wird. Dies macht den Code lesbarer, wartbarer und flexibler.
Dieser Beitrag hat noch keine Ergänzungen vom Autor.