...übernimmt,
In Eiffel sind alle Klassen implizit von ANY abgeleitet.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...anzuheften:
Das folgende Beispiel setzt natürlich voraus, daß Figures.Figure eine Erweiterung von Disciplines.Object ist.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...Speicher
In Oberon gibt es kein Hauptprogramm. Daher wird zu Beginn der Ausführung eines Programms festgestellt, welche Module vorhanden sind. Dieses Verfahren setzt voraus, daß die Objekte (übersetzte Module) alle hintereinander im Speicher liegen und durch ein spezielles Objekt beendet werden. Bei der Verwendung fremder Objekte bestünde die Gefahr, daß sie zwischen den Oberon-Modulen angeordnet würden. Dies würde zum sofortigen Absturz führen.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...wird.
Dies ist eine minimalistische Definition, da nichts über Methoden und andere OO-Techniken gesagt wird. Sie hilft jedoch bei den hybriden Programmiersprachen wie z.B. C++.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...verweisen.
Falls nie ein schwergewichtiger Zeiger auf ein Objekt gesetzt wird, bleibt ein Objekt ebenfalls leben. Auf diese Weise ist der Umgang mit schwergewichtigen Zeigern nur dort notwendig, wo kooperative Mechanismen erforderlich sind.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...Weise
Semantisch identisch heißt, daß ohne Bruch der Abstraktionsgrenzen kein Unterschied festzustellen ist. Das heißt, daß einzelne verborgene Komponenten durchaus unterschiedlich sein können. Wenn beispielsweise sich hinter dem Objekt ein Dateideskriptor auf eine bestimmte Datei verbirgt, kann dieser durchaus einen unterschiedlichen Wert haben und trotzdem auf die gleiche Datei verweisen.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...ist),
Beispiele hierzu gibt es unter
http://www.mathematik.uni-ulm.de/sai/ws97/oolib/zb/events.html

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...unterstützt.
In der Ulmer Oberon-Bibliothek geschieht dies durch Services.Installed.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...Objekten.
Eine kurze Übersicht über die Variationen auf diesem Feld liefert die Antwort zur Frage 1.4 in den FAQ zu comp.object, zu finden unter
http://www.cyberdyne-object-sys.com/oofaq/oo-faq-S-1.4.html.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...Services.Object
Die Motivation für den Namen Services folgt in Kürze.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...basiert:
Das Beispiel ist in vollständiger Form unter
http://www.mathematik.uni-ulm.de/sai/ws97/oolib/zb/Collections-14/
zu finden.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...Keedy
Mehr dazu unter http://www.informatik.uni-ulm.de/abt/rs/staff/projects/monads/PersistentVMemoryE.html
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...ist.
Hinweis: Diese Definition ist nicht allgemeingültig und nur bei reinen Bibliothekslösungen sinnvoll, da beispielsweise bei dem Monads-System keine Konvertierungen oder Transfers notwendig sind.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...voraus.
Es gibt Lösungen, die nur mit Modulen als 1st class objects auskommen, wenn pro Modul nur ein persistenter Typ definiert wird. Jedoch führt ansonsten prinzipiell kein Weg daran vorbei.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...aus:
Der Programmtext ist den Beispielen Collections-14 (noch ohne Persistenz auf direkter Basis von Services.Object und Collections-16 (mit Persistenz) entnommen - zu finden unter http://www.mathematik.uni-ulm.de/sai/ws97/oolib/zb/Collections-14/ und http://www.mathematik.uni-ulm.de/sai/ws97/oolib/zb/Collections-16/.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...Collections-16
Zu finden unter http://www.mathematik.uni-ulm.de/sai/ws97/oolib/zb/Collections-16/.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...behindern.
Seit einiger Zeit gibt es deswegen auch mehrere Varianten des Züricher Oberon-Systems mit Koroutinen.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...zeigt:
Als vollständiges Beispiel steht es unter http://www.mathematik.uni-ulm.de/sai/ws97/oolib/zb/ProdCons/ zur Verfügung.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...stellen:
Das Beispiel ist vollständig zu finden unter http://www.mathematik.uni-ulm.de/sai/ws97/oolib/zb/Collections-17/
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...Ereignis
Ereignisse sind hier nicht im eingeschränkten Sinne des Bibliotheksmoduls Events zu verstehen.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...vorsehen
Realisiert durch die Module Schedulers und RoundRobin.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...sind.
Typischerweise indirekt durch Module wie Iterators oder CrPipes.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...Programm
Im Web zu finden unter http://www.mathematik.uni-ulm.de/sai/ws97/oolib/zb/Sleep/
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...demonstrieren:
Dieses Beispiel wurde dem Ada-Standard entnommen.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...werden:
Das vollständige Beispiel ist im Web unter http://www.mathematik.uni-ulm.de/sai/ws97/oolib/zb/Rendezvous/ zu finden.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...aufruft.
Der Name Connect entspricht dem Schlüsselwort connect, das in einer Vorversion von Green zum Aufruf eines Services verwendet wurde. Dies stellte analog zu CSP syntaktisch heraus, daß eine Interprozeßkommunikation stattfindet. Später gab es in Ada keinen syntaktischen Unterschied mehr zwischen einem normalen Prozeduraufruf und der Benutzung eines Services.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...werden:
Ein Ausweg ergibt sich in Ada, wenn man auf in rekursive Prozeduren eingebettete Tasks zurückgreift.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...denkbar.
Beim konservativen Ansatz werden die Objekte nicht kopiert, und ein Objekt wird als lebend betrachtet, solange ein potentieller Zeiger darauf oder hinein zeigt. Die potentiellen Zeiger bilden dann eine Obermenge der tatsächlichen Zeiger. Der konservative Ansatz ist sowohl in Bezug auf Laufzeit- als auch Speichereffizienz der kopierenden Speicherverwaltung unterlegen (solange das Kopieren nicht zu teuer ist).
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...verwenden.
Leider nicht alle. So sind Ein- und Ausgabe-Operationen auf Dateien nicht unterbrechbar, selbst wenn sie über das Netz via NFS bezogen werden und deswegen längere Zeit in Anspruch nehmen können. Im Extremfall (hard mount bei NFS) kann dies zum ``Aufhängen'' des Prozesses führen.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...kann.
So würden alle gängigen UNIX-Shells sofort auf Ende der Eingabe erkennen und die Sitzung beenden.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Andreas Borchert
2/2/1998