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

31
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger [email protected] http://www.tk.uni-linz.ac.at/teaching/ http://www.tk.uni-linz.ac.at/blackboard/ UE09 Schrittweise Verfeinerung / Doppeltverkettete Liste

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

Page 1: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Abteilung für Telekooperation

Übung Softwareentwicklung 1

für Wirtschaftsinformatik

WS 200^8Dr. Wieland Schwinger

[email protected]

http://www.tk.uni-linz.ac.at/teaching/http://www.tk.uni-linz.ac.at/blackboard/

UE09 Schrittweise Verfeinerung / Doppeltverkettete Liste

Page 2: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-2

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

Page 3: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-3

Vorgehensweise

Entwurf ist ein iterativer Process:

Entwurf

Analyse

Implementierung

Page 4: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-4

Vorgehensweise

Verfeinerung in 2 Ebenen:

Funktionaler Umfang (neue Methoden)

Detailierungsgrad der Spezifikation

Klasse 1 M 1 M 2 M 3 Klasse 1 M 1 ...M 2

Verbale Beschreibung

Strukturierte Beschreibung

Psydocode

Code

SCHRITTWEISE

VERFEINERUNG

Page 5: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-5

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

Page 6: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-6

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 suchensearch(Name einer Person)

■ Die Liste aller verwalteter Einträge eines Telephonbuchs in sortierter Reihenfolge auszugebenprint()

Folgende Attribute ist erforderlich:■ Verschiedene Telephonbücher zu verwalten (z.b. ein privates Telephonbuch und ein Geschäftstelephonbuch)

durch Instanzen der Klasse PhoneBookname Text, der das Telephonbuch beschreibt

Entwurfsschritt 1Anforderungen detailieren, öffentlichen Methoden finden

Page 7: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-7

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 2Aufstellen der "offensichtlichen" Klassen

Page 8: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-8

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 3Zuordnen der Funktionalität zu den Klassen

Page 9: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-9

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/9990999")) )

IO.writeLn("could not be inserted");

Soll einen Eintrag ändern können:if (! ( bizzPhoneBook.update("Kevin Klein", "+43(0)1/9990999")))

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 - PhoneBookKlärung der funktionalen Anforderungen

Page 10: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-10

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 - PhoneBookKlärung der funktionalen Anforderungen

Page 11: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-11

PhoneBook:Folgende Attribute sind erforderlich:

String name; // Name des Telephonbuchs /* Verwaltet Telephonbucheinträge (PhoneBookEntry)

als doppelt verkettete Liste */PhonebookEntry head; // first PhoneBookEntry in ListPhonebookEntry 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 - PhoneBookAufstellung der Klassen, Attribute und Methoden

Page 12: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-12

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 ListPhonebookEntry previous; // vorang. PhoneBookEntry i. Liste

Folgende Methoden sind erforderlich:-

VERFEINERUNGSSTUFE 0

Entwurfsschritt 5 - PhoneBookEntry Aufstellung der Klassen, Attribute und Methoden

Page 13: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-13

boolean add(String name, String phone)1) neues Telephonbucheintrag erstellen2) Name und Telephonnummer in Telephonbucheintrag speichern3) Telephonbucheintrag hinzufügen

boolean update(String name, String phone)1) Telephonbucheintrag suchen2) wenn gefunden Telephonnummer ändern

boolean delete(String name) 1) Telephonbucheintrag suchen2) wenn gefunden Telephonbucheintrag löschen

PhoneBookEntry search(String x)1) durchwandere die verkettete Liste vom Anfang bis zum Ende bis passender Telephonbucheintrag gefunden wurde2) 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 - PhoneBookDetaillierung der Methoden durch "Makroschritte"

Page 14: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-14

class PhoneBook {// Attribute eines Telephonbuchs

String name; // Name des Telephonbuchs PhonebookEntry head; // first PhoneBookEntry in List PhonebookEntry tail; // last PhoneBookEntry in List

// Methoden eines TelephonbuchsPhoneBook(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) {

//<REFINE LATER>}

boolean update(String aName, String aPhoneNumber) {//1) Telephonbucheintrag suchen => durch eigene Methode find(String)//2) Falls gefunden Telephonnummer ändern

} …….

VERFEINERUNGSSTUFE 1

Entwurfsschritt 6 - PhoneBookDetaillierung der Methoden durch "Makroschritte" (Code)

Page 15: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-15

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) {//<REFINE LATER>}

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 - PhoneBookDetaillierung der Methoden durch "Makroschritte" (Code)

Page 16: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-16

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;// MethodenPhoneBookEntry(String name, String phoneNumber) { // Konstruktur

//1) Initialisierung}

} // end class PhoneBookEntry

VERFEINERUNGSSTUFE 1

Entwurfsschritt 6 - PhoneBookEntryDetaillierung der Methoden durch "Makroschritte" (Code)

Page 17: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-17

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 - PhoneBookDetaillierung der Methoden durch Details (Code)

Page 18: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-18

class PhoneBook {…

PhoneBook(String aName) { // Konstrukturthis();name = aName;

}

PhoneBook() {head = null; // eigentlich nicht mehr notwendigtail = null; // da defaultmaessig auf null

}….

Entwurfsschritt 7 - PhoneBookDetaillierung der Methoden durch Details (Code)

Page 19: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-19

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 - PhoneBookDetaillierung der Methoden durch Details (Code)

Page 20: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-20

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 - PhoneBookDetaillierung der Methoden durch Details (Code)

Page 21: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-21

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 - PhoneBookDetaillierung der Methoden durch Details (Code)

Page 22: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-22

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 - PhoneBookDetaillierung der Methoden durch Details (Code)

Page 23: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-23

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 - PhoneBookDetaillierung der Methoden durch Details (Code)

Page 24: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-24

class PhoneBook {…

boolean add(PhoneBookEntry newEntry) {

if (head == null) { // 1) wenn Telephonbuch leer einfügen // 1.1) previous und next des T. auf null setzennewEntry.next = null;newEntry.previous = null;

// 1.2) head und tail auf Telephonbucheintrag setztenhead = 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 setzhead.previous = newEntry;newEntry.next = head;// 2.2) head auf Telephonbucheintrag setztenhead = newEntry;return true;

VERFEINERUNGSSTUFE 3

Entwurfsschritt 7 - PhoneBookDetaillierung der Methoden durch Details (Code)

Page 25: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-25

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 setztentail.next = newEntry;newEntry.previous = tail;// 3.2) next auf null und previous auf alten tail setzentail = 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 NachfolgernewEntry.next = anEntry.next;// 4.2.2) setzte previous des Telephonbucheintrags auf VorgaengernewEntry.previous = anEntry; // 4.2.3) setzte next des Vorgaengers auf Telephonbucheintrag anEntry.next = newEntry;// 4.2.4) setzte previous des Nachfolgers auf TelephonbucheintragnewEntry.next.previous = newEntry; return true;

}}

….

VERFEINERUNGSSTUFE 3

Entwurfsschritt 7 - PhoneBookDetaillierung der Methoden durch Details (Code)

Page 26: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-26

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 - PhoneBookDetaillierung der Methoden durch Details (Code)

Page 27: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-27

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 headhead = anEntry.next; anEntry.next.previous = null; return true;

} else if (anEntry == tail) {// 3) loeschen, falls Telephonbucheintrag tailanEntry.previous.next = null; tail = anEntry.previous; return true;

} else {// 4) loeschen, sonstanEntry.previous.next = anEntry.next; anEntry.next.previous = anEntry.previous;return true; }

}….

VERFEINERUNGSSTUFE 3

Entwurfsschritt 7 - PhoneBookDetaillierung der Methoden durch Details (Code)

Page 28: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-28

class PhoneBook {…

boolean update(String aName, String aPhoneNumber) {PhoneBookEntry anEntry = find(aName);if (anEntry != null) {anEntry.phoneNumber = aPhoneNumber; // konnte man auch in PhoneBookEntry machen lassenreturn 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 - PhoneBookDetaillierung der Methoden durch Details (Code)

Page 29: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-29

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;// MethodenPhoneBookEntry(String name, String phoneNumber) { // Konstruktur

//1) Initialisierung}void print() {

//<TRIVIAL IMPLEMENTION>}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 - PhoneBookEntryDetaillierung der Methoden durch "Makroschritte" (Code)

Page 30: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-30

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 - PhoneBookEntryDetaillierung der Methoden durch Details (Code)

Page 31: Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at

Softwareentwicklung I • UE • WS 2008/09 • Schwinger

Abteilung für Telekooperation

Folie-31

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 - PhoneBookEntryDetaillierung der Methoden durch Details (Code)