Java Steilkurs Software-Praktikum im Grundstudium WS 2004/2005 Dipl.-Inform. Michael Kirchhof Dipl.-Inform. Bodo Kraft Prof. Dr.-Ing. Manfred Nagl Department of Computer Science III Software Engineering Ahornstr. 55 52074 Aachen, Germany http://www-i3.informatik.rwth-aachen.de
WS 2004/2005
Java Steilkurs
Kirchhof, Kraft, Nagl
Gliederung Grundlagen der Objektorientierten Programmierung Einführung in die Programmiersprache Java Java auf UNIX-Rechnern verwenden Verfügbare Informationen (Literatur, URLs)
WS 2004/2005
2/ 2/51
Java Steilkurs
Kirchhof, Kraft, Nagl
OO - Grundlagen Objekte tauschen Nachrichten aus (rufen Methoden auf) können Zustände haben (Attribute) können Innereien verkapseln
Klassen gruppieren gleich strukturierte Objekte definieren verfügbare Methoden und Attribute
Sichtbarkeiten: public, protected, package, private Implizites Verhalten Objekte werden durch Konstruktoren initialisiert Vor Zerstörung wird Destruktor aufgerufen
WS 2004/2005
3/ 3/51
Java Steilkurs
Kirchhof, Kraft, Nagl
Sichtbarkeiten Klasse + Methode 1 # Methode 2 - Methode 3
Assoziierte Klasse kennt Methode 1
Subklasse
kennt Methode 1 und Methode 2
WS 2004/2005
4/ 4/51
Java Steilkurs
Kirchhof, Kraft, Nagl
Klassen und Objekte Klassen stellen Schablonen für gleichartige Strukturen dar Klassen sind Konstrukt der Programmierung
Ein Objekt beschreibt eine spezielle Ausprägung ein Klasse Objekte sind Konstrukte der Laufzeit.
Klassen sind statisch
Objekte sind dynamisch und verändern ihren Zustand zur Laufzeit.
i.A. können beliebig viele Objekte aus einer Klasse instantiiert werden.
Die Menge aller Objekte zu einem Zeitpunkt spiegelt den Zustand des Systems wieder.
Klasse Attribute
Object: Klasse Attribute = Wert
Methoden WS 2004/2005
5/ 5/51
Java Steilkurs
Kirchhof, Kraft, Nagl
OO - Vererbung (1) - Grundkonzepte Oberklasse Spezialisierung Attribute Eine Oberklasse A wird verwendet und um weitere Funktionalität zu einer Klasse B erweitert. Methoden
Generalisierung Gemeinsamkeiten einiger Klassen zur einer allgemeinen Oberklasse zusammenfassen. Substitution Wo Superklasse steht, darf Subklasse verwendet werden
Klasse Attribute Methoden
Überschreiben Methoden von Oberklassen können überschrieben werden WS 2004/2005
6/ 6/51
Java Steilkurs
Kirchhof, Kraft, Nagl
OO - Vererbung (2) - Beispiel Employee Name, Title, ... getName calculateIncome ...
Manager
Engineer
Bonus
Boss : Manager
calculateIncome
getBoss calculateIncome ...
ChiefEngineer
class class class class
Employee {...} Manager extends Engineer {...} Engineer extends Employee {...} ChiefEng extends Engineer, Manager{...}
WS 2004/2005
7/ 7/51
Java Steilkurs
Kirchhof, Kraft, Nagl
OO - Vererbung (3) - Schnittstellen Employee BonusPlan
PensionPlan
Name, Title, ... getName calculateIncome ...
calculateBonus ...
Manager
calculatePension ...
Engineer
Bonus
Boss : Manager
calculateIncome
getBoss calculateIncome ...
• Durch Seitenvererbung von Schnittstellen ist die Vereinigung der Methoden mehrerer Vorgänger'klassen' möglich. • Java-Ersatz für Mehrfachvererbung WS 2004/2005
8/ 8/51
Java Steilkurs
Kirchhof, Kraft, Nagl
OO - Aggregation vs. Assoziation Assoziation ein Objekt kennt andere Objekte Aggregation ein Objekt enthält andere Objekte Beispiel: Klasse Employee aggregiert Title, ist mit Manager assoziiert: class Engineer { private Title title; private Manager boss; ... public void setTitle(Title t) public void setBoss(Manager m) ... public Title getTitle() public Manager getBoss()
{title = t.copy();}; {boss= m; };
{return title.copy(); }; {return boss; };
... } WS 2004/2005
9/ 9/51
Java Steilkurs
Kirchhof, Kraft, Nagl
OO Programmierung - Polymorphie Auswahl einer Methode zur Laufzeit (Dynamisches Binden) Referenzierung von Objekten abgeleiteter Klassen durch Variablen/Referenzen einer Vorgängerklasse Manager aldritch = new Manager(...) Engineer joe = new Engineer(...); Employee emp; emp = aldritch ; emp.getSalary(); emp = joe; emp.getSalary();
// // // //
Employee Name, Title, ... getName getSalary ...
Manager erhalten Manager Festgehalt Bonus Ingenieure erhalten getSalary Stundenlohn
Engineer Boss : Manager getBoss getSalary ...
Zweck: z.B. Liste von Angestellten, unabhängig von speziellen Merkmalen wie Stellung, Gehaltsberechnung, ... Problem:ist auch die Rückzuweisung graham = wageRecipient; möglich?
WS 2004/2005
10/ 10/51
Java Steilkurs
Kirchhof, Kraft, Nagl
OO Programmierung - abstrakte Klassen Abstrakte Klasse unvollständige Klasse Abstrakte Methode ohne Implementierung
Eigenschaften von abstrakten Klassen können keine Objekte instantiiert werden abgeleitete (konkrete) Klasse müssen Implementierung realisieren Zweck: Definition von Schnittstellen für eine Menge verschiedener Klassen Person Name, Title, Adresse, ... calculateIncome
Retired
Student
yearsWorked
semester
calculateIncome
calculateIncome
Entrepreneur
Freelancer sales
calculateIncome
calculateIncome
WS 2004/2005
11/ 11/51
Java Steilkurs
Kirchhof, Kraft, Nagl
Was ist Java? “neue” Sprache, entwickelt von SUN seit 1990 objektorientierte Programmiersprache, angelehnt an C++ keine Trennung von Deklaration und Rumpf (.h, .c /.cpp) Plattformunabhängiger Bytecode für Internet / WWW Hello.class Hello.java
COMPILER
INTERPRETER 00110010
Mac
INTERPRETER 00110010
Linux
...
INTERPRETER 00110010
Windows WS 2004/2005
12/ 12/51
Java Steilkurs
Kirchhof, Kraft, Nagl
Internet WWW-Client und -Server WWW-Browser
WWW-Server
applet Module
HTML-Seite INTERNET
Dateisystem
Internet-Protokolle: ftp: file transfer protocol http: hypertext transfer protocol ... HTML: HyperText Markup Language Standardformat für Textseiten im WWW URL: Uniform Resource Locator (eindeutige) Adresse eines Dokumentes im Internet WS 2004/2005
13/ 13/51
Java Steilkurs
Kirchhof, Kraft, Nagl
Versprechungen von Java (1)
Robust
keine Zeigerarithmetik Garbage-Collection strenges Typkonzept Objektorientiert geringer Sprachumfang umfangreiche Klassenbibliothek (!) Einfach syntaktisch ähnlich zu C++, aber einfacher Dynamisch nur relevante Klassen laden und binden Plattformunabhängig (Quellcode + Bytecode) keine Portierung notwendig lediglich Web-Browser zur Ausführung notwendig WS 2004/2005
14/ 14/51
Java Steilkurs
Kirchhof, Kraft, Nagl
Versprechungen von Java (2) Unterstützung der Verteilung im WWW Interaktive Anwendungen 'Intelligenz' für WWW-Client (fat clients) im Web bisher lediglich Datenaustausch, keine Programme HTML: statische Daten
Unterstützung bewährter Konzepte anderer Sprachen Ausnahmen Garbage-Collection Package-Konzepte Concurrency
Sicherheit? WS 2004/2005
15/ 15/51
Java Steilkurs
ObjektorientierteKirchhof, Kraft, Nagl Programmierung mit Java
Klassen Methoden, Attribute Verkapselung Vererbung Polymorphie (statische vs. dynamische) abstrakte Klassen und Methoden Objekte Aggregation vs. Assoziation Überladen WS 2004/2005
16/ 16/51
Java Steilkurs
Kirchhof, Kraft, Nagl
Java – Sprachumfang (1) Bezeichner
employee, Hello
Kommentare
//Zeile
Basisdatentypen
int, float
Variablen
int zahl;
Konstanten
final float mwst = 16.0;
Arrays
int[] lotto = new int[6];
Operatoren
+, -
/* Bereich */
Kontrollstrukturen if switch for while WS 2004/2005
17/ 17/51
Java Steilkurs
Kirchhof, Kraft, Nagl
Java – Sprachumfang (2) Klassen - Vererbung
extends
Objekterzeugung u. -zugriff
Date bithdate = new Date();
Methoden Konstruktoren Überladung von Methoden Importierung von Klassen
setDate(Date geb); public Date () {...} setDate (Date geb, String info )
import java.util.* exception interface
Exceptions Schnittstellentypen Pakete Applets Applikationen
WS 2004/2005
18/ 18/51
Java Steilkurs
Kirchhof, Kraft, Nagl
Sprachumfang - Datentypen
Bezeichner: identifier
::=
letter{letter|number}
(aber keine Schlüsselwörter)
Kommentare /* ... */ oder // ...
(bis Zeilenende)
Basisdatentypen
» boolean » byte » short » int » long Klasse
char
(2 Byte)
(1 Byte)
float
(4 Byte)
(2 Byte)
double
(8 Byte)
(4 Byte) (8 Byte)
java.lang.String WS 2004/2005
19/ 19/51
Java Steilkurs
Kirchhof, Kraft, Nagl
Sprachumfang - Variablendeklarationen Variablendeklarationen: variableDecl ::= [final] Type variable {, variable}; variable ::= identifier{[]}[=initialization]
Attributdeklarationen: attrDecl ::= qualifier variableDecl qualifier ::= static |public |protected |private |transient |volatile
Beispiele: static int
nr;
boolean pass=true; final
float
PI=3.14
WS 2004/2005
20/ 20/51
Java Steilkurs
Kirchhof, Kraft, Nagl
Konventionen Klassen und Schnittstellen: großgeschriebene Substantive (Person, Buch, Iterator) Methoden: kleingeschriebene Verben (calculateIncome), Spezialfällen:
» get... und set... für attributähnlichen Zugriff » is... für Abfragen » to... für Konvertierungen » length für Längen Attribute: kleingeschriebene Substantive (address) Lokale Variablen: oft Abkürzungen, aber erkennbar! (persIdx) Konstanten: ganz groß geschrieben (PERS_MAX) WS 2004/2005
21/ 21/51
Java Steilkurs
Kirchhof, Kraft, Nagl
Sprachumfang - Felder Grundlegendes int vector[];
// Nur Deklaration, Wert null
vector = new int[4];
// Mit Platz für 4 integer
int vectorB[] = { 1, 2, 3, 4};
// gleich mit Werten
Felder von Objekten Person friends[]; // Deklaration friends = new friends[10]; // Platz für 10 Person-Objekten
for (int fIdx = 0; fIdx < friends.length; ++fIdx) { friends[fIdx] = new Person(); // Make friends }
mehrdimensionale Felder: int matrix[4][3]; Feld-Elemente: array.length und array.clone()
WS 2004/2005
22/ 22/51
Java Steilkurs
Kirchhof, Kraft, Nagl
Sprachumfang - Operatoren Binäre arithmetische Operatoren + op1+op2 - op1-op2
Vergleichsoperatoren >, < kleiner, größer >=, >>>
String-Operatoren +, +=
op--, --op i *= j entspricht i = i * j; WS 2004/2005
23/ 23/51
Java Steilkurs
Kirchhof, Kraft, Nagl
Priorität der Operatoren postfix Operatoren
[] . (Parameter)
einstl. Operatoren
++expr , --expr, +expr, -expr, !,
~ Erzeugung, Casting
new, (type)expr
Multiplikation
* / %
Addition
+
Shift
>> >>
-
Vergleich
< > = instanceof
Gleichheit
== !=
Bitweises Und / Oder
& |
logisches Und / Oder
&&
Wenn a dann i sonst j Zuweisungen
||
a?i:j = += -= /= %= = &= ... WS 2004/2005
24/ 24/51
Java Steilkurs
Kirchhof, Kraft, Nagl
Sprachumfang - if, switch if-else
switch
if (boolExpression) {...
switch (integralExpression) {
} else if(boolExpression){...
case value: ... break;
} else {... }
case value: ... break; default: ... }
Beispiel:
Beispiel:
... if (i == 1) { System.out.println(i+"=1"); } if (i > 10){ System.out.println(i+">10"); j = i; } else { System.out.println(i+"