Methoden und Klassen

Werbung
Methoden und Klassen
Silke Trißl, Prof. Ulf Leser
Wissensmanagement in der Bioinformatik
Wiederholung
„
Jede Applikation braucht eine Klasse mit einer
main-Methode
– Eintrittspunkt in das Programm
„
„
Die main-Methode wird public und static
deklariert
public bedeutet, dass die Java Virtual Machine die
Main-Methode des Programmes aufrufen darf, um
das Programm zu starten.
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
2
1
Methoden
class Klassenname
{
// Globale Variablen
public static void main(String[] args)
// lokale Variable
}
public Rückgabetyp methode1() {
// lokale Variable
}
private Rückgabetyp methode2() {
// lokale Variable
}
{
}
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
3
Methoden – static und Modifier
„
Modifier
– public
„
sichtbar für andere Klassen
– private
„
nicht sichtbar für andere Klassen, auch nicht der
Subklasse
– protected
„
gleich wie private, aber Subklasse kann darauf
zugreifen
– ohne Modifier
„
„
sichtbar für das Paket – das Standardverhalten
static / instance
– static bedeutet, dass die Methode keine
Instanzvariablen benötigt
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
4
2
Methoden - Rückgabetyp
„
void
– ohne Rückgabewert
„
„
„
nur Berechnung
sofortige Ausgabe
primitiver Typ
– int, long, short, byte, float, double, boolean, char
– benötigt einen entsprechenden Rückgabewert
„
jeder Typ
– String, Date
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
5
Objektorientierte Programmierung (OOP)
Vorstellung wie in der realen Welt:
hat
•
•
•
•
Radius
Position X
Position Y
...
kann man
•
•
•
•
•
Durchmesser
Umfang
Flächeninhalt
Radius ändern
...
ein Kreis
Objekt
Attribute
Methoden
Eigenschaften
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
6
3
Objektorientierte Programmierung
1. Abstraktion
Æ klare Trennung zwischen :
Umsetzung
Konzept
jeder
Kreis
dieser
Kreis
und
Objekt
einer Klasse
Klasse
oder auch :
alle Objekte mit gleichen Eigenschaften
gehören zu einer Klasse Æ Klassenbildung
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
7
Objektorientierte Programmierung
1. Abstraktion
2. Kapselung
• Zugriff auf die Attribute eines Objekts
i.d.R. nur über seine Methoden
• Verbergen unwichtiger Details (Black box)
Radius
Objekt
Fläche
Kreis
Durchmesser
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
8
4
Objektorientierte Programmierung
1. Abstraktion
2. Kapselung
3. Vererbung
•
•
•
•
Rechteck
Kantenlänge a
Kantenlänge b
Position X
Position Y
Quadrat
• Kantenlänge
• Position X
• Position Y
Kreis
• Radius
• Position X
• Position Y
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
9
Objektorientierte Programmierung
1. Abstraktion
2. Kapselung
Zeichenobjekt
• Position X
• Position Y
3. Vererbung
Rechteck
• Kantenlänge a
• Kantenlänge b
Quadrat
• Kantenlänge
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
Kreis
• Radius
10
5
Vererbung
„
„
Konsequenz aus Spezialisierung
Eine Unterklasse erbt alle Eigenschaften ihrer
Oberklasse:
– Eine Unterklasse erbt alle Attribute ihrer Oberklasse
– Eine Unterklasse erbt alle Methoden ihrer Oberklasse
„
Vererbungsbeziehung ist transitiv
– eine Unterklasse erbt die Variablen und Methoden aller
darüber liegenden Oberklassen
„
wenn C Unterklasse von B ist und B Unterklasse von A,
dann erbt C auch von A
B
C
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
A
11
Vererbung
„
Syntax
class Unterklasse extends Oberklasse
…
}
„
{
Beispiel
class Zeichenobjekt
…
}
{
class Kreis extends Zeichenobjekt
…
}
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
{
12
6
Vokabular
„
Klasse class
– Vorlage von der das eigentliche Objekt erzeut wird
„
Objekt
– wird aus einer Klasse konstruiert
⇒ Instanz(en) einer Klasse
– besitzt Instanzvariablen und Methoden
– hat einen aktuellen Zustand, der durch Methodenaufrufe
verändert werden kann
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
13
Klassen und Objekte
zeigt auf
Klasse
Objekt 1
Instanz 1
Instanzvariablen
Radius = 4
Instanz 2
Instanzvariable
Klasse
Objekt 2
Objekt 3
Radius = 6
Kreis
Instanz 3
Instanzvariable
Radius = 4
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
14
7
Initialisierung von Objekten
„
Konstruktor
– konstruiert und initialisiert neue Instanz
– gleicher Name wie Klasse
– immer in Verbindung mit new
new Klassenname(Variablen);
„
Objektvariable (Zeiger)
– Objektvariable ist vom Typ des Objekts
Klassenname instanzvariable =
new Klassenname(Variablen);
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
15
Methoden einer Klasse aufrufen
„
Ausgeben oder Verändern eines Zustandes durch
eine Methode
instanzvariable.methodenname(variablen);
„
Beispiel
Rechteck rechteck1 = new Rechteck(5, 4);
double flaeche = rechteck1.getFlaeche();
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
16
8
Eigene Klassen
„
„
werden für komplexe Java-Anwendungen benötigt
komplexe Anwendungen
– eine Klasse mit main-Methode
– viele zusätzliche Klassen (eigene oder Java-Library)
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
17
Eigene Klassen - cont.
• hat gleichen Namen wie Klasse
•
•
class NameDerKlasse
{
•
kann Parameter übernehmen
hat keinen Rückgabewert
wird immer mit new aufgerufen
Konstruktoren
...
•
Methoden
...
Instanzfelder
...
}
•
•
können public / private /
protected sein
Variablendeklaration
können public / private /
protected sein
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
18
9
Konstruktor
class Rechteck
{
// Konstruktor
public Rechteck(double l, double b)
laenge = l;
breite = b;
}
public Rechteck(int b, int b) {
laenge = l;
breite = b;
}
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
{
19
Methoden
// Methoden
public void calcFlaeche() {
flaeche = double(l * b);
}
public double getUmfang() {
double umfang = 2 * (l + r);
return umfang;
}
public double getFlaeche()
return flaeche;
}
{
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
20
10
Instanzfelder
// Instanzfelder
private int l, b;
private double l, b;
private double flaeche;
}
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
21
Objekte instanzieren
public class MainProg
{
public static void main(String[] args)
{
// Das Hauptprogramm
new Rechteck(l, b);
}
}
public class Rechteck
{
public Rechteck(int l, int b)
// Konstruktor
}
…
public getFlaeche() {
// Methode
}
{
}
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
22
11
Aufgabe: Klassen erstellen
„
„
Erstellt eine Klasse 'Kreis', die mit einem Radius
instanziert wird.
Die Klasse soll
– den Durchmesser zurückgeben
– den Umfang berechnen (2 * r * π)
– den Flächeninhalt berechnen (r2 * π)
„
Schreibt eine Main-Methode, mit der
– von Kreis 1 (r = 5) der Durchmesser berechnet werden
soll
– von Kreis 2 (r = 8) der Flächeninhalt
– von Kreis 3 (r = 9) der Umfang
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
23
Java Library - Vorhandene Klassen und
Packages
„
„
Jede Klasse gehört zu einem package.
Das Package java.lang steht dem
Programmierer ohne weitere Deklaration zur
Verfügung. Zu diesem gehören die Klassen
String, Math und System.
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
24
12
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
25
Organisation in Packages
„
Der kanonische Name einer Klasse ist der
package-Name, gefolgt von einem Punkt und
dem Klassennamen. (Der package-Name kann
weitere Punkte enthalten.)
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
26
13
Verwendung von Klassen
„
„
Beispiel: Die Klasse String heißt mit vollem
kanonischen Namen java.lang.String
Die Deklarationen
String hallo = "Hallo";
java.lang.String hallo = "Hallo";
„
sind äquivalent.
Im ersten Fall sucht das Java-System in
verschiedenen Packages nach der Klasse
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
27
Vorhandene Klassen und Packages
„
Java hat eine Vielzahl von vorhandenen Klassen,
organisiert in Packages
–
–
–
–
java.lang.*
java.Math.*
java.IO.*
java.util.*
– javax.swing.*
String, Math, System, ...
BigInteger, BigDecimal, ...
File, DataInput, DataOutput, ...
Random, GregorianCalendar, ...
GUI, Box, JoptionPane, JFrame...
– ...
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
28
14
Vorhandene Klassen und Packages cont.
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
29
Importieren von Klassen
„
Klassen importieren
import java.Package.class;
class kann auch durch '*' ersetzt werden
⇒ alle Klassen diese Packages werden importiert
„
„
Vereinfacht die Programmierung mit Klassen
– werden unter ihrem einfachen Namen verfügbar
– müssen nicht mit dem kanonischen Namen bezeichnet
werden
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
30
15
Beispiel
import java.util.*;
public class Klassen_verwenden {
public static void main (String [] args)
// Objektinitialisierung
new GregorianCalendar();
{
// Objektvariable (Zeiger)
GregorianCalendar c = new GregorianCalendar();
// Datum in Date-Format mit getTime()-Methode
Date birthday = c.getTime();
// Datum zu String mit toString()
String S = birthday.toString();
}
}
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
31
Aufgabe: Alter berrechnen
„
Erweitert die Anwendung 'Klassen verwenden' so,
dass
– in einer Variablen euer Geburtsdatum gespeichert wird
– in einer zweiten Variablen das aktuelle Datum
– Zeit berechnet wird, die seit eurer Geburt vergangen ist
// Datum auf einen anderen Wert setzen als heute
GregorianCalendar ago =
new GregorianCalendar(year, month-1, day);
// Zeit in Millisekunden zurückgeben
long timeInMillis = ago.getTimeInMillis();
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
32
16
Herunterladen