12.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 1 Kapselung von Daten I Gründe für die Datenkapselung Datenkonsistenz leichtere.

Slides:



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

Objektorientierte Programmierung
der Universität Oldenburg
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.
Einführung in die Programmierung Zusammenfassung
Kritische Betrachtung
der Universität Oldenburg
Abstrakte Klassen HS Merseburg (FH) WS 06/07.
Ausnahmen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Erweiterte Zuweisungskompatibilität
Einführung in die OOP in Java
Programmieren mit JAVA
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 Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
Klassen 02 - Klassen.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
CuP - Java Elfte Vorlesung Montag, 11. November 2002.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Variablenkonzept Klassisch, in Java Basistyp
Reinhard Stumptner Seminar Softwareentwicklung Dynamisches Laden und Binden in Java.
Objektorientierte Programmierung
EPROG Tutorium #6 Philipp Effenberger
EPROG Tutorium #5 Philipp Effenberger
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Vererbung Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
Einführung in die Programmierung mit Java
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Einführung in die Programmierung mit Java
IT2 – WS 2005/20061Nov 14, 2005 Visibility  public: Sichtbar in allen Paketen  protected: Sichtbar innerhalb des Pakets und in den Unterklassen  (default,
Abstrakte Klassen und das Interface-Konzept
Objektorientierte Programmierung (OOP)
Vererbung. Klassen - Vererbung  Eine Klasse kann von einer Basisklasse abgeleitet werden  Die abgeleitete Klasse erbt die Eigenschaften und Methoden.
Vortrag Einführung in AspectJ. Gliederung 1 Einleitung 2 Querschnittsfunktionalitäten in AspectJ 2.1 Sprachelemente 3 Beispiel 4 Join Point Modell 5 Weaving.
Objektorientierte Programmierung mit JAVA. © Klasse Wie in C++ ist die Klasse das primäre Mittel um ein Entity abzubilden Die Eigenschaften.
Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Generisches Programmieren.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/06 Generische Programmierung in Java.
Tutorium Software-Engineering SS14 Florian Manghofer.
Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Auflösung von Konflikten bei Mehrfachvererbung Umbenennung mehrdeutiger Methoden.
1 Grundsätze objektorientierter Programmierung. Dr. Wolfram Amme, Grundsätze objektorientierter Programmierung, Informatik II, FSU Jena, SS Objektorientierte.
1 Eine Einführung in die objektorientierte Programmierung.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Arithmetik in Java Ganzzahl-Division Nulldivision führt zu einer ArithmeticException.
, PD Dr. Wolfram Amme, Tutorium zum Programmierpraktikum, FSU Jena, WS 2006/07 1 Objekte in Java.
PD Dr. habil. Wolfram Amme, Generisches Programmieren, Programmierpraktikum, FSU Jena, WS 2006/07 1 Generisches Programmieren.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Klassen in Java.
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
OOP II.
Einführung in die Programmierung mit Java
Raphael Fischer Informatik II - Übung 06 Raphael Fischer
1. Die rekursive Datenstruktur Liste 1
Implementieren von Klassen
Statische und Nichtstatische Methoden Properties / Eigenschaften
 Präsentation transkript:

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Kapselung von Daten I Gründe für die Datenkapselung Datenkonsistenz leichtere Modifikation des Codes weniger Dokumentation nötig Modifier zur Kapselung von Daten public überall sichtbar private nur innerhalb der eigenen Klasse zugreifbar default innerhalb eines Paketes zugreifbar protected=> Vererbung Eigenschaften von Modifiern Modifier sind Präfixe, die Klassen, Methoden und Variablendefinitionen vorangestellt werden können Reihenfolge von Modifiern hat keine Bedeutung

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Beispiel public class Benutzer{ public int userNummer; public String name; public String vorname; private static int numUser = 0; private static final int maxUser = 200; } : Benutzer benutzer = new Benutzer(); benutzer.name = ´´Meier´´; // ok benutzer.numUser = 30;// Fehler !!!!

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Vererbung Eine Unterklasse wird folgendermaßen definiert class Unterklasse extends Oberklasse{... } die Unterklasse erbt Methoden und Variablen ihrer Oberklasse, nicht aber deren Konstruktoren bei der Instanzierung der Unterklasse wird zuerst der Default- Konstruktor der Oberklasse aufgerufen mit super kann statt des Default-Konstruktors ein anderer Konstruktor der Oberklasse aufgerufen werden (1. Anweisung) ist in der Oberklasse kein Default-Konstruktor definiert ist, muß super(...) im Konstruktor der Unterklasse aufgerufen werden alle Klassen haben die Klasse java.lang.Object als Oberklasse

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Beispiel public class Square extends Point{ int a; public Square(int x, int y, int color, int a){ super(x,y,color); this.a = a; } public void resize(int a){ this.a; } public int area(){ return a * a; }

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Kapselung von Daten II weitere Möglichkeiten zur Datenkapselung mit private deklarierte Variablen und Methoden werden nicht vererbt mit protected deklarierte Variablen und Methoden werden vererbt, sind aber außerhalb ihres Paketes nicht zugreifbar mit public deklarierte Variablen und Methoden werden vererbt und sind überall benutzbar (*) nur von Subklassen in demselben Paket

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Zugriff mit der Zugriffsklasse public package A; public class one { public int a; } class two extends one { } class three{ } package B; import A.one; class four extends one { } class five { }

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Zugriff mit der Zugriffsklasse protected package A; public class one { protected int a; } class two extends one { } class three{ } package B; import A.one; class four extends one { } class five { }

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Zugriff mit der Zugriffsklasse default package A; public class one { int a; } class two extends one { } class three{ } package B; import A.one; class four extends one { } class five { }

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Überdecken von Variablen I Vererbung kann zum Überdecken von Instanzvariablen führen class Point { int x, y, color;... } class RealPoint extends Point { float x, y, color;... } Festlegung der Variablenzugriffe erfolgt statisch zur Übersetzungszeit

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Überdecken von Variablen II überdeckte Variablen der Basisklasse sind in einer Instanz der abgeleiteten Klasse lebendig Zugriff auf überdeckte Variablen durch den super-Operator class RealPoint { float x, y, color; int s = super.x;... } Festlegung von Referenzzugriffen auf Instanzvariablen erfolgt ebenfalls statisch zur Übersetzungszeit RealPoint rp = new RealPoint(); Point p = rp; int s = p.x;// Zugriff auf die von Point geerbte Variable x float t = rp.x;// Zugriff auf die in RealPoint definierte Variable x

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Überschreiben von Methoden I in abgeleiteten Klassen können Methoden dieselbe Signatur (Parameter- und Rückgabetypen) wie in der Basisklasse haben class Point { int x, y, color; void moveTo(int x, int y) {...}; void moveRel(int x, int y){...}; int getX(){return x;} int getY(){return y;} } class RealPoint extends Point{ float x, y, color; void moveTo(float x, float y) {...}; void moveRel(float x, float y){...}; int getX(){return (int) Math.floor(x);} int getY(){return (int) Math.floor(y);} }

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Überschreiben von Methoden II die Implementierung der Basisklasse wird durch die der abgeleiteten Klasse ersetzt Hat eine Methode mehrere Implementierungen, so bezieht sich ein Zugriff immer auf die in der am meisten abgeleiteten Klasse Zuweisung der Implementierung eines Methodenaufrufs zur Laufzeit RealPoint rp = new RealPoint(); Point p = rp; int t = rp.getX();// Zugriff auf die Methode getX der Klasse RealPoint int s = p.getX();// Zugriff auf die Methode getX der Klasse RealPoint Zuweisung der Implementierung eines Methodenaufrufs: 1. Bestimmung der Signatur eines Aufrufs zur Übersetzungszeit 2. Auswahl der Implementierung zur Laufzeit

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Explizite Typumwandlung Cast-Operator wird zur expliziten Typumwandlung genutzt nur auf Objekte derselben Vererbungshierarchie anwendbar Überprüfung von Cast-Operatoren zur Übersetzungs- und Laufzeit Laufzeitfehler führt zu einem ClassCastExecption Cast-Operator zielt auf die Objektreferenz, nicht auf die aktuelle Form eines Objekts RealPoint rp =... ; Point p =... ; p = rp; // Okay rp = p; // Compile time error rp = (RealPoint) p; // Okay Verwendung des instanceof-Operators zur Vermeidung von Laufzeitfehlern

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Cast-Operator Cast-Operator beeinflußt nur die Auswahl statischer Elemente Auswahl von Variablen bzw. überladenen Methoden, nicht aber die Auswahl überschriebener Methoden class Point { (Point) rp.xint x, y, color;... } class RealPoint extends Point{ rp.xfloat x, y, color;... } class Point {... int getX(){return x;} int getY(){return y;} (Point) rp.getX()class RealPoint extends Point{... int getX(){return (int) Math.floor(x);} rp.getX()int getY(){return (int) Math.floor(y);} }

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS static- und final-Modifier final-Klasse es kann keine Unterklasse von der final-Klasse erstellt werden Steigerung der Performance final-Methode Methode kann nicht von Unterklassen überschrieben werden Steigerung der Performance Inline-Erweiterung static-Methode Methode wird nicht überschrieben, sondern nur überdeckt final-Variable die Variable ist konstant Konstantenfortpflanzung

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Ändern der Zugriffsklasse beim Überschreiben Grundregel: Der Zugriffsraum darf nur erweitert, aber nicht eingeschränkt werden. Als public deklarierte Methoden müssen public bleiben Eine geerbte protected-Methode darf entweder als protected oder als public überschrieben werden Für Methoden, die in der Oberklasse als private definiert sind, darf eine beliebige Zugriffsklasse gewählt werden, da private Methoden nicht vererbt werden Methoden die als default definiert sind, können in default bleiben oder als protected oder public überschrieben werden Grund: Es muß möglich sein, an eine Referenz auf eine Klasse auch Exemplare aller Unterklassen zuzuweisen.

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Abstrakte Klassen Eigenschaften abstrakte Klassen sind Schablonen => unvollständig implementiert sie können deshalb nicht instanziert werden ein Klasse muß mit abstract deklariert sein wenn mindestens eine Methode mit abstract deklariert wurde, oder wenn eine abstrakte Methode von der Oberklasse geerbt, und nicht überschrieben wird Beispiel für abstrakte Klassen Wrapperklassen –Double –Float –Integer –Long InputStream

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Abstrakte Methoden Abstrakte Methoden werden mit Modifier abstract deklariert benötigt keine Implementierung eine abstrakte Methode darf nicht mit static oder final deklariert werden muß von der Unterklasse implementiert werden, um Objekte der Unterklasse bilden zu können abstract class Fahrzeug { abstract void starte(); } class Fahrrad extends Fahrzeug{ void starte(){ steige_auf();... }

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Schnittstellen (Interfaces) wie bei abstrakten Klassen stellt eine Schnittstelle eine Schablone zur Verfügung die Schnittstelle darf keine Implementierung enthalten nur Konstanten sind erlaubt von einer Schnittstelle kann kein Objekt erzeugt werden eine Schnittstelle bietet aber weitere Möglichkeiten es können mehrere Schnittstellen von einer Klasse implementiert werden Mehrfachvererbung von Deklarationen wird dadurch ermöglicht (x ist ein a und ein b) Definition: interface Iname{... } Benutzung: class Name implements Iname1, Iname2,...

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Beispiel interface KannSchwimmen{ void schwimmen(); } interface KannLaufen{ void laufen(); } interface KannFliegen{ void fliegen(); } class Ente extends Tier implements KannSchwimmen, Kannlaufen, KannFliegen {... }

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Weitere Beispiele public interface GraphObj { int BLACK = 0; int BLUE = 1; int WHITE = 2; void show(); void hide(); void setColor(); } public interface GlobalConstants { int MAX_RECORDS = 1000; String ERR_MSG = “More than “+MAX_RECORDS+” records.”; } public interface Cloneable { }

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Implementierung eines Interfaces class Point implements GraphObj { int x, y, color; public Point(int x, int y, int color){ this.x = x; this.y = y; setColor(color); show(); } protected void drawPoint(int x, int y, int color){... } protected int getBackgroundColor(){... } public void setColor(int color){ this.color = color; } public void show(){ drawPoint(x, y, color); } public void hide(){ drawPoint(x, y, getBackgroundColor()); } }

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Verwendung von Interfaces Interfaces werden von Klasse zu Klasse vererbt wie bei Klassen kann man Verweise auf Interfaces definieren GraphObj someObject; Referenzvariablen eines Interfaces werden Objekte der Klasse zugewiesen, die das Interface implementieren someObjekt = new Point(4, 5, GraphObj.BLUE); someObject.hide(); ein Objekt einer Klasse, die mehrere Interfaces implementiert, kann an Verweise auf alle Interfaces zugewiesen werden Interfaces können wie Klassen vererbt und erweitert werden public interface FileGraphObj extends GraphObj { void load(); void save(); }

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Die Wurzelklasse Object Methoden der Klasse Object werden von allen Objekten geerbt clone(), equals(), finalize(), getClass(), hashCode(), toString(), notify(), notifyAll(), sowie mehrere Versionen von wait(). Methoden in Object sind “Basismethoden”, die in abgeleiteten Klassen sinnvollerweise überschrieben werden sollten hashCode() liefert den Schlüssel eines Objektes für einen Eintrag in der Haschtabelle toString() konvertiert ein beliebiges Objekt in eine Zeichenkette MyObj myObject = newMyObj(); Answer theAnswer = new Answer(); System.out.println(myObject); String s = ´´The answer is: ´´ + theAnswer;

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Objektgleichheit Methode equals() bestimmt, ob zwei Objekte gleich sind Gleichheit zweier Zeichenketten String userName = ´´Joe´´... if ( userName.equals(suspectName) ) arrest(userName); // if ( userName == suspectName) // Falsch!!! Voreinstellung!!! Methode equals() vergleicht Referenzen Achtung!!!! Überladen anstelle von Überschreiben der Methode kann zu Fehlern führen public boolean equals(Sneakers arg) {... } // Falsch !!! public boolean equals(Object arg) {... }// Richtig !!!

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Flaches Kopieren versus Tiefes Kopieren Methode clone() erzeugt eine identische Kopie eines Objektes flaches Kopieren Kopieren mit clone() ist nur dann zulässig, wenn die betreffene Klasse das Interface Cloneable implementiert Interface nicht implementiert => CloneNotSupportedException Achtung!! Methode clone() ist in Object als protected deklariert Kopieren von Objekten Flaches Kopieren Tiefes Kopieren Objekt 1 Objekt 2 Objekt 1´ Objekt 1´ Objekt 2

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Beispiel public class Buffer implements Cloneable { int [] buffer = new int[100];... public Object clone() { Object theClone = null; try{ theClone = super.clone(); } catch(CloneNotSupportedException e) { } return theClone; }

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Die Klasse Class zur Laufzeit werden die in einem Java-Programm definierten Klassen durch Objekte der Klasse Class repräsentiert mit Class-Objekten kann man neue Objekte der repräsentierten Klasse erzeugen den vollständigen Klassennamen eines Objektes dynamisch erzeugen Klassen in die Virtuelle Maschine laden Informationen über die Bestandteile der repräsentierten Klasse - wie definierte Methoden, Konstruktoren bzw. Datenelemente - abrufen Bestimmung des Class-Objektes einer Klasse Aufruf der in der Klasse Object definierten Methode getClass() Class c = o.getClass(); // o: Referenz beliebiges Objekt Direkte Angabe des Klassennamens Class c = java.util.Vector.class;

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Dynamisches Laden von Klassen Aufsuchen des zu einem Klassennamen gehörenden Class- Objekts Class c = Class.forName(´´java.util.Vector´´); Erzeugung eines Objektes über ein Class-Objekt Object o = c.newInstance(); Erzeugung von Objekten einer zur Übersetzungszeit noch nicht bekannten Klasse public Object createInstance(String name) throws Exception{ // Class-Objekt Class c = Class.forName(name); // Exemplar erzeugen und zurückliefern return c.newInstance(); }