• Shuffle
    Toggle On
    Toggle Off
  • Alphabetize
    Toggle On
    Toggle Off
  • Front First
    Toggle On
    Toggle Off
  • Both Sides
    Toggle On
    Toggle Off
  • Read
    Toggle On
    Toggle Off
Reading...
Front

Card Range To Study

through

image

Play button

image

Play button

image

Progress

1/83

Click to flip

Use LEFT and RIGHT arrow keys to navigate between flashcards;

Use UP and DOWN arrow keys to flip the card;

H to show hint;

A reads text to speech;

83 Cards in this Set

  • Front
  • Back

Mit welchen drei Möglichkeiten könnte man ein Objekt beschreiben?

1. Man schreibt alle Anweisungen, die den Aufbau eines Objekts festlegen, in eine spezielle Methode und ruft diese mit dem Objekt, das den beschriebenen Aufbau haben soll, als Parameter auf.
2. Klonen von Objekten.
3. Alle Objekte als Instanzen von bestimmten Vorlagen erzeugen, die selbst keine Objekte oder Objekte auf einer anderen Ebene sind.

Woher kommt die Dominanz der klassenbasierten Programmierung?

* Klassen stellen ein klassisches, fest etabliertes Ordnungsprinzip dar
* Klassen eignen sich als Typen und somit können Eigenschaften anderer, nicht objektorientierter aber typisierter Sprachen übernommen werden.

Welche Vorteile hat die prototypenbasierten Form der Objekterzeugung?

* Benötigt weniger Konzepte
* Kann einzelne Objekte sehr viel flexibler ihrem Zweck anpassen, indem sie es z.B. erlaubt, die Methodendefinition für ein einziges Objekt anzupassen

Wodurch wird eine Klasse charakterisiert?

Durch Eigenschaften und Verhalten.

Wie sieht die Repräsentation von Klassen im System aus?

* Da die Variable global ist, muß sie immer mit einem Großbuchstaben beginnen.
* Die Variable wird automatisch mit der Klassendefinition eingeführt (vereinbart)
* Da Klassennamen globale Variablen sind, da sie insbesondere absolut global sind und nicht nur in Bezug auf irgendeine Programmeinheit (wie etwa eine Methodendefinition), sind sie von überall her zugreifbar
* Außerdem wird jede neue Klasse in eine Art Systemwörterbuch namens „SMALLTALK“ (repräsentiert von der globalen Variable Smalltalk) eingetragen
* ihr Name (als Symbol) erscheint in SymbolTable.

Was ist die Extension von Klassen?

Die Menge der Objekte, die unter den Allgemeinbegriff (Klasse) fallen. Im Falle einer Person ist das die Menge aller Personen

Was ist die Intension von Klassen?

Die Summe der Merkmale, die den Begriff (Klasse) ausmachen und die die darunter fallenden Objekte beschreiben.

In welchem Verhältnis stehen Extension und Intension?

Je größer die Extension desto kleiner die Intension und umgekehrt: Je umfangreicher die Charakterisierung einer Menge von Objekten, desto weniger Objekte fallen darunter.

Wie wird in Smalltalk eine neue Klasse erzeugt?

* Instanzen, für die es keine literale Repräsentation gibt, werden über Konstruktoren erzeugt
* Jede Klasse ist eine Instanz ihrer Metaklasse
* Wie werden Klassen dann erzeugt?
* Senden von new an Metaklasse reicht nicht aus, da Metaklasse noch nicht existiert
* Eine Klasse wird in SMALLTALK erzeugt, indem man einer anderen Klasse eine entsprechende Nachricht schickt.
* Anlegen einer neuen Klasse durch Ausführen einer Methode der Klasse Class oder Behavior

Wie sieht das Schema einer Klassendefinition aus?

* Klassenname
* benannte Instanzvariablen
* indizierte Instanzvariablen (ja / nein)
* atomar (ja / nein)
* Instanzmethoden

Was sind atomare / unstrukturierte Objekte?

Objekte, die nicht aus anderen zusammengesetzt sind und somit keine Referenzen enthalten

Was sind Zugriffsmodifikatoren?

* Schlüsselwörter, die die Sichtbarkeit eines Elements angeben.
* Legen zusammen mit der Klassendefinition ihre Schnittstelle fest.

Was ist eine absolute Schnittstelle?

Schnittstelle ist für alle Benutzer gleich.

Was ist eine relative Schnittstelle?

Schnittstelle unterscheidet sich je nach Lokalität oder anderen Eigenschaften der benutzenden oder benutzten Klasse.

Warum kann eine indizierte Variable in Smalltalk nicht vor Zugriffen durch andere Objekte geschützt werden?

Ein Objekt kann jederzeit mit at: und at: put: auf jedes beliebige Element einer indizierten Variable zugreifen. Der Zustand einer indizierten Variable wird also nicht versteckt. Um dies zu erreichen, muss man ein Zwischenobjekt definieren, das die indizierten Instanzvariablen enthält.

Was ist Instaniierung?

Der Vorgang, bei dem ein neues Objekt entsteht - die Umkehrung der Klassifikation (Übergang vom Individuum zur Klasse). Der Extension einer Klasse wird ein neues Element hinzugefügt.

Was tut in Smalltalk die Nachricht class?

Das Objekt liefert das Objekt, das seine Klasse repräsentiert, zurück.

Wie werden in Smalltalk neue Objekte erzeugt?

- Eine Nachricht wird gesendet:

* new für Klassen ohne indizierte Variablen
* new: für Klassen mit indizierten Variablen

- Das neue Objekt wird im Speicher angelegt und alle seine Instanzvariablen werden mit nil initialisiert.


- Beispiele:


Stack new: 100


Stack new

Was ist Klonen?

Ein neues Objekt wird auf Basis eines bereits existierenden erzeugt. Der Klon stellt eine Kopie dar. Beim Klonvorgang ist festzulegen, wie tief das Kopieren gehen soll.

Was sind Metaklassen?

- Jede Klasse ist Objekt genau einer Klasse, der Metaklasse.


- Zwischen Klassen und ihren Metaklassen besteht eine 1:1-Beziehung.


- Der Programmierer muss die Metaklasse nicht selbst anlegen, sondern sie wird automatisch erzeugt.


- Sie heißt class, also z.B. Stack class


- Die Definition ist genauso aufgebaut wie die einer normalen Klasse: Sie besteht aus einer Menge von benannten Instanzvariablen und einer Menge von Instanzmethodendefinitionen


- new ist eine Instanzmethode einer Metaklasse und bestimmt damit das Verhalten der Klasse und nicht ihrer Objekte.

Was sind Klassenvariablen und -methoden?

- Variablen und Methoden, die den Klassen als Instanzen ihrer Metaklasse zugeordnet sind.


- Klassenvariablen sind relativ zu den Instanzen ihrer Klasse global und beginnen deswegen mit einem Großbuchstaben.


- Klassenmethoden beginnen mit einem Kleinbuchstaben.


- Klassenvariablen werden nur einmal pro Klasse angelegt und sind somit für jedes Objekt der Klasse gleich.

Was ist ein Konstruktor (in Smalltalk)?

* Methode, die auf eine Klasse aufgerufen, eine neue Instanz dieser Klasse zurückgibt.
* Klassenmethode aus Sicht der erzeugten Instanz
* Damit Variablen nicht mit nil initalisiert werden, können alternative Konstruktoren definiert werden
* Hier erkennt man den Sinn davon, dass jede Klasse eine eigene Metaklasse hat: z.B. die Methode now als Konstruktor wäre nicht für jede Klasse sinnvoll und somit sollte sie in keiner gemeinsamen Metaklasse für alle Klassen stehen.

Wie funktioniert die Initialisierung mit Zugriffsmethoden (Smalltalk)?

* Da eine Klasse ein Objekt wie alle anderen ist, hat sie keinen direkten Zugriff auf die Instanzvariablen ihrer Instanzen.
* Sie ist auf Zugriffsmethoden angewiesen für die Initialisierung
* Zugriffsmethoden sind allerdings allgemein zugänglich und nicht nur für Konstruktor

Wie funktioniert die Initialisierung ohne Zugriffsmethoden (Smalltalk)?

* Oft möchte man einen Zugriff von außen über Zugriffsmethoden zur Initialisierung nicht erlauben
* In Smalltalk gibt es keine Möglichkeit, Zugriffsrechte auf Methoden zu definieren.
* Üblicherweise wird für die Initialisierung aus diesem Grund eine Instanzmethode initialize verwendet
* initialize hat vollen Zugriff auf alle Instanzvariablen und gleichzeitig wird Außenstehenden kein uneingeschränkter Zugriff auf Instanzvariablen gewährt
* Syntax von Standardkonstruktor:


^self new initialize

Von welcher Klasse ist die Klasse Metaclass eine Instanz?

* Nach Smalltalks Philosophie muss auch die Klasse Metaclass eine Instanz einer Klasse sein
* Man betrachtet die Klasse von Metaclass, also Metaclass class, selbst als gewöhnliche Metaklasse
* genau wie alle anderen Metaklassen muss sie eine Instanz von Metaclass sein

Was ist Lazy Initialization in Smalltalk?

* Die Initialisierung wird zu einem späteren Zeitpunkt vorgenommen
* Vor jedem lesenden Zugriff auf die Variable muss geprüft werden, ob sie nil ist, und falls ja, muss sie initialisiert werden
* Um diese Prüfung nicht immer vornehmen zu müssen, empfiehlt sich die Verwendung eines Getters auch für klasseninterne Zugriffe. Die Getter prüfen den Inhalt der Variable und initialisieren ggf.
* Vorteil: Das Programm spart sich nicht notwendige Initialisierungen, vor allem bei aufwändigen Initialisierungen und seltenen Abfragen des Anfangswertes.
* Nachteil: Aufwändiger für Programmierer.

Wie funktioniert die Initialisierung von Klassenvariablen in Smalltalk?

- Da Klassen Instanzen ihrer Metaklasse sind, die Metaklassen automatisch mit der Erzeugung der Klassen angelegt werden und keine Möglichkeit vorgesehen ist, einen Konstruktor für eine Metaklasse vorzugeben, muss eine spezielle Klassenmethode (häufig initialize) für die Initialisierung von Klassenvariablen vorgesehen werden.


- Da das einmalige Aufrufen dieser Methode vergessen werden kann, ist Lazy Initialization eine sinnvolle Alternative.

Was sind Factory-Methoden in Smalltalk?

* Sie nutzen aus, dass Konstruktoren an keine besonderen Konventionen gebunden sind.
* Erzeugen neue Instanzen von Klassen, machen die Erzeugung aber von anderen Faktoren als nur der Klasse abhängig.
* Unterscheiden sich formal nicht von Konstruktoren - sie sind alle Klassenmethoden.
* Beispiel: Klasse Number sieht Methode fromString: vor

Wie sieht das mehrstufiges Zusammenspiel von Klassen und Instanzen in Smalltalk aus?

* Ebene 0: Konkrete Objekte, die nicht mehr instantiierbar sind.
* Ebene 1: Klassen, die die Definition der Objekte von Ebene 0 liefern. Sie repräsentieren diese Objekte in ihrer Gesamtheit. 1:n-Beziehung zwischen Objekten und Klassen.
* Ebene 2: Metaklassen, die die Definition der Klassen von Ebene 1 vorgeben. 1:1-Beziehung zwischen Klassen und Metaklassen.
* Ebene 3: Gemeinsame Klasse aller Metaklassen namens Metaclass. 1:n-Beziehung
* Ebene 4: Die Metaklasse der gemeinsamen Metklasse, die eine Instanz von Metaclass ist

Was ist Generalisierung?

* Es geht um zwei Allgemeinbegriffe, die miteinander ins Verhältnis gesetzt werden.
* Generalisierung ist transitiv: "Mensch ist ein Säugetier" und "Säugetier ist ein Lebewesen" -> "Mensch ist ein Lebewesen"
* Klassen mit inhaltlich verwandter Definition werden zusammengefasst, wobei das Ergebnis eine Klasse ist, die nur die gemeinsamen Elemente enthält.
* Eigenschaften der Generalisierung müssen nicht für alle Klassen wiederholt werden.
* Nur noch Unterschiede müssen definiert werden.
* Höhe der Abstraktionshierarchie ist hier praktisch unbegrenzt

Inwiefern ist die Hierarchie in Smalltalk eine Abstraktionshierarchie?

* Ebene 0: konkrete Objekte
* Ebene 1: Allgemeinbegriffe oder Konzepte
* Ebene 2: Definitionen der Konzepte
* Ebene 3: allgemeine Definitionen
* Anzahl der Objekte wird bis auf die Ebene 2 drastisch reduziert

Wie werden die Metaklassen in die Vererbungshierarchie eingeordnet?

- Da Metaklassen automatisch erzeugt werden, hat Programmierer keinen Einfluss auf deren Vererbung


- Vielmehr wird diese automatisch parallel zur Vererbungshierarchie der Klassen, die Instanzen der Metaklassen sind, angelegt
- Dies hat zur Folge, daß in SMALLTALK neben den Instanzvariablen und ‐methoden auch die Klassenvariablen und ‐methoden von einer Klasse auf ihre Subklassen vererbt werden.
- Class steht neben Metaclass
- Sie beide erben von der Klasse Behaviour, in der new und new: definiert sind. Dort sind sie als Instanzmethoden definiert, aber da sie von dem Metaklassen geerbt werden, stehen sie in den Klassen als Klassenmethoden zur Verfügung.
- Behaviour erbt von Object

Was ist der Unterschied zwischen direkten und indirekten Instanzen?

* Direkte Instanzen: Objekte sind direkt Instanzen einer Klasse
* Indirekte Instanzen: Objekte sind durch Generalisierung Instanzen einer Klasse

Was ist Spezialisierung?

* Umkehrung der Generalisierung
* Spezialisierung fügt Eigenschaften hinzu oder spezialisiert bereits vorhandene
* Jede Klasse ist also eine Spezialisierung ihrer Generalisierung
* Spezialisierung darf nichts wegnehmen

Was ist Vererbung?

* Übertragung der Definition von Eigenschaften und Verhalten (Intension) von einer Klasse auf andere Klassen.
* Ziel: Wiederverwertbarkeit und Ökonomie

Wie funktioniert Löschen von Methoden durch Überschreiben in Smalltalk?

Eine Klasse, die eine geerbte Methode löschen möchte, kann diese mit self shouldNotImplement überschreiben.

Was sind abstrakte Klassen?

* Nicht instantiierbare Klassen
* Ihnen fehlen Angaben, die das Verhalten ihrer Instanzen vollständig spezifiziert.
* Diese fehlenden Eigenschaften werden erst in den Klassen geliefert, die von den abstrakten erben, wobei sich die Eigenschaften von konkreter Klasse zu konkreter Klasse unterscheiden

Wie sieht die Syntax für abstrakte Klassen in Smalltalk aus?

Methode enthält nur implementedBySubclass

Warum kann in Smalltalk kann nicht verboten werden, dass von abstrakten Klassen Instanzen gebildet werden?

- Klassen sind Objekte und werden daher in Variablen gespeichert
- diesen kann man ein new schicken ohne dass der Compiler weiß, welches Objekt gerade in der Variablen steckt
- Man könnte Konstruktoren überschreiben
- Allerdings müssten erbende Klassen diese dann wieder einführen

Warum gibt es abstrakte Klassen?

* In abstrakten Klassen gibt es auch voll ausimplementierte Methoden, die in Unterklassen nicht wiederholt werden müssen.
* Abstrakte Klassen faktorisiert die Gemeinsamkeiten mehrerer Klassen heraus und markiert gleichzeitig, was die erbenden Klassen noch nachtragen müssen

Was ist offene Rekursion?

* Aufruf einer abstrakten Methode aus der Klasse heraus
* Der Aufruf erfolgt auf dem Objekt selbst, obwohl an der aufrufenden Stelle noch nicht klar ist, welche erbende Klasse die Implementierung liefert.

Was ist die Subklassenbeziehung?

* Baut eine Klassenhierarchie auf, in der die Superklassen über den Subklassen stehen
* Transitive Beziehung

Welche Bedeutung hat die Subklassenbeziehung in Smalltalk?

* Wird mit der Vererbungsbeziehung gleichgesetzt
* Subklasse erbt alle Instanzvariablen und Methoden ihrer Superklasse
* Programmierer ist für die Umsetzung der Generalisierung und Spezialisierung bei der Vererbung verantwortlich

Welcher Zusammenhang besteht zwischen Sub- und Supertypen?

* Die Ergänzungen oder Änderungen, die eine Subtypendefinition relativ zu der ihres oder ihrer Supertypen vornimmt, müssen gewährleisten, dass die Werte des Subtyps überall da auftauchen dürfen, wo ein Wert des Supertyps verlangt wird.
* Regel: Wenn ein Typ Y ein Subtyp eines Typs X ist, dann müssen alle Bedingungen, die für Objekte des Typs X erfüllt sind, auch für Objekte des Typs Y erfüllt sein.
* Eine Bedingung, die ein Supertyp an seine Objekte stellt, darf durch einen Subtypen aufgehoben oder relativiert werden.
* Die Bedingungen des Subtypen implizieren die des Supertypen.

Wie kann man geerbte Methoden löschen?

- Durch Überschreiben


- diese enthält nur: self shouldNotImplement

Wie läuft ein dynamisch gebundener Methodenaufruf ab?

1. Zuerst wird geprüft, ob die Methode im zur Klasse des Empfängers gehörenden Methodenwörterbuch enthalten ist.
2. Wird die Methode gefunden, wird sie ausgeführt.
3. Wird sie nicht gefunden, wird zuerst in der direkten Superklasse gesucht, dann in deren direkter Superklasse usw.
4. Sobald die Methode gefunden wird, wird sie ausgeführt.
5. Wird die Methode auch in Object nicht gefunden, wird die Nachricht doesNotUnderstand an den ursprünglichen Empfänger mit der ursprünglichen Nachricht als Argument geschickt.

Anmerkung: Das Objekt, auf dem die Methode ausgeführt wird, bleibt das Empfängerobjekt, auch wenn die Methode in einer Superklasse gefunden wurde. Da die Methode in der Superklasse kompiliert wurde, kann sie nur auf Instanzvariablen zugreifen, die für die Objekte der entsprechenden Klasse zugreifbar sind. Variablen, die erst in der Klasse des Objekts hinzugekommen sind, sind nicht zugreifbar.

Welche Vor- und Nachteile hat dynamisches Binden?

Vorteil: höhere Flexibilität


Nachteil: Bestimmte Laufzeitprüfungen müssen durchgeführt werden

Was ist dynamische Typprüfung?

* Vor der Variablenprüfung wird zur Laufzeit geprüft, ob der zuzuweisende Wert den von der Variable geforderten Typ hat.
* Nachteil: Sie kommt zu spät, nämlich dann, wenn man nur noch einen Fehler signalisieren kann. Er kann zwar durch eine Fehlerbehandlungsmethode abgefangen werden, führt aber häufig dennoch zu einem Programmabbruch.
* Natürlich ist auch das immer noch besser, als mit falschen Werten zu arbeiten.

Wo sind Klassenmethoden implementiert, die allen Klassen zur Verfügung stehen sollen?

In der Klasse Object class, von der jede Metaklasse erbt.

Was ist der Unterschied zwischen self in Smalltalk und this in Java?

In Smalltalk muss der Nachrichtenempfänger immer explizit genannt werden, auch wenn die Methode sich in derselben Klasse befindet. self kann also nicht weggelassen werden im Gegensatz zu this in Java, wenn ein Objekt eine Nachricht an sich selbst schickt.

Was bedeutet die Pseudovariable super?

- Manchmal möchte eine überschreibende Methode die überschriebene nicht komplett ersetzen, sondern nur modifizieren.


- Die Pesudovariable super sorgt dafür, dass die Suche nach einer passenden Methodendefinition in der direkten Superklasse der Klasse, in der sich der aufrufende Ausdruck befindet, begonnen wird.


- super kann nicht kaskadiert werden: super super existiert nicht.

Was sind basicNew und basicNew:?

- Wenn eine Methode in einer Superklasse überschrieben wurde, ist die Originalmethode verloren.


- Dies geschieht besonders bei Konstruktoren häufig.


- Deswegen existieren in Smalltalk die beiden Varianten basicNew und basicNew:, die die Basiskonstruktoren sind und nicht überschrieben werden sollten, was man allerdings nicht erzwingen kann.

Welche Sonderfälle muss man bei remove: beachten?

- Objekt ist nicht vorhanden oder Objekt ist mehrmals vorhanden.


- Im ersten Fall wird ein Fehler gemeldet, im zweiten Fall wird nur ein Vorkommen des Objekts aus der Collection gelöscht.


- Und da das Prüfen auf Vorhandensein ein stereotyper Vorgang ist, bietet Smalltalk eine Variante, die genau diese Prüfung selbst vornimmt: remove: anObject ifAbsent: anExceptionBlock.

Mit welchen Methoden werden mehrere Objekt gleichzeitig zu einer Collection hinzugefügt oder gelöscht?

addAll: aCollection


removeAll: aCollection

Was sind Set und Bag?

Set und Bag sind Klassen für ungeordnete Collections, wobei bei Set ein Element nur einmal vorkommen darf, bei Bag nicht. Die Elemente sind nicht geordnet und nicht über einen Index zugreifbar.

Was sind Dictionnaries in Smalltalk?

* Qualifizierte Beziehungen
* Jedes Element der Beziehung wird durch einen Qualifizierer eindeutig identifiziert
* Qualifizierer heißt auch Schlüssel
* Qualifiziertes Element heißt Wert
* Element einer qualifizierten Beziehung besteht aus der Assoziation eines Schlüssels mit einem Wert
* Werte können extrem schnell gefunden werden, oft sogar ohne eine Suche. Dies geschieht fast immer über Hashing

Was ist die Klasse Dictionnary?

* Assoziativspeicher
* Auf Speicherzelle wird nicht über Adresse, sondern durch Assoziation mit dem Inhalt zugegriffen.
* Methoden werden z.B. in Dictionnaries hinterlegt, wobei der Nachrichtenselektor der Schlüssel und die kompilierte Methode der Wert ist

Was ist Delegation?

Ein Klasse nutzt eine andere, ohne von ihr zu erben. Statt dessen enthält sie eine Instanz der anderen Klasse. Die Delegation findet auch auf Instanzebene statt und kann dynamisch eingerichtet werden und sie ist von Fragen der Spezialisierung und Generalisierung völlig befreit.

Was ist SortedCollection in Smalltalk?

* Unterklasse von OrderedCollection
* Die Reihenfolge der Elemente wird nicht von außen durch die Angabe eines Index oder die Einfügereihenfolge festgelegt, sondern durch die Qualität der eingefügten Objekte.
* Wird eingesetzt, wenn man die Objekte einer Beziehung in einer bestimmten Reihenfolge wissen möchte unabhängig von der Reihenfolge, in der sie eingefügt wurden.
* Voraussetzung: Die Objekte müssen sortiert werden können, also die Methode <= definieren
* Wenn die Elemente keine sortierbare Größen sind, kann immer noch ein sogenannter Sortierblock eingefügt werden.
* Sortierblöcke haben zwei Parameter und liefert zurück, ob der erste Parameter kleiner oder gleich dem anderen ist.
* Man beachte jedoch, daß eine nachträgliche Änderung der Attributswerte, die zum Vergleich der Objekte für die Sortierung herangezogen wurden, keine automatische Änderung der Reihenfolge bewirkt, selbst wenn dies eigentlich notwendig würde

Was ist der Nachteil von Arrays in Smalltalk?

Ihre Größe ist beschränkt.

Was ist die Klasse Interval in Smalltalk?

* Endliche arithmetische Folgen, also eine beschränkte Folge von Zahlen, die alle den gleichen Abstand zueinander haben.
* Die Elemente müssen nicht gespeichert, sondern können berechnet werden.
* Benötigt werden Anfangs- und Endwert und die Schrittweite, die auch negativ sein darf.
* Standardschrittweite ist 1
* Klasse Number enthält die Methode to: by:, die ebenfalls ein entsprechendes Intervall zurückliefert.
* Beispiel: (5 to: 1 by: -2) do: [ ]
* Oder die Methode to: by: do: ohne Klammern.
* Beispiel: 5 to: 1 by: -2 do: [ ]

Wie werden in Smalltalk flache Kopien erzeugt?

* Flache Kopie: Instanzvariablen werden nicht kopiert
* Kopie erfolgt durch Zuweisung aller Instanzvariablen des Originals an die Instanzvariablen der Kopie.
* Methode: shallowCopy

Wie werden in Smalltalk tiefe Kopien erzeugt?

* Tiefe Kopie: Die in Beziehung stehenden Objekte werden kopiert.
* Kopiert wird also ein Objektgeflecht.
* Methode deepCopy
* Vorsicht: Es kann zu endlosen Rekursionen kommen!

Was tut die Methode copy in Smalltalk?

* Jede Klasse erbt diese Methode von Object
* copy ruft einfach die Methode shallowCopy auf
* Die erbende Klasse kann copy gemäß der eigenen Bedingungen überschreiben.
* So kann die Kopiertiefe für jede Klasse individuell bestimmt werden: Man ruft für manche Klassen deepCopy auf und lässt das tiefe Kopieren durch Instanzen terminieren, deren Klassen shallowCopy aufrufen.

Was tut die Methode become?

* Sie bewirkt, dass das Empfängerobjekt die Identität des Parameterobjekts annimmt bzw. mit ihm tauscht.
* Anwendung dafür ist das Wachsen von Objekten: Einfach ein entsprechend groß dimensioniertes Objekt anlegen und dann das alte Objekt zum neuen werden lassen.
* Andere Anwendung ist ein Rollback: An einem Objekt oder Objektgeflecht wurden Änderungen vorgenommen und der ursprüngliche Zustand soll wiederhergestellt werden. Vor den Änderungen legt man eine Kopie an und ersetzt beim Rollback das geänderte Objekt mittels become durch das alte.

Wie können sich Objekte in Smalltalk selbst darstellen?

Methode printString gibt eine String-Repräsentation des Objekts zurück.

Was tut die Methode inspect in Smalltalk?

Startet auf dem Empfänger einen Inspektor und gibt den Empfänger zurück. Hilfreich, wenn man ein Zwischenergebnis eines Ausdrucks inspizieren möchte, ohne den Ausdruck aufteilen zu wollen. Man fügt dazu einfach inspect an der Stelle des Ausdrucks ein, an der das inspizierende Objekt gewonnen wurde

Wie können Objekte in Smalltalk auf einem Stream ausgegeben werden?

Methode storeOn: aStream ermöglicht, ein Objekt so auf einen Ausgabestrom zu schreiben, dass es daraus rekonstruiert werden kann. Dabei wird eine textuelle Repräsentation verwendet, keine binäre.

Welche Aufgabe haben Streams häufig in Smalltalk?

* Sie ermöglichen den sequentiellen Zugriff auf einzelne Elemente in beliebigen, zeitlichen Abständen
* Sie ermöglichen den gleichzeitigen bzw. zeitlich abwechselnden Zugriff auf die Elemente einer Collection durch mehrere andere Objekte

Was sind aktive und passive Objekte?

Passive Objekte sind nur aktiv, solange sind gerade eine Methode ausführen. Aktive Objekte verfügen über einen eigenen Prozess, der nur die eigenen Methoden ausführt. Die Kommunikation aktiver Objekte würde asynchron verlaufen. Sie wären sehr aufwendig und nicht praktikabel.

Wie wird parallele Verarbeitung realisiert?

Durch parallele Prozesse, nicht durch aktive Objekte. Jeder dieser Prozesse führt zu einer Zeit eine Methode aus und er besucht die Empfängerobjekte, während die Objekte selbst passiv bleiben.

Wie startet man in Smalltalk einen neuen Prozess?

* Man schickt einem Block die Nachricht fork.
* Dadurch wird der Block in einem eigenen, unabhängigen Prozess ausgeführt.
* Die Ausführung von fork wartet nicht darauf, dass die Ausführung des Blocks beendet wird, bevor sie ein Ergebnis zurückliefert.
* fork liefert nicht das Ergebnis den Blocks zurück, sondern den Block selbst.
* Das Ergebnis des Blocks geht also verloren; nur die Seiteneffekte des Blocks bleiben erhalten.

Was tut die Methode resume in Smalltalk?

* Ein paralleler Prozess soll nicht sofort starten.
* Dann braucht man ein Objekt, das diesen Prozess repräsentiert.
* Zu einem späteren Zeitpunkt schickt man ihm die Nachricht resume
* Dieses Objekt erhält man, indem man einem Block newProcess schickt

Wie kann man in Smalltalk einen parametrisierten Block als Prozess starten?

newProcessWith: mit einem Array als Parameter, das die aktuellen Parameter des Blocks enthält.

Wie hält man in Smalltalk Prozesse an oder beendet sie?

* suspend hält Prozess an
* terminate beendet Prozess
* Angehaltene Prozesse können mit resume wieder gestartet werden

Wie werden in Smalltalk Prozesse synchronisiert?

- mittels Semaphoren


- SharedQueue

Wie funktioniert die Synchronisation von Prozessen mittels Semaphoren?

* Objekte der Klasse Semaphor verfügen über die Methoden wait und signal und über eine Instanzvariable, die für jedes Empfangen von signal um 1 erhöht und für jedes Empfangen von wait um 1 erniedrigt
* Wenn ein Prozess wait an einen Semaphor schickt, dessen Zähler kleiner 1 ist, wird der Prozess schlafen gelegt, sonst läuft er weiter.
* Erhält der Semaphor die Nachricht signal und es gibt noch schlafende Prozesse (Zähler ist kleiner 1), dann wird ein wartender Prozess mittels resume aufgeweckt

Wie funktioniert die Synchronisation von Prozessen mittels SharedQueue?

* Nehmen statt zu zählenden Signalen Objekte auf
* Synchronisation erfolgt über next und nextPut:
* Damit erfolgt die Synchronisation mittels geteilter Warteschlangen.
* Aktive Objekte erhält man folgendermaßen: Die SharedQueue wird einem Objekt zugeordnet und andere Objekte müssen Nachrichten in diese Queue einstellen, statt sie an ein Objekt zu schicken und somit im eigenen Prozess zu starten. Mit einem Prozess in einer Endlosschleife wird die Queue ausgelesen und somit hat man aktive Objekte, die einander Nachrichten schicken.

Wie sieht Vererbung in prototypbasierten Sprachen aus?

* Vererbung ist vollständig zwischen Objekten definiert, da es keine Klassen gibt
* Jedes Objekt gibt eines oder mehrere andere an, deren Eigenschaften und Verhalten es übernimmt.
* Dabei kann es geerbte Teile der Definition überschreiben und auch löschen

Welche Nachteile haben prototypbasierte Sprachen?

viele Anwendungsdomänen für die individuenbasiert programmiert wird, bestehen aus massenhaft gleichen Objekten

* diese werden durch den klassenbasierten Ansatz besser abgedeckt als durch den prototypenbasierten
* schlecht zu debuggen

Was tut die Methode species?

* Manchmal darf bei Kopier‐ (oder Konvertier‐) operationen kein Objekt des gleichen Typs zurückgegeben werden.
* In diesen Fällen sollte statt self class self species aufgerufen werden

Wie werden Streams erzeugt?

Streams werden immer auf einer Collection erzeugt, deren Inhalt Basis
des Streams ist. Die Erzeugung erfolgt mittels der Klassenmethode on:, die als
Parameter eine Collection erhält

Übersetze Blabla ins Englische.

My name is balboa