EINFÜHRUNG IN DIE PROGRAMMIERUNG

Ähnliche Dokumente
Programmieren in Java

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Einstieg in die Informatik mit Java

Javakurs 2013 Objektorientierung

Einstieg in die Informatik mit Java

3 Objektorientierte Konzepte in Java

Theorie zu Übung 8 Implementierung in Java

Java-Schulung Grundlagen

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Objekt-Orientierte Programmierung

3 Objektorientierte Konzepte in Java

Javakurs für Anfänger

Java - Programmierung - Objektorientierte Programmierung 1

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

Java Einführung Abstrakte Klassen und Interfaces

Repetitorium Informatik (Java)

Algorithmen und Datenstrukturen 07

Java Einführung Klassendefinitionen

Kapitel 6. Vererbung

Probeklausur: Programmierung WS04/05

Kapitel 6. Vererbung

Java Einführung Methoden in Klassen

Klassen in Java. Klassen

Javakurs für Anfänger

Übersicht. Vorstellung des OO-Paradigmas

Javakurs für Anfänger

Java Schulung (Java 2 Java Development Kit 5 / 6)

5.6 Vererbung. Vererbung

Faustregeln zu Zusicherungen

Programmieren I + II Regeln der Code-Formatierung

Algorithmen und Programmierung II

Wiederholung zur Vorlesung Programmieren

Javakurs für Anfänger

Versuchsziele Kenntnisse in der Anwendung von: Sortieren mit Klassen Benutzung von generischen Klassen o Definition o Sortierung.

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Probeklausur: Programmierung WS04/05

Java für Computerlinguisten

Teil 1: Grundeigenschaften von Rechnern und Software

AuD-Tafelübung T-B5b

Interfaces und Vererbung

Algorithmen und Datenstrukturen

Kapitel 6. Vererbung

Programmieren in Java

1 Polymorphie (Vielgestaltigkeit)

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Java I Vorlesung 6 Referenz-Datentypen

Vorkurs C++ Programmierung

5.5.8 Öffentliche und private Eigenschaften

6 Speicherorganisation

Einführung in die Programmierung 1

1. Der Einstieg in Java. Was heißt Programmieren?

Einführung in die Programmierung mit Java

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden

Präsentation Interfaces

Vererbung. Vererbung von Methoden und Instanzvariablen. Vererbung als Realisierung einer is-a Beziehung.

Interaktionen zwischen Objekten durch Senden von Nachrichten und Reagieren auf empfangene Nachrichten

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Datenbankanwendungsprogrammierung Crashkurs Java

Vorlesung Programmieren. Bisher: Klassen und Objekte. Was ist mit ähnlichen Klassen? Vererbung und Polymorphismus

Type Erasure in Java 5. Helmi Jouini Institut für Theoretische Informatik Universität Karlsruhe

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

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

C# im Vergleich zu Java

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Java: Eine Übersicht. Dennis Giffhorn. Lehrstuhl für Programmierparadigmen Universität Karlsruhe

Innere Klassen in Java

Java Kurs für Anfänger Einheit 5 Methoden

Javakurs zu Informatik I. Henning Heitkötter

Themen. Web Service - Clients. Kommunikation zw. Web Services

Programmieren I. Kapitel 8. Vererbung

Informatik II - Übung 06. Christian Beckel

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

Informatik II Prüfungsvorbereitungskurs

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. November 2003

Einstieg in die Informatik mit Java

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

1. Der Einstieg in Java

einkonto.zahle(+100); //Transaktion Einzahlung einkonto.zahle(-20); //Transaktion Auszahlung einkonto.zahle(+30); //Transaktion Einzahlung

3. Konzepte der objektorientierten Programmierung

Programmieren in Java

Java I Vorlesung Vererbung und Sichtbarkeit

Programmierkurs Java

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

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Große Übung Praktische Informatik 1

Prinzipien Objektorientierter Programmierung

Java Cheatsheet. Mehrzeiliger Kommentar (beginnt mit /* und endet mit */)

Javakurs für Anfänger

Einführung in die Informatik

Typumwandlungen bei Referenztypen

Informatik II Übung 6 Gruppe 7

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Klassenbeziehungen & Vererbung

Einführung in die Programmierung

Transkript:

EINFÜHRUNG IN DIE PROGRAMMIERUNG OBJEKTORIENTIERTES PROGRAMMIEREN Tobias Witt 25.03.2014

10:30-12:00 Täglich Übungen zur Vertiefung Laptop hier nicht erforderlich Aber in den Übungen! Linux, OS X http://hhu-fscs.de/linux-install-party/

KLASSEN UND OBJEKTE

WURM & WAFFE Wurm Variablen: leben, team, wa#e Methoden: wa#eabfeuern(), schadenerleiden(int schaden) Wa"e Variablen: munition, schaden Methoden: feuer()

WURM Instanzvariablen (Member) public class Wurm { public int leben; private int team; private Waffe waffe; Konstruktor Wurm.java public Wurm(Waffe waffe, int leben, int team) { this.waffe = waffe; this.leben = leben; this.team = team; public int waffeabfeuern() { return waffe.feuer(); this object public void schadenerleiden(int schaden) { leben = Math.max(0, leben - schaden);

WAFFE public class Waffe { private int munition; private static final int schaden = 100; Klassenvariable Waffe.java public Waffe(int munition) { this.munition = munition; public int feuer() { if (munition > 0) { munition--; return schaden; else { return 0;

SPIEL Typ (= Klasse) Instanz (= Objekt) Konstruktor der Klasse public class Spiel { public static void main(string[] args) { Waffe waffe1 = new Waffe(25); Waffe waffe2 = new Waffe(6); Wurm wurm1 = new Wurm(waffe1, 100, 1); Wurm wurm2 = new Wurm(waffe2, 150, 2); Spiel.java wurm1.schadenerleiden(wurm2.waffeabfeuern()); System.out.println(wurm2.leben);

KLASSEN VS. OBJEKTE new erzeugt Instanz oder Objekt von Klasse Objekt: Identität (Name bzw. Id) Zustand (Variablen bzw. Member) Verhalten (Methoden)

SPEICHER 4 5 int a = 5; int b = 4;

SPEICHER 0x#aca 9 int c = a + b; String d = "hallo";

SPEICHER 0x#aca 9 "hallo"

PRIMITIVE DATENTYPEN VS. OBJEKTE Primitiv: Werte auf dem Stack pass by value Objekte: Referenz auf dem Stack, Werte im Heap pass by reference Primitive Member: im Speicher-Bereich des Objekts Vorsicht final: Referenz konstant, Member nicht

void einemethode(int schaden) { schaden = 20; Kopie des Wertes void einemethode(wurm wurm) { wurm.leben = 10; Kopie der Referenz int schaden = 100; Wurm wurm = new Wurm(waffe, 100, 1); einemethode(schaden); einemethode(wurm); schaden >> 100 wurm.leben >> 10

KLASSENVARIABLEN VS. INSTANZVARIABLEN public class Waffe { public static int schaden1 = 100; public int schaden2 = 200; Waffe w1 = new Waffe(); Waffe w2 = new Waffe();

w1.schaden2 = 300 >> 300 w2.schaden2 >> 200 w2.schaden2 = 70 >> 70 w1.schaden2 >> 300 w1.schaden1 = 0 >> 0 w2.schaden1 >> 0 Waffe.schaden1 = 500 >> 500 w1.schaden1 >> 500 w2.schaden1 >> 500 public class Waffe { public static int schaden1 = 100; public int schaden2 = 200; Waffe w1 = new Waffe(); Waffe w2 = new Waffe(); Unschön

KLASSENVARIABLEN VS. INSTANZVARIABLEN public class Waffe { Klassenvariable public static int schaden1 = 100; public int schaden2 = 200; Instanzvariable Waffe w1 = new Waffe(); Waffe w2 = new Waffe();

DIE MAIN-METHODE public class HalloWelt { public static void hallowelt() { System.out.println("Hallo Welt"); public static void main(string[] args) { hallowelt();

DIE MAIN-METHODE public class HalloWelt { public void hallowelt() { System.out.println("Hallo Welt"); public static void main(string[] args) { hallowelt(); non-static field cannot be referenced from a static context

NULL-TYP Wert einer nicht primitiven, nicht initialisierten Variable Äquivalent mit Nichts Verschieden von 0 (0 ist nicht null)

KONVENTIONEN Klassennamen groß: MeineKlasse public class MeineKlasse muss in Datei MeineKlasse.java Variablen- und Methodennamen klein: meinevariable Ausnahmen selten (z.b. System.out) Innere Klasse

KONVENTIONEN ENGLISCH VS. DEUTSCH Auf diesen Folien: Deutsch Nur zur besseren Lesbarkeit für den Kurs!!! Bitte in der echten Programmierung grundsätzlich Englisch! Probleme mit Umlauten und ß vorprogrammiert

PACKAGES

package de.hhu.propra.examples.wurmclass; Packagename public class Wurm { public int leben; private int team; Eindeutiger Name: de.hhu.propra.examples.wurmclass.wurm private Waffe waffe; public Wurm(Waffe waffe, int leben, int team) { this.waffe = waffe; this.leben = leben; this.team = team; public int waffeabfeuern() { return waffe.feuer(); public void schadenerleiden(int schaden) { leben = Math.max(0, leben - schaden);

package de.hhu.propra.examples.wurmclass; public class Spiel { public static void main(string[] args) { Waffe waffe1 = new Waffe(25); Waffe waffe2 = new Waffe(7); Wurm wurm1 = new Wurm(waffe1, 100, 1); Wurm wurm2 = new Wurm(waffe2, 100, 2); einfacher Name sichtbar gleiches Package wurm1.schadenerleiden(wurm2.waffeabfeuern()); System.out.println(wurm1.leben);

package de.hhu.propra.examples; public class Spiel { anderes Package public static void main(string[] args) { //... de.hhu.propra.examples.wurmclass.wurm wurm1... //... vollständiger Name notwendig wurm1.schadenerleiden(wurm2.waffeabfeuern()); System.out.println(wurm1.leben);

package de.hhu.propra.examples; anderes Package import de.hhu.propra.examples.wurmclass.wurm; public class Spiel { public static void main(string[] args) { //... Wurm wurm1 = new Wurm(waffe1, 100, 1); einfacher Name sichtbar Name importiert wurm1.schadenerleiden(wurm2.waffeabfeuern()); System.out.println(wurm1.leben);

PACKAGES & ORDNER

KOMPILIEREN UND AUSFÜHREN II $ ls de/hhu/propra/examples/wurmclass Spiel.java Wurm.java Waffe.java $ javac de/hhu/propra/examples/wurmclass/*.java $ ls de/hhu/propra/examples/wurmclass Spiel.java Spiel.class Wurm.java Wurm.class Waffe.java Waffe.class $ java de.hhu.propra.examples.wurmclass.spiel 0

VERERBUNG

WURM & WAFFE Gemeinsamkeiten: Gra"sche Darstellung Kollision Namen

LÖSUNG? public class Wurm { private String name; private Image image; public class Waffe { private String name; private Image image; private void kollidiere() { //... private void kollidiere() { //...

LÖSUNG! public class SpielObjekt { protected String name; protected Image image; public SpielObjekt(String name, Image image) { this.name = name; this.image = image; private void kollidiere() {

LÖSUNG! public class Wurm extends SpielObjekt { public Wurm(String name, Image image) { super(name, image); public class Waffe extends SpielObjekt { public Waffe(Image image) { super("waffe", image);

LÖSUNG! public class Wurm extends SpielObjekt { public Wurm(String name, Image image) { super(name, image); public class Waffe extends SpielObjekt { public Waffe(Image image) { super("waffe", image);

POLYMORPHIE public class BeweglichesSpielObjekt extends SpielObjekt { public BeweglichesSpielObjekt(String name, Image image) { super(name, image); @Override private void kollidiere() { //.. geh nicht durch die Wand private void bewege() {

WURM & SPIEL public class Wurm extends BeweglichesSpielObjekt { public Wurm(String name, Image image) { super(name, image); public class Spiel { public static void main(string[] args) { Image imageheinrich = new Image(); SpielObjekt heinrich = new Wurm("Heinrich", imageheinrich);

Object Spielobjekt Wurm Item Projektil Waffe Rüstung Bonus Bazooka Shotgun Gürtel Doppelter Schaden

OBJEKTE AUSGEBEN Was macht System.out.println(wurm)? wurm.tostring(); Standardimplementierung: Objekt-ID Überschreiben für spezielle Ausgabe

SICHTBARKEIT Sichtbarkeit Schlüsselwort Sichtbar für alle public Sichtbar nur innerhalb der Klasse private Sichtbar für Klasse und alle erbenden Klassen und innerhalb des Packages protected Sichtbar innerhalb des packages -

package1 KlasseA SubKlasseA1 KlasseB package2 SubKlasseA2 KlasseC Auf welche Member in KlasseA können die anderen Klassen zugreifen? private protected - public KlasseA SubKlasseA1 KlasseB SubKlasseA2 KlasseC

CASTING & GENERICS

CASTING

CASTING Implizites Casting von kleinem Typ zu großem Typ Kein Verlust von Informationen int a = 1; float b = a; SpielObjekt wurm = new Wurm("Heinrich");

CASTING Explizites Casting von großem Typ zu kleinem Typ Verlust von Informationen möglich float a = 1.5; int b = (int) a; cast-operator SpielObjekt[] objekte = { new Wurm("Heinrich"), new Waffe(100) ; Wurm heinrich = (Wurm) objekte[0]; Waffe bazooka = (Waffe) objekte[1];

GENERISCHE TYPEN public class Liste1 { private SpielObjekt[] data; public Liste1(int anzahl) { data = new SpielObjekt[anzahl]; public SpielObjekt getat(int index) { return data[index];

GENERISCHE TYPEN public class Liste2<T extends SpielObjekt> { private T[] data; public Liste2(int anzahl) { data = new T[anzahl]; public T getat(int index) { return data[index];

GENERISCHE TYPEN ANWENDUNG public class Spiel { public static void main(string[] args) { Liste1 liste1 = new Liste1(10); Wurm wurm1 = (Wurm) liste1.getat(1); Liste2<Wurm> liste2 = new Liste2<>(10); Wurm wurm2 = liste2.getat(1); Diamond-Operator (Java 7)

INTERFACES & ABSTRAKTE KLASSEN

IMPLEMENTIERUNG VS. SCHNITTSTELLE Nagel rein Nagel raus Handgri#

IMPLEMENTIERUNG VS. SCHNITTSTELLE Stahlkopf abge!acht im Presswerk Gabel maschinell eingefräst Handgri# aus wetterfestem Kunststo#

COMPARABLE public interface Comparable<T> { public int compareto(t o);

COMPARABLE WURM public class Wurm implements Comparable<Wurm> { public String name; public Wurm(String name) { this.name = name; @Override public int compareto(wurm wurm) { return this.name.compareto(wurm.name);

WURM VERGLEICHEN public class Spiel { private static void sortiere(comparable[] a) { if(a[0].compareto(a[1]) > 0) { // tausche a[0] und a[1] public static void main(string[] args) { Wurm[] wuermer = { new Wurm( Heinrich"), new Wurm("Dieter") ; sortiere(wuermer);

ABSTRAKTE KLASSEN public abstract class SpielObjekt { public void kollidiere(spielobjekt objekt) { //... reagiereauf(objekt); public abstract void reagiereauf(spielobjekt objekt); public class Wurm extends SpielObjekt { @Override public void reagiereauf(spielobjekt objekt) { //...

ÜBUNG

BILDQUELLEN Bild Quelle Memes http://www.quickmeme.com, http://www.memecenter.com Comics http://geek-and-poke.com/ Computer programming http://www.lastwordonnothing.com/wp-content/uploads/2010/07/ under_the_hood.png Hammer http://en.wikipedia.org/wiki/file:claw-hammer.jpg Känguru http://www.deviantart.com/art/kangaroo-transfurmation-102598471