CodeGym /Java-Blog /Random-DE /Beziehungen zwischen Klassen. Vererbung, Zusammensetzung ...
Autor
Vasyl Malik
Senior Java Developer at CodeGym

Beziehungen zwischen Klassen. Vererbung, Zusammensetzung und Aggregation

Veröffentlicht in der Gruppe Random-DE
Hallo! Heute werfen wir einen genaueren Blick auf ein Prinzip der objektorientierten Programmierung (OOP): Vererbung. Wir werden auch andere Arten von Beziehungen zwischen Klassen untersuchen: Zusammensetzung und Aggregation. Beziehungen zwischen Klassen.  Vererbung, Zusammensetzung und Aggregation – 1Dieses Thema wird nicht schwer sein: Vererbung und Beispiele für Vererbung sind Ihnen in den vergangenen Lektionen bereits mehrfach begegnet. Heute geht es vor allem darum, Ihr Wissen zu vertiefen, den Mechanismus der Vererbung genauer zu untersuchen und noch einmal einige Beispiele durchzugehen. :) Also, lasst uns gehen!

Vererbung in Java und ihre Vorteile

Wie Sie sich sicherlich erinnern, ist Vererbung ein Mechanismus, mit dem Sie eine neue Klasse basierend auf einer vorhandenen Klasse (Elternklasse) beschreiben können. Dabei übernimmt die neue Klasse die Eigenschaften und Funktionalitäten der übergeordneten Klasse. Erinnern wir uns an ein Beispiel für Vererbung aus früheren Lektionen:

public class Car {

   private String model;
   private int maxSpeed;
   private int yearOfManufacture;

   public Car(String model, int maxSpeed, int yearOfManufacture) {
       this.model = model;
       this.maxSpeed = maxSpeed;
       this.yearOfManufacture = yearOfManufacture;
   }


public void gas() {
       // Gas
   }

   	public void brake() {
       // Brake
   }
}


public class Truck extends Car {

   public Truck(String model, int maxSpeed, int yearOfManufacture) {
       super(model, maxSpeed, yearOfManufacture);
   }
}



public class Sedan extends Car {
   public Sedan(String model, int maxSpeed, int yearOfManufacture) {
       super(model, maxSpeed, yearOfManufacture);
   }
}
Wir haben ein bestimmtes Programm, das die Arbeit mit verschiedenen Fahrzeugtypen beinhaltet. Auch wenn Sie kein Autoliebhaber sind, wissen Sie wahrscheinlich, dass es auf der Welt sehr viele Arten von Autos gibt. :) Dementsprechend werden wir die gemeinsamen Eigenschaften von Autos in eine gemeinsame übergeordnete Klasse namens aufteilen Car. Was haben also alle Autos gemeinsam, unabhängig von ihrem Typ? Jedes Auto hat ein Baujahr, einen Modellnamen und eine Höchstgeschwindigkeit. Wir fügen diese Eigenschaften in die Felder model, maxSpeedund ein yearOfManufacture. Was das Verhalten betrifft, kann jedes Auto beschleunigen und verlangsamen. :) Wir definieren dieses Verhalten im gas()undbrake()Methoden. Welche Vorteile bringt uns das? Erstens reduziert es die Menge an Code. Natürlich können wir auch auf die Elternklasse verzichten. Da aber jedes Auto in der Lage sein muss, zu beschleunigen und zu verlangsamen, müssen wir Methoden in den Klassen , , und und in jeder anderen Autoklasse gas()erstellen . Stellen Sie sich vor, wie viel zusätzlichen Code wir schreiben müssten. Und vergessen Sie nicht die Felder , und : Wenn wir die übergeordnete Klasse loswerden, müssen wir sie in jeder Autoklasse erstellen! brake()TruckSedanF1CarSportsCarmodelmaxSpeedyearOfManufactureBeziehungen zwischen Klassen.  Vererbung, Zusammensetzung und Aggregation – 2Wenn wir ein paar Dutzend Fahrzeugklassen haben, wird die Menge an doppeltem Code sehr groß. Durch das Verschieben allgemeiner Felder und Methoden (auch „Zustände“ und „Verhalten“ genannt) in eine übergeordnete Klasse können wir viel Zeit und Platz sparen. Wenn ein Typ über einzigartige Eigenschaften oder Methoden verfügt, die andere Fahrzeugtypen nicht haben, ist das kein großes Problem. Sie können sie jederzeit in einer abgeleiteten Klasse erstellen, getrennt von allen anderen.

public class F1Car extends Car {

   public void pitStop() {

       // Only race cars make pit stops
   }

   public static void main(String[] args) {

       F1Car formula1Car = new F1Car();
       formula1Car.gas();
       formula1Car.pitStop();
       formula1Car.brake();
   }
}
Schauen wir uns als Beispiel Formel-1-Rennwagen an. Im Gegensatz zu ihren „Verwandten“ haben sie ein einzigartiges Verhalten: Sie machen von Zeit zu Zeit einen Boxenstopp. Das stört uns nicht. Wir haben das allgemeine Verhalten in der Carübergeordneten Klasse bereits beschrieben, und das spezifische Verhalten untergeordneter Klassen kann zu diesen Klassen hinzugefügt werden. Beziehungen zwischen Klassen.  Vererbung, Zusammensetzung und Aggregation – 3Das Gleiche gilt für Felder: Wenn eine untergeordnete Klasse eindeutige Eigenschaften hat, deklarieren wir diese Felder ruhig innerhalb der untergeordneten Klasse und machen uns keine Sorgen mehr. :) Die Möglichkeit, Code wiederzuverwenden, ist der Hauptvorteil der Vererbung. Für Programmierer ist es sehr wichtig, keinen zusätzlichen Code zu schreiben. Dies wird Ihnen bei Ihrer Arbeit immer wieder begegnen. Bitte denken Sie an etwas anderes Wichtiges: Java verfügt nicht über Mehrfachvererbung. Jede Klasse erbt nur eine Klasse. Auf die Gründe dafür werden wir in den nächsten Lektionen noch näher eingehen. Denken Sie vorerst einfach daran. Dies unterscheidet Java übrigens von einigen anderen OOP-Sprachen. C++ unterstützt beispielsweise die Mehrfachvererbung. Bei der Vererbung ist alles mehr oder weniger klar. Lass uns weitermachen.

Zusammensetzung und Aggregation

Klassen und Objekte können miteinander verknüpft werden. Vererbung beschreibt eine „Ist-ein“-Beziehung. Ein Löwe ist ein Tier. Eine solche Beziehung lässt sich leicht durch Vererbung ausdrücken, wobei Animaldie übergeordnete Klasse und Liondie untergeordnete Klasse vorhanden sind. Allerdings werden nicht alle Beziehungen auf diese Weise beschrieben. Beispielsweise hat eine Tastatur durchaus etwas mit einem Computer zu tun, ist aber kein Computer . Hände sind irgendwie mit einer Person verbunden, aber sie sind keine Person. In diesen Fällen haben wir eine andere Art von Beziehung: nicht „ist-ein“, sondern „hat-ein“. Eine Hand ist keine Person, sondern Teil einer Person. Eine Tastatur ist kein Computer, sondern Teil eines Computers. Eine Has-A-Beziehung kann im Code mithilfe von Komposition und Aggregation beschrieben werden. Der Unterschied liegt in der „Strenge“ der Beziehung. Geben wir ein einfaches Beispiel: Wir haben eine CarKlasse. Jedes Auto hat einen Motor. Darüber hinaus hat jedes Auto Passagiere. Was ist der grundlegende Unterschied zwischen den Feldern Engine engineund Passenger[] passengers? Die Tatsache, dass ein Passagier Ain einem Auto sitzt, bedeutet nicht, dass sich keine Passagiere im Auto befinden B. CEin Auto kann mehreren Passagieren entsprechen. Und wenn alle Passagiere aussteigen, funktioniert das Auto trotzdem reibungslos. Die Beziehung zwischen der CarKlasse und dem Passenger[] passengersArray ist weniger streng. Es heißt Aggregation . Es ist ein weiteres gutes Beispiel für Aggregation. Angenommen, wir haben eine StudentKlasse und eineStudentGroupKlasse. Ein Student kann mehreren Studentenorganisationen beitreten: einem Physikclub, einem Star Wars-Fanclub und/oder einem studentischen Comedy-Club. Komposition ist eine strengere Art von Beziehung. Bei der Verwendung von Komposition ist ein Objekt Teil eines Objekts und kann nicht zu einem anderen Objekt desselben Typs gehören. Das einfachste Beispiel ist ein Automotor. Ein Motor ist Teil eines Autos und kann nicht Teil eines anderen Autos sein. Wie Sie sehen, ist ihre Beziehung viel strenger als die Beziehung zwischen Carund Passengers. Beziehungen zwischen Klassen.  Vererbung, Zusammensetzung und Aggregation – 4
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION