Software Entwicklung 1

Ähnliche Dokumente
Informatik I, Programmierung

Software Engineering Klassendiagramme Einführung

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

Objektorientierte Programmierung

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

Einführung in die Java- Programmierung

Algorithmen und Datenstrukturen

Programmierstil. Objektsammlungen. Konzepte. Zwischenspiel: Einige beliebte Fehler... Variablennamen Kommentare Layout Einrückung

Objects First With Java A Practical Introduction Using BlueJ. Mehr über Vererbung. Exploring polymorphism 1.0

Große Übung Praktische Informatik 1

Javakurs für Anfänger

Repetitorium Informatik (Java)

Nachklausur Programmieren / Algorithmen und Datenstrukturen 1

1 Polymorphie (Vielgestaltigkeit)

Probeklausur: Programmierung WS04/05

Objektorientierte Programmierung

5.14 Generics. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Einführung in die Informatik

Klassen mit Instanzmethoden

PIWIN 1 Übung Blatt 5

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

Einführung in die Programmierung Vorlesungsprüfung

Überschreiben von Methoden

JAVA - Methoden

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

Geordnete Binärbäume

Programmierkurs Java

Algorithmen und Datenstrukturen 07

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

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 13. Bäume. Bäume

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

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Java Einführung Klassendefinitionen

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

4. AuD Tafelübung T-C3

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Einführung in die Programmierung

Objektorientierte Programmierung

8. Objektorientierte Programmierung. Informatik II für Verkehrsingenieure

Software Engineering II

Vorkurs C++ Programmierung

JAVA KURS COLLECTION

5.4 Klassen und Objekte

Einführung in die Programmierung für Wirtschaftsinformatik

Typumwandlungen bei Referenztypen

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

Kapitel 6. Vererbung

Inhaltsverzeichnis. Praktikum Algoritmen und Datenstrukturen WS2004/2005 Paul Litzbarski Stefan Nottorf. Druckmanager allgemein 2.

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Probeklausur: Programmierung WS04/05

Aufgabenblatt Nr. 5 Generizität und TicTacToe

Übung Programmierung WS 2007/08 - Blatt 5

Java Einführung Methoden. Kapitel 6

368 4 Algorithmen und Datenstrukturen

Abschnitt 15: Unified Modeling Language (UML)

Java II - Übungsgruppe

Vererbung & Schnittstellen in C#

Distributed Computing Group

Objektorientierte Modellierung (1)

Vererbung. Martin Wirsing. Ziele. Vererbung

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Grundlagen der Programmierung Prof. H. Mössenböck. 10. Klassen

Java-Schulung Grundlagen

Grundlagen von Python

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Verkettete Listen. Implementierung von einfach verketteten Listen. Implementierung von doppelt verketteten Listen

Objektorientierte Programmierung. Objektorientierte Programmierung. Klasse. Objekt. Beispiel: Sportfest1. Methode. Eine Einführung mit BlueJ

Software Entwicklung 1

Theorie zu Übung 8 Implementierung in Java

5.5.8 Öffentliche und private Eigenschaften

Kapitel 6. Vererbung

Selbststudium OOP Programmieren 1 - H1103 Felix Rohrer

Die Programmiersprache C Eine Einführung

Neue Features in C# 2.0

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Kapitel 6. Vererbung

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

Informatik II, SS 2014

Institut für Programmierung und Reaktive Systeme 26. April Programmieren II. 10. Übungsblatt

Arrays Fortgeschrittene Verwendung

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Java I Vorlesung Vererbung und Sichtbarkeit

Javakurs für Anfänger

Aufgabe 1 (12 Punkte)

Assoziation und Aggregation

Studentische Lösung zum Übungsblatt Nr. 7

Java Einführung Methoden in Klassen

5. Tutorium zu Programmieren

Propädeutikum zur Programmierung

Betreutes Programmieren Vorlesung Informatik II, Blatt 7 Musterlösung

MCRServlet Table of contents

U08 Entwurfsmuster (II)

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

Testklausur 2 zur Vorlesung. Modellierung und Programmierung I. Dr. Monika Meiler Zeit: 60 Minuten

Software Engineering Klassendiagramme weiterführende Konzepte

Repetitorium Informatik (Java)

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

Objekt-Orientierte Programmierung

Transkript:

Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern

Fallstudie: Lauftagebuch Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 21

Erstellen einer Klasse 1 Studiere die Problembeschreibung. Identifiziere die darin beschriebenen Objekte und ihre Attribute und Methoden. 2 Erstelle entsprechende Klassendiagramme. 3 Übersetze die Klassendiagramm in eine Klassendefinition. Füge einen Kommentar hinzu, der den Zweck der Klasse erklärt. 4 Repräsentiere einige Beispiele durch Objekte. Erstelle Objekte und stelle fest, ob sie Beispielobjekten entsprechen. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 3/ 21

Aufgabe Entwickle ein Programm, das ein persönliches Lauftagebuch führt. Es enthält einen Eintrag pro Lauf. Einträge können hinzugefügt und entfernt werden. Außerdem soll der Eintrag an einer bestimmten Position ermittelt werden. Ein Eintrag besteht aus dem Datum, der zurückgelegten Entfernung, der Dauer des Laufs und einem Kommentar zum Zustand des Läufers nach dem Lauf. Für einen Eintrag kann man die Durchschnittsgeschwindigkeit ermitteln. Ein Datum besteht aus Tag, Monat und Jahr. Substantive liefern Hinweise auf Klassen oder Attribute Verben liefern Hinweise für Methoden Bieniusa/Poetzsch-Heffter Software Entwicklung 1 4/ 21

Klassendiagramm Entry d : Date distance : double duration : int comment : String double calculatespeed() Date day : int month : int year : int Eine Klasse kann durch ein Klassendiagramm spezifiziert werden. Klassendiagramme dienen hauptsächlich der Datenmodellierung. Sie sind im UML (Unified Modeling Language) Standard definiert. Sie enthalten den Name der Klasse, Attribute mit Typ und Methoden mit Signaturen. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 5/ 21

Implementierung: Eintrag // Eintrag in einem Lauftagebuch class Entry { Date d; double distance ; // in km int duration ; // in min String comment Entry ( Date d, double distance, int duration, String comment ) { this.d = d; this. distance = distance ; this. duration = duration ; this. comment = comment ; Bieniusa/Poetzsch-Heffter Software Entwicklung 1 6/ 21

Implementierung: Datum // Datum mit Tag, Monat, Jahr class Date { int day ; int month ; int year ; Date ( int day, int month, int year ) { this. day = day ; this. month = month ; this. year = year ; Bieniusa/Poetzsch-Heffter Software Entwicklung 1 7/ 21

Beispielobjekte Beispieleinträge am 5. Juni 2015, 8.5 km in 27 Minuten, gut am 6. Juni 2015, 4.5 km in 24 Minuten, müde am 23. Juni 2015, 42.2 km in 150 Minuten, erschöpft... als Objekte in einem Ausdruck new Entry ( new Date (5,6,2015), 8.5, 27, " gut ") new Entry ( new Date (6,6,2015), 4.5, 24, " muede ") new Entry ( new Date (23,6,2015), 42.2, 150, "k.o.")... in zwei Schritten mit Hilfsdefinition Date d1 = new Date (5,6,2015) ; Entry e1 = new Entry (d1, 8.5, 27, " gut "); Bieniusa/Poetzsch-Heffter Software Entwicklung 1 8/ 21

Implementierung: Geschwindigkeit class Entry { Date d; double distance ; // in km int duration ; // in min String comment ;... double calculatespeed () { double h = duration / 60.0; return distance / h; Bieniusa/Poetzsch-Heffter Software Entwicklung 1 9/ 21

Darstellung als String I class Date { int day ; int month ; int year ;... public String tostring () { return day + "." + month + "." + year ; Alle Referenztypen in Java haben eine Methode tostring(). Man kann eigene String-Repräsentationen definieren. Diese müssen als public deklariert werden (siehe Abschnitt Vererbung ). Die String-Repräsentation enthält üblicherweise Informationen zu den Attributwerten. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 10/ 21

Darstellung als String II tostring() wird (automatisch) aufgerufen, wenn das Objekt in einem Kontext verwendet wird, das einen String erwartet. Date d = new Date (5,6,2015) ; StdOut. println (d. tostring ()); StdOut. println (d); // alternativ Bieniusa/Poetzsch-Heffter Software Entwicklung 1 11/ 21

Delegation class Entry { Date d; double distance ; // in km int duration ; // in min String comment ;... public String tostring () { return d. tostring () + ": " + distance + " km in " + duration + " min ; " + comment ; Die Implementierung von tostring() in Entry verwendet die Implementierung dieser Methode in Date. Dieses Muster ist typisch für Klassen, deren Objekte (u.a.) aus Objekten anderer Klassen zusammengesetzt sind (sogenannte Aggregate oder Kompositionen). Bieniusa/Poetzsch-Heffter Software Entwicklung 1 12/ 21

Objekte mit Referenzen zu Objekten der gleichen Klasse Entwickle ein Programm, das ein Lauftagebuch unter einem Namen führt. Es enthält einen Eintrag pro Lauf. Einträge können hinzugefügt und entfernt werden. Desweiteren soll der Eintrag an einer bestimmten Position ermittelt werden. Ein Eintrag besteht aus dem Datum, der zurückgelegten Entfernung, der Dauer des Laufs und einem Kommentar zum Zustand des Läufers nach dem Lauf. Für einen Eintrag kann man ausserdem die Durchschnittsgeschwindigkeit ermitteln. Bereits erledigt: Klasse Entry für einzelne Einträge Noch zu tun: Ein Tagebuch enthält eine beliebige Anzahl von Entry-Objekten Idee: Repräsentiere das Tagebuch durch eine Liste von Einträgen Bieniusa/Poetzsch-Heffter Software Entwicklung 1 13/ 21

Einfachverkettete Listen Bei einfachverketteten Listen wird für jedes Listenelement ein Objekt mit zwei Attributen angelegt: zum Speichern des Elements zum Speichern der Referenz auf den Rest der Liste. Die Liste erhält also folgende Repräsentation: first: : Node entry =... next = : Node entry =... next = : Node entry =... next = Bieniusa/Poetzsch-Heffter Software Entwicklung 1 14/ 21

Klassendiagramm: Lauftagebuch RunnersDiary name : String first : Node void add(entry e) void remove(date d) Entry get(int index) Node entry : Entry next : Node Bieniusa/Poetzsch-Heffter Software Entwicklung 1 15/ 21

Implementierung: Lauftagebuch class RunnersDiary { String name ; Node first ; RunnersDiary ( String name ) { this. name = name ; // Fuegt einen neuen Eintrag hinzu void add ( Entry e) { // TODO // Entfernt alle Eintraege zu einem Datum void remove ( Date d) { // TODO /* Liefert das Element an Position index requires 0 <= index < Anzahl der Eintraege */ Entry get ( int index ) { // TODO // Darstellung als String public String tostring () { // TODO Bieniusa/Poetzsch-Heffter Software Entwicklung 1 16/ 21

Hinzufügen von neuen Einträgen void add ( Entry e) { Node newnode = new Node (e, null ); if ( first == null ) { first = newnode ; else { Node n = first ; while (n. next!= null ) { n = n. next ; n. next = newnode ; Erstelle zunächst einen neuen Knoten (ohne Nachfolger!). Fallunterscheidung List bisher leer: Füge das Element als erstes Element ein. Sonst: Iteriere zum Ende der Liste und füge das Element dort an. Optimierung: RunnersDiary-Objekte könnten zusätzliche eine Referenz auf das letzte Element der Liste verwalten ( Übungen) Bieniusa/Poetzsch-Heffter Software Entwicklung 1 17/ 21

Darstellung als String public String tostring () { String result = " Lauftagebuch von " + name + "\ n"; Node n = first ; while (n!= null ) { result += n. entry. tostring () + "\n"; n = n. next ; return result ; Iteriere, ausgehend vom ersten Knoten, über die Liste und ermittle die String-Repräsentation der Einträge des jeweiligen Knotens. Hinweis: Um Strings zusammenzubauen, verwendet man in der Regel StringBuilder (siehe Übungen). Bieniusa/Poetzsch-Heffter Software Entwicklung 1 18/ 21

Element an Position /* Liefert das Element an Position index requires 0 <= index < Anzahl der Eintraege */ Entry get ( int index ) { Node n = first ; for ( int i = 0; i < index ; i ++) { n = n. next ; return n. entry ; Die Indizes sind, analog zu Arrays, ab 0 nummeriert. Zunächst iterieren wir über die Listeneinträge bis zum gewünschten Knoten. Danach wird der Eintrag, der in diesem Knoten abgelegt ist, zurückgeliefert. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 19/ 21

Beispielobjekte RunnersDiary diary = new RunnersDiary (" Hugo "); diary. add ( new Entry ( new Date (2,3,2015),5,28," frisch ")); diary. add ( new Entry ( new Date (5,7,2015),8.2,40,"k.o.")); diary. add ( new Entry ( new Date (8,9,2015),10.4,54, " muede ")); StdOut. println ( diary ); StdOut. println ( diary. get (0) ); StdOut. println ( diary. get (2) ); Bieniusa/Poetzsch-Heffter Software Entwicklung 1 20/ 21

Zusammenfassung Fallbeispiel: Lauftagebuch Komposition von Klassen String-Repräsentationen von Objekten mittels tostring() Klassische Datenstruktur: Einfachverkettete Listen Bieniusa/Poetzsch-Heffter Software Entwicklung 1 21/ 21