1 / 21

Einführung in die Programmierung mit Java

Einführung in die Programmierung mit Java. 10. Vorlesung WS 2002/2003. Übersicht. Besprechung der Hausaufgabe Zugriffsspezifikationen (public, private,...) Polygon: umfangreicheres Beispiel Allgemeine Listen/Suchstrukturen. Hausaufgabe.

lyris
Download Presentation

Einführung in die Programmierung mit Java

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Einführung in die Programmierung mit Java 10. Vorlesung WS 2002/2003

  2. Übersicht • Besprechung der Hausaufgabe • Zugriffsspezifikationen (public, private,...) • Polygon: umfangreicheres Beispiel • Allgemeine Listen/Suchstrukturen G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

  3. Hausaufgabe • Schreibt ein Programm, das die Reihenfolge der Elemente in einer beliebigen LinkedList umdreht und das Ergebnis in einer neuen LinkedList speichert. Testet das Programm mit geeigneten Elementen. G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

  4. Lösung: import java.util.*; ..... LinkedList ll = new LinkedList(); // Liste mit Werten füllen: ll.add(new Person()); ll.add(new Professor()); //Neue Liste für umgekehrte Reihenfolge LinkedList lNeu = new LinkedList(); //Liste Durchlaufen und andere füllen: Iterator it = ll.iterator(); while(it.hasNext()) { Object o = it.next(); lNeu.addFirst(o); } G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

  5. Zugriffsspezifikationen I • Zugriffsspezifikation regeln welche Klassen, Attribute und Methoden wo verwendet werden können. • Schlüsselwörter public, protected, private • wird keine Zugriffsspezifikation angegeben, gilt der default-Modus friendly • Differenziert für Klassen, Methoden, und Attribute • Wichtiges Konzept der Objektorientierung: Geheimnisprinzip: Verbergen von Details der Implementierung, Zugriff nur über klar definierte Schnittstellen G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

  6. Zugriffsspezifikationen II • public: Zugriff von allen Klassen • protected: Zugriff von Klassen im selben Paket, auch Zugriff von Unterklassen in anderen Paketen • friendly oder keine Spezifikation: Zugriff von Klassen im selben Paket, Zugriff nicht von Unterklassen in anderen Paketen • private: Zugriff nur innerhalb derselben Klasse geheimer G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

  7. Beispiel: Klasse Punkt public class Punkt{ private double xKoordinate; //Attribut private double yKoordinate; //Attribut public Punkt(){ xKoordinate = 0.0; yKoordinate = 0.0;} public Punkt( double x, double y ){ xKoordinate = x; yKoordinate = y;} public double x_Koordinate() {return xKoordinate;} public double y_Koordinate() {return yKoordinate;} public boolean equals(Punkt p){ if( p.xKoordinate == xKoordinate & p.yKoordinate == yKoordinate) return true; else return false;} public double abstand(Punkt p){ double a = Math.sqrt(Math.pow(xKoordinate - p.xKoordinate,2.0) + Math.pow(yKoordinate - p.yKoordinate,2.0)); return a;}} G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

  8. Umfangreicheres Beispiel: Polygone p1 p2 p5 p3 p4 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

  9. Umfangreicheres Beispiel: Polygone • Anwendung von Listen • Anwendung von Zugriffsspezifikationen • Kapselung • Funktionalität von Polygonen: • Hinzufügen eines Punkts • Berechnung des Umrings • Berechnung des Flächeninhalts G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

  10. Polygon: UML-Diagramm Punkt Polygon 1 hat_im_Umring 3..* -x: double-y: double {ordered} G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

  11. Klasse "Polygon": Attribute und Konstruktoren public class Polygon{ public LinkedList punktliste; public Polygon(Punkt p1, Punkt p2, Punkt p3) { punktliste = new LinkedList(); punktliste.add(p1); punktliste.add(p2); punktliste.add(p3); } public Polygon(double [] x_Koord, double [] y_Koord) { punktliste = new LinkedList(); for(int i = 0 ; i < x_Koord.length; i = i+1) { Punkt p = new Punkt(x_Koord[i],y_Koord[i]); punktliste.add(p); } }} G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

  12. Klasse "Polygon": Benutzung //von Außen: .... Punkt p1 = new Punkt(1,1); Punkt p2 = new Punkt(1,2); Punkt p3 = new Punkt(2,1); Polygon poly1 = new Polygon(p1, p2, p3); double [] xArray = {1,1,3,2}; double [] yArray = {1,2,3,1}; Polygon poly2 = new Polygon(xArray, yArray); G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

  13. Berechnung des Umfangs: Idee p1 p1.abstand(p2) p5.abstand(p1) p2 p2.abstand(p3) p5 p3 p4.abstand(p5) p3.abstand(p4) p4 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

  14. Übungsaufgabe Schreibt ein Programm (in einer "main"), das den Umfang eines Polygons berechnet. Hinweise: • Klasse Polygon:public class Polygon{ public LinkedList punktliste; ...} • nutzt die Methode "abstand" von "Punkt" • Eine LinkedList kann mehrere Iteratoren haben G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

  15. Berechnung des Umfangs public static void main(String args[]) { Polygon poly = new Polygon(new Punkt(1,1), new Punkt(1,2), new Punkt(2,1)); double umfang = 0; Iterator ersterIt = poly.punktliste.iterator(); Iterator zweiterIt = poly.punktliste.iterator(); zweiterIt.next(); Punkt ersterPunkt; Punkt zweiterPunkt; while(zweiterIt.hasNext()) { ersterPunkt = (Punkt) ersterIt.next(); zweiterPunkt = (Punkt) zweiterIt.next(); umfang = umfang + ersterPunkt.abstand(zweiterPunkt); } ersterPunkt = (Punkt) poly.punktliste.getLast(); zweiterPunkt = (Punkt) poly.punktliste.getFirst(); umfang = umfang + ersterPunkt.abstand(zweiterPunkt); System.out.println(umfang); } G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

  16. Umfang: Anmerkungen • Berechnung des Umfangs (Fläche,..) ist einfacher, wenn erster Punkt in Liste am Ende wiederholt wird • Dann ist aber Einfügen von Punkten (am Ende oder Anfang) schwieriger (Konsistenz, erster == letzter) • Wiederholung des ersten Punkts am Ende ist Implementierungsdetail (wie Frage Array oder Liste) • verbergen dieser Details vor Nutzer des Polygons • Atttribut punktliste nicht public • Umfang als Methode • klar definierte, nutzerfreundliche Schnittstelle zu Polygon • Kapselung G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

  17. Klasse "Polygon": Attribute und Konstruktoren public class Polygon{ protected LinkedList punktliste; public Polygon(Punkt p1, Punkt p2, Punkt p3){...} public Polygon(double [] x_Koord, double [] y_Koord) {...} public double umfang() { double umfang = 0; Iterator ersterIt = punktliste.iterator(); Iterator zweiterIt = punktliste.iterator(); zweiterIt.next(); Punkt ersterPt, zweiterPt; while(zweiterIt.hasNext()) { ersterPt = (Punkt) ersterIt.next(); zweiterPt = (Punkt) zweiterIt.next(); umfang = umfang + ersterPt.abstand(zweiterPt); } ersterPt = (Punkt) punktliste.getLast(); zweiterPt = (Punkt) punktliste.getFirst(); umfang = umfang + ersterPt.abstand(zweiterPt); return umfang;} } G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

  18. AbstractMap Map TreeMap HashMap sortiert Listen und Mengen: vordefinierte Klassen Einfache Container-Datenstrukturen Assoziative Datenstrukturen AbstractCollection keine Duplikate Set LinkedList ArrayList TreeSet HashSet sortiert G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

  19. Klasse Einfügen/Löschen Suchen Suchen mit Key LinkedList/ArrayList const. O(n) TreeSet O(log n) O(log n) HashSet const. const. (mittel) TreeMap O(log n) O(log n) HashMap const. const.(mittel) Laufzeiten / Komplexität G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

  20. HashMaps • Speichern Objekte (Klasse Object) in Struktur • Zuordnung eines (Such-)Schlüssel zu Objekt(Key-Value-Pair) • effizientes Suchen über Schlüssel • Methoden: • put(Object Key, Object value) //Einfügen • Object get(Object Key) //Suchen • void clear() • int size() • Weitere Methoden: JavaDoc G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

  21. 5 1 S F = (xk - xk+1)(yk + yk+1) 2 k = 1 Hausaufgabe Schreibt eine Methode der Klasse Polygon, die den Flächeninhalt eines Polygons berechnet. Hinweise: • Orientiert euch an der Methode "Umfang" • Formel zur Berechnung des Flächeninhalts (Gaussche Flächenformel) in Diskreter Mathe, Vorlesung 2: G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

More Related