Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Modell meines Infoprojekts in OOP (https://www.delphipraxis.net/47795-modell-meines-infoprojekts-oop.html)

devnull 16. Jun 2005 12:30


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

freak4fun 16. Jun 2005 12:33

Re: Modell meines Infoprojekts in OOP
 
Sollte man die Eigenschaft männlich nicht eher der Person als dem Auto hinzufügen? :gruebel:

MfG
freak

Hansa 16. Jun 2005 12:42

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:

Treffnix 16. Jun 2005 12:49

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? ;)

devnull 16. Jun 2005 12:53

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

alcaeus 16. Jun 2005 13:02

Re: Modell meines Infoprojekts in OOP
 
Zitat:

Zitat von devnull
@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:

Jetzt bin ich dran mit gruebeln :gruebel: :stupid:

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

devnull 16. Jun 2005 13:17

Re: Modell meines Infoprojekts in OOP
 
Zitat:

Zitat von alcaeus
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.

So hab ich das ja gemacht :wink: Die Fallunterscheidung weiblich oder männlich mach ich nur ein einziges mal: nämlich bei der Erzeugung des Objekts Auto (Bool-Parameter wird dem Konstruktor übergeben). Die beiden Klassen TMann und TFrau verwende ich nur, um die Vererbungsmechanismen besser erklären zu könen (tatsächlich sind sie sinnlos, weil vollkommen identisch).

Die Funktion Auto.Info liefert mir später dann einen "Informationsstring" zurück:
Delphi-Quellcode:
function TAuto.Info: string;  //Funktion in UAuto
  result := 'Auto [ Fahrer('+[b]Fahrer.Info[/b]+'), '    //Informationen von TFahrer holen
           +inttostr(Sitze)+' Sitze, '+inttostr(Gewicht)+' kg ]';
Damit wird eine nochmalige Fallunterscheidung unnötig, da TMann und TFrau die virtuellen Methoden von
TFahrer "überscheiben".


Zitat:

Zitat von alcaeus
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:

Stimmt :wall:


mfg
devnull

Hansa 16. Jun 2005 18:34

Re: Modell meines Infoprojekts in OOP
 
Zitat:

Zitat von devnull
@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?

Ja, das ist generell falsch ! Dem Auto ist es egal, ob der/die Fahrer/in z.B. Oberweite 105 hat. :mrgreen: Das Ganze ist auch ein allgemeines Denkproblem mit OOP. Außerdem ist es etwas abstrakt. Die Programm-Logik ist da äußerst wichtig.

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.

devnull 16. Jun 2005 19:39

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:
function TAuto.getFuehrerscheinklasse: string;
begin
  TFahrer(Fahrer).getfKlasse;
end;
mfg
devnull

leddl 16. Jun 2005 19:48

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 23:00 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz