GERICHTETER GEWICHTETER GRAPH DESIGNDOKUMENT

Ähnliche Dokumente
WORKFLOW DESIGNDOKUMENT

EINFACHER ROUTENPLANER DESIGNDOKUMENT

Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit

Eine Kommando-Oberfläche für.net

Praktikum 4: Delegation

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

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

Objektorientierte Programmierung mit C++ SS 2007

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Projekt AGB-10 Fremdprojektanalyse

Drucken und Löschen von angehaltenen Druckaufträgen Erkennen von Formatierungsfehlern Bestätigen von Druckaufträgen Reservieren von Druckaufträgen

Polymorphismus 179. Function.h. #include <string>

Vorlesung Datenstrukturen

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

Technische Dokumentation SilentStatistikTool

PIWIN 1 Übung Blatt 5

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Programmierung für Mathematik (HS13)

Von der UML nach C++

Funktionen in JavaScript

Informatik Abitur Bayern 2017 / II - Lösung

Grundlagen der Informatik Vorlesungsskript

Debugging mit ddd (Data Display Debugger)

Die vier goldenen Regeln für die Einzugsgebietserstellung und -berechnung im MikeUrban

Verwenden der Druck- und Zurückhaltefunktion

Einführung in die Programmierung

Praktikum 3: Klassen im Zusammenspiel

Funktionen in JavaScript

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

1 - EIN NEUES GAMEGRID ANLEGEN

Gran Turismo Cars - WS 11/12

Objektorientierte Analyse (OOA) OOA-Pattern

Übungen zu Programmieren 3 (C++) (4-1)

C++ - Objektorientierte Programmierung Vererbung

Einstieg in die Informatik mit Java

8 Baum in perfekter Komposition

Peter Prinz Ulla Kirch-Prinz C+ + Lernen und professionell anwenden. ffl mitp

ADT: Verkettete Listen

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

Handbuch für die Erweiterbarkeit

Einstieg in die Informatik mit Java

Die Warenkorbfunktion (workbasket)

Der-OnlineStundeplan.de. API-Dokumentation. Der-OnlineStundenplan.de 1 Version 1.1

Abbildung : Aufruf des Wikis (Server: Interner Web-Server HTTPD auf Port 8080)

Datenbank und Tabelle mit SQL erstellen

Datenstrukturen. einfach verkettete Liste

Praktikum 3: Klassen im Zusammenspiel

Fragen zur OOP in Java

3. Die Datenstruktur Graph

Probeklausur Informatik 2 Sommersemester 2013

Kapitel 9: Klassen und höhere Datentypen. Selektoren

Klausur Informatik WS 2012/13

Methoden-Expertin. Aufgabe 1. Das Neue. Lösung in JavaKara. Puzzle: Expertin D

Verkettete Datenstrukturen: Listen

Verkettete Datenstrukturen: Bäume

Grundlegende Programmierkonzepte: Anweisungen und Methoden

Übungen zur Vorlesung EINI (WS 2010) Blatt 11

Übungsaufgaben: 1. Objektorientierte Programmierung - Teil 1

Verwenden der Druck- und Zurückhaltefunktion 1

Algorithmen für Routenplanung

Fehlerbehandlung in Excel -Tabellen - Grundüberlegungen

Deshalb ist hello + world = 0. Umgekehrt gilt das Gleiche, weshalb 8 plus 3 gleich 83 ist. Dies ist in Zeile 5 in Terminal 2 gezeigt. In der Regel sol

Securepoint Security Systems

2 Teil 2: Nassi-Schneiderman

1 Excel Schulung Andreas Todt

ALP II Dynamische Datenmengen

Werner Achte rt DATA BECKER

Programmieren 2 C++ Überblick

Grundlagen der Informatik

Das Handbuch zu KCron

Trainingsmanagement Gutschein Management. Beschreibung

Ausnahmen. Exceptions. Definition Ausnahmen erzeugen Ausnahmen abfangen Ausnahmen weiterleiten. Dr. Beatrice Amrhein

Verwendung der Visage Java-API

Prof. Dr. Uwe Schmidt. 21.August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (BInf 211, BTInf 211, BMInf 211, BWInf 211)

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

Algorithmen und Datenstrukturen

Klausur Fachprüfung Wirtschaftsinformatik. Name:

Strings. Daten aus Dateien einlesen und in Dateien speichern.

Kapitel 12: Induktive

Vorbereitung zu Praktikum 3

Einstieg in die Informatik mit Java

3. Das erste eigene Programm mit Greenfoot: Litte Crab

Algorithmen & Datenstrukturen Midterm Test 2

Script-Upgrade. Vorraussetzungen. Folgende Meldungstypen werden dabei verwendet: Vom Fahrzeug zur Zentrale. Quittungstexte vom Fahrzeug (Type 11.

Institut für Programmierung und Reaktive Systeme 19. August Programmier-Labor. 1. Übungsblatt

Programmieren in Haskell Debugging

2017/01/23 15:50 1/5 Bedienung

Institut für Informatik

Vererbung und Polymorphie

Datenbanken erstellen Liste von Datenbanken anzeigen Datenbanken löschen. MySQL 4, 5. Kapitel 06: Datenbanken. Marcel Noe

Dokumentation zum AVL-Baum (C++)

KONFIGURATOR-SOFTWARE (S009-50) Kurzanleitung

7. Sortieren Lernziele. 7. Sortieren

OLXImportCSV2Exchange

7.0 Arbeiten mit Objekten und Klassen

Hochschule Darmstadt Informatik-Praktikum WS 2017/2018 WIng Bachelor 6. Aufgabenblatt Zeiger, verkettete Liste, Dateieingabe und -ausgabe

Javakurs für Anfänger

Transkript:

User Requirements GERICHTETER GEWICHTETER GRAPH DESIGNDOKUMENT Softwareentwicklung Praktikum, Übungsbeispiel 1 Gruppe 18 Andreas Hechenblaickner [0430217] Daniela Kejzar [0310129] Andreas Maller [0431289] Gruppe 18 Seite 1

User Requirements Example 1 1 User Requirements 1.1 Aufgabenstellung Es soll ein gerichteter, gewichteter Graph erstellt werden, welcher aus Knoten (nodes) und Kanten (edges) besteht. Hierbei sollten Knoten mit anderen Knoten durch Kanten verbunden werden. Die Datenstruktur sollte verschiedene Funktionalitäten, wie zb das Einfügen und Löschen von Knoten und Kanten, aufweisen. 1.2 Anforderungen Es ist eine geeignete Datenstruktur zu entwickeln, die es ermöglicht die gewünschten Funktionalitäten zu erfüllen. Das Testprogramm sollte diese Funktionalitäten zeigen können. Ein Input-Handler soll die eingegebenen Kommandos verarbeiten und die dazu entsprechenden Operationen am Graphen durchführen. Das Programm muss sinnvoll objektorientiert aufgebaut sein. Seite 2 Gruppe 18

Architectural Design 2 Architectural Design 2.1 Module Das Programm wird in folgende Module aufgeteilt: Name Beschreibung Seite Modul Graph Modul Input-Handler Modul Testprogramm Beschreibt die interne Speicherung eines gerichteten Graphen. Stellt Klassen mit Methoden zur Manipulation der im Graphen gespeicherten Knoten und Kanten zur Verfügung. Verarbeitet eingegebene Kommandos und führt die entsprechenden Befehle aus. Leitet eingegeben Kommandos an den Input-Handler weiter und gibt Fehlermeldungen entsprechend an den Benutzer weiter. 4 7 9 Gruppe 18 Seite 3

Modul Graph Example 1 3 Modul Graph 3.1 Beschreibung Ein gerichteter gewichteter Graph besteht aus beliebig vielen Knoten die untereinander durch beliebig viele Kanten verbunden sein können. Jede Kante hat einen Start- und einen Zielknoten. Start- und Zielknoten können auch gleich sein in diesem Fall zeigt ein Knoten auf sich selbst. Ein Graph, jeder Knoten und jede Kante haben einen Namen. Es dürfen nicht zwei Knoten mit demselben Namen existieren. Es dürfen weder zwei Kanten mit selbem Namen, zwischen zwei Knoten existieren, noch dürfen zwei Kanten mit demselben Namen denselben Knoten als Start- oder Zielknoten haben. Es jedoch erlaubt, dass mehrere Kanten denselben Namen besitzen, vorausgesetz sie teilen sich weder Start- noch Zielknonten. Jede Kante speichert zusätzlich noch eine positive Ganzzahl als Gewichtung. Ein neuer Graph enthält anfangs weder Knoten noch Kanten. ad: 1 bd: 1 ce: 1 Abbildung 1: Beispiel eines Graphen 3.2 Bereitgestellte Klassen Graph, Node und Edge Die Klasse Graph speichert einen gerichteten, gewichteten Graphen. Alle möglichen Operationen wie zb das Einfügen von Knoten und Kanten werden über public-methoden bereitgestellt. Die interne Speicherung der Zuordnung von Kanten und Knoten wird im nächsten Abschnitt Verwendete Datenstruktur beschrieben. Seite 4 Gruppe 18

Modul Graph Displayable Alle anzeigbaren Objekte haben die gemeinsame abstrakte Superklasse Displayable, die eine Implementierung der virtuellen Methode show erfordert. In dieser Methode wird einfach die gewünschte Repräsentation der Klasse als String auf den Standard-Output geschrieben. Abbildung 2: Klassendiagramm des Moduls Graph 3.3 Verwendete Datenstruktur Die Knoten werden intern in einem assoziativen Speicher (Template Map aus der STL) mit dem Name des Knoten und den Knoten selbst als Schlüssel- Werte-Paar gespeichert. Diese Datenstruktur wird verwendet da auf diese Weise einfach verhindert werden kann, das mehrere Knoten mit demselben Namen im Graphen existieren, und die häufige Operation Knoten mit einem bestimmten Namen ermitteln kann ohne zeitaufwändiges durchlaufen aller Knoten durchgeführt werden. Die Kanten werden intern ebenfalls in Maps gespeichert. Es gibt jedoch im Graphen keine gesamte Liste, sondern jeder Knoten hält jeweils zwei Maps von Kanten. Die erste Map speichert alle von diesem Knoten ausgehenden Kanten, die zweite alle Kanten die diesen Knoten als Ziel haben. Jeder Knoten wird somit in genau zwei Listen gleichzeitig gehalten. Zusätzlich weiß jede Kante welche ihre Start- und Zielknoten sind. Durch diese Speicherung wird auch hier einerseits das schnelle Ansprechen einer bestimmten Kante über ihren Namen ermöglicht sowie das Einfügen von zwei gleichnamigen Kanten innerhalb eines Knotens verhindert. Für die korrekte An- und Abmeldung der Kanten bei den entsprechenden Knoten ist die Kante selbst verantwortlich. Wird ein Knoten gelöscht der von einer Kante als Start- oder Zielknoten verwendet wird, so muss auch diese Kante gelöscht werden. Wird eine Kante gelöscht, ist es notwendig die Verweise aus den Listen des Start- und des Zielknotens zu entfernen. Gruppe 18 Seite 5

Modul Graph Example 1 Der zuvor dargestellte gerichtete Graph wird daher folgendermaßen gespeichert: Graph "A" "B" "C" "D" "E" *Node A *Node B *Node C *Node D *Node E Node A "ab" *Edge ab "ad" *Edge ad Source Edges Destination Edges Edge ab Source *Node A Destination *Node B Edge ad Source *Node A Nodes Node B Destination *Node D "bd" *Edge bd "ab" *Edge ab Edge bd "bc" *Edge bc "cb" *Edge cb Source *Node B Source Edges Destination Edges Destination *Node D Node C Edge cb Source *Node C "cb" *Edge cb "bc" *Edge bc Destination *Node B "ce" *Edge ce Source Edges Destination Edges Edge... Node... Abbildung 3: Interne Speicherung eines Graphen 3.4 Fehlerbehandlung Zur Fehlerbehandlung werden folgende Exceptions zur Verfügung gestellt: Exception GraphException NodeAlreadyExistsException EdgeAlreadyExistsException NoSuchNodeException NoSuchEdgeException Beschreibung / Fehlermeldung Abstrakte Basisklasse für alle Fehlerfälle die in einem Graph auftreten können. error: node already exists error: edge already exists in this context error: no such node in graph error: no such edge Seite 6 Gruppe 18

Modul Input-Handler 4 Modul Input-Handler 4.1 Beschreibung Aufgaben des Input-Handlers ist es eingelesene Kommandos zu verarbeiten und die entsprechenden Befehle mit ihren Parametern auszuführen. Ungültige Kommandos und Fehler beim Ausführen der Befehle, zb durch unvollständige/falsche Parameter, werden an das aufrufende Modul gemeldet. 4.2 Bereitgestellte Klassen InputHandler Die Klasse InputHandler verarbeitet eingelesene Kommandozeilen. Diese werden von außen (im Übungsbeispiel vom Modul Testprogramm) mittels der Methode handleinput als String übergeben. Der Input-Handler speichert eine Liste aller möglichen Befehle und deren zugehörige Objekte einer Command-Klasse (Ableitung der Klasse BaseCommand), welche in der virtuellen Methode executecommand die für diesen Befehlt auszuführenden Anweisungen enthalten. Die Klasse InputHandler ist eine abstrakte Basisklasse, die selbst noch keine Befehle kennt, erst ein Objekt der Klasse GraphInputHandler kennt alle für einen Graph relevanten Befehle. Abbildung 4: Klassendiagramm des Input-Handlers Gruppe 18 Seite 7

Modul Input-Handler Example 1 GraphInputHandler Der GraphInputHandler stellt Befehle zur Manipulation eines Graphen zur Verfügung. Zur Konstruktion muss ein Graph-Objekt übergeben werden. Der GraphInputHandler kann folgende Befehle verarbeiten und auf den zugehörigen Graphen anwenden: Kommando add node <name>... add edge <src> <dst> <name> <weigth>... delete node <name>... delete edge <src <dst> <name>... show [<node>] quit Beschreibung Neue(n) Knoten einfügen. Neue Kante(n) einfügen. Bestimmte(n) Knoten löschen. Bestimmte Kante(n) löschen. Alle Kanten die einen bestimmten Knoten als Start- oder Zielknoten haben anzeigen. Wird kein Knoten angegeben, wird er gesamte Graph angezeigt. Veranlasst das aufrufende Modul das Programm zu beenden. 4.3 Fehlerbehandlung Zur Fehlerbehandlung werden folgende Exceptions zur Verfügung gestellt: Exception InputHandlerException InvalidArgumentException UnknownCommandException Beschreibung / Fehlermeldung Abstrakte Basisklasse für alle Fehlerfälle die im Input-Handler auftreten können. error: invalid argument(s) error: unknown command 4.4 Weitere Designentscheidungen StringTokenizer Zur einfachen Verarbeitung der übergeben Befehlszeile wird diese zunächst von einer eigenen Klasse StringTokenizer in ihre einzelnen Wörter zerlegt. Ein Aufruf der Methode getnexttoken liefert immer das jeweils nächste Wort, solange hasmoretoken wahr zurückliefert. Seite 8 Gruppe 18

Modul Testprogramm 5 Modul Testprogramm 5.1 Beschreibung Das Testprogramm stellt Befehle zur Verfügung mit der ein Graph bearbeitet werden kann. Dazu wird zunächst ein leerer Testgraph erstellt. Es wird eine Eingabeauforderung angezeigt, in der der Benutzer eine Reihe von durch das Modul Input-Handler definierte Befehle zur Manipulation eines Graphen eingeben kann. Das Testprogramm ist dafür verantwortlich das alle vom Graphen und vom Input-Handler weitergereichte Exceptions durch ihre entsprechende Fehlermeldungen dargestellt werden. Das Testprogramm besteht lediglich aus der Klasse TestProgram und wird über die Methode run vom Hauptprogramm aus gestartet. 5.2 Testfälle Um das Programm automatisch auf Fehler zu überprüfen, wird eine Liste von Befehlen in einer Datei bereitgestellt. Diese können dann einfach mittels workflow < testinput.txt in das Programm eingelesen und verarbeitet werden. Danach lässt sich die Ausgabe mit einer zuvor händisch erstellten Referenz-Ausgabe vergleichen. Die erledigt zum Beispiel das Programm diff und kann somit bequem zb in das Makefile eingebaut werden. Verschieden Testfälle werden mit anderen Gruppen gemeinsam erarbeitet und ausgetauscht. Gruppe 18 Seite 9