KidMoritz schrieb:
> Ok, das Object Anzeigeinstrument mit seinen Eigenschaften,
> wie: mal abgesehen von den geometrischen Eigenschaften und das der
> Hintergrund kein bild sei
> - skaleneinteilung : min / max, Schrittweite,
Beschriftung, Strichlänge, wird jeder 5.te oder 10.te Strich länge
gemacht, ist die Skala linear oder in einem Kreisbogen angeordnet, etc.
etc.
> davon abhängig machen, ob ich diesen Zeiger noch an anderen Stellen >brauchen
kann
> und wie komplex dieser Zeiger werden wird.
>
> Wie komplex kann denn ein Zeiger sein?
> Mir faellt da jetzt nur ein: min/max-Stellung des Zeigers, Schrittweite
> und Methoden, wie:
> - inkrementieren/dekrementieren
Wie wird seine Anzeige realisiert?
Ist das eine Bitmap, die um einen Punkt gedreht wird, oder eine einfache
Linie. Vielleicht wird der auch als Polygonzug modelliert oder denk an
eine Kirchtumuhr, bei der der Zeiger verschnörkelt ist.
> Was heisst an anderer Stelle?
> Wenn ich 2 Anzeigen modellieren wollte?
Na, wenn ich zb einen Zeiger brauche, der auf einer Anzeige ähnlich der
Datums/Uhrzeit-Einstellung im iPhone nicht zu einem Drehinstrument
gehört.
> Wenn ich den Zeiger bewegen moechte, sollte ich ihn dann an die
> Schrittweite des Anzeigeobjektes "binden"?
Kommt drauf an. Von extern (also ausserhalb der Klasse) bewegt sowieso
keiner direkt den Zeiger, sondern das Objekt Auto gibt dem Objekt Tacho
den Auftrag 'Anzeige der Fahrgschwindigkeit von 50 km/h'. Wie der Tacho
das dann mit dem Zeiger realisiert, ist das Problem vom Tacho (also den
Anzeigeinstrument) und nicht das Problem des Autos. Und wenn der Tacho
festlegt (zb durch eine Konfigurationsvariable), dass er seinen Zeiger
nur auf ganzzahlige Vielfache von 5 km/h stellen will, dann macht das
das Anzeigeinstrument eben so.
> was ich damit meine ist, dass ich dem Zeiger quasi den Winkel oder die
> XY-Position an dem der Anzeigewert 50 steht uebergebe?
Ich würde das so machen, dass sich der Zeiger selbst darstellen kann.
Und zwar mit seinem Referenzpunkt (gemeinhin als Drehpunkt bekannt) an
einer bestimmten Position und von dort ausgehend in einem bestimmten
Winkel. (Ich würde dafür eine 2D-Transformationsmatrix nehmen, aber das
ist eine andere Geschichte)
Das Anzeigeinstrument hat dann die Aufgabe, den anzuzeigenden Wert
mithilfe seines Skalenobjekts in interne Werte zu überführen und an
seine mitwirkenden Einzelteile die entsprechenden Werte zu verteilen.
>>Ein Anzeigeinstrument HAT dann einen Zeiger als interne Strukturierung.
>
> Wie das gemeint kann ich mir vorstellen.
> Wie ist das programmiertechnisch zu sehen?
> Basisklasse->angeleitete Klasse?
Als Daumenregel
Wenn du umgangssprachlich sagst "IST EIN", dann ist das ein Hinweis für
Vererbung.
Wenn du umgangssprachlich sagst "HAT EIN", dann ist das ein Hinweis für
eine Member-Inklusion.
Also:
Ein Pkw IST EIN Auto, ein Lkw IST EIN Auto
1 | class Auto
|
2 | {
|
3 | };
|
4 |
|
5 | class Pkw : public Auto
|
6 | {
|
7 | }
|
8 |
|
9 | class Lkw : public Auto
|
10 | {
|
11 | }
|
Ein Auto HAT EINEN Motor
1 | class Auto
|
2 | {
|
3 |
|
4 | Motor motor_;
|
5 | };
|
6 |
|
7 | class Pkw : public Auto
|
8 | {
|
9 | }
|
10 |
|
11 | class Lkw : public Auto
|
12 | {
|
13 | }
|
Über den Weg der Vererbung erben damit Pkw und Lkw automatisch, dass sie
einen Motor haben.
Ganz falsch hingegen wäre
1 | class Auto : public Motor
|
2 | {
|
3 | }
|
denn ein Auto IST KEIN Motor, also ist Motor auch keine Basisklasse für
Auto. Aber: jedes Auto hat zb ein Lenkrad oder Sitze oder Türen oder
Spiegel. Autotüren zb HABEN wiederrum einen Türöffner (sie SIND aber
kein Türöffner) und oft auch ein Fenster. So ein Fenster HAT wiederrum
einen Fensterheber. Eine simple Kurbel IST zb so ein Fensterheber, aber
auch ein elektrischer Fensterheber IST EIN Fensterheber.