Alle Originalinhalte werden auf Ukrainisch erstellt. Noch nicht alle Inhalte wurden übersetzt. Einige Beiträge sind möglicherweise nur auf Ukrainisch verfügbar.Mehr erfahren

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

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.

24. Jul, 12:17 Uhr

Wie man Counter-Strike: GO in Ubuntu im Vollbildmodus startet, ohne das Spiel zu starten?

meme code
meme code@memecode
20. Nov, 19:35 Uhr

Wie kann ich eine gelöschte Datei (Trix), die auf Amazon S3 gespeichert war, wiederherstellen?

meme code
meme code@memecode
29. Nov, 08:47 Uhr

Was ist der Unterschied zwischen var und let in Javascript?

meme code
meme code@memecode
07. Dez, 07:42 Uhr

Was ist Kapselung (Encapsulation) in der OOP?

meme code
meme code@memecode
07. Dez, 08:13 Uhr

Sichtbarkeitskontrolle in Ruby (public, private und protected)

meme code
meme code@memecode
07. Dez, 08:25 Uhr

Was ist OOP (objektorientierte Programmierung)?

meme code
meme code@memecode
09. Dez, 12:15 Uhr

Was ist eine Best Practice in der Programmierung?

meme code
meme code@memecode
09. Dez, 12:21 Uhr

Was ist Polymorphismus? Ein Beispiel für die Verwendung von Polymorphismus in Ruby.

meme code
meme code@memecode
09. Dez, 12:46 Uhr

Що таке патерн/шаблон проєктування?

meme code
meme code@memecode
10. Dez, 14:03 Uhr

Was ist ein Entwurfsmuster in der Programmierung?

meme code
meme code@memecode
10. Dez, 14:18 Uhr

Was ist ein Client und ein Server? Wie funktioniert die Interaktion zwischen Client und Server?

meme code
meme code@memecode
18. Dez, 08:25 Uhr

Was ist DNS? Wozu wird DNS benötigt?

meme code
meme code@memecode