Java, OO und UML - FB2

Werbung
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 OOUmsetzung sind möglich
Dies schlägt sich in der Vielzahl OOfähiger Sprachen nieder
Sprachen wie Eiffel setzen das OOParadigma 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-NaurNotation
Java - Grammatik
Auszug aus der Java-Grammatik in EBNF:
...
Type
ReferenceType
::= ( ReferenceType | PrimitiveType );
::= ( 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
char
1
16
Boolean
Character
byte
short
int
long
float
double
void
8
16
32
64
32
64
-
Unicode 0 Unicode 216-1
(-128) - (+127)
(-2^15)-(+2^15-1)
(-2^31)-(+2^31-1)
(-2^63)-(2^63-1)
IEEE754
IEEE754
-
●
Byte
Short
Integer
Long
Float
Double
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
Herunterladen