Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 10. Vorlesung WS 2002/2003.

Ähnliche Präsentationen


Präsentation zum Thema: "Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 10. Vorlesung WS 2002/2003."—  Präsentation transkript:

1 Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 10. Vorlesung WS 2002/2003

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

3 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/033 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.

4 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/034 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); }

5 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/035 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

6 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/036 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

7 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/037 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;}}

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

9 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/039 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

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

11 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0311 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); } }}

12 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0312 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);

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

14 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0314 Ü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

15 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0315 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); }

16 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0316 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

17 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0317 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;} }

18 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0318 Listen und Mengen: vordefinierte Klassen AbstractCollection Set TreeSetHashSetLinkedListArrayList sortiert keine Duplikate AbstractMap Map TreeMapHashMap sortiert Einfache Container-DatenstrukturenAssoziative Datenstrukturen

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

20 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0320 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

21 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0321 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: k = 1 5 (x k - x k+1 )(y k + y k+1 ) F = 1 2 


Herunterladen ppt "Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 10. Vorlesung WS 2002/2003."

Ähnliche Präsentationen


Google-Anzeigen