Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Klassen - Verkettete Liste -
Prof. Dr. S. Albers Prof.Dr.Th Ottmann
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Zusammenfassung der Vorwoche
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Kapselung , toString , equals , Java API
Kapitel 3: Listen Lineare Liste: endliche Folge von Elementen eines Grundtyps (n>=0), leere Liste falls n=0 Listenelemente besitzen.
Gliederung Motivation / Grundlagen Sortierverfahren
Sortieren mit Binären Bäumen
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Listen Richard Göbel.
Indirekte Adressierung
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Referenzen und Zeichenketten
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (07 - Skiplisten) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.

Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Operationen auf verketteten Listen
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
Einführung in die Programmierung Datensammlung
Einfach verkettete Listen
Einfach verkettete Listen (OOP)
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Grundlagen der Programmierung
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmiersprache C 4
Auslegung eines Vorschubantriebes
Abteilung für Telekooperation Übung Softwareentwicklung 2 für Wirtschaftsinformatik Dr. Wieland Schwinger
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Die Klasse String und ihre Methoden
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Thomas Hilpold: Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger.
Algorithmen und Datenstrukturen SS 2005
CuP - Java Neunte Vorlesung Entspricht Kapitel 4.2 und 5 des Skriptums
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Controller Werkstatt updaten Werkstatt ws = werkstattarray.get(werkstattId); ws.setName(name); ws.setAnsprechpartner(ansprechpartner); ws.setTelefonnummer(telefonnummer);
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
3. Die Datenstruktur Graph 3.2 Repräsentation von Graphen
1. Die rekursive Datenstruktur Liste 1
 Präsentation transkript:

Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger UE09 Schrittweise Verfeinerung / Doppeltverkettete Liste

Abteilung für Telekooperation Folie-2 Softwareentwicklung I UE WS 2008/09 Schwinger "Dealing with complexity is an inefficient and unnecessary waste of time, attention and mental energy. There is never any justification for things being complex when they could be simple." "In computer science, abstraction is a mechanism and practice to reduce and factor out details so that one can focus on a few concepts at a time." "Even a thousand miles journey starts with a single step." (Lao Tseu)

Abteilung für Telekooperation Folie-3 Softwareentwicklung I UE WS 2008/09 Schwinger Vorgehensweise Entwurf ist ein iterativer Process: Entwurf Analyse Implementierung

Abteilung für Telekooperation Folie-4 Softwareentwicklung I UE WS 2008/09 Schwinger Vorgehensweise Verfeinerung in 2 Ebenen: Funktionaler Umfang (neue Methoden) Detailierungsgrad der Spezifikation Klasse 1M 1M 2M 3Klasse 1M 1...M 2 Verbale Beschreibung Strukturierte Beschreibung Psydocode Code SCHRITTWEISE VERFEINERUNG

Abteilung für Telekooperation Folie-5 Softwareentwicklung I UE WS 2008/09 Schwinger PhoneBook - Anforderungen Gesucht wird ein Java-Programm, dass eine entsprechende Datenstruktur für die Verwaltung von Telephoneinträgen zur Verfügung stellt. Es soll dabei möglich sein: Telephonbucheinträge hinzuzufügen / entfernen Einen Telephonbucheintrag zu suchen Die Liste aller verwalteter Einträge eines Telephonbuchs in sortierter Reihenfolge auszugeben Verschiedene Telephonbücher zu verwalten (z.b. ein privates Telephonbuch und ein Geschäftstelephonbuch) Hinweise: Verwalten Sie die Einträge durch eine doppelt verkettete Liste Speichern Sie pro Eintrag einfach Name und Telephonnummer als String

Abteilung für Telekooperation Folie-6 Softwareentwicklung I UE WS 2008/09 Schwinger Folgende Methoden ist erforderlich: Telephonbucheinträge hinzuzufügen, ändern, entfernen add(Telephoninformaitonen einer Person) update(Telephoninformaiton einer Person) delete(Name einer Person) Einen Telephonbucheintrag zu suchen search(Name einer Person) Die Liste aller verwalteter Einträge eines Telephonbuchs in sortierter Reihenfolge auszugeben print() Folgende Attribute ist erforderlich: Verschiedene Telephonbücher zu verwalten (z.b. ein privates Telephonbuch und ein Geschäftstelephonbuch) durch Instanzen der Klasse PhoneBook name Text, der das Telephonbuch beschreibt Entwurfsschritt 1 Anforderungen detailieren, öffentlichen Methoden finden

Abteilung für Telekooperation Folie-7 Softwareentwicklung I UE WS 2008/09 Schwinger Welche Klassen werden benötigt: 1) "Hauptprogramm", dass die Verwendung des Telephonbuches steuert => PhoneBookTest 2) Telephonbücher, die eine doppelt verkettete Liste von Telephonbucheinträgen verwalten => PhoneBook 3) Telephonbucheinträge, die einen Eintrag mit Name und Telephonnummer verwalten => PhoneBookEntry Entwurfsschritt 2 Aufstellen der "offensichtlichen" Klassen

Abteilung für Telekooperation Folie-8 Softwareentwicklung I UE WS 2008/09 Schwinger Welche Klassen werden benötigt: 1) PhoneBookTest Verschiedene Telephonbücher zu verwalten (z.b. ein privates Telephonbuch und ein Geschäftstelephonbuch) durch Instanzen der Klasse PhoneBook Testen der Funktionalität 2) PhoneBook Telephonbucheinträge hinzuzufügen, ändern, entfernen add(Telephoninformationen einer Person) update(Telephoninformaiton einer Person) delete(Name einer Person) Einen Telephonbucheintrag zu suchen search(Name einer Person) Die Liste aller verwalteter Einträge eines Telephonbuchs in sortierter Reihenfolge auszugeben print() Verschiedene Telephonbücher zu verwalten (z.b. ein privates Telephonbuch und ein Geschäftstelephonbuch) name Text, der das Telephonbuch beschreibt 3) PhoneBookEntry Entwurfsschritt 3 Zuordnen der Funktionalität zu den Klassen

Abteilung für Telekooperation Folie-9 Softwareentwicklung I UE WS 2008/09 Schwinger 1) Steuert die Verwendung des Telephonbuches: Soll verschiedene Telephonbücher anlegen können: PhoneBook bizzPhoneBook = new PhoneBook("Business Phone Book"); PhoneBook privatePhoneBook = new PhoneBook("Private Phone Book"); Soll einen Eintrag hinzufügen können: if ( !(bizzPhoneBook.add("Hugo Boss", "+43(0)1/ ")) ) IO.writeLn("could not be inserted"); Soll einen Eintrag ändern können: if (! ( bizzPhoneBook.update("Kevin Klein", "+43(0)1/ "))) IO.writeLn("could not be updated"); Soll einen Eintrag löschen können: if (! ( bizzPhoneBook.delete("Giorgio Armani"))) IO.writeLn("could not be deleted"); Entwurfsschritt 4 - PhoneBook Klärung der funktionalen Anforderungen

Abteilung für Telekooperation Folie-10 Softwareentwicklung I UE WS 2008/09 Schwinger cont. Soll nach einem Eintrag gesucht werden können: PhoneBookEntry theEntry = bizzPhoneBook.search("Hugo Boss"); if (theEntry == null) { IO.writeLn("could not be found"); } else { IO.writeLn("found: " + theEntry) } Soll alle Einträge ausgeben können: bizzPhoneBook.print(); Entwurfsschritt 4 - PhoneBook Klärung der funktionalen Anforderungen

Abteilung für Telekooperation Folie-11 Softwareentwicklung I UE WS 2008/09 Schwinger PhoneBook: Folgende Attribute sind erforderlich: String name; // Name des Telephonbuchs /* Verwaltet Telephonbucheinträge (PhoneBookEntry) als doppelt verkettete Liste */ PhonebookEntry head; // first PhoneBookEntry in List PhonebookEntry tail; // last PhoneBookEntry in List Folgende Methoden sind erforderlich: boolean add(String name, String phone) boolean update(String name, String phone) boolean delete(String name) PhoneBookEntry search(String name) void print() VERFEINERUNGSSTUFE 0 Entwurfsschritt 5 - PhoneBook Aufstellung der Klassen, Attribute und Methoden

Abteilung für Telekooperation Folie-12 Softwareentwicklung I UE WS 2008/09 Schwinger PhoneBookEntry: Folgende Attribute sind erforderlich: ein Telephonbucheintrag beinhaltet: Die "Daten"/Objekte (Name und Telephonnummer) String name; String phoneNumber; Die Verkettung zum nächsten Telephonbucheintrag und zum vorangegangegen Telephonbucheintrag PhonebookEntry next; // naechster PhoneBookEntry in List PhonebookEntry previous; // vorang. PhoneBookEntry i. Liste Folgende Methoden sind erforderlich: - VERFEINERUNGSSTUFE 0 Entwurfsschritt 5 - PhoneBookEntry Aufstellung der Klassen, Attribute und Methoden

Abteilung für Telekooperation Folie-13 Softwareentwicklung I UE WS 2008/09 Schwinger boolean add(String name, String phone) 1) neues Telephonbucheintrag erstellen 2) Name und Telephonnummer in Telephonbucheintrag speichern 3) Telephonbucheintrag hinzufügen boolean update(String name, String phone) 1) Telephonbucheintrag suchen 2) wenn gefunden Telephonnummer ändern boolean delete(String name) 1) Telephonbucheintrag suchen 2) wenn gefunden Telephonbucheintrag löschen PhoneBookEntry search(String x) 1) durchwandere die verkettete Liste vom Anfang bis zum Ende bis passender Telephonbucheintrag gefunden wurde 2) wenn gefunden gib gefundenen Telephonbucheintrag zurück void print() 1) durchwandere die verkettete Liste vom Anfang bis zum Ende und gibt dabei jeden Telephonbucheintrag aus Entwurfsschritt 6 - PhoneBook Detaillierung der Methoden durch "Makroschritte"

Abteilung für Telekooperation Folie-14 Softwareentwicklung I UE WS 2008/09 Schwinger class PhoneBook { // Attribute eines Telephonbuchs String name; // Name des Telephonbuchs PhonebookEntry head; // first PhoneBookEntry in List PhonebookEntry tail; // last PhoneBookEntry in List // Methoden eines Telephonbuchs PhoneBook(String aName) {// Konstruktur //1) Initialisierung des Telephonbuchs } boolean add(String aName, String aPhoneNumber) { //1) neuen Telephonbucheintrag erstellen //2) Name und Telephonnummer in Telephonbucheintrag speichern //3) Telephonbucheintrag hinzufügen => durch eigene Methode add(PhoneBookEntry ) } boolean add(PhoneBookEntry newEntry) { // } boolean update(String aName, String aPhoneNumber) { //1) Telephonbucheintrag suchen => durch eigene Methode find(String) //2) Falls gefunden Telephonnummer ändern } ……. VERFEINERUNGSSTUFE 1 Entwurfsschritt 6 - PhoneBook Detaillierung der Methoden durch "Makroschritte" (Code)

Abteilung für Telekooperation Folie-15 Softwareentwicklung I UE WS 2008/09 Schwinger class PhoneBook { ……. boolean delete(String aName) { //1) Telephonbucheintrag suchen => durch eigene Methode find(String) //2) Falls gefunden Telephonbucheintrag löschen => durch eigene Methode delete(PhoneBookEntry) } boolean delete(PhoneBookEntry anEntry) { // } boolean search(Sring aName) { //1) Durchwandere die verkettete Liste vom Anfang bis zum Ende bis passender Telephonbucheintrag gefunden wurde //2) Falls gefunden gib gefundenen Telephonbucheintrag zurück } void print() { //1) Durchwandere die verkettete Liste vom Anfang bis zum Ende und //gibt dabei jeden Telephonbucheintrag aus } } // end class PhoneBook VERFEINERUNGSSTUFE 1 Entwurfsschritt 6 - PhoneBook Detaillierung der Methoden durch "Makroschritte" (Code)

Abteilung für Telekooperation Folie-16 Softwareentwicklung I UE WS 2008/09 Schwinger class PhoneBookEntry { // Attribute //1) Die "Daten"/Objekte (Name und Telephonnummer) String name; //2) Die Verkettung zum nächsten Telephonbucheintrag und PhoneBookEntry next; //3) die Verkettung zum vorangegangegen Telephonbucheintrag PhoneBookEntry previous; // Methoden PhoneBookEntry(String name, String phoneNumber) {// Konstruktur //1) Initialisierung } } // end class PhoneBookEntry VERFEINERUNGSSTUFE 1 Entwurfsschritt 6 - PhoneBookEntry Detaillierung der Methoden durch "Makroschritte" (Code)

Abteilung für Telekooperation Folie-17 Softwareentwicklung I UE WS 2008/09 Schwinger class PhoneBook { // Attribute eines Telephonbuchs String name; // Name des Telephonbuchs PhoneBookEntry head; // Zeiger auf den Beginn der doppelt // verketteten Liste PhoneBookEntry tail; // Zeiger auf das Ende der doppelt // verketteten Liste ……. Entwurfsschritt 7 - PhoneBook Detaillierung der Methoden durch Details (Code)

Abteilung für Telekooperation Folie-18 Softwareentwicklung I UE WS 2008/09 Schwinger class PhoneBook { … PhoneBook(String aName) {// Konstruktur this(); name = aName; } PhoneBook() { head = null; // eigentlich nicht mehr notwendig tail = null; // da defaultmaessig auf null } …. Entwurfsschritt 7 - PhoneBook Detaillierung der Methoden durch Details (Code)

Abteilung für Telekooperation Folie-19 Softwareentwicklung I UE WS 2008/09 Schwinger class PhoneBook { … boolean add(String aName, String aPhoneNumber) { // 1) neues Telephonbucheintrag erstellen // 2) Name und Telephonnummer in //Telephonbucheintrag speichern PhoneBookEntry anEntry = new PhoneBookEntry(aName, aPhone); // 3) Telephonbucheintrag hinzufügen return add(anEntry); // => durch eigene Methode // add(PhoneBookEntry) } …. VERFEINERUNGSSTUFE 2 Entwurfsschritt 6 - PhoneBook Detaillierung der Methoden durch Details (Code)

Abteilung für Telekooperation Folie-20 Softwareentwicklung I UE WS 2008/09 Schwinger class PhoneBook { … boolean add(PhoneBookEntry newEntry) { // 1) hinzufügen, falls Telephonbuch leer einfügen // 2) hinzufügen, falls Telephonbucheintrag kleiner als head // 3) hinzufügen, falls Telephonbucheintrag größer als tail // 4) hinzufügen, sonst } boolean delete(PhoneBookEntry newEntry) { // suchen des Knotens // 0) falls nicht vorhanden, false zurueckgeben (inkl. Fall, dass Liste leer) // 1) loeschen, falls head gleich tail (d.h. nur ein Knoten in Liste) // 2) loeschen, falls Telephonbucheintrag head // 3) loeschen, falls Telephonbucheintrag tail // 4) loeschen, sonst } …. VERFEINERUNGSSTUFE 2 Entwurfsschritt 6 - PhoneBook Detaillierung der Methoden durch Details (Code)

Abteilung für Telekooperation Folie-21 Softwareentwicklung I UE WS 2008/09 Schwinger class PhoneBook { … boolean add(PhoneBookEntry newEntry) { // 1) wenn Telephonbuch leer einfügen // 1.1) previous und next des Telephonbucheintrags auf null setzen // 1.2) head und tail auf Telephonbucheintrag setzten // 2) wenn Telephonbucheintrag kleiner als head // 2.1) previous auf null und next auf alten head setzen // 2.2) head auf Telephonbucheintrag setzten // 3) wenn Telephonbucheintrag größer als tail // 3.1) next auf null und previous auf alten tail setzen // 3.2) tail auf Telephonbucheintrag setzten // 4) sonst // 4.1) suche position // 4.2) fuege Telephonbucheintrag ein } …. VERFEINERUNGSSTUFE 2a Entwurfsschritt 6 - PhoneBook Detaillierung der Methoden durch Details (Code)

Abteilung für Telekooperation Folie-22 Softwareentwicklung I UE WS 2008/09 Schwinger class PhoneBook { … boolean delete(PhoneBookEntry newEntry) { // suchen des Knotens // 0) falls nicht vorhanden, false zurueckgeben (inkl. Fall, dass Liste leer) // 1) loeschen, falls head gleich tail (d.h. nur ein Knoten in Liste) // 1.1) head und tail auf leer setzen (Liste ist nun leer) // 2) loeschen, falls Telephonbucheintrag head // 2.1) // 3) loeschen, falls Telephonbucheintrag tail // 4) loeschen, sonst} …. VERFEINERUNGSSTUFE 2a Entwurfsschritt 6 - PhoneBook Detaillierung der Methoden durch Details (Code)

Abteilung für Telekooperation Folie-23 Softwareentwicklung I UE WS 2008/09 Schwinger class PhoneBook { … boolean add(PhoneBookEntry newEntry) { // 1) wenn Telephonbuch leer einfügen // 1.1) previous und next des Telephonbucheintrags auf null setzen // 1.2) head und tail auf Telephonbucheintrag setzten // 2) wenn Telephonbucheintrag kleiner als head // 2.1) previous auf null und next auf alten head setzen // 2.2) head auf Telephonbucheintrag setzten // 3) wenn Telephonbucheintrag größer als tail // 3.1) tail auf Telephonbucheintrag setzten // 3.2) next auf null und previous auf alten tail setzen // 4) sonst // 4.1) suche position // 4.2) fuege Telephonbucheintrag ein // 4.2.1) setzte next des Telephonbucheintrags auf Nachfolger // 4.2.2) setzte previous des Telephonbucheintrags auf Vorgaenger // 4.2.3) setzte next des Vorgaengers auf Telephonbucheintrag // 4.2.4) setzte previous des Nachfolgers auf Telephonbucheintrag } …. VERFEINERUNGSSTUFE 2b Entwurfsschritt 6 - PhoneBook Detaillierung der Methoden durch Details (Code)

Abteilung für Telekooperation Folie-24 Softwareentwicklung I UE WS 2008/09 Schwinger class PhoneBook { … boolean add(PhoneBookEntry newEntry) { if (head == null) {// 1) wenn Telephonbuch leer einfügen // 1.1) previous und next des T. auf null setzen newEntry.next = null; newEntry.previous = null; // 1.2) head und tail auf Telephonbucheintrag setzten head = tail = newEntry; return true; } else if (newEntry.lessThan(head)) { // 2) wenn Telephonbucheintrag kleiner als head // einfuegen bevor ersten Element // 2.1) previous auf null und next auf alten head setz head.previous = newEntry; newEntry.next = head; // 2.2) head auf Telephonbucheintrag setzten head = newEntry; return true; … VERFEINERUNGSSTUFE 3 Entwurfsschritt 7 - PhoneBook Detaillierung der Methoden durch Details (Code)

Abteilung für Telekooperation Folie-25 Softwareentwicklung I UE WS 2008/09 Schwinger class PhoneBook { … boolean add(PhoneBookEntry newEntry) { … } else if (newEntry.greaterThan(tail)) { // 3) wenn Telephonbucheintrag groesser als tail // insert after last // 3.1) tail auf Telephonbucheintrag setzten tail.next = newEntry; newEntry.previous = tail; // 3.2) next auf null und previous auf alten tail setzen tail = newEntry; return true; } else { // 4) sonst PhoneBookEntry anEntry = findPrevious(newEntry.name); if (anEntry.equalsName(newEntry)) return false; // 4.2.1) setzte next des Telephonbucheintrags auf Nachfolger newEntry.next = anEntry.next; // 4.2.2) setzte previous des Telephonbucheintrags auf Vorgaenger newEntry.previous = anEntry; // 4.2.3) setzte next des Vorgaengers auf Telephonbucheintrag anEntry.next = newEntry; // 4.2.4) setzte previous des Nachfolgers auf Telephonbucheintrag newEntry.next.previous = newEntry; return true; } …. VERFEINERUNGSSTUFE 3 Entwurfsschritt 7 - PhoneBook Detaillierung der Methoden durch Details (Code)

Abteilung für Telekooperation Folie-26 Softwareentwicklung I UE WS 2008/09 Schwinger class PhoneBook { … PhoneBookEntry findPrevious(String aName) { PhoneBookEntry anEntry; for (anEntry = head; anEntry != null && anEntry.lessThan(aName); anEntry = anEntry.next); if (anEntry == null) { return null; } else { return anEntry.previous; } PhoneBookEntry search(String aName) { PhoneBookEntry anEntry = findPrevious(aName); if (anEntry == null || anEntry.next == null) { return null;// noting found } else if ((anEntry.next.name.equals(aName)) { return anEntry;// are equal thus the one } else { return null;// not equal thus null } …. VERFEINERUNGSSTUFE 3 Entwurfsschritt 7 - PhoneBook Detaillierung der Methoden durch Details (Code)

Abteilung für Telekooperation Folie-27 Softwareentwicklung I UE WS 2008/09 Schwinger class PhoneBook { … boolean delete(String aName) { PhoneBookEntry anEntry = find(aName); if (anEntry == null) { IO.writeLn("ERROR: name not found!"); return false; } else { return delete(anEntry); } } boolean delete(PhoneBookEntry anEntry) { PhoneBookEntry entry = find(anEntry.name); if (anEntry == null) { return false; } // 0) falls nicht vorhanden, false zurueckgeben (inkl. Liste leer) } else if (anEntry == head && anEntry == tail) { // 1) loeschen, falls head gleich tail (d.h. nur ein Knoten in Liste) head = tail = null; return true; } else if (anEntry == head) { // 2) loeschen, falls Telephonbucheintrag head head = anEntry.next; anEntry.next.previous = null; return true; } else if (anEntry == tail) { // 3) loeschen, falls Telephonbucheintrag tail anEntry.previous.next = null; tail = anEntry.previous; return true; } else { // 4) loeschen, sonst anEntry.previous.next = anEntry.next; anEntry.next.previous = anEntry.previous; return true; } } …. VERFEINERUNGSSTUFE 3 Entwurfsschritt 7 - PhoneBook Detaillierung der Methoden durch Details (Code)

Abteilung für Telekooperation Folie-28 Softwareentwicklung I UE WS 2008/09 Schwinger class PhoneBook { … boolean update(String aName, String aPhoneNumber) { PhoneBookEntry anEntry = find(aName); if (anEntry != null) { anEntry.phoneNumber = aPhoneNumber; // konnte man auch in PhoneBookEntry machen lassen return true; } else { return false; } } void print() { IO.writeLn("The Phone Book: " + name); if (head == null) { IO.write("\n is emtpy!"); } else { PhoneBookEntry anEntry = head; for (int i = 1;anEntry != null; i++) { IO.write("\n " + i + ") "); anEntry.print(); anEntry = anEntry.next; } } IO.write("\n"); } …. VERFEINERUNGSSTUFE 3 Entwurfsschritt 7 - PhoneBook Detaillierung der Methoden durch Details (Code)

Abteilung für Telekooperation Folie-29 Softwareentwicklung I UE WS 2008/09 Schwinger class PhoneBookEntry { // Attribute //1) Die "Daten"/Objekte (Name und Telephonnummer) String name; String phoneNumber; //2) Die Verkettung zum nächsten Telephonbucheintrag und PhoneBookEntry next; //3) die Verkettung zum vorangegangegen Telephonbucheintrag PhoneBookEntry previous; // Methoden PhoneBookEntry(String name, String phoneNumber) {// Konstruktur //1) Initialisierung } void print() { // } boolean lessThan(PhoneBookEntry anEntry) { //1) gib zurueck, ob der Name kleiner ist } boolean equalsName(PhoneBookEntry anEntry) { //1) gib zurueck, ob der Name kleiner ist } } // end class PhoneBookEntry VERFEINERUNGSSTUFE 2 Entwurfsschritt 6 - PhoneBookEntry Detaillierung der Methoden durch "Makroschritte" (Code)

Abteilung für Telekooperation Folie-30 Softwareentwicklung I UE WS 2008/09 Schwinger class PhoneBookEntry { String name; String phoneNumber; PhoneBookEntry next = null; PhoneBookEntry previous = null; PhoneBookEntry(String name, String phoneNumber) { this.name = name; this.phoneNumber = phoneNumber; } public String toString() { return ( "" + name + ", " + phoneNumber); } void print() { IO.writeLn("" + this); } …. } VERFEINERUNGSSTUFE 3 Entwurfsschritt 7 - PhoneBookEntry Detaillierung der Methoden durch Details (Code)

Abteilung für Telekooperation Folie-31 Softwareentwicklung I UE WS 2008/09 Schwinger class PhoneBookEntry { … boolean lessThan(PhoneBookEntry anEntry) { return (this.lessThan(anEntry.name)); } boolean lessThan(String aName) { int i; int lengthOfShorterString = Math.min(this.name.length()-1, aName.length()-1); for (i = 0; i <= lengthOfShorterString && this.name.charAt(i) == aName.charAt(i); i++); if (i > lengthOfShorterString) return (this.name.length()-1 < aName.length()-1); // came to an end else return this.name.charAt(i) < aName.charAt(i); // some char did not match } boolean greaterThan(PhoneBookEntry anEntry) { return (!equalsName(anEntry) && ! lessThan(anEntry)); } boolean equalsName(PhoneBookEntry anEntry) { return (this.name.equals(anEntry.name)); } boolean equalsName(StringBuffer aName) { return (this.name.equals(aName)); } VERFEINERUNGSSTUFE 3 Entwurfsschritt 7 - PhoneBookEntry Detaillierung der Methoden durch Details (Code)