Java, OO und UML
Übersicht
● Vorstellung des OO-Paradigmas● Umsetzung des OO-Paradigmas in Java● Einführung (seeeeeehr rudimenter) in
UML zur graphischen Darstellung von OO● Grammatik und Semantik von Java
Das Objektorientierte Paradigma
● OO bildet keine geschlossene theoretisch abgegrenzte Basis (wie z.B. das Relationsmodell relationaler Datenbanken)
● OO ist eine Sammlung und Nutzung mehrerer Prinzipien– Klasse (Kapselung)– Objekte (Kapselung)– Vererbung– Nachricht– Polymorphie– Identität (von Objekten)
Das Objektorientierte Paradigma
● Unterschiedliche Ansätze der OO-Umsetzung sind möglich
● Dies schlägt sich in der Vielzahl OO-fähiger Sprachen nieder
● Sprachen wie Eiffel setzen das OO-Paradigma am konkretesten um, hier ist alles Objekt, es gibt keine primitiven Datentypen
Das Objektorientierte Paradigma
● Um das Paradigma von der reellen Implementierung abzugrenzen, gibt es Beschreibungssprachen
● Diese geben OO-Konzepte sprachneutral wieder
● Die bekannteste und verbreitetste ist UML● UML ist zudem eine graphische
Beschreibungssprache● Die OO-Konzepte von Java werden im
folgenden in UML mitdargestellt
Vokabeln lernen -Java und Grammatik
Java - Grammatik
● Für alle Programmiersprachen gilt, dass sie einer Grammatik genügen müssen
● Diese Grammatik ist eben genau durch den Compiler, der den Quellcode in Maschinensprache übersetzt, festgelegt
● Genügt der Quellcode nicht der Grammatik der Sprache, in der er geschrieben ist, gibt der Compiler Fehler aus
● Ein theoretisches Konstrukt für Grammatiken ist die Backus-Naur-Notation
Java - Grammatik
Auszug aus der Java-Grammatik in EBNF:...Type ::= ( ReferenceType | PrimitiveType );ReferenceType ::= ( PrimitiveType ( "[" "]" )+ |
( ClassOrInterfaceType ) ( "[" "]" )* );ClassOrInterfaceType ::= <IDENTIFIER> ( TypeArguments )? ( "."
<IDENTIFIER> ( TypeArguments )? )*;TypeArguments ::= "<" TypeArgument ( "," TypeArgument )* ">";TypeArgument ::= ( ReferenceType | "?" ( WildcardBounds )? );WildcardBounds ::= ( "extends" ReferenceType |
"super" ReferenceType );PrimitiveType ::= ( "boolean" | "char" | "byte" | "short" |
"int" | "long" | "float" | "double" );...
Beispiele:booleanboolean[]StringString[]Testclass.innerClassTypeTestclass.innerClassType[]...
Java - Grammatik
● Java-Quellcode setzt sich grammatisch zusammen aus:– Bezeichner oder Identifier– Schlüsselworte (sog. Terminale)– Literale– Operatoren– Trennzeichen
Java - Grammatik
public class test {public alert(String text) {
System.out.println(text + „ TEST“);}
} * Bezeichner oder Identifier * Schlüsselworte (sog. Terminale) * Literale * Operatoren * Trennzeichen
Die Konzepte des Paradigmas
Konzepte des Paradigmas - Klasse
● Ist die grundlegende Beschreibung von gleichartigen Objekten
● Diese teilen sich dadurch– Attribute– Operatoren– Methoden– Beziehungen– Semantik
Konzepte des Paradigmas - Klasse
● Es gibt konkrete und abstrakte Klassen● Konkrete Klassen beinhalten
ausprogrammierte Methoden, abstrakte Klassen nicht
● Abstrakte Klassen dienen als Strukturierungsmittel beider Vererbung
● Abtstrakte Klassen heissen in Java Interfaces (bzw. werden als solche verwendet)
Konzepte des Paradigmas - Klasse
● Darstellung in UML
Konzepte des Paradigmas - Klasse
● ... und in Java
class Mediafile {// Attribute
// Methoden}
Konzepte des Paradigmas - Objekt
● Ist die konkrete Ausprägung einer Klasse● Vereinfacht gesagt, die durch den
Objektnamen eindeutig bezeichnete Kopie des Klassenquellcodes im Speicher
● In UML
Konzepte des Paradigmas - Objekt
Konzepte des Paradigmas - Objekt
● In Java...● ...wird ein Objekt durch den new –
Operator erzeugt– Klasse Objektname = new Konstruktor()– Testclass test = new Testclass();
● Ist in einer Klasse kein dedizierter Konstruktor implementiert, erzeugt Java einen Standardkonstruktor
Konzepte des Paradigmas - Attribut
● Ist ein bennanter Speicherplatz innerhalb einer Klasse
● Beschreibt eine Menge von gültigen Wertebelegungen innerhalb der Objekte
● Diese Mengen werden als Typ des Attributes bezeichnet
● Im Normalfall sind alle Attribute separiert● Sollen Attribute klassenweit für Objekte
gelten, muß dies explizit angegeben werden
Konzepte des Paradigmas - Attribut
● Dies gilt ebenso für eine evt. Konstantenverwendung eines Attributes
● Attribute können in ihrer Sichtbarkeit definiert werden (public, protected, private)
● Zudem gibt es abgeleitete Attribute● Diese werden durch Methoden aus
bestehenden Attributen errechnet
Konzepte des Paradigmas - Attribut
● Attribute in UML
Konzepte des Paradigmas - Attribut
● Attribute in UML– +, - und # bezeichnen die Sichtbarkeit public,
private und protected– [] bezeichnen Multiplizität des Attributes
(Array)– / bezeichnet ein abgeleitetes Attribut– Reihenfolge ist:
● Sichtbarkeit● Multiplizität● Bezeichnung● Typ
Konzepte des Paradigmas - Attribut
● In Java public class TestKlasse { boolean testAttrib1 = false; protected int testAtttrib2 =42; private char testAttrib3; short testArray[]; final double pi = 3.14; static int noOfTestKlasse; }
Konzepte des Paradigmas - Attribut
● Kurzer Einschub über den Scope / Gültigkeitsbereich von Attributen
● Faustregel: Innerhalb des Klammerpaares, das den Bereich umschliesst, in dem das Attribut definiert wurde, gilt das Attribut als sicht- und veränderbar.
● Alle Attribute, die direkt im Körper der Klasse definiert sind, sind demnach für alle Methoden der Klasse sichtbar
Konzepte des Paradigmas - Attribut
● Weiter können aber auch Attribute hier definiert werden:– Methoden– Schleifen– Verzweigungen– Anonymen Blöcken
● Diese sind dann (siehe Faustregel) nur in der jeweiligen Struktur sichtbar
● Doppelte Definitionen sind allerdings verboten
Konzepte des Paradigmas - Attribut
public class Testclass {
public int number = 5;
public add(int new_number) {number = number + new_number;// eigentlich this.number// kann aber bei Eindeutigkeit entfallen
}
public check() {int check_value = 10;if (number > check_value) {
String output1 = „Is greater than 10“;System.out.println(output1);
} else {String output2 = „Is lesser than 10“;System.out.println(output2);
}System.out.println(output1); // FEHLER, nicht sichtbar!
}
}
Konzepte des Paradigmas - Attribut
● Primitive Datentypen in JavaPrimitiver Typ Größe in Bit Wertebereich Wrapper-Typ
boolean 1 - Booleanchar 16 Unicode 0 - Character
Unicode 216-1byte 8 (-128) - (+127) Byteshort 16 (-2^15)-(+2^15-1) Shortint 32 (-2^31)-(+2^31-1) Integerlong 64 (-2^63)-(2^63-1) Longfloat 32 IEEE754 Floatdouble 64 IEEE754 Doublevoid - - Void
● Wrappertypen sind Klassen für prim. Datentypen (Objekt <-> Wert)
Konzepte des Paradigmas - Identität
● Identität unterscheidet Objekte voneinander
● Theoretisch und praktisch können Objekte gleichen Typs zur gleichen Zeit– Gleiche Werte– Gleichen Namen– Gleichen Zustand
● haben. Zur Unterscheidung erzeugt Java den OID (Object identifier) automatisch
● Dieser ist komplett unsichtbar