2005. Dipl.-Inform. Michael Kirchhof Dipl.-Inform. Bodo Kraft Prof. Dr.-Ing

Java Steilkurs Software-Praktikum im Grundstudium WS 2004/2005 Dipl.-Inform. Michael Kirchhof Dipl.-Inform. Bodo Kraft Prof. Dr.-Ing. Manfred Nagl Dep...
Author: Irmgard Frei
3 downloads 0 Views 377KB Size
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+"