Interfaces und Generics
|
|
- Viktor Dresdner
- vor 6 Jahren
- Abrufe
Transkript
1 Algorithmen und Datenstrukturen Wintersemester 2012/ Vorlesung Interfaces und Generics Jan-Henrik Haunert Lehrstuhl für Informatik I
2 Übersicht Liste und InsertionSort für Punkte für Objekte beliebiger Klassen für Objekte von Klassen, die ein(e) Nutzer(in) festlegen kann
3 Übersicht Liste und InsertionSort für Punkte (Wiederholung vom ) für Objekte beliebiger Klassen für Objekte von Klassen, die ein(e) Nutzer(in) festlegen kann
4 InsertionSort für Punkte Ein Punkt in der Ebene: public class Punkt { public double x; public double y; UML-Diagramm: +x:double +y:double Punkt Voraussetzung fürs Sortieren: Definition einer Ordnung y p 3 p i < p j genau dann, wenn p 1 p i.x < p j.x oder ( p i.x = p j.x und p i.y < p j.y) 1 p 2 p x = lexikographische Ordnung
5 Ein Punkt in der Ebene: InsertionSort für Punkte public class Punkt { public double x; public double y; public Punkt(double myx, double myy) { x = myx; y = myy; /* gibt Wert < 0 fuer (this < p), Wert > 0 fuer (this > p) und 0 fuer (this = p) zurueck */ public int compareto(punkt p) { if (this.x < p.x) return -1; if (this.x == p.x) { if (this.y < p.y) return -1; if (this.y == p.y) return 0; return 1; UML-Diagramm: +x:double +y:double Punkt +Punkt(double, double) +compareto(punkt):int
6 InsertionSort für Punkte public class Sortierverfahren { public static void insertionsort(int[] a) { for (int j = 1; j < a.length; j++) { int key = a[j]; int i = j - 1; while (i >= 0 && a[i] > key) { a[i + 1] = a[i]; i--; a[i + 1] = key;
7 InsertionSort für Punkte public class Sortierverfahren { public static void insertionsort(punkt[] a) { for (int j = 1; j < a.length; j++) { Punkt key = a[j]; int i = j - 1; while (i >= 0 && a[i].compareto(key) > 0) { a[i + 1] = a[i]; i--; a[i + 1] = key;
8 InsertionSort für Punkte public class Sortierverfahren { public static void main(string[] args) { Punkt[] a = new Punkt[4]; a[0] = new Punkt(1, 2); a[1] = new Punkt(1, 1); a[2] = new Punkt(3, 1); a[3] = new Punkt(4, 3); insertionsort(a); for (int i = 0; i < a.length; i++) System.out.println(a[i].x + " " + a[i].y); public static void insertionsort(punkt[] a) { //...
9 InsertionSort für Punkte public class Sortierverfahren { public static void main(string[] args) { Punkt[] a = new Punkt[4]; a[0] = new Punkt(1, 2); a[1] = new Punkt(1, 1); a[2] = new Punkt(3, 1); Ausgabe: a[3] = new Punkt(4, 3); insertionsort(a); for (int i = 0; i < a.length; i++) System.out.println(a[i].x + " " + a[i].y); public static void insertionsort(punkt[] a) { //
10 InsertionSort für Punkte Problem: eigene Sortiermethode für jede Klasse notwendig public static void insertionsort(punkt[] a) { //...
11 Liste für Punkte x y head nil prev key next nil
12 Liste für Punkte x y head nil prev key next nil public class PunktListenElement { public Punkt key; public PunktListenElement prev; public PunktListenElement next; public PunktListenElement(Punkt k, PunktListenElement p) { key = k; next = p; prev = null;
13 Liste für Punkte public class PunktListe { public PunktListenElement head; public PunktListenElement insert(punkt k) { PunktListenElement x = new PunktListenElement(k, head); if (head!= null) { head.prev = x; head = x; return x; public class PunktListenElement { public Punkt key; public PunktListenElement prev; public PunktListenElement next; public PunktListenElement(Punkt k, PunktListenElement p) { key = k; next = p; prev = null;
14 Liste für Punkte public class PunktListenTest { public static void main(string[] args) { PunktListe l = new PunktListe(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); for (PunktListenElement p = l.head; p!= null; p = p.next) { System.out.println(p.key.x + " " + p.key.y);
15 Liste für Punkte public class PunktListenTest { public static void main(string[] args) { PunktListe l = new PunktListe(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); for (PunktListenElement p = l.head; p!= null; p = p.next) { System.out.println(p.key.x + " " + p.key.y); Ausgabe:
16 Liste für Punkte public class PunktListenTest { public static void main(string[] args) { PunktListe l = new PunktListe(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); for (PunktListenElement p = l.head; p!= null; p = p.next) { System.out.println(p.key.x + " " + p.key.y); Problem: eigene Liste für jede Klasse notwendig
17 Liste für Punkte public class PunktListenTest { public static void main(string[] args) { PunktListe l = new PunktListe(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); for (PunktListenElement p = l.head; p!= null; p = p.next) { System.out.println(p.key.x + " " + p.key.y); Problem: eigene Liste für jede Klasse notwendig Lösung: erstelle Liste für Objekte der Klasse java.lang.object
18 Liste für Objekte java.lang.object Punkt Jede Java-Klasse ist Unterklasse der Klasse java.lang.object Eine Liste, die Objekte vom Typ java.lang.object aufnehmen kann, kann also jedes Objekt aufnehmen.
19 Liste für Objekte public class PunktListe { public PunktListenElement head; public PunktListenElement insert(punkt k) { PunktListenElement x = new PunktListenElement(k, head); if (head!= null) { head.prev = x; head = x; return x; public class PunktListenElement { public Punkt key; public PunktListenElement prev; public PunktListenElement next; public PunktListenElement(Punkt k, PunktListenElement p) { key = k; next = p; prev = null;
20 Liste für Objekte public class Liste { public ListenElement head; public ListenElement insert(object k) { ListenElement x = new ListenElement(k, head); if (head!= null) { head.prev = x; head = x; return x; public class ListenElement { public Object key; public ListenElement prev; public ListenElement next; public ListenElement(Object k, ListenElement p) { key = k; next = p; prev = null;
21 Liste für Objekte public class PunktListenTest { public static void main(string[] args) { PunktListe l = new PunktListe(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); for (PunktListenElement p = l.head; p!= null; p = p.next) { System.out.println(p.key.x + " " + p.key.y);
22 Liste für Objekte public class ListenTest { public static void main(string[] args) { Liste l = new Liste(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); for (ListenElement p = l.head; p!= null; p = p.next) { System.out.println(p.key.x + " " + p.key.y);
23 Liste für Objekte public class ListenTest { public static void main(string[] args) { Liste l = new Liste(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); for (ListenElement p = l.head; p!= null; p = p.next) { System.out.println(p.key.x + " " + p.key.y); Compiler: "p.key.x cannot be resolved or is not a field"
24 Liste für Objekte public class ListenTest { public static void main(string[] args) { Liste l = new Liste(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); for (ListenElement p = l.head; p!= null; p = p.next) { Punkt mypunkt = (Punkt) p.key; //explizite Typkonvertierung System.out.println(myPunkt.x + " " + mypunkt.y); Ausgabe:
25 Liste für Objekte public class ListenTest { public static void main(string[] args) { Liste l = new Liste(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); l.insert(new Double(3.2)); l.insert(new Integer(4)); Wir können nun auch Objekte anderer Klassen in die Liste einfügen
26 Liste für Objekte public class ListenTest { public static void main(string[] args) { Liste l = new Liste(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); l.insert(new Double(3.2)); l.insert(new Integer(4)); for (ListenElement p = l.head; p!= null; p = p.next) { Punkt mypunkt = (Punkt) p.key; //explizite Typkonvertierung System.out.println(myPunkt.x + " " + mypunkt.y);
27 Liste für Objekte public class ListenTest { public static void main(string[] args) { Liste l = new Liste(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); l.insert(new Double(3.2)); l.insert(new Integer(4)); for (ListenElement p = l.head; p!= null; p = p.next) { Punkt mypunkt = (Punkt) p.key; //explizite Typkonvertierung System.out.println(myPunkt.x + " " + mypunkt.y); Ausgabe: Exception in thread "main" java.lang.classcastexception: java.lang.integer cannot be cast to Punkt at ListenTest.main(ListenTest.java:12)
28 Liste für Objekte public class ListenTest { public static void main(string[] args) { Liste l = new Liste(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); l.insert(new Double(3.2)); l.insert(new Integer(4)); for (ListenElement p = l.head; p!= null; p = p.next) { if (p.key instanceof Punkt) { Punkt mypunkt = (Punkt) p.key; System.out.println(myPunkt.x + " " + mypunkt.y);
29 Liste für Objekte public class ListenTest { public static void main(string[] args) { Liste l = new Liste(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); l.insert(new Double(3.2)); l.insert(new Integer(4)); for (ListenElement p = l.head; p!= null; p = p.next) { if (p.key instanceof Punkt) { Punkt mypunkt = (Punkt) p.key; System.out.println(myPunkt.x + " " + mypunkt.y); instanceof überprüft, ob Objekt zu Klasse gehört
30 Liste für Objekte public class ListenTest { public static void main(string[] args) { Liste l = new Liste(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); l.insert(new Double(3.2)); l.insert(new Integer(4)); for (ListenElement p = l.head; p!= null; p = p.next) { if (p.key instanceof Punkt) { Punkt mypunkt = (Punkt) p.key; System.out.println(myPunkt.x + " " + mypunkt.y); Ausgabe:
31 Liste für Objekte public class ListenTest { public static void main(string[] args) { Liste l = new Liste(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); l.insert(new Double(3.2)); l.insert(new Integer(4)); for (ListenElement p = l.head; p!= null; p = p.next) { if (p.key instanceof Punkt) { Punkt mypunkt = (Punkt) p.key; System.out.println(myPunkt.x + " " + mypunkt.y); Ausgabe: es werden nur die Punkte ausgegeben
32 Liste für Objekte public class ListenTest { public static void main(string[] args) { Liste l = new Liste(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); l.insert(new Double(3.2)); l.insert(new Integer(4)); for (ListenElement p = l.head; p!= null; p = p.next) { //gib Ergebnis von p.key.tostring() aus: System.out.println(p.key); Ausgabe: Punkt@c3c749 Punkt@150bd4d Punkt@1bc4459
33 Liste für Objekte java.lang.object +tostring():string java.lang.double +tostring():string java.lang.integer +tostring():string Punkt for (ListenElement p = l.head; p!= null; p = p.next) { //gib Ergebnis von p.key.tostring() aus: System.out.println(p.key); Ausgabe: 4 tostring (Klasse Integer) 3.2 tostring (Klasse Double) Punkt@c3c749 tostring (Klasse Object) Punkt@150bd4d Punkt@1bc4459
34 Liste für Objekte java.lang.object +tostring():string java.lang.double +tostring():string java.lang.integer +tostring():string Punkt +tostring():string public class Punkt { public double x; public double y; public String tostring() { return "(" + x + ", " + y + ")"; //...
35 Liste für Objekte java.lang.object +tostring():string java.lang.double +tostring():string java.lang.integer +tostring():string Punkt +tostring():string public class Punkt { public double x; public double y; public String tostring() { return "(" + x + ", " + y + ")"; //... Methode tostring der Klasse Object wird überschrieben
36 Liste für Objekte public class ListenTest { public static void main(string[] args) { Liste l = new Liste(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); l.insert(new Double(3.2)); l.insert(new Integer(4)); for (ListenElement p = l.head; p!= null; p = p.next) { //gib Ergebnis von p.key.tostring() aus: System.out.println(p.key); Ausgabe: Punkt@c3c749 Punkt@150bd4d Punkt@1bc4459 java.lang.object +tostring():string Punkt
37 Liste für Objekte public class ListenTest { public static void main(string[] args) { Liste l = new Liste(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); l.insert(new Double(3.2)); l.insert(new Integer(4)); for (ListenElement p = l.head; p!= null; p = p.next) { //gib Ergebnis von p.key.tostring() aus: System.out.println(p.key); Ausgabe: (1.0, 0.0) (2.0, 2.0) (0.0, 1.0) java.lang.object +tostring():string Punkt +tostring():string
38 InsertionSort für Punkte Problem: eigene Sortiermethode für jede Klasse notwendig public static void insertionsort(punkt[] a) { //...
39 InsertionSort für Objekte public class Sortierverfahren { public static void insertionsort(punkt[] a) { for (int j = 1; j < a.length; j++) { Punkt key = a[j]; int i = j - 1; while (i >= 0 && a[i].compareto(key) > 0) { a[i + 1] = a[i]; i--; a[i + 1] = key;
40 InsertionSort für Objekte public class Sortierverfahren { public static void insertionsort(object[] a) { for (int j = 1; j < a.length; j++) { Object key = a[j]; int i = j - 1; while (i >= 0 && a[i].compareto(key) > 0) { a[i + 1] = a[i]; i--; a[i + 1] = key;
41 InsertionSort für Objekte public class Sortierverfahren { public static void insertionsort(object[] a) { for (int j = 1; j < a.length; j++) { Object key = a[j]; int i = j - 1; while (i >= 0 && a[i].compareto(key) > 0) { a[i + 1] = a[i]; i--; a[i + 1] = key; Compiler: "The method compareto(object) is undefined for the type Object"
42 InsertionSort für Objekte public class Sortierverfahren { public static void insertionsort(comparable[] a) { for (int j = 1; j < a.length; j++) { Comparable key = a[j]; int i = j - 1; while (i >= 0 && a[i].compareto(key) > 0) { a[i + 1] = a[i]; i--; a[i + 1] = key;
43 InsertionSort für Objekte public class Sortierverfahren { public static void insertionsort(comparable[] a) { for (int j = 1; j < a.length; j++) { Comparable key = a[j]; int i = j - 1; while (i >= 0 && a[i].compareto(key) > 0) { a[i + 1] = a[i]; i--; a[i + 1] = key; To Do: Definiere Klasse Comparable, so dass sichergestellt ist, dass Objekte von Unterklassen vergleichbar sind
44 InsertionSort für Objekte public class Comparable { public int compareto(object o) { //? To Do: Definiere Klasse Comparable, so dass sichergestellt ist, dass Objekte von Unterklassen vergleichbar sind
45 InsertionSort für Objekte public class Comparable { public int compareto(object o) { //? Es fällt uns schwer, eine allgemeine Definition zu finden.
46 InsertionSort für Objekte public class Comparable { public int compareto(object o) { //? Es fällt uns schwer, eine allgemeine Definition zu finden. Wir sollten daher verbieten, Instanzen unserer Klasse Comparable zu erzeugen.
47 InsertionSort für Objekte public abstract class Comparable { public abstract int compareto(object o); Es fällt uns schwer, eine allgemeine Definition zu finden. Wir sollten daher verbieten, Instanzen unserer Klasse Comparable zu erzeugen. Deshalb: abstract
48 InsertionSort für Objekte public abstract class Comparable { public abstract int compareto(object o); Die Klasse unserer Vergleichsobjekte hat evtl. bereits eine Oberklasse. Tier Elefant
49 InsertionSort für Objekte public abstract class Comparable { public abstract int compareto(object o); Die Klasse unserer Vergleichsobjekte hat evtl. bereits eine Oberklasse. Tier Comparable Elefant Mehrfachvererbung ist verboten!
50 InsertionSort für Objekte public interface Comparable { public int compareto(object o); Die Klasse unserer Vergleichsobjekte hat evtl. bereits eine Oberklasse. Deshalb: interface Tier <<Interface>> Comparable Elefant
51 InsertionSort für Objekte Interfaces ähneln abstrakten Klassen, die ausschließlich abstrakte Methoden besitzen (keine Attribute und keine implementierten Methoden). Unterschied: Eine Klasse kann mehrere Interfaces implementieren, aber nur eine Klasse (direkt) erweitern. Tier <<Interface>> Comparable Elefant
52 InsertionSort für Objekte public interface Comparable { public int compareto(object o); Interface Comparable war bis Java-Version 1.4 so im Paket java.lang definiert.
53 InsertionSort für Objekte public class Punkt { public double x; public double y; public Punkt(double myx, double myy) { x = myx; y = myy; /* gibt Wert < 0 fuer (this < p), Wert > 0 fuer (this > p) und 0 fuer (this = p) zurueck */ public int compareto(punkt p) { if (this.x < p.x) return -1; if (this.x == p.x) { if (this.y < p.y) return -1; if (this.y == p.y) return 0; return 1;
54 InsertionSort für Objekte public class Punkt implements Comparable { public double x; public double y; public Punkt(double myx, double myy) { x = myx; y = myy; /* gibt Wert < 0 fuer (this < p), Wert > 0 fuer (this > p) und 0 fuer (this = p) zurueck */ public int compareto(punkt p) { Compiler: "The type Punkt must implement the inherited abstract method Comparable.compareTo(Object)" if (this.x < p.x) return -1; if (this.x == p.x) { if (this.y < p.y) return -1; if (this.y == p.y) return 0; return 1;
55 InsertionSort für Objekte public class Punkt implements Comparable { public double x; public double y; public Punkt(double myx, double myy) { x = myx; y = myy; /* gibt Wert < 0 fuer (this < p), Wert > 0 fuer (this > p) und 0 fuer (this = p) zurueck */ public int compareto(object o) { Punkt p = (Punkt) o; if (this.x < p.x) return -1; if (this.x == p.x) { if (this.y < p.y) return -1; if (this.y == p.y) return 0; return 1;
56 InsertionSort für Objekte public class Sortierverfahren { public static void main(string[] args) { Punkt[] a = new Punkt[4]; a[0] = new Punkt(1, 2); a[1] = new Punkt(1, 1); a[2] = new Punkt(3, 1); a[3] = new Punkt(4, 3); insertionsort(a); for (int i = 0; i < a.length; i++) System.out.println(a[i].x + " " + a[i].y); public static void insertionsort(comparable[] a) { //...
57 InsertionSort für Objekte public class Sortierverfahren { public static void main(string[] args) { Punkt[] a = new Punkt[4]; a[0] = new Punkt(1, 2); a[1] = new Punkt(1, 1); a[2] = new Punkt(3, 1); a[3] = new Punkt(4, 3); insertionsort(a); Hier wird Feld mit Punkt-Objekten übergeben Hier wird Feld mit Comparable-Objekten entgegengenommen for (int i = 0; i < a.length; i++) System.out.println(a[i].x + " " + a[i].y); public static void insertionsort(comparable[] a) { //...
58 InsertionSort für Objekte public class Sortierverfahren { public static void main(string[] args) { Punkt[] a = new Punkt[4]; a[0] = new Punkt(1, 2); a[1] = new Punkt(1, 1); a[2] = new Punkt(3, 1); a[3] = new Punkt(4, 3); insertionsort(a); Ausgabe: for (int i = 0; i < a.length; i++) System.out.println(a[i].x + " " + a[i].y); public static void insertionsort(comparable[] a) { //
59 InsertionSort für Objekte +m:punkt GeoFigur +GeoFigur(Punkt) +getflaeche():double +compareto(geofigur):int -a:double Quadrat +Quadrat(Punkt, double) +getflaeche():double +seta(double) +geta():double -r:double Kreis +Kreis(Punkt, double) +getflaeche():double +setr(double) +getr():double
60 InsertionSort für Objekte <<Interface>> Comparable +compareto(object):int +m:punkt GeoFigur +GeoFigur(Punkt) +getflaeche():double +compareto(object):int -a:double Quadrat +Quadrat(Punkt, double) +getflaeche():double +seta(double) +geta():double -r:double Kreis +Kreis(Punkt, double) +getflaeche():double +setr(double) +getr():double
61 Klasse GeoFigur in Java: InsertionSort für Objekte public class GeoFigur { public Punkt m; public GeoFigur(Punkt mym) { m = mym; public double getflaeche() { return 0.0; public int compareto(geofigur key) { if (this.getflaeche() > key.getflaeche()) return 1; if (this.getflaeche() < key.getflaeche()) return -1; return 0;
62 Klasse GeoFigur in Java: InsertionSort für Objekte public class GeoFigur implements Comparable { public Punkt m; public GeoFigur(Punkt mym) { m = mym; public double getflaeche() { return 0.0; public int compareto(object o) { GeoFigur key = (GeoFigur) o; if (this.getflaeche() > key.getflaeche()) return 1; if (this.getflaeche() < key.getflaeche()) return -1; return 0;
63 Sortieren: InsertionSort für Objekte public class Sortierverfahren { public static void main(string[] args) { GeoFigur[] a = new GeoFigur[4]; a[0] = new Quadrat(new Punkt(0.0, 0.0), 2.0); a[1] = new Quadrat(new Punkt(1.0, 2.0), 4.0); a[2] = new Kreis(new Punkt(2.0, 0.0), 2.0); a[3] = new Kreis(new Punkt(0.0, 1.0), 4.0); insertionsort(a); for (int i = 0; i < a.length; i++) System.out.println(a[i].getClass().toString() + " " + a[i].getflaeche()); public static void insertionsort(geofigur[] a) { //...
64 Sortieren: InsertionSort für Objekte public class Sortierverfahren { public static void main(string[] args) { GeoFigur[] a = new GeoFigur[4]; a[0] = new Quadrat(new Punkt(0.0, 0.0), 2.0); a[1] = new Quadrat(new Punkt(1.0, 2.0), 4.0); a[2] = new Kreis(new Punkt(2.0, 0.0), 2.0); a[3] = new Kreis(new Punkt(0.0, 1.0), 4.0); insertionsort(a); for (int i = 0; i < a.length; i++) System.out.println(a[i].getClass().toString() + " " + a[i].getflaeche()); public static void insertionsort(comparable[] a) { //...
65 Sortieren: InsertionSort für Objekte public class Sortierverfahren { public static void main(string[] args) { GeoFigur[] a = new GeoFigur[4]; a[0] = new Quadrat(new Punkt(0.0, 0.0), 2.0); a[1] = new Quadrat(new Punkt(1.0, 2.0), 4.0); a[2] = new Kreis(new Punkt(2.0, 0.0), 2.0); a[3] = new Kreis(new Punkt(0.0, 1.0), 4.0); insertionsort(a); Ausgabe: for (int i = 0; i < a.length; i++) System.out.println(a[i].getClass().toString() + " " + a[i].getflaeche()); public static void insertionsort(comparable[] a) { //... class Quadrat 4.0 class Kreis class Quadrat 16.0 class Kreis
66 Sortieren: InsertionSort für Objekte public class Sortierverfahren { public static void main(string[] args) { GeoFigur[] a = new GeoFigur[4]; a[0] = new Punkt(0.0, 0.0); a[1] = new Quadrat(new Punkt(1.0, 2.0), 4.0); a[2] = new Kreis(new Punkt(2.0, 0.0), 2.0); a[3] = new Kreis(new Punkt(0.0, 1.0), 4.0); insertionsort(a); for (int i = 0; i < a.length; i++) System.out.println(a[i].getClass().toString() + " " + a[i].getflaeche()); public static void insertionsort(comparable[] a) { //...
67 Sortieren: InsertionSort für Objekte public class Sortierverfahren { public static void main(string[] args) { GeoFigur[] a = new GeoFigur[4]; a[0] = new Punkt(0.0, 0.0); a[1] = new Quadrat(new Punkt(1.0, 2.0), 4.0); a[2] = new Kreis(new Punkt(2.0, 0.0), 2.0); a[3] = new Kreis(new Punkt(0.0, 1.0), 4.0); insertionsort(a); Compiler: Type mismatch: cannot convert from Punkt to GeoFigur for (int i = 0; i < a.length; i++) System.out.println(a[i].getClass().toString() + " " + a[i].getflaeche()); public static void insertionsort(comparable[] a) { //...
68 Sortieren: InsertionSort für Objekte public class Sortierverfahren { public static void main(string[] args) { Comparable[] a = new Comparable[4]; a[0] = new Punkt(0.0, 0.0); a[1] = new Quadrat(new Punkt(1.0, 2.0), 4.0); a[2] = new Kreis(new Punkt(2.0, 0.0), 2.0); a[3] = new Kreis(new Punkt(0.0, 1.0), 4.0); insertionsort(a); for (int i = 0; i < a.length; i++) System.out.println(a[i]); public static void insertionsort(comparable[] a) { //...
69 Sortieren: InsertionSort für Objekte public class Sortierverfahren { public static void main(string[] args) { Ausgabe: Comparable[] a = new Comparable[4]; a[0] = new Punkt(0.0, 0.0); a[1] = new Quadrat(new Punkt(1.0, 2.0), 4.0); a[2] = new Kreis(new Punkt(2.0, 0.0), 2.0); a[3] = new Kreis(new Punkt(0.0, 1.0), 4.0); insertionsort(a); for (int i = 0; i < a.length; i++) System.out.println(a[i]); Exception in thread "main" java.lang.classcastexception: Quadrat cannot be cast to Punkt public static void insertionsort(comparable[] a) { at Punkt.compareTo(Punkt.java:12) //... at Sortierverfahren.insertionSort(Sortierverfahren.java:21) at Sortierverfahren.main(Sortierverfahren.java:9)
70 InsertionSort für Objekte public class Punkt implements Comparable { public double x; public double y; public Punkt(double myx, double myy) { x = myx; y = myy; /* gibt Wert < 0 fuer (this < p), Wert > 0 fuer (this > p) und 0 fuer (this = p) zurueck */ public int compareto(object o) { Punkt p = (Punkt) o; if (this.x < p.x) return -1; Ausgabe: if (this.x == p.x) { if (this.y < p.y) return -1; Exception if (this.y in thread == p.y) "main" return java.lang.classcastexception: 0; Quadrat cannot be cast to Punkt at Punkt.compareTo(Punkt.java:12) return 1; at Sortierverfahren.insertionSort(Sortierverfahren.java:21) at Sortierverfahren.main(Sortierverfahren.java:9)
71 InsertionSort für Objekte public class Punkt implements Comparable { public double x; public double y; public Punkt(double myx, double myy) { x = myx; y = myy; /* gibt Wert < 0 fuer (this < p), Wert > 0 fuer (this > p) und 0 fuer (this = p) zurueck */ public int compareto(object o) { Punkt p = (Punkt) o; if (this.x < p.x) return -1; if (this.x == p.x) { if (this.y < p.y) return -1; if (this.y == p.y) return 0; return 1;
72 InsertionSort für Objekte public class Punkt implements Comparable { public double x; public double y; public Punkt(double myx, double myy) { x = myx; y = myy; public int compareto(object o) { if (o instanceof Punkt) { Punkt p = (Punkt) o; if (this.x < p.x) return -1; if (this.x == p.x) { if (this.y < p.y) return -1; if (this.y == p.y) return 0; return 1; else { //?
73 InsertionSort für Objekte public class Punkt implements Comparable { public double x; public double y; public Punkt(double myx, double myy) { x = myx; y = myy; public int compareto(object o) { if (o instanceof Punkt) { Punkt p = (Punkt) o; if (this.x < p.x) return -1; if (this.x == p.x) { if (this.y < p.y) return -1; if (this.y == p.y) return 0; return 1; else { //? Es wäre gut, wenn wir wüssten, mit was für Objekten wir zu rechnen haben.
74 InsertionSort für Objekte public interface Comparable { public int compareto(object o);
75 InsertionSort für Objekte public interface Comparable<T> { public int compareto(t o); Seit Java Version 5 können generische Datentypen definiert werden.
76 InsertionSort für Objekte public interface Comparable<T> { public int compareto(t o); Seit Java Version 5 können generische Datentypen definiert werden. Typparameter (Platzhalter für den Namen einer Klasse)
77 InsertionSort für Objekte public interface Comparable<T> { public int compareto(t o); public class Punkt implements Comparable { //... public int compareto(object o) { Punkt p = (Punkt) o; if (this.x < p.x) return -1; if (this.x == p.x) { if (this.y < p.y) return -1; if (this.y == p.y) return 0; return 1;
78 InsertionSort für Objekte public interface Comparable<T> { public int compareto(t o); public class Punkt implements Comparable<Punkt> { //... public int compareto(punkt p) { if (this.x < p.x) return -1; if (this.x == p.x) { if (this.y < p.y) return -1; if (this.y == p.y) return 0; return 1;
79 InsertionSort für Objekte public interface Comparable<T> { public int compareto(t o); Für Typparameter wird Typargument (Punkt) eingesetzt. public class Punkt implements Comparable<Punkt> { //... public int compareto(punkt p) { if (this.x < p.x) return -1; if (this.x == p.x) { if (this.y < p.y) return -1; if (this.y == p.y) return 0; return 1;
80 InsertionSort für Objekte public interface Comparable<T> { public int compareto(t o); Für Typparameter wird Typargument (Punkt) eingesetzt. public class Punkt implements Comparable<Punkt> { //... public int compareto(punkt p) { if (this.x < p.x) return -1; if (this.x == p.x) { if (this.y < p.y) return -1; if (this.y == p.y) return 0; return 1; Punkte können nur mit Punkten verglichen werden!
81 InsertionSort für Objekte public class Sortierverfahren { public static void main(string[] args) { Punkt[] a = new Punkt[4]; a[0] = new Punkt(1, 2); a[1] = new Punkt(1, 1); a[2] = new Punkt(3, 1); a[3] = new Punkt(4, 3); insertionsort(a); for (int i = 0; i < a.length; i++) System.out.println(a[i].x + " " + a[i].y); public static void insertionsort(comparable[] a) { //...
82 InsertionSort für Objekte public class Sortierverfahren { public static void main(string[] args) { Punkt[] a = new Punkt[4]; a[0] = new Punkt(1, 2); a[1] = new Punkt(1, 1); a[2] = new Punkt(3, 1); a[3] = new Punkt(4, 3); insertionsort(a); for (int i = 0; i < a.length; i++) System.out.println(a[i].x + " " + a[i].y); public static <T extends Comparable<T>> void insertionsort (T[] a) { //...
83 InsertionSort für Objekte generische Methode: public static <T extends Comparable<T>> void insertionsort (T[] a) { //...
84 InsertionSort für Objekte generische Methode: Nimmt Feld mit Objekten einer Klasse T entgegen public static <T extends Comparable<T>> void insertionsort (T[] a) { //...
85 InsertionSort für Objekte generische Methode: Nimmt Feld mit Objekten einer Klasse T entgegen wobei T für beliebige Klasse steht, die diese Bedingung erfüllt public static <T extends Comparable<T>> void insertionsort (T[] a) { //...
86 InsertionSort für Objekte public class Sortierverfahren { public static <T extends Comparable<T>> void insertionsort(t[] a) { for (int j = 1; j < a.length; j++) { T key = a[j]; int i = j - 1; while (i >= 0 && a[i].compareto(key) > 0) { a[i + 1] = a[i]; i--; a[i + 1] = key;
87 Liste für Objekte public class Liste { public ListenElement head; public ListenElement insert(object k) { ListenElement x = new ListenElement(k, head); if (head!= null) { head.prev = x; head = x; return x; public class ListenElement { public Object key; public ListenElement prev; public ListenElement next; public ListenElement(Object k, ListenElement p) { key = k; next = p; prev = null;
88 Liste für Objekte public class List<T> { public ListItem<T> head; public ListItem<T> insert(t k) { ListItem<T> x = new ListItem<T>(k, head); if (head!= null) { head.prev = x; head = x; return x; public class ListItem<T> { public T key; public ListItem<T> prev; public ListItem<T> next; public ListItem (T k, ListItem<T> p) { key = k; next = p; prev = null;
89 Liste für Objekte public class ListenTest { public static void main(string[] args) { Liste l = new Liste(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); for (ListenElement p = l.head; p!= null; p = p.next) { if (p.key instanceof Punkt) { Punkt mypunkt = (Punkt) p.key; System.out.println(myPunkt.x + " " + mypunkt.y);
90 Liste für Objekte public class ListenTest { public static void main(string[] args) { List<Punkt> l = new List<Punkt>(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); for (ListItem<Punkt> p = l.head; p!= null; p = p.next) { System.out.println(p.key.x + " " + p.key.y);
91 Liste für Objekte public class ListenTest { public static void main(string[] args) { List<Punkt> l = new List<Punkt>(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); for (ListItem<Punkt> p = l.head; p!= null; p = p.next) { System.out.println(p.key.x + " " + p.key.y); Ausgabe:
92 Liste für Objekte public class ListenTest { public static void main(string[] args) { List<Punkt> l = new List<Punkt>(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); l.insert(new Double(2.0)); for (ListItem<Punkt> p = l.head; p!= null; p = p.next) { System.out.println(p.key.x + " " + p.key.y);
93 Liste für Objekte public class ListenTest { public static void main(string[] args) { List<Punkt> l = new List<Punkt>(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); l.insert(new Double(2.0)); for (ListItem<Punkt> p = l.head; p!= null; p = p.next) { System.out.println(p.key.x + " " + p.key.y); Compiler: "The method insert(punkt) in the type List<Punkt> is not applicable for the arguments (Double)"
94 Liste für Objekte public class ListenTest { public static void main(string[] args) { List<Object> l = new List<Object>(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); l.insert(new Double(2.0)); for (ListItem<Object> p = l.head; p!= null; p = p.next) { System.out.println(p.key);
95 Liste für Objekte public class ListenTest { public static void main(string[] args) { List<Object> l = new List<Object>(); l.insert(new Punkt(0.0, 1.0)); l.insert(new Punkt(2.0, 2.0)); l.insert(new Punkt(1.0, 0.0)); l.insert(new Double(2.0)); for (ListItem<Object> p = l.head; p!= null; p = p.next) { System.out.println(p.key); Ausgabe: 2.0 (1.0, 0.0) (2.0, 2.0) (0.0, 1.0)
96 Schluss Generische Datentypen/Methoden erlauben es, Datenstrukturen/Algorithmen so zu implementieren, dass sie für verschiedene Datentypen angewandt werden können.
1 Polymorphie (Vielgestaltigkeit)
1 Polymorphie (Vielgestaltigkeit) Problem: Unsere Datenstrukturen List, Stack und Queue können einzig und allein int-werte aufnehmen. Wollen wir String-Objekte, andere Arten von Zahlen oder andere Objekttypen
MehrProgrammieren 2 Java Überblick
Programmieren 2 Java Überblick 1 Klassen und Objekte 2 Vererbung 4 Innere Klassen 5 Exceptions 6 Funktionsbibliothek 7 Datenstrukturen und Algorithmen 8 Ein-/Ausgabe 9 Graphische Benutzeroberflächen 10
MehrSoftwaretechnik WS 16/17. Übungsblatt 01
Softwaretechnik WS 16/17 Übungsblatt 01 Was ist eine Klasse? Definition der Object Management Group: A class describes a set of objects that share the same specifications of features, constraints, and
Mehr1 Abstrakte Klassen, finale Klassen und Interfaces
1 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,
MehrJava Einführung Abstrakte Klassen und Interfaces
Java Einführung Abstrakte Klassen und Interfaces Interface Interface bieten in Java ist die Möglichkeit, einheitliche Schnittstelle für Klassen zu definieren, die später oder/und durch andere Programmierer
MehrJavakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung Warum Objektorientierung Daten und Funktionen möglichst eng koppeln und nach außen kapseln Komplexität der Software besser modellieren
MehrÜbersicht. Berechnung der Potenz für zwei ganze Zahlen Klausuraufgabe SS 2010! Berechnung der Cosinus-Funktion Klausuraufgabe WS 2010/2011!
Algorithmen und Datenstrukturen Wintersemester 2012/13 8. Vorlesung Algorithmen in Java Jan-Henrik Haunert Lehrstuhl für Informatik I Übersicht Berechnung der Potenz für zwei ganze Zahlen Klausuraufgabe
MehrALP II Dynamische Datenmengen
ALP II Dynamische Datenmengen Teil III Iteratoren Iterator-Objekt O1 O2 O3 O4 SS 2012 Prof. Dr. Margarita Esponda 22. ALP2-Vorlesung, M. Esponda 2 Motivation: Iteratoren Wir haben für die Implementierung
MehrKapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen
Kapitel 9 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Attribute von Klassen, Methoden und Variablen Interfaces WS 07/08 1/ 18 2/ 18
MehrOOP. Tagesprogramm. Generizität
1 2016-11-23 Tagesprogramm Generizität 2 Universeller Polymorphismus enthaltender Polymorphismus durch Untertypbeziehungen: Ersetzbarkeit: unvorhersehbare Wiederverwendung, kann Clients von lokalen Codeänderungen
MehrEinstieg in die Informatik mit Java
1 / 22 Einstieg in die Informatik mit Java Generics Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 22 1 Überblick Generics 2 Generische Klassen 3 Generische Methoden 4
MehrObjektorientierte Programmierung. Kapitel 12: Interfaces
12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/
Mehr7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen
7. Schnittstellen Grundlagen zu Schnittstellen 7. Schnittstellen Eine Schnittstelle (Interface) ist eine Spezifikation eines Typs in Form eines Typnamens und einer Menge von Methoden, die keine Implementierungen
MehrJavakurs für Anfänger
Javakurs für Anfänger Einheit 14: Generics Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda Generische Klassen (Generics) Motivation Java Typ-Prüfung Warum also Generics? Generische
Mehr8. Generics Grundlagen der Programmierung 1 (Java)
8. Generics Grundlagen der Programmierung 1 (Java) Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 6. Dezember 2005 Einordnung im Kontext der Vorlesung 1.
MehrAlgorithmen und Datenstrukturen 07
5. Dezember 2011 1 Besprechung Blatt 6 Fragen 2 Vererbung Allgemein abstract Interfaces 3 Unified Modeling Language (UML) Ablaufdiagramme Klassendiagramme Anwendungsfalldiagramme 4 Vorbereitung Blatt 7
MehrGliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions
try-catch Schlüsselworte try-catch e Schlüsselwort Schlüsselwort selbst erstellte ermöglichen die Behandlung von Fehlern, die zur Laufzeit entstehen. try-catch in C: Fehler führt immer zum Abbruch des
MehrKapitel 4: Klassen und Unterklassen
Liste P: Programmieren mit Java WS 2001/2002 Prof. Dr. V. Turau FH Wiesbaden Kapitel 4: Klassen und Unterklassen Folie 54 : Unterklassen Die Bildung von Unterklassen und das Konzept der Vererbung sind
MehrProgrammieren I. Kapitel 8. Vererbung
Programmieren I Kapitel 8. Vererbung Kapitel 8: Vererbung Ziel: Wesentliches objektorientiertes Konzept kennenlernen Subtypen Idee Probleme und Varianten Vererbung in Java dynamische Bindung abstrakte
MehrII. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:
Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen
MehrVersuchsziele Kenntnisse in der Anwendung von: Sortieren mit Klassen Benutzung von generischen Klassen o Definition o Sortierung.
Hochschule Harz Programmierung1 Tutorial 11: FB Automatisierung und Informatik Dipl.-Inf. Dipl.-Ing. (FH) M. Wilhelm Programmierung 1 für MI / WI Thema: Sortieren und generische Klassen Versuchsziele Kenntnisse
MehrVererbung. Vererbung von Methoden und Instanzvariablen. Vererbung als Realisierung einer is-a Beziehung.
Vererbung Unterklassen einer Klasse Vererbung von Methoden und Instanzvariablen Überschreiben von Methoden Vererbung als Realisierung einer is-a Beziehung. Informatik II: Objektorientierte SW-Entwicklung,
Mehr1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)
Praktische Informatik (Software) Vorlesung Softwareentwicklung 1 Prof. Dr. A. Ferscha Hauptklausur am 01. 02. 2001 Zuname Vorname Matr. Nr. Stud. Kennz. Sitzplatz HS / / / Punkte Note korr. Fügen Sie fehlende
MehrProgrammieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik
Programmieren II Innere Klassen Heusch 10, 13.10 Ratz 5.2.1, 9.8 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Innere Klassen Bisher kennen wir nur Klassen, die entweder zusammen
MehrProgrammierkurs Java
Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE38-Generics (Stand 28.09.2012) Aufgabe 1: Schauen Sie sich die generischen Klassen des Paketes java.util an. Aufgabe 2: Ausgangslage sind die folgenden
MehrInfo B VL 8: Abstrakte Klassen & Interfaces
Info B VL 8: Abstrakte Klassen & Interfaces Objektorientiere Programmierung in Java 2003 Ute Schmid (Vorlesung) Elmar Ludwig (Übung) FB Mathematik/Informatik, Universität Osnabrück Info B VL 8: Abstrakte
MehrAufgabenblatt Nr. 5 Generizität und TicTacToe
Aufgabenblatt Nr. 5 Generizität und TicTacToe 1 Generische Sortier-Methode 1.1 Aufgabe: Entwickeln einer generischen Sortiermethode für Objekte mit der Schnittstelle Comparable Ihnen ist aus der Vorlesung
MehrVIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden
VIII: Vererbung Unterklassen einer Klasse Vererbung von Methoden und Instanzvariablen Überschreiben von Methoden Vererbung als Realisierung einer is-a Beziehung. Informatik I VIII: Vererbung 259 Beispiel:
MehrKapitel 6. Vererbung
1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben
Mehr5.14 Generics. Xiaoyi Jiang Informatik I Grundlagen der Programmierung
Motivation für Generics: Containertypen speichern eine Anzahl von Elementen anderer Typen Wie definiert man die Containerklasse ArrayList? In der Definition könnte man als Elementtyp Object angeben maximale
MehrKapitel 6. Vererbung
Kapitel 6 Vererbung Vererbung 1 Ziele Das Vererbungsprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen
MehrGebundene Typparameter
Gebundene Typparameter interface StringHashable { String hashcode(); class StringHashMap { public void put (Key k, Value v) { String hash = k.hashcode();...... Objektorientierte
Mehr13. Tutorium zu Programmieren
13. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2009 by IPD Snelting
MehrProgrammieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik
Programmieren II Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz 9.6 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Abstrakte Klassen: Motivation Prinzip der Vererbung: Aus
MehrEinstieg in die Informatik mit Java
Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form
MehrGroße Übung Praktische Informatik 1
Große Übung Praktische Informatik 1 2005-12-08 fuessler@informatik.uni-mannheim.de http://www.informatik.uni-mannheim.de/pi4/people/fuessler 1: Announcements / Orga Weihnachtsklausur zählt als Übungsblatt,
MehrFH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0
9 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Wiederholung: Gerüstbeispiel Ein Duo, Quarto oder Sexto ist ein Gerüst. Die Klassen Duo, Quarto und Sexto sollen durch Vererbung
MehrEinführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen
Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1 Kapitel 11 Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 2 Ziele Implementierungen für
MehrKapitel 6. Vererbung
1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben
MehrTypumwandlungen bei Referenztypen
Typumwandlungen bei Referenztypen Genau wie es bei einfachen Typen Typumwandlungen gibt, gibt es auch bei Referenztypen Umwandlungen von einem Referenztypen in einen anderen Referenztypen, die wie bei
Mehr16. Dezember 2004 Dr. M. Schneider, P. Ziewer
Technische Universität München WS 2004/2005 Fakultät für Informatik Lösungsvorschläge zu Blatt 8 A. Berlea, M. Petter, 16. Dezember 2004 Dr. M. Schneider, P. Ziewer Übungen zu Einführung in die Informatik
MehrFortgeschrittene Programmiertechnik Klausur SS 2015 Angewandte Informatik Bachelor
Fortgeschrittene Programmiertechnik Klausur SS 2015 Angewandte Informatik Bachelor Name Matrikelnummer Aufgabe Punkte Aufgabe Punkte Zwischensumme 1 6 2 8 3 12 4 18 5 20 64 6 9 7 17 8 18 9 12 Summe 120
Mehr5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:
5. Abstrakte Klassen Beispiel 5. Abstrakte Klassen 5. Abstrakte Klassen Beispiel Beispiel (3) Angenommen, wir wollen die folgende Klassenhierarchie implementieren: Probleme des Implementierungsvorschlags:
MehrSchnittstellen implementieren am Beispiel Suchbaum
Motivation Informatik mit Java und BlueJ Schnittstellen implementieren am Beispiel Suchbaum von Bernhard Rosing Schreiben Sie eine Klasse Person, deren Instanzen in ein TreeSet (Suchbaum) eingefügt werden
MehrJava I Vorlesung 6 Referenz-Datentypen
Java I Vorlesung 6 Referenz-Datentypen 7.6.2004 Referenzen this, super und null Typkonvertierung von Referenztypen Finale Methoden und Klassen Datentypen in Java In Java gibt es zwei Arten von Datentypen:
MehrIn C und Java müssen Variablen und Methodenergebnisse durch Typangaben erläutert werden. Welche der folgenden Aussagen sind korrekt und welche nicht:
Typprüfung (Compiler / Laufzeit) In C und Java müssen Variablen und Methodenergebnisse durch Typangaben erläutert werden. Welche der folgenden Aussagen sind korrekt und welche nicht: 1) Der Compiler prüft
MehrProgrammieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik
Programmieren II Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz 9.6 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Abstrakte Klassen: Motivation Grundidee abstrakter Klassen:
Mehr1. 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 II.2.2 Methoden, Unterprogramme und Parameter - 1 - 2. Methoden
MehrVorlesung Informatik 2 Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (12 Hashverfahren: Verkettung der Überläufer) Prof. Dr. Susanne Albers Möglichkeiten der Kollisionsbehandlung Kollisionsbehandlung: Die Behandlung
MehrObjektorientierte Programmierung
Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Übungsblatt 5 Lösungsvorschlag Objektorientierte Programmierung 22. 05. 2006 Lösung 9 (SMS-Eingabe am
MehrTheorie zu Übung 8 Implementierung in Java
Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Theorie zu Übung 8 Implementierung in Java Klasse in Java Die Klasse wird durch das class-konzept
MehrProgrammieren 2 Java Überblick
Programmieren 2 Java Überblick 1 Klassen und Objekte 2 Vererbung 3 Schnittstellen 5 Exceptions 6 Funktionsbibliothek 7 Datenstrukturen und Algorithmen 8 Ein-/Ausgabe 9 Graphische Benutzeroberflächen 10
MehrJava - Programmierung - Objektorientierte Programmierung 1
Java - Programmierung - Objektorientierte Programmierung 1 // Klassen und Objekte public class KlaObj public static void main(string args []) Klasse1 a; a = new Klasse1("heute", 47); Klasse1 b = new Klasse1
MehrII.4.1 Unterklassen und Vererbung - 1 -
1. Grundelemente der Programmierung 2. Objekte, Klassen und Methoden 3. Rekursion und dynamische Datenstrukturen 4. Erweiterung von Klassen und fortgeschrittene Konzepte II.4.1 Unterklassen und Vererbung
MehrFH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Interfaces
10 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Wiederholung: Interfaces Aber: Mehrfachvererbung von Klassen ist in Java nicht erlaubt. Ausweg Definition eines Interfaces, z.b.:
MehrProseminar: C# und.net. 6. Vortag Generische Klassen. Sebastian Wolf
Proseminar: C# und.net 6. Vortag Generische Klassen Sebastian Wolf 1 Gliederung: 1. Einleitung 2. C# 2.0 3. Beschränkte Generizität 4. Generische Methoden 5. Überladene generische Klassen 6. Was passiert
Mehr5. Abstrakte Klassen
5. Abstrakte Klassen Beispiel 5. Abstrakte Klassen Angenommen, wir wollen die folgende Klassenhierarchie implementieren: Vogel Amsel Drossel Fink Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg,
MehrJava I Vorlesung Vererbung und Sichtbarkeit
Java I Vorlesung 4 Vererbung und Sichtbarkeit 17.5.2004 Vererbung Überladen, Überschreiben, Verstecken, Verschatten Zugriffskontrolle Statische Members Wiederholung: OOP Programme bestehen aus Klassen.
MehrProgrammiertechnik II Klausur WS 15/16 Angewandte Informatik Bachelor
Programmiertechnik II Klausur WS 15/16 Angewandte Informatik Bachelor Name Matrikelnummer Aufgabe Punkte Aufgabe Punkte Zwischensumme 1 6 2 10 3 12 4 12 5 14 54 6 12 7 20 8 17 9 17 Summe 120 Note Prof.
Mehr4. Algorithmen und Datenstrukturen I Grundlagen der Programmierung 1 (Java)
4. Algorithmen und Datenstrukturen I Grundlagen der Programmierung 1 (Java) Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 8./15. November 2005 Einordnung
MehrProbeklausur: Programmierung WS04/05
Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,
MehrÜbungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit
Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit Aufgabe : Die allgemeine Object-Liste Gegeben sei folgendes UML-Klassendiagramm: MyObjectList
Mehr6. Globalübung (zu Übungsblatt 8)
6. Globalübung (zu Übungsblatt 8) Inhalt: Klassenhierarchien Verdecken von Attributen Überschreiben von Methoden Codeanalyse Analyse von JAVA-Programmen Semestralklausur Klausurtermin: Mittwoch 11.01.2006
MehrProgrammieren in Java
Programmieren in Java Einführung in die objektorientierte Programmierung Teil 2 2 Übersicht der heutigen Inhalte Vererbung Abstrakte Klassen Erweitern von Klassen Überladen von Methoden Überschreiben von
MehrJavakurs zu Informatik I. Henning Heitkötter
Javakurs zu Informatik I Arrays vergleichen Implementieren Sie folgende Methode, die prüft, ob die Elemente der beiden Arrays an jeder Position übereinstimmen: public static boolean identisch(int[] a,
MehrVererbung und Polymorphie
Vererbung und Polymorphie Aufgabe 1: Vererbungsbaum entwerfen a) Finden Sie sinnvolle Beziehungen. Füllen Sie die letzten Spalten aus. Hinweis: Es kann nicht alles mit etwas anderem verbunden werden. Klasse
MehrEinstieg in die Informatik mit Java
Vorlesung vom 07.01.2008 Übersicht 1 Warm-Up zum Jahresbeginn 2 Anfangswertprobleme 3 Polygonzüge 4 Das Eulersche Polygonzugverfahren Warm-Up zum Jahresbeginn 1 Warm-Up zum Jahresbeginn 2 Anfangswertprobleme
MehrGenerische Typen in Java 1.5. Die Erweiterung der Java Language Specification
Generische Typen in Java 1.5 - Seminarvortrag 1/26 Generische Typen in Java 1.5 Die Erweiterung der Java Language Specification Seminarvortrag von Heiko Minning, mi3795 bei Prof. Dr. Uwe Schmidt, FH-Wedel
MehrInformatik II (D-ITET) Übungsstunde 6
Informatik II (D-ITET) Übungsstunde 6 simon.mayer@inf.ethz.ch Distributed Systems Group, ETH Zürich Ablauf Nachbesprechung Übung 5 Besprechung der Vorlesung Die neue Serie... Zeit zum Programmieren / für
MehrJava-Schulung Grundlagen
Java-Schulung Grundlagen Java 2 Standard Edition JDK 5 / 6 31.05.2008 Marcel Wieczorek 1 Themenübersicht Basiswissen Objektorientierung Datentypen Fehlerbehandlung Sonstiges Einführung Klassen, Strings
MehrJavakurs für Anfänger
Javakurs für Anfänger Einheit 09: Vererbung Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil Einführung in die Vererbung Motivation Das Schlüsselwort extends Einführendes
Mehr1. Abstrakte Klassen
1. Abstrakte Klassen Lernziele 1. Abstrakte Klassen Lernziele: Das Konzept abstrakter Klassen und abstrakter Methoden kennen und verstehen, in der Lage sein, abstrakte Klassen und Methoden in Java zu formulieren,
MehrÜbungsblatt 7. Thema: Sortieren, Objektorientierung
Informatik I WS 05/06 Prof. Dr. W. May Dipl.-Inform. Oliver Fritzen Dipl.-Inform. Christian Kubczak Übungsblatt 7 Ausgegeben am: Abgabe bis: 9.12.2005 6.1.2006 (Theorie) 6.1.2006 (Praktisch) Thema: Sortieren,
MehrJavakurs für Anfänger
Javakurs für Anfänger Einheit 10: Mehr zur Vererbung und abstrakte Klassen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Mehr zur Vererbung Methoden vererben und überschreiben
MehrTeil V. Generics und Kollektionen in Java
Teil V Generics und Überblick 1 Parametrisierbare Datenstrukturen in Java 2 Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 5 1 Parametrisierbare Datenstrukturen in Java Motivation für
MehrInstitut fu r Informatik
Technische Universita t Mu nchen Institut fu r Informatik Lehrstuhl fu r Bioinformatik Einfu hrung in die Programmierung fu r Bioinformatiker Prof. B. Rost, L. Richter Java, Objektorientierung 5.1 (U )
Mehr3 Objektorientierte Konzepte in Java
3 Objektorientierte Konzepte in Java 3.1 Klassendeklarationen Fragen an die Klassendeklaration: Wie heißt die Klasse? Wer darf auf die Klasse und ihre Attribute/Methoden zugreifen? Ist die Klasse eine
MehrJava für Computerlinguisten
Java für Computerlinguisten 2. Objektorientierte Programmierung Christian Scheible Institut für Maschinelle Sprachverarbeitung 28. Juli 2009 Christian Scheible Java für Computerlinguisten 28. Juli 2009
MehrOOP. Tagesprogramm. Dynamische Typinformation. Homogene Übersetzung der Generizität. Generizität und Typumwandlungen
1 2016-11-30 Tagesprogramm Dynamische Typinformation Homogene Übersetzung der Generizität Generizität und Typumwandlungen 2 2016-11-30 Dynamische Typinformation Dynamische Typabfragen Abfrage der Klasse
MehrAlgorithmen und Datenstrukturen II
Algorithmen und Datenstrukturen II Bioinformatics Resource Facility Center for Biotechnology Vorlesung Sommer 2011 Was heißt generic? In Java: Abstraktion über Typen Pons Wörterbuch - www.pons.de Einsatz
MehrPrinzipien Objektorientierter Programmierung
Prinzipien Objektorientierter Programmierung Valerian Wintner Inhaltsverzeichnis 1 Vorwort 1 2 Kapselung 1 3 Polymorphie 2 3.1 Dynamische Polymorphie...................... 2 3.2 Statische Polymorphie........................
MehrProgrammierkurs C++ Abstrakte Klassen und Methoden
Programmierkurs C++ Abstrakte Klassen und Methoden Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer #2 Vererbungshierarchie Obst double
MehrObjektorientierte Programmierung
Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Übungsblatt 2 Objektorientierte Programmierung 24. 04. 2006 Aufgabe 5 (Vererbung - Trace (Klausur FT
MehrInnere Klassen. Innere Klassen. Page 1. Lernziele: innere Klassen, statische geschachtelte Klassen, anonyme Klassen.
Innere Klassen Innere Klassen Lernziele: innere Klassen, statische geschachtelte Klassen, anonyme Klassen. Literatur: Java Tutorial & Arnold, K., Gosling, J. und Holmes,D... Page 1 Innere Klassen Der erste
MehrProf. Dr. Uwe Schmidt. 21.August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (BInf 211, BTInf 211, BMInf 211, BWInf 211)
Prof. Dr. Uwe Schmidt 21.August 2007 Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (BInf 211, BTInf 211, BMInf 211, BWInf 211) Zeit: 75 Minuten erlaubte Hilfsmittel: keine Bitte tragen
MehrJAVA 5 Generics. Proseminar Programmiersprachen Thema Java 5 Generics 1
JAVA 5 Generics Thema Java 5 Generics 1 Inhalt 1. Die Programmiersprache Java 2. Simple Generics 3. Das Beispielprogramm 4. Tieferer Einstieg in Generics 5. Arrays 6. Kritische Betrachtung von Generics
MehrKlausur Grundlagen der Programmierung
Klausur Grundlagen der Programmierung Aufgabenstellung: Martin Schultheiß Erreichte Punktzahl: von 60 Note: Allgemeine Hinweise: Schreiben Sie bitte Ihren Namen auf jedes der Blätter Zugelassene Hilfsmittel
MehrAlgorithmen und Programmierung II
Algorithmen und Programmierung II Vererbung Prof. Dr. Margarita Esponda SS 2012 1 Imperative Grundbestandteile Parameterübergabe String-Klasse Array-Klasse Konzepte objektorientierter Programmierung Vererbung
MehrDistributed Computing Group
JAVA TUTORIAL Distributed Computing Group Vernetzte Systeme - SS 06 Übersicht Warum Java? Interoperabilität grosse und gut dokumentierte Library weit verbreitet Syntax sehr nahe an C Erfahrung: Java wird
MehrEinstieg in die Informatik mit Java
1 / 24 Einstieg in die Informatik mit Java Variablenarten Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 24 1 Lokale Variablen 2 Lokale Variablen in Blocks 3 Lokale Variablen
MehrListing 1: Cowboy. Listing 2: Woody
Musterlösung Test 3 Aufgabe 1: Cowboy Listing 1: Cowboy class Cowboy { public String rope ( Cowboy that ) { if ( this == that ) { return exclaim (); 5 else { return " Caught "; public String exclaim ()
MehrKlassen mit Instanzmethoden
Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 3.12.07 G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07
MehrBeispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung
Beispiele für Ausdrücke Der imperative Kern Deklarationen mit Initialisierung Variablendeklarationen int i = 10; int j = 15; Beispiele für Ausdrücke i+j i++ i & j i j [] [static]
MehrObjektorientierte Programmierung
Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Zusatzaufgaben Lösungsvorschlag Objektorientierte Programmierung Lösung 22 (Java und UML-Klassendiagramm)
MehrEinführung in die Programmierung für NF. Vererbung
Einführung in die Programmierung für NF Vererbung Ziele Vererbungsprinzip der objektorien=erten Programmierung verstehen und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden
MehrBinärbäume. Prof. Dr. E. Ehses, 2014 1
Binärbäume Grundbegriffe der Graphentheorie Bäume und Ihre Anwendungen Unterschiedliche Darstellungen von Bäumen und Binärbäumen Binärbäume in Java Rekursive Traversierung von Binärbäumen Ebenenweise Traversierung
MehrProbeklausur: Programmierung WS04/05
Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,
Mehr1. Aufgabe (6 Punkte): Java-Programmierung (Arrays)
Der folgende Mitschrieb wurde von Prof. Alexa am 16.07.2008 als Probeklausur in der MPGI2 Vorlesung gezeigt und wurde auf http://www.basicinside.de/2008/node/94 veröffentlicht. Die Abschrift ist unter
MehrJava I Vorlesung Generics und Packages
Java I Vorlesung 9 Generics und Packages 21.6.2004 Generics Packages Qualifizierte Namen Mehr zu Zugriffsklassen Generics (Java 1.5) Die Klassen im Java Collections Framework sind mit dem Typ ihrer Elemente
MehrPrüfungszeuch im Fach Objektorientierte Programmierung WS 2000
Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000 A. Beschreibung der Projektarbeit. Welche Aufgabe haben Sie im Rahmen der Projektarbeit gelöst? 2. Mit welchen Tools bzw. Programmen (Anwendung,
Mehr