![]() |
Modell meines Infoprojekts in OOP
Liste der Anhänge anzeigen (Anzahl: 1)
Hiho,
vielen Dank nochmals für die Anregungen :mrgreen: für ein objektorientiertes Modell. Nach langem hin und her, habe ich probiert, Vererbung und Polymorphie (wenn auch nur einseitig) in einem Projekt zu demonstrieren. Im Anhang habe ich eine Skizze (sollte UML ähnlich sein *g*) erstellt. Kann ich die Skizze zur Vorstellung meiner Anwendung benutzen bzw. ist das Modell überhaupt sinnvoll? :angel2: PS: Ist mein erstes Modell mit Vererbung und dem Versuch, polymorphe Objekte zu erstellen. mfg devnull |
Re: Modell meines Infoprojekts in OOP
Sollte man die Eigenschaft männlich nicht eher der Person als dem Auto hinzufügen? :gruebel:
MfG freak |
Re: Modell meines Infoprojekts in OOP
Vorab : Ich hasse diese komischen Diagramme. :evil: Aber ist ja egal. Wenn sie Dir helfen, dann benutze sie eben.
Allerdings fällt mir da direkt eine Ungereimtheit auf, die nicht ins OOP-Konzept passt. Die Typen TMann und TFrau sind identisch. Die einzige Information, die den Unterschied ausmacht ist in dem Namen versteckt. Du hast nämlich das Geschlecht vergessen. 8) Da man auch die Typenvielfalt in Grenzen halten sollte, schlage ich vor besser einen Typ TMensch zu verwenden mit einem zusätzlichen Bool-Feld Geschlecht. Deine Vorgehensweise erzeugt unnötige Redundanzen und die sollte man von Anfang an vermeiden. Mit OOP ist das sogar noch wichtiger, als ohne !! Wie gesagt, wegen dieser Diagramme verstehe ich den Sinn des Restes sowieso nicht. :mrgreen: |
Re: Modell meines Infoprojekts in OOP
Oder du leitest TFrau von TRippe von TMann ab :mrgreen: ( konnt ich mir nicht verkneifen )
@Hansa. Er hat im Grunde ne Klasse TMensch, nur dass die TFahrer heisst und davon TMann bzw. TFrau abgeleitet. Das ist schon okay, denke ich. Aber wie freak4fun schon sagte: Ich kenne zwar "männliche" Autos. Aber das ist eher subjektiv, oder? ;) |
Re: Modell meines Infoprojekts in OOP
Vielen Dank für die schnellen Antworten :)
@freak4fun: Das Problem, das sich mir dabei stellt, ist, dass ich das Objekt "Fahrer" bei der Erzeugung des Objekts "Auto" erstelle. Ich muss also die Eigenschaft "maennlich" dem Auto übertragen, da ich sonst zu diesem Zeitpunkt nicht weiß, ob männlich oder weiblich :gruebel: @Hansa: Wenn ich nur eine Klasse TMensch habe, dann fehlt mir doch die Vererbung von Attributen der Klasse TFahrer auf die Nachfahren TMann und TFrau, oder? --> Ich benutze die Klassen zur Demonstration, oder ist das generell falsch? mfg devnull |
Re: Modell meines Infoprojekts in OOP
Zitat:
Dumme Frage: sollte es dem Auto eigentlich nicht egal sein, welches Geschlecht der Fahrer hat? Geschlecht also ab in TFahrer, TMann und TFrau fliegen raus (beide sind so wie sie da sind sinnlos), und wenn du TAuto erstellst, dann gib dem Ding halt noch einen Param in Constructor mit, um zu sagen welches Geschlecht der Fahrer hat. Der Constructor gibt den Bool dann an den Constructor von TFahrer weiter, und spaeter hat das Auto nicht mehr zu wissen, welches Geschlecht der Fahrer hat, fertig. Allerdings ist es schon eigenartig, einen Fahrer zu erstellen sobald man das Auto erstellt. IMO sollte das Auto ein Array von [0..Sitze-1] von TPerson haben, wobei Passagiere[0] automatisch der Fahrer ist. Sobald eine Person einsteigt setzt man das Element fuer den Sitz auf das entsprechende TPerson-Objekt, sobald jemand aussteigt gehts wieder auf nil. Fertig. So macht das ja auch keinen Sinn...ich weiss zwar wieviele Sitze ein Auto hat, aber ich hab nur Platz fuer einen Fahrer, der gar nicht aussteigen kann :gruebel: Greetz alcaeus |
Re: Modell meines Infoprojekts in OOP
Zitat:
Die Funktion Auto.Info liefert mir später dann einen "Informationsstring" zurück:
Delphi-Quellcode:
Damit wird eine nochmalige Fallunterscheidung unnötig, da TMann und TFrau die virtuellen Methoden von
function TAuto.Info: string; //Funktion in UAuto
result := 'Auto [ Fahrer('+[b]Fahrer.Info[/b]+'), ' //Informationen von TFahrer holen +inttostr(Sitze)+' Sitze, '+inttostr(Gewicht)+' kg ]'; TFahrer "überscheiben". Zitat:
mfg devnull |
Re: Modell meines Infoprojekts in OOP
Zitat:
Wie gesagt, die Unterscheidung m/w läßt sich einfach durch ein Bool-Feld abhaken. Dafür brauche ich keine OOP, sondern baue das direkt in TMensch ein. Dieser hat dann eine Schuhgröße usw. Von diesem TMensch leite ich nun TFahrer ab. Der braucht nämlich noch mehr, als das, was TMensch mitbringt. Der hat nicht nur eine Schuhgröße, die bereits in TMensch implementiert ist, sondern auch noch eine Führerscheinklasse. Dann auch noch ein weiteres Bool-Feld "Brillenträger" usw. Aber auch das alles hat mit dem Typ TAuto immer noch nichts zu tun ! Das sind völlig inkompatible Typen und Du mußt sie vollkommen trennen ! Auch die Sitzplätze sind für das Auto völlig uninteressant. Als Fahrgäste sind nur der Fahrer und die Beifahrer interessant. Das geht dann um TMensch und TFahrer. |
Re: Modell meines Infoprojekts in OOP
Liste der Anhänge anzeigen (Anzahl: 1)
Danke für deine Tipps. :coder2:
Ich hab probiert, die Klassen und das "UML"-Diagramm deinen Ausführungen anzupassen. Du hast natürlich recht, dass es dem Auto egal sein dürfte, wer sein Fahrer ist und was er/sie für Attribute hat... Hinweis zur Skizze: Ich erstell in der GUI ein Objekt der Klasse TAuto. Bei der Erzeugung einer Instanz von TAuto wird gleichzeitig ein Objekt Fahrer vom Typ TFahrer angelegt. Der Fahrer besitzt jetzt ein eindeutigen Unterschied von möglichen Beifahrern: Er besitzt auf jeden Fall einen Führerschein... **** PS: "Kleine" Frage noch: Da in der GUI jetzt nur noch das Objekt Auto (Instanz von TAuto) bekannt ist, kann ich ja nicht mehr direkt die Führerscheinklasse von TFahrer ermitteln. Ist es erlaubt, in der Klasse Auto (sie besitzt das Objekt Fahrer da im protected...) eine public-Methode namens "getFührerscheinklasse" einzurichten?
Delphi-Quellcode:
mfg
function TAuto.getFuehrerscheinklasse: string;
begin TFahrer(Fahrer).getfKlasse; end; devnull |
Re: Modell meines Infoprojekts in OOP
Das Auto sollte doch selbst wissen, welche Führerscheinklasse benötigt wird, um es fahren zu dürfen.
Wenn du wissen willst, welche Führerscheinklasse der Fahrer hat, dann solltest du schon direkt auf den Fahrer zugreifen über Auto.Fahrer.Führerscheinklasse |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz