OOP Objektorientierte Frage

student20

Mitglied
Hi, erstmal.
Bin neu hier, lese zwar schon eine Weile mit, aber hatte mich bis jetzt noch nicht angemeldet :D , ist ja als student trotzdem recht interessant ;). Nun hab ich aber auch selber eine Frage :D.

Und zwar habe ich die Aufgabe "Dokumente" in einem "Drucker" zu Verwalten. Dabei geht es nicht darum tatsächlig zu drucken, sondern lediglich um die Objektorientierung. Ich habe nun eine abstrakte Klasse "Dokument" von der die jeweiligen Klassen wie z.B Text,Tabelle ,Bild erben und die Klasse "Drucker" in der die Dateien gedruckt werden. Nun wird ja ein Bild quasi anders als ein Text gedruckt.

Mein ansatz war, ich erstelle die Methode print(Dokument a) in der Klasse "Drucker", mit der jeweils geschaut wird um welches Dokument es sich handelt und rufe daraufhin die richtigen Druckmethoden auf (die auch in der Klasse Drucker sind). Beispiel :

print ( Dokument a )
{
if(a.instanceof Bild)
printBild();
.....
}

Nun haben viele andere den Ansatz in die Klasse "Dokument" eine abstrakte Methode print() zu erstellen, in der das richtige Verhalten in den Subklassen ausdefiniert wird, und dann quasi Polymorphismus im Drucker mit der Methode :

print(Dokument a)
{
a.print();
}

ausnutzen. Die Frage die sich nun jedoch stellt, ist es Objektorientiert korrekt, eine Methode "print" in der Datei selber zu erstellen ? Ich meine ein Dokument kann sich ja quasi nicht selber drucken und hat doch auch keine Ahnung davon wie es gedruckt wird oder ? Was wäre bei sowas denn im Sinne der Objektorientierung korrekt ?

Danke für die Antworten :)
 
Zuletzt bearbeitet:

Landei

Top Contributor
Erst einmal herzlich willkommen, und Glückwunsch zur Wiederentdeckung des dynamischen Dispatchs (denn genau das ist deine zweite Lösung).

Deine Vermutung ist korrekt, ein Dokument sollte eigentlich nichts über den eigenen Druck wissen. Es gibt mehrere Möglichkeiten, das zu Problem lösen, z.B. über eine Art Repository:

Java:
interface DocumentPrint {
    public void print(Document d);
}

//z.B. statisch in Drucker
Map<Class<? extends Document>, DocumentPrint> repository = new HashMap<Class<? extends Document>, DocumentPrint>()

//Repository muss natürlich vorher gefüllt werden
//TextDocumentPrint implementiert DocumentPrint
repository.put(Text.class, new TextDocumentPrint());
...

print ( Dokument a ) {
   DocumentPrint dp = repository.get(a.getClass());
   if (dp == null)
       throw new IllegalArgumentException("Keine passende Druckmethode gefunden");
   dp.print(a);
}

Natürlich ist das nur eine von vielen Möglichkeiten, und dazu nur ein ganz grober Entwurf (mit einigen Problemen, z.B. würde eine Unterklasse von Text nicht erkannt).
 

timbeau

Gesperrter Benutzer
Ich sehe da 2 Seiten. Die eine ist die, dass ein Objekt keine Logik implementieren soll, andererseits kann der Drucker ja eventuell garnicht alle Objekte kennen die er mal drucken soll.

Wie läuft das eigentlich praktisch? Hat jedes Programm mit Druckfunktion eine Methode die einen Stream zum Drucker schickt und der haut alles stumpf aufs Papier?
 

student20

Mitglied
Die erste Idee sieht auf jedenfall gut aus ;) , ich schaus mir mal genauer an und versuchs mal damit :)

Also das mit den 2 Seiten war eben auch mein Problem. Würde es in der Praxis so aussehen, dass halt nur ein Bytestream an den Drucker gesendet werden würde , wäre es ja im endeffekt OOP korrekt wenn man eine Methode erstellt die diesen "DruckByteStream" wiedergibt, welches dann der Drucker verwendet. Welches wahrscheinlich der Ansatz der Idee die print Methode in die jeweiligen Dokumente zu schreiben ist.
 
Zuletzt bearbeitet:

timbeau

Gesperrter Benutzer
Im praktischen Fall weiß ein Bild auf keinen Fall wie es zu drucken ist. Das weiß entweder die Anwendung mit der du dein Bild öffnest oder der Drucker.

Ich finde auf anhieb auch nichts was das näher erklären würde. Hat jemand vielleicht was hierzu, würde mich mal interessieren.
 

Dit_

Bekanntes Mitglied
hi
ich bin der Meinung dass die methode print() in die Klasse Document gehoert. Ich glaube das hat auch was mit Kapselung zu tun.
Alle konkreten Klassen des Typs Document wissen wie sie sich zu "printen" haben, da sie ja auch die Informationen direkt zur Verfügung haben.

Man könnte vielleicht noch als Parameter Drucker uebergeben.
Java:
public abstract class Document {

	
	public abstract void print(Printer p);
	
}

Ich kenne das aus dem Buch Entwurfsmuster da wird zum Beispiel jedem Glyph(zb in Word-Dokument ein Text, Bild, Tabelle) ein Fenster-Objekt übergeben

Java:
void paint(Window window);

Anders ausgedrückt:
Ein Dokument sagt dem Drucker wie er gedruck werden soll (wenn Document überhaupt Printable ist :) ).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Rechnen mit Brüchen - objektorientierte Programmierung Java Basics - Anfänger-Themen 18
D Objektorientierte Programmierung Java Basics - Anfänger-Themen 13
Q Objektorientierte Programmierung Java Basics - Anfänger-Themen 17
T Objektorientierte Programmierung - Kein Plan wieso das nicht funktioniert! Java Basics - Anfänger-Themen 6
B Java Objektorientierte Datenbank - Assoziation Hilfe Java Basics - Anfänger-Themen 4
N Objektorientierte Programmierung: Erben von 2 Klassen - wie ist korrekte Vorgehensweise? Java Basics - Anfänger-Themen 16
W objektorientierte Programmierung Java Basics - Anfänger-Themen 25
W objektorientierte Programmierung - String in andere Klasse übergeben Java Basics - Anfänger-Themen 13
T Objektorientierte Programmierung, わからない です Java Basics - Anfänger-Themen 6
S Objektorientierte Programmierung Java Basics - Anfänger-Themen 21
C Objektorientierte Programmierung Java Basics - Anfänger-Themen 11
X Objektorientierte Java Programmierung - 3 Fragen zum Code Java Basics - Anfänger-Themen 5
M objektorientierte programmierung Java Basics - Anfänger-Themen 5
J Objektorientierte Programmierung Java Basics - Anfänger-Themen 5
Zrebna Frage zu Test-Driven Development (TDD) Java Basics - Anfänger-Themen 3
I Frage Thymeleaf -> Fehler ignorieren und mit "" ersetzen? Java Basics - Anfänger-Themen 15
I Frage Thymeleaf -> Prefix / Suffix ändern? Java Basics - Anfänger-Themen 11
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4
T Frage zu Parse Java Basics - Anfänger-Themen 2
H Frage an die Profis Java Basics - Anfänger-Themen 4
J Eine konzeptionelle Frage zu OOP Java Basics - Anfänger-Themen 3
P Frage zu Rekursion und Backtracking Java Basics - Anfänger-Themen 2
H Frage zur Ausgabe Java Basics - Anfänger-Themen 4
H Frage zu arithmetischen Operationen Java Basics - Anfänger-Themen 20
F Kurze Frage zu replace() Java Basics - Anfänger-Themen 19
JavaSchmecktLecker Polymorphie Frage zur Methodenüberschreibung Java Basics - Anfänger-Themen 21
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
B Erste Schritte Frage zu Instanzierung und Referenzen Java Basics - Anfänger-Themen 8
DoubleM Runtime.getRuntime().exec Frage Java Basics - Anfänger-Themen 2
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
O Frage: Formaler Typbezeichner? Java Basics - Anfänger-Themen 3
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
N Spezielle frage zum Comparator Java Basics - Anfänger-Themen 6
L Frage zum Array Java Basics - Anfänger-Themen 1
A Frage zum UML Design Java Basics - Anfänger-Themen 1
I Hilfe bei Klausur Frage Java Basics - Anfänger-Themen 8
izoards Drucken Frage zu FAQ Beitrag Java Basics - Anfänger-Themen 2
J Frage zu meinem Code (OOP) Java Basics - Anfänger-Themen 4
sserio Split() -> Regex Frage. Java Basics - Anfänger-Themen 7
A OCA Study Guide: 2. Frage aus Kapitel 3 Java Basics - Anfänger-Themen 9
sserio Date Library Frage Java Basics - Anfänger-Themen 9
Max246Sch Frage zu Währungsrechner Code Java Basics - Anfänger-Themen 2
sserio Frage zu HashMaps Java Basics - Anfänger-Themen 20
sserio Frage zu Threading - Multithreading Java Basics - Anfänger-Themen 2
sserio Frage zu Lambda Ausdrücken Java Basics - Anfänger-Themen 7
sserio Frage zu BigInteger Java Basics - Anfänger-Themen 1
D Frage bzgl. Enum-Handhabung Java Basics - Anfänger-Themen 16
xxx12 Frage Java Basics - Anfänger-Themen 2
I Generelle Frage zu Mikroservices (Spring Boot?), Docker... Java Basics - Anfänger-Themen 7
R Frage zu Methoden (Rückgabewert u. ohne.) Java Basics - Anfänger-Themen 2
A Frage zur programmierung Java Basics - Anfänger-Themen 12
M Frage zur Methode split der Klasse String Java Basics - Anfänger-Themen 32
R Input/Output Frage zu Java IO Java Basics - Anfänger-Themen 6
M Frage zu printWriter Java Basics - Anfänger-Themen 5
C Frage zu OLSMultipleLinearRegression Java Basics - Anfänger-Themen 31
KogoroMori21 Frage zum Euklidischen Algorithmus Java Basics - Anfänger-Themen 11
S Verständnis-Frage zu einer HÜ? Java Basics - Anfänger-Themen 1
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
L Frage zur Ticket Maschine Java Basics - Anfänger-Themen 1
J Frage zu OOP-Klassendiagramm Java Basics - Anfänger-Themen 8
OSchriever Frage zu Compiler Java Basics - Anfänger-Themen 8
H Frage zu Throw Exception Java Basics - Anfänger-Themen 2
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
F Frage betreff Programmierbücher zu Lagerverwaltung als Konsolenprogramm Java Basics - Anfänger-Themen 3
dieter000 Kurze Frage kann mir ejmand kurz diesen Code erklären, bzw wie man die zeilen erklärt und so Java Basics - Anfänger-Themen 1
I String.split regex Frage Java Basics - Anfänger-Themen 2
N Best Practice Frage zum MVC-Pattern Java Basics - Anfänger-Themen 2
dieter000 Frage zu einem Beispiel... Java Basics - Anfänger-Themen 5
J Frage zum Loggen Java Basics - Anfänger-Themen 18
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
Zrebna Frage zum "Referenzen-konzept" in Java Java Basics - Anfänger-Themen 8
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
marcooooo Frage zu bestimmten Beispiel Java Basics - Anfänger-Themen 31
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
B Erste Schritte Learning Coding (!) Frage an erfahrene Programmierer. Java Basics - Anfänger-Themen 23
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
C Exception-Frage Java Basics - Anfänger-Themen 3
J Eine Frage zur Schreibweise == ? : Java Basics - Anfänger-Themen 3
S Frage des Designs Java Basics - Anfänger-Themen 1
JavaTalksToMe Extends/Implements Frage Java Basics - Anfänger-Themen 3
pkm Frage zu Servletfunktion Java Basics - Anfänger-Themen 0
B Frage zur Währungsumrechnung Java Basics - Anfänger-Themen 3
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
Kirby.exe Frage zur Verwendung von Interfaces Java Basics - Anfänger-Themen 6
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
L Wie frage ich ab, ob in einem Array, Werte doppelt vorkommen? Java Basics - Anfänger-Themen 4
D Frage zur IDE IntelliJ IDEA Java Basics - Anfänger-Themen 6
H Frage zum 2d Array Java Basics - Anfänger-Themen 1
N Frage zum Newton-Fraktal Java Basics - Anfänger-Themen 1
H Frage zu interfaces Java Basics - Anfänger-Themen 1
J Frage dazu Variablen klassenübergreifend zu verändern Java Basics - Anfänger-Themen 22
I Frage zu SkipList Java Basics - Anfänger-Themen 4
G Frage zu JScrollPane Java Basics - Anfänger-Themen 12
Kirby.exe Allgemeine Frage Java Basics - Anfänger-Themen 3
W Frage zu anonymen Klassen Java Basics - Anfänger-Themen 4
J Kleine Frage zu OOP Java Basics - Anfänger-Themen 371

Ähnliche Java Themen

Neue Themen


Oben