Algorithmen und Programmierung II

Ähnliche Dokumente
1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

Die Klasse java.lang.object. Thorsten Treffer

6 Speicherorganisation

Tag 8 Repetitorium Informatik (Java)

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Objektorientierte Programmierung Studiengang Medieninformatik

Grundelemente objektorientierter Sprachen (1)

2. Unterprogramme und Methoden

Grundelemente objektorientierter Sprachen (1)

Repetitorium Informatik (Java)

Programmierung und Angewandte Mathematik

Anweisungen zur Ablaufsteuerung

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen

Algorithmen und Datenstrukturen 07

Universität München, Hans-Peter Kriegel und Thomas Seidl Informatik II a[0] a[1] a[2] a[3] a[n 1]

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

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

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Tag 4 Repetitorium Informatik (Java)

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

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

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

Implementieren von Klassen

Praxis der Programmierung

Java Referenzdatentypen genauer betrachtet

Konstruktor. public Rational(int i) { Zaehler = i; Nenner = 1; }

Ausdrücke der Programmiersprache Java

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

Probeklausur: Programmierung WS04/05

Fakultät IV Elektrotechnik/Informatik

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Einfache Arrays. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Objektorientierte Konzepte

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

Erste Java-Programme (Java Wiederholung & Vererbung)

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Programmieren in Java

Objektorientierung (OO)

Vererbung, Polymorphie

Objektorientierte Programmierung und Modellierung

Programmieren I. Arrays Heusch 7.2 Ratz Institut für Angewandte Informatik

Variablen. int Flugzeug. float. I write code Hund. String. long. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Zeiger, Arrays und Strings in C und C++

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

Beuth Hochschule Parameter-Übergabe-Mechanismen WS17/18, S. 1

Felder. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Programmierkurs. Manfred Jackel

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

1. Abstrakte Klassen

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017

Einführung in das Programmieren Probeklausur Lösungen

Objektorientierte Programmierung. Kapitel 14: Interfaces

II.1.1. Erste Schritte - 1 -

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

EINFÜHRUNG IN DIE PROGRAMMIERUNG

4. Vererbung Die Klasse Object. Die Klasse Object

Vererbung. Oberklassen und Unterklassen

Einführung in C. EDV1-04C-Einführung 1

3.8 Objekttypen und Arrays. Wir werden uns in diesem Kapitel näher mit den Objekttypen in Java beschäftigen.

Welche Informatik-Kenntnisse bringen Sie mit?

Arrays. Einleitung. Deklarieren einer Array Variablen

14 Abstrakte Klassen, finale Klassen, Interfaces

String s1, s2; Eine Zuweisung geschieht am einfachsten direkt durch Angabe des Strings eingeschlossen in doppelte Hochkommata:

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

Informatik II. Woche 10, Giuseppe Accaputo

6. Globalübung (zu Übungsblatt 8)

10. Felder (Arrays) Teil 2. Java-Beispiele: Echo.java Primzahlen.java Monate.java. K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Grundzüge der Programmierung. Wiederverwendung POLYMORPHIE

Transkript:

Algorithmen und Programmierung II Vererbung Prof. Dr. Margarita Esponda SS 2012 1

Imperative Grundbestandteile Parameterübergabe String-Klasse Array-Klasse Konzepte objektorientierter Programmierung Vererbung 2

Parameterübergabe in Java Alle Parameter werden in Java per Wert (by-value) übergeben. Veränderungen der Parameter innerhalb der Methode bleiben lokal. Die formalen Parameter einer Methode-Definition sind Platzhalter. Beim Aufruf der Methode werden die formalen Parameter durch reale Variablen ersetzt, die den gleichen Typ der formalen Parameter haben müssen. int a = 5 ; Point p1 = new Point ( 1, 2 ); g.methodeaufruf ( a, p1 ); Nach Beendigung des Methoden- Aufrufs haben sich der Wert von a sowie der Referenz-Wert p1 nicht geändert. 3

Parameterübergabe mit primitiven Datentypen public class Parameteruebergabe { public static int fakultaet ( int n ) { int fac = 1; if (n>1) while (n>1) { fac = fac*n; n--; return fac; public static void main ( String[] args ) { int n = 20; System.out.println ( "n=" + n ); fakultaet ( n ); System.out.println( "n=" + n); Die Variable n wird solange verändert, bis sie gleich 0 wird. Nur eine Kopie des Parameterwertes wird übergeben. Nach Beendigung des Methoden-Aufrufs hat sich der Wert von n nicht geändert. n=20 n=20 4

Parameterübergabe mit Referenz-Variablen (Objekte) public class Parameteruebergabe { public static void scale( Rechteck r, int s ) { r.height = r.height*s; r.width = r.width*s; public static Rechteck clone( Rechteck r ){ return new Rechteck(r.x, r.y, r.width, r.height ); public static void main(string[] args) { Rechteck r1 = new Rechteck(10,20,30,30); scale( r1, 2 ); Rechteck r2 = clone( r1 ); System.out.println( r2.flaeche() ); 5

Parameterübergabe mit Referenz-Variablen (Objekte) public class Parameteruebergabe { public static void scale( Rechteck r, int s ) { r.height = r.height*s; r.width = r.width*s; public static Rechteck clone( Rechteck r ){ return new Rechteck(r.x, r.y, r.width, r.height ); public static void main(string[] args) { Rechteck r1 = new Rechteck(10,20,30,30); scale( r1, 2 ); Rechteck r2 = clone( r1 ); System.out.println( r2.flaeche() ); 152 10 20 30 30 6

Parameterübergabe mit Referenz-Variablen (Objekte) public class Parameteruebergabe { public static void scale( Rechteck r, int s ) { r.height = r.height*s; r.width = r.width*s; public static Rechteck clone( Rechteck r ){ return new Rechteck(r.x, r.y, r.width, r.height ); public static void main(string[] args) { Rechteck r1 = new Rechteck(10,20,30,30); scale( r1, 2 ); Rechteck r2 = clone( r1 ); System.out.println( r2.flaeche() ); r1: 152 152 10 20 30 30 7

Parameterübergabe mit Referenz-Variablen (Objekte) public class Parameteruebergabe { public static void scale( Rechteck r, int s ) { r.height = r.height*s; r.width = r.width*s; public static Rechteck clone( Rechteck r ){ return new Rechteck(r.x, r.y, r.width, r.height ); public static void main(string[] args) { Rechteck r1 = new Rechteck(10,20,30,30); scale( r1, 2 ); Rechteck r2 = clone( r1 ); System.out.println( r2.flaeche() ); r1: 152 152 10 20 60 60 8

Parameterübergabe mit Referenz-Variablen (Objekte) public class Parameteruebergabe { public static void scale( Rechteck r, int s ) { r.height = r.height*s; r.width = r.width*s; public static Rechteck clone( Rechteck r ){ return new Rechteck(r.x, r.y, r.width, r.height ); public static void main(string[] args) { Rechteck r1 = new Rechteck(10,20,30,30); scale( r1, 2 ); Rechteck r2 = clone( r1 ); System.out.println( r2.flaeche() ); r1: 152 r2: 136 152 10 20 60 60 136 10 20 60 60 9

Parameterübergabe mit Referenz-Variablen (Objekte) public class Parameteruebergabe { public static void scale( Rechteck r, int s ) { r.height = r.height*s; r.width = r.width*s; public static Rechteck clone( Rechteck r ){ return new Rechteck(r.x, r.y, r.width, r.height ); public static void main(string[] args) { Rechteck r1 = new Rechteck(10,20,30,30); scale( r1, 2 ); Rechteck r2 = clone( r1 ); System.out.println( r2.flaeche() ); Nach Beendigung des Methoden-Aufrufs hat sich der Referenz-Wert r1 nicht verändert. r1: 152 r2: 136 152 10 20 60 60 136 10 20 60 60 10

C/C++ Zeiger vs. Referenzen Zeiger (Pointers) int x = 78; int *px = &x; Referenzen (References) int x = 78; int & rx = x; px addr x: addr 78 rx addr *px = 5; rx = 5; Um durch px die Variable x zu verändern, müssen wir explizit mit Hilfe des * Operators dereferenzieren. Hier findet eine implizite automatische Dereferenzierung statt. 11

C/C++ Zeiger vs. Referenzen Zeiger (Pointers) Arithmetische Operationen wie px++ sind erlaubt. Sie müssen nicht initialisiert werden. Referenzen (References) Arithmetische Operationen sind nicht möglich. Sie müssen immer initialisiert werden. Sie sind veränderbar, d.h. während ihrer Lebenszeit können sie auf verschiedene Objekte zeigen. Sie können nicht verändert werden, d. h. während ihrer gesamten Lebenszeit zeigen sie auf das selbe Objekt. sehr fehleranfällig sicherer 12

call-by-value vs. call-by-reference IN-Modus void swap(double x, double y) { double temp = x; x = y; y = temp; caller double a = 1.0, b = 2.0; swap(a, b); callee Die Information (Kopie der aktuellen Parameter) geht nur von caller zum callee. Die lokalen Variablen von caller können von callee nicht verändert werden. caller IN/OUT-Modus void swap(double &x, double &y) { double temp = x; x = y; y = temp; double a = 1.0, b = 2.0; swap(a, b); callee Die Information geht in beide Richtungen. callee kann die lokalen Variablen von caller ändern. 13

call-by-value vs. call-by-reference IN-Modus void swap(double x, double y) { double temp = x; x = y; y = temp; caller double a = 1.0, b = 2.0; swap(a, b); C, Java callee a: 1.0 b: 2.0 IN/OUT-Modus caller void swap(double &x, double &y) { double temp = x; x = y; y = temp; double a = 1.0, b = 2.0; swap(a, b); callee a: 2.0 b: 1.0 Der Compiler sorgt dafür, dass die aktuellen und die formalen Parameter auf die gleichen Speicheradressen zeigen. C++, Pascal In C kann call-by-pointer programmiert werden. 14

Strings Strings sind in Java kein Basistyp, sondern eine Bibliotheksklasse java.lang.string String s = "hallo"; äquivalent zu String s = new String ("hallo"); Methoden: s.touppercase() "HALLO" s.charat( 4 ) 'O' s.length() 5 s.equals( s ) true s.replace('a', 'Ä') "HÄLLO" s.substring(2, 4) "LL" 15

Strings Strings in Java sind konstant, d.h. unveränderlich. Folgende Zuweisungen erzeugen jeweils neue String- Objekte und sind äquivalent. String s = "hallo"; Wert s.length() 5 s = s + "Welt!"; s = new String(s + "Welt!"); 16

Arrays In Java kann man eine Folge gleichartiger Objekte unter einem Namen zusammenfassen. (Reihungen) Eindimensionale Felder (Arrays) Beispiel: int[] zahlen; zahlen = new int[12]; int[] zahlen = new int[12]; 0 1... int[] primes = { 2, 3, 5, 7, 11, 13, 17 ; Arrays können beliebige Datentypen enthalten, auch weitere Arrays. 17

Arrays zahlen primes null 120 148 120 Speicher für Objekte int[] zahlen; zahlen = new int[4]; int[] primes = { 2, 3, 5, 7 ; 148 2 primes. length 4 Das "length"-attribut des Arrays wird als Konstante generiert und kann gelesen, aber nicht verändert werden. 3 5 7 18

Arrays Mehrdimensionales Array: Array von Arrays. double[][] matrix = new double[3][3]; 2.0 3.0 1.0 6.0 0.0 7.0 2.0 8.0 4.0 matrix[1][2] 7.0 Zeilen Spalten double[][] matrix = new double[3][3]; 19

Arrays java Main args[0] args[1]... public class Main { public static void main( String[] args ) { if ( args.length > 2 ) { System.out.print( args[0] ); System.out.print( args[1] ); System.out.print( args[2] ); // end of class Main java Main eins zwei 1000 Ausgabe: eins zwei 1000 20

Vererbung Ein wesentliches Merkmal objektorientierter Sprachen ist die Möglichkeit, Eigenschaften vorhandener Klassen auf neue Klassen zu übertragen. ( Wiederverwendbarkeit ) Durch Hinzufügen neuer Elemente oder Überschreiben der vorhandenen kann die Funktionalität der abgeleiteten Klasse erweitert werden. 21

Was ist Vererbung? Übernahme aller Bestandteile einer Klasse in eine Unterklasse, die als Erweiterung oder Spezialisierung der Klasse definiert wird. Die Unterklasse besitzt alle Eigenschaften und Methoden ihrer Oberklasse Vorsicht! + die Erweiterungen, die in der Unterklasse selber definiert worden sind. 22

Klassenhierarchie immer da! Die Unterklasse A besitzt alle Eigenschaften und Methoden ihrer Oberklasse + die Erweiterungen, die in der Unterklasse A definiert worden sind. 23

Verfeinerung und Verallgemeinerung Verfeinerungen sind Beziehungen zwischen gleichartigen Elementen unterschiedlichen Detaillierungsgrades. Beispiel: Unterklasse Programmiersprache Java C++ Die Spezialisierung wird als Generalisierungs-Pfeil dargestellt. Er zeigt in Richtung der allgemeineren Klasse. 24

Vererbungsbeispiel class Person name nachname addresse class FU_Mitglied extends Person fachbereich class Dozent extends FU_Mitglied fachrichtung telefon büronummer class Student extends FU_Mietglied matrikelnummer semester Dozent name nachname addresse fachbereich fachrichtung telefon büronummer Student name nachname addresse fachbereich matrikelnummer semester Die Methoden werden auch vererbt. 25

Klassifizieren von Objekten Musikinstrumente Saiteninstrumente Blasinstrumente Schlaginstrumente Saxofon Klarinette Flöte Bei guten Modellierungen klingt es logisch, wenn gesagt wird, dass ein Element der Unterklasse auch ein Element aller ihrer Oberklassen ist. Eine Flöte ist ein Blasinstrument Eine Flöte ist ein Musikinstrument 26

Vererbung FU_Mitglied ist eine Unterklasse "Spezialisierung " "Erweiterung" "is-a-relation" "Ableitung" von Person Die Kunst ist es, eine möglichst gute Klassenhierarchie für die Modellierung von Softwaresystemen zu finden. OOP ist keine Religion. Nicht alle Teile eines Problems können gut mit rein objektorientierten Techniken gelöst werden. Nicht immer gelingt es, eine saubere Klassenhierarchie zu finden! 27