← StartseiteProgrammierung (Програмування)

Was ist Vererbung in Ruby? Beispiele für schlechtes und gutes Vererben.

Was ist Vererbung in Ruby? Beispiele für schlechtes und gutes Vererben in Ruby

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.

🔥 Weitere Beiträge

Alle Beiträge
Programmierung (Програмування)18. Dez '23, 08:25 Uhr

Was ist DNS? Wozu wird DNS benötigt?

Was ist DNS? Wofür wird DNS benötigt? Wann ist es entstanden und wie funktioniert es?