Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Vererbung, Aggregation, Assoziation? (https://www.delphipraxis.net/93333-vererbung-aggregation-assoziation.html)

mo_greene 4. Jun 2007 14:06


Vererbung, Aggregation, Assoziation?
 
Hallo,
ich wollte mal fragen ob mir jemand den gefallen tun kann und direkt im folgendem Programm zeigen kann wo Vererbungen vorliegen, wo Aggregationen und wo Assoziationen? Wäre ich euch dankbar!

Delphi-Quellcode:
unit View_Control;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, uModell;

type
  TView = class(TForm)
    GroessePnl: TPanel;
    GewichtPnl: TPanel;
    GroesseEdt: TEdit;
    GewichtEdt: TEdit;
    BMIPnl: TPanel;
    AusgabePnl: TPanel;
    RechneBtn: TButton;
    EndeBtn: TButton;
    procedure EndeBtnClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure RechneBtnClick(Sender: TObject);
    procedure Datenaktualisieren;
    procedure Maskeaktualisieren;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  View: TView;
  Modell: TModell;
  a : integer;

implementation

{$R *.dfm}

procedure TView.EndeBtnClick(Sender: TObject);
begin
 close;
end;

procedure TView.FormCreate(Sender: TObject);
begin
 Modell := TModell.Create;
end;

procedure TView.Datenaktualisieren;
begin
    Modell.setGroesse(strtoint(GroesseEdt.Text));
    Modell.setGewicht(strtoint(GewichtEdt.Text));
end;

procedure TView.Maskeaktualisieren;
begin
    AusgabePnl.Caption := inttostr(Modell.getBMI);
end;

procedure TView.RechneBtnClick(Sender: TObject);
begin
   Datenaktualisieren;
   Maskeaktualisieren;
end;

end.

Mfg David

leddl 4. Jun 2007 14:22

Re: Vererbung, Aggregation, Assoziation?
 
:gruebel: Klingt mir irgendwie nach ner Hausaufgabe :zwinker:

mo_greene 4. Jun 2007 14:30

Re: Vererbung, Aggregation, Assoziation?
 
nee :mrgreen: , Vorbereitung auf eine Klausur! :zwinker:

WoTo 4. Jun 2007 14:39

Re: Vererbung, Aggregation, Assoziation?
 
Hallo David,
da ich im Moment kein UML-Buch zur Hand habe, muß ich aus meiner Erinnerung dir antworten:

Vererbung:
TView erbt von TForm

Aggregationen:
GroessePnl: TPanel;
GewichtPnl: TPanel;
GroesseEdt: TEdit;
GewichtEdt: TEdit;
BMIPnl: TPanel;
AusgabePnl: TPanel;
RechneBtn: TButton;
EndeBtn: TButton;

Diese Objekte leben nicht weiter, wenn TView gelöscht wird (FreeAndNil). Daher Aggregationen.

Assoziationen
Modell müßte eine Assoziation zu TView sein, da dies rein theoretisch weiterleben würde, auch wenn TView gelöscht wird.

Ich hoffe, daß dies richtig ist. Ansonsten bei Google mit dem Stichwort UML suchen.

Gruß,
Woto

Elvis 4. Jun 2007 14:57

Re: Vererbung, Aggregation, Assoziation?
 
Bitte, bitte, mit Zucker oben drauf...
... sage nicht, euer Info-Lehrer hat sich solch einen Bratzen ausgedacht... :duck:

Assoziation kommt dort praktisch nicht vor, weil du Modell in eine globale Variable schreibst.
Das ist so wie es da geschrieben ist, absolut falsch.
Du kannst nicht im Konstruktor von TView für jede Instanz eine globale Variable besetzen, die eine globale Variable bedeutet, dass bei der nächsten Instanz von TView, dort eine neue Instanz drin steht.
Somit würden pötzlich beide neuen Views mit dem gleichen neuen Modell arbeiten und die alte Modell-Instanz ist ein Speicherleck!

Es macht auch maximal im Document/View Pattern Sinn das Modell mit/von dem View zu erzegen.
Normalerweise will man ja möglichst austauschbare Views für das gleiche Modell haben, right?

Hier kommen wir zur ersten Assoziation:
Du könntest TView eine öffentliche Eigenschaft "Modell" geben.
Wenn man nun einen View anlegt, kann man ihm dann die Daten zuweisen, es können also auch 2 Views auf den gleichen Daten arbeiten, wenn erwünscht.
Der View ist ja nicht dein Programm, er implementiert ja nur begrenzt Logik (nur die, die direkt mit User-interaktionen zusammenhängen also keine Geschäftslogik darstellen) er sollte also mit einer bestehenden Instanz des Modells arbeiten, es aber weder anlegen noch vernichten.
Das widerspräche der ganzen Idee hinter MVP oder MVC: nämlich Austauschbarkeit & Fokus auf Teilaufgaben.

mo_greene 4. Jun 2007 19:00

Re: Vererbung, Aggregation, Assoziation?
 
Wäre es dann so richtig?

Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, uModell;

type
  TView = class(TForm)
    GroessePnl: TPanel;
    GewichtPnl: TPanel;
    GroesseEdt: TEdit;
    GewichtEdt: TEdit;
    BMIPnl: TPanel;
    AusgabePnl: TPanel;
    RechneBtn: TButton;
    EndeBtn: TButton;
    procedure EndeBtnClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure RechneBtnClick(Sender: TObject);
    procedure Datenaktualisieren;
    procedure Maskeaktualisieren;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  View: TView;
  a : integer;
Ich habe Modell nicht mehr als Variable deklariert! So in Ordnung?


P.S. Das Programm funktioniert trotzdem :mrgreen: Aber trotzdem danke für deine Hilfe :zwinker:

mo_greene 6. Jun 2007 18:54

Re: Vererbung, Aggregation, Assoziation?
 
wäre nett, wenn jemand antworten könnte :oops: vielen, vielen dank :zwinker:

mkinzler 6. Jun 2007 19:54

Re: Vererbung, Aggregation, Assoziation?
 
Versuche du doch die Frage zu beantworten und wir sagen dir dann, ob du richtig liegst. Ist auch besser als Klausurvorbereitung

mo_greene 6. Jun 2007 20:23

Re: Vererbung, Aggregation, Assoziation?
 
ja stimmt schon! ich denke es sollte so richtig sein wie ich es zuletzt gepostet habe! :wink:

Jelly 6. Jun 2007 21:20

Re: Vererbung, Aggregation, Assoziation?
 
Du hast einen neuen UML Begriff erfunden: Destruktion
weil du nun überhaupt kein Modell mehr hast :mrgreen:

mo_greene 7. Jun 2007 20:31

Re: Vererbung, Aggregation, Assoziation?
 
ich hab dieses doch in die uses eingebunden? :gruebel:

Jelly 7. Jun 2007 20:34

Re: Vererbung, Aggregation, Assoziation?
 
Das will doch aber nichts heissen. Du brauchst schon eine Instanz von deiner Klasse.

mo_greene 8. Jun 2007 13:06

Re: Vererbung, Aggregation, Assoziation?
 
ok vielen dank! :zwinker:

ich wollte nochmal fragen, wo die vorteile von dem MVC (Model-View-Control) Konzept bestehen, abgesehen von der besseren Übersichtlichkeit und evtl. das leichtere "preediting"?

mo_greene 10. Jun 2007 16:30

Re: Vererbung, Aggregation, Assoziation?
 
Sind das die richtigen Definitionen für die Begriffe? Kann man noch was hinzufügen/ändern?

[Vererbung]
Je nachdem, in welcher Richtung man Ober- und Unterklassen untersucht, spricht man von
Spezialisierung:
ausgehend von der Oberklasse werden in der Unterklasse Spezialisierungen definiert

oder

Verallgemeinerung:
Gemeinsamkeiten von Unterklassen werden extrahiert und in einer Oberklasse zusammengefaßt.

[Assoziation]
Sie drückt das Verhältnis von zwei völlig selbständigen Objekten aus, die auf der gleichen Abstraktionsebene stehen und eigentlich nichts miteinander zu tun haben, aber unter bestimmten Gesichtspunkten in eine lose Kennt-Beziehung ('KNOWS') gebracht werden können.

[Aggregation]
ist der Sonderfall einer Assoziation (s.u.). Sie drückt ein starkes semantisches Verhältnis von zwei an sich selbständigen Objekten aus, von denen eines Teil des anderen ist ('IS-PART-OF').

Elvis 10. Jun 2007 16:34

Re: Vererbung, Aggregation, Assoziation?
 
Zitat:

Zitat von mo_greene
Sind das die richtigen Definitionen für die Begriffe? Kann man noch was hinzufügen/ändern?

Ist aber nur irgendwo her kopiert.
Zum Beispiel weißt du immer noch nicht was eine Beziehung oder Assoziation bedeutet.
Sonst hättest du die AV im anderen Thread nicht bekommen, oder hier keine globale Variable genommen. ;)

Also schaue was du nicht verstehst, komme dann hierher zurück und stelle spezifische Fragen.
Wir werden dir nicht die Hausaufgaben machen und auch keinen Text vorsetzen, den du auswendig lernen und in der Prüfung hohl runterlullen kannst.
Würde dir ja auch nicht wirklich weiterhelfen...

Jelly 10. Jun 2007 19:05

Re: Vererbung, Aggregation, Assoziation?
 
Robert hat Recht. Und damit auch alles verstanden wird, sollte Komposition auch noch erwähnt werden.

everdream 13. Mai 2008 17:03

Re: Vererbung, Aggregation, Assoziation?
 
Hallo liebe DP,
ich habe morgen meine mündliche Info-ABI-Prüfung und habe den ganzen Stoff durch, nur einen Punkt habe ich mir auf die Seite gelegt, weil ich ihn noch nicht ganz durchschaut habe. Es geht um die Kennt-Beziehung oder Assoziation.

Das vorliegende Programm ist ein Vokabeltrainer, der (natürlich) mit OOP umgesetzt wurde.

Dabei gibt es eine Klasse TVokKarte, die eine Liste vom Typ TSpeicherbareListe kennt.
Delphi-Quellcode:
unit mVokKartei; //Auszüge, Rechtschreibung und Formatierung korrigiert (mein Lehrer hat's damit nicht so...)
interface

uses
  SysUtils, Classes, Dialogs, StdCtrls, mListe, mVokabel;

type
  TVokKartei = class
  private
    Vok, neuVok: TVokabel; // Hat-Beziehung (Aggregation)
    KListe: TSpeicherbareListe; // Das Objekt, das gekannt wird, wird in der internen Zustandsvariablen KListe gespeichert.
  public
    constructor create(var Liste: TSpeicherbareListe); // Kennt-Beziehung (Assoziation)
    procedure Anzeigen(ListBox: TListbox);
    procedure SortEinfuegen(en, de: String);
    procedure ListeLoeschen;
  end;

implementation

constructor TVokKartei.create(var Liste: TSpeicherbareListe);
begin
  KListe:=Liste;
end;

//[...]
In den weiteren Prozeduren wird KListe benutzt.
Ich hätte jetzt gesagt, dass es sich um eine Hat-Beziehung handelt, da es ja ein Attribut von TVokKartei ist. Dass die Liste weiterlebt, wenn eine die Instanz von TVokKartei zerstört wird, ist mir klar, aber ist das der einzige Grund, weshalb es sich um eine andere Beziehung als die Aggregation handelt?

Phoenix 13. Mai 2008 17:31

Re: Vererbung, Aggregation, Assoziation?
 
Ohne jetzt aktuell allzutief in der Theorie zu stecken (meine Vorlesungen dazu sind schon ne Weile her und ich arbeite grad mehr als zu studieren :mrgreen:) würde ich sagen: Ja.

everdream 13. Mai 2008 17:40

Re: Vererbung, Aggregation, Assoziation?
 
Dann könnte im Prinzip jedes Attrubut, das von TObject abgeleitet ist, als Assoziation statt Aggregation vorliegen, wenn es noch irgendwo anders vorliegt/benutzt wird als in der Klasse, die das Attribut hat? Das ist mal wieder einfacher, als ich dachte...
OOP habe ich erst nach 8 Monaten Unterricht geschnallt, weil ich immer dachte, das wäre alles voll kompliziert und ich habe dementsprechend nicht geschnallt wie es funktioniert. Ich hoffe, mein Lehrer kann mir morgen ausnahmsweise mal vernünftig erklären, was ich zu tun habe!


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:04 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