AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Modell meines Infoprojekts in OOP

Ein Thema von devnull · begonnen am 16. Jun 2005 · letzter Beitrag vom 16. Jun 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von devnull
devnull

Registriert seit: 5. Okt 2003
362 Beiträge
 
Delphi 7 Personal
 
#1

Modell meines Infoprojekts in OOP

  Alt 16. Jun 2005, 13:30
Hiho,
vielen Dank nochmals für die Anregungen 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?

PS: Ist mein erstes Modell mit Vererbung und dem Versuch, polymorphe Objekte zu erstellen.

mfg
devnull
Miniaturansicht angehängter Grafiken
_uml__391.jpg  
-- Never change a running system --
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

Re: Modell meines Infoprojekts in OOP

  Alt 16. Jun 2005, 13:33
Sollte man die Eigenschaft männlich nicht eher der Person als dem Auto hinzufügen?

MfG
freak
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: Modell meines Infoprojekts in OOP

  Alt 16. Jun 2005, 13:42
Vorab : Ich hasse diese komischen Diagramme. 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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Treffnix
Treffnix

Registriert seit: 25. Jun 2003
Ort: AC
740 Beiträge
 
Delphi 7 Professional
 
#4

Re: Modell meines Infoprojekts in OOP

  Alt 16. Jun 2005, 13:49
Oder du leitest TFrau von TRippe von TMann ab ( 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?
  Mit Zitat antworten Zitat
Benutzerbild von devnull
devnull

Registriert seit: 5. Okt 2003
362 Beiträge
 
Delphi 7 Personal
 
#5

Re: Modell meines Infoprojekts in OOP

  Alt 16. Jun 2005, 13:53
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

@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
-- Never change a running system --
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#6

Re: Modell meines Infoprojekts in OOP

  Alt 16. Jun 2005, 14:02
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
Jetzt bin ich dran mit gruebeln

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

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von devnull
devnull

Registriert seit: 5. Okt 2003
362 Beiträge
 
Delphi 7 Personal
 
#7

Re: Modell meines Infoprojekts in OOP

  Alt 16. Jun 2005, 14:17
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 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 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
Stimmt


mfg
devnull
-- Never change a running system --
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: Modell meines Infoprojekts in OOP

  Alt 16. Jun 2005, 19:34
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. 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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von devnull
devnull

Registriert seit: 5. Okt 2003
362 Beiträge
 
Delphi 7 Personal
 
#9

Re: Modell meines Infoprojekts in OOP

  Alt 16. Jun 2005, 20:39
Danke für deine Tipps.

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
Miniaturansicht angehängter Grafiken
_uml2__578.jpg  
-- Never change a running system --
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Modell meines Infoprojekts in OOP

  Alt 16. Jun 2005, 20:48
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
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 Uhr.
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