SAI || Wintersemester 2000/01 || Entwicklung objekt-orientierter Bibliotheken || Übungen

Übungen zu Entwicklung objekt-orientierter Bibliotheken
Blatt 2 (31. 10. - 7. 11. 2000)


Aufgabe 2 (5 Punkte)

Erweitern Sie das in der Vorlesung vorgestellte Beispiel LinearLists um folgende Operationen:
PROCEDURE Length(list: List) : INTEGER;
   (* return the number of elements of list *)

PROCEDURE RemoveFirst(list: List);
   (* PRE: the list must not be empty, i.e. Length(list) > 0;
      remove the first element of the list
   *)

PROCEDURE RemoveLast(list: List);
   (* PRE: the list must not be empty, i.e. Length(list) > 0;
      remove the last element of the list
   *)

PROCEDURE GetFirst(list: List; VAR object: Objects.Object);
   (* PRE: the list must not be empty, i.e. Length(list) > 0;
      return the first element of the list
   *)

PROCEDURE GetLast(list: List; VAR object: Objects.Object);
   (* PRE: the list must not be empty, i.e. Length(list) > 0;
      return the last element of the list
   *)

Hinweise:

Bedenken Sie, daß es die Implementierung der Operation RemoveLast erleichtert, wenn Sie die lineare Liste doppelt verketten und nicht nur einfach wie in der ursprünglichen Lösung.

Achten Sie darauf, daß First und Next auch noch sinnvoll sind, wenn mit RemoveFirst oder RemoveLast Objekte aus der Liste entfernt worden sind:

Vorbedingungen (in den Kommentaren als PRE vermerkt), können Sie mit Hilfe der Standardprozedur ASSERT überpr|fen lassen, die als Argument einen beliebigen Ausdruck vom Typ BOOLEAN akzeptiert.

Aufgabe 3 (5 Punkte)

Schreiben Sie ein Modul Stacks, das auf LinearLists aufbaut und folgendes anbietet:
DEFINITION Stacks;

   IMPORT Objects;

   TYPE
      Stack = POINTER TO StackRec;
      StackRec = RECORD (Objects.ObjectRec) END;

   PROCEDURE Create(VAR stack: Stack);
      (* create a stack which is initially empty *)

   PROCEDURE Length(stack: Stack) : INTEGER;
      (* return the number of elements of the stack *)

   PROCEDURE Push(stack: Stack; object: Objects.Object);
      (* add an element on top of the stack *)

   PROCEDURE Pop(stack: Stack; VAR object: Objects.Object);
      (* PRE: Length(stack) > 0;
         return the top-most element of the stack
      *)

END Stacks.

Fragen zu den Übungen oder zur Vorlesungen können Sie jederzeit per E-Mail stellen oder dazu (ggf. nach kurzer telefonischer Absprache) zu einem Besuch bei mir vorbeikommen.

Schicken Sie Ihre Lösung bis zum Abgabetermin am Dienstag, dem 7. November 2000, 17.00 Uhr mit folgendem Kommando:

abgabe oolib *.od *.om Makefile

Weitere Hinweise zur Vorlesung und zu den Übungen finden Sie im WWW unter "http://www.mathematik.uni-ulm.de/sai/ws00/oolib/".


SAI || Wintersemester 2000/01 || Entwicklung objekt-orientierter Bibliotheken || Übungen

Andreas Borchert, Oktober 2000