Java-Intensivkurs am IAS

Werbung
Universität Stuttgart
Institut für Automatisierungs- und Softwaretechnik
Prof. Dr.-Ing. Dr. h. c. P. Göhner
Einführung in Java, Teil 2
(Original Titel der Folien: JavaIntensivkurs am IAS)
Vorlesung Informatik I, 17.11.2005, Daniel Huson
© 2000, IAS
1
Überblick
Teil 1:
‹ Erster Überblick
‹ Java Grundlagen
Teil 2:
‹ Grundlagen der Objektorientierung
‹ Klassen und Objekte in Java
© 2000, IAS
2
Grundlagen der Objektorientierung
Begriffe
‹ Objektorientierte Analyse
• OOA ist Analysemethode, Anforderungen aus der Perspektive
der Klassen und Objekte, die sich im Vokabular des
Problembereichs finden
‹ Objektorientiertes Design
• OOD ist Designmethode, Prozess der objektorientierten
Zerlegung
• Notation für Beschreibung der logischen und physikalischen
wie auch statischen und dynamischen Modelle des betrachteten
Systems
‹ Objektorientierte Programmierung
• Implementierungsmethode, Programme als Ansammlungen
von kooperierenden Objekten
• jedes Objekte ist Exemplar (Instanz) einer Klasse
• alle Klassen sind Elemente einer Klassenhierarchie, die durch
Vererbungsbeziehungen gekennzeichnet ist
© 2000, IAS
3
Grundlagen der Objektorientierung
Hauptelemente des Objektmodells
Die folgenden vier Konzepte sind die vier Hauptelemente des
Objektmodells (nach G.Booch)
Fehlt eines dieser vier Elemente, so ist das Modell nicht
objektorientiert:
‹ Abstraktion
‹ Kapselung
‹ Modularität
‹ Hierarchie
© 2000, IAS
4
Grundlagen der Objektorientierung
Abstraktion
• konzentriert sich auf die wesentlichen Charakteristika eines
Objekts
• relativ zur Perspektive des Betrachters
© 2000, IAS
5
Grundlagen der Objektorientierung
Kapselung
• verbirgt die Details der Objekt-Implementierung
• trennt somit die Schnittstelle einer Abstraktion von ihrer
Implementierung
© 2000, IAS
6
Grundlagen der Objektorientierung
Modularität
• packt Abstraktionen in eigenständige Einheiten
• Verbindungen zwischen den Modulen sind die Annahmen, die
die Module gegenseitig übereinander anstellen
© 2000, IAS
7
Grundlagen der Objektorientierung
Hierarchie
• Abstraktionen bilden eine
Hierarchie
• Klassenstruktur: “ist-ein”Hierarchie (Vererbung)
• Objektstruktur: “Teil-von”Hierarchie (Aggregation)
© 2000, IAS
8
Grundlagen der Objektorientierung
Objekt
‹ allgemein: Gegenstand des Interesses (einer
Beobachtung, Untersuchung, Messung)
‹ Objektorientierung: individuelles Exemplar
von
Methode
1
Methode
4
Gegenständen (Auto, Roboter),
Personen (Kunde, Mitarbeiter),
Begriffen der realen Welt (Auftrag) oder
Begriffen der Vorstellungswelt (Strategie)
‹ Kennzeichen von Objekten:
• Identität: Objekt kann deutlich von anderen
unterschieden werden
• Daten (Variablen): Eigenschaften des Objekts
• Methoden (Operationen): Lesen und
Manipulieren von Daten
Daten
Methode
2
•
•
•
•
Methode
3
‹ Geheimnisprinzip: Datenzugriff nur über
Methoden
© 2000, IAS
9
Grundlagen der Objektorientierung
Klasse
‹ allgemein: Gruppe von Gegenständen,
Lebewesen, Begriffen mit gemeinsamen
Merkmalen
‹ Objektorientierung:
ändern Name
“Objekt-Schablone” für
• Objekte mit denselben Variablen
(Daten) und
• denselben Operationen (Methoden)
‹ Objekt-Erzeugungsmechanismus
MitarbeiterKlasse
Name
Gehalt
ändern Gehalt
Mitarbeiter-Objekt
Mitarbeiter-Objekt
ändern Name
ändern Name
Name
Name
Müller
Meier
Gehalt
Gehalt
6.000
5.000
ändern Gehalt
ändern Gehalt
© 2000, IAS
10
Grundlagen der Objektorientierung
Huhn
Klasse
Name :
Größe :
Farbe :
Eier legen()
gackern()
Berta
Kunigunde
Objekte
Elsa
Elfriede
© 2000, IAS
11
Grundlagen der Objektorientierung
Vererbung
‹ Stellt eine Verallgemeinerung / Spezialisierung-Hierarchie
dar
‹ Eine untergeordnete Klasse erbt Eigenschaften und
Verhalten einer oder mehrerer übergeordneter Klassen
‹ „...ist ein...“ - Beziehung
© 2000, IAS
12
Grundlagen der Objektorientierung
Vererbung
Fahrzeug
Wasserfahrzeug
Landfahrzeug
PKW
Motorrad
Amphibienfahrzeug
Schiff
Cabrio
© 2000, IAS
13
Grundlagen der Objektorientierung
Aggregation
‹ Stellt Beziehung zwischen einem Ganzen und seinen Teilen
dar
‹ „...hat ein...“ - oder „...ist Teil von...“ - Beziehung
© 2000, IAS
14
Grundlagen der Objektorientierung
Aggregation
Auto
Motor
Lenkrad
Rad
Auspuff
Zündkerze
© 2000, IAS
15
Grundlagen der Objektorientierung
Unterschied zwischen Vererbung und Aggregation:
Vererbung:
‹ Ein Cabrio ist ein PKW.
‹ Ein Cabrio ist ein Fahrzeug.
‹ Ein Amphibienfahrzeug ist ein Landfahrzeug und ein
Wasserfahrzeug.
Aggregation:
‹ Ein Auto hat einen Motor, ein Lenkrad, Sitze, ...
‹ Ein Computer hat eine Grafikkarte, RAM, Prozessor, ...
© 2000, IAS
16
Überblick
Teil 1:
‹ Erster Überblick
‹ Java Grundlagen
Teil 2:
‹ Grundlagen der Objektorientierung
‹ Klassen und Objekte in Java
© 2000, IAS
17
Klassen und Objekte in Java
Programmstruktur (1)
Überblick:
Programm
Programm
*.java
*.java
*.java
*.java
*.java
*.java
class
class
interface
interface
class
class
...
package
© 2000, IAS
18
Klassen und Objekte in Java
Programmstruktur (2)
*.java-Dateien:
‹ Beinhalten Klassen- und Schnittstellendeklarationen, wobei
(genau) eine Klasse/Schnittstelle als public deklariert sein muss
• Klassen-/Schnittstellenname und Dateiname müssen übereinstimmen
(Groß- und Kleinschreibung beachten)
‹ Beinhalten package-Anweisung
‹ Beinhalten import-Anweisungen
Beispiel:
// Datei Test.java
package ias.kurs.java;
import java.awt.*;
public class Test {
...
};
© 2000, IAS
19
Klassen und Objekte in Java
Programmstruktur (3)
packages (Pakete):
‹ Organisationseinheit für Klassen und Schnittstellen
• beliebig tiefe Schachtelung von Paketen ist möglich,
z.B. java.awt.image
• Schachtelungsstruktur wird auf Verzeichnisse abgebildet,
z.B. java/awt/image
• ohne Angabe eines Pakets wird ein namenloses Defaultpackage
zugeordnet
‹ Legen Namensraum fest
• alle Klassen eines packages können einander direkt referenzieren
• Klassen anderer Pakete müssen explizit importiert (import) oder
qualifiziert (vollständige Pfadangabe) werden
• alle Klassen aus dem Paket java.lang sind standardmäßig importiert
‹ Zur Steuerung von Zugriffsrechten nützlich
• alle Klassen eines packages können einander sehen
© 2000, IAS
20
Klassen und Objekte in Java
Programmstruktur (4)
Java Applikation:
‹ Durch Einfügen einer main()-Methode in eine Klasse wird eine
Applikation vervollständigt:
// Datei: HelloWorld.java
public class HelloWorld {
public static void main( String[] args ) {
System.out.println(“Hello World!”);
}
}
‹ Die main()-Methode ist Einstiegspunkt in das Programm
‹ Die vor main() stehenden Schlüsselwörter (public static
void) sowie die Parameter (String[] args) sind immer gleich
© 2000, IAS
21
Klassen und Objekte in Java
Klassen (1)
Klasse
Klasse
Überblick:
Variablen
Variablen
Methoden
Methoden
Konstruktoren
Konstruktoren
‹ Variablen (Attribute):
• primitiver Typ: int i;
• Referenz:
Auto meinAuto;
• Array:
int[] intFeld1;
‹ Methode:
• Operation mit möglichen Rückgabewert (return)
• eindeutig durch Methodenname und Parameter
‹ Konstruktor:
• Zur Instanzierung von Objekten benötigt
• Default: Klassenname(){};
• weitere Konstruktoren möglich
• kein Rückgabewert!
© 2000, IAS
22
Klassen und Objekte in Java
Klassen (2)
Beispiel:
// Datei: Motorrad.java
class Motorrad {
String modell, farbe;
boolean motorZustand;
// Referenz auf Strings
// Motor an/aus
void starteMotor(){
// Methode starteMotor
if(motorZustand == true)
System.out.println(“Motor ist bereits an!”);
else {
motorZustand = true;
System.out.println(“Motor ist jetzt an!”);
}
}
void zeigeDaten(){
// Methode zeigeDaten
System.out.println(“Das Motorrad ist eine”
+ farbe + “e “ + modell);
}
}
© 2000, IAS
23
Klassen und Objekte in Java
Klassen (3)
Erklärungen:
‹ Klassendefinition durch: class Motorrad {}
‹ drei Variablen:
• Referenz auf Klasse String (Zeichenkette): model und farbe
• vom Datentyp boolean: motorZustand
‹ zwei Methoden:
• zum Starten des Motors starteMotor();
• zur Ausgabe der Motorraddaten zeigeDaten();
‹ Einrückungen haben für den Compiler keine Bedeutung
‹ keine Trennung von Deklarationen und Implementierung
© 2000, IAS
24
Klassen und Objekte in Java
Objekterzeugung mit new
‹ neue Objekte werden aus bestehenden Klassen mit
new-Operator erzeugt:
String str = new String();
Motorrad m2 = new Motorrad();
‹ Klammern dürfen nicht weggelassen werden!
‹ der new-Operator weist dem Objekt Speicherplatz zu und
ruft den passenden Konstruktor (Initialisierung) auf
Beispiel:
import java.util.Date;
class DatumAnzeige {
public static void main( String args[] ){
Date d1, d2;
d1 = new Date();
System.out.println(“Datum 1: “ + d1);
d2 = new Date(“April 7 1998 11:00 AM”);
System.out.println(“Datum 2: “ + d2);
}
}
© 2000, IAS
25
Klassen und Objekte in Java
Variablen (1)
Allgemein:
‹ Allgemeine Deklaration einer Variable:
[schlüsselwörter]
Typ/Klasse
variablenname
‹ Zugriff mit Hilfe der Punkt-Notation:
einObjekt.var1
//Zugriff auf var1 in einObjekt
einObjekt.v-aussen.v-innen
// verschachtelter Aufruf
Beispiel:
import java.awt.Point;
class TestPunkt {
public static void main( String args[] ) {
Point punkt = new Point ();
punkt.x = 5;
punkt.y = 12;
System.out.println(“Punkt(x/y): “ + punkt.x
+ “/” + punkt.y”);
}
}
© 2000, IAS
26
Klassen und Objekte in Java
Variablen (2)
Klassenvariablen:
‹ Klassenvariablen sind im Gegensatz zu „normalen“
Variablen Bestandteil der Klasse und nicht eines Objektes,
d.h. sie sind nur einmal pro Klasse vorhanden.
‹ Klassenvariablen werden mit dem static Schlüsselwort
definiert:
class FamilienMitglied {
static String nachname = “Mueller”;
String vorname;
}
‹ der Zugriff auf Klassenvariablen kann entweder über die
Klasse oder über das Objekt erfolgen:
FamilienMitglied sohn = new FamilienMitglied();
System.out.println(FamilienMitglied.nachname ); // ueber Klasse
System.out.println(sohn.nachname );
// ueber Objekt
© 2000, IAS
27
Klassen und Objekte in Java
Variablen (3)
Referenzen:
‹ Java kennt keine Zeiger und Zeigerarithmetik, aber
‹ ähnliche Möglichkeiten durch Referenzen
‹ Arbeiten mit Objekten bedeutet in Java hauptsächlich
Arbeiten mit Referenzen:
Beispiel:
import java.awt.Point;
class ReferenzenTest {
public static void main( String args[] ) {
Point pt1, pt2;
pt1 = new Point(100, 100);
pt2 = pt1;
pt1.x = 200;
pt1.y = 200;
System.out.println(“pt1: “ + pt1.x + “,” + pt1.y);
System.out.println(“pt2: “ + pt2.x + “,” + pt2.y);
}
}
© 2000, IAS
28
Klassen und Objekte in Java
Variablen (4)
Erklärungen zu ReferenzenTest:
pt1
1. Referenzen pt1, pt2
anlegen
pt2
2. Point-Objekt mit Wert
(100, 100) anlegen,
Referenz pt1 zeigt auf Objekt
3. Referenz pt2 zeigt auf selbes Objekt wie pt1
4. Objektwerte werden mit Hilfe von pt1 geändert
5. Werteausgabe mit Hilfe von pt1 und pt2
© 2000, IAS
Point Objekt
x: 200
y: 200
29
Klassen und Objekte in Java
Variablen (5)
Arrays:
‹ Arrays können beliebig viele Elemente eines Datentyps speichern
‹ verschiedene Datentyp-Elemente in einem Array sind nicht
möglich
‹ Deklaration
String[] words;
Point[] hits;
oder
String words[];
Point hits[];
‹ Erstellen des Array-Objekts
String[] words = new String[10];
String[] farbe = {“weiss”, “schwarz”, “rot”};
• Array kann mit new (s. words) oder mit Initialisierungswerten
(s. farbe) erstellt werden
• mit new werden die Array-Elemente automatisch initialisiert
(Initialisierungswerte: 0, false, ““)
© 2000, IAS
30
Klassen und Objekte in Java
Variablen (6)
Arrays:
‹ Zugriff auf Array-Elemente
String[] words = new String[10];
words[0] = “Java”;
‹ ein Array der Größe n hat die Indizes [0] bis [n-1]
‹ Zugriffe außerhalb des Arrays werden von Compiler und von der
Laufzeitumgebung erkannt, z.B. words[10] = “Error”
‹ die Instanzenvariable length enthält die Größe des Arrays
int laenge = words.length; // gibt 10 aus
‹ durch Schachtelung können mehrdimensionale Arrays
erzeugt werden:
int[][] koord = new int[5][10];
koord[0][0] = 4;
koord[4][9] = 123;
© 2000, IAS
31
Klassen und Objekte in Java
Methoden (1)
Definition:
‹ eine Methode besteht aus mindestens vier Teilen:
• Name der Methode
• Datentyp, der von der Methode zurückgegeben wird (void: kein Rückgabewert)
• Parameter (Argumentliste)
• Methodenkörper
Signatur
returntype methodenname(typ1 arg1, typ2 arg2, ...){
...
}
‹ optional können Zugriffsrechte und Ausnahmen festgelegt werden
‹ mit this auf das aktuelle Objekt zugegriffen werden
t = this.x;
// Zuweisung Objektvariable x
this.methode1(this); // Methodenaufruf mit this
return this;
// Rueckgabe des aktuellen Objekts
© 2000, IAS
32
Klassen und Objekte in Java
Methoden (2)
Methodenaufruf:
‹ Methoden werden mit Hilfe der Punkt-Notation und
Argumentliste (in Klammern) aufgerufen:
einObjekt.methode1(arg1, arg2, arg3);
‹ verschachtelte Methodenaufrufe sind möglich:
einObjekt.var1.methode1(arg1, arg2);
‹ in der Parameterliste werden primitive Datentypen als
Wert,
alle anderen als Referenz an die Methode übergeben,
d.h. wird ein referenziertes Objekt von der Methode
verändert, so bleibt die Veränderung nach Beendigung
der Methode bestehen
© 2000, IAS
33
Klassen und Objekte in Java
Methoden (3)
Beispiel:
...
class RefArgument {
int One2Zero( int arg[]) {
int count = 0;
for( int i = 0; i < arg.length; i++ ) {
if(arg[i] == 1) {
count++;
arg[i] = 0;
}}
return count;
}}
public static void main (String arg[]) {
int arr[] = {1, 5, 3, 1, 1, 6, 8, 1};
int nEins;
RefArgument test = new RefArgument();
for( int i = 0; i < arr.length; i++ )
System.out.print(arr[i] + “ “);
nEins = test.One2Zero(arr);
System.out.println(“Gefundene Einsen: “ + nEins);
for( int i = 0; i < arr.length; i++ )
System.out.print(arr[i] + “ “);
}
...
© 2000, IAS
34
Klassen und Objekte in Java
Methoden (4)
Klassenmethoden:
‹ Klassenmethoden wirken sich (wie Klassenvariablen) auf
ganze Klassen und nicht nur auf einzelne Objekte aus
‹ werden dort benützt, wo Objekte nicht vorausgesetzt sind,
z.B. Klasse Math der Java-Klassenbibliothek:
float root = Math.sqrt(453.2);
‹ Klassenmethoden werden mit dem static Schlüsselwort
definiert:
static int max( int arg1, int arg2) {...}
‹ Regel: Alle Methoden, die von allgemeiner Nützlichkeit
sind und nicht auf einzelne Objekte anwendbar sind, sollten
als Klassenmethoden definiert werden.
‹ Frage: Kennen Sie bereits eine Klassenmethode?
© 2000, IAS
35
Klassen und Objekte in Java
Vergleichen von Objekten
‹ die meisten Operatoren sind nur auf primitive Datentypen
(int, byte, char), aber nicht auf Objekte anwendbar
‹ Ausnahme: == und != prüfen Objekt(un)gleichheit,
aber keine Werte(un)gleichheit
‹ Wertevergleich in Klasse String durch Methode equals():
Beispiel:
class EqualsTest {
public static void main(String args[]) {
String str1, str2;
str1 = “Java macht Spass!”;
str2 = str1;
System.out.println(“Gleiches Objekt? “ +
(str1 == str2));
str2 = new String(str1);
System.out.println(“Gleiches Objekt? “ +
(str1 == str2));
System.out.println(“Gleicher Wert? “ +
str1.equals(str2));
}
}
© 2000, IAS
// wahr
// falsch
// wahr
36
Klassen und Objekte in Java
Kopieren von Objekten
‹ mit copy() kann ein Objekt in eine Instanz derselben
Klasse kopiert werden
‹ im kopierten Objekt enthaltene Objekte werden nicht
mitkopiert
Point pt1, pt2, pt3;
pt1 = new Point(0, 0);
pt2 = new Point(100, 100);
pt2.copy(pt1); // alle pt1-Werte werden in pt2 kopiert
‹ mit clone() kann eine neue Instanz der Quellobjekt-Klasse
erzeugt und mit den Quellobjektwerten initialisiert werden
pt3 = (Point) pt2.clone();
© 2000, IAS
37
Klassen und Objekte in Java
Zusammenfassung
‹ Paradigma Objektorientierung:
•
•
•
•
Abstraktion
Kapselung
Modularität
Hierarchie
‹ Struktur eines Java-Programms:
Klassen und Pakete º Dateien und Verzeichnisse
‹ Aufbau einer Klasse:
objekt- und klassenbezogene Variablen und Methoden
‹ Arbeiten mit Objekten heißt arbeiten mit Referenzen
‹ Elementare Operationen auf Objekten:
Erzeugen, Vergleichen und Kopieren
© 2000, IAS
38
Herunterladen