Java, OO und UML
Vorstellung des OO-Paradigmas Übersicht 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 OOfä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: boolean boolean[] String String[] Testclass.innerClassType Testclass.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 Java Primitiver Typ Größe in Bit Wertebereich Wrapper-Typ boolean 1 - Boolean char 16 Unicode 0 - Character Unicode 216-1 byte 8 (-128) - (+127) Byte short 16 (-2^15)-(+2^15-1) Short int 32 (-2^31)-(+2^31-1) Integer long 64 (-2^63)-(2^63-1) Long float 32 IEEE754 Float double 64 IEEE754 Double void - - 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