620.900 Propädeutikum zur Programmierung Andreas Bollin Institute für Informatik Systeme Universität Klagenfurt [email protected] Tel: 0463 / 2700 - 3516 Lösung der Aufgabe (1/1) ? Lösung Aufgabe 3: ? ISYS (ab) DezBin (?N; ?b1 ... ?bn) Propädeutikum zur Programmierung – Teil 3 Seite 2 von 27 1 Klassen und Objekte (1/5) ? class DezBin1 { DezBin in Java (Variante 1): public static void main (String [] args) { int n = 254; int p = 0; if (n == 0) System.out.println ("0"); ? ? else while (n > 0) { Wie sieht die Ausgabe aus? if (n % 2 == 1) System.out.println ("1*2^"+p); Was, wenn ich für n verschiedene Werte einsetzen will? else System.out.println ("0*2^"+p); p = p+1; n = n / 2; } } } ISYS (ab) Propädeutikum zur Programmierung – Teil 3 Seite 3 von 27 Klassen und Objekte (2/5) ? ? DezBin in Java (Variante 2): void Calc (int n) { int p = 0; if (n == 0) System.out.println ("0"); else while (n > 0) { Idee: Wiederverwenden von Code! if (n % 2 == 1) System.out.println ("1*2^"+p); else System.out.println ("0*2^"+p); p = p+1; n = n / 2; } } ISYS (ab) Propädeutikum zur Programmierung – Teil 3 Seite 4 von 27 2 Klassen und Objekte (3/5) ? ? DezBin in Java (Variante 2): class DezBin2 { static void Calc (int n) { ..... } Idee: Wiederverwenden von Code! public static void main (String [] args) { int n = 254; System.out.println (n + " = "); Calc (n); ? Calc ist eine Methode der Klasse DezBin2 ISYS (ab) n = 129; System.out.println (n + " = "); Calc (n); } } Propädeutikum zur Programmierung – Teil 3 Seite 5 von 27 Klassen und Objekte (4/5) ? Grundgedanke: Rationalisierung der Programmierung durch Verwenden von Objekten ? ? ? ? Kapseln von Daten und Funktionen in Klassen ? ? ? ISYS (ab) Idee erstmals in Simula-67 angewandt und in Smalltalk vollstandig ausgebaut. Wiederverwenden von Funktionen und Prozeduren (= Methoden). Wiederverwenden von Datentypen. Klassen beschreiben eine Menge von Objekten. Dadurch Wiederverwenden von ÄHNLICHEN Objekten. Aber auch Einbau von Sicherheitsmechanismen möglich. Propädeutikum zur Programmierung – Teil 3 Seite 6 von 27 3 Klassen und Objekte (5/5) ? Einige Beispiele: ? ? ? ? ? Klasse „Mathematik“ mit Methoden zum Berechnen des ggT, Primzahltest, ... Klasse Simulation mit Methoden zum Zeichnen von 2D und 3D-Objekten Klassen können nun Eigenschaften (Methoden, ...) von anderen Klassen weiterverwenden. Hat man eine Klasse (=Beschreibung, Muster), so kann man sich davon Objekte erzeugen. Objekte können dann auf andere Objekte zugreifen (weiterverwenden), mit ihnen über Nachrichten kommunizieren. ISYS (ab) Propädeutikum zur Programmierung – Teil 3 Seite 7 von 27 Klassen in Java (1/3) ? ? In Java gibt es bereits eine Vielzahl an (wiederverwendbaren, vordefinierter) Klassen. Diese werden in Packages gesammelt und über das import Kommando in die eigene Klasse übernommen: ? ? ? ? ISYS (ab) import import import import java.awt; sio; java.math; java.sql; Propädeutikum zur Programmierung – Teil 3 Seite 8 von 27 4 Klassen in Java (2/3) ? Typische Java-Programm: import java.lang.String; import sio; class Typisch { static void Methode1 (String [] s) { ... } static int Methode2 (char c) { ... } .... public static void main (String [] args) { ... } } ISYS (ab) Propädeutikum zur Programmierung – Teil 3 Seite 9 von 27 Klassen in Java (3/3) ? Java hat ein eindeutiges Namensschema für Klassen und Methoden: ? Package-Name.Klassenname.Methodenname import java.lang.String.substring() ? ? Namensschema spiegelt Directory-Struktur wider. Beim Importieren kann man auch abkürzen: import java.lang.*; ISYS (ab) Propädeutikum zur Programmierung – Teil 3 Seite 10 von 27 5 Ein-/Ausgabe in Java (1/2) ? Ein-/Ausgabe nicht Teil der Sprache, aber Teil der Java-Bibliothek ? ? ? Ein-/Ausgabe einer Zahl: ? ? ? ? int i = In.readInt () // Zahl lesen und in i ablegen Out.print(„Test“); // Ausgabe von Test Out.println(„Test“); // Ausgabe incl. CRLF Zugriff auf Dateien: ? ? ISYS (ab) Sehr komplex! Für ESOP: Einfache Klasse „In.java“ und „Out.java“ In.open(„abc.txt“); // Öffnen der Datei In.close() // Schließen der Datei Propädeutikum zur Programmierung – Teil 3 Seite 11 von 27 Ein-/Ausgabe in Java (2/2) ? Beispiel: class IOTest { public static void main (String [] args) { int i,j,sum; Out.println("Bitte 2 Zahlen eingeben:"); i = In.readInt(); j = In.readInt(); Out.open("abc.txt"); Out.println("Sum =" + (i+j)); Out.close(); } } ISYS (ab) Propädeutikum zur Programmierung – Teil 3 Seite 12 von 27 6 Beispiele (1/5) ? Bsp01: Terminieren alle 3 Schleifen? Schleife 1 Schleife 2 Schleife 3 i = 100; j = 27; i = 1; j = 20; int i = 1, j = 1; while (i != j ) { while (i+j < j) { do { i = i / 2; i = i + 2; i = i + 1; j = j / 3; j = j - 1; j = j + 1; } } ? } while (i < 200); Schleifen 1,3 terminieren, 2 nicht ausgef.! ISYS (ab) Propädeutikum zur Programmierung – Teil 3 Seite 20 von 27 Aufgaben (1/1) ? Bis 12.10.2001 (9 Uhr): ? ? Eintragen der email-Adresse in der Nora. Email an [email protected] mit: ? ? ? Bis 12.11.2001 (9 Uhr): ? Email an [email protected] mit: ? ? ISYS (ab) 3 Punkten: Was hat mit gefallen? 3 Punkten: Was würde ich besser/anders machen? 2-3 Punkte: Was wünsche ich mir an Inhalt für den Novemberblock? (Fragen zum ESOP-Stoff) Beide Aufgaben gehen in die Endnote ein! Propädeutikum zur Programmierung – Teil 3 Seite 25 von 27 7 Weitere Informationen (1/2) ? Literatur ? ? ? ? Sprechen Sie Java. Hanspeter Mössenböck. dpunkt.Verlag, 2001. Java in a Nutshell. David Flanagan. O‘Reilly, 1999. Lehrbuch der Programmierung mit Java. Klaus Echtle, Michael Goedicke. dpunkt.Verlag, 2000. Online-Dokumentation - Links ? ? ? ISYS (ab) www.boku.ac.at/javaeinf/jein.html java.sun.com/j2se/1.3/docs.html bscw-itec.uni-klu.ac.at Propädeutikum zur Programmierung – Teil 3 Seite 26 von 27 Weitere Informationen (2/2) ? Weitere interessante Links ? ? ? ? ? ISYS (ab) forum.java.sun.com Entwicklerplatform www.google.de Suchmaschine www.cetus-links.org Objektorientierung, Linkssammlung www.ifi.uni-klu.ac.at/Courses-Exams/courses/005 SW1 Homepage www.ifi.uni-klu.ac.at/Andreas.Bollin/private/lehre.html Weitere interessante Lehrveranstaltungen ? Propädeutikum zur Programmierung – Teil 3 Seite 27 von 27 8