Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Programmieren mit JAVA

Ähnliche Präsentationen


Präsentation zum Thema: "Programmieren mit JAVA"—  Präsentation transkript:

1 Programmieren mit JAVA
Teil IV

2 Hauptbestandteile der Sprache
Token Typen Ausdrücke und Operatoren Anweisungen Klassen Methoden Schnittstellen Pakete Token: sind die Bestandteile des Java-Quellcodes,die sich in logische Einheiten zerlegen lassen und gültigen Arten zuordnen lassen (Bezeichner, Schlüsselwörter, Literale, Operatoren, Trennzeichen Typ gibt an, wie ein einfaches Objekt im Speicher des Computers dargestellt wird. (Wertebereich) Ausdrücke drücken einen Wert entweder direkt oder durch Berechnung aus oder sind Kontrollausdrücke zur Ablaufsteuerung des Programms. Bestehen aus Operanten, Operatoren und anderen Ausdrücken. Anweisungen sind Kontrollfluß oder Ausnahmeanweisungen und werden der Reihe nach ausgeführt. (Block, Deklaration, Ausdruck, Auswahl, Iteration, Sprung...) Weiter geht’s mit den Klassen in Java...

3 Vererbung Um eine neue Klasse aus einer bestehenden abzuleiten, ist im Kopf der Klasse mit Hilfe des Schlüsselworts extends ein Verweis auf die Basisklasse anzugeben Hierdurch erbt die abgeleitete Klasse alle Eigenschaften der Basisklasse (Variable und Methoden) Bsp.: class Cabrio extends Auto { int vdauer; Cabrio kfz1 = new Cabrio(); kfz1.name = "MX5"; kfz1.erstzulassung = 1994; kfz1.leistung = 115; kfz1.vdauer = 120; System.out.println("Alter = "+kfz1.alter()); } Man unterscheidet dabei zwischen einfacher Vererbung, bei der eine Klasse von maximal einer anderen Klasse abgeleitet werden kann, und Mehrfachvererbung, bei der eine Klasse von mehr als einer anderen Klasse abgeleitet werden kann. In Java gibt es lediglich Einfachvererbung, um den Problemen aus dem Weg zu gehen, die durch Mehrfachvererbung entstehen können. Um die Einschränkungen in den Designmöglichkeiten, die bei Einfachvererbung entstehen, zu vermeiden, wurde mit Hilfe der Interfaces eine neue, restriktive Art der Mehrfachvererbung eingeführt. Wir werden später darauf zurückkommen. Als Beispiel wollen wir eine neue Klasse Cabrio definieren, die sich von Auto nur dadurch unterscheidet, dass sie zusätzlich die Zeit, die zum Öffnen des Verdecks benötigt wird, speichern soll: Wir können nun nicht nur auf die neue Variable vdauer, sondern auch auf alle Elemente der Basisklasse Auto zugreifen:

4 Zugriff auf geerbte Membervariable
Eine abgeleitete Klasse erbt jeweils die Eigenschaften der unmittelbaren Vaterklasse, die ihrerseits die Eigenschaften ihrer unmittelbaren Vaterklasse erbt Bsp.: class ZweisitzerCabrio extends Cabrio { boolean notsitze; ZweisitzerCabrio kfz1 = new ZweisitzerCabrio(); kfz1.name = "911-T"; kfz1.erstzulassung = 1982; kfz1.leistung = 94; kfz1.vdauer = 50; kfz1.notsitze = true; System.out.println("Alter = "+kfz1.alter()); } Wir können also beispielsweise die Klasse Cabrio verwenden, um daraus eine neue Klasse ZweisitzerCabrio abzuleiten: Diese könnte nun verwendet werden, um ein Objekt zu instanzieren, das die Eigenschaften der Klassen Auto, Cabrio und ZweisitzerCabrio hat Nicht jede Klasse darf zur Ableitung neuer Klassen verwendet werden. Besitzt eine Klasse das Attribut final, ist es nicht erlaubt, eine neue Klasse aus ihr abzuleiten. Die möglichen Attribute einer Klasse werden im nächsten Abschnitt erläutert.

5 Methodenüberlagerung
Neben den Membervariablen erbt eine abgeleitete Klasse auch die Methoden ihrer Vaterklasse Es dürfen auch bereits von der Vaterklasse geerbte Methoden neu definiert werden. In diesem Fall spricht man von Überlagerung der Methode Bsp.: class ZweisitzerCabrio extends Cabrio { boolean notsitze; public int alter() { return 12 * ( erstzulassung); } } Die Klasse besitzt dann alle Methoden, die aus der Vaterklasse geerbt wurden und zusätzlich die, die in der Methode neu definiert wurden. In diesem Fall spricht man von Überlagerung der Methode. Wurde eine Methode überlagert, wird beim Aufruf der Methode auf Objekten dieses Typs immer die überlagernde Version verwendet. Da die Methode alter bereits aus der Klasse Cabrio geerbt wurde, die sie ihrerseits von Auto geerbt hat, handelt es sich um eine Überlagerung. Zukünftig würde dadurch in allen Objekten vom Typ ZweisitzerCabrio bei Aufruf von alter die überlagernde Version, bei allen Objekten des Typs Auto oder Cabrio aber die alte Version verwendet werden. Es wird immer die Variante aufgerufen, die dem aktuellen Objekt beim Zurückverfolgen der Vererbungslinie am nächsten liegt. Methoden vom Typ private sind in abgeleiteten Klassen nicht sichtbar und können daher nicht überlagert werden. Bei Methoden vom Typ final deklariert der Anwender explizit, daß sie nicht überlagert werden sollen. Auch bei static-Methoden, die ja unabhängig von einer Instanz existieren, besteht das Problem nicht.

6 Klassenvariablen Variablen, die innerhalb einer Klasse mit dem Attribut static versehen werden, nennt man Klassenvariablen Im Gegensatz zu den Instanzvariablen existieren Klassenvariablen unabhängig von einem Objekt Jede Klassenvariable wird nur einmal angelegt und kann von allen Methoden der Klasse aufgerufen werden Klassenvariablen sind daher vergleichbar mit globalen Variablen Bsp.: Instanzenzähler in eine Klasse

7 Beispiel Klassenvariable
public class Testauto { static private int objcnt = 0; public Testauto() { objcnt; } public void finalize() { objcnt; } public static void main(String args[]) { Testauto auto1; Testauto auto2 = new Testauto(); System.out.println("Anzahl Testauto-Objekte: " + Testauto.objcnt); } } Ein gutes Beispiel für die Verwendung von Klassenvariablen besteht darin, einen Instanzenzähler in eine Klasse einzubauen. Hierzu wird eine beliebige Klassenvariable eingeführt, die beim Erzeugen eines Objekts hoch- und beim Zerstören heruntergezählt wird. Das folgende Beispiel demonstriert das für die Klasse Auto: Die Ausgabe des Programms ist: Anzahl Testauto-Objekte: 1 Mit auto2 wurde eine Instanz der Klasse erzeugt, auto1 ist dagegen zum Zeitpunkt der Ausgabeanweisung lediglich eine noch nicht initialisierte Objektreferenz. Eine andere Anwendung von Klassenvariablen besteht in der Deklaration von Konstanten. Dazu wird das static-Attribut mit dem final-Attribut kombiniert, um eine unveränderliche Variable mit unbegrenzter Lebensdauer zu erzeugen

8 Klassenmethoden Methoden, die unabhängig von einer bestimmten Instanz existieren Klassenmethoden werden ebenfalls mit Hilfe des static-Attributs deklariert Klassenmethoden besitzen keinen this-Zeiger Klassenmethoden werden häufig da eingesetzt, wo Funktionalitäten zur Verfügung gestellt werden, die nicht datenzentriert arbeiten oder auf primitiven Datentypen operieren Bsp. 1: Die Klasse System ist eine Art Toolbox, die Funktionen wie Aufruf des Garbage Collectors oder Beenden des Programms zur Verfügung stellt Bsp. 2: Methoden der Klasse Math, die eine große Anzahl an Funktionen zur Fließkomma-Arithmetik zur Verfügung stellt

9 Beispiel Klassenmethoden
Das folgende Listing zeigt die Verwendung der Klassenmethode sqrt der Klasse Math zur Ausgabe einer Tabelle von Quadratwurzeln public class WurzelX { public static void main(String[] args) { double x, y; for (x = 0.0; x <= 10.0; x = x + 1.0) { y = Math.sqrt(x); System.out.println("sqrt("+x+") = "+y); } } } Die Ausgabe des Programms ist: sqrt(0.0) = 0.0 sqrt(1.0) = 1.0 sqrt(2.0) = sqrt(3.0) = sqrt(4.0) = 2.0 sqrt(5.0) = sqrt(6.0) = sqrt(7.0) = sqrt(8.0) = sqrt(9.0) = 3.0 sqrt(10.0) =

10 Interfaces Ein Interface ist eine besondere Form einer Klasse, die ausschließlich abstrakte Methoden und Konstanten enthält Anstelle von class wird zur Definition eines Interfaces das Schlüsselwort interface verwendet Was bei der Vererbung von Klassen als Ableitung bezeichnet wird, nennt man bei Interfaces Implementierung Durch das Implementieren eines Interfaces verpflichtet sich die Klasse, alle Methoden, die im Interface definiert sind, zu implementieren Die Implementierung eines Interfaces wird durch das Schlüsselwort implements bei der Klassendefinition angezeigt

11 public interface Fortbewegungsmittel { public int kapazitaet(); public double kilometerPreis();
} public class Auto implements Fortbewegungsmitte { public String name; public int erstzulassung; public int leistung; private int anzahlSitze; private double spritVerbrauch; private double spritPreis; public double kapazitaet() { return anzahlSitze; } public double kilometerPreis() { return spritVerbrauch*spritPreis/100; } Als Beispiel wollen wir die Klasse Auto um das neue Interface Fortbewegungsmittel erweitern und die Methoden kapazitaet und kilometerPreis implementieren Ebenso wie die Klasse Auto könnte auch jede andere Klasse das Interface Fortbewegungsmittel implementieren und Konkretisierungen der beiden Methoden vornehmen. Nützlich ist dies insbesondere für Klassen, die in keinem direkten Zusammenhang mit der Klasse Auto und ihrer Vererbungshierarchie stehen. Um ihr gewisse Eigenschaften eines Fortbewegungsmittels zu verleihen, könnte also beispielsweise auch die Klasse Teppich dieses Interface implementieren. Eine Klasse kann auch dann ein Interface implementieren, wenn sie bereits von einer anderen Klasse abgeleitet ist. In diesem Fall erbt die neue Klasse wie gewohnt alle Eigenschaften der Basisklasse und hat zusätzlich die Aufgabe, die abstrakten Methoden des Interfaces zu implementieren. Eine Klasse kann nicht nur ein einzelnes Interface, sondern eine beliebige Anzahl von ihnen implementieren

12 Pakete 1 java.applet Applets java.awt Abstract Windowing Toolkit
java.awt.color Unterstützung für unterschiedliche Farbsysteme java.awt.datatransfer AWT Clipboard-Funktionen java.awt.dnd Drag & Drop java.awt.font Erweiterte Unterstützung für Schriftarten java.awt.geom D-Bildverarbeitung java.awt.im Eingabe von fernöstlichen Schriftzeichen java.awt.image AWT-Bildverarbeitung java.awt.image.renderable Darstellungsunabhängige Bildverarbeitung java.awt.print Druckausgabe java.beans Java Beans java.beans.beancontext Java Beans-Unterstützung java.io Bildschirm- und Datei-I/O java.lang Elementare Sprachunterstützung java.lang.reflect Reflection-API java.lang.ref Referenz-Objekte

13 Pakete 2 java.math Fließkomma-Arithmetik
java.net Netzwerkunterstützung java.rmi Remote Method Invocation (RMI) java.rmi.dgc RMI Distributed Garbage Collection java.rmi.registry RMI Service Registry java.rmi.server RMI-Support java.security Security-Dienste java.security.acl Access Control Lists java.security.cert Zertifikate java.security.interfaces DSA-Interfaces java.security.spec Sicherheitsspezifikationen java.sql Datenbankzugriff (JDBC) java.text Internationalisierung java.util Diverse Utilities und Datenstrukturen java.util.jar Zugriff auf JAR-Files java.util.mime Multipurpose Internet Mail Extensions (MIME) java.util.zip Zugriff auf ZIP-Files


Herunterladen ppt "Programmieren mit JAVA"

Ähnliche Präsentationen


Google-Anzeigen