![Page 1: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/1.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
1
Entwicklung von Java
Forschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und eingebettete Anwendungen (OAK)
konzeptuelle Basis: OOP-Sprachen (C++, SmallTalk, Eiffel) Java Development Kit 1.2: ca. 2000 vordefinierte Klassen JDK 1.0: 1995, 1.1: 1996, 1.2: 1999 (Java 2-Plattform) „killer application“: Java Applets im WWW Nachteile höherer Programmiersprachen:
Hardwareinkompatibiliät, mangelnde Portabilität unzureichende oder nicht implementierte Standards Bedeutung des Internet über den akademischen Bereich hinaus
![Page 2: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/2.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
2
Grundkonzepte
Einfachheit Objektorientierung Robustheit Portabilität und Architekturneutralität:
plattformneutraler Bytecode virtuelle Java-Maschine (JVM) als Interpreter auf jeder Plattform
Interpretierte Sprache Multithreading (nebenläufige Programmierung als genuines
Sprachkonstrukt) Leistungsfähigkeit (?) automatische Speicherverwaltung Sicherheit
![Page 3: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/3.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
3
Einfachheit
Wesentlicher Anspruch: Einfachheit verglichen mit den Nachteilen von C++. Reduzierte Sprachdefinition gegenüber C++, typische Charakteristika von
C++ fehlen Einfache Migration, da syntaktisch eng an C++ angelehnt:
class HelloWorld {
public static void main(String args[]){
System.out.println(„Hello, world!");}
} Deklaration der Klasse HelloWorld Verwenden einer Methode main(), die wiederum eine vordefinierte Methode
der System-Klasse (Eigenschaft out der Klasse System vom Typ Printwriter - Ausgabe an die Konsole)
![Page 4: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/4.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
4
Objektorientierung in Java
Umsetzung der Objektorientierung analog zu C++ mit Vereinfachungen Datenkapselung (Modularität, data hiding and abstraction) Polymorphismus Vererbung dynamisches Binden von Klassen nach Bedarf Objekte: Zustand definiert durch Instanzenvariablen,
Instanzenvariablen und Methoden werden in einer Klassendefinition festgelegt; Objekte werden unter Verwendung des Klassennamens instantiiert.
![Page 5: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/5.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
5
Objektorientierung in Java II
Wie in C++: unterschiedliche Konstruktoren für eine Klasse
Bildung von Unterklassen (subclassing) im wesentlichen wie in C++
Wie in C++ Bildung abstrakter Superklassen, die nicht unmittelbar zu Objekten instantiiert werden: Effizienzsteigerung durch einmalige Definition abstrakter Methoden in der abstrakten Oberklasse, die dann von allen „konkreten" Objekten der Unterklassen benutzt werden können (Beispiel: Graphical - Rectangle, Circle etc)
![Page 6: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/6.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
6
Besonderheiten von Java im Vergleich zu C++
Syntax: eng an C/C++ angelehnt (Operatoren, Aufbau von Ausdrücken, Datentypen ...)
Unterschiede: kein Präprozessor kein Typedef kein Define keine Records und Unions („nur Klassen !“) keine Funktionen ( Methoden !) keine Mehrfachvererbung kein Goto
![Page 7: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/7.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
7
Besonderheiten von Java im Vergleich zu C++, II
kein Überladen von Operatoren keine Templates keine automatische Typumwandlung keine Zeiger/Pointer Speicherung in Unicode Packages (Pakete zusammengehörender Klassen) für
den Import von Klassen statt #include über Headerdateien
verschiedene Typen von Kommentaren automatische Speicherverwaltung synchronisierte Threads werden unterstützt
![Page 8: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/8.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
8
Sprachbeschreibung von Java
lexikalische StrukturDatentypenProgrammstrukturObjektorientierungSyntax (Ausdrücke, Anweisungen,
Operatoren)
![Page 9: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/9.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
9
Zeichenkodierung
Zeichenkodierung Kodierung von Zeichen in UNICODE Übersetzung eines Unicode-Zeichenstroms in Java-
Tokens Zusätzlich Mapping von ASCII nach UNICODE, um
auch Source-Code auf nicht-UNICODE-Systemen zu unterstützen (UNICODE als Obermenge von ASCII)
![Page 10: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/10.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
10
Lexikalische Struktur von Java II
Quelltext ::== { Kommentar | Leerzeichen | Sprachelement }
Leerzeichen ::== ASCII-SP | ASCII-HT | ASCII-FF | Zeilenendezeichen
Sprachelement ::== Schlüsselwort | Identifikator | Literal | Separator |
Operator
![Page 11: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/11.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
11
Schlüsselwörter von Java
abstractbooleanbreakbytecasecastcatchcharclassconstcontinuedefaultdo
nativenewnulloperatorouterpackageprivateprotectedpublicrestreturnshortstaticsuper
switchsychronize
dthisthrowthrowstransienttryvarvoidwhile
doubleelseextendsfinalfinallyfloatforifimplementsimportinstanceofintinterfacelong
![Page 12: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/12.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
12
Programmstruktur
Quelltextdatei ::== [Paketfestlegung] {Import} {Typdeklaration}
Paketfestlegung ::== package Paketname;
Import = Typimport | Paketimport;
Typdeklaration = Klassendeklaration | Schnittstellendeklaration
![Page 13: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/13.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
13
Beispiel Programmaufbau
package NeuesPaket;import java.applet.Applet;class Test extends Applet{
int EineEigenschaft = 0;int EineMethode(int EinFormalerParameter){
return (EinFormalerParameter + EineEigenschaft) * 5;}
}
![Page 14: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/14.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
14
Datentypen
einfache/primitive Datentypen Zeichen: char Ganzzahlen: byte short int long Gleitkommazahlen: float double Wahrheitswerte: boolean
Referenzdatentypen Arrays Klassen-Datentypen Interface-Datentypen (Schnittstellen)
![Page 15: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/15.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
15
Klassen- und Interface-Typdeklarationen
Eine Klassendeklaration führt einen Referenztyp ein, dessen Implementierung von der Implementierung einer anderen Klassen abgeleitet sein kann (Vererbung)
Eine Klasse kann unmittelbare oder mittelbare Superklasse einer anderen sein
interface-Deklaration: neuer Referenztyp, der eine Menge von Methoden und/oder Namen spezifiziert, ohne unmittelbare Implementierung
![Page 16: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/16.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
16
Klassendeklarationen
Aufbau:[public] [Klassenmodifikator (abstract, final)]
class Bezeichner [extends Klassentyp] [implements Schnittstellentyp {,
Schnittstellentyp}]Klassenrumpf
Beispiele: public class Test {...}abstract class Test2 {...}public final class Test3 implements InterfaceExmpl {...}
![Page 17: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/17.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
17
Klassenrumpf
Klassenrumpf = { Komponentendeklaration | Initialisierung } Der Klassenrumpf besteht aus einer oder mehrerer
Komponentendeklarationen, d.h. Variablen- und Methodenvereinbarungen sowie aus Initialisierungenpublic class test{
int test; //Deklarationint test2 = 0 //Deklaration und Initialisierung{ test = 5; } // Initialisierung in speparatem Block
int quadriere(int einWert) // Methodendeklaration{
return einWert * einWert;}
}
![Page 18: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/18.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
18
Sichtbarkeit
Das Schlüsselwort public in der Klassendeklaration einer (Toplevel-)Klasse regelt deren Sichtbarkeit:
Ist die Klasse public, ist sie auch außerhalb ihres Paketes sichtbar,
ansonsten ist sie nur in dem Paket sichtbar, in dem sie deklariert wurde.
![Page 19: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/19.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
19
Vererbung: Grundprinzipien
In Java existiert zwischen Klassen nur die Einfachvererbung, d.h. eine Klasse kann immer nur von einer Oberklasse abgeleitet sein:class Unterklasse extends Oberklasse{
//...}
Damit ist die sog. diamond inheritance ausgeschlossen
![Page 20: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/20.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
20
Vererbung: Sonderfälle
Von einer Klasse, die als final gekennzeichnet ist, kann man keine Unterklasse ableiten:
final class Unterklasse extends Oberklasse // geht nicht: class Unterklasse2 extends Unterklasse
Umgekehrt muß man von einer als abstract gekennzeichenten Klasse eine Unterklasse ableiten, um sie verwenden zu können
Mehrfachvererbung ist nur indirekt, d.h. über die einmalige oder mehrfache Implementierung von Schnittstellen durch eine Klasse möglich (zusätzlich zur Einfachvererbung)
![Page 21: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/21.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
21
Methodendeklaration
Vollständige Syntax der Methodendeklaration: [public | protected | private] Sichtbarkeit der Methode[static] Zuordnung Klasse/Objekt[abstract | final]
Vererbbarkeit/Abstraktionsgrad[native] Zugriff auf
Plattformspezifisches[synchronized] Synchronisation von threads
Resulttattyp Methodenname {[]} ([ÜbergabeParameter])[Ausnahmen] Methodenrumpf
![Page 22: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/22.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
22
Methodendeklaration
Die Methodendeklaration mußwenigstens folgende Bestandteile aufweisen:
Resulttattyp MethodenName() { //Rumpf } z.B.
void eineMethode(){
int x = 5;}
![Page 23: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/23.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
23
Sichtbarkeit von Methoden und Eigenschaften
public: Methode kann von anderen Klassen benutzt werden, auch außerhalb ihres Pakets bzw. der Klassenhierarchie
protected: Methode kann nur innerhalb der Klassenhierarchie und des Pakets der Klasse benutzt werden
default (kein Modifikator): Methode ist nur im gleichen Paket sichtbar
private: Methode kann nur von Objekten der Klasse, in der sie definiert ist, benutzt werden
![Page 24: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/24.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
24
Konstruktoren
Konstrukten die dienen der Initialisierung von Objekten Ein Konstruktor einer Klasse hat denselben Bezeichner wie die
Klasse selbst, aber keinen Rückgabewert Für eine Klasse kann es mehrere Konstruktoren mit
unterschiedlichen Parametern geben (Polymorphismus)class Konstrukt{
int einWert;Konstrukt(int W){
einWert = W;}
}
![Page 25: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/25.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
25
Konstruktoren: Beispiel
Für die vordefinierte Klasse String existieren zahlreiche verschiedene Konstruktoren, u. a.: public String() public String(String value) public String(char[] value) public String(char[] value, int offset, int count) public String(byte[] ascii, int hibyte, int offset, int count) public String(byte[] ascii, int hibyte) public String(StringBuffer, buffer)
![Page 26: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/26.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
26
Schnittstellen
Mit einer Schnittstelle gibt eine man Menge von Methoden und Eigenschaften vor, die von einer Klasse implementiert werden sollen. Alle Methoden einer Schnittstelle sind abstrakt, d.h. ohne Implementierung
Eine Schnittstelle liefert eine Funktionsschablone, die von unterschiedlichen Klassen implementiert werden kann
![Page 27: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/27.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
27
Aufbau von Schnittstellen
Syntax:
[public] [abstract] interface Schnittstellenname[extends Schnittstellenname {, Schnittstellenname}]Schnittstellenrumpf
![Page 28: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/28.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
28
Schnittstellen: Beispiel
public interface Darstellbar{
int Groesse = 2000;int Flaeche = 500;void stelleDar();
}
![Page 29: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/29.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
29
Methoden und Variablen in Schnittstellen
Alle Methoden einer Schnittstelle sind abstrakt; sie sind öffentlich (public), falls die Schnittstelle öffentlich ist
Die Variablen (Eigenschaften) einer Schnittstelle dienen zur Bestimmung von Konstantenwerten, d.h. sie müssen im Schnittstellenrumpf initialisiert werden; ihr Wert kann nicht mehr geändert werde.
![Page 30: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/30.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
30
OO-Modellierung mit Java: Klassen
UML-Beispiel Umsetzung in Java
Auto
Hubraum : int
beschleunigen(int) : boolean
bremsen(int) : void
Gewicht : int
class Auto{
int Hubraum;int Gewicht;boolean beschleunigen(int umWieviel){
// Implementierung ...return true;
}void bremsen(int umWieviel){
// Implementierung ...}
}
![Page 31: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/31.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
31
OO-Modellierung mit Java: Objekte
UML-Beispiel Umsetzung in Java
einAuto : Auto
Hubraum = 1800
Gewicht = 1100
class Autotest{
Auto einAuto;public Autotest(int H, int G){
einAuto.Hubraum = H;einAuto.Gewicht = G;
}// Das Objektschema links zeigt das Objekt einAuto// in dem Zustand, in dem es sich nach Aufruf des// Konstruktors Autotest(1800, 1100) befindet.
}
![Page 32: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/32.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
32
OO-Modellierung mit Java: Vererbung
UML-Beispiel Umsetzung in Java
Fahrzeug
Kombi
Flugzeug Auto
class Fahrzeug{
// Eigenschaften /Methoden}class Flugzeug extends Fahrzeug{
// Eigenschaften /Methoden}class Auto extends Fahrzeug{
// Eigenschaften /Methoden}class Kombi extends Auto{
// Eigenschaften /Methoden}
![Page 33: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/33.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
33
OO-Modellierung mit Java: Schnittstellen
«interface»Druckbar
bereiteDruckDaten() : void
sendeDruckDaten() : void
interface Druckbar{
// Methodenköpfe ohne Implementierungvoid bereiteDruckDaten();void sendeDruckDaten()
}
Grafik
Druckbar
bzw. Grafik
Druckbar
class Grafik implements Druckbar{
void bereiteDruckDaten(){
// Realisierung}void sendeDruckDaten(){
// Realisierung}
}
![Page 34: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/34.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
34
Fazit: OO-Konzepte in Java
Entstehung der Sprache: Java ist syntaktisch eng an C++ angelehnt, aber
anders als C++ eine streng an den Prinzipien der Objektorientierung orientierte Sprache.
Ausnahme: Primitiven Datentypen, die keine Objekte eines Klassentyps sind.
Typisierung: Java realisiert eine strenge Typprüfung – sowohl zur
compile time als auch zur Laufzeit eines Programms.
![Page 35: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/35.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
35
OO-Konzepte in Java (Forts.)
Vererbung Für Klassen existiert nur Einfachvererbung,
Mehrfachvererbung nur für Schnittstellen
Polymorphismus: das Überladen von Methoden und Konstruktoren, Entscheidung für die passende Methodenimplementierung
zur Laufzeit (late binding) und Zuweisung von Objektreferenzen zu Objektreferenzen
anderen Typs (im gleichen Teilbaum der Klassenhierarchie) Kein Überladen von Operatoren (z. B. Neudefinition von ‚+‘
oder ‚*‘ für eine Klasse)
![Page 36: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/36.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
36
OO-Konzepte in Java III
Initialisierung und Konstruktoren Eigenschaften von Klassen werden automatisch instantiiert
und mit Default-Werten belegt (0 bei Integer-Werten, false bei boolean ...)
Für jede Klasse existiert ein (parameterloser) Defaultkonstruktor
unterschiedliche Konstruktoren (Parametertyp und -anzahl) können deklariert werden
Die “Dekonstruktion” von Klassen geschieht automatisch durch die Speicherverwaltung
![Page 37: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/37.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
37
OO-Konzepte in Java IV
Abstrakte Klassen Die Bildung abstrakter Klassen wird von Java unterstützt.
Zusätzlich können in Schnittstellen abstrakte Methoden zusammengestellt werden, die einen semantisch zusammengehörenden Funktionalitätsbereich spezifizieren.
Metaklassen und Klassenobjekte Durch die Klasse Class und die im Paket java.lang.reflect
unterstützt Java die Bildung von Klassen und Objekten und das dynamische Laden von Klassen, deren Instantiierung und Verwendung zur Laufzeit eines Programms.
![Page 38: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/38.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
38
OO-Konzepte in Java V
Generische Klassen Mit Hilfe der Basisklasse Object und der Mechanismen der
class reflection lassen sich generische Klassen (z. B. abstrakte Datentypen) definieren, die je nach Bedarf mit Objekten unterschiedlichen Typs gefüllt werden können, vgl. unten Kap. und .
Zuweisung von Objektreferenzen Die Zuweisung von Objektreferenzen erfolgt auf der Basis der
Referenzsemantik (d. h. die Referenz auf das Objekt, nicht seine Werte werden übergeben). Für primitive Datentypen gilt die Wertsemantik.
![Page 39: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/39.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
39
Anweisungen und Anweisungsblöcke
Blockaufbau und Variablendeklarationen erfolgen im wesentlichen nach den von C++ bekannten Regeln.
Folgende Typen von Anweisungen sind in Java vorhanden: Leere Anweisung Anweisung mit Label Ausdruck; Auswahl Iteration Sprunganweisung Sychronisationsanweisung Ausnahmeanweisung
![Page 40: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/40.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
40
Anweisungsblöcke
Ein Anweisungsblock besteht aus einer einzenlen, durch Semikolon abgeschlossenen Anweisung oder einer in geschweiften Klammern eingefassten Folge von Anweisungen:
Anweisung;
{Anweisung1; Anweisung2;// ...Anweisungn;
}
![Page 41: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/41.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
41
Methoden- und Komponentenzugriffe
Auf die Methoden einer Klasse (eines Objektes einer Klasse) kann man unter Angabe von Klase und Methode zugreifen:
Objektname.Methodenname();Z. B.:System.out.println();
Gleiches gilt für die Komponenten eines Objekts:MeinObjekt.MeineEigenschaft = 0;
Die Angabe der Objektvariablen ist nur notwendig, wenn der Zugriff nicht ohnehin innerhalb der Klassendeklaration erfolgt.
![Page 42: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/42.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
42
Operatoren und Separatoren
verfügbare Operatoren im wesentlichen mit den aus C/C++ bekannten Operatoren identisch:Separatoren:
() [] {} ; , .Operatoren:
= > < ! ? : == <= >= != && ||++ -- + - * / & | ^ %
<< >>>>> += -= *= /= &= |= ^= %=<<= >>=>>>=Wichtig: Der Additionsoperator ist auch für Objekte vom Typ String definiert (string concatenation).
![Page 43: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/43.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
43
Auswahlanweisungen
Wie in C/C++ gibt es zwei Formen: if-Anweisung (mit else-Verzweigung) switch-Anweisung Zu beachten ist, daß bei der if-Anweisung der auszuwertende
Typ den Datentyp boolean haben muß; anders als in C können also nicht ohne weiteres einfach Integer-Variablenwerte ausgewertet werden, da sie nicht direkt nach boolean konvertierbar sind.
![Page 44: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/44.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
44
Die IF-Anweisung
if(<Bedingung>)Anweisung; bzw. {Anweisungsblock;} [else Anweisung; bzw. {Anweisungsblock;}]
class Test{
static public void main(String args[]){
int iZaehler = 5;if(iZaehler > 10){
System.out.println(iZaehler);}else{
System.out.println(iZaehler+10);} } }
![Page 45: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/45.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
45
Switch-Anweisung
switch(<Ausdruck>){
case Auswahlwert1:// auszuführender Code für Fall 1
[break;]
case Auswahlwert2:// auszuführender Code für Fall 1
[break;]// ...ggf. weitere Fälle
default:// auszuführender Code, sollte sonst nichts zutreffen
[break;]}
![Page 46: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/46.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
46
Beispiel Switch-Anweisung
int i = 0;
for(i = 5; i >= 0; i--)
{
switch(i)
{
case 4:
case 5:
System.out.print("i ");
break;
case 3:
System.out.print("\bst");
break;
case 2:
System.out.print(" die ");
case 1:
System.out.println("Zählvariable");break;
default:
System.out.println(".");break;
}}
}}
![Page 47: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/47.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
47
Iterationsanweisungen
Zur Ablaufsteuerung existieren wie in C/C++ drei Schleifenkonstrukte: eine while-Schleife:
while (Ausdruck) Statement eine do/while-Schleife:
do Anweisung while (Ausdruck) eine for-Schleife:
for(Init; Ausdruckopt; Inkrementopt) Anweisung
![Page 48: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/48.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
48
Beispiel while-Schleife
// ...iZaehler = 5;while(iZaehler-- > 0){
System.out.Println(iZaehler);}// ...while(false){
// Schleifenrumpf wird nie erreichtSystem.out.println(iZaehler);
}// ...
![Page 49: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/49.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
49
Beispiel do-while-Schleife
iZaehler = 5;do{
System.out.println("Schleifenrumpf do-while\n");
}while(iZaehler-- > 0);
![Page 50: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/50.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
50
Beispiel For-Schleife
for(i = 5; i < 10; i++){
System.out.println(i);System.out.println(“\n”);
}
![Page 51: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/51.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
51
Sprunganweisungen
Der Kontrollfluß kann auch unbedingt durch Sprunganweisungen gesteuert werden: break [Bezeichner] - Verlassen einer Ausführungsumgebung continue [Bezeichner] - Fortsetzen einer umgebenden
Anweisung return [<Ausdruck>] Wertrückgabe
![Page 52: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/52.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
52
Beispiel break-Anweisung
int i = 0;for(i = 5; i >= 0; i--){
if(i == 3)break;
}System.out.println(i);
![Page 53: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/53.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
53
Beispiel Break mit Label
int i = 10, j = 0, k = 0;Ziel_des_Sprungs: while(i > 0){
do{
j++;for(k = 5; k >= 0; k--){
if(k == 3)break Ziel_des_Sprungs;
}}while(j < 10);i--;
}System.out.println(k);
Ausgabe: 3
![Page 54: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/54.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
54
Beispiel continue-Anweisung
for(int i = 0; i < 5; i++){
System.out.println("vor");if(i == 2) continue;System.out.println("nach");
}
Ausgabe:vor nach vor nach vor vor nach vor nach
![Page 55: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/55.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
55
Defensives Programmieren mit Ausnahmen
Möglichst frühzeitig sollen vom "normalen" Verhalten eines Programms abweichende Ereignisse abgefangen werden. Gerade bei Zugriff auf externe Ressourcen (Dateien, Netzwerkverbindungen etc.) tritt häufig der Fall ein, daß etwa ein Dateizugriff nicht gelingt da die Datei gesperrt ist oder eine Netzwerkressource nicht erreicht werden kann.
Dazu dienen in Java Ausnahmen
![Page 56: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/56.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
56
Ausnahmen
Ausnahmen können durch eine throws-Anweisung einer Methode zugeordnet werden
in Java gibt es eine Reihe vordefinierter Ausnahmen Eine Ausnahme wird durch die throw-Anweisung
explizit ausgelöst
![Page 57: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/57.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
57
Beispiel: Ausnahmeauslösung
static int teile(int x, int y) throws ArithmeticException{
if(y==0)throw(new ArithmeticException("Division durch 0"));elsereturn x / y;
}
![Page 58: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/58.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
58
Abarbeiten von Ausnahmen
Try-, catch- und finally-Anweisungen dienen der Bearbeitung von Ausnahmen
Folgende Varianten sind erlaubt: try <Anweisungsblock> <catch-Block> try <Anweisungsblock> [<catch-Block>] finally
Ein mit try umschlossener Anweisungsblock muß einen catch-und/oder finally-Block nach sich ziehen. Ein einzelnes catch-Statement in einem <catch-Block> ist wie folgt aufgebaut
catch(Ausnahmetyp) <Anweisungsblock>
![Page 59: Ch. Wolff Digitale Informationsverarbeitung, Kap. 261 Entwicklung von Java zForschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und](https://reader031.vdokument.com/reader031/viewer/2022013011/55204d6349795902118b889f/html5/thumbnails/59.jpg)
Ch. Wolff Digitale Informationsverarbeitung, Kap. 26
59
try-/catch-Anweisungen schematisch
Schematisch sieht die Verwendung von try-catch-Konstrukten wie folgt aus:
try{ // Programmcode, der möglicherweise eine Ausnahme auslöst }catch(Ausnahme A1){ // Programmcode zur Ausnahmebehandlung }catch(Ausnahme A2){ // Programmcode zur Ausnahmebehandlung }finally{ // Programmcode, der unabhängig davon, wie der try-Block
// verlassen wurde, immer ausgeführt wird }