Klassen Klassendesign

kaoZ

Top Contributor
Aloha, beim Versuch das Programm an dem ich mich zzt. versuche stehe ich an einer Stelle, an der ich mir gedanken darum mache wie Wart - und erweiterbar meine Anwendung später ist, ich lese mich dazu grade in das Buch Entwurfsmuster von Kopf bis Fuß ein. Nun habe ich eine kleine Verständnissfrage wie ich sowas auf meinen Code umsetzten könnte.

Angenommen ich habe eine Klasse Client, diese beinhaltet veränderliche Werte Getter/Setter die ich , der Wart und erweiterbarkeits halber gerne Kapseln würde, wäre dieser ansatz korrekt ?:


1. Veränderliche Werte aus der Klasse Client heraus, in einem Interface zusammenführen

Code:
Client.java
Superklasse | Definiert dann nuroch Instanzvariablen / implementiert das Interface

Code:
ClientController.java
das neu erstellte Interface mit gettern/setter usw.

2. Ich möchte jetzt zwischen Clients unterscheiden können, sprich BusinessClient und PrivateClient
also wollte ich dafür je eine Klasse erstellen die dann Client erweitern.

Code:
BusinessClient.java
Subklasse | extends Client
Code:
PrivateClient.java
Subklasse | extends Client

3. Nun möchte ich das die beiden Unterklassen ebenfalls auf die getter/setter Methoden zugriff haben

Wäre der folgende ansatz korrekt ?:

Java:
public class Client implements ClientController{

private String name,street,number,countryCode,location,phoneNumber,faxNumber;

//more code / + implementierte getter/setter und definiert diese !

}
Klasse mit main Methode:
Java:
public class Foo{

Client bClient,pClient;
JTextField edtOne;

public Foo(){ 

  edtOne = new JTextField();
  bClient = new BusinessClient(); 
  pClient = new PrivateClient();

  /*Zugriff auf die von Client implementierten , in ClientController 
  /*( oder dann BusinessController ) festgelegten getter/setter */

  bClient.setName(edtOne.getText());  // Beispiel !! | Später dann in der actionPerformed methode

}

}
Da ja die Subklassen die in Client festgelegten Instanzvariablen erben , könnte ich wenn ich ein neues Objekt einer Subklasse erstelle ebenfalls auf getter/setter zugreifen die von Client implementiert werden ?

4. Wenn ich nun die Daten von BusinessClient und PrivateClient z.B per FileWriter in eine Datei schreiben möchte (Methode dazu wird in "ControllerClient" definiert), allerdings unterscheiden wollen würde, wohin die Daten geschrieben werden , müsste ich ja "Controller" für die 2 Unterklassen erstellen, die die Methoden des Interfaces so überschreiben wie ich es benötigen würde, wie würde dieser Ansatz aussehen?

über 2 "Controllerklassen" die das Interface Implementieren und dessen Methoden überschreiben, und ich übergebe dann im Konstruktor der Unterklassen jeweils den Controller ?:rtfm:

Das wäre zzt. glaube ich mein Hauptproblem, wie sehe die Implementierung in der Klasse mit
Code:
main()
Methode aus, bzw. wie sehe die Implementierung in Client dann aus ? Vielleicht jemand nen Beispiel für mich ?
 

MrClave

Bekanntes Mitglied
Statt einen langen, unverständlichen Text zu posten, wäre ein UML Klassendiagram mMn eher angebracht.
Oder ggf. auch den relevanten Code, bzw. die relevanten Klassen posten.
Das ist einfacher und besser zu verstehen.

Wenn Client eine Superklasse ist, dann solltest du sie als Abstrakt deklarieren und die Attribute ebenfalls.

Falls ich es richtig verstanden habe, willst du getter und setter in ein Interface verfrachten?
Das wäre mMn falsch. Ein Interface sollte nicht benutzt werden, nur um die Erzeugung von Methoden zu erzwingen, und schon gar nicht für getter und setter. Manche mögen es zwar machen, aber ich halte es für schlechten Stil.

1. Veränderliche Werte aus der Klasse Client heraus, in einem Interface zusammenführen

Ein interface kann nur Konstanten halten. Mit Veränderung ist da also nicht viel.

Da ja die Subklassen die in Client festgelegten Instanzvariablen erben , könnte ich wenn ich ein neues Objekt einer Subklasse erstelle ebenfalls auf getter/setter zugreifen die von Client implementiert werden ?

Du kannst auf alles zugreifen, was nicht private ist.
Hat weniger mit Design zu tun, als mit Polymorphie (<- Grundlegend für Designs)

4. Wenn ich nun die Daten von BusinessClient und PrivateClient z.B per FileWriter in eine Datei schreiben möchte (Methode dazu wird in "ControllerClient" definiert), allerdings unterscheiden wollen würde, wohin die Daten geschrieben werden , müsste ich ja "Controller" für die 2 Unterklassen erstellen, die die Methoden des Interfaces so überschreiben wie ich es benötigen würde, wie würde dieser Ansatz aussehen?

Du kannst die Methode zum Speichern jeder Zeit überschreiben in deinen Subklassen.

Du scheinst noch defizite in Sachen Polymorphie zu haben.
Das solltest du definitiv nachholen, bevor du mit Design Patterns anfängst
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Zuerst einmal Danke für den Lösungsansatz mit der Abstrakten Klasse, so werde ich die Struktur letztendlich aufbauen.

Das mit dem langen unverständlichen text , war aber anscheinend trotzdem noch verständlich genug um die Antworten zu erhalten die mich schließlich zur lösung meines Problems führen :bae:

nächstens mal mit UML und Pseudocode ;)

Grazie
 

Ähnliche Java Themen

Neue Themen


Oben