Kapselung , toString , equals , Java API

Slides:



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

Objektorientierte Programmierung
der Universität Oldenburg
der Universität Oldenburg
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Kritische Betrachtung
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
L E - 3 Methoden und Testing
Progwerkstatt JAVA Klasse, Objekte, Konstruktoren, Methoden
der Universität Oldenburg
3 Sprachelemente und Anweisungen JavaHS Merseburg (FH) WS 06/07 Strings (Zeichenketten)
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Listen Richard Göbel.
Indirekte Adressierung
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Ein Beispiel in Java.
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.
Objekte werden als Adressen (Referenzen) übergeben. Dies führt manchmal zu unerwarteten Ergebnissen...
Objekte und Arbeitsspeicher
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Programmieren mit JAVA
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
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 Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Zusammenfassung Vorwoche
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
DVG Methoden 1 Methoden. 2 int dezi = Integer.parseInt(args[0]); boolean vz = (dezi>=0); dezi = Math.abs(dezi); String Bin = ""; do { } while.
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
Einführung in die Programmierung Anweisungen und Datentypen
Einführung in die Programmierung Klassendefinition und Objekte
Informatikunterricht mit Java
© 2002 Dr. Cavelius - Ley - Pohlig - Taulien Programmierung im Netz und Internet: Einführung in die Programmiersprache Java Teil I 1 Klassen Objekte von.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Programmieren Kapitel 3 – Variablen.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
CuP - Java Elfte Vorlesung Montag, 11. November 2002.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Objektorientiertes Konstruieren
Variablenkonzept Klassisch, in Java Basistyp
Die Klasse String und ihre Methoden
Aufruf einer Methode eines Objektes vom Typ „Bruch“
Programmiervorkurs WS 2014/15 Instanzmethoden
3. Beschreibung von Abläufen durch Algorithmen 3.4 Zufall
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Objektorientierte Programmierung (OOP)
Java Programme nur ein bisschen objektorientiert.
Ilya & Kai Kapselung, API, toString, Vergleiche 1 L E - 6 Kapselung, toString, equals, Java API Ilya Shabanov Kai Dietrich Freitagsrunde 4!
Konstruktoren.
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
Zwei Denkansätze zur Klasse Schlange
Die Klasse Vielfrass in Java
Klassen selbst programmieren
Die Struktur einer Java-Klasse
Implementieren von Klassen
Grundkurs Informatik 11-13
 Präsentation transkript:

Kapselung , toString , equals , Java API L E - 6 Kapselung , toString , equals , Java API Ilya Shabanov Kai Dietrich Freitagsrunde 4!

Ein bisschen Verwirrung : toString 1 / 5 Ein bisschen Verwirrung : class LangzeitStudent{ int terms; String name; public LangzeitStudent( int terms , String name ){ terms = terms; name = name; } Die Klasse besitzt zwei Variablen: den Namen und die Anzahl der Semester des Langzeitstudenten, die dem Konstruktor übergeben werden.

? Ein bisschen Verwirrung : toString 2 / 5 Ein bisschen Verwirrung : LangzeitStudent s1 = new LangzeitStudent( 17 , “Nicky” ); LangzeitStudent s2 = new LangzeitStudent( 87 , “Nicky’s Mom” ); System.out.println(“s1: ” + s1); System.out.println(“s2: ” + s2); ? s1: LangzeitStudent@16f0472 s2: LangzeitStudent@18d107f Den Inhalt von s1 und s2 auszugeben wäre hier sinnvoller.

Was bedeuten die Zahlen? : toString 3 / 5 Was bedeuten die Zahlen? : s1: LangzeitStudent@16f0472 s2: LangzeitStudent@18d107f Die Zahlen sind Adressen. Kein direkter Zugriff 16f0472 18d107f Speicherzelle s1 Speicherzelle s2 17 , „Nicky“ 87 , „Nicky‘s Mom“ Irgendwo im Speicher... Speicherzelle 16f0472 Referenz Speicherzelle 18d107f

Was bedeuten die Zahlen? : toString 4 / 5 Was bedeuten die Zahlen? : Tatsächlich macht der Compiler daraus: System.out.println(“s1: ” + s1.toString() ); System.out.println(“s2: ” + s2.toString() ); toString() macht aus der Adresse einen String. Jede Klasse besitzt eine Standard toString() Methode, die das macht. Man kann sich eine eigene toString() Methode definieren! ( Überschreiben )

toString() überschreiben : class LangzeitStudent{ int numOfTerms; String studentName; public LangzeitStudent( int terms , String name ){ numOfTerms = terms; studentName = name; } public String toString(){ String output = ”Ich bin ” + studentName + ”. Ich studiere erst seit ” + numOfTerms + ” Semestern!”; return output; s1: Ich bin Nicky. Ich studiere erst seit 17 Semestern! s2: Ich bin Nicky‘s Mom. Ich studiere erst seit 87 Semestern!

equals 1 / 7 Objekte vergleichen : class LangzeitStudent{ int terms; int matNum; String name; public LangzeitStudent( int terms , String name , int mnr ){ terms = terms; name = name; matNum = mnr; } Um Studenten zu vergleichen fügen wir eine Variable für die Matrikelnummer ein.

s1 und s2 enthalten die gleichen Daten, sind sie aber gleich? equals 2 / 7 Objekte vergleichen : LangzeitStudent s1 = new LangzeitStudent( 17 , “Nicky” , 221745 ); LangzeitStudent s2 = new LangzeitStudent( 17 , “Nicky” , 221745 ); System.out.println( “Vergleich Objekt: ” + (s1 == s2) ); s1 und s2 enthalten die gleichen Daten, sind sie aber gleich? Vergleich Objekt: false Trotz gleicher Daten sind s1 und s2 nicht gleich!

Warum sind s1 und s2 nicht gleich? : equals 3 / 7 Warum sind s1 und s2 nicht gleich? : Inhalt ungleich! 13f1376 18e217a Speicherzelle s1 Speicherzelle s2 17 , „Nicky“ , 221745 Irgendwo im Speicher... Speicherzelle 13f1376 Speicherzelle 18e217a Referenz Die Speicherzellen haben zwar gleichen Inhalt, sind aber unterschiedliche Speicherzellen! == vergleicht den Inhalt von s1 und s2!

Wie kann man den Inhalt vergleichen? : equals 4 / 7 Wie kann man den Inhalt vergleichen? : equals ist eine Methode, die genau das macht. public boolean equals( Object o ) Wie toString() gibt es diese Methode bereits für jedes Objekt. Um eigene Objekte zu vergleichen muss man jedoch sein eigenes equals schreiben ( also wieder überschreiben ).

equals überschreiben : class LangzeitStudent{ int terms; int matNum; String name; public LangzeitStudent( int terms , String name , int mnr ){ terms = terms; name = name; matNum = mnr; } public boolean equals( Object o ){ LangzeitStudent student = (LangzeitStudent)o; if( student.matNr == this.matNr){ return true; return false;

equals benutzen : SIEG! equals 6 / 7 Vergleich Objekt: true LangzeitStudent s1 = new LangzeitStudent( 17 , “Nicky” , 221745 ); LangzeitStudent s2 = new LangzeitStudent( 17 , “Nicky” , 221745 ); System.out.println( “Vergleich Objekt: ” + s1.equals( s2 ) ) ); Vergleich Objekt: true SIEG!

„==“ und „equals“ Zusammenfassung : equals( Object o ) == Vergleicht Instanzen von Objekten. Vergleicht nur primitive Datentypen wie int, double und boolean. Muss vom Programmierer im-plementiert werden. Ist ein Standardkonstrukt von Java.

Warum eigentlich? Kapselung ( Encapsulation ) : Eines der OOP Konzepte ist die Bündelung der Daten an ihre Funktionalität. Warum eigentlich? Wir versuchen einen Apfel um 5 bit nach links zu shiften. class Apple{ ..... } „Ich esse zwar nur Pizza, habe aber den begründeten Verdacht, dass sich Äpfel nicht um 5 bit shiften lassen...“ – der Langzeitstudent Moral von der Geschicht‘ - Äpfel shiftet man nicht.

Das heißt Kapselung . Kapselung ( Encapsulation ) : Jedes Objekt hat daher Methoden, die das beschrieben, was man damit tun kann. class Apple{ ... public boolean isAppleRed(){ ... } public void eatApple(){ ... } public void dropApple(){ ... } public int getWeight(){ ... } } Wir können mit einem Objekt nur das machen, was es uns erlaubt. Das heißt Kapselung .

Kapselung 3 / 7 Information Hiding : In Java hat man die Möglichkeit Variablen zu „schützen“, damit sie nur innerhalb der Klasse verändert werden können. Das ist immer dann nützlich, wenn man Variablen hat, die z.B. nur positiv sein können ( Alter ). Es soll sichergestellt sein, dass niemand von außerhalb die Variable auf einen ungültigen Wert setzt. class LangzeitStudent{ private int terms; private String name; ... }

Auswirkung von private : Kapselung 4 / 7 Auswirkung von private : class LangzeitStudent{ private int terms; private String name; ... } Die Variablen sind fortan nur noch innerhalb der Klasse LangzeitStudent sichtbar! LangzeitStudent s1 = new LangzeitStudent( 17 , “Nicky” , 221745 ); System.out.println( “s1’s name is: ” + s1.name ); Compilerfehler! Man darf nicht auf name zugreifen, da private!

Ein praktisches Beispiel: Kapselung 5 / 7 Ein praktisches Beispiel: class CommanderKeen{ public int positionX; public int positionY; ... } Jump Die x und y Position darf nur auf bestimmte Art und Weise verändert werden. Es muss sichergestellt werden, dass die Bewegung zulässig ist, also dass keine Mauer im Weg ist o. Ä. Laufen Pogo jump

Ein praktisches Beispiel: Kapselung 6 / 7 Ein praktisches Beispiel: Kapselung der x- und y-Variablen mit den Methoden für Bewegung. Zugriff nur über diese Methoden. class CommanderKeen{ private int positionX; private int positionY; ... public void moveRight(){ if( isMoveRightPossible() ) positionX += 5; } public void moveLeft(){ ... } public void jump(){ if( isJumpPossible() ) //jumping code ...

Kapselung 7 / 7 Getter und Setter : Manchmal ist es dennoch notwendig auf die Variablenwerte direkt zuzugreifen, z.B. wenn das Spiel neugestartet wird. Man erstellt dann meist s.g. getter und setter Methoden um die Variablen trotzdem als private beibehalten zu können. class CommanderKeen{ private int positionX; private int positionY; ... public int getX(){ return positionX; } public void setX( int newX ){ if( ... ) // test value in some way, if necessary positionX = newX;