Programmieren in Java

Ähnliche Dokumente
Programmieren in Java

Programmieren in Java

Programmieren in Java

Programmieren in Java

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Programmierung Nachklausurtutorium

Programmieren in Java

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Abstrakte Klassen und Interfaces

Vererbung und Polymorphie

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

Algorithmen und Datenstrukturen

1 Abstrakte Klassen, finale Klassen und Interfaces

Einführung in die Programmierung

Tafelübung 07 Algorithmen und Datenstrukturen

Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen. J. W. v. Goethe.

Vererbung P rogram m ieren 2 F örster/r iedham m er K apitel 11: V ererbung 1

Programmieren 1 09 Vererbung und Polymorphie

Einstieg in die Informatik mit Java

Einführung in die Programmierung

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Geschachtelte Klassen

Vorkurs Informatik WiSe 15/16

Vererbung, Polymorphie

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 2. Teil

Vererbung P rogram m ieren 2 F örster/r iedham m er K apitel 11: V ererbung 1

Praktikum. SEP: Java-Programmierung WS 2018/19. Modularisierung. Thomas Lemberger und Martin Spießl

Einstieg in die Informatik mit Java

Abschnitt 14: Schnittstellen: Interfaces

Programmierkurs Java

Informatik II Übung 6

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Weitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax

14. Java Objektorientierung

Java Vererbung. Inhalt

Javakurs für Anfänger

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Interfaces

Vererbung, Polymorphismus

Programmieren in Java

Klassen und Konstruktoren in Java

Javakurs für Anfänger

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik

Implementieren von Klassen

Objektorientierte Programmierung Studiengang Medieninformatik

Einführung in die Programmiersprache Java II

Objektorientierte Programmierung Studiengang Medieninformatik

3 Objektorientierte Konzepte in Java

C++ - Objektorientierte Programmierung Vererbung

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik

14. Java Objektorientierung

Silke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank...

Das Interface-Konzept am Beispiel der Sprache Java

Polymorphie. 15. Java Objektorientierung II

Algorithmen und Datenstrukturen 07

Polymorphie. 15. Java Objektorientierung II

Programmierkurs C++ Abstrakte Klassen und Methoden

Ein Vortrag im Rahmen des Wahlpflichtmoduls Fortgeschrittene Programmierung mit JAVA

12 Abstrakte Klassen, finale Klassen und Interfaces

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Programmieren 2 Java Überblick

Kapitel 4: Klassen und Unterklassen

Einführung in die Programmierung

14. Java Objektorientierung. Klassen, Vererbung, Kapselung

Wiederholung. Klassenhierarchie:

Einstieg in die Informatik mit Java

Sortieren von Objekten

Vererbung und Polymorphie

Probeklausur: Programmierung WS04/05

Vorlesung Datenstrukturen

Die Welt in unseren Programmen false -1.4E-12. false. Klassen

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

Vererbung Was versteht man unter dem Begriff Vererbung?

Einführung in die Programmiersprache Java II

1. Abstrakte Klassen

Einführung in C# Teil 3. Matthias Nübling

Java für Bauingenieure

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

7. Objektorientierung. Informatik II für Verkehrsingenieure

Vererbung. Was versteht man unter dem Begriff Vererbung?

Einführung in die Programmierung

Teil 2: OOP und JAVA (Vorlesung 11)

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Info B VL 8: Abstrakte Klassen & Interfaces

Programmieren in Java

Transkript:

Einführung in die Objektorientierung Teil 4 Interfaces, Polymorphie und innere Klassen

2 Vererbung im Klassendiagramm (Wiederholung) Vererbung repräsentiert eine ist ein Beziehung zwischen Klassen Object Ware farbe: String marke: String neupreis: float warennummer: int zustand: Zustand Vererbung Handtasche breite: float hoehe: float Jacke groesse: Groesse Schuhpaar groesse: int Eine Handtasche ist eine Ware Eine Jacke ist eine Ware Ein Schuhpaar ist eine Ware

3 Vererbung in Java I (Wiederholung) Das Schlüsselwort zu Deklaration von Vererbung ist extends public class BEZEICHNER extends KLASSEN-BEZEICHNER { public class Ware { private float neupreis; public class Handtasche extends Ware { private float breite; private float hoehe; public class Schuhpaar extends Ware { Java kennt nur einfache Vererbung, d.h. eine Klasse kann maximal von einer anderen Klasse erben Die Hierarchietiefe ist allerdings beliebig, d.h. die Elternklasse (oben Ware) kann wieder von einer anderen Klasse erben

4 Vererbung in Java II (Wiederholung) Sprachgebrauch: Elternklasse: Klasse von der geerbt wird Kindklasse: Alle von einer Elternklasse erbenden Klassen Eine Kindklasse erbt: Alle Attribute der Elternklasse Alle Methoden der Elternklasse Alle Konstruktoren der Elternklasse Zugriff auf Elemente (Attribut, Methode, Konstruktor) zur Laufzeit: Ist das Element in der Klasse der aktuellen Instanz definiert? Falls nein: Ist das Element ein der Elternklasse definiert? Falls nein: Hat die Elternklasse eine Elternklasse? Falls ja: Die Hierarchie durchlaufen, bis das Element gefunden wurde Ansonsten: Compiler-Fehler

5 Sichtbarkeit (Wiederholung) Es gibt vier Sichtbarkeitsmodifiktoren für Attribute und Methoden public: Zugriff von überall protected: Zugriff innerhalb des Packages und bei Vererbung [keine Angabe]: Zugriff innerhalb des Packages ( package private ) private: Zugriff nur innerhalb der eigenen Klasse/Instanz public class Ware { private float neupreis; Das Attribut neupreis ist nur innerhalb von Ware verwendbar Es gibt zwei Sichtbarkeitsmodifikatoren für Klassen: public: Zugriff von überall [keine Angabe]: Zugriff innerhalb des Packages ( package private ) Insbesondere: Nur die mit dem Dateinamen übereinstimmende Klasse kann public sein

6 Abstrakte Klassen/Methoden (Wiederholung) Klassen können mit abstract als abstrakt definiert werden Ist eine Klasse abstrakt, so kann keine Instanz der Klasse erzeugt werden SICHTBARKEIT abstract class KLASSEN-BEZEICHNER { public abstract class Ware { Ebenso können Methoden als abstract definiert werden SICHTBARKEIT abstract RÜCKGABETYP BEZEICHNER ( DATENTYP PARAM- BEZEICHNER, optional ); public abstract float getwarenwert(); Eine abstrakte Methode hat keinen Methodenrumpf (Implementierung) Lediglich die Signatur wird angegeben Existiert innerhalb einer Klasse mindestens eine abstrakte Methode, so muss auch die Klasse abstract sein Alle erbenden Klassen müssen entweder die Methode implementieren oder sind selbst wieder abstract

7 Interfaces Ein Interface (Schnittstelle) ist eine abstrakte Klasse, in der alle Methoden public sind (per default, eine Sichtbarkeit muss nicht angegeben werden) abstrakt sind (per default, abstract muss nicht angegeben werden) SICHTBARKEIT interface BEZEICHNER { RÜCKGABETYP BEZEICHNER ( DATENTYP PARAM-, ); BEZEICHNER public interface IForm { public double getflaeche(); public double getumfang(); Eine Klasse implementiert ein Interface Die Beziehung wird nicht per extends sondern mit implements angegeben public class BEZEICHNER implements INTERFACE-BEZEICHNER {

8 Interfaces (II) Innerhalb eines Interfaces können keine Instanz-Attribute definiert werden Klassenattribute sind möglich Eine implementierende Klasse muss entweder alle im Interface angegebenen Methoden definieren oder als abstract deklariert werden public abstract class Form implements IForm { public class Kreis extends Form { private double radius public Kreis(double radius){ this.radius = radius; Eine Klasse kann beliebig viele Interfaces implementieren (Komma als Trennzeichen) Dadurch gewinnt man eine Art Pseudo-Mehrfachvererbung Es können Variablen vom Typ eines Interfaces definiert werden: IForm form = new Kreis(5); System.out.print(form);

Objektorientierte Programmierung 9 Trennung von Schnittstelle und Implementierung Allgemeines Design-Prinzip: Programmiere gegen Schnittstellen, nicht gegen Implementierungen. (Quelle: http://openbook.galileocomputing.de/oop/oop_kapitel_03_005.htm) Trennung ermöglicht ein einfacheres Austauschen der Implementierungen Ermöglicht ein Aufteilen in mehrere Arbeitspakete, die von verschiedenen Personen parallel bearbeitet werden können. Hierfür werden im Vorfeld die Schnittstellen definiert

10 Klassendiagram mit Interface Interface IForm stellt der Verbindungsstück zwischen der Kiste und den Formen dar <<interface>> IForm getflaeche(): double getumfang(): double Form PI: double gerundet(): double tostring(): String Vererbung Kiste formen: IForm index: int Kiste(anzahl: int) formenauflisten(): String hinzufuegen(form IForm) getgroessteflaeche(): IForm getkleinsteflaeche(): IForm tostring(): String Aggregation Kreis radius: double Kreis(radius: double) getflaeche(): double getumfang(): double tostring(): String Quadrat laenge: double Quadrat(laenge: double) getflaeche(): double getumfang(): double tostring(): String Klasse Kiste kennt nur das Interface IForm Ein Arbeitspaket könnte die Implementierung der Kiste sein und pro geometrischer Figur ein weiteres Arbeitspaket

Objektorientierte Programmierung 11 Schnittstellen und abstrakte Klassen Gegenüberstellung von Unterschieden bei Interfaces und abstrakten Klassen: mögliche Elemente Regeln für Klassen Schnittstelle Konstanten Methodensignaturen ohne Rumpf Kann mehrere Schnittstellen implementieren Abstrakte Klasse Konstanten Variablen Methodensignaturen (mit oder ohne Rumpf) Kann maximal eine Elternklasse haben

Objektorientierte Programmierung 12 Polymorphie Polymorphie (Vielgestaltigkeit) ist eine wichtige Eigenschaft der OOP Polymorphie von Objekten gibt es nur bei Vererbungshierarchien Objekttyp einer Subklasse kann mit Objekttyp einer Basisklasse ausgetauscht werden, wenn die Basisklasse nur erweitert wird und nur der Basisklasse bekannte Elemente verwendet werden Überschriebene Methoden in der Subklasse müssen identisch zur ihrer Basisklassenmethode aufrufbar sein Einsatz von Polymorphie für flexiblere Programme public static void main(string[] args) { Ware ware; ware = new Handtasche(); System.out.println(ware); ware = new Schuhpaar(); System.out.println(ware); // Handtasche: // Schuhpaar:

13 Polymorphie Die getflaeche()-methode ist den Zugriffsrechten entsprechend aufrufbar Demnach auch von der definierenden Klasse selbst public abstract class Form { public abstract double getflaeche(); @Override public String tostring() { return + "-> Fläche: " + this.getflaeche() + ; Warum compiliert dies? Da Form abstract ist kann es keine Instanz der Klasse Form geben tostring kann nur von Instanzen aufgerufen werden D.h. es existiert eine Klasse in der Hierarchie des aufrufenden Objektes, die getflaeche implementiert Welche Klasse dies ist, steht erst zur Laufzeit fest Dieses Verhalten nennt sich spätes Binden (auch: dynamisches Binden ) Abstrakte Methoden werden daher als polymorph bezeichnet

14 Geschachtelte Klassen Jackengröße über eine Enum-Klasse abgebildet Enum-Klassen können in einer eigenen Java-Datei abgelegt werden Groesse-Enum existiert nur im direkten Zusammenhang mit der Klasse Jacke Um eine solche Abhängigkeit abzubilden bietet Java die Möglichkeit Klassen/Interfaces innerhalb von Klassen/Interfaces zu definieren MODIFIKATOREN KLASSEN-BEZEICHNER { class enum MODIFIKATOREN class enum KLASSEN-BEZEICHNER { public class Jacke extends Ware { public enum Groesse { S, M, L, XL, XXL, ;

15 Innere Klassen Innere Klasse wird in einer anderen Klasse definiert Beispiel: public class Schuhpaar { public class Schuh { private String farbe; private int groesse; Schuhpaar ist die äußere Klasse und Schuh als innere Klasse darin geschachtelt Schuh wird nur im Schuhpaar verwendet und kann darin gekapselt werden und ist nach außen nicht mehr sichtbar

16 Innere Klassen Der Zugriff auf innere Klassen erfolgt analog zu Klassenattributen über den umschließenden Klassennamen Jacke.Groesse groesse = Jacke.Groesse.XL; Nur bei inneren Klassen kann der Modifikator static genutzt werden: public class Schuhpaar { public static class Schuh { private String farbe; private int groesse; public class Schuhpaar { public class Schuh { private String farbe; private int groesse; Innerhalb eines Interfaces sind alle inneren Klassen automatisch static Geeignete Sichtbarkeit vorausgesetzt können von außen nur Instanzen von statischen inneren Klassen erzeugt werden: Schuhpaar.Schuh schuh = new Schuhpaar.Schuh(); Schuhpaar.Schuh schuh = new Schuhpaar.Schuh(); // Schuh statisch // Schuh nicht statisch

17 Anonyme innere Klassen Java bietet die Möglichkeit anonyme Klassen zu definieren D.h. Klassen, für die kein Name vergeben wird Da diese Klassen allerdings keinen Namen haben, kann man sie nicht wie gewohnt über class definieren Definition findet quasi ad hoc mit der Initialisierung einer Instanz statt Erweiterung einer bestehenden Klasse oder die Implementierung eines Interfaces IForm form = new Kreis(5) { @Override public String tostring() { return "[" + super.tostring() + "]" ; System.out.print(form); Anonyme Klassen sind nicht statische innere Klassen Zugriff innerhalb der Implementierung auf alle Attribute der umschließenden Klasse Können innerhalb einer Methode definiert werden: Insbesondere können so Parameter an die Klasse übergeben werden Allerdings müssen die Parameter dafür als final deklariert werden

18 Zusammenfassung Wozu dienen Interfaces? Was unterscheidet ein Interface von einer abstrakten Klasse? Was versteht man unter Polymorphie in der OOP bei Objekten? Was versteht man unter spätes Binden bzw. dynamisches Binden?

19 Aufgabe Aufgabe 1a: Kopieren Sie das Netbeans-Projekt zur 9. Vorlesung mit dem Paketnamen de.wwu.ziv.vorlesungen.java.vorlesung9.aufgabe und der Klasse Main an unter dem Projektnamen z. B. vl9_loesung. Erstellen Sie die Klasse Kreisring, die im Unterpaket formen liegt von der Klasse Form ableitet und das Interface IForm wie folgt ausimplementiert: Die Klasse enthält die Attribute radius_a und radius_i vom Typ double. Der Konstruktor Kreisring(double radius_a, double radius_i)setzt die Attribute radius_a und radius_i. Implementieren Sie die Methode getflaeche mit A = Pi * ((radius_a)² - (radius_i)²) und getumfang mit U = 2 * Pi * (radius_a + radius_i). Überschreiben Sie die tostring-methode, sodass die Attribute der Klasse Kreisring ausgegeben werden, wobei die tostring-methode der Oberklasse wiederverwendet werden soll.

20 Aufgabe Aufgabe 2: Erweitern Sie die Klasse Kiste um die Methoden getkleinstenumfang und getgroesstenumfang. Erweitern Sie die Klasse Main analog zu den Ausgaben zu der größten und kleinsten Fläche, sodass nun auch der kleinste und größte Umfang der Formen ermittelt wird. Instanziieren Sie in der Main-Klasse neben den Objekten aus der Vorlesung 9 zwei Kreisringe, sodass diese mit der folgenden Konsolenausgabe übereinstimmt.

21 Anhang: ZIVinteraktiv-Abstimmung QR-Code zur anonymen Abstimmung: https://www.uni-muenster.de/ziv/anw/zivinteraktiv/abstimmung.php?code=571dedcd