is-Logo Karel D. Robot
Aggregation

S. Spolwig
4.2

[ Karel ]
Startseite

Ziele:
Neue Klasse definieren; Aggregation als Enthaltensein-Beziehung verstehen

Informationen
zur Vertiefung

 

Die Welt wird erst schön durch die Dinge, die sie hat, aus der sie besteht. Man kann sagen, die Blumen, die Bäume sind ein Teil der Welt.

Diese Beziehung wird Aggregation genannt. Es ist eine festere Beziehung, bei der eine Klasse ein Teil einer anderen Klasse ist, also in ihr enthalten ist. Das läßt sich dadurch implementieren, daß beim Erzeugen eines Exemplars das andere enthaltene miterzeugt wird.

Welt

Wir brauchen also eine neue Unit, in der TMyWorld geschrieben wird. Dazu werden wir eine völlige leere Unit von Delphi nehmen (statt der, die bereits im Projekt vorhanden ist).

1. Aufgabe
    Eine neue Unit schreiben und einbinden

a) Neue Unit einführen - Datei-Neu-Unit

b) Neue Unit1 umbenennen mit - Datei-Speichern unter...  uMyWorld.pas im
    Hauptverzeichnis.
    Damit wird die Datei gleichzeitig dem Projekt hinzugefügt und man braucht es nicht
    extra zu tun.      

    Prüfen mit
     Ansicht-Projektverwaltung

Wenn Sie diesen Namen benutzen, läßt sich die Welt aus dem Projektmenü aufrufen; 

sonst müssen Sie in ControlFrm die Unit importieren, deklarieren und ein Exemplar kreieren, wie bei jedem anderen Objekt auch.

c) Schreiben Sie mit dem Editor den gesamten Code in die neue Unit und fügen Sie alles
    ein, was Sie möchten.

UNIT uMyWorld;
(* ******************************************************************** *)
(* K L A S S E : TMyWorld                                               *)
(* -------------------------------------------------------------------- *)
(* Version     : 2.2                                                    *)
(* Autor       :                                                        *)
(* Beschreibung: Die Klasse bildet die Welt 'MyWorld'mit einem Haus und *)
(*               einem Monster ab.                                      *)
(* Compiler    : Delphi 6                                               *)
(* Aenderungen : 0.9 28-MAR-04                                       *)
(* ******************************************************************** *)


INTERFACE
// =======================================================================
uses
  uWelt,
  uCritter; // und was man man sonst gern drin hätte

type
  TMyWorld = class(TWelt) // erbt alles von TWelt
   protected
    Haus    : THaus;
    Critter : TCritter;
   public
    constructor Create;   override;
    procedure   Init;
  end;

(* -------------------- B e s c h r e i b u n g -------------------------

Oberklasse    : TWelt
Bezugsklassen : -      import:

Methoden
--------
Create
  Auftrag: Haus, Critter erzeugen und init.
           Alle Objekte der vorigen Welt entfernen
  vorher :
  nachher: done.

Init
  Auftrag: Anfangswerte setzen
  vorher :
  nachher: Fuellfarbe grün, Rasterlinie Silber

--------------------------------------------------------------------- *)

IMPLEMENTATION
// ====================================================================
USES graphics,
  uFenster;  // importiert Welt und was gebraucht wird

constructor TMyWorld.Create;
// --------------------------------------------------------------------
begin
  inherited Create;
  Welt.AlleItemsEntfernen;  // alten Kram weg

  Haus := THaus.Create;     // die aggregierten Objekte erzeugen
  Haus.SetPos ('H',2);
  Critter := TCritter.Create;
  Critter.SetPos ('A',8);
  Critter.SetBild ('.\bilder\monster.bmp');

// ...... und was Sie sonst brauchen
  Init;
  Welt.AllesZeigen;
end;

procedure TMyWorld.Init;
// --------------------------------------------------------------------
begin
  SetFuellFarbe(clgreen);
  Welt.SetLinienFarbe(clSilver);
end;

END. // -------- UNIT -------------

 

Starten, im Menü aufrufen und testen!
 

Tip: Sehen Sie sich auch uCleanCity.pas u. a. als Vorlage an

 

 

 

 

Aggregation

 

©  05. Oktober 2008    Siegfried Spolwig

page_top next page