Lektion2

Werbung
Programmieren mit JAVA
Teil II
Zusammenfassung
• Applikation vs. Applet
• sequentiell vs. objektorientiert
• Klasse, instanziieren, Objekt, Methode, Attribut
•
•
•
•
•
if ... else
Blockanweisung {}
Bedingungsoperator
switch ... case
while, do ... while, for Schleifen
abstrakte Klasse
• keine direkten Instanzen
• darf keine Implementierung von Methoden enthalten
• charakterisiert durch Schlüsselwort abstract
• dienen der Strukturierung und Vereinbarung von
Methodenschnittstellen
Vererbung
• ~ ist die Beziehung zwischen Superklasse und Subklasse (auch: abgeleitete Klasse)
• immer streng hierarchisch
• Methoden werden NICHT kopiert ! Nur formale Verknüpfung.
Vererbung
•
•
•
•
Attribute hinzufügen
neue Methoden spezifizieren
vorhandene Methoden überladen
geerbte Methoden ergänzen
• JAVA unterstützt nur Einfachvererbung !
Überschreiben
• ~ bedeutet, dass bei Namensgleichheit von Methoden
der Superklasse und abgeleiteter Klasse die Methoden
der abgeleiteten Klasse die der Superklasse verdecken
Polymorphismus
• Lässt sich ein und dieselbe Operation auf Objekte
unterschiedlicher Klassen anwenden, so ist diese
Operation polymorph.
Bsp.:
– Bei Objekten der Klasse Strecke bewirkt die Operation inc
ein kontinuierliches Inkrementieren bis zum Maximum des
Wertebereichs.
– In einer Klasse Blickrichtung könnte die inc Operation so
definiert sein, dass nach 359 auf 0 gesprungen wird.
Grundprinzipien der OOP
• Objekte heben die Trennung von Daten und Anweisungen auf
• Objekte tauschen Nachrichten aus und reagieren darauf. Anderen Kommunikationswege gibt es nicht
• Objekte erben Methoden und Attribute des Objektes in
der zugehörigen Superklasse
• Objekte können ererbte Methoden und Attribute erweitern und verändern
• Wenn Objekte zu verschiedenen Klassen gehören,
werden sie auf die gleiche Nachricht unterschiedlich
reagieren (Polymorphismus)
Überladen, Überschreiben,
Überschatten
Überladen:
– nur bei Methoden, NICHT bei Operatoren (++)
– mehrere Methoden mit identischem Namen aber unterschiedlichen Parameterlisten
– Methoden mit dem Schlüsselwort static können nicht überladen werden !
Überladen, Überschreiben,
Überschatten
Überschreiben:
– Name UND Parameterliste sind gleich
– ermöglicht Spezialisierung von Objekten
Überschatten:
– Variablen können überschattet werden
– Definition einer Variable mit anderem Typ als in der
Superklasse
Hauptbestandteile der Sprache
•
•
•
•
•
•
•
•
•
Token
Typen
Ausdrücke und Operatoren
Anweisungen
Klassen
Methoden
Schnittstellen
Pakete
Variablen
Token
• Zeichen, Merkmal
in JAVA gibt es fünf Arten von Token:
–
–
–
–
–
Schlüsselworte
Bezeichner
Literale
Operatoren
Trennzeichen
Die JAVA Token
Schlüsselworte:
– alle Wörter, die essentieller Teil der JAVA-Sprachdefinition
sind
– Groß- und Kleinschreibung werden unterschieden !
Bsp.:
public, class, static, void
Die JAVA Token
Bezeichner:
– Namen für Klassen, Objekte, Variablen, Konstanten,
Methoden ...
– an erster Stelle darf KEINE Zahl stehen !
– Bezeichner sollten nicht mit Namen von JAVA-Paketen
identisch sein
Bsp.:
HelloWorld, main, args, System, out, println, j, n32e20
Die JAVA Token
Bezeichner:
– Namenskonflikte werden über die Namensräume aufgelöst
Hierarchie:
• Namensraum des Paketes
• Namensraum der Klasse
• Namensräume der Methoden (Bezeichner der Methodenparameter
überdecken Attribute der Klasse !)
• Innerhalb der Methoden Namensräume in Blöcken
Die JAVA Token
Literal:
– mit einem ~ können Variablen und Konstanten Werte
zugewiesen werden
– Ganzzahlliterale, Gleitpunktliterale, Zeichenliterale,
Zeichenkettenliterale, Boolesche Literale
Bsp.:
„HelloJava“, 42, false, true
Die JAVA Token
Trennzeichen:
– alle Symbole für die Trennung und Zusammenfassung von
Code
Bsp.:
(){}[];,.
/* JAVA kennt nur diese 9 TZ */
Die JAVA Token
Operatoren:
– Zeichen oder Zeichenkombination, die eine Operation mit
einer oder mehreren Variablen oder Konstanten angibt
+, -, *, /, %
Arithmetische ~
+=, -=, *=, /=, %=, =
Arithmetische Zuweisungs~
++, -Inkrement-/Dekrement ~
&, |, ^, ~
Bit~
<<, >>, >>>
Bitweise Verschiebe~
&=, |=, ^=, <<=, >>=, >>>= Bitweise Zuweisungs~
==, !=, <, >, <=, >=
Vergleichs~
&&, ||, !
logische Vergleichs~
Die JAVA Token
Leerraum:
– Zeichen zur übersichtlichen Gestaltung des Quelltextes
Bsp.:
[Space], [Tab], [Zeilenende]
Die JAVA Token
Kommentar:
– zur übersichtlichen Gestaltung des Quelltextes und zur
Dokumentation
Bsp.:
/* Kommentar */
// Kommentar
/** Kommentar */
Typen
• Ein Typ gibt in der Computersprache an, wie ein
einfaches Objekt (wie z.B. eine Variable) im Speicher
des Computers dargestellt wird.
• Er enthält normalerweise ebenfalls Hinweise darüber,
welche Operationen mit und an ihm ausgeführt werden
können.
Typen
• JAVA besitzt 8 primitive Datentypen:
–
–
–
–
4 Ganzzahldatentypen
einen logischen Datentyp
zwei Gleitzahltypen
einen Zeichentyp
• primitiv bedeutet, dass diese Datentypen im System
integriert und nicht als Objekte zu verstehen sind
Typen
• Datentypen sind in JAVA plattformunabhängig !!
• besitzen immer einen wohldefinierten defaultAnfangswert, müssen also nicht zwingend initialisiert
werden
Typen
Bezeichnung
byte
short
int
long
float
double
char
boolean
Typ
8 Bit
16 Bit
32 Bit
64 Bit
32 Bit
64 Bit
16 Bit
1 Bit
Default-Wert
0
0
0
0
0.0
0.0
\u000
false
Typen
Datenfelder:
int antwort[];int[] antwort;
int antwort [] [];
int[] antwort = new int [5];
/* erzeugt fünfelementiges
Array vom typ int */
oder
int[] antwort = {41, 42, 43, 44, 45};
int [] [] antwort = {{41, 42}, {43, 44}};
Typen
Datenfelder:
– Indizierung beginnt bei 0 !
– Zugriff auf Elemente ausserhalb der Arraygrenzen erzeugt
Kompilierungs-/Laufzeitfehler
Zugriff auf Elemente mehrdimensionaler Felder:
antwort [1][1] = 44;
Achtung:
antwort [1,1] erzeugt Fehler !
Anweisungen
Anweisungsart
Leere Anweisung
Blockanweisungen
Bezeichnete Anweisung
Deklaration
Ausdrucksanweisung
Auswahlanweisung
Iterationsanweisung
Sprunganweisungen
Synchronisationsanweisung
Schutzanweisung
Unerreichbare Anweisung
Beschreibung
dient nur als Platzhalter
Zusammenfassen von Quelltext
werden als Ziel für Sprungbefehle genutzt
Einführung von Datentyp, Klasse, Objekt ...
7 verschiedene verfügbar =>
if, if .. else, switch .. case
while, do, for
break, continue, return, throw
für Multithreading, synchronized, threadsafe
try, catch, finally
erzeugt Fehler beim kompilieren
Anweisungen
Anweisungsart
Leere Anweisung
Blockanweisungen
Bezeichnete Anweisung
Deklaration
Ausdrucksanweisung
Auswahlanweisung
Iterationsanweisung
Sprunganweisungen
Synchronisationsanweisung
Schutzanweisung
Unerreichbare Anweisung
Beschreibung
dient nur als Platzhalter
Zusammenfassen von Quelltext
werden als Ziel für Sprungbefehle genutzt
Einführung von Datentyp, Klasse, Objekt ...
7 verschiedene verfügbar =>
if, if .. else, switch .. case
while, do, for
break, continue, return, throw
für Multithreading, synchronized, threadsafe
try, catch, finally
erzeugt Fehler beim kompilieren
Anweisungen
Anweisungsart
Leere Anweisung
Blockanweisungen
Bezeichnete Anweisung
Deklaration
Ausdrucksanweisung
Auswahlanweisung
Iterationsanweisung
Sprunganweisungen
Synchronisationsanweisung
Schutzanweisung
Unerreichbare Anweisung
Beschreibung
dient nur als Platzhalter
Zusammenfassen von Quelltext
werden als Ziel für Sprungbefehle genutzt
Einführung von Datentyp, Klasse, Objekt ...
7 verschiedene verfügbar =>
if, if .. else, switch .. case
while, do, for
break, continue, return, throw
für Multithreading, synchronized, threadsafe
try, catch, finally
erzeugt Fehler beim kompilieren
Blockanweisungen
• Eine Folge von Anweisungen kann zu einem
Anweisungsblock zusammengefasst werden.
• Dieser Block verhält sich dann wie eine einzelne
Anweisung.
if (day == “Sunday”)
tidyUpComputer ();
if (day == “Sunday”) {
clearTempDirectory();
makeBackup ();
scanDisk();
}
Anweisungen
Anweisungsart
Leere Anweisung
Blockanweisungen
Bezeichnete Anweisung
Deklaration
Ausdrucksanweisung
Auswahlanweisung
Iterationsanweisung
Sprunganweisungen
Synchronisationsanweisung
Schutzanweisung
Unerreichbare Anweisung
Beschreibung
dient nur als Platzhalter
Zusammenfassen von Quelltext
werden als Ziel für Sprungbefehle genutzt
Einführung von Datentyp, Klasse, Objekt ...
7 verschiedene verfügbar =>
if, if .. else, switch .. case
while, do, for
break, continue, return, throw
für Multithreading, synchronized, threadsafe
try, catch, finally
erzeugt Fehler beim kompilieren
Bezeichnete Anweisungen
Bsp.:
endOfLoop:
for (c1=0; c1<10; c1++) {
for (c2=0; c2<50; c2++) {
newchar = instream.read (); // read a char
if (newchar == ‚\0‘) break enfOfLoop;
System.out.println (newchar);
}
System.out.println (“\n”);
}
System.out.println (“The end”);
Anweisungen
Anweisungsart
Leere Anweisung
Blockanweisungen
Bezeichnete Anweisung
Deklaration
Ausdrucksanweisung
Auswahlanweisung
Iterationsanweisung
Sprunganweisungen
Synchronisationsanweisung
Schutzanweisung
Unerreichbare Anweisung
Beschreibung
dient nur als Platzhalter
Zusammenfassen von Quelltext
werden als Ziel für Sprungbefehle genutzt
Einführung von Datentyp, Klasse, Objekt ...
7 verschiedene verfügbar =>
if, if .. else, switch .. case
while, do, for
break, continue, return, throw
für Multithreading, synchronized, threadsafe
try, catch, finally
erzeugt Fehler beim kompilieren
Deklaration
•
•
•
•
•
Klassendeklarationen
Schnittstellendeklarationen
Datenfelddeklarationen
Objektdeklarationen
Deklaration primitiver Typen
Klassendeklarationen
• Eine ~ besteht immer aus 6 Teilen welche in folgender
Reihenfolge zusammengesetzt werden
Bestandteil
Klassenmodifier
Class
Bezeichner
Super
Status
optional
zwingend
zwingend
optional
Schnittstellen
optional
Klassenkörper
zwingend
Beschreibung
abstract, final, public
class
ein normaler Bezeichner
extends gefolgt von Typname, Typ
muss Klasse sein, die nicht final ist
implements gefolgt von durch
Kommata getrennter Liste mit
Schnittstellen
Schnittstellendeklarationen
• Eine ~ besteht immer aus 5 Teilen welche in folgender
Reihenfolge zusammengesetzt werden
Bestandteil
Schnittstellenmodifier
Interface
Bezeichner
Schnittstellenerweiterung
Status
optional
zwingend
zwingend
optional
Schnittstellenkörper
zwingend
Beschreibung
abstract, public
interface
ein normaler Bezeichner
extends gefolgt von Typname, Typ
muss Klasse sein, die nicht final ist
Datenfelddeklarationen
• Eine ~ besteht immer aus 5 Teilen welche in folgender
Reihenfolge zusammengesetzt werden
Bestandteil
Datenfeldmodifier
Status
optional
Typenname
zwingend
Klammern
Initialisierung
Semikolon
zwingend
optional
zwingend
Beschreibung
public,protected, private,
synchronized
Name des Typen oder der Klasse,
die aufgestellt werden
[]
;
Objektdeklarationen
• Ein Objekt zu deklarieren bedeutet, eine Referenz zu
erstellen
Bestandteil
Objektmodifier
Status
optional
Typenname
zwingend
Initialisierung
Semikolon
optional
zwingend
Beschreibung
public, protected, private,
synchronized
Name der Klasse, deren Instanz
dieses Objekt ist
;
Deklaration primitiver Typen
• Reservierung von Speicherplatz
• Initialisierung mit explizit angegebenem Wert oder
default-Wert
Bestandteil
Datenfeldmodifier
Status
optional
Typenname
zwingend
Initialisierung
Semikolon
optional
zwingend
Beschreibung
public, protected, private,
synchronized
boolean, char, byte, short, int,
long, float, double
;
Anweisungen
Anweisungsart
Leere Anweisung
Blockanweisungen
Bezeichnete Anweisung
Deklaration
Ausdrucksanweisung
Auswahlanweisung
Iterationsanweisung
Sprunganweisungen
Synchronisationsanweisung
Schutzanweisung
Unerreichbare Anweisung
Beschreibung
dient nur als Platzhalter
Zusammenfassen von Quelltext
werden als Ziel für Sprungbefehle genutzt
Einführung von Datentyp, Klasse, Objekt ...
7 verschiedene verfügbar =>
if, if .. else, switch .. case
while, do, for
break, continue, return, throw
für Multithreading, synchronized, threadsafe
try, catch, finally
erzeugt Fehler beim kompilieren
Anweisungen
Ausdrucksanweisung
Zuordnung
Prä-Inkrement
Prä-Dekrement
Post-Inkrement
Post-Dekrement
Methodenaufruf
Zuweisungsausdruck
Beispiel
a = 42
++wert
--wert
wert++
wert-System.out.println(„Hello World!“);
byte wert = new byte;
Anweisungen
Anweisungsart
Leere Anweisung
Blockanweisungen
Bezeichnete Anweisung
Deklaration
Ausdrucksanweisung
Auswahlanweisung
Iterationsanweisung
Sprunganweisungen
Synchronisationsanweisung
Schutzanweisung
Unerreichbare Anweisung
Beschreibung
dient nur als Platzhalter
Zusammenfassen von Quelltext
werden als Ziel für Sprungbefehle genutzt
Einführung von Datentyp, Klasse, Objekt ...
7 verschiedene verfügbar =>
if, if .. else, switch .. case
while, do, for
break, continue, return, throw
für Multithreading, synchronized, threadsafe
try, catch, finally
erzeugt Fehler beim kompilieren
Anweisungen
Anweisungsart
Leere Anweisung
Blockanweisungen
Bezeichnete Anweisung
Deklaration
Ausdrucksanweisung
Auswahlanweisung
Iterationsanweisung
Sprunganweisungen
Synchronisationsanweisung
Schutzanweisung
Unerreichbare Anweisung
Beschreibung
dient nur als Platzhalter
Zusammenfassen von Quelltext
werden als Ziel für Sprungbefehle genutzt
Einführung von Datentyp, Klasse, Objekt ...
7 verschiedene verfügbar =>
if, if .. else, switch .. case
while, do, for
break, continue, return, throw
für Multithreading, synchronized, threadsafe
try, catch, finally
erzeugt Fehler beim kompilieren
Anweisungen
Anweisungsart
Leere Anweisung
Blockanweisungen
Bezeichnete Anweisung
Deklaration
Ausdrucksanweisung
Auswahlanweisung
Iterationsanweisung
Sprunganweisungen
Synchronisationsanweisung
Schutzanweisung
Unerreichbare Anweisung
Beschreibung
dient nur als Platzhalter
Zusammenfassen von Quelltext
werden als Ziel für Sprungbefehle genutzt
Einführung von Datentyp, Klasse, Objekt ...
7 verschiedene verfügbar =>
if, if .. else, switch .. case
while, do, for
break, continue, return, throw
für Multithreading, synchronized, threadsafe
try, catch, finally
erzeugt Fehler beim kompilieren
Herunterladen