Einführung in die Programmierung mit Java

Ähnliche Dokumente
Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Einstieg in die Informatik mit Java

Vererbung, Polymorphie

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Begriffe 1 (Wiederholung)

Unified Modelling Language

Objektorientierte Programmierung Studiengang Medieninformatik

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Programmieren in Java

Kapitel 6. Vererbung

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Objektorientierung

Vererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus

Kapitel 6. Vererbung

Einführung in die Programmiersprache Java II

Kapitel 6. Vererbung

Objektorientierte Programmierung und Klassen

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Programmiertechnik Objektorientierung

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

8. Objektorientierte Programmierung. Informatik II für Verkehrsingenieure

Javakurs für Anfänger

Objektorientierte Programmierung Studiengang Medieninformatik

6. Globalübung (zu Übungsblatt 8)

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Beispiel für überladene Methode

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

1 Klassen und Objekte

3 Objektorientierte Konzepte in Java

Teil 2: OOP und JAVA (Vorlesung 11)

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

Ausnahmebehandlung in Java

Objektorientierte Programmierung OOP

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Einstieg in die Informatik mit Java

Javakurs für Anfänger

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

Silke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank...

FAKULTÄT FÜR INFORMATIK

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

UML -Klassendiagramme

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

Java Einführung Vererbung und Polymorphie. Kapitel 13

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

C++ - Objektorientierte Programmierung Vererbung

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Klassenvariablen, Klassenmethoden

Einstieg in die Informatik mit Java

Statische Methoden, Vererbung, Benutzereingabe

Dr. Monika Meiler. Inhalt

Von der UML nach C++

Einführung in die Programmierung mit Java

Algorithmen und Datenstrukturen

Arten von Klassen-Beziehungen

1. Abstrakte Klassen

Objektorientierte Modellierung (1)

3. Konzepte der objektorientierten Programmierung

Javakurs für Anfänger

Einstieg in die Informatik mit Java

DAP2-Programmierpraktikum Einführung in C++ (Teil 2)

Abgabe: keine Pflichtabgabe (vor 12 Uhr) Aufgabe 10.1 (P) Vererbung Gegeben seien folgende Java-Klassen:

Klassen und ihre Beziehungen III: Mehrfache Vererbung, Rollen, Schnittstellen und Pakete

Kapitel 4: Klassen und Unterklassen

01. Grundprinzipien der Vererbung

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

Einstieg in die Informatik mit Java

Programmiersprache 2 (C++) Prof. Dr. Stefan Enderle NTA Isny

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

Hilfsblatt für C++ Prüfungen im 5. Semester

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

Innere Klassen in Java

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

15 Unified Modeling Language (UML) 7 UML und Java Informatik 2 (SS 07) 595

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Repetitorium Informatik (Java)

Objektorientierte Programmierung. Kapitel 14: Interfaces

Algorithmen und Datenstrukturen 06

Java für Bauingenieure

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen

Vererbung und Polymorphie

Programmierkurs Java. Vererbung. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck

Klassen als Datenstrukturen

Java Einführung Methoden in Klassen

Beziehungen zwischen Objekten

Programmieren I. Kapitel 8. Vererbung

Algorithmen und Datenstrukturen 07

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Einstieg in die Informatik mit Java

Programmieren in Java

Transkript:

Einführung in die Programmierung mit Java Teil 15: Wiederholung Martin Hofmann Steffen Jost LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München 3. Februar 2016 Martin Hofmann, Steffen Jost Einführung in die Programmierung Wiederholung 15-578

Inhalt Teil 15: Wiederholung 1 UML 2 Vererbung 3 Nebenläufigkeit 4 Streams Martin Hofmann, Steffen Jost Einführung in die Programmierung Wiederholung 15-579

UML Wiederholung UML Vererbung Nebenläufigkeit Streams UML-Diagramme werden primär als Strukturierungs- und Modellierunsmittel dem Weg von der informellen Beschreibung zum fertigen Programm eingesetzt. Welche Komponenten gibt es? Was leistet jede Komponente? Wie interagieren die Komponenten? Welche Abhängigkeiten gibt es? Modellierung beinhaltet auch Abstraktion: Wenn z.b. ein Konstruktor nicht aufgelistet wird, dann kann man darauf schließen, dass dessen Verhalten gewöhnlich ist; ansonsten gibt es wohl Besonderheiten zu beachten. Martin Hofmann, Steffen Jost Einführung in die Programmierung Wiederholung 15-580

UML Klassendiagramm Jedes Objekt durch Box mit drei Teilen repräsentiert: 1 Klassenname 2 Attribute (=Instanzvariablen) 3 Methoden (meist nur public) Pfeile von Unterklasse zu Oberklasse von Klasse zu implementierte Schnittstelle benutzt -Beziehung, z.b. Aufruf von Methoden Aggregation: hat-ein als Instanzvariable Komposition: ist-teil-von, bedeutet meist das Lebensspanne durch Element an Spitze bestimmt wird, z.b. Glied MyLinkedList Martin Hofmann, Steffen Jost Einführung in die Programmierung Wiederholung 15-581

Beispiel: UML Klassendiagramm I Martin Hofmann, Steffen Jost Einführung in die Programmierung Wiederholung 15-582

Beispiel: UML Klassendiagramm II Martin Hofmann, Steffen Jost Einführung in die Programmierung Wiederholung 15-583

UML Speicherdiagramm Diagramm zeigt alle vorhandenen Objekte im Speicher, und meistens noch alle lokale Variablen mit Inhalt. Jedes Objekt durch Box mit zwei Teilen repräsentiert: 1 Klassenname Falls lokale Variablen nicht separat angegeben werden, wird im Boxtitel oft der lokale Bezeichner dem Klassennamen mit : vorangestellt. 2 Attribute (=Instanzvariablen) mit aktuellem Inhalt Nur eine Sorte Pfeile für Referenzen, also Verweise auf andere Objekte... wird in ähnlicher Form auch als Objektdiagramm bezeichnet. Martin Hofmann, Steffen Jost Einführung in die Programmierung Wiederholung 15-584

Beispiel: UML Speicherdiagramm I Lokale Variablen kerzen = rotekerze = grünekerze= baum = deko = Speicher Weihnachtsbaum lichterkette = kugeln = 7 ArrayList<Kerze> [0] = [1] = ArrayList<Kerze> [0] = [1] = [2] = Kerze brennt=true Kerze brennt=false Kerze brennt=false Martin Hofmann, Steffen Jost Einführung in die Programmierung Wiederholung 15-585

Beispiel: UML Speicherdiagramm II Martin Hofmann, Steffen Jost Einführung in die Programmierung Wiederholung 15-586

Zusammenfassung Vererbung Private Instanzvariablen sind weiter vorhanden, aber unsichtbar! Konsequenz: Zugriff auf geerbte Instanzvariablen nur über geerbte Methoden Alle geerbten Methoden weiterhin unverändert sichtbar. Geerbte Methoden können überschrieben werden. Überschriebene Methoden ersetzen ursprüngliche Definition überall, auch wenn das Objekt über Subtyping als Ahne aufgefasst wird. Falle: Ohne Override kann es zu versehentlichen Überladen kommen insbesondere ist es es kein Überschreiben, wenn Argumente spezialisiert werden! Martin Hofmann, Steffen Jost Einführung in die Programmierung Wiederholung 15-587

Aufgabe Vererbung Welche Ausgabe wird erzeugt? A a = new A(3); B b = new B(4); a.ausgabe(a); a.ausgabe(b); b.ausgabe(a); b.ausgabe(b); public class A { public int x; public A(int x) { this.x=x; } public int getx() { return x;} public void ausgabe(a a) { System.out.println( "A "+ x + " "+ a.getx()); } } public class B extends A { public B(int x) { super(x); } public int getx() { return (3 * super.getx()); } } Martin Hofmann, Steffen Jost Einführung in die Programmierung Wiederholung 15-588

Aufgabe Vererbung Welche Ausgabe wird erzeugt? A a = new A(3); B b = new B(4); a.ausgabe(a); a.ausgabe(b); b.ausgabe(a); b.ausgabe(b); Antwort: public class A { public int x; public A(int x) { this.x=x; } public int getx() { return x;} public void ausgabe(a a) { System.out.println( "A "+ x + " "+ a.getx()); } } A 3 3 A 3 12 A 4 3 A 4 12 public class B extends A { public B(int x) { super(x); } public int getx() { return (3 * super.getx()); } } Martin Hofmann, Steffen Jost Einführung in die Programmierung Wiederholung 15-588

Nebenläufigkeit Grundsätzliche Fragestellung für Synchronisation: Was passiert, wenn ich hier unterbrochen werde und sich ggf. Instanzvariablen ändern? Meist ein Problem, wenn Instanzvariablen gelesen, verändert und zurückgeschrieben werden; insbesondere bei mehreren Instanzvariablen. Martin Hofmann, Steffen Jost Einführung in die Programmierung Wiederholung 15-589

Probleme bei Nebenläufigkeit Bei nebenläufigen Berechnungen mit mehreren Threads können u.a. folgende Probleme auftreten: Race-Condition Das Ergebnis der Berechnung hängt von der Verzahnung der Threads ab. Deadlock Ein Thread wartet auf das Ergebnis eines anderen Threads, welche direkt oder indirekt selbst auf das Ergebnis des ersten Threads wartet. Beide warten aufeinander, die Berechnung kommt somit zum erliegen. Durch den Einsatz von Synchronisation/Locks kann man Race-Conditions vermeiden, erhöht aber prinzipiell die Gefahr von Deadlocks. Verschiedene Threads können sich gegenseitig beeinflussen. Manchmal wird ein Thread schneller als ein anderer abgehandelt. Da die Möglichkeiten der Verzahnung immens sind, ist das Gesamtergebnis der Berechnung kaum vorhersagbar/testbar. Martin Hofmann, Steffen Jost Einführung in die Programmierung Wiederholung 15-590

Beispiel: H11-1 Aufgabe H11-1 könnte man mit Streams direkt und ohne Hilfsdefinition einfacher lösen: List<Boolean> result = xs.stream().map(x -> 3*x).map(x -> x%2==0).collect(collectors.tolist()); System.out.println(result.toString()); Der Punkt ist der gewöhnliche Methoden-Zugriff, d.h. man kann ganz genauso schreiben: System.out.println(xs.stream().map(x -> 4*x).collect(Collectors.toList())); xs.stream().map(x -> x%2==0).foreach( y -> System.out.print(y+", ")); Martin Hofmann, Steffen Jost Einführung in die Programmierung Wiederholung 15-591