Kurze Frage zu OOP

Java/CppProgrammer

Erfahrenes Mitglied
Hallo allerseits. Mal ne Frage zu eleganz , standart und wartbarkeit.
Wenn ich ne Klasse entwickle, die Membervariablen hat , ist es dann besser, wenn die Klasse eine Methode zum einlesen der Daten hat (also die dem Benutzer sagt "geben sie die zu prüfende Zahl ein" oder so), oder wenn man eine solche Methode nicht implimentiert, und statdessen im Programmtext ( also in der main Methode/ Funktion) eine Varible deklariert diese Abfragen lässt, und die Variable dem Konstruktor übergibt?

In meinen wintzel Projekten ist das zurzeit sicher egal , aber es ist imer besser sich gleich das richtige anzugewöhnen.
 
Zuletzt bearbeitet:
Java/CppProgrammer hat gesagt.:
Hallo allerseits. Mal ne Frage zu eleganz , standart und wartbarkeit.
Wenn ich ne Klasse entwickle, die Membervariablen hat , ist es dann besser, wenn die Klasse eine Methode zum einlesen der Daten hat (also die dem Benutzer sagt "geben sie die zu prüfende Zahl ein" oder so), oder wenn man eine solche Methode nicht implimentiert, und statdessen im Programmtext ( also in der main Methode/ Funktion) eine Varible deklariert diese Abfragen lässt, und die Variable dem Konstruktor übergibt?

In meinen wintzel Projekten ist das zurzeit sicher egal , aber es ist imer besser sich gleich das richtige anzugewöhnen.

Grundsätzlich ist es nicht gut IO mit Datenklassen zu kombinieren. Besser ist du verwendest eine Delegate Class die sämmtliche Operationen an eine UI Klasse weitergibt.
Dem Delegate sollte es egal sei wie die UI implementiert wird (ob web, ob GUI, ob Konsole) er muss nur wissen welche Methoden er auf der UI Implementationsklasse aufrufen darf und Daten in welcher Form er erhält.
Dieser Delegate könnte mit diesen Daten dann deine Datenklasse füllen.
 
Hallo.

Also ich hab an der FH eingebleut bekommen:
"OOP heisst, alles was sich nicht wehrt in eine eigene Methode zu packen; Ziel ist die 10-Zeilen-Main-Methode."...
Falls dir dieses Statement hilft... :D

Gruß, Niko
 
Christian Fein hat gesagt.:
Grundsätzlich ist es nicht gut IO mit Datenklassen zu kombinieren. Besser ist du verwendest eine Delegate Class die sämmtliche Operationen an eine UI Klasse weitergibt.
Dem Delegate sollte es egal sei wie die UI implementiert wird (ob web, ob GUI, ob Konsole) er muss nur wissen welche Methoden er auf der UI Implementationsklasse aufrufen darf und Daten in welcher Form er erhält.
Dieser Delegate könnte mit diesen Daten dann deine Datenklasse füllen.

Sorry, aber ich weiß nicht ganz was eine Delegate class ist.
So wie ich das verstanden hab ist das ne Klasse die man mit IO zufüllt. Klingt irgentwie unsauber. Oder sollte so eine Delegate Klasse noch mehr enthalten?
 
Java/CppProgrammer hat gesagt.:
Sorry, aber ich weiß nicht ganz was eine Delegate class ist.
So wie ich das verstanden hab ist das ne Klasse die man mit IO zufüllt. Klingt irgentwie unsauber. Oder sollte so eine Delegate Klasse noch mehr enthalten?

Nein das hast du falsch verstanden. Ein Delegate ist einfach eine Klasse die noch nicht weiss mit wem sie speziell in Kontakt tritt.
IO wird dann in einer Speziellen UserInterface klasse durchgeführt.

Code:
public interfaces IMyDataUI {
   public String proptUserName();
   public String proptEmailAdress();
}

class ConsoleUI implements IMyDataUI {
   public String promptUser() {
      // Hier auf die Konsole schreiben und einlesen und zurückgeben
   }
    ... // email ditto
}


class SwingUI implements IMyDataUI {
   public String promptUserName() {
      // z.b ein Dialog aufpoppen lassen der nach dem usernamen fragt und zurückgeben 
   }
}

public class MyDelegate() {
    public MyDelegate(IMyDataUI userInterface) {
          this.userInterface = userInterface;
     }
    public User createUser() {
        User user = new User(
          userInterface.promptUserName(),
          userInterface.propmtEmailAdress());
    }
}

Soll heissen MyDelegate ist es vollkommen Schnuppe ob er seine Daten von
der Konsole oder von der Swing GUI bekommt (oder andere User Interfaces).
Ihm ist nur wichtig das er sich darauf verlassen kann das er die Methode
promptUserName() aufrufen kann und diese ihm dann nachdem die IO durchgeführt
wurde, den Usernamen zurückliefert.

Das ermöglicht es das du so programmieren kannst das deine "vielleicht jetzt Konsolen basierte" Applikation später ohne viel Arbeit (einfach eine andere Implementation von
MyDataUI übergeben) andere User Interfaces wie z.b GUI oder eine JSP Seite oder
sonstwas handeln kann.

Dieser Code verhält sich modular und somit im Sinne der OOP.
 
An dieser Stelle wäre es nicht schlecht, sich einmal mit Design Patterns auseinander zu setzen. Als ersten Zugriff hab ich ein Uni-Skript gefunden:
http://www.inf.uos.de/kniesel/lehre/ws03/patterns/skript.html
Hier findest du eine Erklärung zu vielen wichtigen Design Patterns wie Factory, Singleton, Observer, Bridge, Builder, Composite, Visitor usw.
Im Handbuch der Java-Programmierung von Guido Krüger sind ebenfalls Quelltext-Beispiele zu ein paar Design Patterns zu finden. Diese Techniken sind wahrlich ein Hilfsmittel, wenn längere Quelltexte zu warten sind, deshalb früh übt sich...
 

Neue Beiträge

Zurück