![]() |
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: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:15 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