Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

, 1 / Javakurs 2011 – Objektorientierung Objektorientierte Programmierung I This work is licensed under the Creative Commons Attribution-ShareAlike 3.0.

Ähnliche Präsentationen


Präsentation zum Thema: ", 1 / Javakurs 2011 – Objektorientierung Objektorientierte Programmierung I This work is licensed under the Creative Commons Attribution-ShareAlike 3.0."—  Präsentation transkript:

1 , 1 / Javakurs 2011 – Objektorientierung Objektorientierte Programmierung I This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 License. Martin Kresse & Katrin Lang 21. März 2011 Technische Universität Berlin

2 , 2 / return int Parameter long Variablen Array boolean short switch else for byte do main continue while Rückgabewert double break import float Datentyp public default if void char Methode case Operator Was wir bereits kennen Wiederholung

3 , 3 / Warum Objektorientierung? Motivation separation of concerns (Trennung der Aufgabenbereiche) flexible Kombinierbarkeit höhere Abstraktionsebene --> Verringerung der Komplexität Wiederverwendbarkeit...

4 , 4 / Worum geht es heute? Inhalt Objekt Zustand Verhalten Identität Lebensdauer Schnittstelle

5 , 5 / Attribute speichern Zustand Zustand Haarfarbe Alter Geschlecht Name Picture by Phillip Pessar, fotocommunity.com

6 , 6 / Attribute speichern Zustand Zustand Alter Name Haarfarbe Geschlecht Picture by FrankyOne, fotocommunity.com

7 , 7 / Klasse vs. Instanz Zustand Klasse Mensch = Bauplan Instanzen = Objekte

8 , 8 / Klassen definieren Attribute Zustand class Human { String name; int age; } Attribute / Instanzvariablen Klassenname Klasse = Bauplan für Objekte beschreibt Eigenschaften aller Objekte Objekt = Instanz einer Klasse Konvention zur Schreibweise: Klassennamen groß primitive Datentypen klein Variablennamen klein

9 , 9 / Erstellen von Objekten Klassen class Human { String name; int age; } Human martin = new Human(); zeigt auf eine Instanz der Klasse Human

10 , 10 / Zugriff auf Attribute Klassen class Human { String name; int age; } Human martin = new Human(); martin.name = "Martin Kresse"; martin.age = 31; System.out.println(martin.name) ; System.out.println(martin.age);

11 , 11 / Arbeiten mit mehreren Klassen Klassen class Lecturer { public static void main(String[] args) { Human martin = new Human(); martin.name = "Martin Kresse"; martin.age = 31; System.out.println(martin.name); System.out.println(martin.age); } class Human { String name; int age; } Listing 2: Lecturer.java Listing 1: Human.java genau eine Klasse pro Datei Dateiname muss identisch mit Klassennamen sein

12 , 12 / $ javac █$ javac Lecturer.java $ $ javac Lecturer.java $ ls Human.class Human.java Lecturer.class Lecturer.java $ $ javac Lecturer.java $ ls Human.class Human.java Lecturer.class Lecturer.java $ java █ $ javac Lecturer.java $ ls Human.class Human.java Lecturer.class Lecturer.java $ java Lecturer Arbeiten mit mehreren Klassen Klassen class Lecturer { public static void main(String[] args) { Human martin = new Human(); martin.name = "Martin Kresse"; martin.age = 31; System.out.println(martin.name); System.out.println(martin.age); } class Human { String name; int age; } Listing 2: Lecturer.java Listing 1: Human.java Abhängigkeiten werden erkannt, Klasse mit main() reicht aus

13 , 13 / Methoden implementieren Verhalten Verhalten laufen Picture by Kevin Cole, flickr.com

14 , 14 / Methodendefinition Verhalten Listing 3: Human.java class Human { String name; int age; void birthday() { age++; if (age >= 18) { // TODO: sex, drugs & rock'n'roll }

15 , 15 / Methodenaufruf Verhalten Human martin = new Human(); martin.name = "Martin Kresse"; martin.age = 31; martin.birthday(); System.out.println("Alter: " + martin.age); Ausgabe: Alter: 32

16 , 16 / Bedeutung von static Verhalten Human.birthday(); Human.age = 18; Human dorianGray = new Human(); //... dorianGray.birthday(); dorianGray.age = Math.min(24, dorianGray.age); System.out.println("Alter:" + dorianGray.age); Klassen-Methoden nur Zugriff auf Klassenvariablen Können direkt auf Klasse aufgerufen werden Instanz-Methoden Zugriff auf Klassen- und Instanzvariablen erfordern Erstellung eines Objektes statische Methodennicht-statische Methoden Methode min() ist static Attribut out ist static

17 , 17 / Objekte haben eine Identität Identität Picture by pizzo, flickr.com

18 , 18 / Variablen speichern Referenzen Identität Bulle Schatzi Papi

19 , 19 / Referenzen sind... anders Identität int a = 0; int b = a; a++; System.out.println(a); System.out.println(b); Human a = new Human(); Human b = a; a.age++; System.out.println(a.age); System.out.println(b.age); Ergebnis: a: 1 b: 0 Ergebnis: a.age: 1 b.age: 1

20 , 20 / Referenzen Identität Referenz a Referenz b

21 , 21 / Referenzen Identität Referenz a Referenz b ) ) ) ) )

22 , 22 / Identität Referenzen Referenz a Referenz b

23 , 23 / Referenzen Identität Referenz a Referenz b ) ) ) ) )

24 , 24 / Referenzen Identität Referenz a Referenz b

25 , 25 / Konstruktoren Picture by txefar, flickr.com

26 , 26 / Standard-Konstruktor Konstruktoren Human martin = new Human(); class Human { String name; int age; Human() { name = null; age = 0; } Listing 4: Human.java (mit Standardkonstruktor) Erzeugung eines Objektes:

27 , 27 / Vorsicht Konstruktoren

28 , 28 / null-Referenzen Konstruktoren class Human { [...] void greet() { if (name.contains("Dr.")) System.out.println("Guten Tag!"); else System.out.println("Hi!"); } Listing 5: Human.java Human someone = new Human(); someone.greet(); hi? Exception in thread "main" java.lang.NullPointerException at Human.greet(Human.java:24) at Human.main(Human.java:15) null!

29 , 29 / Konstruktoren mit Parametern Konstruktoren Human nobody = new Human(); Human karl = new Human("Karl-Theodor", 39); karl.greet(); class Human { String name; int age; Human(String name, int age) { this.name = name; this.age = age; } [...] } Listing 6: Human.java (mit parameterisiertem Konstruktor) Erzeugung eines Objektes:

30 , 30 / Vorsicht Konstruktoren

31 , 31 / Konstruktoren mit Parametern Konstruktoren class Human { String name; int age; Human(String name, int age) { name = name; age = age; } [...] } Listing 7: Human.java (mit defektem Konstruktor) Human vitali = new Human("Dr. Eisenfaust", 39); vitali.greet(); Parameter überschatten gleichnamige Instanzvariablen Parameter überschatten gleichnamige Instanzvariablen Ergebnis: java.lang.NullPointerException

32 , 32 / Überblick Konstruktoren Konstruktoren Konstruktoren initialisieren Objekten Name = Klassenname Kein Rückgabewert Wird kein Konstruktor definiert, existiert ein impliziter Default-Konstruktor ohne Parameter

33 , 33 / Compiletime- und Runtime-Fehler Häufige Fehler Human nobody; nobody.birthday(); nobody = null; nobody.birthday(); Human noOne = nobody; noOne.birthday(); Human somebody = new Human(); somebody.birthday(); System.out.print(somebody.name.length()); Human martin = new Human("Martin", 31); martin.birthday(); Human javaTutorOfTheYear = martin; javaTutorOfTheYear.birthday(); Compiletime Fehler Runtime Fehler

34 , 34 / Kapselung (Information Hiding) Kapselung Picture by Helga Kopp (Helga_262), flickr.com

35 , 35 / Direkter Variablenzugriff Kapselung Human martin = new Human(); martin.age = 31; martin.birthday(); System.out.println("Alter: " + martin.age); Ausgabe: Alter: 32

36 , 36 / Illegaler Zustand Kapselung Human martin = new Human(); martin.age = -2; martin.birthday(); System.out.println("Alter: " + martin.age); Ausgabe: Alter: -1

37 , 37 / Getter- und Setter-Methoden Kapselung Listing 8: Human.java (mit Getter- und Setter-Methoden) class Human { private String name; private int age; public void setAge(int age) { this.age = age; } public int getAge() { return age; } Instanzvariablen sind versteckt Zugriffsmethoden sind öffentlich

38 , 38 / Die Idee von Kapselung Kapselung Attribute Methoden M e t h o d e n M e t h o d e n

39 , 39 / Die Idee von Kapselung Kapselung int age birthday s e t A g e g e t A g e

40 , 40 / Die Idee von Kapselung Kapselung Date dateOfBirth birthday s e t A g e g e t A g e

41 , 41 / Getter- und Setter-Methoden Kapselung Listing 9: Human.java (mit Geburtsdatum statt Alter) import java.util.Date; class Human { private String name; private Date dateOfBirth; public int getAge() { Date today = new Date(); return today.getYear() - dateOfBirth.getYear(); } Hausaufgabe: getAge() korrigieren

42 , 42 / Fragen? Vielen Dank für Eure Aufmerksamkeit Picture by Marco Bellucci, flickr.com

43 , 43 / Quellen Vielen Dank für Eure Aufmerksamkeit Piktogramme: Fotos:


Herunterladen ppt ", 1 / Javakurs 2011 – Objektorientierung Objektorientierte Programmierung I This work is licensed under the Creative Commons Attribution-ShareAlike 3.0."

Ähnliche Präsentationen


Google-Anzeigen