Programmieren mit JAVA

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
Objektorientierte Programmierung
der Universität Oldenburg
der Universität Oldenburg
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Progwerkstatt JAVA Klasse, Objekte, Konstruktoren, Methoden
der Universität Oldenburg
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Klassenvariable (auch Klassendaten bzw. statische Attribute genannt) und statische Methoden.
Ein Beispiel in Java.
Erweiterte Zuweisungskompatibilität
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Konstruktoren.
WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
Interface bzw. Schnittstelle anschaulich: Hüllenklasse
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
DO...WHILE Anweisung.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 4 Vererbung Sommersemester 2003 Lars Bernard.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen
Programmieren mit JAVA
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Zusammenfassung Vorwoche
Abstrakter Datentyp in C++ I - Klasse -
Packages Vortrag : Cornelia Hardt 23. November 1999.
Abstrakte Klassen DVG
DVG Einführung in Java1 Einführung in JAVA.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Sitzung 3: Klassen, Objekte, Arrays und Kontrollstrukturen
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
CuP - Java Elfte Vorlesung Montag, 11. November 2002.
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
EPROG Tutorium #3 Philipp Effenberger
CuP - Java Neunte Vorlesung Entspricht Kapitel 4.2 und 5 des Skriptums
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
CuP - Java Sechste Vorlesung Entspricht ungefähr Kapitel 3. 1 – 3
Programmiervorkurs WS 2014/15 Methoden
Programmiervorkurs WS 2014/15 Instanzmethoden
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Einführung in die Programmierung mit Java
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
, PD Dr. Wolfram Amme, Tutorium zum Programmierpraktikum, FSU Jena, WS 2006/07 1 Objekte in Java.
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
Grundkurs Informatik 11-13
Es gibt Klassen, die mit der Entwicklungsumgebung ausgeliefert werden
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Definition Felder Konstruktor Methoden Beispiel
Implementieren von Klassen
 Präsentation transkript:

Programmieren mit JAVA Teil IV

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...

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:

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.

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 * (1999 - 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.

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

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

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

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) = 1.4142135623730951 sqrt(3.0) = 1.7320508075688772 sqrt(4.0) = 2.0 sqrt(5.0) = 2.23606797749979 sqrt(6.0) = 2.449489742783178 sqrt(7.0) = 2.6457513110645907 sqrt(8.0) = 2.8284271247461903 sqrt(9.0) = 3.0 sqrt(10.0) = 3.1622776601683795

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

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

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 2D-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

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