OOP ist vor allem bei großen Programmen sehr hilfreich, da ein Objekt sehr leicht eingebungen oder verändert werden kann. Dies verbilligt vor allem große Softwareprojekte enorm, da der Wartungsaufwand erheblich reduziert werden kann.
Was ist ein Objekt überhaupt? Ein Objekt hat Eigenschaften, die dieses Objekt einzigartig machen.
D.h. Ein Computer beispielsweise wäre ein Objekt, er hat einen Prozessortyp, einen Bustyp, eine Gehäuseart, alle diese Attribute machen ihn (das Objekt) einzigartig.
Es stellt sich die Frage, wie die Daten zu speichern sind. Die beste Lösung ist eine Struktur, in der alle Daten, das Objekt betreffend, gespeichert werden. (1.Schritt in Richtung OOP).
Welches Unterprogramm wo aufgerufen wird, entscheidet der Compiler.
if () roiser()
jmp 10020
|
|
JMP 10020 |
|
|
|
|
|
|
|
JMP 10020 |
|
|
|
|
|
|
|
|
|
|
|
Unterprogrammaufruf benötigt Zeit (bei wenig Zeilen ist ein UP unnötig)
Code wird an die Stelle, wo er benötigt wird, kopiert kein Stack, kein JMP, Zeitgewinn, verbraucht mehr Speicherplatz
Eine structure (in Pascal: records) entspricht einer Tabellendefinition. Das heißt, um die Übersichtlichkeit zu bewahren, dass zusammengehörige Variable ('Attribute') zu einer Struktur zusammengefasst werden. Dadurch spart man sich unnötige Variablendeklarationen.
typedef struct schueler ;
int a, b;
schueler huber, mayer, x;
a=7;
huber.alter=17;
huber.edvnote=3;
huber.name='Huber'
x=huber;
boolean ist_neg (schueler s) schueler der_groessere (schueler a, schueler b)
}
= eine Kurzschrift, um dem Programmierer die Schreibarbeit abzunehmen. Um ähnliche Objekte nicht extra definieren zu müssen, können Attribute und Methoden, zu den vorhandenen, mitvererbt werden.
eine structure enthält mehrere structures (enthält nicht jede moderne Programmiersprache)
Übernahme von gewissen Variablen (in keiner wichtigen Sprache vorhanden)
= änderbarer Datentyp in einer structure (für flexible Gestaltung; z.B. bei ADA)
struct usaschueler ; };
edvnote (T);
};
Hier handelt es sich für den Programmierer auch nur um eine Kurzschrift (beim Maschinencode ändert sich nichts).
= structure mit Unterprogramm(e)
schueler y;
if y.ist_neg if ist_neg(y)
Der Vorteil der linken Variante ist der, dass bei einer Anderung von einem Unterprogramm zu einer Variablen (statt: ist_neg() int ist_neg;) keine Komplikationen auftreten.
= ein Unterprogramm in einer structure (Smalltalk: MESSAGE)
Ich rufe mit dieser Struktur das Unterprogramm auf. Ich rufe mit dieser Klasse die Methode auf.
class schueler
ist_riese : boolean;
};
STATIC TYPE = Typ, mit dem die Variable deklariert wurde
DYNAMIC TYPE = Typ, den die Variable tatsächlich hat
Diese Compiler nennt man:
STRONGLY TYPED (streng getypt)
keine Zuweisung an Kinder
ob die Methode zulässig ist, entscheidet das static type
WEAKLY TYPED (Smalltalk)
s := k hat den statischen Typ 'schueler', aber nach der Zuweisung auch den dynamischen Typ 'kaschueler'. Von einem strongly typed Compiler werden aber nur die Zuweisungen (s:=k) akzeptiert, nicht die Ausführung der (nur bei dynamischen Typ) vorhandenen Methoden.
if ( InputBox () = 'YES' ) s:=k;
else s:=s2;
.
.
.
if ( s.ist_stenogenie )
Aufgrund der Benutzeraktivität ist der Compiler nie in der Lage, den dynamischen Typ im vorhinein zu bestimmen Verlaß auf den Dispatcher
Der Compiler kommt zu einem Unterprogrammaufruf und weiß nicht ob er es ausführen soll und läßt während des Programmlaufes die Wahl einem kleinen Programm (dem DISPATCHER), das sich den TAG der Variablen anschaut und das jeweilige Unterprogramm auswählt.
auch late binding (z.B. bei C++, nicht bei Pascal)
EARLY BINDING
LATE BINDING
DYNAMIC BINDING
Da bei Objekte Pointer benutzt werden, können verschiedenste Objekte in einem Array gespeichert werden. Auf den ersten Blick sieht es so aus, als würden verschiedenste Objekte in einem Feld gespeichert werden können; in Wirklichkeit wird jedoch jeweils nur ein Pointer auf ein Objekt gespeichert und dadurch wird die Polymorphie (Vielschichtig-/-gesichtigkeit) ermöglicht.
PRODUZENTENSEITE
KONSUMENTENSEITE
aufgeschobene Klassen sind ein Analyse-Tool
OOP ist sein eigenes Analyse-Tool
Wenn die Kind-Klasse Rechteck keine flaeche-Methode enthält, hat der Dispatcher ein erhebliches Problem. Deshalb ist es besser, in der Vater-Klasse die flaeche-Methode zu definieren und dort DEFERRED (= aufgeschoben) anzugeben.
In den Kinder-Klassen werden die Flächenmethoden verlangt (wäre selektive Vererbung), wobei in der Vater-Klasse steht, was Figuren können sollen, aber nicht wie!
Bsp: Solitaire
= andere Bezeichnung für deferred class; es ist eine massiv aufgeschobene Klasse
sind Sachverhalte die beschreiben, wie Methoden zusammenhängen
Der Stapel bleibt nach den Aktionen gleich.
Im Prinzip legt man eine Kapsel an, die kleine Löcher hat, durch die man auf die Daten über einen Umweg (d.h. nicht direkt) zugreifen kann.
Objekt / kein Objekt ? gibt es Methoden die man darauf anwenden kann?
nur definiert um andere Klassen abzuleiten (Bausteinklasse)
z.B. eine Class mit einer Kü- und Stenonote
Man soll nicht direkt auf die Attribute zugreifen, sondern über spezielle Methoden (z.B. get, set). Weiters sollen die Aktionen (z.B. lesen + schreiben) in getrennten Methoden angeführt sein.
= Platzreservierung, wenn das Programm läuft
in C: malloc (memory allocation / Speicher-Zuteilung)
x = malloc (2) während der Laufzeit werden 2 Byte an Speicher reserviert
*x = 50 ;
class knoten p.zahl=z
}
delete p
Kurzsymbol für destructor knoten knoten
Wenn eine Methode genauso wie die Klasse heißt, so ist sie ein Konstruktor
constructor kann weggelassen werden (C++, JAVA)
best fit (beste):
sucht nach dem optimalsten Speicherplatz, es können jedoch kleine Speicherreste übrigbleiben, die unbenutzt bleiben (z.B. bei 30 Byte wird ein 32 Byte-Block benutzt)
worst fit (schlechteste):
Zugriff auf den größten Speicherblock, nimmt dadurch anderen Programmen, die den Speicher benötigen, den Platz weg (z.B. bei 30 Byte werden 1000 Byte angeschnitten)
first fit (erste):
greift auf den 1. freien Speicher zu, egal wie groß der Block ist, sofern er größer als der geforderte Platzbedarf ist (z.B. bei 30 Byte 60 o. 100 Byte)
bei JAVA:
keine Mehrfachvererbung
keine Freunde
alles ist virtual (keine extra Eingabe von virtual)
hat garbage collection (automatisch; destructors werden fast nicht benötigt)
Klasse in JAVA:
Attribute
Methoden
Exception (Fehlerliste; catch = Stückchen Programm, das den Fehler bearbeitet)
class auto extents fahrzeug
public auto
}
catch bertl
Haupt | Fügen Sie Referat | Kontakt | Impressum | Nutzungsbedingungen