Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 6: Objekterzeugung.

Slides:



Advertisements
Ähnliche Präsentationen
Blue J.
Advertisements

Kapselung , toString , equals , Java API
Kapitel 4 Datenstrukturen
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
Einführung Blue J.
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
On a Buzzword: Hierachical Structure David Parnas.
Ausnahmen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
Ein Beispiel in Java.
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Objekte werden als Adressen (Referenzen) übergeben. Dies führt manchmal zu unerwarteten Ergebnissen...
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen.
DVG Einführung in Java1 Einführung in JAVA.
DVG Klassen und Objekte
Prof. Dr. Gerhard Schmidt pres. by H.-J. Steffens Software Engineering SS 2009Folie 1 Objektmodellierung Objekte und Klassen Ein Objekt ist ein Exemplar.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 13: (Container-)Datenstrukturen.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 13: (Container-)Datenstrukturen.
Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung Prof. Dr. M. Thaller AM1: Re-usable Content in 3D und Simulationssystemen.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 9: Abstraktion.
Einführung in die Programmierung Prof. Dr. Bertrand Meyer
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 10: Das dynamische Modell und mehr zu Referenzen.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 2: Der Umgang mit Objekten I.
1. Entwicklungsumgebung 2. Kontextmenü 3. Compile 4. Objekt 5. Attribut 6. Klasse 7. Deklaration 8. Intialisierung.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 7: Referenzen und Zuweisungen.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 4: Die Schnittstelle einer Klasse.
Einführung in die Programmierung Prof. Dr. Bertrand Meyer
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 6: Objekterzeugung.
1. Entwicklungsumgebung 2. Kontextmenü 3. Compile 4. Objekt 5. Attribut 6. Klasse 7. Deklaration 8. Intialisierung.
Java Programmierung.
Objectives Verstehen was unterDelegate verstanden wird
Paul, Morten, Yannick Blue J. Entwicklungsumgebung  versteht Java Programmcode  Für die Entwicklung eigener Software  Durch die Programmierung.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 18: Mehr über Vererbung und Agenten.
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
early binding (frühe Bindung) late binding (späte Bindung)
Einführung Blue J. Inhaltsverzeichnis  Definition  Vokabeln.
Installation, Konfiguration, Online stellen, Zugriff © by Lars Koschinski 2003.
HG13_ Herzgen, Jung & Lorkowski1 Java Programmierung BlueJ Workshop.
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 3: Der Umgang mit Objekten II.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 4: Die Schnittstelle einer Klasse.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 7: Referenzen und Zuweisungen.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 9: Abstraktion.
Paul, Morten, Yannick Blue J. Entwicklungsumgebung  versteht Java Programmcode  Für die Entwicklung eigener Software  Durch die Programmierung.
Erweiterte Zuweisungskompatibilität. Wie kann man Objekte verschiedener Klassen einer Klassenhierarchie einander zuweisen ?
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
Pointer. Grundsätzliches: Im Arbeitsspeicher werden Daten gespeichert. Um auf die Daten eindeutig zugreifen zu können, werden diesen Daten Adressen zugeordnet.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Vortrag Einführung in AspectJ. Gliederung 1 Einleitung 2 Querschnittsfunktionalitäten in AspectJ 2.1 Sprachelemente 3 Beispiel 4 Join Point Modell 5 Weaving.
Tutorium Software-Engineering SS14 Florian Manghofer.
Einführung in die Programmierung Prof. Dr. Bertrand Meyer
Implementieren von Klassen
 Präsentation transkript:

Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 6: Objekterzeugung

2 Objekte erzeugen In früheren Beispielen haben Paris, Line8 etc. jeweils vordefinierte Objekte bezeichnet. Wir werden jetzt unsere eigenen Objekte erzeugen. Unser Ziel: Eine fiktive Metrolinie, fancy_line :

3 Beispiel: LINE_BUILDING Pseudocode Bezeichnet eine Instanz der Klasse LINE class LINE_BUILDING inherit TOURISM feature build_a_line -- Eine imaginäre Linie bauen und sie auf der Karte hervorheben. do Paris. display -- “ fancy_line erzeugen und Stationen hinzufügen” Paris. put_line (fancy_line) fancy_line. highlight end fancy_line : LINE -- Eine imaginäre Linie der Metro end

4 Bezeichner, Entitäten (entities), Variablen Ein Bezeichner (identifier) ist ein vom Programmierer / von der Programmiererin gewählter Name, um ein gewisses Programmelement zu repräsentieren. Beispiele für Bezeichner :  Eine Klasse, z.B. STATION  Ein Feature, z.B. i_th  Ein Laufzeitwert, wie etwa ein Objekt oder eine Objektreferenz, z.B. fancy_line Ein Bezeichner, der einen Laufzeitwert bezeichnet, wird Entität oder Variable (falls sein Wert sich ändern kann) genannt. Während der Ausführung können Entitäten an Objekte gebunden sein.

5 An ein Objekt gebundene Entitäten Im Programm: Eine Entität, wie z.B. fancy_line Im Speicher, während der Ausführung: Ein Objekt OBJEKT Felder fancy_line (LINE ) Referenz (LINE_BUILDING ) Generierende Klasse OBJEKT Generierende Klasse

6 LINE_BUILDING class LINE_BUILDING inherit TOURISM feature build_a_line -- Eine imaginäre Linie bauen und sie auf der Karte hervorheben. do Paris. display -- “fancy_line erzeugen und Stationen hinzufügen” Paris. put_line (fancy_line) fancy_line. highlight end fancy_line : LINE -- Eine imaginäre Linie der Metro end

7 fancy_line (LINE ) Referenz (LINE_BUILDING ) Woher kommt dieses? Dieses Objekt wurde erzeugt. Der Grundzustand einer Referenz Können wir in einer Instanz von LINE_BUILDING annehmen, dass fancy_line an eine Instanz von LINE gebunden ist?

8 Standard-Referenzen Anfangs ist fancy_line nicht an ein Objekt gebunden: Es ist eine Void-Referenz. OBJEKT fancy_line Void-Referenz ( LINE_BUILDING )

9 Zur Laufzeit ist eine Referenz Entweder an ein gewisses Objekt gebunden Oder void Zustände von Referenzen  Um eine Void-Referenz zu bezeichnen: Benutzen Sie das reservierte Wort Void.  Um herauszufinden, ob x void ist, können Sie folgende Abfrage benutzen: x = Void  Die inverse Abfrage (ist x an ein Objekt gebunden?): x /= Void

10 Das Problem mit Void-Referenzen Der Grundmechanismus von Programmen ist der Featureaufruf. x. f (a, …) Da Referenzen void sein können, kann x möglicherweise an kein Objekt gebunden sein. In diesen Fällen ist der Aufruf fehlerhaft! Feature f anwenden Auf das an x gebundene Objekt Evt. mit Argumenten

11 Beispiel: Aufruf auf ein Ziel, das void ist Void-Referenz class LINE_BUILDING inherit TOURISM feature build_a_line -- Eine imaginäre Linie bauen und sie auf der Karte hervorheben. do Paris. display -- “fancy_line erzeugen und Stationen hinzufügen” Paris. put_line (fancy_line) fancy_line. highlight end fancy_line : LINE -- Eine imaginäre Linie der Metro end

12 Ausnahmen (exceptions) Abnormale Ereignisse während der Ausführung. Beispiele:  “Void call”: fancy_line. highlight wobei fancy_line void ist.  Der Versuch, a / b auszurechnen, wobei b den Wert 0 hat. Ein Fehler ist die Konsequenz; es sei denn, das Programm hat Code, um sich von der Ausnahme zu „erholen“. (“rescue” Klausel in Eiffel, “catch” in Java) Jede Ausnahme hat einen Typ, der in den Laufzeit- Fehlermeldungen von EiffelStudio ersichtlich ist, z.B.  Feature call on void target  Arithmetic underflow

13 Objekte explizit erzeugen Um eine Ausnahme zu vermeiden:  Verändern Sie die Prozedur build_a_line, so dass sie ein Objekt erzeugt und an fancy_line bindet, bevor es highlight aufruft.

14 Void-Aufrufe – Die ganze Geschichte In ISO Eiffel werden Void-Aufrufe dank dem Begriff des „gebundenen Typs“ (attached type) nicht mehr vorkommen. Der Compiler lehnt jeden Aufruf x. f, bei dem x in einer Ausführung void sein könnte, ab. Dies ist ein grosser Fortschritt, der allerdings auch Kompatibilitätsprobleme für bereits existierenden Code mit sich führt. Deshalb wird es schrittweise ab EiffelStudio 6.2 eingeführt. Andere Sprachen kennen dies nicht, aber Spec#, eine auf C# basierende Sprache aus der Forschungsabteilung von Microsoft, weist den Weg mit ihren „non-null types“. In diesem Kurs benutzen wir immer noch die alten Regeln.

15 Warum müssen wir Objekte erzeugen? Können wir nicht annehmen, dass eine Deklaration der Form fancy_line : LINE eine Instanz von LINE erzeugt und sie an fancy_line bindet? (Die Antwort darauf folgt bald…)

16 LINE_BUILDING class LINE_BUILDING inherit TOURISM feature build_a_line -- Eine imaginäre Linie bauen und sie auf der Karte hervorheben. do Paris. display -- “fancy_line erzeugen und Stationen hinzufügen” Paris. put_line (fancy_line) fancy_line. highlight end fancy_line : LINE -- Eine imaginäre Linie der Metro

17 Einfache Objekte erzeugen Um fancy_line zu erzeugen, müssen wir zuerst Objekte erzeugen, die die Stationen und Haltestellen der Linie repräsentieren. Wir brauchen Instanzen von STATION UND STOP (warum?) Madeleine? Welches ist die nächste Station nach Concorde? Louvre?

18 Haltestellen Eine Instanz von STOP hat:  Eine Referenz zu einer Station; darf nicht void sein.  Eine Referenz zur nächsten Haltestelle; void am Schluss. (STOP ) right (STATION ) station (Void, oder andere Instanz von STOP)

19 Die Schnittstelle der Klasse SIMPLE_STOP class SIMPLE_STOP feature station : STATION -- Station, welche diese Haltestelle repräsentiert. next : SIMPLE_STOP -- Nächste Haltestelle der selben Linie. set_station (s : STATION ) -- Diese Haltestelle mit s assoziieren. require station_existiert: s /= Void ensure station_gesetzt: station = s link (s : SIMPLE_STOP ) -- s zur nächsten Haltestelle dieser Linie machen. ensure naechste_gesetzt: next = s end

20 class LINE_BUILDING inherit TOURISM feature build_a_line -- Eine imaginäre Linie bauen und sie auf der Karte hervorheben. do Paris. display Paris. put_line (fancy_line) fancy_line. highlight end fancy_line : LINE -- Eine imaginäre Linie der Metro end LINE_BUILDING stop1 : SIMPLE_STOP -- Erste Haltestelle dieser Linie -- “fancy_line erzeugen und Stationen hinzufügen”

21 Eine Instanz von SIMPLE_STOP erzeugen class LINE_BUILDING inherit TOURISM feature build_a_line -- Eine imaginäre Linie bauen und sie auf der Karte hervorheben. do Paris. display Paris. put_line (fancy_line) fancy_line. highlight end fancy_line : LINE -- Eine imaginäre Linie der Metro end stop1 : SIMPLE_STOP -- Erste Haltestelle dieser Linie -- Erzeuge fancy_line und fülle sie mit Stationen: create stop1 -- “Mehr Stationen erzeugen und fancy_line fertig bauen” Erzeugungs- instruktion Jetzt ein gewöhnlicher Kommentar Neuer Pseudocode

22 Erzeugungsinstruktion Grundoperation, um Objekte während der Laufzeit zu erzeugen:  Erzeugt ein neues Objekt im Speicher.  Bindet eine Entität daran. stop1 (SIMPLE_STOP) next station create stop1

23 Der Typ eines erzeugten Objektes Jede Entität ist mit einem gewissen Typ deklariert: stop1: SIMPLE_STOP Eine Erzeugungsinstruktion create stop1 produziert während der Laufzeit ein Objekt dieses Typs.

24 Eine Linie mit drei Haltestellen Wir möchten jetzt drei Haltestellen hinzufügen Station_Balard Station_Issy Station_Montrouge Als Erstes deklarieren wir die entsprechenden Attribute: stop1, stop2, stop3 : SIMPLE_STOP

25 build_a_line Vordefiniert inTOURISM Immer noch Pseudocode! build_a_line -- Eine imaginäre Linie bauen und sie auf der Karte hervorheben. do Paris. display -- Erzeuge die Stops und weise jedem seine Station zu: create stop1 stop1. set_station (Station_Montrouge) create stop2 stop2. set_station (Station_Issy) create stop3 stop3. set_station (Station_Balard) -- Verbinde jeden Stop mit dem nächsten: stop1. link (stop2 ) stop2. link (stop3 ) -- “fancy_line erzeugen und ihr die eben erstellten Haltestellen zuweisen.” Paris. put_line (fancy_line) fancy_line. highlight end

26 Nochmals: Wieso müssen wir Objekte erzeugen? Können wir nicht annehmen, dass eine Deklaration der Form fancy_line : LINE eine Instanz von LINE erzeugt und sie an fancy_line bindet?

27 Void-Referenzen sind nützlich! (PERSON) spouse Verheiratete Personen:

28 Void-Referenzen sind nützlich! (PERSON) spouse Ledige Personen:

29 Void-Referenzen sind nützlich! (PERSON) spouse Auch bei verheirateten Personen…... sollten wir nicht jedes Mal, wenn wir eine Instanz von PERSON erzeugen, auch ein Objekt für spouse erzeugen. (Warum?)

30 Der Gebrauch von Void-Referenzen (PERSON) spouse Jedes PERSON –Objekt wird mit einer Void-Referenz spouse erzeugt.

31 Der Gebrauch von Void-Referenzen (PERSON) spouse Jedes PERSON –Objekt wird mit einer Void-Referenz spouse erzeugt.

32 Der Gebrauch von Void-Referenzen (PERSON) spouse Jedes PERSON –Objekt wird mit einer Void-Referenz spouse erzeugt und danach werden die spouse - Referenzen durch entsprechende Instruktionen gebunden.

33 Der Gebrauch von Void-Referenzen (PERSON) spouse Jedes PERSON –Objekt wird mit einer Void-Referenz spouse erzeugt und danach werden die spouse - Referenzen durch entsprechende Instruktionen gebunden.

34 Referenzen in verketteten Strukturen Die Liste wird durch eine next -Referenz, die void ist, beendet. ( STOP ) next ( STOP ) next ( STOP ) next

35 build_a_line Vordefiniert inTOURISM Immer noch Pseudocode! build_a_line -- Eine imaginäre Linie bauen und sie auf der Karte hervorheben. do Paris. display -- Erzeuge die Stops und weise jedem seine Station zu: create stop1 stop1. set_station (Station_Montrouge) create stop2 stop2. set_station (Station_Issy) create stop3 stop3. set_station (Station_Balard) -- Verbinde jeden Stop mit dem nächsten: stop1. link (stop2 ) stop2. link (stop3 ) -- “fancy_line erzeugen und ihr die eben erstellten Haltestellen zuweisen.” Paris. put_line (fancy_line) fancy_line. highlight end

36 create some_stop some_stop. set_station (existing_station) Die Notwendigkeit von Erzeugungsprozeduren Erzeugung und Initialisierung eines SIMPLE_STOP Objektes: Die Invariante der Klasse: invariant station_existiert: station /= Void Nach der Erzeugung: Invariante nicht erfüllt!

37 Erzeugungsprozeduren Eine bessere Lösung:  Deklarieren Sie set_station als Erzeugungsprozedur, um Initialisierung mit Erzeugung zu verbinden: create new_stop1. set_station (Station_montrouge) -- Gleicher Effekt wie die zwei vorherigen Instruktionen  Einfachheit: Initialisierung bei Erzeugung  Korrektheit: Die Invariante wird von Anfang an erfüllt. Erzeugungsprozeduren heissen auch Konstruktoren (z.B. in Java oder C#)

38 Die Schnittstelle der Klasse SIMPLE_STOP class SIMPLE_STOP create set_station feature station : STATION -- Station, welche diese Haltestelle repräsentiert next : SIMPLE_STOP -- Nächste Haltestelle dieser Linie. set_station (s : STATION ) -- Diese Haltestelle mit s assoziieren. require station_existiert: s /= Void ensure station_gesetzt: station = s link (s : SIMPLE_STOP ) -- s zur nächsten Haltestelle dieser Linie machen. ensure naechste_gesetzt: next = s end

39 Jetzt auch als Erzeugungsprozedur verfügbar Schnittstelle der Klasse SIMPLE_STOP Auflistung der Erzeugungsprozeduren class SIMPLE_STOP create set_station feature station : STATION -- Station, welche diese Haltestelle repräsentiert next : SIMPLE_STOP -- Nächste Haltestelle dieser Linie. set_station (s : METRO_STATION ) -- Diese Haltestelle mit s assoziieren. require station_existiert: s /= Void ensure station_gesetzt: station = s link (s : SIMPLE_STOP ) -- s zur nächsten Haltestelle dieser Linie machen. ensure naechste_gesetzt: next = s invariant station_existiert : station /= Void end

40 Erzeugungsprinzip Dies ermöglicht dem Autor der Klasse, eine korrekte Initialisierung aller Instanzen, die Clients erzeugen, zu erzwingen. Falls eine Klasse eine nicht-triviale Invariante hat, muss sie eine oder mehrere Erzeugungsprozeduren definieren, die sicherstellen, dass jede Instanz nach der Ausführung einer Erzeugungsinstruktion die Invariante erfüllt.

41 Erzeugungsprozeduren Auch wenn keine starke Invariante vorhanden ist, sind Erzeugungsprozeduren nützlich, um Initialisierung und Erzeugung zu kombinieren. class POINT create default_create, make_cartesian, make_polar feature … end Gültige Erzeugungsinstruktionen: create your_point. default_create create your_point create your_point. make_cartesian (x, y) create your_point. make_polar (r, t ) Vererbt an alle Klassen, macht standardmässig nichts.

42 Objekterzeugung: Zusammenfassung Um ein Objekt zu erzeugen:  Falls die Klasse keine create-Klausel hat, benutzen Sie die Grundform: create x  Falls die Klasse eine create-Klausel hat, die eine oder mehrere Prozeduren auflistet, benutzen Sie create x.make (…) wobei make eine der Erzeugungsprozeduren ist und “(…)” für allfällige Argumente steht.

43 Korrektheit einer Instruktion Um mit dem Prinzip „Design by Contract“ („Entwurf gemäss Vertrag“) übereinzustimmen, müssen wir von jeder Instruktion genau wissen:  Wie man die Instruktion richtig gebraucht: die Vorbedingung.  Was wir dafür garantiert bekommen: die Nachbedingung. Zusammen definieren diese beiden Eigenschaften (zusammen mit der Invarianten) die Korrektheit eines Sprachenmechanismus. Wie lautet die Korrektheitsregel für eine Erzeugungsinstruktion?

44 Korrektheit einer Erzeugungsinstruktion Korrektheitsregel für Erzeugungsinstruktionen Vor der Erzeugungsinstruktion: 1. Die Vorbedingung der Erzeugungsprozedur (falls vorhanden) muss erfüllt sein. Nach der Erzeugungsinstruktion mit dem Ziel x vom Typ C : 2. x /= Void gilt. 3. Die Nachbedingung der Erzeugungsprozedur ist erfüllt. 4. Das an x gebundene Objekt erfüllt die Invariante von C.

45 Aufeinanderfolgende Erzeugungsinstruktionen Die Korrektheitsregel erfordert nicht, dass x void ist: create x -- Hier ist x nicht void. create x x Zuerst erzeugtes Objekt Danach erzeugtes Objekt

46 Der Effekt einer Erzeugungsinstruktion  x ist nach der Erzeugungsinstruktion nicht void (egal ob es vorher void war oder nicht).  Falls es eine Erzeugungsprozedur gibt, ist ihre Nachbedingung für das eben erzeugte Objekt erfüllt.  Das Objekt erfüllt die Klasseninvariante.

47 Eine Wurzel-Erzeugungsprozedur kann:  Neue Objekte erzeugen  Auf diese Features aufrufen, die wiederum neue Objekte erzeugen können  Etc. Die Ausführung eines Systems beginnt mit der Erzeugung eines Wurzelobjektes, das eine Instanz einer vom System vorgesehenen Klasse (die Wurzelklasse) ist, mittels einer definierten Erzeugungsprozedur dieser Klasse (die Wurzelprozedur). Wie alles beginnt…

48 Wurzelobjekt Wurzelprozedur obj1 obj2 r1 r2 create obj1.r1 create obj2.r2 Ausführung eines Systems

49 Das aktuelle Objekt (current object) Zu jeder Zeit während einer Ausführung gibt es ein aktuelles Objekt, auf welches das aktuelle Feature aufgerufen wird. Zu Beginn ist dies das Wurzelobjekt. Während eines „qualifizierten“ Aufrufs x. f (a), ist das neue aktuelle Objekt dasjenige, das an x gebunden ist. Nach einem solchen Aufruf übernimmt das vorherige aktuelle Objekt wieder seine Rolle.

50 Der Entwurfsprozess Ein System ist eine bestimmte Gruppe von gewissen Klassen, wobei eine Klasse als Wurzelklasse dient. Die Klassen können auch ausserhalb des Systems wertvoll sein: Sie sind dann wiederverwendbar.

51 Erweiterbarkeit & Wiederverwendbarkeit  Erweiterbarkeit: Die Einfachheit, mit welcher es möglich ist, ein System den Wünschen eines Benutzers entsprechend anzupassen.  Wiederverwendbarkeit: Die Einfachheit, bestehende Software für neue Applikationen wiederzuverwenden. Ältere Software-Engineering-Ansätze, die auf einem Hauptprogramm und Unterprogrammen beruhen, beachten diese Bedürfnisse weniger.

52 Die Wurzel (root) ausfindig machen Wie spezifiziert man die Wurzelklasse und die Wurzel- Erzeugungsprozedur eines Systems? Benutzen Sie EiffelStudio

53 Was wir heute gesehen haben  Klasseninvarianten  Das Konzept “Design by Contract”  Der Begriff einer Ausnahme  Objekterzeugung  Erzeugungsprozeduren  Die Beziehung zwischen Erzeugungsprozeduren und Invarianten  Der Vorgang einer Systemausführung