home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* OOPDEMO.PAS *)
- (* Objektorientierte Programmierung *)
- (* unter Turbo Pascal 5.5 und Quick Pascal *)
- (* (c) 1989 W.Rinke & TOOLBOX *)
- (* ------------------------------------------------------ *)
- PROGRAM OOP_Demo;
-
- USES Crt;
-
- (* ------------------------------------------------------ *)
- (* Die Oberklasse "Figur" vererbt alle ihre Fähigkeiten *)
- (* an sämtliche Unterklassen. *)
- (* Die Fähigkeiten des Objekts "Figur" sind *)
- (* - die Instanz-Variablen x, y und FChr und *)
- (* - die Prozeduren "Init", "Show", "Hide" und "Move" *)
- (* ------------------------------------------------------ *)
- TYPE Figur = OBJECT
- x, y : INTEGER;
- FChr : STRING;
-
- PROCEDURE Init(InitX, InitY : INTEGER;
- InitFChr : STRING);
- { Initialisierung der Instanzvariablen }
-
- PROCEDURE Show;
- { Bringt ein Objekt auf den Bildschirm }
-
- PROCEDURE Hide;
- { Entfernt ein Objekt vom Bildschirm }
-
- PROCEDURE Move(DeltaX, DeltaY : INTEGER);
- { Bewegt ein Objekt relativ zum alten Ort }
-
- END; { Objekt Figur }
-
- (* ------------------------------------------------------ *)
- (* Nun werden die Methoden definiert, nach denen das *)
- (* Hauptobjekt Aufträge (messages) ausführt *)
- (* ------------------------------------------------------ *)
-
- PROCEDURE Figur.Init(InitX, InitY : INTEGER;
- InitFChr : STRING);
- BEGIN
- Self.x := InitX;
- Self.y := InitY;
- Self.FChr := InitFChr;
- END;
-
- PROCEDURE Figur.Show;
- BEGIN
- GotoXY(Self.x, Self.y);
- Write(Self.FChr);
- END;
-
- PROCEDURE Figur.Hide;
- BEGIN
- GotoXY(Self.x, Self.y);
- Write(' ');
- END;
-
- PROCEDURE Figur.Move(DeltaX, DeltaY : INTEGER);
- BEGIN
- Self.Hide; { eine Prozedur eines Objekts kann
- sich der Methoden der eigenen
- Klasse bedienen }
- Self.x := Self.x + DeltaX;
- Self.y := Self.y + DeltaY;
- Self.Show;
- END;
-
- (* ------------------------------------------------------ *)
- (* Nun können neue Objekte zugefügt werden. *)
- (* Alle neuen Objekte können sich nun der Methoden der *)
- (* Oberklasse bedienen... *)
- (* ------------------------------------------------------ *)
-
- TYPE Stern = OBJECT (Figur)
- PROCEDURE Init(InitX, InitY : INTEGER);
- END;
-
- PROCEDURE Stern.Init(InitX, InitY : INTEGER);
- BEGIN
- Figur.Init(InitX, InitY, '*');
- END;
-
- TYPE Gesicht = OBJECT (Figur)
- PROCEDURE Init(InitX, InitY : INTEGER);
- END;
-
- PROCEDURE Gesicht.Init(InitX, InitY : INTEGER);
- BEGIN
- Figur.Init(InitX, InitY, Chr(1));
- END;
-
- TYPE Schrift = OBJECT (Figur)
- PROCEDURE Init(InitX, InitY : INTEGER);
- END;
-
- PROCEDURE Schrift.Init(InitX, InitY : INTEGER);
- BEGIN
- Figur.Init(InitX, InitY, 'TOOLBOX');
- END;
-
- (* ------------------------------------------------------ *)
- (* ... aber auch eigene Methoden entwickeln. *)
- (* ------------------------------------------------------ *)
-
- VAR Star : Stern;
- Face : Gesicht;
- Text : Schrift;
- i : INTEGER;
-
- BEGIN
- ClrScr;
- Star.Init(10, 10);
- Face.Init(21, 21);
- Star.Show; { Wenn man die Namen geschickt }
- Face.Show; { vergibt, kann man mit den }
- Delay(1000); { Objekten "reden". Das macht }
- Star.Move(10, 10); { Code lesbar. }
- Face.Move(-10, -10);
- Delay(1500);
- Face.Move(-10, 3);
- Star.Hide;
- Text.Init(1, 15);
- Text.Show;
- FOR i := 1 TO 72 DO BEGIN
- Text.Move(1, 0); { "Text" ist fast zu allgemein }
- Face.Move(1, 0);
- Delay(100);
- END;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von OOPDEMO.PAS *)
-