Ilya & Kai12.4.2007 Kapselung, API, toString, Vergleiche 1 L E - 6 Kapselung, toString, equals, Java API Ilya Shabanov Kai Dietrich Freitagsrunde 4!

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.
Kapselung , toString , equals , Java API
der Universität Oldenburg
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
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.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Programmieren mit JAVA
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.
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
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 Datensammlung
© 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.
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Objektorientiertes Konstruieren
Variablenkonzept Klassisch, in Java Basistyp
Die Klasse String und ihre Methoden
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
Programmiervorkurs WS 2014/15 Methoden
Programmiervorkurs WS 2014/15 Instanzmethoden
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
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
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Objektorientierte Programmierung (OOP)
Java Programme nur ein bisschen objektorientiert.
Tutorium Software-Engineering SS14 Florian Manghofer.
C++ FÜR cOMPUTERSPIELENTWICKLER
1 Lehreinheit im Javakurs der Freitagsrunde SoSe2008 Technische Universität Berlin Mario Bodemann Björn Lohrmann Javakurs 2008 – LE06 „You’ve got questions.
Objektorientierung in Java Java-Kurs LE 5.
, 1 / Javakurs 2012 – Objektorientierung Objektorientierte Programmierung I This work is licensed under the Creative Commons Attribution-ShareAlike 3.0.
Schwarz, Lubkoll : Javakurs LE Organisatorisches ● Wer sind wir? ● Was machen wir hier? ● Was haben wir davon? ● Was habt ihr davon?
, 1 / Javakurs 2011 – Objektorientierung Objektorientierte Programmierung I This work is licensed under the Creative Commons Attribution-ShareAlike 3.0.
Konstruktoren.
Objektorientierung Gliederung von Daten und Funktionen zu Objekten
Vererbung.
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
Hello World! Javakurs 2013 Arne Kappen
Aufgaben zu Rückgabewerten
Die Klasse Vielfrass in Java
Klassen selbst programmieren
Java-Kurs - 2. Übung primitive Datentypen, Konstanten
Einführung in die Programmierung mit Java
Die Struktur einer Java-Klasse
Raphael Fischer Informatik II - Übung 06 Raphael Fischer
Grundkurs Informatik mit Java
Es gibt Klassen, die mit der Entwicklungsumgebung ausgeliefert werden
1. Die rekursive Datenstruktur Liste 1
Implementieren von Klassen
Grundkurs Informatik 11-13
 Präsentation transkript:

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

Ilya & Kai Kapselung, API, toString, Vergleiche 2 Wiederholung: Objektorientierung Wiederholung 1 / 4

Ilya & Kai Kapselung, API, toString, Vergleiche 3 Wiederholung 2 / 4 class Human { int age; Head head; public Human(int age) { this.age = age; this.head = new Head(); } public void speak(String what) { this.head.shoutOutLoudly(what); }

Ilya & Kai Kapselung, API, toString, Vergleiche 4 Wiederholung 3 / 4 class Vorlesung { public static void main(String [] args) { Human kai = new Human(23); kai.speak("Wiederholung"); }

Ilya & Kai Kapselung, API, toString, Vergleiche 5 Wiederholung 4 / 4 Human paul = new Human(); Human papa = paul; Human schatzi = paul; Human officer = paul;

Ilya & Kai Kapselung, API, toString, Vergleiche 6 Fragen?

Ilya & Kai Kapselung, API, toString, Vergleiche 7 toString(), equals(), Kapselung

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

Ilya & Kai Kapselung, API, toString, Vergleiche 9 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: s2:  Den Inhalt von s1 und s2 auszugeben wäre hier sinnvoller. ?

Ilya & Kai Kapselung, API, toString, Vergleiche 10 Kein direkter Zugriff 17, „Nicky“ 87, „Nicky‘s Mom“ Irgendwo im Speicher... 16f d107f Speicherzelle s1 Speicherzelle s2 toString 3 / 5 Was bedeuten die Zahlen? :  Die Zahlen sind Adressen. s1: s2: Speicherzelle 16f0472 Speicherzelle 18d107f Referenz

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

Ilya & Kai Kapselung, API, toString, Vergleiche 12 toString 5 / 5 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!

Ilya & Kai Kapselung, API, toString, Vergleiche 13 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.

Ilya & Kai Kapselung, API, toString, Vergleiche 14 Objekte vergleichen : LangzeitStudent s1 = new LangzeitStudent( 17, “Nicky”, ); LangzeitStudent s2 = new LangzeitStudent( 17, “Nicky”, ); 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! equals 2 / 7

Ilya & Kai Kapselung, API, toString, Vergleiche 15 Inhalt ungleich! 17, „Nicky“, Irgendwo im Speicher... Speicherzelle 13f1376 Speicherzelle 18e217a Warum sind s1 und s2 nicht gleich? : 13f e217a Speicherzelle s1 Speicherzelle s2 Referenz  Die Speicherzellen haben zwar gleichen Inhalt, sind aber unterschiedliche Speicherzellen!  == vergleicht den Inhalt von s1 und s2! equals 3 / 7

Ilya & Kai Kapselung, API, toString, Vergleiche 16 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 4 / 7

Ilya & Kai Kapselung, API, toString, Vergleiche 17 equals überschreiben : equals 5 / 7 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 ){ if(!(o instanceof LangzeitStudent)){return false;} LangzeitStudent student = (LangzeitStudent)o; if( student.matNr == this.matNr){ return true; } return false; }

Ilya & Kai Kapselung, API, toString, Vergleiche 18 equals benutzen : LangzeitStudent s1 = new LangzeitStudent( 17, “Nicky”, ); LangzeitStudent s2 = new LangzeitStudent( 17, “Nicky”, ); System.out.println( “Vergleich Objekt: ” + s1.equals( s2 ) ) ); Vergleich Objekt: true  SIEG! equals 6 / 7

Ilya & Kai Kapselung, API, toString, Vergleiche 19 „==“ 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. equals 7 / 7

Ilya & Kai Kapselung, API, toString, Vergleiche 20 Kapselung 1 / 7 Kapselung ( Encapsulation ) :  Eines der OOP Konzepte ist die Bündelung der Daten an ihre Funktionalität. Warum eigentlich? class Apple{..... }  Wir versuchen einen Apfel um 5 bit nach links zu shiften. „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.

Ilya & Kai Kapselung, API, toString, Vergleiche 21 Kapselung 2 / 7 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.

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

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

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

Ilya & Kai Kapselung, API, toString, Vergleiche 25 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... }

Ilya & Kai Kapselung, API, toString, Vergleiche 26 Kapselung 7 / 7 Getter und Setter : 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; }  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.

Ilya & Kai Kapselung, API, toString, Vergleiche 27 API 1 / 10 Die Java API

Ilya & Kai Kapselung, API, toString, Vergleiche 28 API 2 / 10 Die Java... was? API - Application Programming Interface, eng. „Programmierschnittstelle“ = Definition der Syntax und Semantik aller Klassen und Methoden der von Java

Ilya & Kai Kapselung, API, toString, Vergleiche 29 API 3 / 10 ● Versionen ● Wo finden? ● Wie benutzen? ● Ein kleiner Ü berblick

Ilya & Kai Kapselung, API, toString, Vergleiche 30 API 4 / 10 Java gibt es in vielen Versionen: - Java 1.3.x - Java 1.4.x - Java 1.5.x = Java 5 - Java 6 ► Kernfunktionalitäten bleiben gleich, nur Randfunktionen ändern sich oder neue Funktionen werden hinzugefügt Jede Version hat ihre eigene API-Dokumentation ► bei den Downloads aufpassen

Ilya & Kai Kapselung, API, toString, Vergleiche 31 API 5 / 10 a) zum Download: b) Online: Java 1.4.2: Java 5: Java 6: Online ist die Dokumentation mit einer Suchfunktion ausgestattet Wo finden?

Ilya & Kai Kapselung, API, toString, Vergleiche 32 und jetzt in LIVELIVE

Ilya & Kai Kapselung, API, toString, Vergleiche 33 Weiter im Text...

Ilya & Kai Kapselung, API, toString, Vergleiche 34 API 6 / 10 import java.util.ArrayList; class PersonalDatabase { ArrayList myRoomContent;... }

Ilya & Kai Kapselung, API, toString, Vergleiche 35 API 7 / 10 import java.util.*; class PersonalDatabase { ArrayList myRoomContent; PriorityQueue tasks;... }

Ilya & Kai Kapselung, API, toString, Vergleiche 36 API 8 / 10 import java.*; class PersonalDatabase { ArrayList myRoomContent; PriorityQueue tasks;... } Aber NICHT: Test.java:4: cannot find symbol symbol : class ArrayList location: class PersonalDatabase ArrayList myRoom; ^ Keine Hierarchie – java.util ist eigentlich nur ein String

Ilya & Kai Kapselung, API, toString, Vergleiche 37 API 9 / 10 Wer mehr wissen will: Java Tutorials Thinking in Java Java ist auch eine Insel

Ilya & Kai Kapselung, API, toString, Vergleiche 38 empfehlenswert: - Schnelle Umleitung auf Klassen in Java 5 Doku - auch als Searchlet für Firefox verfügbar API 10 / 10

Ilya & Kai Kapselung, API, toString, Vergleiche 39 static static 4 / 4

Seid ihr noch da?

Ilya & Kai Kapselung, API, toString, Vergleiche 46 static static 4 / 4

Ilya & Kai Kapselung, API, toString, Vergleiche 47 java.lang.Math static 2 / 6

Ilya & Kai Kapselung, API, toString, Vergleiche 48 static 3 / 6 Alle Methoden in Math sind static public static double abs(double a) public static double cos(double a) public static double log(double a) public static double random() public static double sin(double a) public static double sqrt(double a)... java.lang.Math Mathematik Objekt erzeugen um zu rechnen? Natürlich nicht, denn:

Ilya & Kai Kapselung, API, toString, Vergleiche 49 static = die Methode oder das Attribut existiert auch ohne ein Instanz static 4 / 6

Ilya & Kai Kapselung, API, toString, Vergleiche 50 Wo existiert ein static ? in seiner Klasse Ein static existiert genau einmal pro Java Virtual Machine static 5 / 6

Ilya & Kai Kapselung, API, toString, Vergleiche 51 static 6 / 6 Was kann man mit static machen? public static void main(String[] args) Funktionen ohne Objekte Konstanten (static double java.lang.Math.PI)...

Ilya & Kai Kapselung, API, toString, Vergleiche 52 Fragen?

Ilya & Kai Kapselung, API, toString, Vergleiche 53 And now for something completely different...

class CommanderKeen { private int Xpos; private int Ypos; public void moveRight(){ if( isMoveRightPossible() ){ XPos += 5; } public void moveLeft(){... } public void jump(){ if( isOnPlatform() && isJumpPossible() ) { //jumping code... } class Game { public static void main(String[] args) { CommanderKeen Keen; Keen = new CommanderKeen(); Keen.jump(); return; } Java

class CommanderKeen { private int Xpos; private int Ypos; public void moveRight(){ if( isMoveRightPossible() ){ XPos += 5; } public void moveLeft(){... } public void jump(){ if( isOnPlatform() && isJumpPossible() ) { //jumping code... } class Game { public static void Main(string[] args) { CommanderKeen Keen; Keen = new CommanderKeen(); Keen.jump(); return; } C#

C++ class CommanderKeen { private: int Xpos; int Ypos; public: void moveRight(){ if( isMoveRightPossible() ){ XPos += 5; } void moveLeft(){... } void jump(){ if( isOnPlatform() && isJumpPossible() ) { //jumping code... } }; void main(int argc, char* argv[]) { CommanderKeen* Keen; Keen = new CommanderKeen(); Keen->jump(); delete Keen; return; }

Smalltalk Object subclass: #CommanderKeen int Xpos: 0 int Ypos: 0 CommanderKeen>>moveRight (self isMoveRightPossible) ifTrue: [XPos := XPos + 5.] CommanderKeen>>moveLeft "..." CommanderKeen>>jump ( self isOnPlatform and: [self isJumpPossible] ) ifTrue: ["jumping code..."] Keen := CommanderKeen new. Keen jump.

Python class CommanderKeen: def __init__(self): self.Xpos = 0 self.Ypos = 0 def moveRight(self): if (self.isMoveRightPossible()): self.XPos += 5 def isMoveRightPossible(self): return True def jump(self): if (self.isMoveRightPossible() and self.isMoveRightPossible()): self.XPos += 5 if __name__ == "__main__": keen = CommanderKeen() print keen.XPos keen.jump() print keen.XPos

Lisp (defclass commander-keen () ((x-pos :initform 0 :initarg :x-pos :accessor x-pos) (y-pos :initform 0 :initarg :y-pos :accessor y-pos))) (defgeneric move-right (commander-keen) (:documentation "moves commander keen 5 units right")) (defmethod move-right ((commander-keen commander-keen)) (with-accessors ((x-pos x-pos)) commander-keen (if (is-move-right-possible) (setf x-pos (+ x-pos 5))))) (defgeneric move-left (commander-keen) (:documentation "moves commander keen 5 units left")) (defgeneric jump (commander-keen) (:documentation "lets commander keen jump")) (defmethod jump ((commander-keen commander-keen)) (with-accessors ((y-pos y-pos)) commander-keen (if (and (is-on-platform) (is-jump-possible)) ;; jumping code ))) (defun play () (let ((keen (make-instance 'commander-keen))) (jump keen)))

Viel Spaß in der Übung!