Software-Entwicklung

Größe: px
Ab Seite anzeigen:

Download "Software-Entwicklung"

Transkript

1 SWE-0 Software-Entwicklung Prof. Dr. Uwe Kastens 2001 bei Prof. Dr. Uwe Kastens Vorlesung Software-Entwicklung / Folie 00

2 Ziele der Vorlesung SWE-1 Die Studierenden sollen die Programmentwicklung in Java von Grund auf erlernen. lernen, Sprachkonstrukte sinnvoll und mit Verständnis anzuwenden. grundlegende Konzepte der objektorientierten Programmierung verstehen und anzuwenden lernen. Objektorientierte Methoden haben zentrale Bedeutung im Software- Entwurf und in der Software-Entwicklung. lernen, Software aus objektorientierten Bibliotheken wiederzuverwenden. eigene praktische Erfahrungen in der Entwicklung von Java-Programmen erwerben. Darauf bauen größere praktische Entwicklungen in Java oder anderen Programmiersprachen während des Studiums und danach auf. Vorlesung Software-Entwicklung / Folie 01 Ziele bewußt machen Begründungen dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt Inhalt Inhaltsverzeichnis SWE-2, SWE-3 Haben Sie für die Vorlesung andere als die genannten Ziele? Welche?

3 Inhalt SWE-2 Nr. d. Vorl. Inhalt Abschnitte in Java lernen, 3. Auflage 1 Einführung Java Programme und ihre Ausführung Grundbegriffe, Ausgabe 2.2, Variable und Zuweisungen Klassen und Objekte, Packages Datentypen, Schleifen 3.1, Methoden, Parameter 3.3, Rekursion 9 Entwurf von Klassen 2.3, 5.1, Eingabe 4.1, Ausnahmebehandlung 4.4, Ablaufstrukturen bei Prof. Dr. Uwe Kastens 13 Arrays 6.1, Suchen und Sortieren, Wörterbücher 6.4, Zeichenreihen 7.1, Formate 7.4, 7.5 Überblick über den Inhalt bekommen Struktur erläutern Können Sie die Themen den Zielen (SWE-1) zuordnen? Vorlesung Software-Entwicklung / Folie 02

4 SWE-3 Inhalt (Fortsetzung) Nr. d. Vorl. Inhalt Abschnitte in Java lernen, 3. Auflage 17 Zugriffsrechte in Klassen 5.1, Ein objektorientiertes Programm 8.1, Listen 8.3, Abstraktion durch Interfaces 9.1, Vererbung Abstrakte Methoden und Klassen Anwendungen der Abstraktionen Graphische Benutzungsschnittstellen (GUI) 10.1, Anordnen von GUI-Komponenten Ereignisbehandlung 11.1, Anwendungen von Ereignissen Zusammenfassung 2001 bei Prof. Dr. Uwe Kastens Vorlesung Software-Entwicklung / Folie 03 siehe SWE-2

5 Inhalt von SWE II SWE-3a Nr. d. Vorl. Inhalt Abschnitte in Java lernen, 3. Auflage 1 Applets 12.1, Java-Programme in Applets umsetzen 12.1, Parallele Prozesse, Grundbegriffe, 13.1, 13.2 Threads in Java 4 Unabhängige parallele Prozesse, Anwendungen 13.1, Programmiertechniken für Threads Monitore, Synchronisation gegenseitiger Ausschluss Bedingungssynchronisation im Monitor 8 Programmiertechniken 9 Varianten der Ressource-Vergabe 10 Zusammenfassung 11 Klausur 2001 bei Prof. Dr. Uwe Kastens Vorschau auf die Fortsetzung in SWE II Vorlesung Software-Entwicklung / Folie 03a

6 Literaturhinweise SWE-4 Elektronisches Skript zur Vorlesung: U. Kastens: Vorlesung SWE, 1998/99 (aktualisiert), fast ein Textbuch zur Vorlesung, mit dem Vorlesungsmaterial und JDK auf CD: J. M. Bishop: Java lernen, Addison-Wesley, 3. Auflage, 2001 das englische Original dazu - ohne CD: J. M. Bishop: Java Gently - Programming Principles Explained, Addison-Wesley, rd Edition (Java 2) zu allgemeinen Grundlagen der Programmiersprachen U. Kastens: Vorlesung Grundlagen der Programmiersprachen, Skript, D. A. Watt: Programmiersprachen - Konzepte und Paradigmen, Hanser, bei Prof. Dr. Uwe Kastens eine Einführung in Java von den Autoren der Sprache: Arnold, Ken / Gosling, James: The Java programming language, Addison-Wesley, Arnold, Ken / Gosling, James: Die Programmiersprache Java TM, 2. Aufl. Addison-Wesley, 1996 Hinweise auf weiteres Material im SWE-Skript im WWW Literatur zur Vorlesung kennenlernen Erläuterungen dazu Suchen Sie das Textbuch im Semesterapparat. Verfolgen Sie die beiden URLs. Vorlesung Software-Entwicklung / Folie 04

7 Elektronisches Skript: Home Page SWE-5 Das elektronische Skript kennenlernen. Erläuterungen dazu Suchen Sie das Skript im WWW. Vorlesung Software-Entwicklung / Folie 05

8 Elektronisches Skript: Organisationsseite SWE-6 Organisation der Vorlesung kennenlernen Organisatorisches erläutern Vorlesung Software-Entwicklung / Folie 06

9 Elektronisches Skript: Lageplan SWE-7 Struktur des elektronischen Skriptes überblicken Erläuterungen dazu Navigieren Sie im elektronischen Skript. Vorlesung Software-Entwicklung / Folie 07

10 Elektronisches Skript: Folie mit Arbeitshinweisen SWE-8 Arbeitshinweise zu den Folien kennenlernen Erläuterungen dazu Vorlesung Software-Entwicklung / Folie 08

11 SWE-9 Entstehungszeit und Verwandtschaft wichtiger Programmiersprachen 1950 Fortran Lisp 1960 Cobol Algol PL/1 Pascal Ada Algol 68 C Simula Smalltalk ML Prolog C++ Miranda Eiffel 1990 Java imperative Sprachen objektorientierte Sprachen nach D. A. Watt: Programmiersprachen, Hanser, 1996; Seite 5 Haskell funktionale Sprachen logische Sprache Vorlesung Software-Entwicklung / Folie 09 Grober Überblick zur Entwicklungsgeschichte von Programmiersprachen Erläuterungen dazu Text dazu im Buch von D. A. Watt In welcher Weise können Programmiersprachen miteinander verwandt sein?

12 Klassifikation von Programmiermodellen SWE-9a imperativ (prozedural): Variable, Zuweisungen, Ablaufstrukturen z. B. Pascal, C, Ada, Modula, FORTRAN, BASIC, COBOL objektorientiert: abstrakte Datentypen (ADTn), Klassen, Objekte, Vererbung z. B. Simula, Smalltalk, C++, Java funktional: rekursive Funktionen (höherer Ordnung) z. B. LISP, Scheme, ML, Miranda, Haskell logisch (prädikativ): Prädikate, Regeln, Termersetzung z. B. Prolog Vorlesung Software-Entwicklung / Folie 09a Grobe Charakteristika verschiedener Programmiermodelle und Sprachen dazu Erläuterungen dazu Suchen Sie die entsprechende Folie im Material der Vorlesung "Grundlagen der Programmiersprachen".

13 Warum mit objektorientierter Programmierung beginnen? Objektorientierter Programmentwurf ist nahe an der Problemanalyse und der Modellierung: Klassen und Objekte wie im Entity-Relationship-Modell, in der Software-Technik: objektorientierte Analyse, objektorientierter Entwurf Professionelle Software wird heute und in absehbarer Zukunft objektorientiert entwickelt. Objektorientierte Programmiersprachen haben mächtige Konzepte zur Abstraktion und Strukturierung: Klassen als abstrakte Datentypen, Vererbung zur Typspezialisierung und zur Schnittstellendefinition. Objektorientierte Bibliotheken mit wiederverwendbaren Komponenten Gut geplante Wiederverwendung steigert Produktivität bei der Software-Entwicklung verbessert die Software-Qualität vereinfacht die Wartung SWE-10 Beziehungen zu Konzepten der Software-Technik sehen Erläuterungen dazu Vorlesung Software-Entwicklung / Folie 10 Verschaffen Sie sich Inhaltsverzeichnisse der Vorlesungen Modellierung und Techniken des Software-Entwurfs. Erkennen Sie Querbezüge zu dieser Vorlesung?

14 Warum Java als erste Programmiersprache? SWE-11 konsequent objektorientiert, klassenbasiert statisch typisiert: Übersetzer prüft typkorrekte Benutzung der Sprachkonstrukte (wie z. B. in Pascal, C++) Java ist weit verbreitet und leicht verfügbar; Java-Programme sind portabel. Übersetzung in die Zwischensprache (Java Bytecode) einer abstrakten Maschine (JVM: Java Virtual Machine). Sie interpretiert das Programm (wie in Smalltalk). Das ist portabel aber weniger effizient als die Ausführung von Maschinen-Code. Umfangreiche Klassenbibliotheken (API: Application Programming Interface). Programmierung für das WWW (Applets, Netzzugriffe, Laden von Modulen) Aber: Java ist noch jung und verbreitet sich stürmisch. Zukünftig notwendige Sprachänderungen können teuer werden. Vorlesung Software-Entwicklung / Folie 11 Auf Java neugierig werden Erläuterungen dazu Haben Sie schon in einer anderen Sprache programmiert? Hat sie auch einige der hier genannten Eigenschaften von Java?

15 Beispiel: Welcome SWE-12 class Welcome { /* Welcome to Java! Program by J M Bishop Dec 96 Illustrates a simple program displaying a message. */ public static void main (String [] args) { System.out.println( Welcome to Java ); Figure 2.1 Welcome to Java! - Rahmen - zweizeiliger Kommentar - Hauptprogramm - Aufruf einer Ausgabefunktion Vorlesung Software-Entwicklung / Folie 12 Das obligatorische Einstiegsbeispiel sehen Erläuterungen dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt 2.1 Führen Sie das Programm aus und modifizieren Sie die Ausgabe.

16 import java.awt.*; import java.awt.event.*; Beispiel: Olympische Ringe class Rings extends Frame { /* Ring drawing program J M Bishop Dec 1997 illustrates colour and simple graphic output */ public Rings () { settitle ("Olympic Rings"); public static void main (String [] args) { // Create a graphics frame Frame f = new Rings(); // Enable the window to be closed f.addwindowlistener (new WindowAdapter () { public void windowclosing(windowevent e) { System.exit(0); ); // Set the frame s size and show the drawing // outlined in the paint method. f.setsize(300,300); f.setvisible(true); // Rings SWE-13 public void paint (Graphics g) { // Draw five interlocking rings // of different colours. g.setcolor(color.red); g.drawoval(90,80,30,30); g.setcolor(color.blue); g.drawoval(115,80,30,30); g.setcolor(color.green); g.drawoval(140,80,30,30); g.setcolor(color.yellow); g.drawoval(165,80,30,30); g.setcolor(color.black); g.drawoval(190,80,30,30); // Label the drawing g.drawstring ("Olympic Rings", 120, 40); Die Funktion paint ist der zentrale Teil des Programms, der die Ausgabe produziert. Der Rest ist der Rahmen, und dient zum Auf- und Abbauen eines Fensters. Ein Einstiegsbeispiel zur Graphik sehen. Erläuterungen dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt 2.1 Vorlesung Software-Entwicklung / Folie 13

17 Beispiel: Olympische Ringe, Ausgabe SWE-14 So ist es nicht olympisch! Vorlesung Software-Entwicklung / Folie 14 Ausgabe zu B-13 Plazieren Sie die Ringe olympisch.

18 Werkzeuge zur Programmentwicklung SWE-15 Editor integrierte Entwicklungsumgebung Bibliothek Modulschnittstellen Quellmodul (Source) vorübersetzte Module Übersetzer (Compiler) Zielmodul (Code) Testhilfe (Debugger) Binder (Linker) ausführbares Programm Eingabe Ausgabe Eingabe Rechner mit Systemsoftware Ausgabe Vom Programm zur Ausführung Aufgaben der Werkzeuge erläutern Judy Bishop: Java lernen, 3.Aufl., Abschnitt 1.2 GdP-11 Warum ist separate Übersetzung sinnvoll? Vorlesung Software-Entwicklung / Folie 15

19 Ausführung von Java-Programmen SWE-16 Editor Java- Übersetzer Quellmodul m1.java m2.class Zielmodule in Java-Bytecode m1.class m3.class Java Modulbibliotheken auf Rechnern am Internet Internet Eingabe Browser Java-Bytecode Interpretierer Ausgabe Java-Bytecode ist maschinenunabhängig und wird von einem Interpretierer-Programm ausgeführt Maschinenunabhängigkeit durch Interpretation Vorlesung Software-Entwicklung / Folie 16 Java Bytecode, abstrakte Maschine, Rolle des Internet erläutern Judy Bishop: Java lernen, 3.Aufl., Abschnitt 1.1, 1.2 Welche NEUEN Werkzeuge braucht man, damit Java auf einem neuen Rechnertyp läuft? Vergleichen Sie mit dem Szenario auf SWE-15 z. B. für C++.

20 Variable und Zuweisung SWE-17 Eine Variable ist ein Name im Programm für eine Stelle im Speicher, die einen Wert enthält. Eine Zuweisung bestimmt oder ändert den Wert einer Variablen. Eine Deklaration bindet Namen an neue Variable. Sie können nur Werte des angegebenen Typs aufnehmen. Die Bindung gilt nur in einem bestimmten Bereich des Programms (Gültigkeitsbereich). Die Variablen existieren im Speicher nur für eine bestimmte Zeit (Lebensdauer). Formen von Variablendeklarationen: Typ Name; Typ Name1, Name2,...; Typ Name = Initialwert; int year; double cdegree, fdegree; int msgno = 1; Zuweisungen: Variable = Ausdruck; cdegree = 10.0; fdegree = cdegree * 9 / ; cdegree = cdegree + 10; Variable und Zuweisungen sind das Grundprinzip imperativer Sprachen: Der Programmzustand wird bestimmt durch eine Menge von Variablen mit ihren Werten. Zuweisungen im Programmablauf verändern den Zustand. Variable und Zuweisungen als imperatives Grundprinzip Variable und Deklarationen erläutern Rollen von Variablen in Zuweisungen Judy Bishop: Java lernen, 3.Aufl., Abschnitt 2.5 GdP-34 Vorlesung Software-Entwicklung / Folie 17 Geben Sie eine Folge von Zuweisungen an, aus der man eine Zuweisung streichen kann, ohne die Gesamtwirkung zu ändern. Welche Bedingung muß dafür gelten? Welche Rolle haben initialisierte Variable, an die nicht zugewiesen werden darf?

21 Klassen und Objekte SWE-18 Eine Klasse definiert gleichartige Objekte mit ihren Datenelementen (Variable) und Operationen (Methoden) in einer geschlossenen Programmstruktur. Beispiel: Klassenname Variable Methoden Konstruktormethode Circles x y radius getx () gety () getradius () move (int,int) grow (double) Circles (int,int,double) 3 Objekte der Klasse Circles: 2001 bei Prof. Dr. Uwe Kastens :Circles x = 0 y = 0 radius = 1.0 :Circles x = 1 y = 1 radius = 0.5 :Circles x = 10 y = 20 radius = Vorlesung Software-Entwicklung / Folie 18 Grundbegriffe zu Klassen verstehen Erläuterung der Begriffe Judy Bishop: Java lernen, 3.Aufl., Abschnitt 2.3 Was haben die drei Objekte gemeinsam und worin unterscheiden sie sich?

22 Objekte einer Klasse bilden SWE-19 Objekte werden durch die new-operation zu einer Klasse gebildet: new Circles (0, 0, 1.0) new-operation führt zum Aufruf der Konstruktormethode. Die Parameter legen initiale Eigenschaften des Objektes fest. Das Ergebnis ist eine Objektreferenz (Identität des Objektes). Sie kann z. B. an eine Variable passenden Typs zugewiesen werden: Circles unit = new Circles (0, 0, 1.0); Circles small = new Circles (1, 1, 0.5); Circles big = new Circles (10, 20, 100.0); Alle Objekte sind verschieden, d. h. sie haben verschiedene Objektreferenzen. Das gilt auch, falls die Werte ihrer Objektvariablen gleich sind. Ein Klassenname wird auch als Typangabe (z. B. Variablendeklarationen) verwendet, er steht dann für den Typ der Referenzen von Objekten der Klasse. Objektmethoden werden für ein bestimmtes Objekt aufgerufen. Sie benutzen dessen Objektvariablen und können sie auch verändern: big.getradius() liefert den radius-wert des Objektes in der Variablen big small.move(1,2); ändert diekoordinaten des Objektes in der Variablen small Vorlesung Software-Entwicklung / Folie 19 Den grundlegenden Objektbegriff verstehen Erläuterungen zur Konstruktion und zur Identität von Objekten Judy Bishop: Java lernen, 3.Aufl., Abschnitt 2.3 Können 2 Objekte durch Zustandsänderungen gleich werden?

23 Klassenvariable, Klassenmethoden SWE-20 Klassenvariable und Klassenmethoden gehören inhaltlich zur Klasse insgesamt. Sie beziehen sich nicht auf ein spezielles Objekt. Sie werden über den Klassennamen zugegriffen: Circles.noOfObjects Eine Klassenvariable existiert nur einmal pro Klasse - nicht für jedes Objekt. Eine Klassenmethode greift nicht auf Objektvariable zu! Klassenvariable und -methoden werden durch static gekennzeichnet. Beispiel: Anzahl der zur Klasse Circles erzeugten Objekte zählen: class Circles {... Circles (int ix, int iy, double ir) { noofcircles = noofcircles + 1;... Konstruktor static int getcounter () { return noofcircles; private static int noofcircles = 0; private int x, y; double radius; Klassenmethode Klassenvariable Objektvariable Vorlesung Software-Entwicklung / Folie 20 Unterscheiden Methoden und Variablen zu Objekten und zur Klasse Erläuterungen am Beispiel der Klasse Circles Judy Bishop: Java lernen, 3.Aufl., Abschnitt 2.3 Geben Sie weitere Beispiele für Klassen- und Objektvariablen bzw. -methoden an.

24 Begriffe zur Struktur objektorientierter Programme SWE-21 Programm Klassen besteht aus besteht aus sind Datenelemente (Variable) fields Klassenvariable Elemente members sind sind Methoden Konstruktor Klassenmethoden Objektvariable Objektmethoden sind Typ haben Parameter (Variable) ohne Ergebnis besteht aus lokale Variable mit Anweisungen statements Begriffe einprägen und präzise verwenden Erläuterungen dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt 2.2 Vorlesung Software-Entwicklung / Folie 21

25 Einfache Ausgabe SWE-22 Klassen in vordefinierten Standardbibliotheken machen einfache Ausgabefunktionen verfügbar: class System class PrintStream {... {... static PrintStream out; void print (String s) {... static InputStream in; void println (String s) { void println () { Einfache Aufrufe von Ausgabefunktionen mit String-Objekten als Parameter: System.out.println ("Welcome to Java"); System.out.println ("Welcome " + "to " + "Java"); System.out.println ("Die Gesamtnote ist " + gesamtnote); System.out.println (); String ist eine vordefinierte Klasse für Zeichenreihen als Datentyp mit Operationen darauf. String-Literale: z. B. "Welcome to Java" Der Operator + konkateniert zwei String-Objekte. Operanden von Grundtypen (z. B. int) werden dazu in String-Objekte konvertiert. Einfache Ausgabefunktionen kennenlernen Erläuterungen dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt 2.4 Tabellen drucken Vorlesung Software-Entwicklung / Folie 22

26 Benutzung von Klassen aus Bibliotheken SEW-23 Package: Menge thematisch zusammengehöriger Klassen- (und Interface-) Deklarationen Bibliothek oder Teil davon Gültigkeitsgrenze für Klassennamen, falls nicht als public public class Date {... // auch außerhalb des Package gültig class Intern {... // nur innerhalb des Package gültig Einige Packages, die zu jeder Java-Implementierung gehören: lang grundlegende Klassen zur Sprache Java util nützliche Datenstrukturen mit ihren Operationen io Ein- und Ausgabe text spezielle Formatierung awt Graphik und graphische Benutzungsoberflächen (GUI) awt.event Ereignisbehandlung applet Java programme im WWW net Operationen in Netzwerken Benutzung von Klassen aus Packages: import java.util.date; import java.util.*; // nur die Klasse Date // beliebige Klassen aus java.util Vorlesung Software-Entwicklung / Folie 23 Standardbibliotheken nutzen Erläuterungen dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt 2.3 Suchen Sie ein Verzeichnis der Standardbibliotheken und ihrer Klassen (siehe Internet Ressourcen im Vorlesungsmaterial).

27 Datentypen SWE-24 Ein Datentyp bestimmt eine Wertemenge und Operationen darauf. Datentypen in Java: numerische Werte: logische Werte: Zeichen: Objektreferenzen: byte, short, int, long, float, double boolean char Name einer Klasse (oder eines Interface) Eine Variable hat einen Typ, d. h. sie kann Werte aus der Wertemenge aufnehmen. Ein Ausdruck hat einen Typ, d. h. seine Auswertung liefert einen Wert aus der Wertemenge. Literale: Notation für Werte im Programmtext, z. B. 127 '?' null Operatoren verknüpfen Werte bestimmter Typen, z. B. Operator Signaturen Typen der Operanden -> Ergebnistyp + int int -> int long long -> long float float -> float double double -> double String String -> String Der Operator + ist hier mit fünf Bedeutungen überladen; sie werden an den Operandentypen unterschieden. Typbegriff für Java kennenlernen Übersicht zu den Typen in Java Judy Bishop: Java lernen, 3.Aufl., Abschnitt 3.1 Gibt es verschiedene Literale für denselben Wert? Gibt es Literale für Objektreferenzen? Vorlesung Software-Entwicklung / Folie 24

28 Logische Werte SWE-25 Typname: Werte: boolean true false Vergleichsoperatoren liefern Werte vom Typ boolean: ==!= > < >= <= logische Operatoren verknüpfen Werte vom Typ boolean: und oder ausschließendes oder nicht & ^! Beispiele: boolean istrentner, istjugendlich, hatarbeit, freiereintritt; int alter;... istrentner = alter >= 65; freiereintritt = (istrentner istjugendlich) &!hatarbeit; Operatoren und, oder mit Kurzauswertung, d. h. wenn der linke Operand das Ergebnis bestimmt, wird der rechte nicht mehr ausgewertet: && Beispiel: anzahl!= 0 && summe / anzahl > 10 Ausgabe logischer Werte: System.out.println ("It is " + hatarbeit + " that he is employed"); It is true that he is employed Umgang mit logischen Werten Erläuterungen und weitere Beispiele Judy Bishop: Java lernen, 3.Aufl., Abschnitt 3.6 Warum ist der korrekte Ausdruck a == true unsinnig? Was bedeutet Kurzauswertung? In welchen Fällen ist Kurzauswertung nützlich? Vorlesung Software-Entwicklung / Folie 25

29 Zeichen SWE-26 Typname: char Wertemenge: einzelne Zeichen aus einem Zeichensatz (Unicode) Literale: 'a' '?' Der Zeichensatz enthält Buchstaben, Ziffern, Sonderzeichen, z. B. 'B' '6' '#' ' ' nicht druckbare Zeichen mit spezieller Bedeutung, z. B. '\b' '\t' '\n' und viele Zeichen aus nicht-lateinischen Schriften, z. B. ' ' '\u2297' für Der Zeichensatz ist geordnet, z. B. 'a' < 'b' Werte vom Typ char nicht verwechseln mit Zeichenreihen! Das sind Objekte der Klasse String. Es gibt Literale für String-Objekte, z. B. "Welcome" "#" Vorlesung Software-Entwicklung / Folie 26 Zeichen als Datentyp Erläuterungen dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt 5.4

30 Numerische Typen Typname Speicher (Bits) kleinster Wert größter Wert byte short int long 64 < > float 32 < > double 64 < > SWE-27 Literale: int: xff long: 21L float: 3.14f 6.022e+23f double: e137 1e-9d numerische Operatoren: + - * / % (modulo) - (unär) Signaturen: int int -> int float float -> float long long -> long double double -> double Konversion (allgemein, nicht nur numerisch): Wandlung eines Wertes eines Typs in einen entsprechenden Wert eines anderen Typs. implizite Konversion, wenn nötig: byte -> short -> int -> long -> float -> double explizite Konversion durch Type Cast: float kilograms; double estimate = 45; kilograms = (float) (estimate * 1.2); Vorlesung Software-Entwicklung / Folie 27 Numerische Typen und Konversion kennenlernen Erläuterungen und Beispiele dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt 3.1 Welche Konversionen sind unzulässig? Welche Konversionen können bewirken, daß der Wert ungenauer dargestellt wird?

31 Zahldarstellungen SWE-28 ganze Zahlen dargestellt im Zweierkomplement, z. B. mit N=4 Bits: N-1 2 N-1-1 Eine Zahl b n b n-1...b 1 b 0 hat den Wert b n *(-2 n ) + b n-1 *2 n b 1 *2 + b 0 Addition im Zweierkomplement wie Addition von Binärzahlen Negation im Zweierkomplement: bitweises Komplement + 1 Subtraktion durch Addition des negierten Wertes Gleitpunktzahlen dargestellt durch Vorzeichen v, Exponent e, Mantisse m Der Wert ist v*m*2 e float: 8 Bits für e, 23 Bits für m; double: 11 Bits für e 52 Bits für m Zahldardstellungen kennenlernen Rechenbeispiele Wieviele verschiedene float-werte sind darstellbar? Vorlesung Software-Entwicklung / Folie 28

32 Iteration mit for-schleifen SWE-29 for-schleifen dienen zur Formulierung iterativer Berechnungen. Sie haben die Form: for ( Initialisierung; Bedingung; Fortschaltung) { Schleifenrumpf Initialisierung: Deklaration(en) oder Zuweisung(en) für Schleifenvariable; Deklarationen sind in der ganzen Schleife gültig. Bedingung: logischer Ausdruck, Vorbedingung für die (erneute) Ausführung des Schleifenrumpfes Fortschaltung: Anweisungen, die die Werte der Schleifenvariable(n) ändern Ausführung: Initialisierung Bedingung Schleifenrumpf Fortschaltung Beispiel: for (int zaehler = 0; zaehler < 5; zaehler++) { System.out.println ("******"); Eine Schleife terminiert, wenn es einen Wert gibt, der in jeder Iteration monoton wächst (fällt) und nach oben (unten) begrenzt ist. Anweisungsform Iteration kennenlernen Beispiele dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt 3.2 Vorlesung Software-Entwicklung / Folie 29

33 Präzedenz von Operatoren SWE-30 Die Präzedenz von Operatoren bestimmt die Struktur von Ausdrücken. Ein Operator höherer Präzedenz bindet die Operanden stärker als ein Operator geringerer Präzedenz. Mit der Tabelle unten gilt z. B. a + b * c ist gleichwertig zu a + (b * c). unäre Operatoren ~! cast * / % + - >> << >>> < > <= >= instanceof ==!= & ^ && bedingter Ausdruck b? e1: e2 Zuweisung hohe Präzedenz geringe Präzedenz Bei gleicher Präzedenz bindet der linke Operator stärker als der rechte (außer bei Zuweisungen und bedingten Ausdrücken), z. B. a - b + c ist gleichwertig zu (a - b) + c Vorlesung Software-Entwicklung / Folie 30 Vorrangregeln für Operatoren Beispiele dazu vollständig geklammerte Ausdrücke Judy Bishop: Java lernen, 3.Aufl., Abschnitt 3.6 Ausdrücke vollständig klammern Was hat die Reihenfolge, in der die Operatoren ausgewertet werden, mit der Struktur eines Ausdrucks zu tun? Die Reihenfolge, in der die Operanden ausgewertet werden, ist unabhängig von der Struktur des Ausdrucks. Begründung?

34 Elementare Anweisungsformen SWE-31 Zuweisung: Variable = Ausdruck; Alternative: if (Bedingung) Anweisung else Anweisung Die Bedingung wird ausgewertet; ergibt sie wahr, so wird die erste sonst die zweite Anweisung ausgeführt. if (Bedingung) Anweisung Die Anweisung wird nur ausgeführt, wenn die Bedingung Beispiel: wahr liefert. Größter gemeinsamer Teiler Schleife: while (Bedingung) Anweisung Solange die Auswertung der Bedingung wahr ergibt, wird die Anweisung ausgeführt. do Anweisung while (Bedingung); Die Anweisung wird ausgeführt und solange wiederholt, wie die Bedingung wahr liefert. Folge (Block): { Anweisung... Anweisung Die Anweisungen (und Deklarationen) werden nacheinander ausgeführt. Der Block kann für eine Anweisung stehen. Aufruf: Funktionsname (Parameterausdrücke); Die Ausdrücke werden ausgewertet und die Funktion mit den Parameterwerten aufgerufen. { int a, b; a = Text.ReadInt(in); b = Text.ReadInt(in); while (a!= b) { if (a > b) a = a - b; else b = b - a; System.out.println(a); Vorlesung Software-Entwicklung / Folie 31 Algorithmische Grundformen und ihre Notation in Java kennenlernen Erläuterungen und Beispiele dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt 4.4, 5.2 Wie transformiert man eine beliebige for-schleife in eine while-schleife, die dieselbe Wirkung hat?

35 Funktionen (Methoden) SWE-32 Übersicht: Funktionen dienen zur Gliederung von Programmen. Eine Funktion soll eine übersichtliche Teilaufgabe erledigen. Eine Funktion kann Parameter verwenden, deren Werte erst im Aufruf angegeben werden. Eine Funktion berechnet ein Ergebnis und/oder verändert den Zustand in ihrer Umgebung. Methoden sind Funktionen, die auf den Variablen von Objekten (oder Klassen) operieren. Funktionsdeklaration: Modifizierer Ergebnistyp Funktionsname (formale Parameter) Block static double tofahrenheit (double celsius) { return celsius * 9 / ; Funktionsaufruf: Funktionsname (aktuelle Parameter) double cdegree = 10; double fdegree; fdegree = tofahrenheit (cdegree); System.out.println (tofahrenheit (cdegree+10)); Vorlesung Software-Entwicklung / Folie 32 Konzepte und Notation von Funktionen in Java Funktionsdeklaration und -aufruf am Beispiel erläutern Judy Bishop: Java lernen, 3.Aufl., Abschnitt 3.3 GdP-58 bis GdP-60 Beschreiben Sie die Struktur der letzten Beispielzeile. Beschreiben Sie die Ausführung der letzten Beispielzeile.

36 Aufruf, Parameter, Ergebnis SWE-33 Zur Ausführung eines Aufrufes wird Speicher angelegt für die formalen Parameter, das Ergebnis und die lokalen Variablen der Funktion. Parameterübergabe call-by-value: Die formalen Parametervariablen werden mit den Werten der entsprechenden aktuellen Parameter initialisiert. Eine Anweisung return Ausdruck; beendet den Aufruf und bestimmt sein Ergebnis. Beispiel GGT als Funktion: Aufrufe: int ggt (int a, int b) int g; { while (a!= b) g = ggt(90, 54); { System.out.print(ggt(36, 54)); if (a > b) g = ggt(g, 4); a = a - b; else b = b - a; return a; Aufruf und Parameterübergabe verstehen Korrekte und fehlerhafte Aufrufe an Beispielen erläutern Judy Bishop: Java lernen, 3.Aufl., Abschnitt 3.3 GdP-58 bis GdP-60 Vorlesung Software-Entwicklung / Folie 33 Schreiben Sie Funktionen für einfache Berechnungen, betten Sie sie in den Rahmen ein und führen Sie das Programm aus. Wie lange wird der Speicher für einen Aufruf gebraucht? Was gilt für die Existenz der Speicherbereiche von Aufrufen, wenn Funktionen aus anderen Funktionen aufgerufen werden?

37 Funktionen ohne Ergebnis (Prozeduren) SWE-34 Funktionen können eine Änderung ihrer Umgebung (Zustand, Ein-, Ausgabe) bewirken, statt ein Ergebnis zu berechnen. Sie werden dann als Anweisungen aufgerufen. (Zustandsändernde Funktionen mit Ergebnis sind möglich aber fragwürdiger Stil.) Beispiel: Aufrufe und Ausgabe: void aline (int width, char c) { System.out.print ('='); int i = 2; aline(7, '5'); while (i < width) { System.out.print (c); i = i+1; =55555= System.out.println ('='); void aticket (int width, int depth, char c) { aline (width, '='); aticket(7, 6, '5'); int i = 2; while (i < depth) ======= =55555= { aline (width, c); i = i+1; =55555= aline (width, '='); =55555= =55555= ======= Vorlesung Software-Entwicklung / Folie 34 Zerlegung in Teilaufgaben am Beispiel Das Beispiel erläutern Kriterien für die Zerlegung und die Parameter erläutern Wie ändern Sie die Funktionen, um mehrere Marken nebeneinander zu drucken?

38 Aufrufe von Objektmethoden SWE-35 Objektmethoden werden für ein bestimmtes Objekt aufgerufen; sie benutzen dessen Objektvariablen: double r = big.getradius (); Methodenaufrufe können auch die Werte von Objektvariablen (den Objektzustand) verändern: small.move (1, 2); Schnittstelle der Klasse: von außen aufrufbare Methoden: getx, gety, getradius, move, grow, Konstruktor Circles Der Zugriff von außen auf Objektvariable kann durch Modifizierer private verboten werden, d. h. small.radius = 2.3; ist nicht erlaubt. class Circles { int getx () { return x; int gety () { return y; double getradius () { return radius; void move (int dx, int dy) { x += dx; y += dy; void grow (double dr) { radius += dr; Circles (int ix, int iy, double ir) { x = ix; y = iy; radius = ir; private int x, y; private double radius; Vorlesung Software-Entwicklung / Folie 35 Methodenaufrufe für Objekte verstehen Erläuterungen am Beispiel einer gesamten Klassendefinition Judy Bishop: Java lernen, 3.Aufl., Abschnitt 3.4, 3.5 Was gehört zur Schnittstelle einer Klasse, was zu ihrer Implementierung?

39 Beispiel für den Entwurf einer Klasse SWE-36 Aufgabe: Eine Klasse, zu der man Stempel als Objekte erzeugen kann. Ein Stempel soll Wertmarken bestimmter Größe aber mit unterschiedlichen Preisen drucken können. (siehe SWE-34) class Stamps { Stamps (int w, int d) private void aline(char price) {width = w; depth = d; { System.out.print (border); for (int i=2; i<width; i++) void aticket (char price) System.out.print (price); { aline (border); System.out.println (border); for (int i=2; i<depth; i++) aline (price); aline (border); private int width, depth; private static final char border = '='; // Stamps Variable für Stempel verschiedener Größe und ihre Benutzung: 2001 bei Prof. Dr. Uwe Kastens Stamps small = new Stamps(4,4); ein 4x4-Stempel small.aticket('1'); eine 1-er-Marke drucken Stamps big = new Stamps(7,7); ein 7x7-Stempel big.aticket('5'); big.aticket('8'); 5er- und 8er-Marken Drucken Vorlesung Software-Entwicklung / Folie 36 Entwurfsaspekte am Beispiel lernen Erläuterungen dazu Vergleich der Datenabstraktion hier zur funktionalen Abstraktion auf Folie 34 Judy Bishop: Java lernen, 3.Aufl., Abschnitt 5.1 Ist der Zustand der Stempelobjekte veränderbar? Begründung.

40 Rekursion SWE-37 aus: Bauer, Goos: Informatik, Erster Teil, Dritte Auflage, Springer-Verlag 1982, S. 52 Mächtiges, einfaches, elegantes Prinzip zur Definition von Strukturen, Abläufen, Eigenschaften. Eine Definition verwendet das Definierte, z. B. Programmstrukturen wie Anweisung, Ausdruck, Block, Schachtelung Datenstrukturen wie Listen, Bäume Eigenschaften z. B. Erreichbarkeit in Graphen (Netzen) Problemzerlegung, die auf das Ausgangsproblem mit verkleinerten Werten zurückführt Funktion f, die Aufrufe von f enthält Vorlesung Software-Entwicklung / Folie 37 Rekursion als wichtiges Grundprinzip erkennen Beispiele für rekursive Definitionen Geben Sie rekursive Definitionen an. Geben Sie zu den Beispielen an, ob die Rekursion abbricht. Begründung?

41 Türme von Hanoi SWE-38 Aufgabe: Einen Turm von A nach C verlegen; dabei nur einzelne Scheiben bewegen. Es darf nie eine größere Scheibe auf einer kleineren liegen. A B C void hanoi (int höhe, char quelle, char ablage, char ziel) { if (höhe == 1) System.out.println ("lege 1 von "+ quelle + " nach " + ziel); else { hanoi (höhe - 1, quelle, ziel, ablage); System.out.println ("lege "+höhe+" von "+quelle+" nach "+ziel); hanoi (höhe - 1, Ablage, quelle, ziel); Aufruf z. B.: hanoi (4, 'A', 'B', 'C'); Vorlesung Software-Entwicklung / Folie 38 Ein typisch rekursives Verfahren kennenlernen Entwurfsidee Struktur der Rekursion Anzahl der Züge Vergleichen Sie ein nicht-rekursive Beschreibung des Verfahrens mit der rekursiven. Wieviele Züge benötigt man für einen Turm der Höhe n?

42 Rekursive Funktionen SWE-39 Die Lösung einer Aufgabe wird auf eine Lösung der gleichen Aufgabe mit verkleinerten Parametern zurückgeführt. Eine Funktion F ist direkt rekursiv, wenn sie einen Aufruf von F enthält; indirekt rekursiv, wenn ein Aufruf von F über Aufrufe anderer Funktionen wieder zu einem Aufruf von F führen kann. Beispiel GGT als rekursive Funktion: int ggt (int a, int b) { if (a!= b) { if (a > b) return ggt (a - b, b); Das Ergebnis des rekursiven Aufrufs wird else return ggt (a, b - a); als Ergebnis dieses Aufrufs zurückgegeben. else return a; Vorlesung Software-Entwicklung / Folie 39 Konzept "Rekursive Funktion" am Beispiel Ggt. Erläuterungen dazu; Terminierung Erläutern Sie die Ausführung einer der return-anweisungen.

43 Lebensdauer von Variablen, Laufzeitkeller SWE-40 Lebensdauer: Zeit der Programmausführung von der Bildung (Allokation) bis zur Vernichtung (Deallokation) einer Variablen im Speicher. Klassenvariable: Parameter und lokale Variable: Objektvariable: die gesamte Programmausführung die Ausführung eines Aufrufes der Funktion während der Existenz des Objektes Beispiel SWE-34 ggt rekursiv Laufzeitkeller: Für die Ausführung eines Aufrufes wird ein Speicherblock mit den Parametern und lokalen Variablen gebildet (Schachtel). Bei Beginn eines Aufrufes wird eine Schachtel auf dem Laufzeitkeller gekellert, am Ende wieder entkellert. args width depth c i width c i 7 6 '5' 3 6 '5' 4 main aticket aline args Erg. a b Erg. a b Erg. a b main ggt ggt ggt Vorlesung Software-Entwicklung / Folie 40 Allgemeine Konzepte Lebensdauer und Laufzeitkeller verstehen Erläuterungen an Beispielen GdP-40, GdP-41 Schreiben Sie rekursive Funktionen als Java-Programme. Lassen Sie Werte von Parametern und lokalen Variablen am Anfang und am Ende der Aufrufe ausgeben.

44 Rekursive Datenstrukturen mit rekursiven Methoden Ein binärer Baum ist leer oder er besteht aus einem Wert und zwei Unterbäumen: class BinTree // Binäre Bäume mit Zeichenwerten an den Baumknoten { BinTree (BinTree l, char v, BinTree r) // Konstruktor für innere Knoten { left = l; value = v; right = r; BinTree (char v) // Konstruktor für Blattknoten { left = null; value = v; right = null; void infix () // Ausgabe in Infix-Form, geklammert { System.out.print ('('); if (left!= null) left.infix (); System.out.print (value); if (right!= null) right.infix (); System.out.print (')'); void postfix () // Ausgabe in Postfix-Form { if (left!= null) left.postfix (); if (right!= null) right.postfix (); System.out.print (value); private BinTree left, right; private char value; SWE-41 Aufruf z.b.: (new BinTree(new BinTree('A'),'/',new BinTree('B'))).inFix(); Rekursiv definierte Datenstrukturen kennenlernen Erläuterung der Begriffe Vorlesung Software-Entwicklung / Folie 41 Erläuterung der Begriffe Binärbaum, infix, präfix, postfix Umgang mit rekursiven Methoden auf rekursiven Datenstrukturen Zeigen Sie, daß die Datenstruktur und ihre Methoden zum Durchlaufen (infix, präfix, postfix) die gleiche Rekursionsstruktur haben.

45 Ausdrucksbäume in verschiedenen Darstellungen SWE-42 Infix mit notwendigen Klammern: (a + b) / (c - d) Infix vollständig geklammert: (((a) + (b)) / ((c) - (d))) Postfix a b + c d - / Präfix / + a b - c d Objekte der Klasse BinTree: / + - a b c d ~ ~ ~ ~ ~ ~ ~ Vorlesung Software-Entwicklung / Folie 42 Darstellungen von Ausdrucksbäumen erlernen Baumdurchlauf links-abwärts Postfix- und Präfix-Darstellung erzeugen Warum benötigt man Klammern nur in der Infix-Darstellung?

46 Einfache Eingabefunktionen SWE-43 Zeichenfolgen von der Standardeingabe (Tastatur) lesen: Ein Objekt der Klasse BufferedReader aus der Bibliothek java.io wird mit dem Objekt System.in initialisiert und dessen Funktionen werden benutzt: import java.io.*; class Greetings { public static void main (String [] args) throws IOException { BufferedReader in = new BufferedReader (new InputStreamReader (System.in)); System.out.println ("What is your name?"); String name = in.readline (); System.out.println ("Hello " + name); in.readline() liest bis zum nächsten Zeilenwechselzeichen oder bis zum Eingabeende und liefert die Zeichen davor als String-Objekt. throws IOException gibt an, daß ein Aufruf dieser Funktion E/A-Ausnahmen auslösen könnte (siehe SWE-48). Vorlesung Software-Entwicklung / Folie 43 Direkte Verwendung von Bibliotheksklassen mit Eingabefunktionen Erläuterungen dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt 4.1, 4.2 Tabellen drucken und Grenzen dafür einlesen

47 Java Gently s Text Class SWE-44 Vereinfacht interaktive Eingabedialoge mit Fehlerbehandlung. Benutzt E/A-Ströme wie in SWE-22 und SWE-43gezeigt. Einige Funktionen aus der Klasse Text: public static void prompt (String s); public static int readint (BufferedReader in); public static double readdouble (BufferedReader in); public static String readstring (BufferedReader in); public static char readchar (BufferedReader in); Beispiel von SWE-43: import java.io.*; import javagently.*; class Greetings { public static void main (String [] args) throws IOException { BufferedReader in = Text.open (System.in); Text.prompt ("What is your name?"); String name = Text.readString (in); System.out.println ("Hello " + name); Vorlesung Software-Entwicklung / Folie 44 E/A-Unterstützung speziell für Anfänger Am Beispiel erläutern Judy Bishop: Java lernen, 3.Aufl., Abschnitt 4.1, 4.2 Weitere E/A-Dialoge programmieren Verhalten bei Eingabefehlern erproben Warum ist Eingabe technisch komplizierter als Ausgabe?

48 Eingabe von Zahlenfolgen SWE-45 Es sollen Zahlenfolgen unterschiedlicher Länge gelesen werden. Die Länge wird erst bei der Ausführung des Programms bestimmt. 4 Techniken dazu: 1. Länge interaktiv erfragen; dann entsprechend viele Elemente lesen (SWE-46). 2. Auf der Eingabedatei die Angabe der Länge den Elementen voranstellen, dann entsprechend viele Elemente lesen (SWE-47). 3. Leseschleife am Eingabeende durch eine Ausnahmebehandlung beenden (SWE-48). 4. Einen speziellen Wert, der nicht in der Folge vorkommen kann, als Endezeichen (Sentinel) anfügen. Beispiel siehe SWE-46. Nützliche Eingabetechniken parat haben (1) und (4) erläutern, siehe SWE-46 Judy Bishop: Java lernen, 3.Aufl., Abschnitt 4.1, 4.2 Technik (1) implementieren und zu (4) verändern Welche Fehlersituationen können bei (1) und (4) auftreten? Vorlesung Software-Entwicklung / Folie 45

49 Eingabe von Zahlenfolgen, Beispiel 1 SWE-46 Technik 1: Länge interaktiv erfragen; dann entsprechend viele Elemente lesen. import java.io.*; import javagently.*; public class Summation1 { public static void main(string[] args) throws IOException { BufferedReader in = Text.open (System.in); Text.prompt ("How many numbers?"); int count = Text.readInt (in); // Länge interaktiv erfragen double total = 0; for (int i = 1; i <= count; i++) { Text.prompt (i + ">"); double number = Text.readDouble(in); total += number; System.out.println ("That's enough, thanks."); System.out.println ("The total is " + total); // Leseschleife Vorlesung Software-Entwicklung / Folie 46 Implementierung zu SWE-45(1) Erläuterungen zusammen mit SWE-45 Judy Bishop: Java lernen, 3.Aufl., Abschnitt 4.1, 4.2

50 Ein- und Ausgabe mit Dateien SWE-47 Statt der vordefinierten Dateiobjekte System.in, System.out werden neue Dateiobjekte für Dateien unter deren Dateinamen (Unix-Pfad) von den Funktionen Text.open und Text.create erzeugt: statt Standardeingabe: BufferedReader in = Text.open (System.in); Eingabedatei: BufferedReader in = Text.open ("numbers.in"); Ausgabedatei: PrintWriter out = Text.create ("totals.out"); Im Beispiel SWE-46 nur die Erzeugung des Dateiobjektes und das Lesen der Länge ändern: BufferedReader in = Text.open ("numbers.in"); int count = Text.readInt (in); // Länge von der Datei lesen // Lesen der Werte wie in SWE-46 Vorlesung Software-Entwicklung / Folie 47 Nur kleine Änderungen beim Übergang zu Dateien Erläuterungen dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt 4.2, 4.5 Ändern Sie das Programm so, daß der Dateiname interaktiv erfragt wird

51 Ausnahmebehandlung SWE-48 Ausnahmen signalisieren Fehler oder ungewöhnliche Situationen bei der Programmausführung. In robusten Programmen sollen sie abgefangen und behandelt werden. Ein try-block wird mit einer oder mehreren Ausnahmebehandlungen (catch-block) versehen. Wird im try-block eine Ausnahme ausgelöst, so wird sofort der catch-block dazu ausgeführt. Dies geschieht wie ein spontaner Aufruf eines passenden catch-blockes als Funktion mit dem Ausnahmeobjekt als Parameter. Beispiel: Einlesen einer Zahlenfolge Technik (3): try { for (int i = 1; /* keine Bedingung */; i++) // Leseschleife { Text.prompt (i + ">"); double number = Text.readDouble(in); total += number; catch (EOFException e) // der Parametertyp wählt die Ausnahme aus { System.out.println ("That's enough, thanks."); System.out.println ("The total is " + total); Elementare Ausnahmebehandlung verstehen Erläuterungen dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt 4.6 Programm zum sicheren Benutzen von Dateien entwickeln Vorlesung Software-Entwicklung / Folie 48 Nennen Sie Beispiele aus früher geschriebenen Programmen, die durch sinnvollen Einsatz von Ausnahmebehandlung robuster gemacht werden können.

52 Schleifenausgänge SWE-49 Die Ausführung einer break-anweisung beendet die Ausführung der nächst umfassenden while-, do-, for- oder switch-anweisung. Z. B. Dialog zum Öffnen einer Eingabedatei: BufferedReader in = Text.open (System.in); BufferedReader fin = null; String filename = ""; for (int count = 0; count < 5; count++) { try { Text.prompt ("Name der Eingabedatei:"); filename = Text.readString (in); fin = Text.open (filename); // höchstens 5 Versuche break; // Datei ist erfolgreich geöffnet; for-schleife beenden. catch (FileNotFoundException e) { System.out.println (filename + " gibt es nicht."); if (count < 4) System.out.println ("Versuche es nochmal."); // Problem: Hier ist entweder fin erfolgreich geöffnet oder fin == null. Vorlesung Software-Entwicklung / Folie 49 break-anweisung an einer typischen Anwendung kennenlernen Erläuterung des Beispiels Allgemein: Nach der Schleife gelten verschiedene Bedingungen, je nach dem Weg auf dem sie verlassen wurde. Judy Bishop: Java lernen, 3.Aufl., Abschnitt 5.2 In dem Beispiel könnte man die Schleifenbedingung auch weglassen, um beliebig viele Versuche zuzulassen. Weshalb sollte man das nicht tun?

53 Auslösen von Ausnahmen SWE-50 Die Ausführung einer throw-anweisung löst eine Ausnahme aus. Dadurch werden umgebende Anweisungen und Methodenaufrufe beendet, bis eine Ausnahmebehandlung (catch-klausel) für die Ausnahme erreicht wird. Z. B. eine Methode für einen Dialog zum Öffnen einer Eingabedatei: static BufferedReader opendialog () throws IOException { BufferedReader in = Text.open (System.in); String filename = ""; for (int count = 0; count < 5; count++) // höchstens 5 Versuche { try { Text.prompt ("Name der Eingabedatei:"); filename = Text.readString (in); return Text.open (filename);// Datei ist geöffnet; Schleife beenden. catch (FileNotFoundException e) { System.out.println (filename + " gibt es nicht."); if (count < 4) System.out.println ("Versuche es nochmal."); throw new FileNotFoundException (); // Ausnahme auslösen Vorlesung Software-Entwicklung / Folie 50 Explizites Auslösen einer Ausnahme in einer Funktion Erläuterungen der Verwendung von throw und throws IOException umfasst FileNotFoundException Judy Bishop: Java lernen, 3.Aufl., Abschnitt 4.6 Wo kann die Ausnahme FileNotFoundException behandelt werden? Wo könnte in der Methode opendialog eine Ausnahme implizit ausgelöst werden? Was geschieht, wenn man das throws-konstrukt wegläßt oder darin IOException durch FileNotFoundException ersetzt?

54 Zusammenfassung zur Ausnahmebehandlung SWE-50a 1. Das Auslösen einer Ausnahme bricht eine Operation, die umgebende Anweisungen, die verursachenden Methodenaufrufe ab bis eine passende Ausnahmebehandlung gefunden wird. 2. Beim Auslösen einer Ausnahme wird ein Objekt einer Unterklasse von Throwable erzeugt. Seine Klassenzugehörigkeit charakterisiert die Ausnahme (z. B. EOFException). Es kann Information (z. B. einen Fehlertext als String) zur Ausnahmebehandlung transportieren. 3. Die catch-klauseln einer try-anweisung sind Ausnahmebehandlungen für jeweils die angegebene Klasse von Ausnahme-Objekten. 4. Wird ein try-block durch eine Ausnahme der Klasse E abgebrochen (siehe 1) und hat er eine Ausnahmebehandlung für E oder eine Oberklasse von E, so wird diese ausgeführt und damit die try-anweisung beendet. Hat er keine solche Ausnahmebehandlung, so wird auch die try-anweisung abgebrochen. Vorlesung Software-Entwicklung / Folie 50a Ausnahmebehandlung im Zusammenhang verstehen Erläuterungen am Beispiel von Folie 48 und Folie 50b zu den Aspekten Abbrechen umgebender Anweisungen und Aufrufe Auswahl der catch-klausel Ausführung einer try-anweisung Judy Bishop: Java lernen, 3.Aufl., Abschnitt 4.6

55 Beispiel zur Ausnahmebehandlung SWE-50b try {... number = in.readint (); // könnte eine IOException oder // NullPointerException auslösen average = total / number;// könnte eine ArithmeticException auslösen income[month] = average;// könnte IndexOutOfBoundsException auslösen... // löst eine Ausnahme aus: throw new FileNotFoundException ("Eingabedatei fehlt");... catch (NullPointerException e) {... catch (ArithmeticException e) {... catch (IndexOutOfBoundsException e) {... catch (IOException e) { System.err.println ("Dateifehler: " + e.getmessage()); exit (0); Vorlesung Software-Entwicklung / Folie 50b Beispiel zu SWE-50a Ablauf zeigen Informationstransport mit dem Exception-Objekt zeigen Judy Bishop: Java lernen, 3.Aufl., Abschnitt 4.6 Welche Ausnahmebehandlung wird durch das Auslösen der FileNotFoundException aktiviert? Begründung.

56 Erzwungene Ausnahmebehandlung SWE-50c Ausnahmen der Klassen Error und RuntimeException können brauchen aber nicht im Programm behandelt zu werden; man nimmt dann einen Programmabbruch in Kauf. Ausnahmen aller anderen Klassen müssen behandelt werden, z. B. IOException. Der Übersetzer prüft, daß eine Operation oder Anweisung, die eine solche geprüfte Ausnahme E auslösen könnte, entweder von einer try-anweisung mit passender Ausnahmebehandlung umgeben ist, oder die umgebende Methode mit der Eigenschaft throws E definiert ist. z. B. void folgelesen (BufferedReader in) throws IOException {... Vorlesung Software-Entwicklung / Folie 50c Maßnahmen bei geprüften Ausnahmen verstehen Die Klassenhierarchie zu java.lang.throwable zeigen. zusätzlich die Ausnahmen des java.io Packages. Daran die Unterscheidung geprüft und ungeprüften zeigen. Judy Bishop: Java lernen, 3.Aufl., Abschnitt 4.6 Provozieren sie Fehlermeldungen des Java-Übersetzers zu fehlender Ausnahmebehandlung und begründen Sie sie.

57 Arrays SWE-51 Arrays repräsentieren Folgen gleichartiger Elemente mit Zugriff durch Indizierung. In Java sind Arrays Objekte, die vom new-operator erzeugt werden. Deklarationen von Variablen für Arrays: Array-Typ Var.name Elementtyp Elementanzahl int [] noten = new int [6]; Circles [] kreise = new Circles [4]; Auch Initialisierung der Elemente möglich (new, Typ und Anzahl implizit): int [] gewicht = { 5, 10, 5, 15, 15, 50 ; Indizierung der Elemente: noten[i] mit i = 0,...,(noten.length-1) noten.length: Anzahl der Elemente des Arrays in der Variablen noten. for-schleife über alle Elemente eines Arrays: for ( int i = 0; i < noten.length; i++ ) { noten [i] = Text.readInt (in); Vorlesung Software-Entwicklung / Folie 51 Arrays in Java kennenlernen Deklarationen, Initialisierungen erläutern Verwendung von length Judy Bishop: Java lernen, 3.Aufl., Abschnitt 6.1 Techniken zum Lesen von Zahlenfolgen ( Folie 45) mit Arrays implementieren Warum ist es sinnvoll, in der Wiederholungsbedingung a.length statt der Zahl aus der Initialisierung zu benutzen?

58 Weitere Eigenschaften von Arrays SWE-52 Der Wert einer Array-Variablen ist die Referenz eines Array-Objektes. Ein Array-Objekt ist zusammengesetzt aus Variablen für die Array-Elemente: noten Array-Variable Indizes kreise 0 3 null Elementobjekte :Circles x= 0 y= 0 r.= 1.0 Array-Objekt Array-Objekt Zuweisungen von Array-Objekten und Elementobjekten sind zu jeder Zeit möglich. Mehrdimensionale Arrays: Der Elementtyp ist wieder ein Array-Typ: int [][] matrix = new int [5][3];... matrix [i][j] = i+j; bei Prof. Dr. Uwe Kastens korrekte Indizierung wird geprüft; ggf. wird die Ausnahme ArrayIndexOutOfBoundsException ausgelöst; man kann sie im Programm abfangen: try{... noten[i]... catch (ArrayIndexOutOfBoundsException e) {... Verständnis für Arrays vertiefen Vorlesung Software-Entwicklung / Folie 52 Array-Objekte am Bild erläutern Beispiele für Zuweisungen an Array- und Elementvariable Judy Bishop: Java lernen, 3.Aufl., Abschnitt 6.1, 6.2 Zahlen aus einem kleinen Wertebereich lesen und ihre Häufigkeit bestimmen. Das Programm soll durch Ausnahmebehandlung robust implementiert werden. Seien x und y Array-Variable. Erklären Sie am Bild die Wirkung von x = y; y[2] = 5; System.out.println (x[2]).

59 Beispiel: Sortieren durch Auswahl SWE-53 import java.io.*; class Sort { public static void main (String [] args) { double [] a = {8,3,5,5,2,9; selectsort (a); Algorithmenidee: Aus der noch unsortierten Folge das kleinste Element wählen und mit dem ersten vertauschen sortiert left min static void selectsort (double [] arr) { // on exit: arr ist sorted s.t. arr[i] <= arr[i+1] for (int left = 0; left < arr.length-1; left++) { // find smallest element from left to last int min = left; for (int j = left+1; j < arr.length; j++) if (arr[min] > arr[j]) min = j; // swap elements left and min: double tmp = arr[min]; arr[min] = arr[left]; arr[left] = tmp; Vorlesung Software-Entwicklung / Folie 53 Umgang mit Arrays am Beispiel lernen Erläuterung der algorithmischen Idee, der Array-Konstrukte Judy Bishop: Java lernen, 3.Aufl., Abschnitt 6.4 Vervollständigen Sie das Programm mit E/A. Begründen Sie an einem Bild wie auf Folie 52, was der Aufruf selectsort(a) ändert.

60 Binäre Suche in sortierter Folge SWE-54 import java.io.*; class Search { static boolean binsearch (int val, int[] arr, int low, int up) { if (up < low) return false; int mid = (low + up) / 2; int midval = arr[mid]; Algorithmenidee: Gesuchtes mit dem mittleren Element vergleichen; rekursiv in der linken oder rechten Hälfte weitersuchen. <= >= midval mid if (val == midval) return true; if (val < midval) return binsearch(val, arr, low, mid-1); else return binsearch(val, arr, mid+1, up); public static void main (String [] args) { int [] a = {1, 4, 5, 5, 7, 8; if (binsearch (5, a, 0, a.length-1)) System.out.println(5 + " gefunden"); else System.out.println(5 + " nicht gefunden"); Vorlesung Software-Entwicklung / Folie 54 Wichtiges Suchverfahren kennenlernen Erläuterung der Algorithmenidee Judy Bishop: Java lernen, 3.Aufl., Abschnitt 6.4 Ersetzen Sie das Prinzip der Halbierung durch Drittelung. Wieviele Aufrufe sind nötig, um bei einer Folgenlänge n festzustellen, daß ein Wert nicht in der Folge ist? Größenordnung des Aufwandes?

61 Die Klasse String für Zeichenreihen SWE-55 Die vordefinierte Klasse String für Zeichenreihen und Operationen darauf. Ein String-Objekt repräsentiert eine unveränderliche Zeichenreihe. Literale für String-Objekte: "Welcome to Java" Deklarationen von String-Variablen und Zuweisungen: String hello = "Welcome to Java"; String line;... line = in.readline(); "Good bye" einige Operationen mit String-Variablen: int length (); int indexof (String s); char charat (int index); int compareto (String s); boolean equals (String s); char[] tochararray (); String substring (int begin, int end); Operator + erzeugt neues String-Objekt durch Konkatenation seiner String-Operanden: "I got the line >" + line + "<" Zu den Grundtypen gibt es eine implizite Konversion in ein String-Objekt, z. B. "The total of the " + count + " numbers is " + sum Das gilt auch für Klassen, die eine Methode tostring definieren, z. B. in Circles: public String tostring () { return "a Circle at "+x+", "+y+" with radius "+radius; Vorlesung Software-Entwicklung / Folie 55 Operationen mit Zeichenreihen verstehen Erläuterungen zu String-Objekten, Methoden und Konversion Judy Bishop: Java lernen, 3.Aufl., Abschnitt 7.1 Ergänzen Sie Ihre Klassendefinitionen durch tostring und lassen Sie Objekte ausgeben.

62 Beispiel: Ein parametrisierter Liedtext SWE-56 static String sing (String stuff, int n) { // Ein Lied mit n Versen wird durch String-Konkatenation erzeugt. String plural, text = ""; // text enthält die Referenz des bisher if (n < 1) return ""; // zusammengefügten Liedes if (n == 1) plural = ""; else plural = "s"; do // Den n-ten Vers anhängen: { text = text + n+" bottle"+plural+" of "+stuff+" on the wall,\n"; text = text + n+" bottle"+plural+" of "+stuff+"!\n"; text = text + "You take one down and pass it around:\n"; n = n - 1; if (n == 1) plural = ""; // the last bottle if (n == 0) text = text + "No bottles of "+stuff+" on the wall!\n"; else text = text + n+" bottle"+plural+" of "+stuff+" on the wall.\n\n"; while (n > 0); return text; Vorlesung Software-Entwicklung / Folie 56 Beispiel für iterative String-Konkatenation Erläuterungen dazu

63 Beispiel: Wörter sortieren SWE-57 Aufgabe: Die in einem Text vorkommenden Wörter sollen jeweils einmal in lexikografischer Reihenfolge ausgegeben werden. Zerlegung in Teilaufgaben: 1. Folge von Wörtern von einer Datei lesen (siehe SWE-50, SWE-48). 2. Gelesenes Wort in ein Array eintragen, falls es noch nicht darin vorkommt. Teilaufgabe: Suchen in unsortierter Folge. 3. Sortieren (SWE-53) 4. Sortierte Folge ausgeben. Für (2) und (3) benötigt man lexikografische Vergleiche von String-Objekten, a, b: a.compareto(b) liefert einen int-wert < 0 = 0 > 0 mit der Bedeutung a < b a = b a > b Implementierung: je eine Klassenmethode für (2), (3), (4) (1) in der main-methode implementieren. Vorlesung Software-Entwicklung / Folie 57 Eine zusammengesetzte Aufgabe zum Thema Arrays lösen Erläuterungen dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt 6.5 Testen Sie das Programm und heben Sie wiederverwendbare Teile auf.

64 Wörterbücher SWE-58 Wörterbuch: Datenstruktur zur Speicherung von Paaren (Schlüssel, Wert). Operationen: ein Paar zufügen; den Wert zu einem Schlüssel liefern. Beispiele für solche Mengen von Paaren: (Name, Studierendendaten) in der Studierendenverwaltung (deutsche Vokabel, englische Vokabel) Wörterbuch im engen Sinne (Koordinate, geografisches Objekt) Sammlung geografischer Informationen Implementierung mit der Hash-Methode (siehe Algorithmen und Datenstrukturen, 2. Sem.): Aus dem Schlüssel jedes Paares wird ein Index eines Arrays errechnet. Das Paar wird an einer freien Stelle an oder nach diesem Index im Array gespeichert. Beim Zugriff wird entprechend von dem Index an gesucht, der zu dem Schlüssel gehört. Implementiert durch die Klasse Hashtable im Package java.util. Operationen: void put (Object key, Object value); // Paar zufügen Object get (Object key); // Wert zum Schlüssel liefern boolean containskey (Object key); // Gibt es ein Paar mit dem Schlüssel? boolean contains (Object value); // Gibt es ein Paar mit dem Wert? void remove (Object key); // Paar mit dem Schlüssel entfernen Ein Hashtable-Objekt kann Paare aufnehmen, deren Schlüssel und Werte Objekte beliebiger Klassen sind. Object ist die allgemeinste (Oberklasse) aller Klassen. Vorlesung Software-Entwicklung / Folie 58 Konzept der Datenstruktur Wörterbuch verstehen Erläuterung der Hash-Methode der Operationen der Benutzung der Klasse Hashtable Judy Bishop: Java lernen, 3.Aufl., Abschnitt 6.5 Wie könnte z. B. aus einem beliebigen String ein Array-Index errechnet werden?

65 Elemente einer Datenstruktur aufzählen (Enumeration) SWE-59 Mit einer Enumeration kann man die Elemente einer Datenstruktur, wie Hashtable, z. B. in Schleifen aufzählen (Iterator): e = table.keys(); erzeugt ein Enumeration-Objekt für die Schlüssel in table e.hasmoreelements() liefert true, wenn e noch nicht alle Elemente durchlaufen hat e.nextelement() liefert das nächste Element Benutzung: Hashtable englischdeutsch = new Hashtable(); // Wörterbuch füllen: englischdeutsch.put ("dog", "Hund"); englischdeutsch.put ("cat", "Katze");... // ein Zugriff auf das Wörterbuch: System.out.println ( (String)englischDeutsch.get ("dog") ); // Alle Schlüssel des Wörterbuches ausgeben: Enumeration e = englischdeutsch.keys(); while (e.hasmoreelements()) { String key = (String) e.nextelement (); System.out.println (key); Iteratoren für Datenstrukturen kennenlernen Erläuterungen zur Benutzung Judy Bishop: Java lernen, 3.Aufl., Abschnitt 6.5 Vorlesung Software-Entwicklung / Folie 59

66 Klassen und Objekte - Typen und Werte SWE-60 In Java sind Grundtypen mit ihren Werten und Operationen darauf nicht als Klassen mit Objekten und Methoden darauf definiert! Da z. B. Datenstrukturen wie Hashtable nur Objekte speichern, gibt es zu den Grundtypen int, long, float, double, boolean, char Klassen, die Werte in Objekten kapseln und Methoden dafür definieren (envelope classes): Integer, Long, Float, Double, Boolean, Character (wrapper classes) Konversion z. B. zwischen int und Integer: Integer (int value); Integer-Konstruktor erzeugt Objekt aus Wert int intvalue (); Objekt-Methode von Integer liefert Wert Konversion z. B. zwischen Integer und String: Integer (String s); Integer-Konstruktor erzeugt Objekt aus Ziffernfolge String tostring (); Objekt-Methode von Integer liefert Wert als String Beispiele: int i = 12; Integer iobj = new Integer (i); // int-wert in Objekt verpacken int j = iobj.intvalue(); // verpackten Wert holen String s = iobj.tostring(); // aus iobj ein String-Objekt erzeugen String t = iobj; // dasselbe implizit Integer kobj = new Integer ("137"); // Integer-Objekt aus Ziffernfolge Vorlesung Software-Entwicklung / Folie 60 Konversion mit Wrapper-Klassen verstehen Erläuterungen dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt 7.2 Zeichnen Sie ein Übergangsdiagramm für Konversionen zwischen int, Integer und String.

67 Zugriffsrechte SWE-61 Information Hiding (Geheimnisprinzip): Nur die Klassen und die Elemente von Klassen zugreifbar machen, die zur Benutzung vorgesehen sind (Schnittstelle) - z. B. keine Implementierungsdetails. Zugriffsrechte für Klassen: benutzbar class Circles {... im gleichen Package public class Circles {... in jedem Package Zugriffsrechte für Datenelemente und Methoden: benutzbar class Circles { void move (...) {... im gleichen Package public void move (...) {... überall private void move (...) {... in dieser Klasse protected void move (...) {... in dieser, in Unterklassen und im gleichen Package Stilregel: Datenelemente immer private mit zugehörigen get- und set-methoden, wenn nötig. Zugriffsrechte sinnvoll einschränken Erläuterungen dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt 8.2 Vorlesung Software-Entwicklung / Folie 61

68 Richtlinien zum Entwurf von Klassen SWE Anzahl der Objekte zu einer Klasse: beim Entwurf klären, welcher Fall vorliegt: - beliebig viele: z. B. Circles im Graphikprogramm; Lieferung in der Lagerhaltung - eine feste Anzahl: z. B. 3 Skatspieler mit verschiedenen Rollen - genau eines: z. B. der Motor im Auto, Nelsons Kaffeeladen - keines: z. B. zusammengehörige Klassenmethoden: trigonometrische Funktionen, Java Gently s Text-Klasse. 2. Zusammengehörigkeit: Methoden und Datenelemente einer Klasse gehören eng zusammen; Operationen und Eigenschaften bzw. Zustand einer Sorte von Objekten. 3. Zielorientiert modellieren: Nur die Operationen und Eigenschaften, die in der Anwendung gebraucht werden - nicht alle Operationen und Eigenschaften, die real vorkommen. 4. Information Hiding (Geheimnisprinzip): Nur die Elemente zugreifbar machen, die für die sinnvolle Benutzung nötig sind; enge Schnittstelle (SWE-61). 5. Datenzugriff nur über Methoden: Datenelemente private; get- und set-methoden soweit nötig; festlegen, welche Datenelemente veränderlich sein sollen - explizit durch set-methode oder implizit durch andere Methoden. 6. Objektvariable über den Konstruktor initialisieren; durch Konstruktor-Parameter, wenn sie bei der Objekterzeugung einstellbar sein sollen. Vorlesung Software-Entwicklung / Folie 62 Einige einfache Regeln beachten Erläuterungen dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt 5.1 Prüfen Sie die bisher entworfenen Klassen an diesen Regeln Begründen Sie, weshalb unnötig zugreifbare Elemente von Nachteil sind.

69 Entwurf eines objektorientierten Programms: Nelsons Kaffeeladen In Nelsons Kaffeeladen soll ein Computer-Programm für die Lagerhaltung eingesetzt werden. Nelson verkauft verschiedene Kaffeesorten, z. B. Java, Columbian, Kenyan. Jede Lieferung zu einer bestimmten Sorte hat ein Verfalldatum. Sie wird deshalb nicht mit früheren Lieferungen gemischt. Nelson verkauft jeweils aus der ältesten Sorte zuerst. SWE-63 Beispiel für einen Zustand des Kaffelagers: Datenelemente der Klasse Coffee: Columbian 65 Kenyan Jul May Jun 1998 Name Preis Menge Wiederbestellmenge Lieferungen Anzahl der Lieferungen Java Aug Aug Jul 1998 Datenelemente der Klasse Batch: Menge Verfalldatum Analyse einer Entwicklungsaufgabe lernen Erläuterungen dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt 8.2 Vorlesung Software-Entwicklung / Folie 63

70 Operationen zu Nelsons Kaffeladen SWE-64 Operationen mit einer Kaffeesorte (Coffee): neue Sorte in das Lager aufnehmen Daten dafür von einer Datei lesen Daten ausgeben Nachbestellen prüfen Preis ändern Lieferung einlagern Kaffee verkaufen überalterte Lieferungen vernichten Operation neue Lieferung von Batch benutzen Operation verkaufen von Batch benutzen Operation prüfe Verfall von Batch benutzen verfügbare Menge anzeigen Operationen mit einer Lieferung (Batch): neue Lieferung Daten dafür von einer Datei lesen Daten ausgeben Menge anzeigen prüfe Verfall verkaufen Vorlesung Software-Entwicklung / Folie 64 Operationen entwerfen Bedeutung der Operationen erarbeiten Judy Bishop: Java lernen, 3.Aufl., Abschnitt 8.2

71 Entwurf der Klassen zu Nelsons Kaffeeladen Zunächst nur Datenelemente und Signaturen der Methoden: SWE-65 public class Batch { Batch (double k, Date d); double available (); boolean sell (double k); void display (); private double instock; // Menge private Date sellbydate;// Verfall public class Coffee { Coffee (String s); // bei interaktiver Eingabe der Daten Coffee (); // zum Einlesen der Daten void preparetostock (BufferedReader in) throws IOException; boolean newbatchin (BufferedReader in) throws IOException; void display (); private String name; // Kaffeesorte private double price; // Graz per kg private double stock; // Menge im lager in kg private double reorder; // Menge, ab der nachbestellt wird, in kg private Batch [] B = new Batch [10]; // die Lieferungen private int batches = 0; // Anzahl der Lieferungen Vorlesung Software-Entwicklung / Folie 65 Klassendeklaration verfeinern Typen der Datenelemente festlegen Signaturen der Methoden festlegen Judy Bishop: Java lernen, 3.Aufl., Abschnitt 8.2 Lesen Sie die Erläuterungen nach. Implementieren Sie das Programm in den Übungen.

72 Datei-Format zu Nelsons Kaffeladen SWE-66 Die Informationen zu Kaffeesorten und -lieferungen werden auf einer Datei gespeichert, so dass daraus die Datenstruktur erzeugt werden kann. Die Datei enthält eine Folge von Daten zu einer Kaffeesorte. Darin ist jeweils eine Folge von Lieferungsdaten enthalten. Wir verwenden die Sentinel-Technik, um das Ende einer Lieferungsfolge zu kennzeichnen. Format: Beispiel: Name der Kaffeesorte Preis Nachbestellgrenze Liefermenge Verfalldatum... 0 Columbian Apr May-97 0 Java May Jul Aug-97 0 Kenyan May-97 0 Vorlesung Software-Entwicklung / Folie 66 Entwurf eines Datei-Formates Erläuterungen dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt 8.2 Begründen Sie, weshalb nicht der Coffee-Konstruktor die Objektvariablen initialisiert, sondern die Methode preparetostock. Geben Sie dazu an, in welcher Reihenfolge Coffee-Objekte erzeugt werden und wie aus der Eingabe gelesen wird.

73 Formatiert schreiben und lesen SWE-67 Formate sind Objekte zu Klassen aus dem Package java.text. Format-Objekte sind einstellbar. Manche passen sich an landesübliche Schreibweisen an, z. B. Datum, Währung. Beispiel: Datum lesen und schreiben: import java.text.*; import java.util.*; import java.io.*; import javagently.*; // für Formate // für die Klasse Date Locale.setDefault(Locale.GERMANY);// Umstellung auf deutsche Schreibweise DateFormat DF = DateFormat.getDateInstance(); // Format-Objekt erzeugen String s = Text.readString (in); Date d; try { d = DF.parse(s); // DF.parse versucht, s als Datum zu entschlüsseln catch (ParseException e) // das könnte misslingen... { System.out.println ("Eingabefehler bei einem Datum"); d = new Date (); // ersatzweise das Datum von heute System.out.println ("Datum gespeichert: " + DF.format (d)); // d formatiert ausgeben Vorlesung Software-Entwicklung / Folie 67 Format-Objekte anwenden Erläuterungen am Beispiel Judy Bishop: Java lernen, 3.Aufl., Abschnitt 7.4, 7.5 Probieren Sie die Ausgabe von Datumsangaben und Währungen für verschiedene Länder aus.

74 Zwischenbilanz: allgemeine Sprachkonzepte SWE-67a Programmausführung Spracheigenschaften übersetzen, interpretieren imperativ, objektorientiert abstrakte Maschine statisch typisiert Variable und Zuweisungen Lebensdauer von Variablen Klassen und Typen Laufzeitkeller Typen, Werte und Operationen Parameterübergabe Klassen und Objekte Terminierung von Schleifen und Rekursion Konversion, implizit und explizit Zahldarstellung, 2er-Komplement Signatur von Funktionen, Methoden Kurzauswertung logischer Formeln Überladene Operatoren und Methoden Ausnahmebehandlung abstrakter Datentyp rekursiv definierte Datentypen allgemeine Konzepte Rekursion Binäre Bäume Ausdrücke in Infix-, Präfix-, Postfix-Form Wörterbücher Algorithmus Sortieren durch Auswahl Iteratoren Algorithmus Binäre Suche Vorlesung Software-Entwicklung / Folie 67a Bisher gelernte allgemeine Sprachkonzepte bewusst machen Erläuterungen dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt bis 8.2 Wiederholen Sie die genannten Themen.

75 Deklarationen von Klassen mit - Konstruktoren, - Objekt- und Klassenmethoden - Objekt- und Klassenvariablen Variablen: Objekt-, Klassenvariable, Parametervariable, lokale Variable Methoden (Funktionen) Anweisungen: Zuweisung Block if-anweisung for-, while-, do-schleife Aufruf return-, break-anweisung try-block mit Ausnahmebehandlung Eingabe, Ausgabe, Formate Bibliotheken nutzen Zwischenbilanz: Java-Konstrukte Typen: Grundtypen SWE-67b Klassen als Typen von Objektreferenzen Arrays Strings Enumeration Wrapper-Klassen Konversion - für numerische Typen - nach String - von und nach Object überladene Operatoren und Methoden Ausdrücke: Operatoren, Präzedenzen Literale Variable, Konstante Aufrufe Vorlesung Software-Entwicklung / Folie 67b Bisher gelernte Sprachkonstrukte von Java bewusst machen Erläuterungen dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt bis 8.2 Wiederholen Sie die genannten Themen

76 Lineare Listen SWE-68 Lineare Listen repräsentieren Folgen gleichartiger* Elemente als dynamisch veränderliche Datenstruktur mit linearem Zugriff: Listen werden aus Paaren aufgebaut: (Elementwert, Referenz auf den Rest der Liste) Einfügen eines Elementes: 7 Löschen eines Elementes: (*) Implementierung in Java: nicht notwendig gleichartige Elemente, Elemente sind Objektreferenzen der Klasse Object Eine grundlegende Datenstruktur kennenlernen Konzept und elementare Operationen erläutern Judy Bishop: Java lernen, 3.Aufl., Abschnitt 8.3 Wie entfernt man das erste Element einer Liste? Vorlesung Software-Entwicklung / Folie 68

77 Implementierung linearer Listen SWE-69 Klasse Node für Paare (Element, Rest der Liste): class Node { Node (Object d, Node n) {data = d; link = n; ein Objekt dazu: Object data; Node link; 5 Objektvariable sind von aussen zugänglich (für die ADT-Klasse List, siehe SWE-71) Die vordefinierte Klasse Object umfasst Objektreferenzen beliebiger Klassen Deklaration einer Listenvariable, initialisiert mit einer 1-elementigen Liste: Node list = new Node (new Integer (5), null); Element muß ein Objekt sein, also Wrapper (envelope) für Werte von Grundtypen null: vordefinierter Name für die einzige Referenz, die kein Objekt identifiziert Vorlesung Software-Entwicklung / Folie 69 Java-Implementierung linearer Listen verstehen Hilfsklasse Node: nur Konstruktor und Objektvariable Elementtyp Object: wie bei allen Behälterklasse, z. B. für Wörterbücher Judy Bishop: Java lernen, 3.Aufl., Abschnitt 8.3 Ersetzen Sie in der Deklaration der Klasse BinTree ( Folie 41) den Typ char durch die Klasse Object. Schreiben Sie eine mehrelementige Liste als geschlossenen Ausdruck.

78 Elementare Operationen mit linearen Listen Aufbauen einer Liste in umgekehrter Reihenfolge: Node list = null; for (int i = n; i > 0; i--) list = new Node (new Integer (i), list); Einen Elementwert zahl in der Liste suchen: Integer zahlobj = new Integer (zahl); Node l = list; while (l!= null) { if (l.data.equals (zahlobj)) break; // s.u. (*) l = l.link; String s = ((l == null)? s = " not" : ""); // bedingter Ausdruck System.out.println (zahl + s + " found"); Ein Element d nach dem Paar l einfügen (l sei!= null): l.link = new Node (d, l.link); Ein Paar l mit Vorgänger prev löschen (l, prev seien!= null): prev.link = l.link; Bei allen Operationen die Sonderfälle am Anfang und Ende der Liste beachten! (*) equals ist für die Klasse Object definiert und wird von den Wrapper-Klassen als Wertvergleich spezialisiert. SWE-70 Vorlesung Software-Entwicklung / Folie 70 Umgang mit linearen Listen lernen Operationen an Bildern verdeutlichen Judy Bishop: Java lernen, 3.Aufl., Abschnitt 8.3 Listen von Strings implementieren, E/A dafür und Suchen darin Wie fügt man ein Element VOR einem anderen ein?

79 Abstrakter Datentyp Liste ADT- Operationen für Listen mit verschieblicher Position zum Lesen, Einfügen und Löschen: start prev now aktuelle Position: SWE-71 class List { List(); // Konstruktor public void insert (Object x) // Element x hinter akt. Pos. einfügen { Node newelem = new Node (x, null); // und neues Element wird aktuelle Position if (start == null) // Liste ist leer { start = newelem; now = newelem; else if (now == null) // Position ist außerhalb der Liste, am Anfang einfügen { newelem.link = start; start = newelem; now = newelem; prev = null; else { newelem.link = now.link; now.link = newelem; prev = now; now = newelem; public void remove () { public Object current () { public void succ() { public void reset () { public boolean iseol () { public boolean isempty () { private Node start, prev, now; // Element löschen // Wert des Elementes // Position weitersetzen // Position an den Anfang // ist die Position außerhalb der Liste? // ist die Liste leer? // die 3 lokalen Variablen Vorlesung Software-Entwicklung / Folie 71 ADT Liste mit Position kennenlernen Abstraktion und Technik erläutern Judy Bishop: Java lernen, 3.Aufl., Abschnitt 8.3 Vervollständigen Sie die Implementierung Eine Implementierung ohne die Objektvariable prev wäre auch möglich. Was ist ihr wesentlicher Nachteil?

80 Anwendung des ADT List: Nelsons Kaffeeladen SWE-72 Das Array für die Lieferungen zu jeder Kaffeesorte wird durch ein List-Objekt ersetzt: import List; class Coffee { boolean newbatchin (BufferedReader in) throws IOException {... BatchStock.insert (batch); // gelesene Lieferung einfügen double sell (Double tosell) // eine Menge Kaffee verkaufen {... // die Liste der Lieferungen durchlaufen: for (BatchStock.reset();!BatchStock.isEol(); BatchStock.succ()) { Batch b = (Batch)BatchStock.current(); //... gewünschte Menge aus den Lieferungen entnehmen return tosell;... private List BatchStock = new List (); Ebenso in der Klasse CoffeeShop ein List-Objekt mit den Kaffeesorten einführen. Vorlesung Software-Entwicklung / Folie 72 Den ADT List benutzen lernen Anwendung der Listenoperationen am Beispiel zeigen Judy Bishop: Java lernen, 3.Aufl., Abschnitt 8.4 Vervollständigen Sie das Kaffeeladen-Programm und testen es. Begründen Sie weshalb es einfacher ist, den ADT List anzuwenden als lineare Listen direkt zu programmieren. Zeigen Sie, wo im Programm Objekte an den Typ Object und vom Typ Object an einen anderen angepasst werden.

81 Objektorientierte Abstraktion SWE-73 Abstraktion auf der Ebene von Klassen (Beziehungen zwischen Klassen) verbessert den Programmentwurf, steigert die Wiederverwendbarkeit, macht objektorientierte Bibliotheken einfach nutzbar. 1. Schnittstellenabstraktion (interfaces): eine Schnittstelle wird von mehreren Klassen implementiert und von anderen benutzt; z. B. eine Sortiermethode für Objekte aller Klassen, die eine Vergleichsmethode lessthan implementieren. 2. Spezialisierung/Generalisierung (Vererbung, inheritance): speziellere Klassen zu allgemeineren Oberklassen zusammenfassen; z. B. Klasse Geometrics fasst Circles und Rectangles zusammen. 3. Wiederverwendung (Vererbung, inheritance): Aus gegebenen Klassen Unterklassen ableiten und bestimmte Methode ausfüllen; z. B. aus der Bibliotheksklasse Frame alle Methoden in eine Unterklasse übernehmen, nur die Methode paint individuell ausfüllen (siehe SWE-13, Olympische Ringe). Vorlesung Software-Entwicklung / Folie 73 Vorschau auf mehrere Abstraktionsmethoden Erläuterung der Beispiele Judy Bishop: Java lernen, 3.Aufl., Abschnitt 9.1 Schlagen Sie die 3 angesprochenen Beispiele nach. Begründen Sie den Nutzen der Abstraktionen an den drei Beispielen.

82 Schnittstellenabstraktion, Interfaces SWE-74 Objekte verschiedener Klassen werden einheitlich benutzt. Sicht auf Objekte ist durch das Interface begrenzt: nur spezifizierte Methoden sind benutzbar. Interface spezifiziert Methoden Sortiermethode: Sortable [] arr arr[i].lessthan(..) Sortable lessthan Fernsteuerung Movable start, turn, KlasseA KlasseB Circles Batch Plane Car Bike Methoden Methoden lessthan lessthan start turn... start turn... start turn bei Prof. Dr. Uwe Kastens Klassen implementieren die Methoden, die im Interface spezifiziert sind - und weitere Vorlesung Software-Entwicklung / Folie 74 Prinzip der Schnittstellen verstehen Erläuterung: Verallgemeinerung durch Einschränkung Judy Bishop: Java lernen, 3.Aufl., Abschnitt 9.1 Geben Sie weitere entsprechende Beispiele

83 Interfaces in Java SWE-75 Interface (Schnittstelle) in Java: Eine benannte Menge von Methodenspezifikationen - ohne deren Implementierung: interface Movable { boolean start (); void stop (); boolean turn (int degrees); Klassen können bestimmte Interfaces implementieren (auch mehrere): class Bike implements Movable { public boolean start () {... // Implementierung von stop und turn sowie weiterer Methoden... class Car implements Movable, Motorized { // Implementierung der Methoden aus Movable und Motorized, sowie weiterer... Interfaces werden als Typabstraktion verwendet (Typ von Variablen): Movable vehicle;... vehicle = new Bike();... vehicle.turn(20);... Typische Anwendung: Spezifikation von Eigenschaften (Movable), oder Rollen, damit Algorithmen möglichst allgemein formuliert werden können: void drive (Movable vehicle, Coordinate from, Coordinate to) { vehicle.start ();... vehicle.turn (45);... vehicle.stop (); Vorlesung Software-Entwicklung / Folie 75 Interfaces in Java kennenlernen An typischen Anwendungen Interfaces erläutern Judy Bishop: Java lernen, 3.Aufl., Abschnitt 9.3 Suchen Sie Beispiele für Interfaces aus Java-Bibliotheken Erläutern Sie, welche Methoden von den beiden Aufrufen vehicle.turn(...); ausgeführt werden.

84 Beispiel: Interface für Sortierfunktionen SWE-76 Sortierfunktionen können unabhängig von dem Elementtyp formuliert werden. Voraussetzung: es gibt eine Ordnungsfunktion für den Elementtyp: interface Sortable { boolean lessthan (Sortable a); static void selectsort (Sortable [] arr) { // am Ende ist arr sortiert, so dass für kein i gilt: arr[i+1].lessthan(arr[i]) for (int left = 0; left < arr.length-1; left++) { // find smallest element from left to last int min = left; for (int j = left+1; j < arr.length; j++) if (arr[j].lessthan (arr[min])) min = j; // swap elements left and min: Sortable tmp = arr[min]; arr[min] = arr[left]; arr[left] = tmp; class Circles implements Sortable { public boolean lessthan (Sortable a) { return radius < ((Circles) a).getradius(); // unsicher implementiert... Circles [] cirarr;... selectsort (cirarr);... Vorlesung Software-Entwicklung / Folie 76 Wirksamkeit der Schnittstellenabstraktion erkennen Erläuterungen dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt 9.3 Wenden Sie die Sortierfunktion für Arrays verschiedener Klassen als Elementtypen an. Weshalb braucht man hier Wrapper-Klassen? Warum ist das Cast-Konstrukt in der Methode lessthan unsicher? Wie kann man es sicher machen?

85 Keller: Interface und Implementierung public interface Stack { void push (Object x); void pop(); Object top (); boolean isempty(); import java.util.vector; SWE-76a public class VectorStack implements Stack { private Vector elems; // Kellerelemente VectorStack () { elems = new Vector (); public void push( Object x ) { elems.addelement (x); // neues Element oben anfuegen public void pop() // Falls Stack nicht leer oberstes Element entfernen { if (!elems.isempty()) elems.removeelementat (elems.size()-1); public Object top() // Falls Keller nicht leer oberstes Element { if (!elems.isempty()) // sonst kein Element zurückgeben return elems.lastelement (); else return null; public boolean isempty() { return elems.isempty (); Vorlesung Software-Entwicklung / Folie 76a Beispiel für ADT-Implementierungen abstrahiert durch Interface Erläuterungen dazu Die Lösung der Aufgabe 23 zeigt eine weitere Implementierung des Kellers mit einer linaren Liste. Judy Bishop: Java lernen, 3.Aufl., Abschnitt 9.3

86 Beispiel zur Implementierung eines Interface: Enumeration Schnittstelle zum Aufzählen der Elemente eines Behälter-Objektes, definiert in java.util: public interface Enumeration { boolean hasmoreelements(); Object nextelement(); Erweiterung der Klasse List, so dass sie Enumerations erzeugen kann: class List {... // Eine innere Klasse implementiert Enumeration für List: class ListEnum implements Enumeration { Node current = start; // Objektvariable initialisiert mit dem Listenanfang SWE-77 public boolean hasmoreelements() { return current!= null; // Schnittstellenmethode public Object nextelement() // Schnittstellenmethode { if (current!= null) { Object result = current.data; // Wert des Listenelementes current = current.link; // nächstes Paar return result; else throw new NoSuchElementException("List Enumeration"); public Enumeration elements () // Methode zur Erzeugung eines { return new ListEnum (); // "Enumeration"-Objektes Ein Interface implementieren lernen Erläuterungen zu: Enumeration als Interface inneren Klassendeklarationen Methoden des Interface Vorlesung Software-Entwicklung / Folie 77 Judy Bishop: Java lernen, 3.Aufl., Abschnitt 9.3 (Interface), 6.5 (Enumeration), 8.2 (Innere Klassen) /local/doc/java/docs/api/java.util.enumeration.html Erzeugen Sie zu einem List-Objekt zwei Enumeration-Objekte und zeichnen sie alle beteiligten Objekte. Der Name der inneren Klasse ListEnum wird außerhalb der Klassendeklaration von List nicht verwendet. Aber Objekte der Klasse ListEnum werden außerhalb verwendet! Wie ist das möglich?

87 Implementierung von Enumeration für den ADT List Interface und Klassen Enumeration hasmoreelements nextelement lotto Objekte enum SWE-77a Hashtable HashEnum List start prev now ListEnum current Klassen mit inneren Klassen, die das Interface Enumeration implementieren :List start prev now :ListEnum current List lotto = new List(); lotto.insert (new Integer (7));... Enumeration enum = lotto.elements(); while (enum.hasmoreelements()) {... enum.nextelement() Klassen und Objekte zu Folie 77 verstehen Erläuterungen dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt 9.3 Vorlesung Software-Entwicklung / Folie 77a

88 Zusammenfassung zur Schnittstellenabstraktion SWE-77b Typische Anwendungsfälle: 1. Abstraktion von Eigenschaften, charakterisiert durch die Schnittstellenoperationen; z. B. Interfaces Movable, Sortable, Motorized 2. Abstraktion von gleichartigen Operationen unterschiedlicher Klassen; z. B. Interface Enumeration: Elemente von Behälter-Objekten aufzählen 3. Abstraktion unterschiedlicher Implementierungen abstrakter Datentypen; z. B. Interface mit Kelleroperationen für verschiedene Implementierungen von Kellern Anwendungsmuster: Anwendung: Interface als Typ verwenden; Methoden des Interface auf Objekte anwenden Interface: nur notwendige Methoden spezifizieren Klassen: Methoden des Interface implementieren Typischen Einsatz von Interfaces erkennen Vorlesung Software-Entwicklung / Folie 77b Erläuterungen dazu und Beispiel der Keller-Implementierungen Judy Bishop: Java lernen, 3.Aufl., Abschnitt 9.3 Die typischen Anwendungsfälle sind hier aus der Sicht des Entwurfs eines Interface dargestellt. Betrachten Sie nun eine einzige Klasse und geben Sie Beispiele für Interfaces unterschiedlicher Art, die die Klasse implementiert.

89 Entwurfsmuster Visitor SWE-77c Entwurfsmuster (Design Pattern): Beschreibung kooperierender Klassen und Objekte zur Lösung einer allgemeinen Entwurfsaufgabe, die immer wieder in unterschiedlichen Ausprägungen auftritt. Ziel: möglichst unabhängige, wiederverwendbare, wartbare Programmteile. Visitor ist eines von 23 Entwufsmustern in E. Gamma, et.al.: Design Patterns, Addison-Wesley, 1995 Datenstruktur mit Methode zum Durchlaufen: an jedem Knoten wird die visit-methode eines nicht festgelegten Visitors aufgerufen Anwendungen: verschiedene Klassen mit Implementierungen der visit-methode für unterschiedliche Aufgaben. BinTree accept (TreeVisitor v) {... v.visit (this);... TreeVisitor void visit (BinTree b); TreeNodeCounter TreeNodeModifier visit (BinTree n) visit (BinTree n) this: das Objekt, auf das die Objektmethode gerade angewandt wird. {...count... {... modify... Vorlesung Software-Entwicklung / Folie 77c Ein Entwurfsmuster kennenlernen Erläuterung, des Prinzips Bezug zu Aufgabe 27 Bedeutung von this Judy Bishop: Java lernen, 3.Aufl., Abschnitt 9.3 E. Gamma, et.al.: Design Patterns, Elements of Reusable Object-oriented Software, Addison-Wesley, 1995 Aufgabe 27 auf Blatt 9 Vergleichen Sie den Visitor mit dem Enumeration Interface, mit dem auch Datenstrukturen durchlaufen werden.

90 Vererbung SWE-78 Vererbung (Inheritance): hierarchische Relation zwischen Klassen zur Spezialisierung: Objekte einer Unterklasse können wie Objekte der Oberklasse behandelt werden. Wiederverwendung: Unterklasse erbt die Implementierung der Oberklasse Oberklasse allgemeiner spezieller Unterklasse Beispiele: Geometrics Circles Rectangles Diesel Motor Elektro Benziner Lebewesen Tiere Pflanzen Pflanzenfresser Bäume Elephanten Nashörner... Eichen Einfache Vererbung (Java): Vererbungsrelation ist ein Baum. Die Klasse Object ist in Java implizit die Wurzel jedes Vererbungsbaumes. Bildung von Objekten ist meist nur für Klassen an den Blättern sinnvoll - Oberklassen sind Abstraktionen. Vorlesung Software-Entwicklung / Folie 78 Spezialisierungshierarchien kennenlernen Spezialisierung erläutern Kontrast der Beziehungen: ist-ein und hat-ein häufiger Entwurfsfehler Judy Bishop: Java lernen, 3.Aufl., Abschnitt 9.2) Weitere Beispiele für Spezialisierungen angeben Warum sind bei diesen Hierarchien nur Objekte von Blattklassen sinnvolle Modellierungen?

91 Beispiel für Vererbung SWE-79 abstract class Geometrics class Circles extends Geometrics { int getx () { return x; { double getradius () int gety () { return y; { return radius; void move (int dx, int dy) void grow (double dr) { x += dx; y += dy; { radius += dr; Geometrics (int ix, int iy) Circles (int ix, int iy, double ir) { x = ix; y = iy; { super (ix, iy); radius = ir; private int x,y; :Circles x y radius private double radius; class Rectangles extends Geometrics { Rectangles (int ix, int iy, double l, double w) { super (ix, iy); length = l; width = w;... Oberklasse Geometrics ist als abstract gekennzeichnet: keine Objekte dieser Klasse Circles und Rectangles erben die x-, y-koordinaten und die Methoden darauf Circles und Rectangles definieren weitere, speziellere Methoden und Objektvariable Vorlesung Software-Entwicklung / Folie 79 Nutzen der Vererbung erkennen Inhalt von Objekten super-konstruktor Judy Bishop: Java lernen, 3.Aufl., Abschnitt 9.2 Vervollständigen Sie die Implementierung Suchen Sie Beispiele für Spezialisierungshierarchien aus einer Java-Klassenbibliothek Erläutern Sie die Bedeutung der Koordinaten der Oberklasse in bezug auf jede der Unterklassen.

92 Polymorphie: Variablentypen SWE-80 Polymorphie (Vielgestaltigkeit): Objekte verschiedener Unterklassen können wie ein Objekt der gemeinsamen Oberklasse behandelt werden. D. h. allgemeinere Methoden der Oberklasse können auf speziellere Objekte von Unterklassen angewandt werden. Beispiele für Ober- und Unterklassen als Variablentypen: Circles cir = new Circles (1, 2, 3.0); Rectangles rec = new Rectangles (3, 4, 5.0, 6.0); Geometrics geo; Variable abstrahiert von der Art der Figur geo = cir; geo.move (1, 1); geo = rec; geo.move (2, 3); rec = (Rectangles)geo; rec = geo; Typausweitung: Circles -> Geometrics Aufruf einer allgemeinen Methode wie oben einengendes Type cast: Geometrics -> Rectangles kann ClassCastException auslösen Fehler bei der Übersetzung Gleiches gilt für Interfaces und Klassen, die sie implementieren: Movable vehicle = new Car(); Car meinauto = (Car)vehicle; Oberklassen als allgemeinere Typen verstehen Polymorphie, Typregeln und Beispiele erläutern Erläutern Sie die Anpassungen der Objektreferenzen. Vorlesung Software-Entwicklung / Folie 80

93 Polymorphie: dynamische Methodenbindung SWE-81 Dynamische Methodenbindung (Prinzip von OO-Sprachen, neben Klassen und Vererbung): Welche Methode aufgerufen wird bestimmt die Klassenzugehörigkeit des Objektes zur Laufzeit - nicht der Typ der Variablen, die die Objektreferenz enthält. Dynamische Methodenbindung bei Interface-Typen: Movable vehicle =...; vehicle.start(); Dynamische Methodenbindung durch überschreiben: In einer Unterklasse können Methoden definiert werden, die mit gleichem Namen, gleichen Typen von Parametern und Ergebnis auch in einer Oberklasse definiert sind. Sie überschreiben die der Oberklasse. Sie sollten konzeptuell das gleiche leisten, nur spezieller. abstract class Motor class Diesel extends Motor { void on () {... { void glueh () {... void off () {... void on () // überschreibt void accelerate (...) {... { glueh(); super.on(); class Elektro extends Motor... Ein Aufruf m.on() führt je nach Inhalt von m auf die Motor-, Diesel- oder Elektro-Methode. Dynamische Methodenbindung bei abstrakten Methoden (siehe SWE-82): In der Klasse Motor kann man die Implementierung der Methode on durch eine Spezifikation der Methode on ersetzen. (Es gibt keine allgemeinen Motor-Objekte.) Vorlesung Software-Entwicklung / Folie 81 Die Konzepte "Überschreiben" und "dynamisches Binden" von Methoden verstehen Erläuterungen am Beispiel Vergleich zu einer Fallunterscheidung über Unterklassen Judy Bishop: Java lernen, 3.Aufl., Abschnitt 9.2 Implementieren Sie die Beispiele und überzeugen sich von der Wirkung der dynamischen Bindung.

94 Abstrakte Methoden und Klassen SWE-82 Abstrakte Methode: Spezifikation einer Methode ohne ihre Implementierung; d. h. nur Name, Ergebnistyp und Parametertypen (Signatur der Methode, wie in Interfaces). Sie muß in jeder Unterklasse implementiert werden. Abstrakte Klasse: Eine Klasse, zu der man keine Objekte bilden kann - nur zu ihren Unterklassen. Nur solche Klassen dürfen abstrakte Methoden haben. Zweck: Eine allgemeine Aufgabe (z. B. Fläche berechnen) wird in der Oberklasse spezifiziert und in den Unterklassen unterschiedlich implementiert: abstract class Geometrics class Circles extends Geometrics {... {... abstract double area (); double area ()... { return Math.PI*radius*radius;... g.area() kann für eine Variable g vom Typ Geometrics aufgerufen werden; dynamische Methodenbindung findet die zum Objekt passende Implementierung. Abstrakte Klassen liegen in der Vererbungshierarchie (Interfaces liegen daneben). Abstrakte Klassen können auch implementierte Methoden und Objektvariable haben (anders als Interfaces). Vorlesung Software-Entwicklung / Folie 82 Abstrakte Methoden in Oberklassen kennenlernen Bezug zum Überschreiben von Methoden Gegenüberstellung zu Interfaces 9.4 Welche der Klassen auf Folie 78 wird man wohl als abstrakte Klassen realisieren?

95 Zusammenfassung zur Vererbung SWE-82a Die Unterklasse B erbt Methoden und Variable von der Oberklasse A; d. h. die Methoden und Variable von A sind auch für B definiert. Ein B-Objekt kann wie ein A-Objekt behandelt werden: - zu einem B-Objekt Methoden aufrufen, die in A definiert sind - Referenz des B-Objektes an eine Variable vom Typ A zuweisen. Ein B-Objekt enthält auch Objektvariable, die in A definiert sind. Oberklasse class A class B extends A Unterklasse Ein B-Objekt bleibt immer ein B-Objekt, auch wenn seine Referenz an Variable anderen Typs zugewiesen wird. In den Methodendefinitionen von B können Methoden von A aufgerufen und Variable von A benutzt werden, sofern sie nicht private sind. Regeln zur Vererbung in der Zusammenfassung Erläuterungen dazu am Beispiel von SWE-79 Judy Bishop: Java lernen, 3.Aufl., Abschnitt 9.2 Vorlesung Software-Entwicklung / Folie 82a

96 Vererbung und verwandte Konzepte SWE-82b Sei A eine Oberklasse von B und in A sei eine Methode m implementiert, z. B. class A { int m (String s) { class B extends A { Wenn in B m nicht definiert ist, erbt B die Methode m. 2. Wenn in B eine Methode m mit gleichen Parametertypen definiert ist, überschreibt sie das m aus A. Der Ergebnistyp muss dann auch gleich sein. 3. Wenn in B eine Methode m definiert ist, deren Parametertypen sich von denen von m in A unterscheiden, dann sind die beiden Methoden in B überladen. Ebenso, wenn in A eine weitere Methode m mit anderen Parametertypen definiert wird. 4. Wenn B Klassenmethode (static) m definiert, deren Parametertypen mit denen von m in A übereinstimmt, dann verdeckt m in B die Methode m in A, d. h. m aus A ist in B nicht sichtbar. m in A muss dann auch static sein. Sei A eine Oberklasse von B und in A sei eine Methode m spezifiziert, z. B. abstract class A { abstract int m (String s);... class B extends A { Wenn B nicht abstract ist, muss in B m mit denselben Parameter- und Ergebnistypen implementiert werden. Vorlesung Software-Entwicklung / Folie 82b Unterschiede der Konzepte verstehen Zu jedem der 5 Konzepte wird ein Beispiel graphisch mit Ober- und Unterklasse gezeigt und erläutert. Judy Bishop: Java lernen, 3.Aufl., Abschnitt 9.2

97 Wiederverwendung von Klassen aus Bibliotheken SWE-83 Die Klasse java.awt.frame implementiert gerahmte Fenster in graphischen Benutzungsoberflächen (GUI). Sie ist eine Blattklasse in der Hierarchie der GUI-Komponenten: java.lang.object java.awt.component java.awt.container java.awt.window java.awt.frame GUI-Komponenten solche, die wieder Komponenten enthalten können Fenster ohne Rahmen Fenster mit Rahmen Methoden zum Zeichnen, Plazieren, Bedien-Ereignisse Behandeln, etc. sind auf den jeweils passenden Hierarchieebenen implementiert. In der abstract class Component ist die Methode public void paint (Graphics g) definiert, aber nicht ausgefüllt. Mit ihr wird auf der Fläche des Fensters gezeichnet. Benutzer definieren Unterklassen von Frame. Sie erben die Funktionalität der Oberklassen. Die Methode paint wird überschrieben mit einer Methode, die das Gewünschte zeichnet: class Rings extends Frame { public Rings () { settitle ("Olympic Rings"); public void paint (Graphics g) { // draw olympic rings... public static void main (String [] args) { Frame f = new Rings();... Vorlesung Software-Entwicklung / Folie 83 Einsatz von OO-Techniken zur Wiederverwendung Einen Eindruck von Umfang und Komplexität der geerbten Methoden vermitteln Judy Bishop: Java lernen, 3.Aufl., Abschnitt 9.2, 9.4 Schlagen Sie die Klasse Frame in der Java-Dokumentation nach. Schlagen Sie das Programm "Olympic Rings" auf Folie 13 und im Buch nach.

98 Klassenhierarchie für Komponenten von Benutzungsoberflächen Teil der Standardbibliothek java.awt (abstract windowing toolkit) SWE-84 Klasse in der Hierarchie Kurzbeschreibung Component (abstract) darstellbare Komponenten von Benutzungsoberflächen Container (abstract) Behälter für Komponenten Panel konkrete Klasse zu Container, Behälter für Komponenten ScrollPane Sicht auf große Komponente, 2 Rollbalken Window Fenster (ohne Rand, Titel, usw.); Wurzel der Objektbäume Dialog Fenster; fordert interaktive Bearbeitung FileDialog Fenster zur interaktiven Dateiauswahl Frame Fenster mit Rand, Titel, Menüleiste; veränderbare Größe Button Schaltknopf Canvas frei verwendbare rechteckige Zeichenfläche CheckBox An/Aus-Schalter Choice Auswahl aus einer Liste von Texten (ausklappbar) List Auswahl aus einer Liste von Texten (mit Rollbalken) Scrollbar Rollbalken zur Einstellung eines ganzzahligen Wertes Label Textzeile TextComponent edierbarer Text TextField einzelne Textzeile TextArea mehrzeiliger Text mit Rollbalken Beispiel für eine realistische Klassenhierarchie Erläuterungder Hierarchiebeziehungen Judy Bishop: Java lernen, 3.Aufl., Abschnitt 9.2, 9.4 /local/doc/java/docs/api/package-java.awt.html Vorlesung Software-Entwicklung / Folie 84 Welche Klassen unterscheiden sich nur in ihrer grafischen Darstellung - nicht in ihrer Funktion? (gemäß der Kurzbeschreibung)

99 Einige Eigenschaften auf den Ebenen der Frame-Hierarchie Klasse Datenelemente Ereignisse Methoden Component Location, Size, Key, Mouse, paint Bounds, Visible Focus, Component Container Layout Container add, getcomponents, paint Window Locale Window show, pack, toback, tofront SWE-85 Frame Title, MenuBar, Resizable, IconImage Namenskonventionen: zum Datenelement XXX gibt es die Methoden getxxx und ggf. setxxx Ereignisse sind Objekte der Klassen YYYEvent Vorlesung Software-Entwicklung / Folie 85 Beispiele für Daten und Methoden in einer realen Klassenhierarchie Begründungen für die Anordnung der Eigenschaften in der Hierarchie Judy Bishop: Java lernen, 3.Aufl., Abschnitt 9.2, 9.4 /local/doc/java/docs/api/package-java.awt.html Suchen Sie entsprechend Daten und Methoden der Klasse TextComponent und ihrer Unterklassen.

100 Graphische Benutzungsoberflächen Graphische Benutzungsoberflächen (graphical user interfaces, GUI) dienen zur interaktiven Bedienung von Programmen, Ein- und Ausgabe mit graphischen Techniken und visuellen Komponenten SWE-86 Javas Standardbibliothek jawa.awt (abstract windowing toolkit) enthält wiederverwendbare Klassen zur Implementierung und Benutzung der wichtigsten GUI-Komponenten: Graphik GUI-Komponenten (siehe SWE-84) Plazierung, Layoutmanager Ereignisbehandlung (java.awt.event) Bildmanipulation Vorlesung Software-Entwicklung / Folie 86 Thema einführen Beispiel erläutern interaktive E/A statt Eingabeströme Interaktion mit graphischen Objekten Wiederverwendung aus der AWT-Bibliothek Judy Bishop: Java lernen, 3.Aufl., Abschnitt 10.1 Welche Ein- und Ausgaben sowie Ereignisse erkennen Sie an dem Beispielbild?

101 Graphische Darstellung von AWT-Komponenten SWE-87 Label Button Checkbox Choice List Window Frame ScrollPane Dialog FileDialog Scrollbar TextField TextArea Panel Vorlesung Software-Entwicklung / Folie 87 Anschauliche Vorstellung der Komponenten Funktion der Komponenten erläutern Judy Bishop: Java lernen, 3.Aufl., Abschnitt 10.2 Folie 84, Folie 85 Welche Komponenten enthalten wiederum Komponenten?

102 Programmschema: Fenster mit Zeichenfläche SWE-88 import java.awt.*; import java.awt.event.*; // Hauptklasse als Unterklasse von Frame: class GraphicWarning extends Frame { GraphicWarning (String title) // Konstruktor { super (title); // Aufruf des Konstruktors von Frame setbackground (Color.cyan); public void paint (Graphics g) // überschreibt paint in einer Oberklasse { g.drawrect (2*letter, 2*line, 30*letter, 6*line);// auf der Fläche g g.drawstring ("W A R N I N G", 9*letter, 4*line); // zeichnen und // schreiben public static void main (String[] args) { Frame f = new GraphicWarning ("Draw Warning"); // Objekt erzeugen f.setsize (35*letter,6*line); // Größe festlegen f.setvisible (true); // führt zu erstem Aufruf von paint f.addwindowlistener // Ereignisbehandlung: Beim Drücken des (new WindowAdapter () { public void windowclosing(windowevent e) { System.exit(0); ); static private final int line = 15, letter = 5; // Schließknopfes Programm beenden. // zur Positionierung Vorlesung Software-Entwicklung / Folie 88 Schema für ein vollständiges Programm kennenlernen Struktur und Aufgaben erläutern Judy Bishop: Java lernen, 3.Aufl., Abschnitt 10.2, Example 10.1 Wie verändern Sie das Programm, so dass zwei gleiche Fenster erzeugt werden?

103 Ablauf des Programms von SWE-88 SWE main aufrufen: 2. GraphicWarning Objekt erzeugen, Konstruktor aufrufen: 3. Frame-Konstruktor aufrufen 4. Eigenschaften setzen, z. B. Farben, 5. ggf. weitere Initialisierungen des Fensters 6. Objekt an f zuweisen 7. Größe festlegen, f.setsize (...), (evtl. besser bei 4.) 8. Fenster sichtbar machen, f.setvisible(true): weiter in Methoden der Oberklassen: 9. Graphics Objekt erzeugen 10. damit erstmals paint aufrufen (immer wieder, wenn nötig): weiter in paint von GraphicWarning 11. auf der Zeichenfläche des Parameters g schreiben und zeichnen 12. Reaktion auf das Drücken des Schließknopfes vorbereiten, f.addwindowlistener 13. ggf. weitere Anweisungen zur Programmausführung 15. Schließknopf Drücken weiter in Methoden der Oberklassen: 16. windowclosing des WindowListener aufrufen weiter in paint von GraphicWarning 17. Programm beenden, exit(0) Vorlesung Software-Entwicklung / Folie 89 Programmablauf verstehen Objekt zeigen Ablauf erläutern 3 Stellen zur Erweiterung des Schemas Judy Bishop: Java lernen, 3.Aufl., Abschnitt 10.2, Example 10.1 Kopieren Sie das Programm aus der Programmsammlung, führen Sie es aus und variieren es. Zu welchen Gelegenheiten wird paint aufgerufen? Wie kann eine Bibliotheksmethode Aufrufe von paint-methoden enthalten, die noch gar nicht geschrieben sind?

104 Beispiel: Balkendiagramm zeichnen public void paint (Graphics g) SWE-90 { int x = 50, y = 300; // Schnittpunkt der Achsen int width = 20, gap = 5; // Balken und Zwischenraum g.drawline (x,y,x+12*(width+gap),y); g.drawline (x,y,x,30); // x-achse // y-achse for (int m = 0; m < 12; m++) // Monate an der x-achse g.drawstring(months[m],m*(width+gap)+gap+x,y+20); for (int i = 0; i <y; i+=100) g.drawstring(string.valueof(i),20,y-i); // Werte an der y-achse g.setfont(new Font("SansSerif",Font.BOLD,14)); g.drawstring("savanna Rainfall Chart",120,40); // Überschrift g.setcolor(color.red); // die Balken for (int month = 0; month < 12; month++) { int a = (int) raintable[month]*10; g.fillrect(month*(width+gap)+gap+x, y-a,width,a); static double[] raintable = new double[12]; static String Months [] = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"; Vorlesung Software-Entwicklung / Folie 90 Umfangreicheres Beispiel zum Zeichnen Operationen erläutern Koordinaten der Zeichenfläche Judy Bishop: Java lernen, 3.Aufl., Abschnitt 10.2, Example 10.2 Folie 90a Kopieren Sie das Programm aus der Programmsammlung, führen Sie es aus und variieren es.

105 Ergebnis zum Programm von SWE-90 SWE-90a Vorlesung Software-Entwicklung / Folie 90a Bild zu SWE-90 Erläuterung zusammen mit SWE-90 Unzulänglichkeiten zeigen, begründen, beheben Judy Bishop: Java lernen, 3.Aufl., Abschnitt 10.2, Example 10.2 Folie 90

106 AWT-Komponenten anwenden SWE-91 Ein einfaches Beispiel für Text und Schaltknöpfe: Aufgaben zur Herstellung: Aussehen: Label- und Button-Objekte generieren Anordnung der Komponenten festlegen Ereignisse: ein Listener-Objekt mit den Buttons verbinden call-back-methode für Buttons implementieren Vorlesung Software-Entwicklung / Folie 91 Aufgaben zum Umgang mit AWT-Komponenten kennenlernen Aufgaben am Beispiel erläutern Judy Bishop: Java lernen, 3.Aufl., Abschnitt 10.3

107 Komponenten plazieren SWE-92 Die Klasse Container (Oberklasse von Frame) sorgt für die Plazierung der Komponenten, die ein Container-Objekt enthält. Dazu wird für den Container ein LayoutManager installiert; z. B. mit folgender Anweisung im Konstruktor der Unterklasse von Frame: setlayout (new FlowLayout (FlowLayout.CENTER)); Er bestimmt die Anordnung der Komponenten nach einer speziellen Strategie; z. B. FlowLayout ordnet zeilenweise an. Komponenten werden generiert und mit der Methode add dem Container zugefügt, z. B. add (new Label ("W A R N I N G"));... Button waitbutton = new Button ("Wait"); add (waitbutton);... Die Reihenfolge der add-aufrufe ist bei manchen LayoutManagern relevant. Wird die Gestalt des Containers verändert, so ordnet der LayoutManager die Komponenten ggf. neu an. Vorlesung Software-Entwicklung / Folie 92 Prinzip der LayoutManager verstehen Notwendigkeit von LayoutManagern verstehen: Pixel-Koordinaten sind inflexibel und unhandlich LayoutManager bestimmen Komponenten zufügen Judy Bishop: Java lernen, 3.Aufl., Abschnitt 10.3

108 Programmschema zum Plazieren von Komponenten SWE-93 import java.awt.*; import java.awt.event.*; class FlowTest extends Frame // Definition der Fenster-Klasse { FlowTest () // Konstruktor { setbackground(color.cyan); // Eigenschaften des Fensters setzen setlayout(new FlowLayout(FlowLayout.CENTER)); // LayoutManager add(new Button("Diese"));... // Komponenten zufügen settitle("flow Layout (Centered)"); setsize(250,100); setvisible(true); class LayoutTry { public static void main(string[] args) { Frame f = new FlowTest(); // Ein FlowTest-Objekt erzeugen WindowListener winlisten = // Ereignisbehandlung new WindowAdapter () { public void windowclosing(windowevent e) { System.exit(0); ; f.addwindowlistener (winlisten); Vorlesung Software-Entwicklung / Folie 93 Einfaches Programmschema mit LayouManager Erläuterung von Struktur und Funktion Judy Bishop: Java lernen, 3.Aufl., Abschnitt 10.3 Man könnte auch beide Klassen zu einer zusammenfasse. Welche Vorteile haben die eine und die andere Struktur?

109 LayoutManager FlowLayout SWE-93a class FlowTest extends Frame { FlowTest () { setbackground(color.cyan); setforeground(color.black); setlayout(new FlowLayout(FlowLayout.CENTER)); add(new Button("Diese")); add(new Button("Knoepfe")); add(new Button("werden")); add(new Button("wie")); add(new Button("ein")); add(new Button("Text")); add(new Button("angeordnet.")); settitle("flow Layout (Centered)"); setsize(250,100); setvisible(true); nach Ändern der Form: Vorlesung Software-Entwicklung / Folie 93a FlowLayout kennenlernen Beispiel erläutern Judy Bishop: Java lernen, 3.Aufl., Abschnitt 10.3 Implementieren Sie die Klasse zusammen mit dem Schema von Folie 93 und erproben Sie sie.

110 LayoutManager BorderLayout SWE-93b class BorderTest extends Frame { BorderTest () { setbackground(color.cyan); setforeground(color.black); setlayout(new BorderLayout()); add(new Button("North"), BorderLayout.NORTH); add(new Button("East"), BorderLayout.EAST); add(new Button("South"), BorderLayout.SOUTH); add(new Button("West"), BorderLayout.WEST); add(new Button("C e n t e r"), BorderLayout.CENTER); settitle("border Layout"); setsize(250,100); setvisible(true); nach Ändern der Form: Vorlesung Software-Entwicklung / Folie 93b BorderLayout kennenlernen Beispiel erläutern Judy Bishop: Java lernen, 3.Aufl., Abschnitt 10.3 Implementieren Sie die Klasse zusammen mit dem Schema von Folie 93 und erproben Sie sie.

111 LayoutManager GridLayout SWE-93c class GridTest extends Frame { GridTest () { setbackground(color.cyan); setforeground(color.black); setlayout(new GridLayout(4, 3)); for (int i = 0; i < 12; i++) add(new Button((new Integer(i)).toString())); settitle("grid Layout"); setsize(250,100); setvisible(true); nach Ändern der Form: Vorlesung Software-Entwicklung / Folie 93c GridLayout kennenlernen Beispiel erläutern Judy Bishop: Java lernen, 3.Aufl., Abschnitt 10.3 Implementieren Sie die Klasse zusammen mit dem Schema von Folie 93 und erproben Sie sie.

112 Hierarchisch strukturierte Fensterinhalte SWE-94 Zusammengehörige Komponenten in einem Objekt einer Container-Unterklasse unterbringen (Panel, Window, Frame oder selbstdefinierte Unterklasse). Eigenschaften der Objekte im Container können dann gemeinsam bestimmt werden, z. B. Farbe, LayoutManager, usw. zuordnen. Mit Container-Objekten werden beliebig tiefe Baumstrukturen von AWT-Komponenten erzeugt. In der visuellen Darstellung sind sie ineinander geschachtelt. Frame-Objekt Panel-Objekte Label-Objekte Button-Objekte Vorlesung Software-Entwicklung / Folie 94 Strukturierte Fensterinhalte entwerfen Struktur des Beispiels erläutern und begründen Objekt-Bäume: Relation "hat-ein"; Klassen-Bäume: Relation "ist-ein" Herstellung des Fensters ab Folie 95 Judy Bishop: Java lernen, 3.Aufl., Abschnitt 10.4 Was würde geschehen, wenn man statt der beiden oberen Panel-Objekte nur eines verwenden würde?

113 Programm zu hierarchisch strukturiertem Fenster SWE-95 import java.awt.*; import java.awt.event.*; class LabelContainer extends Container // Klasse zur Herstellung von { LabelContainer (String[] words) // Fließtext aus String-Array { setlayout(new FlowLayout(FlowLayout.CENTER)); for (int i = 0; i < words.length; i++) add (new Label (words[i])); class LayoutComp // Hauptklasse erzeugt den Komponentenbaum { public static void main(string[] args) { String [] message = {"Possible", "virus", "detected.", "Reboot", "and", "run", "virus", "remover", "software"; Container warningtext = new LabelContainer (message);... siehe SWE-95a WindowListener winlisten = new WindowAdapter () { public void windowclosing(windowevent e) { System.exit(0); ; rootframe.addwindowlistener (winlisten); rootframe.setlocation (100,100); rootframe.setsize (160,200); rootframe.setvisible(true); Vorlesung Software-Entwicklung / Folie 95 Programmierung hierarchischer Fensterstrukturen Komponenten auf Container-Objekten unterbringen Wiederverwendung von Bibliotheksklassen: Vererbung und Erzeugung von Objekten der Bibliotheksklassen selbst LayoutManager zuordnen Eigenschaften des Wurzelobjektes Judy Bishop: Java lernen, 3.Aufl., Abschnitt 10.4 Implementieren Sie das Programm und erproben Sie es.

114 Komponentenbaum erzeugen SWE-95a // Text der Warning als Objekt der Klasse LabelContainer: Container warningtext = new LabelContainer (message); // Überschrift als Panel mit einem zentrierten Label: Panel header = new Panel(); header.setbackground(color.yellow); header.setlayout(new FlowLayout(FlowLayout.CENTER)); header.add (new Label ("W a r n i n g")); // Knöpfe im Panel mit GridLayout: Panel twobuttons = new Panel (); twobuttons.setbackground(color.lightgray); twobuttons.setlayout (new GridLayout(1, 2)); twobuttons.add (new Button ("Wait")); twobuttons.add (new Button ("Reboot")); // im Frame mit BorderLayout zusammenfassen: Frame rootframe = new Frame ("Try Containers"); rootframe.setbackground(color.cyan); rootframe.setlayout(new BorderLayout()); rootframe.add(header, BorderLayout.NORTH); rootframe.add(warningtext, BorderLayout.CENTER); rootframe.add(twobuttons, BorderLayout.SOUTH); Vorlesung Software-Entwicklung / Folie 95a Programmierung hierarchischer Fensterstrukturen Erläuterung zusammen mit Folie 94, Folie 95 Judy Bishop: Java lernen, 3.Aufl., Abschnitt 10.4 Bei welchen Anweisungen bewirkt ein Vertauschen eine Veränderung der Fensterdarstellung.

115 Ereignisse an graphischen Benutzungsoberflächen SWE-96 Interaktion zwischen Bediener und Programmausführung über Ereignisse (events): Bedien-Operationen lösen Ereignisse aus, z. B. Knopf drücken, Alternative auswählen, Mauszeiger auf eine graphisches Element schieben. Programmausführung reagiert auf solche Ereignisse durch Aufruf bestimmter Methoden Aufgaben: Folgen von Ereignissen und Reaktionen darauf planen und entwerfen Modellierung z. B. mit endlichen Automaten oder StateCharts Reaktionen auf Ereignisse systematisch implementieren AWT: Listener-Konzept; Entwurfsmuster Observer Einstieg in die Programmierung mit Ereignissen Erläuterung der Begriffe und Aufgaben Judy Bishop: Java lernen, 3.Aufl., Abschnitt 11.1 Vorlesung Software-Entwicklung / Folie 96

116 Observer -Prinzip in der Ereignisbehandlung SWE-97 An AWT-Komponenten werden Ereignisse ausgelöst, z. B. ein WindowEvent an einem Frame-Objekt: WindowListener windowclosing Beobachter für bestimmte Ereignistypen: Objekte von Klassen, die das zugehörige Interface implementieren Window Frame-Objekt Ereignis auslösen: zugehörige Methode in jedem Beobachter-Objekt aufrufen Beobachterobjekte dynamisch zuordnen... void windowclosing(...) { void windowclosing(...) { Methoden implementieren die gewünschten Reaktionen Entwurfsmuster Observer : Unabhängigkeit zwischen den Beobachtern und dem Gegenstand wegen Interface und dynamischem Zufügen von Beobachtern. Vorlesung Software-Entwicklung / Folie 97 Entwurfsmuster Observer zur Ereignisbehandlung kennenlernen Erläuterung von Gegenstand und Beobachter auf der Ebene der Klassen der Objekte der Reaktion auf Ereignisse Judy Bishop: Java lernen, 3.Aufl., Abschnitt 11.2 Begründen Sie weshalb größere Unabhängigkeit durch das Entwurfsmuster erzielt wird.

117 Programmiertechnik für Listener SWE-98 Im java.awt Package gibt es zu jedem Ereignistyp XXXEvent ein Interface XXXListener: public interface WindowListener extends EventListener { void windowactivated (WindowEvent); void WindowClosed (WindowEvent); void windowclosing (WindowEvent);...void windowopened (WindowEvent); Eine abstrakte Klasse XXXAdapter mit leeren Methodenimplementierungen: public abstract class WindowAdapter implements WindowListener { public void windowactivated (WindowEvent) {... public void windowopened (WindowEvent) { Anwendungen, die nicht auf alle Sorten von Methodenaufrufen des Interface reagieren, deklarieren eine Unterklasse und überschreiben die benötigten Methoden des Adapters, meist als innere Klasse, um den Zustand eines Objektes zu verändern: class WClose extends WindowAdapter { public void windowclosing (WindowEvent e) { System.exit (0); Zufügen eines Listener-Objektes zu einer AWT-Komponente: f.addwindowlistener (new WClose ()); Vorlesung Software-Entwicklung / Folie 98 Programmiertechnik zum Konzept der Listener Rolle von Interface und Adapter-Klasse Zuordnung des Listener-Objektes erläutern Judy Bishop: Java lernen, 3.Aufl., Abschnitt 11.2 Überschreiben Sie weitere Methoden des Interface mit einfachen Reaktionen und erproben Sie sie.

118 Innere Klassen Innere Klassen können z. B. als Hilfsklassen zur Implementierung der umgebenden Klasse verwendet werden: class List {... static class Node { Die List-Objekte und Node-Objekte sind dann unabhängig voneinander. Es wird nur die Gültigkeit des Namens Node auf die Klasse List eingeschränkt. In inneren Klassen, die nicht static sind, können Methoden der inneren Klasse auf Objektvariable der äusseren Klasse zugreifen. Ein Objekt der inneren Klasse ist dann immer in ein Objekt der äusseren Klasse eingebettet; z. B. die inneren Listener Klassen, oder auch: interface Einnehmer { void bezahle (int n); class Kasse // Jedes Kassierer-Objekt eines Kassen-Objekts { private int geldsack = 0; // zahlt in denselben Geldsack class Kassierer implements Einnehmer { public void bezahle (int n) { geldsack += n; SWE-98a Einnehmer neuereinnehmer () { return new Kassierer (); Zwei Arten innerer Klassen kennenlernen Vorlesung Software-Entwicklung / Folie 98a Die Klasse Node wird als Beispiel für eine Hilfsklasse gezeigt. Für das Beispiel "Kasse und Kassierer" wird an einem Programmstück gezeigt, wie ein Kassenobjekt Umgebung für Kassierer-Objekte ist. Judy Bishop: Java lernen, 3.Aufl., Abschnitt 8.2 Schreiben Sie ein Programmstück, das 2 Kassen-Objekte erzeugt und zu jedem mehrerer Kassierer-Objekte. Geben Sie Aufrufe von "bezahle" für die Kassierer an. Zeigen Sie an Objektdiagrammen die Verbindung der Objekte und die Wirkung der Aufrufe.

119 Anonyme Klasse SWE-99 Meist wird zu der Klasse, mit der Implementierung der Ereignisreaktionen nur ein Objekt benötigt: class WClose extends WindowAdapter { public void windowclosing (WindowEvent e) { System.exit (0); Zufügen eines Listener-Objektes zu einer AWT-Komponente: f.addwindowlistener (new WClose ()); Das läßt sich kompakter formulieren mit einer anonymen Klasse: Die Klassendeklaration wird mit der new-operation (für das eine Objekt) kombiniert: f.addwindowlistener ( new WindowAdapter () { public void windowclosing (WindowEvent e) { System.exit (0); ); In der new-operation wird der Name der Oberklasse der deklarierten anonymen Klasse (hier: WindowAdapter) oder das Interface, das sie implementiert, angegeben! Vorlesung Software-Entwicklung / Folie 99 Java-Konstrukt "anonyme Klasse" verstehen Erläuterung am Beispiel des WindowListeners Judy Bishop: Java lernen, 3.Aufl., Abschnitt 8.2, 11.2 Variieren Sie das Beispiel, so dass mehrere WindowListener- Objekte ein Fenster-Objekt beobachten und dass ein WindowListener-Objekt mehrere Fenster-Objekte beobachtet

120 Reaktionen auf Buttons SWE-100 AWT-Komponenten Button, List, MenuItem, TextField lösen ActionEvents aus. Sie werden von ActionListener-Objekten beobachtet, mit einer einzigen Methode: public void actionperformed (ActionEvent e) {... Beispiel der Virus-Warnung (Abweichung vom Stil im Buch Java Gently!): import java.awt.*; import java.awt.event.*; class ButtonTest extends Frame { private Button waitbutton, rebootbutton; ButtonTest (String title) {... waitbutton.addactionlistener // Listener für den waitbutton (new ActionListener () // anonyme Klasse direkt vom Interface { public void actionperformed(actionevent e) { setbackground(color.red); ); // (*) s.u. rebootbutton.addactionlistener // Listener für den rebootbutton (new ActionListener () { public void actionperformed(actionevent e) { setvisible(false); System.exit (0); ); // (*) s.u. (*) Die Aufrufe von setbackground und setvisible beziehen sich auf das umgebende Frame-Objekt - nicht das unmittelbar umgebende Listener-Objekt. Vorlesung Software-Entwicklung / Folie 100 Button-Reaktionen im Zusammenhang des Beispiels Erläuterung der Beobachter-Klassen und -Objekte im Zusammenhang. Hinweis auf anonyme Klasse zu Interface. Judy Bishop: Java lernen, 3.Aufl., Abschnitt 11.2

121 Eingabe von Texten SWE-101 Komponente TextField: einzeiliger, edierbarer Text Ereignisse: ActionEvent (wie bei Button) ausgelöst bei der Eingabe von Return einige Methoden (aus der Oberklasse TextComponent): String gettext () void settext (String v) void seteditable (boolean e) boolean iseditable () void selecttext (int start, int end) Textinhalt liefern Textinhalt setzen Edierbarkeit festlegen Edierbarkeit Zeichenbereich anzeigen Typischer Listener: addactionlistener (new ActionListener () { public void actionperformed (ActionEvent e) { str = ((TextField)e.getSource()).getText(); ); Eingabe von Zahlen: Text in eine Zahl konvertieren, Ausnahme abfangen: try { age = Integer.parseInt (str); catch (NumberFormatException e) {... TextField als Eingabeelement Erläuterungen der Ereignisbehandlung und der Methoden Judy Bishop: Java lernen, 3.Aufl., Abschnitt 11.1 Vorlesung Software-Entwicklung / Folie 101 Stellen Sie die Eingabe der Programme aus dem Anfang der Vorlesung auf die sinnvolle Benutzung von AWT- Komponenten um.

122 Beispiel: Ampel-Simulation SWE-102 Aufgabe: Graphische Benutzungsoberfläche für eine Ampel-Simulation entwerfen Eigenschaften: Eine Ampel visualisieren mit Knopf und Licht für Fußgänger (später auch animieren) Phasenlängen der Lichter einzeln einstellbar Einstellungen werden angezeigt Entwicklungsschritte: Komponenten strukturieren zeichnen der Ampel (paint auf Canvas) Komponenten generieren und anordnen Ereignisbehandlung entwerfen und implementieren Vorlesung Software-Entwicklung / Folie 102 Aufgabenstellung für ein Anwendungsbeispiel Erläuterungen dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt 10.3 (Example 10.5), 11.4 (Example 11.2)

123 Frame TrafficLight Border title lights Objektbaum zur Ampel-Simulation Panel Flow Canvas LightsCanvas WindowListener Label SWE-103 buttons Panel Grid Choice colours labeledtext Panel Flow ItemListener Label walkbutton closebutton TextField duration ActionListener Button ActionListener Button ActionListener Vorlesung Software-Entwicklung / Folie 103 Struktur der Oberfläche entwerfen Elemente der Oberfläche erläutern Strukturentscheidungen begründen Judy Bishop: Java lernen, 3.Aufl., Abschnitt 11.4 (Example 11.2) Warum wird das Panel labeledtext eingeführt?

124 Programm zur Ampel-Simulation SWE-104 Im Konstruktor der zentralen Klasse wird der Objektbaum hergestellt: class TrafficLight extends Frame { // The Traffic Light program by J M Bishop Oct 1997 // revised by U Kastens Jan 1999 // Objektvariable, auf die Listener zugreifen: private String [] message = // Phasendauer für jede Lampe: {"default","default","default","default"; private int light = 0; // Die ausgewählte Lampe private LightsCanvas lights; // Enthält die gezeichnete Ampel public TrafficLight () // Konstruktor der zentralen Klasse { // Aufbau des Objektbaumes: setlayout (new BorderLayout ()); // Layout des Wurzelobjektes Panel title = new Panel (); // Zentrierter Titel: title.setlayout (new FlowLayout (FlowLayout.CENTER)); title.add (new Label("Savanna Traffic Light Simulation")); add (title, BorderLayout.NORTH); // Die Ampel wird in einer getrennt definierten Klasse gezeichnet: lights = new LightsCanvas (message); add (lights, BorderLayout.CENTER); Vorlesung Software-Entwicklung / Folie 104 Objektbaum konstruieren Objektvariable des Gegenstandsobjektes werden durch Objektmethoden der Listener verändert. Für gezeichnete Teile ist eine Unterklasse von Canvas nötig. Hinweis auf Unterschiede zum Programm im Buch Java Gently Judy Bishop: Java lernen, 3.Aufl., Abschnitt 11.4 (Example 11.2)

125 Auswahl-Komponente SWE-105 Auswahl-Komponenten (Choice) lösen ItemEvents aus, wenn ein Element ausgewählt wird. mit der Methode itemstatechanged kann ein Listener darauf reagieren: Choice colours = new Choice (); // Choice of a light colours.additem ("Red"); colours.additem ("Yellow"); colours.additem ("Green"); colours.additem ("Walk"); colours.additemlistener (new ItemListener () { public void itemstatechanged (ItemEvent e) { String s = (String) e.getitem (); ); if (s.equals ("Red")) {light = 0; else if (s.equals ("Yellow")) {light = 1; else if (s.equals ("Green")) {light = 2; else if (s.equals ("Walk")) {light = 3; Über den Event-Parameter kann man die Zeichenreihe des gewählten Elementes zugreifen. Anwendung der Choice-Komponente lernen Auf das Namensschema für Events hinweisen Informationsfluss über den Event-Parameter Zugriff auf die Objektvariable light erläutern Auf Abweichungen vom Buch Java Gently hinweisen Vorlesung Software-Entwicklung / Folie 105 Judy Bishop: Java lernen, 3.Aufl., Abschnitt 11.2 (Table 11.1) Zeichnen Sie Gegenstands- und Beobachterobjekt und -klassen und erläutern Sie daran die Zuweisung an die Objektvariable light.

126 Eingabe der Phasenlänge SWE-106 Eingabe mit einem TextField. Reaktion auf ein ActionEvent: Panel labeledtext = new Panel ();//fasst TextField und Beschriftung zusammen labeledtext.setlayout (new FlowLayout (FlowLayout.LEFT)); labeledtext.add(new Label("Duration")); // Eingabeelement für die Phasendauer einer Lampe: TextField duration = new TextField("", 3); duration.seteditable (true); duration.addactionlistener (new ActionListener () { public void actionperformed(actionevent e) { // Zugriff auf den eingegebenen Text: // message[light] = ((TextField)e.getSource).getText(); // oder einfacher: message[light] = e.getactioncommand (); lights.repaint(); // Die Zeichenmethode des gezeichneten Objektes // wird erneut ausgeführt, // damit der geänderte Text sichtbar wird. ); labeledtext.add (duration); Vorlesung Software-Entwicklung / Folie 106 Textein- und -ausgabe im Zusammenhang Informationsfluss vom Eingabeelement über den Event-Parameter zum Canvas-Objekt zeigen Auf Abweichungen vom Buch Java Gently hinweisen Judy Bishop: Java lernen, 3.Aufl., Abschnitt 11.4 (Example 11.2)

127 Button-Zeile SWE-107 Einfügen der Button-Zeile in den Objektbaum: Button walkbutton = new Button ("Walk"); // noch keine Reaktion zugeordnet Button closebutton = new Button ("Close"); closebutton.addactionlistener (new ActionListener () // Programm beenden: { public void actionperformed(actionevent e) { setvisible (false); System.exit (0); ); // Zusammensetzen der Button-Zeile: Panel buttons = new Panel(); buttons.setlayout (new FlowLayout (FlowLayout.CENTER)); buttons.add (colours); buttons.add (labeledtext); buttons.add (walkbutton); buttons.add (closebutton); add (buttons, BorderLayout.SOUTH); // TrafficLight Konstruktor // TrafficLight Klasse Vorlesung Software-Entwicklung / Folie 107 Die Zentrale Klasse vervollständigen Erläuterungen dazu Judy Bishop: Java lernen, 3.Aufl., Abschnitt 11.4 (Example 11.2)

128 Ampel zeichnen und beschriften SWE-108 Eine Unterklasse der AWT-Klasse Canvas stellt eine Zeichenfläche bereit. Die Methode paint wird zum Zeichnen und Beschriften überschrieben: class LightsCanvas extends Canvas { private String [] msg; LightsCanvas (String [] m) // Die Array-Elemente enthalten die { msg = m; // Phasendauern der Lampen. Sie können // durch Eingaben verändert werden. public void paint (Graphics g) { g.drawoval (87, 10, 30, 68); // Ampel zeichnen und beschriften g.setcolor (Color.red); g.filloval (95, 15, 15, 15); g.setcolor (Color.yellow); g.filloval (95, 35, 15, 15); g.setcolor (Color.green); g.filloval (95, 55, 15, 15); g.filloval (95, 85, 15, 15); // walk Lampe ist auch grün g.setcolor(color.black); g.drawstring ("RED", 15,28); g.drawstring ("YELLOW", 15, 48); g.drawstring ("GREEN", 15, 68); g.drawstring ("WALK", 15, 98); // eingegebene Phasendauern der Lampen: g.drawstring (msg[0], 135,28); g.drawstring (msg[1], 135, 48); g.drawstring (msg[2], 135, 68); g.drawstring (msg[3], 135, 98); Vorlesung Software-Entwicklung / Folie 108 Auf einer Canvas-Komponente zeichnen Erläuterungen zum Zeichnen und zur Änderung der Beschriftung Judy Bishop: Java lernen, 3.Aufl., Abschnitt 11.4 (Example 11.2) Implementieren Sie das Programm und experimentieren Sie damit.

129 Entwurf von Ereignisfolgen SWE-109 Die zulässigen Folgen von Bedienereignissen und Reaktionen darauf müssen für komplexere Benutzungsoberflächen geplant und entworfen werden. Modellierung durch endliche Automaten (auch durch StateCharts) Zustände unterscheiden Bediensituationen (z. B. Eingabe erwartet, Eingabe vollständig ) Übergänge werden durch Ereignisse ausgelöst. Aktionen können mit Übergängen verknüpft werden; Reaktion auf ein Ereignis z. B. bei Eingabe einer Phasenlänge Ampel neu zeichnen, und Aktionen können mit dem Erreichen eines Zustandes verknüpft werden, z. B. wenn die Eingabe vollständig ist, Berechnung beginnen. keine Zahl Eingabe erwartet Zahl gelesen Repeat Button gedrückt Eingabe vollständig Berechnung ausführen Close-Button gedrückt Programm beenden Close-Button gedrückt Programm beenden Programm beendet Vorlesung Software-Entwicklung / Folie 109 Notwendigkeit zur Modellierung erkennen Erläuterungen zu endlichen Automaten an dem Beispiel Judy Bishop: Java lernen, 3.Aufl., Abschnitt 11.4 Vorlesung Modellierung Geben Sie zu dem Beispiel zulässige und unzulässige Ereignisfolgen an.

130 Unzulässige Übergänge SWE-110 In manchen Zuständen sind einige Ereignisse nicht als Übergang definiert. Sie sind in dem Zustand unzulässig, z. B. Farbe auswählen im Zustand Eingabe erwartet. Beispiel Ampel-Simulation erweitert um zwei Buttons Change und Ok: Eingabe erwartet Change Ok Close Einstellung ändern Farbe auswählen Close Dauer eingeben Programm beendet Robuste Programme dürfen auch an unzulässigen Ereignisfolgen nicht scheitern. Verschiedene Möglichkeiten für nicht definierte Übergänge: Sie bleiben ohne Wirkung Sie bleiben ohne Wirkung und es wird eine Erklärung gegeben (Warnungsfenster). Komponenten werden so deaktiviert, dass unzulässige Ereignisse nicht ausgelöst werden können. Vorlesung Software-Entwicklung / Folie 110 Sinnvolle Ereignisfolgen planen Erläuterung am Beispiel Judy Bishop: Java lernen, 3.Aufl., Abschnitt 11.4 Geben Sie die unzulässigen Paare (Zustand, Ereignis) an. In welchen Zuständen oder bei welchen Übergängen muss man welche Komponenten deaktivieren?

131 Muster für Ereignisfolgen SWE-111 Verschiedene Bedienungsarten (mode): Vorsicht: Nicht unnötig viele Zustände entwerfen. Don t mode me in! Rechnen Change Einstellen Festgelegte sequentielle Reihenfolge: Vorsicht: Nicht unnötig streng vorschreiben. Bediener nicht gängeln. Ok repeat a b c Beliebige Reihenfolge von Ereignissen: Modellierung mit endlichem Automaten ist umständlich (Kombinationen der Ereignisse); einfacher mit StateCharts. Voreinstellungen (defaults) können Zustände sparen und Reihenfolgen flexibler machen. Vorsicht: Nur sinnvolle Voreinstellungen. repeat a c b b c a c a b b a b c c a Einige Regeln zum Entwurf von Ereignisfolgen Erläuterungen und Beispiele dazu Vorlesung Software-Entwicklung / Folie 111 Vorlesungen: "Modellierung / (Endliche Automaten)", "Modellierung von Benutzungsschnittstellen" und "Implementation von Benutzungsschnittstellen"

132 Implementierung des Ereignis-Automaten Zustände ganzzahlig codiert; Objektvariable speichert den augenblicklichen Zustand: private int currentstate = initialstate; private final int initialstate = 0, settingstate = 1,...; SWE-112 Einfache Aktionen der Übergänge bleiben in den Reaktionsmethoden der Listener; Methodenaufruf für den Übergang in einen neuen Zustand zufügen: changebutton.addactionlistener (new ActionListener () { public void actionperformed(actionevent e) { tostate (settingstate); ); Aktionen der Zustände in der Übergangsmethode plazieren, z. B. Komponenten (de)aktivieren: private void tostate (int nextstate) { currentstate = nextstate; switch (nextstate) { case initialstate: lights.repaint(); okbutton.setenabled(false); changebutton.setenabled (true); colours.setenabled (false); duration.setenabled (false); break; case settingstate:... break; default:... Vorlesung Software-Entwicklung / Folie 112 Systematische Implementierungstechnik Am Beispiel der Ampel-Simulation erläutern. Plazierung der Aktionen begründen. switch-anweisung erklären Aktivierung und Deaktivierung von Komponenten zeigen ( Folie 112a). Judy Bishop: Java lernen, 3.Aufl., Abschnitt 11.4 Implementieren und erproben Sie das Programm. Begründen Sie, wann Aktionen den Übergängen bzw. den Zuständen zugeordnet werden.

133 Ampel-Simulation mit kontrollierten Zustandsübergängen Zwei Knöpfe wurden zugefügt: Der Change-Button aktiviert die Eingabe, der Ok-Button schliesst sie ab. SWE-112a Die Komponenten zur Farbauswahl, Texteingabe und der Ok-Knopf sind im gezeigten Zustand deaktiviert. Illustration von Folie 112 Erläuterungen dazu Vorlesung Software-Entwicklung / Folie 112a

Präzedenz von Operatoren

Präzedenz von Operatoren Präzedenz von Operatoren SWE-30 Die Präzedenz von Operatoren bestimmt die Struktur von Ausdrücken. Ein Operator höherer Präzedenz bindet die Operanden stärker als ein Operator geringerer Präzedenz. Mit

Mehr

Werkzeuge zur Programmentwicklung

Werkzeuge zur Programmentwicklung Werkzeuge zur Programmentwicklung B-15 Bibliothek Modulschnittstellen vorübersetzte Module Eingabe Editor Übersetzer (Compiler) Binder (Linker) Rechner mit Systemsoftware Quellmodul (Source) Zielmodul

Mehr

Einstieg in die Informatik mit Java

Einstieg 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

Mehr

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

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015 Java Crashkurs Kim-Manuel Klein (kmk@informatik.uni-kiel.de) May 4, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)

Mehr

Letztes Mal. static int ggt(int a, int b) { if (a == b) return a; else if (a > b) return ggt(a-b,b); else if (a < b) return ggt(a,b-a);

Letztes Mal. static int ggt(int a, int b) { if (a == b) return a; else if (a > b) return ggt(a-b,b); else if (a < b) return ggt(a,b-a); Letztes Mal static int ggt(int a, int b) { if (a == b) return a; else if (a > b) } return ggt(a-b,b); else if (a < b) return ggt(a,b-a); Darf hier nicht stehen! Compiler sagt: Missing return statement

Mehr

3. Grundlegende Sprachkonstruktionen imperativer Programme

3. Grundlegende Sprachkonstruktionen imperativer Programme 3. Grundlegende Sprachkonstruktionen imperativer Programme Java-Beispiele: Temperature.java Keyboard.java K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Version: 4. Nov. 2015 2 Schwerpunkte

Mehr

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein (kmk@informatik.uni-kiel.

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein (kmk@informatik.uni-kiel. Java Crashkurs Kim-Manuel Klein (kmk@informatik.uni-kiel.de) May 7, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)

Mehr

Repetitorium Informatik (Java)

Repetitorium Informatik (Java) Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: 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

Java Fehlerbehandlung

Java Fehlerbehandlung Java Fehlerbehandlung 1 Fehlerbehandlung In jedem nicht-trivialen Programm kann es während der Laufzeit zu Fehlersituationen kommen. Dabei handelt es sich nicht unbedingt um Programmierfehler: z. B.: Programm

Mehr

Graphische Benutzungsoberflächen

Graphische Benutzungsoberflächen Graphische Benutzungsoberflächen Graphische Benutzungsoberflächen (graphical user interfaces, GUI) dienen zur interaktiven Bedienung von Programmen, Ein- und Ausgabe mit graphischen Techniken und visuellen

Mehr

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik Informatik I WS 2012/13 Tutorium zur Vorlesung 1. Alexander Zietlow zietlow@informatik.uni-tuebingen.de Wilhelm-Schickard-Institut für Informatik Eberhard Karls Universität Tübingen 11.02.2013 1. 2. 1.

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

II. 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

Mehr

Primitive Datentypen

Primitive Datentypen Primitive Datentypen 2 Arten von Datentypen: primitive Datentypen (heute) Objekte (später) Java ist streng typisiert, d.h. für jede Variable muß angegeben werden was für eine Art von Wert sie aufnimmt.

Mehr

Einführung in die Programmierung mit Java

Einführung in die Programmierung mit Java Einführung in die Programmierung mit Java Martin Wirsing 2 Ziele Geschichte der OO-Programmiersprachen Warum Java als Programmiersprache verwenden? Ein einfaches Java-Programm erstellen, übersetzen und

Mehr

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. Einfache Ein- und Ausgabe mit Java 1. Hallo-Welt! Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. /** Die Klasse hello sendet einen

Mehr

II.1.1. Erste Schritte - 1 -

II.1.1. Erste Schritte - 1 - ! 1. Grundelemente der Programmierung! 2. Objekte, Klassen und Methoden! 3. Rekursion und dynamische Datenstrukturen! 4. Erweiterung von Klassen und fortgeschrittene Konzepte II.1.1. Erste Schritte - 1

Mehr

3. Anweisungen und Kontrollstrukturen

3. Anweisungen und Kontrollstrukturen 3. Kontrollstrukturen Anweisungen und Blöcke 3. Anweisungen und Kontrollstrukturen Mit Kontrollstrukturen können wir den Ablauf eines Programmes beeinflussen, z.b. ob oder in welcher Reihenfolge Anweisungen

Mehr

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Inhalt dieser Einheit Variablen (Sinn und Aufgabe) Bezeichner Datentypen, Deklaration und Operationen Typenumwandlung (implizit/explizit) 2 Variablen

Mehr

TEIL I: OBJEKTORIENTIERUNG UND GRUNDKURS JAVA GRUNDLAGEN DER PROGRAMMIERUNG... 4

TEIL I: OBJEKTORIENTIERUNG UND GRUNDKURS JAVA GRUNDLAGEN DER PROGRAMMIERUNG... 4 Inhaltsverzeichnis TEIL I: OBJEKTORIENTIERUNG UND GRUNDKURS JAVA... 1 1 GRUNDLAGEN DER PROGRAMMIERUNG... 4 1.1 Das erste Java-Programm... 4 1.2 Programme und ihre Abläufe... 6 1.3 Entwurf mit Nassi-Shneiderman-Diagrammen...

Mehr

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Einführung in den Einsatz von Objekt-Orientierung mit C++ I Einführung in den Einsatz von Objekt-Orientierung mit C++ I ADV-Seminar Leiter: Mag. Michael Hahsler Syntax von C++ Grundlagen Übersetzung Formale Syntaxüberprüfung Ausgabe/Eingabe Funktion main() Variablen

Mehr

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 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

Mehr

5.4 Klassen und Objekte

5.4 Klassen und Objekte 5.4 Klassen und Objekte Zusammenfassung: Projekt Figuren und Zeichner Figuren stellt Basisklassen für geometrische Figuren zur Verfügung Zeichner bietet eine übergeordnete Klasse Zeichner, welche die Dienstleistungen

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 41 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 41 1 Überblick: Vererbung 2 Grundidee Vererbung 3 Verdeckte Variablen

Mehr

Distributed Computing Group

Distributed 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

Mehr

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden Javaprogrammierung mit NetBeans Variablen, Datentypen, Methoden Programmieren 2 Java Bezeichner Bezeichner: Buchstabe _ $ Buchstabe _ $ Ziffer Groß- und Kleinbuchstaben werden strikt unterschieden. Schlüsselwörter

Mehr

Einführung in die Programmierung 1

Einführung in die Programmierung 1 Einführung in die Programmierung 1 Einführung (S.2) Einrichten von Eclipse (S.4) Mein Erstes Programm (S.5) Hallo Welt!? Programm Der Mensch (S.11) Klassen (S.12) Einführung Wie Funktioniert Code? Geschriebener

Mehr

Algorithmen und Programmierung II

Algorithmen 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

Mehr

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Javakurs 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

Datenbankanwendungsprogrammierung Crashkurs Java

Datenbankanwendungsprogrammierung Crashkurs Java Datenbankanwendungsprogrammierung Crashkurs Java Denny Priebe Datenbankanwendungsprogrammierung p. Unterschiede zu C, C++ typedefs, Präprozessor Strukturen, Unions globale Funktionen Mehrfachvererbung

Mehr

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8 Java 8 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Oktober 2014 JAV8 5 Java 8 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen

Mehr

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2 Fakultät Verkehrswissenschaften Friedrich List, Professur für Verkehrsbetriebslehre und Logistik Modul Entscheidungsunterstützung in der Logistik Einführung in die Programmierung mit C++ Übung 2 SS 2016

Mehr

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Gliederung 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

Mehr

12. Rekursion Grundlagen der Programmierung 1 (Java)

12. Rekursion Grundlagen der Programmierung 1 (Java) 12. Rekursion Grundlagen der Programmierung 1 (Java) Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 24. Januar 2006 Einordnung im Kontext der Vorlesung

Mehr

1. Der Einstieg in Java. Was heißt Programmieren?

1. Der Einstieg in Java. Was heißt Programmieren? 1. Der Einstieg in Java Lernziele: Am Ende dieses Kapitels sollen Sie wissen, aus welchen Bestandteilen ein Java-Programm besteht, Java-Programme übersetzen und ausführen können, Möglichkeiten der Kommentierung

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: 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

Programmieren I. Prinzipieller Ablauf. Eigenschaften von JAVA. Source-Code Javac Bytecode. Java Virtual Machine (Java, Browser, Appletviewer)

Programmieren I. Prinzipieller Ablauf. Eigenschaften von JAVA. Source-Code Javac Bytecode. Java Virtual Machine (Java, Browser, Appletviewer) Programmieren I Grundlagen von JAVA Dr. Klaus Höppner Hello World in JAVA Hochschule Darmstadt WS 2007/2008 Elementare Datentypen 1 / 17 2 / 17 Eigenschaften von JAVA Prinzipieller Ablauf Plattform-und

Mehr

Programmierung WS12/13 Lösung - Übung 1 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder

Programmierung WS12/13 Lösung - Übung 1 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Prof. aa Dr. J. Giesl Programmierung WS12/13 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Tutoraufgabe 1 (Syntax und Semantik): 1. Was ist Syntax? Was ist Semantik? Erläutern Sie den Unterschied. 2.

Mehr

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg Klassen und Objekte Einführung in Java Folie 1 von 28 12. Mai 2011 Ivo Kronenberg Inhalt Objekte Klassendefinitionen Datenelemente (Klassenattribute) Instanzieren von Objekten Konstruktoren Vergleich primitive

Mehr

Informatik. Studiengang Chemische Technologie. Michael Roth Hochschule Darmstadt -Fachbereich Informatik- WS 2012/2013.

Informatik. Studiengang Chemische Technologie. Michael Roth Hochschule Darmstadt -Fachbereich Informatik- WS 2012/2013. Informatik Studiengang Chemische Technologie Michael Roth michael.roth@h-da.de Hochschule Darmstadt -Fachbereich Informatik- WS 2012/2013 Inhalt Teil VIII Einstieg in Java II Michael Roth (h_da) Informatik

Mehr

JAVA-Datentypen und deren Wertebereich

JAVA-Datentypen und deren Wertebereich Folge 8 Variablen & Operatoren JAVA 8.1 Variablen JAVA nutzt zum Ablegen (Zwischenspeichern) von Daten Variablen. (Dies funktioniert wie beim Taschenrechner. Dort können Sie mit der Taste eine Zahl zwischenspeichern).

Mehr

Einführung in die Informatik für Hörer aller Fakultäten II. Andreas Podelski Stephan Diehl Uwe Waldmann

Einführung in die Informatik für Hörer aller Fakultäten II. Andreas Podelski Stephan Diehl Uwe Waldmann Einführung in die Informatik für Hörer aller Fakultäten II Andreas Podelski Stephan Diehl Uwe Waldmann 1 Einführung in die Informatik für Hörer aller Fakultäten II Andreas Podelski Stephan Diehl Uwe Waldmann

Mehr

Einfache Rechenstrukturen und Kontrollfluss II

Einfache Rechenstrukturen und Kontrollfluss II Einfache Rechenstrukturen und Kontrollfluss II Martin Wirsing in Zusammenarbeit mit Moritz Hammer und Axel Rauschmayer http://www.pst.informatik.uni-muenchen.de/lehre/ss06/infoii/ SS 06 Ziele Lernen imperative

Mehr

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen. 1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik

Mehr

Programmierkurs. Manfred Jackel

Programmierkurs. Manfred Jackel Java für Anfänger Teil 7: Methoden Programmierkurs 06.-10.10.2008 Manfred Jackel 1 Methoden In der imperativen Programmierung sind Funktionen ein wichtiges Mittel zur Modularisierung. [Oft benötigter]

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

6 Speicherorganisation

6 Speicherorganisation Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen Speicherbereich für

Mehr

Welche Informatik-Kenntnisse bringen Sie mit?

Welche Informatik-Kenntnisse bringen Sie mit? Welche Informatik-Kenntnisse bringen Sie mit? So gehen Sie vor! Lösen Sie die Aufgaben der Reihe nach von 1 bis 20, ohne das Lösungsblatt zur Hilfe zu nehmen. Der Schwierigkeitsgrad der Aufgaben nimmt

Mehr

Übersicht. Vorstellung des OO-Paradigmas

Übersicht. Vorstellung des OO-Paradigmas Java, OO und UML Vorstellung des OO-Paradigmas Übersicht Umsetzung des OO-Paradigmas in Java Einführung (seeeeeehr rudimenter) in UML zur graphischen Darstellung von OO Grammatik und Semantik von Java

Mehr

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf 16 Exceptions Zur Behandlung unerwarteter Situationen bietet Java Unterstützung in Form von Exceptions oder Ausnahmen. Den Sinn von Exceptions können wir Ihnen an einem kleinen Beispiel klarmachen. Nehmen

Mehr

JAVA - Methoden

JAVA - Methoden Übungen Informatik I JAVA - http://www.fbi-lkt.fh-karlsruhe.de/lab/info01/tutorial Übungen Informatik 1 Folie 1 sind eine Zusammenfassung von Deklarationen und Anweisungen haben einen Namen und können

Mehr

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3. Hello World Javakurs 2014, 1. Vorlesung Sebastian Schuck basierend auf der Vorlage von Arne Kappen wiki.freitagsrunde.org 3. März 2014 This work is licensed under the Creative Commons Attribution-ShareAlike

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 5 Referenzdatentypen - Felder... 5-2 5.1 Eindimensionale Felder - Vektoren... 5-3 5.1.1 Vereinbarung... 5-3 5.1.2 Referenzen sind keine Felder... 5-4 5.1.3 Kopieren eindimensionaler Felder... 5-6

Mehr

Programmierung mit C Zeiger

Programmierung mit C Zeiger Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch

Mehr

Informatik B von Adrian Neumann

Informatik B von Adrian Neumann Musterlösung zum 7. Aufgabenblatt vom Montag, den 25. Mai 2009 zur Vorlesung Informatik B von Adrian Neumann 1. Java I Schreiben Sie ein Java Programm, das alle positiven ganzen Zahlen 0 < a < b < 1000

Mehr

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden Kapitel 8 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Methoden Überladen von Methoden Der this-zeiger Konstruktoren Vererbung WS 07/08

Mehr

Kapitel 3: Variablen

Kapitel 3: Variablen Kapitel 3: Variablen Thema: Programmieren Seite: 1 Kapitel 3: Variablen Im letzten Kapitel haben wir gelernt, bestimmte Ereignisse zu wiederholen solange eine Bedingung erfüllt ist. Nun möchten wir aber

Mehr

Javakurs zu Informatik I. Henning Heitkötter

Javakurs 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,

Mehr

Die Programmiersprache C Eine Einführung

Die Programmiersprache C Eine Einführung Die Programmiersprache C Eine Einführung Christian Gentsch Fakutltät IV Technische Universität Berlin Projektlabor 2. Mai 2014 Inhaltsverzeichnis 1 Einführung Entstehungsgeschichte Verwendung 2 Objektorientiert

Mehr

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden Grundlagen der Programmierung Prof. H. Mössenböck 6. Methoden Parameterlose Methoden Beispiel: Ausgabe einer Überschrift class Sample { static void printheader() { // Methodenkopf Out.println("Artikelliste");

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1 Kapitel 11 Fehler und Ausnahmen Fehler und Ausnahmen 1 Ziele Fehlerquellen in Programmen und bei der Programmausführung verstehen Das Java-Konzept der Ausnahmen als Objekte kennenlernen Ausnahmen auslösen

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 26 Einstieg in die Informatik mit Java Felder Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 26 1 Was sind Felder? 2 Vereinbarung von Feldern 3 Erzeugen von Feldern

Mehr

Eingabe von Texten. Vorlesung Software-Entwicklung / Folie 101

Eingabe von Texten. Vorlesung Software-Entwicklung / Folie 101 Eingabe von Texten SWE-101 Komponente TextField: einzeiliger, edierbarer Text Ereignisse: ActionEvent (wie bei Button) ausgelöst bei der Eingabe von Return einige Methoden (aus der Oberklasse TextComponent):

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 1. Einführung und Grundbegriffe

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 1. Einführung und Grundbegriffe 1 Kapitel 1 2 Ziele Begriffsbildungen: Informatik, Algorithmus, Programm, Compiler, Einordnung von Java Ein einfaches Java-Programm erstellen, übersetzen und ausführen Java-Programme dokumentieren 3 Informatik

Mehr

5.13 Umgang mit Fehlern

5.13 Umgang mit Fehlern 5.13 Umgang mit Fehlern Klassifikation von Fehlern: Syntaxfehler: Lexikalische Fehler: Falsche oder unbekannte Worte String s neu String("Max"); Falsche Anordnung von Anweisungen: Falscher Typ: import

Mehr

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML. JavaScript JavaScript wird direkt in HTML-Dokumente eingebunden. Gib folgende Zeilen mit einem Texteditor (Notepad) ein: (Falls der Editor nicht gefunden wird, öffne im Browser eine Datei mit der Endung

Mehr

Überblick und Wiederholung

Überblick und Wiederholung Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-14-15/infoeinf WS14/15 Klausurinformationen 6 ECTS: Klausur 07.02.2015 10:15 12:15 Uhr (120

Mehr

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative student"

Mehr

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung Übersicht 3.1 Modell Konto 3.2 Modell Konto - Erläuterungen 3.3 Benutzer Ein- und Ausgabe mit Dialogfenster I 3.4 Benutzer Ein- und Ausgabe mit Dialogfenster II 3.5 Klassen- und Objekteigenschaften des

Mehr

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

1. 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

Mehr

Java-Schulung Grundlagen

Java-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

Mehr

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden. Grundwissen Informatik Objekt Attribut Methoden Als Objekte bezeichnet man alle Gegenstände, Dinge, Lebewesen, Begriffe oder Strukturen unserer Welt ( Autos, Räume, Bakterien, Lehrer, Schüler, Kunden,

Mehr

Einführung in die Programmierung mit Java

Einführung in die Programmierung mit Java Einführung in die Programmierung mit Martin Wirsing 2 Ziele Begriffsbildungen: Informatik, Algorithmus, Programm... Warum als Programmiersprache verwenden? Ein einfaches -Programm erstellen, übersetzen

Mehr

JAVA - Methoden - Rekursion

JAVA - Methoden - Rekursion Übungen Informatik I JAVA - Methoden - Rekursion http://www.fbi-lkt.fh-karlsruhe.de/lab/info01/tutorial Übungen Informatik 1 1 Methoden Methoden sind eine Zusammenfassung von Deklarationen und Anweisungen

Mehr

Vorlesung Programmieren

Vorlesung Programmieren Vorlesung Programmieren 3. Kontrollstrukturen 04.11.2015 Prof. Dr. Ralf H. Reussner Version 1.1 LEHRSTUHL FÜR SOFTWARE-DESIGN UND QUALITÄT (SDQ) INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION (IPD),

Mehr

Programmiersprachen. Organisation und Einführung. Berthold Hoffmann. Studiengang Informatik Universität Bremen

Programmiersprachen. Organisation und Einführung. Berthold Hoffmann. Studiengang Informatik Universität Bremen Organisation und Einführung Studiengang Informatik Universität Bremen Sommersemester 2010 (Vorlesung am Montag, der 12. April 2010) (Montag, der 12. April 2008) 1 Vorstellung 2 Organisation 3 Einführung

Mehr

Programmieren I + II Regeln der Code-Formatierung

Programmieren I + II Regeln der Code-Formatierung Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme WS 2016/2017, SS 2017 Programmieren I + II Regeln der Code-Formatierung In diesem Dokument finden

Mehr

AuD-Tafelübung T-B5b

AuD-Tafelübung T-B5b 6. Übung Sichtbarkeiten, Rekursion, Javadoc Di, 29.11.2011 1 Blatt 5 2 OOP Klassen Static vs. Instanzen Sichtbarkeit 3 Stack und Heap Stack Heap 4 Blatt 6 1 Blatt 5 2 OOP Klassen Static vs. Instanzen Sichtbarkeit

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 02: Klassen & Objekte Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Klassen Grundstruktur einer Java-Klasse Eigenschaften (Attribute) Variablen

Mehr

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

7. 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

Mehr

Noch für heute: primitive Datentypen in JAVA. Primitive Datentypen. Pseudocode. Dezimal-, Binär- und Hexadezimalsystem. der logische Typ boolean

Noch für heute: primitive Datentypen in JAVA. Primitive Datentypen. Pseudocode. Dezimal-, Binär- und Hexadezimalsystem. der logische Typ boolean 01.11.05 1 Noch für heute: 01.11.05 3 primitie Datentypen in JAVA Primitie Datentypen Pseudocode Name Speichergröße Wertgrenzen boolean 1 Byte false true char 2 Byte 0 65535 byte 1 Byte 128 127 short 2

Mehr

6. Iteration (Schleifenanweisungen)

6. Iteration (Schleifenanweisungen) 6. Iteration (Schleifenanweisungen) Java-Beispiel: TemperatureTable.java K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Version: 9. Nov. 2015 2 Schwerpunkte While-Anweisung: "abweisende"

Mehr

Java I Vorlesung Objektorientiertes Programmieren

Java I Vorlesung Objektorientiertes Programmieren Java I Vorlesung 3 Objektorientiertes Programmieren 10.5.2004 Die restlichen Kontrollstrukturen Grundlagen des OOP Klassen und Objekte switch Syntax: switch ( expr ) { case const 1 : case const 2 :...

Mehr

Grundlagen der Programmierung UE

Grundlagen der Programmierung UE Grundlagen der Programmierung UE Research and teaching network GdP UE H. Prähofer, R. Wolfinger 1 Vortragende Dr. Herbert Praehofer (G1 u. G2) Mag. Reinhard Wolfinger (G3 u. G4) Institute for System Software

Mehr

Algorithmen & Programmierung. Ausdrücke & Operatoren (1)

Algorithmen & Programmierung. Ausdrücke & Operatoren (1) Algorithmen & Programmierung Ausdrücke & Operatoren (1) Ausdrücke Was ist ein Ausdruck? Literal Variable Funktionsaufruf Ausdruck, der durch Anwendung eines einstelligen (unären) Operators auf einen Ausdruck

Mehr

1 Polymorphie (Vielgestaltigkeit)

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

Mehr

C.3 Funktionen und Prozeduren

C.3 Funktionen und Prozeduren C3 - Funktionen und Prozeduren Funktionsdeklarationen in Pascal auch in Pascal kann man selbstdefinierte Funktionen einführen: Funktionen und Prozeduren THEN sign:= 0 Funktion zur Bestimmung des Vorzeichens

Mehr

Grundlagen der Programmierung UE

Grundlagen der Programmierung UE Grundlagen der Programmierung UE Research and teaching network GdP UE H. Prähofer, M Löberbauer 1 Vortragende Dipl.-Ing. Markus Löberbauer (G1) Dr. Herbert Praehofer (G2 u. G3) Institute for System Software

Mehr

Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe Prof. Dr. Oliver Haase Oliver Haase Hochschule Konstanz 1 Was sind Operatoren? Ein Operator ist eine in die Programmiersprache eingebaute Funktion,

Mehr

Elementare Konzepte von

Elementare Konzepte von Elementare Konzepte von Programmiersprachen Teil 1: Bezeichner, Elementare Datentypen, Variablen, Referenzen, Zuweisungen, Ausdrücke Kapitel 6.3 bis 6.7 in Küchlin/Weber: Einführung in die Informatik Bezeichner

Mehr

3 Objektorientierte Konzepte in Java

3 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

Mehr

Klassen mit Instanzmethoden

Klassen 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

Mehr

C für Java-Programmierer

C für Java-Programmierer Carsten Vogt C für Java-Programmierer ISBN-10: 3-446-40797-9 ISBN-13: 978-3-446-40797-8 Inhaltsverzeichnis Weitere Informationen oder Bestellungen unter http://www.hanser.de/978-3-446-40797-8 sowie im

Mehr

RO-Tutorien 3 / 6 / 12

RO-Tutorien 3 / 6 / 12 RO-Tutorien 3 / 6 / 12 Tutorien zur Vorlesung Rechnerorganisation Christian A. Mandery WOCHE 2 AM 06./07.05.2013 KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft

Mehr

Parallele Prozesse. Prozeß wartet

Parallele Prozesse. Prozeß wartet Parallele Prozesse B-66 Prozeß: Ausführung eines Programmes in seinem Adressraum (zugeordneter Speicher) Parallele Prozesse: gleichzeitig auf mehreren Prozessoren laufende Prozesse p1 p2 verzahnte Prozesse:

Mehr

1. Der Einstieg in Java

1. Der Einstieg in Java 1. Der Einstieg in Java Was heißt Programmieren? 1. Der Einstieg in Java Lernziele: Am Ende dieses Kapitels sollen Sie wissen, aus welchen Bestandteilen ein Java-Programm besteht, Java-Programme übersetzen

Mehr

Deklarationen in C. Prof. Dr. Margarita Esponda

Deklarationen in C. Prof. Dr. Margarita Esponda Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.

Mehr

620.900 Propädeutikum zur Programmierung

620.900 Propädeutikum zur Programmierung 620.900 Propädeutikum zur Programmierung Andreas Bollin Institute für Informatik Systeme Universität Klagenfurt Andreas.Bollin@uni-klu.ac.at Tel: 0463 / 2700-3516 Lösung der Aufgaben (1/2) Lösung Aufgabe

Mehr

Vorlesung Informatik II

Vorlesung Informatik II Vorlesung Informatik II Universität Augsburg Wintersemester 2011/2012 Prof. Dr. Bernhard Bauer Folien von: Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 02. JAVA: Erstes Programm 1 Das erste Java-Programm

Mehr

Einführung in die Informatik

Einführung in die Informatik Einführung in die Informatik Jochen Hoenicke Software Engineering Albert-Ludwigs-University Freiburg Sommersemester 2014 Jochen Hoenicke (Software Engineering) Einführung in die Informatik Sommersemester

Mehr