![]() |
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 |
Re: Vererbung, Aggregation, Assoziation?
:gruebel: Klingt mir irgendwie nach ner Hausaufgabe :zwinker:
|
Re: Vererbung, Aggregation, Assoziation?
nee :mrgreen: , Vorbereitung auf eine Klausur! :zwinker:
|
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 |
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. |
Re: Vererbung, Aggregation, Assoziation?
Wäre es dann so richtig?
Delphi-Quellcode:
Ich habe Modell nicht mehr als Variable deklariert! So in Ordnung?
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; P.S. Das Programm funktioniert trotzdem :mrgreen: Aber trotzdem danke für deine Hilfe :zwinker: |
Re: Vererbung, Aggregation, Assoziation?
wäre nett, wenn jemand antworten könnte :oops: vielen, vielen dank :zwinker:
|
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
|
Re: Vererbung, Aggregation, Assoziation?
ja stimmt schon! ich denke es sollte so richtig sein wie ich es zuletzt gepostet habe! :wink:
|
Re: Vererbung, Aggregation, Assoziation?
Du hast einen neuen UML Begriff erfunden: Destruktion
weil du nun überhaupt kein Modell mehr hast :mrgreen: |
Re: Vererbung, Aggregation, Assoziation?
ich hab dieses doch in die uses eingebunden? :gruebel:
|
Re: Vererbung, Aggregation, Assoziation?
Das will doch aber nichts heissen. Du brauchst schon eine Instanz von deiner Klasse.
|
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"? |
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'). |
Re: Vererbung, Aggregation, Assoziation?
Zitat:
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... |
Re: Vererbung, Aggregation, Assoziation?
Robert hat Recht. Und damit auch alles verstanden wird, sollte Komposition auch noch erwähnt werden.
|
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:
In den weiteren Prozeduren wird KListe benutzt.
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; //[...] 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? |
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.
|
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 22:01 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