Klassen objektorientiert aufteilen

Caliburns

Mitglied
Hallo,

ich habe eine grundlegende Frage zum Trennen von Klassen, aber der Beibehaltung einer Objektorientierten Modellierung.

Angenommen ich habe eine Main-Klasse in der ich ein Objekt graph der Klasse Graph erzeuge. In der Main-Methode kann ich ja dann über graph.tueEtwas() die Methoden aufrufen. Allerdings schwillt mir die Klasse Graph mit vielen Methoden dermaßen an, dass ich diese Klasse aufteilen möchte. Jedoch in der Main ganz normal weiterhin über graph.tueEtwas() Zugriff auf die ausgelagerten Methoden haben will.

Wichtig: Die Klasse Graph enthält bei mir diverse Listen auf die ich mit den ausgelagerten Methoden weiterhin objektorientiert zugreifen möchte (quasi so, als wären sie überhaupt nicht ausgelagert).

Gibt es hierfür eine Möglichkeit Methodenauslagerungen ohne großen Aufwand vorzunehmen?

Für die Hilfe Vielen Dank!
 

temi

Top Contributor
Die Klasse Graph enthält bei mir diverse Listen

Evtl. mal drüber nachdenken, ob man für jede der Listen eine eigene Klasse erstellt.

Ohne weitere Infos ist zu deinem Problem nicht viel mehr zu sagen. Man sollte vermeiden sogenannte Gott-Klassen zu erstellen, aber das hast du ja selbst schon bemerkt. Eine Klasse sollte nur eine klar umrissene Aufgabe haben.
 

Caliburns

Mitglied
Ich habe mir nun überlegt, alle Befehle die eine Ausgabe von den Listeninhalten erzeugen in eine separate Klasse "Printer" auszulagern. In der Main erzeuge ich neben dem Graph-Objekt auch ein Printer-Objekt, das das Graph-Objekt als Parameter bekommt. Das Printer-Objekt kann nun auf die Listen im Graph zugreifen und ausgeben. Dadurch spare ich einiges an Platz und es ist nach wie vor objektorientiert. Außerdem sind die Aufgaben dann nochmal klarer definiert.
 

temi

Top Contributor
Kannst du evtl. grob beschreiben, was die Klasse Graph genau enthält und welche Methoden benötigt werden?

"Objektorientiert" ist ja so ein Begriff. Wenn du eine Klasse mit allem drin hast, dann ist es auch noch objektorientiert, es gibt halt ein Objekt. Das heißt nicht, dass es gutes Design ist.

Aber es ist quasi eine Grundregel, dass man das UserInterface ("die Ausgabe") von der Logik trennt. Du bist demnach auf dem richtigen Weg.
 
K

kneitzel

Gast
Mein Tipp wäre hier jetzt ein Buch: "Object Thinking" von David West erschienen 2004 bei Microsoft Press.
Lässt sich sehr gut lesen und aus meiner Sicht vermittelt es einen sehr guten Einstieg in diese Thematik. Muss man auch nicht extra kaufen - ich würde schauen, ob man es nicht einfach ausleihen kann - ggf. per Fernausleihe oder so.

Ansonsten müsste man etwas mehr erfahren, was da Dein Objekt macht und was es da für Bestandteile gibt. In der Regel gibt es klare "Schnittlinien", die man zur Unterteilung nutzen kann und die man mit etwas Übung relativ gut sehen kann.

Das ist dann wie ein technisches Gerät - das setzt sich aus kleinen Bausteinen zusammen. Und bei der Bedienung hat man dann - wie schon angesprochen - oft Interfaces.

Beispiel wäre dann z.B. ein toller BMW. Du hast ein BMW gekauft. Und der setzt sich aus vielen Bauteilen zusammen. Er hat z.B. einen Motor. Der Motor hat dann aber wieder diverse Bauteile: Zylinder, Dichtungen, Ventile, ...
Und von der Bedienung hat er klare Interfaces. Es ist ein Auto mit manueller Gangschaltung. Du hast gelernt, sowas zu fahren. Daher kannst Du auch den BMW fahren. Ebenso wie jedes andere Auto, das so ein Interface anbietet.

Und es gibt viele Interfaces. Das "Auto Fahren Interface" ist ja nur eines. Viele brauchen das aber nicht. Wenn Du Kinder hast, dann willst Du denen das nicht geben. Dann haben die ein eigenes Interface das dann diverse Dinge ermöglicht. Das "Einsteigen und Anschnallen Interface" würde mir da pauschal einfallen :)

Mit dem Beispiel haben wir schon einige wichtige Aspekte direkt behandelt ohne es wirklich zu merken:
- Abhängigkeiten haben wir rausgenommen. Wenn Du ein AutoMitGangschaltung fahren kannst, dann bist du unabhängig von BMW oder so. Du kannst jedes Auto fahren.
-Kapselung - Du nutzt das Interface. Da ist es Dir relativ egal, was intern passiert. Ob da nun ein Diesel (Selbstzünder), Benziner (aktive Zündung), Elektromotor, .... innen drin ist, ist dir erst einmal egal wenn du das Fahrzeug fahren willst. (Aber es gibt durchaus Interfaces, wo das eine Rolle spielt.... man denke nur ans Tanken ....)

Und man sieht auch viele Dinge, die wichtig sind: So schleifst Du in der Regel keine Interfaces 1:1 durch. Motor -> Drehzahl erhöhen ist natürlich wichtig. Und das macht der Fahrer ja auch mehr oder weniger. Aber es wird das Auto bedient und da ist es dann ein beschleunigen. Das kann 1:1 ein Aufruf beim Motor sein, aber dem muss ja nicht so sein.

Aber da bin ich jetzt viel zu weit gegangen. Das findet sich alles bestimmt auch auf Webseiten deutlich besser beschrieben ... oder eben auch in dem erwähnten Buch....
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
Detlef Bosau Nachladen von Klassen zur Laufzeit Java Basics - Anfänger-Themen 24
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
C Array von Klassen Java Basics - Anfänger-Themen 2
monsterherz 2 Klassen daher Probs mit dem Dateinamen Java Basics - Anfänger-Themen 9
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
L Best Practice Annotierte Klassen im Classpath herausfinden Java Basics - Anfänger-Themen 1
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
O Klassen Zusammenspiel zwischen 2 Klassen Java Basics - Anfänger-Themen 1
K Zweite Ausgabe von vererbten Klassen Java Basics - Anfänger-Themen 3
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
Speedrunner klassen aufrufen Java Basics - Anfänger-Themen 41
M Log4J (v2) nachträglich in allen Klassen hinzufügen Java Basics - Anfänger-Themen 9
D importieren eigener Klassen Java Basics - Anfänger-Themen 12
W Wo ist der Wurm in meinem Grundverständnis von Klassen? Java Basics - Anfänger-Themen 22
S Daten/Klassen/Packages richtig updaten!? Java Basics - Anfänger-Themen 2
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
elsaaaaaa Wochentag als String ausgeben mit JDK Klassen Java Basics - Anfänger-Themen 6
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
Z Mehtode bei Start des Programms ausführen (Klassen übergreifend) Java Basics - Anfänger-Themen 12
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
TimoN11 Java Klassen Global einbinden Java Basics - Anfänger-Themen 1
B Inventar als einzelne Klassen anlegen? Java Basics - Anfänger-Themen 12
G Java Klassen und Instanzmethoden Java Basics - Anfänger-Themen 15
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
S Klassen instanziieren und verwenden von Getter und Setter Java Basics - Anfänger-Themen 4
B Variablen Variablen übertragen ohne Klassen Java Basics - Anfänger-Themen 5
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
H Methoden in großen Klassen gruppieren oder auslagern? Java Basics - Anfänger-Themen 10
G Abstrakte Klassen Java Basics - Anfänger-Themen 11
Y Klassen Klassen und Objekte Java Basics - Anfänger-Themen 3
Y Klassen Klassen und Objekte mit set und get Java Basics - Anfänger-Themen 0
A Generischen Klassen Java Basics - Anfänger-Themen 8
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
J 2 klassen benutzen Java Basics - Anfänger-Themen 5
A Klassen und methoden Java Basics - Anfänger-Themen 15
A Bankweverwaltung mit Klassen und Methoden Java Basics - Anfänger-Themen 14
J Klassen Problem Java Basics - Anfänger-Themen 8
I Java Klassen "Graphics" und "MouseEvent" kombinieren Java Basics - Anfänger-Themen 7
I Klassen als Datentyp nutzen? Java Basics - Anfänger-Themen 11
M Aufsplitten von Methoden in andere Klassen Java Basics - Anfänger-Themen 2
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
hello_autumn Klassen Anzahl sowie die Anzahl der Junit Tests ermitteln? Java Basics - Anfänger-Themen 8
A Auf Eigenschaften von Objekten anderer Klassen zugreifen Java Basics - Anfänger-Themen 5
F Klassen und Pakete Projektübergreifend (Eclipse) Java Basics - Anfänger-Themen 6
V_Fynn03 Klassen Überweisungen tätigen und einzahlen mit 2 Klassen Java Basics - Anfänger-Themen 1
W Abarbeitungsreihenfolge Anonyme Klassen Java Basics - Anfänger-Themen 2
V_Fynn03 Bruchrechner programmieren (2 Klassen) Java Basics - Anfänger-Themen 9
D OOP- Eine Klasse in mehrere Klassen aufteilen Java Basics - Anfänger-Themen 7
J Problem mit Array: 2 Klassen Java Basics - Anfänger-Themen 2
W Frage zu anonymen Klassen Java Basics - Anfänger-Themen 4
Curtis_MC Parameter-Übergabe bei Klassen und Methoden Java Basics - Anfänger-Themen 12
E Klassen implementieren Java Basics - Anfänger-Themen 94
T Interfaces in erbenden Klassen Java Basics - Anfänger-Themen 2
C Methoden/Klassen Übergabewerte Java Basics - Anfänger-Themen 8
C Java Klassen/Methoden/Übergabeparameter Java Basics - Anfänger-Themen 4
L Wie geht man bei mehreren Action Klassen vor? Java Basics - Anfänger-Themen 0
P Datentypen, Klassen, Operatoren, Wrapperklassen Java Basics - Anfänger-Themen 2
L Wie teilt man ein Programm in vernünftige Klassen ein? Java Basics - Anfänger-Themen 10
T Klassen Denkfehler im Klassen "dynamisch" instanzieren? Java Basics - Anfänger-Themen 4
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
A Methode, Klassen Java Basics - Anfänger-Themen 3
B UML Klassen Diagramm zu Java Code Programmieren und ausführen Java Basics - Anfänger-Themen 21
J Zwei Klassen die sich gegenseitig referenzieren - Bad practice? Java Basics - Anfänger-Themen 4
G Klassen und Objekte Java Basics - Anfänger-Themen 2
Java The Hutt SetWerte über verschiedene Klassen Java Basics - Anfänger-Themen 16
D Klassen ausgeben Java Basics - Anfänger-Themen 2
H linkedlist generische klassen Java Basics - Anfänger-Themen 169
B CSS Klassen in eine Liste schreiben Java Basics - Anfänger-Themen 4
Queiser Nicht statische Klassen Java Basics - Anfänger-Themen 6
neerual Klassen Wie rufe ich Klassen, die andere Klassen extenden in einer Test Unit auf? Java Basics - Anfänger-Themen 10
J Gleiche Methode in 2 verschiedenen Klassen - Lösung ? Java Basics - Anfänger-Themen 8
G Refactoring von mehreren identischen Klassen Java Basics - Anfänger-Themen 36
O Wrapper Klassen Java Basics - Anfänger-Themen 6
CptK Best Practice Klassendiagramm aus fertigen Klassen erstellen lassen Java Basics - Anfänger-Themen 2
R OOP Instanzierung in verschiedenen Klassen Java Basics - Anfänger-Themen 8
N Project layout eclipse ( seperate ordner für klassen ? ) Java Basics - Anfänger-Themen 1
B Vererbung Abgeleitete Klassen Bestimmter Typ zuweisen Java Basics - Anfänger-Themen 2
E Best Practice Jar-file mit zwei Klassen und externer Bibliothek über Konsole erzeugen Java Basics - Anfänger-Themen 13

Ähnliche Java Themen

Neue Themen


Oben