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