Kann jemand mir OOP Bzw Objektorientierte Programmierung (Java) erklären, ich verstehe es nicht ganz?

2 Antworten

objektorientierte Programmierung soll alles einfacher für den Programmierer machen. Klassen und Objekte gibt es ja auch in der Wirklichkeit. (Klasse = Bauplan eines Hauses, Objekt = Haus) ..Es kann mehrere Häuser vom selben Bauplan geben. 

Vil hast du ja schon mit structs in C gearbeitet? Eine Klasse ist eigentlich ein Struct - also ein Datentyp - der halt zusätzlich noch über Funktionen (Methoden) verfügt. 

Objekte/Instanzen einer Klasse werden für gewöhnlich dynamisch angelegt(am heap gespeichert) - was bedeutet, dass selbst wenn du die Klasse definierst, es noch gar kein Objekt dieser Klasse gibt.

 

danke , wirklich hilfreich, kannst du mir auch Aggregation/Assoziation (beidseitige Beziehungen) erklären? MfG KingOff

@KingOff

Wenn zwischen zwei Klassen eine Assoziationsverbindung herrscht, dann bedeutet das, dass in dem Objekt der einen Klasse eines oder mehrere Objekte der Anderen Klasse steckt (In Form einer Collection).
A 1 -------> *_10 B 
Bedeutet ein Objekt von A hat 0 bis 10 Objekte von B.
Zum Beispiel ein Baum hat 0 bis 10 Äste (jetzt mal angenommen es wäre so :D)
Jetzt etwas komisches: irgendeiner der Äste, vom Baum könnte auch ohne weiteres zu einem anderen Baum gehören (im programm)...das ist wichtig

Aggregation ist eine spezielle Form der Assoziation.

A 1 -------> 11 B 
Also sie ist eigentlich wie eine Assoziation, nur dass genau die 11 Objekte von B nur in genau dem einen Objekt von A sein dürfen. und in keinem anderen Objekt von A. 
Ein gutes Beispiel wäre ein Verein und die Spieler dürfen nur für einen Verein spielen. 

@verreisterNutzer

Bei obriger Aggregation ist die starke Aggregation gemeint

Naja, eigentlich ist es ganz einfach. Objektorientierung bedeutet, dass gewisse "Objekte" allgemein definiert sind, diese Objekte haben gewisse Parameter und können gewisse Aktionen ausführen.
Ein bestimmtes "Objekt" (in Java Klassen) nennt man Instanz einer Klasse oder auch Objekt.

Anders gesagt: Du hast eine Klasse Mensch angelegt. Ein Mensch ist zum Beispiel über Größe, Gewicht, einen Energievorrat und Geschlecht definiert. Ein Mensch kann gewisse Sache machen, wie Laufen, Essen, schlafen usw. Das sind die Methoden einer Klasse.

In deiner Klasse steht aber nur, wie ein Mensch definiert ist, und was er wie tun kann. Jedoch nicht, wie groß, schwer usw ein bestimmter Mensch (Instanz einer Klasse) ist.

Susi oder Hans wären zum Beispiel Menschen, die beide unterschiedliche Geschlechter, verschiedene Größen und Gewichte und Energiereserven haben. Sie können beide die gleichen "Aktionen" ausführen, aber manche eben – je nachdem wie die Methoden definiert sind – unterschiedlich ;)

So funktioniert das auch mit Objekten in Java. Man definiert etwas allgemein und kann dann bestimmte Sachen damit machen. Das ist notwendig um gewisse – vor allem sich wiederholende Aktionen – nicht jedes Mal neu geschrieben werden müssen, wenn du sie brauchst. Zum Beispiel kannst du so ganz einfach abfragen, ob etwas in einem String enthalten ist, oder zwei Strings miteinander vergleichen ("String" ist eine Klasse von Java, "equals" eine sehr bekannte Methode, dein String mystring = "hello world" ist eine Instanz der Klasse String bzw ein Objekt). Es erleichtert dir also das Leben :)

Hoffe das ist irgendwie verständlich.

danke , wirklich hilfreich, kannst du mir auch Aggregation/Assoziation (beidseitige Beziehungen) erklären? MfG KingOff

@KingOff

Sehr gerne :)

Und ja, kann ich. Einfach gesagt beschreibt beides die Relation zwischen zwei oder mehrern Klassen. Wenn ich wieder auf mein Mensch-Beispiel zurückgehe: Ein Mensch kann zum Beispiel eine Adresse haben, über die er definiert ist. Für die Adresse exisitert jedoch eine eigene Klasse, in Mensch wird also eine Instanz der Klasse Adresse (die aus Stadt, Straße, Hausnummer etc besteht) erzeugt. Genauso könnte ich aber auch einer Adresse mehrer Menschen, die dort wohnen/arbeiten zuweisen. Die Klassen Mensch und Adresse sind also assoziativ.

Es gibt aber auch Klassen, die zwar in Relation zueinander stehen, aber nicht direkt assoziativ sind, weil die Relation nur in eine Richtung geht. Hier bediene ich mich dem Beispiel, mit dem es mir erklärt wurde: Eine Geldbörse beinhaltet mehrer Instanzen von Geld, jedoch muss dem Geld nicht zwangsläufig eine Geldbörse zugewiesen sein. Hier spricht man von Aggregation.

Kurz gesagt: Man spricht von Assoziation, wenn die Relation in beide Richtungen funktioniert, wenn es aber nur in eine Richtung geht, dann ist es Aggregation.

Wow wirklich sehr toll erklärt Respekt.