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