Vorlesung Informatik II

Größe: px
Ab Seite anzeigen:

Download "Vorlesung Informatik II"

Transkript

1 Inhalt Vorlesung Informatik II Universität Augsburg Sommersemester 2011 Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 07. Java: GUI und Ereignisbehandlung Teil 1 In Java gibt es mehrere Klassenbibliothek-Pakete, die Datenstrukturen und Operationen für die grafische Darstellung von Fenstern und Benutzerinteraktionen erlauben (wie Sie es gewohnt sind) In diesem Kapitel werden wir besprechen: Grundlagen des Pakets java.awt Einfach(st)e Anbindung von Fenstern an Datenklassen Später: Grafische Benutzerschnittstelle und Schichtenarchitektur Paket java.swing 1 2 Exkurs: GUI-Elemente Grundbegriffe Dialog Fenster zur Interaktion mit dem Benutzer Primärdialog: zur direkten Aufgabenerfüllung z.b. Editor Sekundärdialog: für situationsabhängige zusätzliche Informationen wird aus Primärdialog gestartet nach Beendigung wird Primärdialog fortgesetzt z.b. Drucken, Speichern unter, Formeln einfügen, Suchen Exkurs: GUI-Elemente Grundbegriffe Dialog Fenster zur Interaktion mit dem Benutzer modaler Dialog muss beendet werden vor Aktivierung eines anderen Fensters z.b. Speichern unter, Mitteilungen nicht modaler Dialog kann unterbrochen werden z.b. Suchen 3 4

2 Inhalt Später: Vorgehen zum systematischen Konstruieren der GUI zu vorgegebenen Datenklassen (Erfassungsfenster, Listenfenster, Dialogführung) Jetzt: Vereinfachte Anbindung von Fensterklassen an Datenklassen Zugriff auf Daten von Objekten einer Klasse Zugriff auf Beziehungen zwischen Objekten Fenster Ein leeres Fenster (Klasse Frame) import java.awt.*;//import aller Klassen des Pakets public class Test { public static void main (String args[]){ Frame F=new Frame(); F.setSize(300,300);//Breite und Höhe in Pixeln F.setVisible(true);//sichtbar machen 5 6 Fenster Besser: Entkoppelung der Programmklasse + eigene Fensterklasse als Spezialisierung + Frame + MeinProgrammGUI Benutze Konstruktor zur Darstellung des Fensters Fenster Besser: Entkoppelung der Programmklasse + eigene Fensterklasse als Spezialisierung public class MeinProgrammGUI extends Frame { public MeinProgrammGUI (){ super();//konstruktoraufruf von Frame (opional) setsize(300,300); setvisible(true); public class meinprogramm { public static void main (String args[]){ new MeinProgrammGUI();//Anonymes Objekt erzeugen 7 8

3 Fenster - Vererbungshierarchie Object Component (Graphische Benutzerschnittstelle) Container (kann andere Komponenten enthalten) Fenster Ausgewählte Klassen und Operationen: Frame: Fenster mit Titel void setmenubar(menubar b): Menubar b hinzufügen MenuBar: Leiste, um Menüs aufzunehmen Menu add(menu m): Menu hinzufügen Panel (für Fensterkomponenten) Dialog (für Dialoge) Window (Primärfenster ohne Rand) Frame (mit Rand und Titel) Menu: Menü mit Titel, das verschiedene Menüpunkte enthalten kann MenuItem add(menuitem i): Menüpunkt hinzufügen MenuItem: Menüpunkt mit Titel, um Aktionen auszuführen oder Optionen zu setzen oder andere Menüs aufzunehmen (zum Ausklappen) 9 10 Fenster Ausgewählte Klassen und Operationen: Fenster BorderLayout: Frame void setlayout(layoutmanager l): Komponenten durch Layout organisieren Component add(): Komponenten gemäß Layout hinzufügen LayoutManager: Schnittstelle zur Festlegung der Darstellung von Komponenten innerhalb eines Containers BorderLayout: siehe nächste Folie FlowLayout: von links nach rechts (horizontal) fließend Gridlayout: wie Gitter/Tabelle Label: Komponente zur Darstellung von Text North West Center East South 11 12

4 Fenster Fenster Ausgewählte Klassen und Operationen: Panel: Komponente zur Aufnahme weiterer Komponenten nach Layout Voreinstellung: FlowLayout Component add(): Komponenten gemäß Layout hinzufügen Button: Schaltfläche mit Titel, um Aktionen auszuführen PopupMenu: über Rechtsmausklick erreichbares Menu wird einer Komponente zugeordnet Ausgewählte Klassen und Operationen: Frame void setlocation(int x, int y): Linke obere Ecke des Frames void setvisible(true): Frame sichtbar machen void pack(): Optimale Größe zur Darstellung aller Komponenten setzen Dialog: Fenster mit Titel zur Darstellung von Dialogen zu einem Frame oder zu einem anderen Dialog modal oder nicht modal Operationen ähnlich wie bei Frame Fenster Fenster Ausgewählte Klassen und Operationen: TextField: Zur Eingabe von Text (einzeilig) String gettext(): Eingegebenen Text auslesen void settext(string text): Text setzen Choice: Ausklappbare Liste von Strings zur Auswahl unter verschiedenen Unterpunkten (Einfach- oder Mehrfachauswahl) void add(string titel): Unterpunkt hinzufügen void select(string titel): Unterpunkt auswählen String getselecteditem(): Ausgewählten Unterpunkt zurückgeben Ausgewählte Klassen und Operationen: TextArea: Zur Eingabe von Text (mehrzeilig, mit Scrollbar) ähnlich zu TextField List: Liste von Strings zur Auswahl unter verschiedenen Unterpunkten (ähnlich zu Choice) void dd(string text): Unterpunkt hinzufügen void remove(string text): Unterpunkt entfernen void removeall(): alle Unterpunkte entfernenntfernen 15 16

5 Fenster Fenster Anwendungsfenster Sinnvolle Komponenten: Button close: Schließen des Fensters Menu bearbeiten: Öffnen von Dialogen zur Bearbeitung von Daten PopupMenu bearbeitenpm: dasselbe als Popupmenu Komponenten mit Hilfe von Panels organisieren Layout hinzufügen Dialogfenster (vereinfacht, exemplarisch) Anbinden von Dialogfenstern an Datenklassen zur Bearbeitung von Daten: Erstellen von Daten Anzeigen von Daten Modifizieren von Daten Löschen von Daten Binde an jede Datenklasse MeineKlasse und ihre Containerklasse ein Dialogfenster MeineKlasseGUI an Fenster Fenster Dialogfenster (vereinfacht, exemplarisch) Dialogfenster (vereinfacht, exemplarisch) 0..1 subject + MeineKlasse + Dialog + MeineKlasseGUI 0..* 0..* container MeineKlasseContainer + MeineKlasseGUI + MeineKlasseGUI() + save() + update() + load() Eingegebene Daten an subject übergeben Liste aller Objekte in container neu anzeigen Objektdaten von subject laden 19 20

6 Fenster Fenster Dialogfenster (vereinfacht, exemplarisch) Mit passenden grafischen Komponenten zum Eingeben und Anzeigen aller Attributwerte: Einwertiges Attribut: TextField Aufzählungs-Attribut: Choice Mehrwertiges Attribut: List Mit grafischer Komponente zum Anzeigen und Auswählen von erzeugten Objekten: List Dialogfenster (vereinfacht, exemplarisch) Benutze Konstruktor zum Initialisieren aller grafischer Komponenten Sollten grafische Komponenten Attribute der Fensterklasse sein? Nur diejenigen zur Aufnahme von Attributwerten (Textfelder,) sonst: lokale Variablen im Konstruktor (Schaltflächen,) Fenster Fenster Dialogfenster (vereinfacht, exemplarisch) Mit Schaltflächen / Menüpunkten zum Ausführen obiger Aktionen und zugehörigen Operationen keine üblichen Verwaltungsoperationen für die Attribute und Beziehungen (überflüssig) Dialogfenster (vereinfacht, exemplarisch): Attribute: Referenzattribute & Grafische Komponenten zur Aufnahme von Attributwerten public class MeinKlasseGUI extends Dialog { private MeineKlasse subject;//referenz Datenobjekt private MeineKlasseContainer container;//referenz Container private TextField meinattribut;//ausgabe Attribut Datenobjekt private List alleobjekte;//ausgabe aller Datenobjekte 23 24

7 Fenster Fenster Dialogfenster (vereinfacht, exemplarisch): Konstruktor: Fensteraufbau & Initialisierungen public MeinKlasseGUI(Frame f){ super(f, Objekte verwalten,false);//frame-konstruktor setlayout(new GridLayout(0,1));//eine Spalte,beliebig viele Zeilen Panel p = new Panel(); meinattribut = new TextField(20); p.add(meinattribut); Button speichern = new Button( Speichern"); p.add(speichern); add(p); container = MeineKlasseContainer.instance(); subject = null;//initialisierung der Referenzen pack(); setvisible(true); Dialogfenster (vereinfacht, exemplarisch): Operation save(): Auslesen der Werte aus den grafischen Komponenten und Erzeugen eines neuen Objekts mit diesen Werten public void save(){ subject = new MeineKlasse(); subject.setmeinattribut(meinattribut.gettext()); Fenster Fenster Dialogfenster (vereinfacht, exemplarisch): Operation update(): Löschen aller dargestellten Listenelemente und neu Laden aus dem Container public void update(){ alleobjekte.removeall(); for(meineklasse o:container){ alleobjekte.add(o.tostring()); 27 Dialogfenster (vereinfacht, exemplarisch): Operation load(): Laden der Werte eines aus der Liste selektierten Objekts if (alleobjekte.getselecteditem()!= null){ Iterator<MeineKlasse> it = container.iterator(); while (it.hasnext()){ MeineKlasse o = it.next(); String auswahl = alleobjekte.getselecteditem(); if (o.tostring().equals(auswahl)){ subject = o; meinattribut.settext(subject.getmeinattribut()); 28

8 Ereignisbehandlung Noch können wir nichts mit dem Fenster anfangen Es lässt sich nicht schließen Dialogfenster lassen sich nicht öffnen Keine Reaktion auf Drücken von Schaltflächen Es fehlt noch die sogenannte Ereignisbehandlung Ereignisbehandlung Benutzeraktionen lösen sog. Ereignisse (Events) aus: Klicken auf Schaltfläche: ActionEvent Klicken mit der Maus auf Komponenten: MouseEvent Betätigen von Keyboardtasten: KeyEvent Betätigen von Fensterfunktionen: WindowEvent Events sind Java-Objekte, die Informationen über Benutzeraktionen kapseln Die Eventklassen bilden eine Vererbungshierarchie (siehe API) Ereignisbehandlung Ereignisbehandlung AWTEvent ActionEvent AdjustmentEvent ComponentEvent TextEvent Objekte, die auf Benutzeraktionen reagieren sollen (z.b. Fenster), müssen diese Ereignisse abhören können Man kann ereignisempfangende Objekte (Fenster) bei ereignisauslösenden Objekten (Button) als Ereignisabhörer (EventListener) registrieren ConzainerEvent FocusEvent InputEvent WindowEvent PaintEvent KeyEvent MouseEvent EventListener ist eine Schnittstelle, die festlegt, mit welchen Operationen auf ein Ereignis regiert werden kann Für jede Ereignisart gibt es eine eigene EventListener- Schnittstelle (ActionListener, MouseListener, ) 31 32

9 Ereignisbehandlung Ereignisbehandlung Für die Ausführung von Benutzeraktionen zuständige Klassen (ereignisempfangende Klassen) müssen die entsprechende EventListener-Schnittstelle implementieren Für die Ausführung von Benutzeraktionen zuständige Klassen (ereignisempfangende Klassen) müssen die entsprechende EventListener-Schnittstelle implementieren <<interface>> EventListener <EreignisBehandlungs Operationen> <EreignisauslösendeKlasse> addeventlistener() removeeventlistener() Ereignisauslösende Objekte benachrichtigen alle bei ihr registrierten Ereignisabhörer durch Aufruf der zum Ereignis gehörenden Operation der Ereignisabhörer-Schnittstelle <EreignisEmpfangendeKlasse> <EreignisBehandlungsOperationen> EventObject getsource() Ereignisbehandlung Ereignisbehandlung Beispiel: ActionEvent, ActionListener (Buttons) <<interface>> ActionListener actionperformed() MeinFenster actionperformed() Button addactionlistener() removeactionlistener() ActionEvent getactioncommand() Beispiel: ActionEvent, ActionListener (Button close) public class meinfenster extends Frame implements ActionListener{ public meinfenster(){ Button close = new Button( close ); add(close); close.addactionlistener(this);//fenster bei Button anmelden public void actionperformed(actionevent e){ if (e.getactioncommand().equals("close")){ dispose();//fenster schließen System.exit(0);//Anwendungsresourcen freigeben 35 36

10 Ereignisbehandlung Ereignisbehandlung Beispiel: WindowEvent, WindowListener (Fenster) Beispiel: WindowAdapter (mit leeren Implementierungen) <<interface>> WindowListener windowclosing() windowclosed() windowopened() windowactivated() MeinFenster addwindowlistener() removewindowlistener() WindowAdapter windowclosing() windowclosed() windowopened() windowactivated() <<interface>> WindowListener MeinFenster addwindowlistener() removewindowlistener() MeinFenster WindowEvent getwindow() WindowEventHandler windowclosing() WindowEvent getwindow() Ereignisbehandlung Ereignisbehandlung Beispiel: WindowAdapter (mit leeren Implementierungen) public class MeinWindowEventHandler extends WindowAdapter{ MeinFenster f; MeinWindowEventHandler(MeinFenster f) { this.f = f; public void windowclosing(windowevent e){ f.dispose(); System.exit(0); public class meinfenster extends Frame { public meinfenster() { MeinWindowEventHandler w = new MeinWindowEventHandler(this); addwindowlistener(w); ) Beispiel: WindowAdapter (als anonymes Objekt) public class meinfenster extends Frame { public meinfenster() { addwindowlistener(new WindowAdapter{ public void windowclosing(windowevent e){ dispose(); System.exit(0); ); 39 40

11 Ereignisbehandlung Ereignisbehandlung Event-Klasse Interface Methoden Ereignis- Quellen ActionEvent ActionListener actionperformed() Button MenuItem TextField AdjustmentEvent AdjustementListener adjustmentvaluechanged() Scrollbar ItemEvent ItemListener itemstatechanged() Checkbox CheckboxMenuItem Choice List KeyEvent KeyListener keypressed() Component keyreleased() keytyped() Event-Klasse Interface Methoden Ereignis- Quellen MouseEvent MouseListener mouseclicked() Component mouseentered() mouseexited() mousepressed() mousereleased() MouseMotionListener mousedragged() mousemoved() Component WindowEvent WindowListener windowactivated() Window windowclosed() windowclosing() windowdeactivated() windowdeiconified() windowiconified() windowopened() Motivation Vorlesung Informatik II Universität Augsburg Sommersemester 2011 Prof. Dr. Robert Lorenz Lehrprofessur für Informatik Datenbanksysteme als Basis moderner Softwaresysteme Web-basierte Systeme (ebay, Amazon, Expedia, Online- Banking) Unternehmensinformationssysteme(SAP R/3,) Grundlage vieler Informatik-Berufe Administration, Planung/Entwurf, Entwicklung, Nutzung 08. Exkurs: Datenbanken 1 2

12 Motivation Traditionelle Datenverwaltung Hohe Herausforderungen Verwaltung von Daten im Terabyte-Bereich (1 TB = 1000 GB) Viele Nutzer, parallele Anfragen, hohe Verfügbarkeit, Sicherheit, Konsistenz Querbezüge zu anderen Informatikbereichen Modellierung, Datenstrukturen, Sicherheit, Theorie, Betriebssysteme, Physische Datenabhängigkeit Änderungen an der Struktur der Daten führen zu Änderungen der Anwendungsprogramme. Anwendungsprogramme müssen Struktur der Daten kennen Datenredundanz/-inkonsistenz Anwendungsprogramme/Benutzer haben spezielle Erfordernisse bzgl. der Daten: Dieselben Daten werden in verschiedenen Versionen mehrfach abgespeichert. Änderungen der Daten können zu Inkonsistenzen zwischen verschiedenen Versionen führen. 3 4 Traditionelle Datenverwaltung Datenbanksysteme (DBS) Einbenutzerbetrieb Auf eine Datei kann nur ein Anwendungsprogramm auf einmal zugreifen. Folgerungen: hohe Kosten für die Anpassung von Anwendungsprogrammen Unsicherheit bzgl. der Korrektheit der Daten Effizienzverlust bei Speicherung und Zugriff auf Daten Löse Aufgaben der Beschreibung, des Abspeicherns und des Zugriffs auf Daten aus den Anwendungsprogrammen heraus. Programme DBMS (Datenbankmanagementsystem): Verarbeitung von Anfragen, Zugriff auf gespeicherte Daten DD (Data Dictionary) DB (Daten bank) Benutzergruppen DB (Daten bank) DBS (Datenbanksystem) 5 6

13 DBS DBS Datenbankmanagementsystem (DBMS) Softwaresystem, das die Definition, Konstruktion (Speichern) und Manipulation (Anfragen, Änderungen, Berichte) von Daten unterstützt. Datenbank Menge der von einem DBMS verwalteten Daten. Sie beschreibt einen wohldefinierten Ausschnitt der realen Welt (Miniwelt). Data Dictionary/Datenbankschema (DD) Legt die Struktur der Daten fest (bzgl. eines Datenmodells). Eigenschaften Redundanz- und Konsistenzkontrolle Datenunabhängigkeit: einheitliche Zugriffs-Schnittstelle auf Daten Schnelle Verarbeitung von DB-Operationen Integrierte Datenspeicherung für verschiedene Anwendungen: Unterstützung von Sichten/Views Mehrbenutzerbetrieb: Unterstützung von Transaktionen und Nebenläufigkeitskontrolle Datensicherheit: Zugriffsverwaltung Datenunversehrtheit: Datenwiederherstellung/Recovery 7 8 DBS Relationales Datenmodell Kriterien für den Einsatz von DBS Anwendungen und Datenstrukturen sind Änderungen unterworfen Mehrere Benutzer/Anwendungen greifen parallel auf die Daten zu Es handelt sich um sehr große Datenmengen Datenverlust (nach technischen Fehlern) soll ausgeschlossen werden Zugriffsverwaltung ist notwendig Jedem DBS liegt ein Datenmodell zugrunde: Eigenschaften der Datenelemente Struktur der Datenelemente Konsistenzbedingungen Operationen zum Speichern, Suchen, Ändern Löschen Das am meisten verwendete Datenmodell ist das relationale Datenmodell Jetzt: Informale Einführung in dieses Datenmodell anhand von Beispielen 9 10

14 Relationales Datenmodell Relationales Datenmodell Nach dem relationalen Datenmodell kann man sich eine Datenbank als eine Menge von Tabellen vorstellen: Nach dem relationalen Datenmodell kann man sich eine Datenbank als eine Menge von Tabellen vorstellen: Veranstaltung ID Name Jahr Semester Informatik SS Java-Programmierkurs 2009 SS Informatik WS Student Matrikelnummer Nachname Vorname Huber Markus Das ist die Sicht des Benutzers Mit der physischen Datenhaltung auf der Festplatte hat das nichts zu tun! (siehe Datenbak-Vorlesung) Relationales Datenmodell Relationales Datenmodell Nach dem relationalen Datenmodell kann man sich eine Datenbank als eine Menge von Tabellen vorstellen: Daten werden zeilenweise abgespeichert Mathematisch formal ist eine Tabelle eine Relation (also eine Menge von Tupeln) Spaltennamen heißen auch Attribute sie repräsentieren Wertemengen Jede Zeile entspricht einem Tupel in dieser Relation Nach dem relationalen Datenmodell kann man sich eine Datenbank als eine Menge von Tabellen vorstellen: Attribute Relationenschema Relation Relationenname Tupel Beispiel: (0001,Informatik 2,2009,SS) Veranstaltung 13 14

15 Modellierung Objekt-Relationale Abbildung Zur Modellierung von relationalen Datendanken verwendet man i.d.r. Sog. Entity-Relationsship-Modell (ER-Modelle) ER-Modelle sind nicht Teil von UML! ER-Modelle haben konzepzuell eine gewisse Ähnlichkeit zu Klassendiagrammen (aber nicht grafisch!) Wir werden ER-Modelle hier nicht besprechen (siehe Datenbank- Vorlesung Objekte einer Java-Anwendung lassen sich nicht direkt in einer relationalen Datenbank abspeichern Wir werden im Folgenden andeuten, wie man durch Objekte verwaltete Daten in Tabellen abspeichern kann (Objektrelationale ( Abbildung) Dabei lernen Sie nebenbei etwas über Datenbank-Modellierung Details siehe Datenbank-Vorlesung Objekt-Relationale Abbildung Objekt-Relationale Abbildung Beispiel: Eine Klasse (einen strukturierten Datentyp) als Tabelle abbilden Beispiel: Eine Klasse (einen strukturierten Datentyp) als Tabelle abbilden Student matrikelnummer :String Student matrikelnummer name Student matrikelnummer :String Student matrikelnummer name Huber name :String name :String Einwertige Attribute werden Spalten der Tabelle Objekte werden mit ihren Werten in Zeilen eingetragen 17 18

16 Objekt-Relationale Abbildung Objekt-Relationale Abbildung Beispiel: Eine Klasse (einen strukturierten Datentyp) als Tabelle abbilden Student matrikelnummer :String name :String Student matrikelnummer name Huber In der Tabelle soll eine Spalte identifizierend sein (hier: matrikelnummer) Schlüsselattribut Beispiel: Eine Klasse (einen strukturierten Datentyp) als Tabelle abbilden Vorlesung name jahr semester Vorlesung ID name jahr semester Info SS Falls eine Klasse kein Schlüsselattribut besitzt, wird ein solches hinzugefügt Künstliches Schlüsselattribut (hier: ID) Werte erhält man durch Durchnummerieren Objekt-Relationale Abbildung Objekt-Relationale Abbildung Beispiel: Beliebig mehrwertige Attribute als Tabelle abbilden Beispiel: Endlich mehrwertige Attribute als Spalten abbilden Student studiengang :String [1..*] Student matrikelnummer name Student studiengang :String [1..2] Student Studium1 Studium2 Informatik Physik Informatik null Schlüsselattribut Für jeden Wert eine Zeile StudiengangStudent matrikelnummer studiengang Informatik Physik Mathematik 21 22

17 Objekt-Relationale Abbildung Objekt-Relationale Abbildung Student adresse :Adresse [1] <<datatype>> Adresse strasse plz Referenzattribut Beispiel: Assoziationen abbilden?..1 -?..? Assoziationen: Referenzattribut Vorlesung 1..* Vorlesung ID dozentid dozent Professor Professor ID name 0013 Referenzattribut Objekt-Relationale Abbildung Objekt-Relationale Abbildung Beispiel: Assoziationen abbilden Beispiel: Generalisierungen abbilden?..* -?..* - Assoziationen: Eigene Tabelle Vorlesung Vorlesung ID * Vorlesung_Student vorlesungid matrikelnummer 1..* Student Student matrikelnummer Möglichkeit 1: Alle Attribute in eine einzige Tabelle unbesetzte Zellen, eine gemeinsame ID, neues Attribut typ Student matnummer <<abstract>> Person name Mitarbeiter persnummer Person ID name matnummer persnummertyp 25 26

18 Objekt-Relationale Abbildung Objekt-Relationale Abbildung Beispiel: Generalisierungen abbilden Möglichkeit 2: Eigene Tabelle für jede konkrete Klasse eigene ID für jede Klasse Übernahme der Attribute abstrakter Oberklassen Möglichkeit 3: Eigene Tabelle für jede Klasse gemeinsame ID Zuordnung Oberklasse - Unterklasse über diese ID Beispiel: Alle Klassenattribute in eigene Tabelle abbilden Klassenattribute klassenname attributname attributwert Beispiel: Containerklassen zur Objektverwaltung werden nicht abbgebildet, denn die verwalten ja keine eigenen fachlichen Daten SQL SQL Structured Query Language (SQL): Deklarative Datenbanksprache zur Definition, Manipulation und Abfrage von Daten kann interaktiv als auch eingebettet (in eine Programmiersprache) verwendet werden Einheitliche Schnittstelle für Zugriff auf Datenbanken Jetzt: kurze Einführung mit einfachen Anweisungen am Beispiel Es existieren mehrere SQL-Standards, an die sich existierende DBS nicht 100-prozentig halten Syntax variiert von DBS zu DBS Wichtige Schlüsselwörter: table record, row field, column Relation Tupel Attribut Datentypen ähnlich wie in Programmiersprachen, abhängig vom betrachteten SQL-Standard bzw. DBS 29 30

19 SQL SQL Definition einer Tabelle: Tabellenname Löschen Definition einer Tabelle: create table Vorlesung ( ID integer not null, name varchar(30) not null, jahr char(4) not null, semester char(2) not null, dozent integer ); Ganze Zahl (4 Byte) Variabler String der Länge <=30 String der Länge 2 drop table Vorlesung Attribute Datentypen not null muss Wert eingetragen sein SQL SQL Elementare Datentypen Einfügen von Tupeln: date float decimal(n,m) boolean array Kalenderdatum Gleitkommazahl Festkommazahl Wahrheitswerte true, false Feld (erst seit SQL-99-Standard) insert into Vorlesung values (1, Informatik 2, 2009, SS,null); Undefinierter Wert für Dozent 33 34

20 SQL SQL Ändern von Tupeln: update Vorlesung set dozentid = 13 where ID = 1; Neuer Wert in einer Spalte Löschen von Tupeln: delete from Vorlesung where semester = SS ; Auswahl der Tupel (der Zeilen) nach einer Bedingung Auswahl der Tupel (der Zeilen) nach einer Bedingung (Mehrere set-anweisungen durch Komma trennen) SQL SQL Abfrage von Tupeln: alle Tupel einer Tabelle select * from Vorlesung; Abfrage von Tupeln: mit Auswahl von Tupeln select * from Vorlesung where dozentid is null; Werte aller Spalten ausgeben Auswahl der Tupel (der Zeilen) nach einer Bedingung (Die select-anweisung gibt immer eine Tabelle zurück) 37 38

21 SQL SQL Abfrage von Tupeln: mit Auswahl von Spalten select distinct name,semester from Vorlesung; Keine Duplikate ausgeben Auswahl von Spalten (Kombination mit Tupelauswahl möglich) Zusammengehörige Daten sind über mehrere Tabellen verstreut? Natürlicher Verbund von Tabellen (natural join) select distinct Vorlesung.name,Professor.name from Vorlesung,Professor where vorlesung.dozentid = Professor.ID and semester = SS ; Kombination von Auswahl- Bedingungen Verbundene Tabellen Identifizierung von Tupeln über Bedingung Auswahl von Spalten verschiedener Tabellen Entwurfsprozess Vorlesung Informatik II Universität Augsburg Sommersemester 2011 Prof. Dr. Robert Lorenz Lehrprofessur für Informatik Der (Architektur-) Entwurf beinhaltet Grundlegende Entwurfsentscheidungen (Teil 1) Schichtenarchitektur (Teil 1: Datenhaltung und Teil 2:GUI) Entwurfsmuster (verstreut) Standardisierung erhöht die Qualität und Wartbarkeit des Entwurfs und der Software 9. Schichtenarchtitektur: Teil 1 (Datenhaltung) 1 2

22 Entwurfsprozess Entwurfsprozess Grundlegende Entwurfsentscheidungen Plattform Programmiersprache GUI-System Art der Datenhaltung Schichtenarchitektur GUI-Schicht Fachkonzeptschicht Benutzeroberfläche mit Dialogführung und Darstellung der Daten der Fachkonzeptschicht Funktionaler Kern der Anwendung mit Zugriff auf Datenhaltungsschicht Manipulation der fachlichen Daten Datenhaltungschicht Realisierung der Datenspeicherung mit Zugriff auf gespeicherte Daten 3 4 Entwurfsprozess Entwurfsprozess Schichtenarchitektur Objekte einer Schicht können jeweils nur auf Objekte der direkt unter ihr liegenden Schicht zugreifen Jede Schicht wird durch ein Paket modelliert Schichtenarchitektur: GUI-Schicht Sichtbarmachen von fachlichen Daten an der Oberfläche durch Polling: Regelmäßiges Abfragen von Änderungen der fachlichen Daten durch die GUI-Schicht Beobachtermuster: Signalisieren von Änderungender fachlichen Daten durch die Fachkonzeptschicht (Details später)

23 Entwurfsprozess Datenhaltungsschicht Vorteile Wiederverwendbarkeit: jede Schicht besitzt eine präzise definierte Aufgabe und Schnittstelle Änderbarkeit/Wartbarkeit: Interne Organisation einer Schicht kann bei gleicher Schnittstelle beliebig verändert werden Portabilität: Hardwareabhängigkeiten können in einer Schicht isoliert werden Zur Laufzeit des Programms werden die Daten nur im Arbeitsspeicher gehalten Bei Beendigung des Programms gehen die Daten verloren Zur Vermeidung von Datenverlusten müssen die Daten dauerhaft (man sagt persistent) auf der Festplatte gespeichert werden Datenhaltungsschicht Datenhaltungsschicht Möglichkeiten der persistenten Datenspeicherung: (relationale) Datenbank Objektserialisierung Textdateien (z.b. Im XML-Format) Kriterien für die Wahl der Datenhaltung Mehrbenutzersystem? Mehr schreibende/lesende Zugriffe? Größe der Datenmengen (passen in Arbeitsspeicher)? Datenverlust bei Systemausfall akzeptabel? Performance-Anforderungen? Zugriffsverwaltung erforderlich? Portabilität der Daten?

24 Datenhaltungsschicht Datenhaltungsschicht Objektserialisierung: Speicherung der Gesamtheit aller Objekte als Byte-Strom mit Informationen zur Klassen, Objektbeziehungen und Attributen Mehrbenutzersystem? Mehr schreibende/lesende Zugriffe? Größe der Datenmengen (passen in Arbeitsspeicher)? Datenverlust bei Systemausfall akzeptabel? Performance-Anforderungen? Zugriffsverwaltung erforderlich? Portabilität der Daten? Textdateien: Speicherung in Textdatei als Zeichenkette in einem Format, aus dem Objekte und Objektbeziehungen rekonstruierbar sind Mehrbenutzersystem? Mehr schreibende/lesende Zugriffe? Größe der Datenmengen (passen in Arbeitsspeicher)? Datenverlust bei Systemausfall akzeptabel? Performance-Anforderungen? Zugriffsverwaltung erforderlich? Portabilität der Daten? Datenhaltungsschicht Datenhaltungsschicht Textdateien im XML-Format: Schnittstellen mit Datenbank- Funktionalitäten Mehrbenutzersystem? Mehr schreibende/lesende Zugriffe? Größe der Datenmengen (passen in Arbeitsspeicher)? Datenverlust bei Systemausfall akzeptabel? Performance-Anforderungen? Zugriffsverwaltung erforderlich? Portabilität der Daten? Datenbank: wie im Exkurs zu Datenbanken beschrieben, viele verschiedene Produkte, Zugriff über standardisierte Schnittstellen (ODBC, JDBC) Mehrbenutzersystem? Mehr schreibende/lesende Zugriffe? Größe der Datenmengen (passen in Arbeitsspeicher)? Datenverlust bei Systemausfall akzeptabel? Performance-Anforderungen? Zugriffsverwaltung erforderlich? Portabilität der Daten?

25 Datenhaltungsschicht Datenhaltungsschicht Klassendiagramm mit Datenhaltungsschicht: Anbindung an Containerklassen der Fachkonzeptschicht Implementiere Wurzel-Container für alle verwalteten Daten im Singletonmuster <Container> - daten<container> DatenContainer - uniqueinstance: DatenContainer = null -root DatenContainer -root -store <<interface>> Datenhaltung - DatenContainer() + instance :DatenContainer <Container> - daten<container> Fachkonzeptschicht Datenhaltungsschicht Datei Datenhaltungsschicht Datenhaltungsschicht Schnittstellenoperationen zum Laden und Speichern von Daten <<interface>> Datenhaltung + load + save + add + delete + modify Laden und Speichern aller Objekte Speichern, Löschen und Modifizieren einzelner Objekte Müssen von jeder Daten-Speicherungs-Klasse implementiert werden Gewährleistet Austauschbarkeit der Speicherungs-Methode Implementierung der Schnittstelle bei Objektserialisierung und Abspeicherung als Text (ausser XML-Format) <<interface>> Datenhaltung + load + save + add + delete + modify Laden und Speichern aller Objekte Speichern, Löschen und Modifizieren einzelner Objekte add, delete und modify werden leer implementiert oder rufen save auf

26 Datenhaltungsschicht Datenhaltungsschicht Implementierung der Schnittstelle bei Abspeicherung in einer Datenbank <<interface>> Datenhaltung + load + save + add + delete + modify save wird leer implementiert Laden und Speichern aller Objekte Speichern, Löschen und Modifizieren einzelner Objekte Gesamtimplementierung des Ladevorgangs: Bei Start des Programms: Erzeugung eines DatenContainer-Objekts Bei Erzeugung des DatenContainer-Objekts (im Konstruktor): Erzeugung der anderen Container-Objekte und eines Datenhaltungs-Objekts Laden der Daten und Erzeugung der Objekte über das Datenhaltungs-Objekt Datenhaltungsschicht Gesamtimplementierung des Speichervorgangs: Serialisierung oder Text Bei Programmende/Benutzerbefehl/Datenänderung: Speichern aller Daten über das Datenhaltungs-Objekt (Überschreiben aller Daten) Datenbank Speichern/Modifizieren/Löschen der Daten des betreffenden Objekts über das Datenhaltungs-Objekt (Aktualisieren eines Teils der Daten) Vorlesung Informatik II Universität Augsburg Sommersemester 2011 Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 10. Java: Datenhaltung mit Datenbanken 1

27 Datenbank-Programme Derby (Hersteller: Apache Foundation) Für die lokale Installation auf ihrem Rechner Download von Datenbank und Treiber (jar-datei): Datei entpacken und Pfad merken Pfad im Classpath eintragen: java Xbootclasspath/a: <Pfad der jar-datei> Beim ersten Programmstart muss man Tabellen erzeugen -(create-anweisung) Bei erneutem Start stehen diese Tabellen zur Verfügung. Datenbank-Programme MySQL Haben wir auf unserem Server installiert (aioml.informatik.uni-augsburg.de): Nur erreichbar über Uni-Netz oder VPN-Verbindung Download des Treibers (jar-datei): Datei entpacken und Pfad merken Pfad im Classpath eintragen: java Xbootclasspath/a: <Pfad der jar-datei> Tabellen zum Abfragen sind angelegt (keine neuen Tabellen anlegen!) 2 3 ODBC - Schnittstelle Open Database Connectivity (ODBC) Für alle kommerziellen und freien DBMS gibt es die einheitliche, standardisierte Benutzerschnittstelle ODBC ODBC verwendet SQL Der ODBC-Treiber eines DBMS bietet eine Programmier- Schnittstelle (API) für C-Programme Über ODBC kann eine Anwendung eine Datenbank unabhängig von ihrer Implementierung über SQL-Befehle verwaltet werden JDBC - Schnittstelle Java Database Connectivity (JDBC) Für den Zugriff über Java-Programme existiert die entsprechende Schnittstelle JDBC stellt Klassen für den Zugriff auf Datenbanken über ihre JDBC-Schnittstelle bereit Über diese Schnittstelle können wir einheitlich sowohl auf die Derby-, als auch auf die MySQL-Datenbank zugreifen! 4 5

28 Schritt 1: Laden einer JDBC-Treiber-Klasse (DB-spezifisch) Klassenoperation der Klasse Class: static Class forname(string classname) A call to forname("x") causes the class named X to be initialized. Returns: Class object for the class with the specified name. Schritt 1: Laden einer JDBC-Treiber-Klasse (DB-spezifisch) Class.forName( org.apache.derby.jdbc.embeddeddriver ); Class.forName( com.mysql.jdbc.driver ); classname fully qualified name of the desired class. Class Metaklasse zur Verwaltung von Datentypen 6 7 Schritt 2: Verbindung zur DB herstellen (DB-spezifisch) Klassenoperation der Klasse DriverManager static Connection getconnection(string url, String User, String password) Attempts to establish a connection to the given database URL. Attempts to select a driver from the set of registered JDBC drivers. Schritt 2: Verbindung zur DB herstellen (DB-spezifisch) Connection c = DriverManager.getConnection( jdbc:derby:derbydb;create=true,, ); Connection c = DriverManager.getConnection( jdbc:mysql://aioml.informatik.uniaugsburg.de:3306/thedatabase, user, password ); url DriverManager a database url of the form jdbc:subprotocol:subname Verwaltet geladene Treiber-Klassen 8 9

29 Schritt 3: Anweisungs-Objekt für SQL-Anfragen (einheitlich!) Operation der Schnittstelle Connection Schritt 3: Anweisungs-Objekt für SQL-Anfragen (einheitlich!) Statement abfrage = c.createstatement(); Statement createstatement() Creates a Statement object for sending SQL statements to the database. Connection A connection (session) with a specific database. SQL statements are executed within the context of a connection Schritt 4: SQL-Anweisung ausführen (einheitlich!) Operationen der Schnittstelle Statement ResultSet executequery(string query) executes the given SQL statement, returns a single ResultSet object. Schritt 4: SQL-Anweisung ausführen (einheitlich!) Operationen der Schnittstelle Statement boolean execute(string sql) executes the given SQL statement, which may return multiple results. ResultSet Statement contains the data produced by the given query; never null The object used for executing a static SQL statement and returning the results it produces. use getresultset,getmoreresults to get the result(s)

30 Schritt 4: SQL-Anweisung ausführen (einheitlich!) Operationen der Schnittstelle Statement int executeupdate(string sql) executes INSERT, UPDATE, or DELETE statements Returns: the row count for statement Schritt 4: SQL-Anweisung ausführen (einheitlich!) Operationen der Schnittstelle Statement ResultSet getresultset() Returns data from previous execute Schritt 4: SQL-Anweisung ausführen (einheitlich!) Operationen der Schnittstelle Statement void close() Releases database and JDBC resources Tabelle kreieren: String befehl = CREATE TABLE Vorlesung ( ID INTEGER NOT NULL, Name VARCHAR(20) NOT NULL, Jahr CHAR(4) NOT NULL, Semester CHAR(2) NOT NULL, DozentID INTEGER) ; abfrage.execute(befehl); (Hochkommas bei Bezeichnern, Unterscheidung Gross/Klein- Schreibung) 16 17

31 Tupel einfügen: String befehl = INSERT INTO Vorlesung VALUES (1, Informatik 2, 2009, SS,null) ; abfrage.executeupdate(befehl); Tupel löschen: String befehl = DELETE FROM Vorlesung WHERE semester = SS ; abfrage.executeupdate(befehl); (Hochkommas bei Zeichenketten, nicht bei Zahlen, nicht bei null) Tupel ändern: String befehl = UPDATE Vorlesung SET DozentID = 13 WHERE ID = 1 ; abfrage.executeupdate(befehl); Tupel ausgeben: String befehl = SELECT * FROM Vorlesung ; ResultSet ergebnis = abfrage.executequery(befehl); 20 21

32 Tupel ausgeben: Schnittstelle ResultSet A table of data representing a database result set Maintains a cursor pointing to its current row of data (initially 1 st row) Default: not updatable, has a cursor that moves forward only. Tupel ausgeben: Schnittstelle ResultSet Vorwärts/Rückwärts durchlaufbar und aktualisierbar machen durch Aufruf anderer Version von createstatement unter Benutzung geeigneter Konstanten: Statement stmt = c.createstatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet rs=stmt.executequery(""); Tupel ausgeben: Schnittstelle ResultSet Operationen zur Positionierung des Cursors: boolean absolute(int row) void movetoinsertrow() void movetocurrentrow() boolean first() boolean last() boolean next() boolean previous() Tupel ausgeben: Schnittstelle ResultSet Operationen, um Daten zu lesen (für jeden Datentyp): boolean getboolean(int columnindex) boolean getboolean(string columnname) 24 25

33 Tupel ausgeben: Schnittstelle ResultSet Operationen, um Daten zu aktualisieren (für jeden Datentyp): void updateboolean(int columnindex, boolean x) void insertrow() void updaterow() void deleterow() Tupel ausgeben: String befehl = SELECT * FROM Vorlesung ; ResultSet ergebnis = abfrage.executequery(befehl); while (ergebnis.next()){ System.out.println(ergebnis.getString( Name )); //oder Operationen zum Erzeugen von Objekten Zusammenfassung des Codes: Class.forName( org.apache.derby.jdbc.embeddeddriver ); Zusammenfassung des Codes: Programmabbruch bei Fehler Klasse nicht vorhanden Class.forName( org.apache.derby.jdbc.embeddeddriver ); Connection c = DriverManager.getConnection( jdbc:derby:derbydb;create=true,, ); Statement abfrage = c.createstatement(); Connection c = DriverManager.getConnection( jdbc:derby:derbydb;create=true,, ); Statement abfrage = c.createstatement(); Kein Treiberzugriff String befehl = SELECT * FROM Vorlesung ; ResultSet ergebnis = abfrage.executequery(befehl); while (ergebnis.next()){ //Operationen zum Erzeugen von Objekten String befehl = SELECT * FROM Vorlesung ; ResultSet ergebnis = abfrage.executequery(befehl); while (ergebnis.next()){ Kein Datenbankzugriff //Operationen zum Erzeugen von Objekten 28 29

34 Zusammenfassung des Codes: Fehler abfangen Einfügen in Datenhaltungsschicht: Klassendiagramm try{ Class.forName( org.apache.derby.jdbc.embeddeddriver ); <Container> -daten<container> Connection c = DriverManager.getConnection( jdbc:derby:derbydb;create=true,, ); Statement abfrage = c.createstatement(); String befehl = SELECT * FROM Vorlesung ; ResultSet ergebnis = abfrage.executequery(befehl); while (ergebnis.next()){ //Operationen zum Erzeugen von Objekten catch(exception e){<code für Fehlerbehandlung> <Container> -root DatenContainer -root -daten<container> -store <<interface>> Datenhaltung Datei Einfügen in Datenhaltungsschicht: Klassendiagramm <<interface>> Datenhaltung + load + save + add + delete + modify Laden und Speichern aller Objekte Speichern, Löschen und Modifizieren einzelner Objekte Einfügen in Datenhaltungsschicht (eine Alternative): Klassendiagramm Datei - DriverClassName :String = - databaseurl :String = con :Connection user :String password :String + Datei() + load(out con :DatenContainer) + save(in con :DatenContainer) + add(in o :Object) + delete(in o :Object) + modify(in o :Object) 32 33

35 Einfügen in Datenhaltungsschicht (eine Alternative): Implementierung in Java public Datei() { try{ Class.forName(driverClassName); con = DriverManager.getConnection (databaseurl,user,password); catch(exception e){ <Code für Fehlerbehandlung> Einfügen in Datenhaltungsschicht (eine Alternative): Implementierung in Java public void load(datencontainer con){ try{ Statement abfrage = con.createstatement(); String befehl = <Select-Ausdruck passend zu Klasse>; ResultSet ergebnis = abfrage.executequery(befehl); while (ergebnis.next()){ <Objekte erzeugen in Containern über datacon> catch(exception e){ <Code für Fehlerbehandlung> [Bei mehreren Klassen: viele select-anweisungen nacheinander] Daten aus Datenbank laden AnwendungsGUI starten In AnwendungsGUI DatenContainer initialisieren In DatenContainer Objekt-Container initialisieren In DatenContainer Datei-Objekt store initialisieren und store.load(this) aufrufen Einfügen in Datenhaltungsschicht (eine Alternative): Implementierung in Java public void add(oblect o){ try{ Statement abfrage = con.createstatement(); String befehl = <insert-ausdruck passend zu o>; abfrage.executeupdate(befehl); catch(exception e){ <Code für Fehlerbehandlung> [Bei mehreren Klassen: Viele alternative insert-anweisungen] 36 37

36 Neues Objekt in Datenbank speichern Speichern -Button klicken In actionperformed(): Objekt erzeugen und in Objekt- Container einfügen Im Container: Aufruf von root.getstore().add(o) Verwaltung der Werte der (zusätzlichen) ID-Spalten? Zusätzliche ID-Attribute in den Fachkonzeptklassen (Vor-/Nachteile?) Übernehmen der Werte beim Laden/Abspeichern Wie stellt man die Eindeutigkeit der ID-Werte sicher? ID-Attribut in der Fachkonzeptschicht verwenden? Identifizieren von Tupeln in Tabellen über die ID Verwaltung der Werte der (zusätzlichen) ID-Spalten? Keine solchen zusätzlichen Attribute (Vor-/Nachteile?) Erzeugung der Werte beim Abspeichern (Datenhaltung) Ignorieren der ID-Werte beim Laden Wie identifiziert man Tupel in Tabellen? Wie stellt man die Eindeutigkeit der ID-Werte sicher? Vorlesung Informatik II Universität Augsburg Sommersemester 2011 Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 11. UML: Sequenzdiagramm 40 1

37 Motivation Sequenzdiagramme Es gibt verschiedene UML-Diagramme, um (noch programmiersprachenunabhängig) die Implementierung von Operationen zu modellieren Sequenzdiagramme: Berücksichtigen Nebenläufigkeit (kausale Unabhängigkeit) von Anweisungen Zustandsautomaten Sequenzdiagramme veranschaulichen den Ablauf eines Teils der Anweisungen bei Abarbeitung einer Operation Einfachster Fall: Nur ein alternativer Ablauf ohne Verzweigungen und Wiederholungen wird modelliert Verallgemeinerungen: Mehrere alternative Abläufe zusammenfassen (mittels Verzweigungen und Wiederholungen) Aktivitätsdiagramme 2 3 Sequenzdiagramme Sequenzdiagramme Sequenzdiagramme zeigen grafisch die Interaktion zwischen mehreren Kommunikationspartnern Kommunikationspartner: Objekte, Klassen, Benutzer Interaktionen: Operationsaufrufe und Signale (Botschaften) Synchrone Botschaften: Sender wartet mit der eigenen Verarbeitung auf Beendigung der aufgerufenen Operation Asynchrone Botschaften: Sender wartet nicht mit der eigenen Verarbeitung auf Beendigung der aufgerufenen Operation Parallele Verarbeitung Komponenten eines Sequenzdiagramms: Kommunikationspartner Aufrufer (Sender) und Ausführer (Empfänger) von Operationen Angegeben durch ihren Namen in einer rechteckigen Box Klassen: benutze Klassennamen Objekte: benutze Objektnamen oder :<Klassenname> (anonymes Objekt) Benutzer hat den Namen Benutzer (User) Nach unten verlaufenden Lebenslinien ausgehend von jedem Kommunikationspartner Stellt Existenzzeit eines Kommunikationspartners dar Angegeben durch gestrichelte Linien 4 5

38 Sequenzdiagramme Sequenzdiagramme Komponenten eines Sequenzdiagramms: Botschaften Angegeben durch durchgezogenen Pfeil von Lebenslinie des Senders zur Lebenslinie des Empfänger Annotiert mit dem Namen (Operation: Benutze Prototyp) Werden von oben nach unten an die Lebenslinien notiert Interpretation: Obere Botschaft kausal vor unterer Botschaft Komponenten eines Sequenzdiagramms: Synchrone Botschaft Durchgezogener Pfeil mit geschlossener Pfeilspitze Rückantwort erforderlich Botschaft kausal vor (oberhalb von) Rückantwort Rückantwort Gestrichelter Pfeil mit geschlossener Pfeilspitze Operationen: annotiert mit Rückgabeobjekt Asynchrone Botschaft: Durchgezogener Pfeil mit offener Pfeilspitze 6 7 Sequenzdiagramme Sequenzdiagramme Komponenten eines Sequenzdiagramms: Operationsabarbeitungsdauer Angegeben durch rechteckige Box, über die Lebenslinie gelegt Erlaubt Darstellung, dass bei der Abarbeitung einer Operation andere Operation aufgerufen werden Später: Kontrollstrukturen (Verzweigung, Wiederholung) Komponenten eines Sequenzdiagramms: Anweisungen, die keiner Botschaft entsprechen, können nicht modelliert werden, z.b. Deklarationen Wertzuweisungen an Variablen primitiven Typs 8 9

39 Sequenzdiagramme Sequenzdiagramme Botschaften: Beispiele Synchrone Botschaften: Verwaltungsoperationen Ausnahmebehandlung (später) Asynchrone Botschaften: Konstruktoren Benutzeraktionen (Ereignisse) Aufrufe von Prozessen (später) Operationsaufrufe und Kommunikationspartner Empfänger ist dasjenige Objekt/diejenige Klasse, für das/die die Operationen aufgerufen wird Die Operation gehört zum Verhalten des Objekts/der Klasse Empfänger von Klassenoperationen sind Klassen Empfänger sonstiger Operationen sind Objekte Sender ist dasjenige Objekt/diejenige Klasse, bei dem eine Operationsabarbeitung den Operationsaufruf verursacht Sender ist eine Klasse bei Abarbeitung einer Klassenoperation Sender ist ein Objekt bei Abarbeitung sonstiger Operationen Sequenzdiagramme Sequenzdiagramme Allgemeine grafische Veranschaulichung Lebenslinie <Partner> <Partner> <Partner> <synchron> <synchron> <Rückgabeobjek> Aufruf bei Abarbeitung <asynchron> Botschaft an sich selbst <synchron> Beispiel: ActionListener registrieren (Teil der Implementierung des Konstruktors des Fensters) User new MeinFenster() :MeinFenster close:button new Button() add(close) <asynchron> <asynchron> <synchron> Operationsabarbeitungsdauer addactionlistener(this) 12 13

40 Sequenzdiagramme Sequenzdiagramme Beispiel: Auf ActionEvent reagieren (zeigt eine alternative Ausführung) User :Button :MeinFenster System onclick new ActionEvent() e:actionevent actionperformed(e) getactioncommand() s dispose() exit(0) Beispiel: Daten von der GUI in die Fachkonzeptklasse übertragen (Ausschnitt) User speichern:button :MeinFenster onclick new ActionEvent() actionperformed(e) getactioncommand() s e:actionevent new Student() subject:student save() name:textfield gettext() s setname(s) Sequenzdiagramme Sequenzdiagramme Kausalität in Sequenzdiagrammen: Senden vor Empfangen von Nachrichten Operationsbeginn vor Operationsende Obere vor untere Aktion Abstraktion in Sequenzdiagrammen: Modellierung in mehreren Phasen: Operationen werden Top-Down verfeinert / implementiert Nicht kausal geordnete Aktionen sind kausal unabhängig Solche Aktionen heißen nebenläufig 16 17

41 Sequenzdiagramme Sequenzdiagramme Darstellung verschachtelter Operationsaufrufe der Form <methodeaussen>(<methodeinnen>())(übergabe von Parametern durch Operationsaufruf) Alternative 1: Verzichte auf Darstellung von <methodeinnen>() Darstellung verschachtelter Operationsaufrufe der Form <methodeaussen>(<methodeinnen>())(übergabe von Parametern durch Operationsaufruf) Alternative 2: Zerlege Anweisung in zwei Botschaften <Partner> <Partner> <Partner> <Partner> <Partner> <methodeaussen>(<methodeinnen>()) <methodeinnen>() o <methodeaussen>(o) Sequenzdiagramme Sequenzdiagramme Konsistenz mit Klassendiagramm beachten: Alle Klassen von Kommunikationspartnern müssen im Klassendiagramm vorkommen Alle Operationen müssen in der richtigen Klasse im Klassendiagramm vorkommen Operationen dürfen nur konsistent zu den Navigierbarkeiten der Assoziationen im Klassendiagramm aufgerufen werde(wer eine Operation eines Objekts aufruft, muss dieses Objekt kennen!) Es gibt etliche Operatoren zur Kombination von Sequenzdiagrammen: Alternativen Wiederholungen u.v.m. Oft muss das Klassendiagramm nochmal angepasst werden 20 21

42 Sequenzdiagramme Sequenzdiagramme Alternative: alt-umgebung zur Unterscheidung mehrerer alternativer Ausführungen in Abhängigkeit von Bedingungen Alternative: opt-umgebung zur optionalen Ausführung in Abhängigkeit von einer Bedingung alt <Partner> <Partner> <Partner> <botschaft> <Partner> <Partner> <Partner> <botschaft> <botschaft> <botschaft> [Bedingung1] <botschaft> opt <botschaft> <botschaft> <botschaft> [Bedingung2] [Bedingung] Sequenzdiagramme Sequenzdiagramme Beispiel: Auf ActionEvent reagieren User :Button :MeinFenster System onclick new ActionEvent() e:actionevent actionperformed(e) Wiederholung: loop-umgebung für n-fache Wiederholung <Partner> <Partner> <Partner> <botschaft> getactioncommand() s loop(n) <botschaft> <botschaft> opt [s.equals( close )] dipose() <botschaft> exit(0) 24 25

43 Sequenzdiagramme Sequenzdiagramme Wiederholung: loop-umgebung für Wiederholung in Abhängigkeit von einer Bedingung <Partner> <Partner> <Partner> <botschaft> Beispiel: Akualisierung eines Containers und der GUI nach Datenspeicherung :MeinFenster professoren:professorencontainer addprofessor(subject) loop <botschaft> <botschaft> <botschaft> update() professorenliste:list removeall() [Bedingung] getprofessor(k++) p tostring() s add(s) p:professor loop [0<=k<anzahlProfessoren] GUI-Schicht Vorlesung Informatik II Universität Augsburg Sommersemester 2011 Prof. Dr. Robert Lorenz Lehrprofessur für Informatik Sichtbarmachen von fachlichen Daten an der Oberfläche Polling: Regelmäßiges Abfragen von Änderungen der fachlichen Daten durch die GUI-Schicht Beobachtermuster: Signalisieren von Änderungen der fachlichen Daten durch die Fachkonzeptschicht 12. UML GUI-Schicht 1 2

44 GUI-Schicht Sichtbarmachen von fachlichen Daten an der Oberfläche Bisher: Anzeige von Daten nur durch ein Fenster möglich, das sich selbst aktualisiert GUI-Schicht Beobachtermuster: Klassendiagramm (grün: API) Sorgt dafür, dass bei Änderung eines Objekts alle davon abhängigen Objekte benachrichtigt und automatisch aktualisiert werden Jetzt: Anzeige von Daten simultan in mehreren Fenstern möglich. Aktualisierung aller Fenster durch Implementierung des Beobachtermusters (Polling später) 3 4 GUI-Schicht Beobachtermuster: Klassendiagramm (grün: API) GUI-Schicht Beobachtermuster: Schnittstelle Oberserver <<interface>> Observer update(o :Observable, arg :Object) 0..* 1..* observers Observable notifyobservers() setchanged() addobserver() deleteobserver() GUI-Klasse implementiert Observer-Schnittstelle update(o:observable,arg:object): aktualisiert angezeigte Daten von o GUIKlasse update(o :Observable, arg :Object) 0..* subject 1..1 DatenKlasse 5 6

45 GUI-Schicht Beobachtermuster: Klasse Observable Daten-Klasse erbt von Observable-Klasse und kann dann folgende Operationen benutzen: notifyobservers() Startet Aktualisierung aller Observer-Objekte deleteobserver() Löscht Verbindung zu Observer-Objekt addobserver() Baut Verbindung zu Observer-Objekt auf setchanged() Teilt mit, dass eine Veränderung des Observable-Objekts stattgefunden hat GUI-Schicht Beobachtermuster: Sequenzdiagramm User new GUIKlasse() changedaten() subject:datenklasse setchanged() notifyobservers() update(subject,null) addobserver(this) [g in observers] g:guiklasse loop 7 8 Dialogstruktur Bisher: Ein Fenster zum Erfassen, Ändern und Anzeigen von Daten Jetzt: Ein Fenster für das Anzeigen von Daten Ein anderes Fenster für das Erfassen und Ändern von Daten Vorschlag für eine Systematisierung der gegenseitigen Aufrufe von Fenstern (Dialogstruktur) Dialogstruktur Erfassungsfenster Erstelle für jede Klasse des Fachkonzepts ein Erfassungsfenster zum Erfassung und Ändern von Objekten (Attribute und Beziehungen) Grafisches Interaktionselement für jedes Atribut und jede Beziehung Schaltflächen oder pop-up-menü-einträge für Operationen 9 10

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 11. UML: Sequenzdiagramm 1 Motivation Es

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 07. Java: GUI und Ereignisbehandlung Teil

Mehr

Vorlesung Informatik II

Vorlesung Informatik II Vorlesung Informatik II Universität Augsburg Sommersemester 2011 Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 10. Java: Datenhaltung mit Datenbanken 1 Datenbank-Programme Derby (Hersteller: Apache

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 12. UML GUI-Schicht 1 GUI-Schicht Sichtbarmachen

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 08. Exkurs: Datenbanken 1 Motivation Datenbanksysteme

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 9. Schichtenarchtitektur: Teil 1 (Datenhaltung)

Mehr

Webbasierte Informationssysteme

Webbasierte Informationssysteme SS 2004 Prof. Dr. Stefan Böttcher Universität Paderborn - SS 2004 - Prof. Dr. Stefan Böttcher Folie 1 Was ist eine relationale Datenbank? Menge von Relationen (=Tabellen) und Constraints (=Integritätsbedingungen)

Mehr

Was passiert, wenn Button "Ok?" mit Maus angeklickt?

Was passiert, wenn Button Ok? mit Maus angeklickt? Ein Beispiel-Frame Was passiert, wenn Button "Ok?" mit Maus angeklickt? gar nichts!!! FH AACHEN UNIVERSITY OF APPLIED SCIENCES OOS Prof. Dr. H. Faßbender Ereignisverarbeitung 27. April 2016 1 Implementierung

Mehr

Fakultät Angewandte Informatik Programmierung verteilter Systeme 28.11.2011. Übungen zur Vorlesung Informatik II, Blatt 6

Fakultät Angewandte Informatik Programmierung verteilter Systeme 28.11.2011. Übungen zur Vorlesung Informatik II, Blatt 6 WS 2011/12 Fakultät Angewandte Informatik Programmierung verteilter Systeme 28.11.2011 Prof. Dr. Bernhard Bauer Übungen zur Vorlesung Informatik II, Blatt 6 Abgabe: Montag, 05.12.2011, 12.00 Uhr, Informatik

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 7. Grafische Benutzeroberflächen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 7. Grafische Benutzeroberflächen 1 Kapitel 7 Grafische Benutzeroberflächen Grafische Benutzeroberflächen 1 Ziele Grafische Benutzeroberflächen (Graphical User Interfaces) als Anwendungsbeispiel für die objektorientierte Programmierung kennenlernen.

Mehr

Übersicht. 1 Vorbemerkungen zu Sequenzdiagrammen. 2 Sequenzdiagramm aus Code ableiten. 3 Sequenzdiagramm konstruieren und in Java implementieren

Übersicht. 1 Vorbemerkungen zu Sequenzdiagrammen. 2 Sequenzdiagramm aus Code ableiten. 3 Sequenzdiagramm konstruieren und in Java implementieren Globale Übung Informatik 2, Blatt 7 Globale Übung Informatik 2, Blatt 7 Übersicht Globale Übung Informatik 2 im Sommersemester 2010 Blatt 7, Aufgaben 27-28 1 Vorbemerkungen zu Sequenzdiagrammen 2 Sequenzdiagramm

Mehr

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI Universität Osnabrück Drei-Schichten-Architektur 3 - Objektorientierte Programmierung in Java Vorlesung 6: 3-Schichten-Architektur Fachkonzept - GUI SS 2005 Prof. Dr. F.M. Thiesing, FH Dortmund Ein großer

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 7. Grafische Benutzeroberflächen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 7. Grafische Benutzeroberflächen 1 Kapitel 7 Ziele 2 (Graphical User Interfaces) als Anwendungsbeispiel für die objektorientierte Programmierung kennenlernen Benutzung von Vererbung zur Erstellung individueller GUI-Klassen durch Erweiterung

Mehr

Objektorientierte Software-Entwicklung

Objektorientierte Software-Entwicklung Objektorientierte Software-Entwicklung Priv.-Doz. Dr. Rolf Hennicker 08.01.2003 AWT und Swing AWT (Abstract Window Toolkit) und Swing 2 AWT (Abstract Window Toolkit) und Swing AWT und Swing bieten eine

Mehr

Seite Architektur interaktiver Systeme. 7. Architektur interaktiver Systeme. 7.1 Entkopplung durch Sichten. Schichtenarchitektur

Seite Architektur interaktiver Systeme. 7. Architektur interaktiver Systeme. 7.1 Entkopplung durch Sichten. Schichtenarchitektur 7. Architektur interaktiver Systeme 7.1 Entkopplung durch Sichten 7.2 Ereignisgesteuerter Programmablauf 7.3 Benutzungsoberflächen 7. Architektur interaktiver Systeme 7.1 Entkopplung durch Sichten 'The

Mehr

Probeklausur Informatik 2 Sommersemester 2013

Probeklausur Informatik 2 Sommersemester 2013 Probeklausur Informatik 2 Sommersemester 2013 1 Probeklausur Informatik 2 Sommersemester 2013 Name: Matrikelnummer: Hilfsmittel: Es sind alle schriftlichen Unterlagen, aber keine elektronischen Hilfsmittel

Mehr

Betreutes Programmieren Vorlesung Informatik II, Blatt 5

Betreutes Programmieren Vorlesung Informatik II, Blatt 5 SS 2011 Fakultät für Angewandte Informatik Lehrprofessur für Informatik 01.06.2011 Prof. Dr. Robert Lorenz Betreutes Programmieren Vorlesung Informatik II, Blatt 5 Programmieraufwand für geübte Programmierer:

Mehr

JDBC. Es kann z.b. eine ODBC-Treiberverbindung eingerichtet werden, damit das JAVA-Programm auf eine ACCESS-DB zugreifen kann.

JDBC. Es kann z.b. eine ODBC-Treiberverbindung eingerichtet werden, damit das JAVA-Programm auf eine ACCESS-DB zugreifen kann. JDBC in 5 Schritten JDBC (Java Database Connectivity) ist eine Sammlung von Klassen und Schnittstellen, mit deren Hilfe man Verbindungen zwischen Javaprogrammen und Datenbanken herstellen kann. 1 Einrichten

Mehr

Willkommen. Datenbanken und Anbindung

Willkommen. Datenbanken und Anbindung Willkommen Datenbanken und Anbindung Welche stehen zur Wahl? MySQL Sehr weit verbreitetes DBS (YT, FB, Twitter) Open-Source und Enterprise-Version Libs in C/C++ und Java verfügbar Grundsätzlich ist ein

Mehr

Universität Paderborn Prof. Dr. Stefan Böttcher. Abschluss von Kapitel 2: Programmierung Grafischer Oberflächen mit der Swing-Bibliothek

Universität Paderborn Prof. Dr. Stefan Böttcher. Abschluss von Kapitel 2: Programmierung Grafischer Oberflächen mit der Swing-Bibliothek Abschluss von Kapitel 2: Programmierung Grafischer Oberflächen mit der Swing-Bibliothek 1 Ereignis-orientierte Programmierung Prinzipien Programm besteht aus einer Reihe von Dämonen (=Listener) Dämon (=Listener)

Mehr

Kapitel 7: Ereignis-basierte Kommunikation

Kapitel 7: Ereignis-basierte Kommunikation Liste P: Programmieren mit Java WS 2001/2002, Prof. Dr. V. Turau, FH Wiesbaden Kapitel 7: Ereignis-basierte Kommunikation Folie 125 : Grafische Oberflächen Eine grafische Oberfläche besteht aus Komponenten.

Mehr

Grundlagen von Datenbanken SS 2010 Kapitel 8: Datenbank-Einbettung in Programmiersprachen Prof. Dr. Stefan Böttcher Universität Paderborn

Grundlagen von Datenbanken SS 2010 Kapitel 8: Datenbank-Einbettung in Programmiersprachen Prof. Dr. Stefan Böttcher Universität Paderborn Grundlagen von Datenbanken SS 2010 Kapitel 8: Datenbank-Einbettung in Programmiersprachen Prof. Dr. Stefan Böttcher Universität Paderborn Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher

Mehr

Java Database Connectivity (JDBC) 14.07.2009 Walther Rathenau Gewerbeschule 1

Java Database Connectivity (JDBC) 14.07.2009 Walther Rathenau Gewerbeschule 1 Java Database Connectivity (JDBC) 14.07.2009 Walther Rathenau Gewerbeschule 1 Was ist JDBC? Hauptsächlich eine Sammlung von Java Klassen und Schnittstellen für eine einfache Verbindung von Java Programmen

Mehr

Objektorientierte Programmierung Studiengang Medieninformatik

Objektorientierte Programmierung Studiengang Medieninformatik Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 5 12.04.2017 Was bisher geschah... Objektorientierte Programmierung Klassen und Objekte, Attribute

Mehr

Institut für Programmierung und Reaktive Systeme. GUIs mit Swing. Markus Reschke

Institut für Programmierung und Reaktive Systeme. GUIs mit Swing. Markus Reschke GUIs mit Swing Markus Reschke 28.08.2014 Beispiel: Ein einfaches GUI-Programm Siehe Painter.java Markus Reschke GUIs mit Swing 2 GUI Frameworks in Java AWT war das erste GUI-Framework, welches mit Java

Mehr

Eventhandling. Delegation model Eventhandler model

Eventhandling. Delegation model Eventhandler model Eventhandling Dient der Kommunikation der Controlls mit der eigentlichen Anwendung. Prinzipiell gibt es zwei verschiedene Verfahren für das Eventhandling Delegation model Eventhandler model Die Arbeit

Mehr

Datenbanken. Seminararbeit. Einführung in das wissenschaftliche Arbeiten

Datenbanken. Seminararbeit. Einführung in das wissenschaftliche Arbeiten Seminararbeit vorgelegt von: Gutachter: Studienbereich: Christian Lechner Dr. Georg Moser Informatik Datum: 6. Juni 2013 Inhaltsverzeichnis Inhaltsverzeichnis 1 Einführung in Datenbanken 1 1.1 Motivation....................................

Mehr

Grafische Benutzeroberflächen

Grafische Benutzeroberflächen Gilbert Beyer und Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik http://www.pst.ifi.lmu.de/lehre/wise-11-12/infoeinf WS11/12 Aufgabe Ein Benutzer soll zwei Zahlen in ein Programm

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

EAD II Übung 5. Graphische Benutzungsoberfläche mit BlueJ

EAD II Übung 5. Graphische Benutzungsoberfläche mit BlueJ EAD II Übung 5 Graphische Benutzungsoberfläche mit BlueJ Graphische Benutzungsoberfläche (GUI) Fenster, das weitere Komponenten zur Darstellung und Interaktion enthält spezielle Standardbibliotheken erforderlich,

Mehr

SQL. SQL: Structured Query Language. Früherer Name: SEQUEL. Standardisierte Anfragesprache für relationale DBMS: SQL-89, SQL-92, SQL-99

SQL. SQL: Structured Query Language. Früherer Name: SEQUEL. Standardisierte Anfragesprache für relationale DBMS: SQL-89, SQL-92, SQL-99 SQL Früherer Name: SEQUEL SQL: Structured Query Language Standardisierte Anfragesprache für relationale DBMS: SQL-89, SQL-92, SQL-99 SQL ist eine deklarative Anfragesprache Teile von SQL Vier große Teile:

Mehr

Instrumentierung und Dekodierung

Instrumentierung und Dekodierung 116 Copyright 1996-1998 by Axel T. Schreiner. All Rights Reserved. Instrumentierung und Dekodierung Erweiterung der Grafikklassen Das awt-paket erweitert alle Klassen für Grafikobjekte in java.awt, so

Mehr

Theorie zu Übung 8 Implementierung in Java

Theorie zu Übung 8 Implementierung in Java Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Theorie zu Übung 8 Implementierung in Java Klasse in Java Die Klasse wird durch das class-konzept

Mehr

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER INHALTSVERZEICHNIS 1. Datenbanken 2. SQL 1.1 Sinn und Zweck 1.2 Definition 1.3 Modelle 1.4 Relationales Datenbankmodell 2.1 Definition 2.2 Befehle 3.

Mehr

Programmieren II. Beispiele für RDBMS. Relationale Datenbanken. Datenbanken SQL. Dr. Klaus Höppner JDBC. Hochschule Darmstadt SS 2008

Programmieren II. Beispiele für RDBMS. Relationale Datenbanken. Datenbanken SQL. Dr. Klaus Höppner JDBC. Hochschule Darmstadt SS 2008 Programmieren II Datenbanken Dr. Klaus Höppner SQL Hochschule Darmstadt SS 2008 JDBC 1 / 20 2 / 20 Relationale Datenbanken Beispiele für RDBMS Ein Datenbanksystem ist ein System zur Speicherung von (großen)

Mehr

seit Java 1.1 Bestandteil der API: packages java.sql, javax.sql

seit Java 1.1 Bestandteil der API: packages java.sql, javax.sql JDBC inoffizielle Abkürzung für: Java Database Connectivity seit Java 1.1 Bestandteil der API: packages java.sql, javax.sql ist eine Menge von Klassen und Methoden, um aus Java-Programmen relationale Datenbanken

Mehr

Grafische Benutzeroberflächen

Grafische Benutzeroberflächen 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

Kapitel 1: Einführung 1.1 Datenbanken?

Kapitel 1: Einführung 1.1 Datenbanken? 1. Einführung 1.1. Datenbanken? Seite 1 Kapitel 1: Einführung 1.1 Datenbanken? 1. Einführung 1.1. Datenbanken? Seite 2 Willkommen! Studierenden-Datenbank Hans Eifrig hat die Matrikelnummer 1223. Seine

Mehr

Übersicht der wichtigsten MySQL-Befehle

Übersicht der wichtigsten MySQL-Befehle Übersicht der wichtigsten MySQL-Befehle 1. Arbeiten mit Datenbanken 1.1 Datenbank anlegen Eine Datenbank kann man wie folgt erstellen. CREATE DATABASE db_namen; 1.2 Existierende Datenbanken anzeigen Mit

Mehr

Udo Matthias Munz. Datenbanken und SQL. mit. Einführung. Informationstechnik

Udo Matthias Munz. Datenbanken und SQL. mit. Einführung. Informationstechnik Udo Matthias Munz Datenbanken und SQL mit Einführung Informationstechnik Zugriff auf eine Datenbank... 2 ODBC... 2 Eine DSN einrichten... 3 Verbindung zu einer Datenbank... 4 Datenbank... 4 Metadaten der

Mehr

Programmieren II. Java im Vergleich zu anderen Sprachen. Einführung: GUI. Einführung: Grafische Benutzeroberflächen. Dr.

Programmieren II. Java im Vergleich zu anderen Sprachen. Einführung: GUI. Einführung: Grafische Benutzeroberflächen. Dr. Programmieren II Dr. Klaus Höppner Hochschule Darmstadt SS 2008 1 / 22 2 / 22 Einführung: GUI Fast alle Programme besitzen mittlerweile eine grafische Benutzeroberfläche (engl: Graphical User Interface,

Mehr

Ziel dieses Kapitels: Einführung in die Grundzüge der Programmierung graphischer Benutzeroberflächen (engl.: "graphical user interface", GUI) in Java

Ziel dieses Kapitels: Einführung in die Grundzüge der Programmierung graphischer Benutzeroberflächen (engl.: graphical user interface, GUI) in Java GUI-Programmierung in Java GUI-Programmierung in Java 2002 Prof. Dr. Rainer Manthey Informatik II 1 AWT und Swing Ziel dieses Kapitels: Einführung in die Grundzüge der Programmierung graphischer Benutzeroberflächen

Mehr

Wiederholung VU Datenmodellierung

Wiederholung VU Datenmodellierung Wiederholung VU Datenmodellierung VU Datenbanksysteme Reinhard Pichler Arbeitsbereich Datenbanken und Artificial Intelligence Institut für Informationssysteme Technische Universität Wien Wintersemester

Mehr

Ereignisse (Events) in Java

Ereignisse (Events) in Java Ereignisse (Events) in Java werden durch Aktionen an GUI-Komponenten ausgelöst Quelle: GUI-Komponente, die ein Ereignis als Instanz einer Event-Klasse erzeugt Beispiel: ein Button, der angeklickt wird

Mehr

Webbasierte Informationssysteme

Webbasierte Informationssysteme SS 2004 Prof. Dr. Stefan Böttcher Universität Paderborn - SS 2004 - Prof. Dr. Stefan Böttcher Folie 1 Was ist eine relationale Datenbank? Menge von Relationen (=Tabellen) und Constraints (=Integritätsbedingungen)

Mehr

Datenbankentwurf & Datenbankzugriff mit JDBC. Georg Köster Sven Wagner-Boysen

Datenbankentwurf & Datenbankzugriff mit JDBC. Georg Köster Sven Wagner-Boysen Datenbankentwurf & Datenbankzugriff mit JDBC Georg Köster Sven Wagner-Boysen 6. November 2007 Gliederung 2 Datenbankentwurf für ProminentPeople.info ER-Modell Relationaler Entwurf Normalisierung Datenbankzugriff

Mehr

7. Architektur interaktiver Systeme

7. Architektur interaktiver Systeme 7. Architektur interaktiver Systeme 7.1 Entkopplung durch Sichten 7.2 Ereignisgesteuerter Programmablauf 7.3 Benutzungsoberflächen (Fortsetzung) Layout-Manager Definition Ein Layout-Manager ist ein Objekt,

Mehr

Datenbank und Tabelle mit SQL erstellen

Datenbank und Tabelle mit SQL erstellen Datenbank und Tabelle mit SQL erstellen 1) Übung stat Mit dem folgenden Befehlen legt man die Datenbank stat an und in dieser die Tabelle data1 : CREATE DATABASE stat; USE stat; CREATE TABLE data1 ( `id`

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung Exkurs: Graphische Benutzeroberflächen FH Braunschweig/Wolfenbüttel Sommersemester 2009 1 / 22 Gliederung I Wiederholung Klassen, Objektorientierung (Kapitel 10,11) Exkurs:

Mehr

Aufbau und Bestandteile von Formularen. Oracle Forms. Erstellen eines neuen Blocks (1) Starten von Oracle Forms

Aufbau und Bestandteile von Formularen. Oracle Forms. Erstellen eines neuen Blocks (1) Starten von Oracle Forms Oracle Forms Oracle Forms ist eine Applikation für den Entwurf und die Erstellung Forms-basierender Anwendungen. Diese Forms umfassen Dateneingabe-Formulare Datenabfrage-Formulare Browser-Formulare Oracle

Mehr

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin PhpMyAdmin = grafsches Tool zur Verwaltung von MySQL-Datenbanken Datenbanken erzeugen und löschen Tabellen und Spalten einfügen,

Mehr

Oracle & Java HOW TO

Oracle & Java HOW TO Oracle & Java HOW TO Helge Janicke, Niels-Peter de Witt, Karsten Wolke 21. Januar 2002 Inhaltsverzeichnis 1 Java-Anbindung an Oracle-DB 2 2 Benötigte Programme und Daten 2 3 Einbinden der Klassen 2 4 Aufbau

Mehr

Ein Manager mit CardLayout layout/cards.java

Ein Manager mit CardLayout layout/cards.java 201 Copyright 1996-1998 by Axel T. Schreiner. All Rights Reserved. Ein Manager mit CardLayout layout/cards.java CardLayout dient vor allem zum Aufbau von Inspektoren: In der gleichen Fläche soll je nach

Mehr

Betreutes Programmieren Vorlesung Informatik II, Blatt 11

Betreutes Programmieren Vorlesung Informatik II, Blatt 11 SS 2011 Fakultät für Angewandte Informatik Lehrprofessur für Informatik 13.07.2011 Prof. Dr. Robert Lorenz Betreutes Programmieren Vorlesung Informatik II, Blatt 11 Programmieraufwand für geübte Programmierer:

Mehr

Objektorientierter Entwurf (OOD) Übersicht

Objektorientierter Entwurf (OOD) Übersicht Übersicht Das Ziel des OO-Designs (OOD) ist es, die endgültige Architektur festzulegen durch Teil 1: Anbindung der Fachklassen an weitere Systeme: Benutzeroberfläche (mit MVC) Datenhaltung (Datenbank-Lösung

Mehr

Benutzeroberflächen. Abstract Windowing Toolkit, Rahmen, Wächter, Ereignisbehandlung, Ausgabe, Menüs.

Benutzeroberflächen. Abstract Windowing Toolkit, Rahmen, Wächter, Ereignisbehandlung, Ausgabe, Menüs. Benutzeroberflächen Abstract Windowing Toolkit, Rahmen, Wächter, Ereignisbehandlung, graphische Ausgabe, Menüs. Der Abstract Windowing Toolkit (awt) Jedes moderne Betriebssystem stellt bereit Fenster Menüs

Mehr

GUI Programmierung mit JAVA Swing

GUI Programmierung mit JAVA Swing GUI Programmierung mit JAVA Swing Komponenten Layout Event Handling Imaging 2001 Thomas Weiler 1 JAVA Swing Bibliothek zur Erstellung grafischer Benutzerschnittstellen in JAVA Bietet Klassen für grafische

Mehr

Institut für Informatik

Institut für Informatik Technische Universität München Institut für Informatik Lehrstuhl für Computer Graphik & Visualisierung WS 2009 Praktikum: Grundlagen der Programmierung Aufgabenblatt 11 Prof. R. Westermann, R. Fraedrich,

Mehr

JDBC. Java DataBase Connectivity

JDBC. Java DataBase Connectivity JDBC Java DataBase Connectivity JDBC-Schichten JDBC besteht aus 2 Teilen, 1. aus Datenbanktreibern, die den Anschluß von Java-Anwendungen an Datenbanksysteme wie Sybase, DB/2, Oracle, MS ACCESS oder Mini

Mehr

Datenbankentwicklung

Datenbankentwicklung Datenbankentwicklung Berechnung und Präsentation von Daten Organisation der Daten in alleinstehende Tabellen Exklusiver Zugriff auf alle Informationen einer Tabelle Beschränkte Anzahl von Daten pro Tabellenblatt

Mehr

Funktionale und Objekt-Orientierte Programmierkonzepte

Funktionale und Objekt-Orientierte Programmierkonzepte Funktionale und Objekt-Orientierte Programmierkonzepte Prof. Marc Fischlin, Wintersemester 15/16 Kapitel 17: GUI, Threads und verschachtelte Klassen 13. Oktober 2010 Dr.Marc Fischlin Kryptosicherheit 1

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

Oracle: Abstrakte Datentypen:

Oracle: Abstrakte Datentypen: Oracle: Abstrakte Datentypen: Oracle bietet zwei mögliche Arten um abstrakte Datentypen zu implementieren: Varying Array Nested Table Varying Array (kunde) kdnr kdname gekaufteart 1 Mustermann 1 4 5 8

Mehr

Datenbanken. Ein DBS besteht aus zwei Teilen:

Datenbanken. Ein DBS besteht aus zwei Teilen: Datenbanken Wikipedia gibt unter http://de.wikipedia.org/wiki/datenbank einen kompakten Einblick in die Welt der Datenbanken, Datenbanksysteme, Datenbankmanagementsysteme & Co: Ein Datenbanksystem (DBS)

Mehr

Datenbanken unter J++ - Teil 2

Datenbanken unter J++ - Teil 2 Eckart Modrow Datenbanken mit J++ S. 1 Datenbanken unter J++ - Teil 2 Inhalt: 3. Zugriff auf Datenbanken 3.1 OBDC-Treiber installieren und einrichten 3.2 Auf OBDC-Verknüpfungen zugreifen 3.3 SQL-Abfragen

Mehr

1 Klassen und Objekte

1 Klassen und Objekte 1 Klassen und Objekte Datentyp - Spezifikation des Typs von Datenobjekten Datenstruktur - logische Ordnung von Elementen eines Datentyps - zur (effizienten) Speicherung, Verwaltung, Zugriff - auf die Elemente

Mehr

GRAFISCHE BENUTZERSCHNITTSTELLEN

GRAFISCHE BENUTZERSCHNITTSTELLEN Vorlesung 4.4 GRAFISCHE BENUTZERSCHNITTSTELLEN Dr. Philip Mayer # 1 GUIs Grafische Benutzerschnittstellen (GUIs, Graphical User Interfaces) bieten dem Benutzer Zugriff auf ein Anwendungssystem GUIs sind

Mehr

Garten - Daten Bank. - survival pack -

Garten - Daten Bank. - survival pack - Garten - Daten Bank - survival pack - Dr. Karsten Tolle PRG2 SS 2017 Inhalt heute Kurz: Motivation und Begriffe SQL (survival pack) create table (Tabelle erzeugen) insert into (Einfügen) select (Anfragen)

Mehr

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben.

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben. MySQL-Befehle 1. Einleitung In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben. 2. Arbeiten mit Datenbanken 2.1 Datenbank anlegen Eine Datenbank kann man wie folgt

Mehr

Kapitel 9. Embedded SQL. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1

Kapitel 9. Embedded SQL. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1 Kapitel 9 Embedded SQL Vorlesung Datenbanken 1 Embedded SQL (siehe auch [Date00]) Arbeitsweise ähnlich PL/SQL, allerdings: Normale Programmiersprache mit eingestreuten SQL-Befehlen und anderen Befehlen

Mehr

GUI-Programmierung. Teil I. Unterlagen zum Modul OOP mit Java V by MOU2/BFH-TI. Berner Fachhochschule Technik und Informatik

GUI-Programmierung. Teil I. Unterlagen zum Modul OOP mit Java V by MOU2/BFH-TI. Berner Fachhochschule Technik und Informatik GUI-Programmierung mit Java Teil I Unterlagen zum Modul OOP mit Java V 3.0 2007 by WBR1/BFH-TI 2011 by MOU2/BFH-TI GUI-Programmierung V3.0 2011 by WBR1&MOU2/BFH-TI Lernziele Die Kursteilnehmer sind in

Mehr

Sommersemester Implementierung III: GUI und Verhalten (Teil 2)

Sommersemester Implementierung III: GUI und Verhalten (Teil 2) Sommersemester 2003 Implementierung III: GUI und Verhalten (Teil 2) 26 Aufgabe 5 Implementierung III: GUI und Verhalten (Teil 2) Umfang: 1 Woche Punkte: 50 P. Als Nächstes soll die Implementierung des

Mehr

/** Main-Methode erzeugt einen neuen Editor zum Testen */ public static void main(string[] args) { new Editor();

/** Main-Methode erzeugt einen neuen Editor zum Testen */ public static void main(string[] args) { new Editor(); Bereich: Grafische Benutzeroberflächen (UI), Events (2) Editor Package: de.dhbwka.java.exercise.ui.editor Klasse: Editor Aufgabenstellung: Schreiben Sie einen kleinen Texteditor mit Swing! Keine Panik,

Mehr

Praktische Informatik 1

Praktische Informatik 1 Praktische Informatik 1 Imperative Programmierung und Objektorientierung Karsten Hölscher und Jan Peleska Wintersemester 2011/2012 Session 2 Programmierung Begriffe C/C++ Compiler: übersetzt Quellcode

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 16. Java: Threads für Animationen 1 Motivation

Mehr

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik GUI-Programmierung mit Swing

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik GUI-Programmierung mit Swing Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer Programmiertechnik GUI-Programmierung mit Swing AWT und Swing Java enthält zwei Pakete zur Programmierung graphischer Oberflächen. java.awt: Das Abstract

Mehr

Kapitel 10. Event Handling 10.1 MVC

Kapitel 10. Event Handling 10.1 MVC Kapitel 10 Event Handling 10.1 MVC Erinnerung: Model - View - Controler (Smalltalk-80): Schema zum Implementieren graphischer Benutzeroberflächen Model: Klasse, die das funktionale Verhalten der Anwendung

Mehr

Klausur Datenbanken II

Klausur Datenbanken II Klausur Datenbanken II 8.3.2001 Name Vorname Semester Matrikelnr Aufgabe Punkte maximal 1 8 2 8 3 3 4 3 5 4 6 6 7 6 8 6 9 [Zusatz] [4] Summe 44 Punkte erreicht Bitte geben Sie die Lösungen möglichst direkt

Mehr

Relationale Datenbanken in der Praxis

Relationale Datenbanken in der Praxis Seite 1 Relationale Datenbanken in der Praxis Inhaltsverzeichnis 1 Datenbank-Design...2 1.1 Entwurf...2 1.2 Beschreibung der Realität...2 1.3 Enitiy-Relationship-Modell (ERM)...3 1.4 Schlüssel...4 1.5

Mehr

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik Programmieren II Innere Klassen Heusch 10, 13.10 Ratz 5.2.1, 9.8 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Innere Klassen Bisher kennen wir nur Klassen, die entweder zusammen

Mehr

Java Database Connectivity-API (JDBC)

Java Database Connectivity-API (JDBC) Java Database Connectivity-API (JDBC) Motivation Design Grundlagen Typen Metadaten Transaktionen Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 1 Motivation Problem: Zugriff auf ein DBMS ist Herstellerabhängig

Mehr

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm Exkurs: ANONYME KLASSEN Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm Anonyme Klassen Eigenschaften 1 Häufigste Anwendung lokaler Klassen: anonyme Definition. Klasse erhält keinen eigenen

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

I. Grundlagen II. Ereignistypen III. Ereignisempfänger. Event-Handling (EH)

I. Grundlagen II. Ereignistypen III. Ereignisempfänger. Event-Handling (EH) I. Grundlagen II. Ereignistypen III. Ereignisempfänger IV. Ereignisquellen V. Adapterklassen Event-Handling (EH) I. Grundlagen II. Ereignistypen III. Ereignisempfänger IV. Ereignisquellen V. Adapterklassen

Mehr

PHP- Umgang mit Datenbanken (1)

PHP- Umgang mit Datenbanken (1) PHP- Umgang mit Datenbanken (1) Weitere Funktionen zum Umgang mit Datenbanken (Erzeugen, Löschen) und Tabellen (Erzeugen, Löschen) Zum Beispiel für das Erzeugen einer neuen Datenbank $dbname= blumendb

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

SQL structured query language

SQL structured query language Umfangreiche Datenmengen werden üblicherweise in relationalen Datenbank-Systemen (RDBMS) gespeichert Logische Struktur der Datenbank wird mittels Entity/Realtionship-Diagrammen dargestellt structured query

Mehr

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen Klassenvariablen Wir wollen die Zahl der instantiierten Studentenobjekte zählen. Dies ist jedoch keine Eigenschaft eines einzelnen Objektes. Vielmehr gehört die Eigenschaft zu der Gesamtheit aller Studentenobjekte.

Mehr

Begriffe 1 (Wiederholung)

Begriffe 1 (Wiederholung) Begriffe 1 (Wiederholung) Klasse Eine Klasse ist der Bauplan für ein oder mehrere Objekte. In einer Klasse werden Dienste (Methoden) zur Verfügung gestellt. Klassennamen beginnen mit einem Großbuchstaben.

Mehr

A Datenbanken. A.1 Firebird. A.1.1 Installation des Servers. A.1.2 Installation der Beispieldatenbanken. Datenbanken 1

A Datenbanken. A.1 Firebird. A.1.1 Installation des Servers. A.1.2 Installation der Beispieldatenbanken. Datenbanken 1 Datenbanken 1 A Datenbanken A.1 Firebird Firebird ist als Datenbank konzipiert, die hauptsächlich in andere Anwendungsprogramme integriert wird. Die hier verwendete Oberfläche ist also eher untypisch für

Mehr

Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich

Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich WS 02/03 Warum muss ein Objekt wissen, zu welcher Klasse es gehört? Damit die Klassenzugehörigkeit

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

Java Database Connectivity. Gracin Denis, IB 4 C

Java Database Connectivity. Gracin Denis, IB 4 C Java Database Connectivity Gracin Denis, IB 4 C Agenda 1. JDBC-Architektur 2. Treiber der JDBC 2.1 Typ-1 Treiber 2.2 Typ-2 Treiber 2.3 Typ-3 Treiber 2.4 Typ-4 Treiber 3. Verbindungsablauf 4. Connection

Mehr

Aufgabe 1: Quer durch Java (4 Punkte) super abstract abstract protected

Aufgabe 1: Quer durch Java (4 Punkte) super abstract abstract protected Universität Augsburg, Institut für Informatik Sommersemester 2006 Prof. Dr. Werner Kießling 14. Oktober 2006 Markus Endres, Alfons Huhn, Timotheus Preisinger Informatik II Klausur 2 Hinweise: Die Bearbeitungszeit

Mehr

Kapitel 10. JDBC und SQLJ. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1

Kapitel 10. JDBC und SQLJ. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1 Kapitel 10 JDBC und SQLJ 1 JDBC und SQLJ Bisher: Einbettung von SQL (statisch bzw. dynamisch) in C, C++, COBOL, ADA (embedded SQL) bzw. prozedurale Erweiterungen für SQL in Oracle (PL/SQL) Was ist mit

Mehr

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen Kapitel 9 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Attribute von Klassen, Methoden und Variablen Interfaces WS 07/08 1/ 18 2/ 18

Mehr

Klassenmethoden. Klassenvariablen. Für das Auslesen des Studentenzählers definieren wir eine öffentliche Klassenmethode:

Klassenmethoden. Klassenvariablen. Für das Auslesen des Studentenzählers definieren wir eine öffentliche Klassenmethode: Klassenvariablen Klassenmethoden Wir wollen die Zahl der instantiierten Studentenobjekte zählen. Dies ist jedoch keine Eigenschaft eines einzelnen Objektes. Vielmehr gehört die Eigenschaft zu der Gesamtheit

Mehr

Programmieren in C/C++ und MATLAB

Programmieren in C/C++ und MATLAB Programmieren in C/C++ und MATLAB Christian-Albrechts-Universität zu Kiel CAU 8-1 Objektorientiertes Programmieren Die Programme, die bisher in diesem Kurs verwendet wurden, sind alle klein und überschaubar

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

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

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1 Kapitel 11 Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 2 Ziele Implementierungen für

Mehr