Kurze Erklärung Bindung Kopplung bei der Objektorientierung?

3 Antworten

Loose Kopplung:

Denk einfach mal an java.util.List<E>.

Es gibt mehrere implementierungen Klassen, ArrayList, LinkedList, Vector etc...

Es geht darum, wenn man geringe Kopplung hat kann man einfach Programmteile austauschen... 

Stell dir vor ich habe ein Programm geschrieben und 

List<String> list = new ArrayList<>(); 

.

.

.

Und ich denke mir ab einem Punkt, ich möchte gerne das Verhalten meiner Liste ändern, ich Programmiere einfach eine neue Klasse welche von List erbt und muss in meinem Code genau an einem Ort etwas ändern, der Rest bleibt gleich...


Bindung:



Starke Kohäsion (Quelle: Wikipedia)

Das Single-Responsibility-Prinzip besagt, dass jede Klasse nur genau eine fest definierte Aufgabe zu erfüllen hat. Diese Aufgabe wird durch das Zusammenspiel aller Attribute und Methoden dieser Klasse erfüllt. Das Zusammenspiel der Attribute und Methoden dieser Klasse ist dadurch sehr eng. Man spricht von starker Kohäsion.

Schlechte (schwache) Kohäsion sollte vermieden werden. Sie führt unter anderem dazu, dass gemeinsame Funktionalitäten einer Klasse nicht wiederverwendet werden, sondern mehrfach umgesetzt werden. Code-Duplizierung[1] ist somit ein Zeichen schwacher Kohäsion. Das DRY-Prinzip (Don't Repeat Yourself — ‚Wiederhole dich nicht‘) hilft, diese zu vermeiden.



Achso, Bindung heißt dann dass ich bspw. Code in Methoden auslagere anstatt immer wieder die selben 5 Zeilen zu tippen.

Oder halt die Geschichte mit den Attributen, wenn ich einfach mehrere "Dinge" mit ähnlichen Werten haben will.

z.B. 5 Punkte, wobei jeder eben eine x und eine y Koordinate hat.

Dass man da nicht 5 x,y Paare anlegt, sondern einfach eine Punktklasse hat mit x und y als Attribut.

Der Kapselung Kram also im Groben.

0
@densch92

Genau!




Wenn wir schon bei Geometrie sind

Zb.

Punkt ( x,y Attribut)

Dreieck (hat jetzt nicht 3 x,y, attribute, sondern 3 Punkt Objekte)



0

Wenn mit "Bindung" Kohäsion gemeint ist, dann ist der Unterschied grob gesagt:

 - "Bindung" bedeutet, wie stark die Klasse "mit sich selbst" arbeitet, also eigene Daten verwendet, eigene Funktionen aufruft etc. Wenn eine Gruppe von Funktionen immer nur auf einen Teil der Daten zugreift und eine andere Gruppe immer nur auf einen anderen Teil der Daten, kann man da eventuell zwei Klassen draus machen.

 - Kohäsion zeigt an, wie stark Klassen miteinander arbeiten bzw aufeinander angewiesen sind. Da gibt es verschiedene Arten, zb Erstellung, Aufruf von Funktionen, Verwendung von Daten, auf Vorarbeit angewiesen sein etc. Wenn zwei Klassen sehr stark aufeinander angewiesen sind, kann es sinnvoll sein, sie zu einer Klasse zu verschmelzen.

Grundsätzlich geht es bei der ganzen Geschichte darum: Du hast eine gewisse Menge an Aufgaben und Daten, wie verteilst Du sie sinnvoll? Einfache Beispiele sind da schwierig zu finden, weil da die Fehler zu offensichtlich sind.

Sichtbar wird die ganze Problematik oft erst, wenn man bestimmte Dinge auf verschiedene Arten erreichen können will, beispielsweise die gleichen Daten auf unterschiedlichen Geräten/Größen/... ausgeben, mit den Daten aus unterschiedlichen Datenbanken das gleiche tun,...

______

Wär schon, wenn man Antworten löschen könnte, was?

0

Ich möchte endgültig das programmieren lernen - wie anfangen!?

Hallo..

Januar 2016 angefangen, paar Wochen später aufgehört weil ich keine Motivation mehr hatte und folgende Dinge überhaupt nicht verstanden hatte: Objektorientierung und Parameter. (Hatte damals mit Java angefangen.)

Nun möchte ich endlich loslegen. Kann mir jemand ein Buch empfehlen? Oder wie habt ihr das alles erlernt??

(Falls mit Buch: amazon Link wäre nett.)

Möchte wie gesagt endlich anfangen zu lernen, hab gerade die Motivation dazu

Mfg

...zur Frage

Welche Programmiersprache sollte ich erlernen?

Sehr geehrte Gemeinde,

Also es ist so. Ich interessiere mich für das Erlernen wie man Programme bzw. Anwendungen, Scripts und sonstiges schreibt. Ich plane eine konkrete Ausbildung in einer dieser Sprachen zu machen.

Ich bin sehr interessiert daran und weiß auch das es schwer wird, das ist keine Frage.

Ich hab allerdings jetzt keine richtige Ahnung in welcher Sprache ich mein Wissen aufbauen bzw. einen Lehrgang starten soll.

Ich habe mich schon ein wenig informiert und kenne vom Namen folgende gebräuchlichen Programmiersprachen, mit einer von denen ich mich dann auch weiterbilden möchte:

C, C++, C#, Java, Visual Basic oder Visual Basic for Applications (VBA).

Des Weiteren bin an Python interessiert, weil eines meiner persönlichen Lieblingsprogramme in Python geschrieben ist. Mit Python möchte ich aber keinen Lehrgang belegen.

Es wird sich ausschließlich um eine der oberen Programmiersprachen handeln.

Kann jemand von euch, der sich vielleicht schon mit der ein oder anderen oder sogar mehreren von denen auskennt, mir Tipps geben, welche Programmiersprache, die besten Möglichkeiten (auch in der Zukunft) gibt bzw. was für Einschränkungen bei diesen bestehen?

Ich möchte einmal hochleistungsfähige Programme schreiben.

Auf der Einfachheit liegt überhaupt kein Betrachtungspunkt.

Es kann also schwer sein, wenn es dafür entsprechend flexible Möglichkeiten bietet.

Bei Java habe ich schon gehört, dass man hiermit plattformübergreifende Applikationen schreiben kann.

Vielen Dank für Eure/deine Hilfe.

...zur Frage

Java Buch fürs Studium?

Welches gutes Java Übungsbuch zum Einstieg könnt ihr mir empfehlen? Danke im Voraus!

...zur Frage

Java ist auch eine Insel für Python?

Ahoi!

Gibt es ein Pendant zur Java Insel, für Python? Eine gute kostenlose, PDF auf die die meisten Programmierer schwören?

...zur Frage

Was möchtest Du wissen?