Hi,
Ein wichtiger Aspekt der Objektorientierung ist allerdings auch die Abstraktion und vereinfachung durch Kapselung. Die einzelnen "Codebrocken" werden kleiner und gekaspelter. Gerade bei dem Display müsstest du dich im Taschenrechnercode nicht mehr darum kümmern, wie das angezeigt wird (könnte ja beispielsweise ein sehr aufwändiger zeichenprozess sein, der dem ganzen ein grünlich-LCD-leuchtendes aussehen verleiht. Er sagt dem Display nur, was es anzeigen soll, das Display kümmert sich um den Rest.
Könntest du mir sagen, welche Beziehung du dann zwischen Rechner und Display machen würdest?
Abstraktion ist doch nur bei Vererbung, oder? Macht es Sinn, die ganze Rechner-Klasse auf das Display zu vererben?
Oder lieber eine gemeinsame Super-Klasse, von der dann beide das Ergebnis erben? aber wie könnte ich dann eine Beziehung zwischen den beiden herstellen?
Die dritte Möglichkeit wäre eine (gerichtete) Assotiation, wenn ich z.B. im Display in ein Attribut eine Referenz auf das Rechner-Objekt speichere.
Du siehst, theoretisch hab ich schon Ahnung, welche Möglichkeiten es gibt, aber praktisch hab ich null Plan. ;-)
Außerdem könnte ich verschiedene Displays machen, die alle das gleiche tun, das eine allerdings eine "simple" darstellung hat, während andere verschieden verschnörkelt aussehen. Wie das Display dann in deinem Taschenrechner aussieht hängt davon ab, welches Display du initialisierst.
Das leuchtet mir ein. Nur wie mach ich die Beziehung am besten?
Die Kapselung würde in dem Fall also auch für eine gute Austauschbarkeit sorgen.
Kapselung heisst in diesem Fall nur die Rechtevergabe mit Public, Private oder Protected, oder?
Wobei Protected nur bei einer Vererbung Sinn macht, oder?
Hoffe ich bin nicht zu nervig, aber ich würde das Prinzip einfach gern mal verstehen.
mfG,
steckl