20.07.2013 Aufrufe

Nassi-Shneiderman-Diagramm - HTL Wien 10

Nassi-Shneiderman-Diagramm - HTL Wien 10

Nassi-Shneiderman-Diagramm - HTL Wien 10

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Nassi</strong>-<strong>Shneiderman</strong>-<strong>Diagramm</strong> – Wikipedia<br />

<strong>Nassi</strong>-<strong>Shneiderman</strong>-<strong>Diagramm</strong><br />

aus Wikipedia, der freien Enzyklopädie<br />

Ein <strong>Nassi</strong>-<strong>Shneiderman</strong>-<strong>Diagramm</strong> ist ein <strong>Diagramm</strong>typ zur Darstellung von<br />

Programmentwürfen im Rahmen der Methode der strukturierten<br />

Programmierung. Er wurde 1972/73 von Isaac <strong>Nassi</strong> und Ben <strong>Shneiderman</strong><br />

entwickelt und ist in der DIN 66261 genormt. Da <strong>Nassi</strong>-<strong>Shneiderman</strong>-<br />

<strong>Diagramm</strong>e Programmstrukturen darstellen, werden sie auch als<br />

Struktogramme bezeichnet.<br />

Die Methode zerlegt das Gesamtproblem, das man mit dem gewünschten<br />

Algorithmus lösen will, in immer kleinere Teilprobleme – bis schließlich nur<br />

noch elementare Grundstrukturen wie Sequenzen und Kontrollstrukturen zur<br />

Lösung des Problems übrig bleiben. Diese können dann durch ein <strong>Nassi</strong>-<br />

<strong>Shneiderman</strong>-<strong>Diagramm</strong> oder einen Programmablaufplan (PAP) visualisiert<br />

werden. Die Vorgehensweise entspricht der sogenannten Top-down-Programmierung, in der zunächst ein Gesamtkonzept<br />

entwickelt wird, das dann durch eine Verfeinerung der Strukturen des Gesamtkonzeptes aufgelöst wird.<br />

Böhm und Jacopini hatten 1966 nachgewiesen, dass sich jeder beliebige Algorithmus ohne unbedingte Sprunganweisung<br />

(GOTO) formulieren lässt.<br />

Bei der Abbildung objektorientierter Programmkonzepte nach UML finden <strong>Nassi</strong>-<strong>Shneiderman</strong>-<strong>Diagramm</strong>e keine<br />

Anwendung, da man dort mit erweiterten Programmablaufplänen auszukommen glaubt.<br />

Inhaltsverzeichnis<br />

1 Sinnbilder nach DIN 66261<br />

1.1 Linearer Ablauf (Sequenz)<br />

1.2 Verzweigung (Alternative)<br />

1.2.1 Einfache Auswahl (bedingte Verarbeitung)(Selektion)<br />

1.2.2 Zweifache Auswahl (alternative Verarbeitung)<br />

1.2.3 Mehrfachauswahl<br />

1.2.4 Fallauswahl<br />

1.3 Wiederholung (Iteration)<br />

1.3.1 Zählergesteuerte Schleife<br />

1.3.2 Abweisende (vorprüfende – kopfgesteuerte) Schleife<br />

1.3.3 Nicht abweisende (nachprüfende – fußgesteuerte) Schleife<br />

1.3.4 Endlosschleife<br />

1.4 Aussprung<br />

1.5 Aufruf<br />

2 Füllregeln<br />

2.1 Allgemeingültigkeit<br />

2.2 Deklaration<br />

2.3 Exklusivität<br />

3 Praxisrelevanz<br />

4 Beispieldiagramme<br />

4.1 Einfaches Struktogramm<br />

4.2 Erweitertes Struktogramm<br />

5 Software<br />

6 Weblinks<br />

Sinnbilder nach DIN 66261<br />

Die meisten der nachfolgenden Strukturblöcke können ineinander geschachtelt werden. Das aus den unterschiedlichen<br />

Strukturblöcken zusammengesetzte Struktogramm ist im Ganzen rechteckig, also genauso breit wie sein breitester<br />

Strukturblock.<br />

Linearer Ablauf (Sequenz)<br />

Jede Anweisung wird in einen rechteckigen Strukturblock geschrieben.<br />

Die Strukturblöcke werden nacheinander von oben nach unten durchlaufen.<br />

http://de.wikipedia.org/wiki/<strong>Nassi</strong>-<strong>Shneiderman</strong>-<strong>Diagramm</strong><br />

Page 1 of 5<br />

DIN 66261<br />

Bereich Programmierung<br />

Regelt Informationsverarbeitung;<br />

Sinnbilder für<br />

Struktogramme nach <strong>Nassi</strong>-<br />

<strong>Shneiderman</strong><br />

Kurzbeschreibung Struktogramme<br />

Aktuelle Ausgabe 1985<br />

ISO<br />

17.07.2008


<strong>Nassi</strong>-<strong>Shneiderman</strong>-<strong>Diagramm</strong> – Wikipedia<br />

Verzweigung (Alternative)<br />

Einfache Auswahl (bedingte Verarbeitung)(Selektion)<br />

Zweifache Auswahl (alternative Verarbeitung)<br />

Mehrfachauswahl<br />

Fallauswahl<br />

Wiederholung (Iteration)<br />

Zählergesteuerte Schleife<br />

Leere Strukturblöcke sind nur in Verzweigungen zulässig.<br />

Nur wenn die Bedingung zutreffend (wahr) ist, wird der Anweisungsblock 1 durchlaufen. Ein<br />

Anweisungsblock kann aus einer oder mehreren Anweisungen bestehen. Trifft die Bedingung<br />

nicht zu (falsch), wird der Durchlauf ohne eine weitere Anweisung fortgeführt (Austritt unten).<br />

Wenn die Bedingung zutreffend (wahr) ist, wird der Anweisungsblock 1 durchlaufen. Trifft<br />

die Bedingung nicht zu (falsch), wird der Anweisungsblock 2 durchlaufen. Ein<br />

Anweisungsblock kann aus einer oder mehreren Anweisungen bestehen. Austritt unten nach<br />

Abarbeitung des jeweiligen Anweisungsblocks.<br />

http://de.wikipedia.org/wiki/<strong>Nassi</strong>-<strong>Shneiderman</strong>-<strong>Diagramm</strong><br />

Page 2 of 5<br />

Auch „verschachtelte“ Auswahl genannt, da eine weitere Bedingung folgt.<br />

Die Verschachtelung ist ebenso im Nein-Fall (noch) möglich.<br />

Besonders bei mehr als drei<br />

abzuprüfenden Bedingungen geeignet:<br />

Der Wert von „Variable“ kann bedingt<br />

auf Gleichheit wie auch auf Bereiche<br />

(größer/kleiner bei Zahlen) geprüft<br />

werden und der entsprechend<br />

zutreffende „Fall“ mit dem zugehörigen<br />

Anweisungsblock wird durchlaufen.<br />

Eine Fallauswahl kann manchmal in<br />

eine Mehrfachauswahl umgewandelt<br />

werden – etwa wenn die später<br />

eingesetzte Programmiersprache<br />

Fallauswahlen nicht kennt.<br />

Wiederholungsstruktur, bei der die Anzahl der Durchläufe festgelegt ist.<br />

Als Bedingung muss eine Zählvariable angegeben und mit einem<br />

Startwert initialisiert werden. Ebenso muss ein Endwert und die (Zähl-)<br />

Schrittweite angegeben werden. Nach jedem Durchlauf des<br />

Schleifenkörpers (Anweisungsblock 1) wird die Zählvariable um die<br />

Schrittweite inkrementiert (bzw. bei negativer Schrittweite<br />

dekrementiert) und mit dem Endwert verglichen. Ist der Endwert<br />

überschritten, wird die Schleife verlassen.<br />

17.07.2008


<strong>Nassi</strong>-<strong>Shneiderman</strong>-<strong>Diagramm</strong> – Wikipedia<br />

Abweisende (vorprüfende – kopfgesteuerte) Schleife<br />

Nicht abweisende (nachprüfende – fußgesteuerte) Schleife<br />

Endlosschleife<br />

(Andernorts auch als Symbol für eine For-Schleife)<br />

Aussprung<br />

Aufruf<br />

Füllregeln<br />

Allgemeingültigkeit<br />

Struktogramme sollten keine programmiersprachenspezifische Befehlssyntax enthalten. Sie müssen so<br />

programmiersprachenunabhängig formuliert werden, dass die dargestellte Logik einfach zu verstehen und als Codiervorschrift<br />

in jede beliebige Programmiersprache umgesetzt werden kann.<br />

Deklaration<br />

Weil sie ursprünglich für prozedurale Programmiersprachen entwickelt wurden, bildete man in Struktogrammen nur die<br />

Prozedur und keine Deklarationsbereiche von Variablen und Konstanten ab (einfaches Struktogramm). Dadurch ist jedoch<br />

nicht sofort deutlich, welcher Datentyp einer Variablen zugeordnet werden muss. Die Deklaration von Variablen und<br />

Konstanten ist im ersten Anweisungsblock vorzunehmen. Diese <strong>Nassi</strong>-<strong>Shneiderman</strong>-<strong>Diagramm</strong>e bezeichnet man dann als<br />

erweiterte Struktogramme.<br />

Exklusivität<br />

Wiederholungsstruktur mit vorausgehender Bedingungsprüfung. Der Schleifenkörper<br />

(Anweisungsblock 1) wird nur durchlaufen, wenn (und solange) die Bedingung zutreffend (wahr)<br />

ist.<br />

Diese Symbolik wird auch für die Zählschleife (Anzahl der Durchläufe bekannt) benutzt.<br />

Wiederholungsstruktur mit nachfolgender Bedingungsprüfung für den Abbruch. Der<br />

Schleifenkörper (Anweisungsblock 1) wird mindestens einmal durchlaufen, auch wenn die<br />

Bedingung von Anfang an nicht zutreffend (falsch) war.<br />

Kann allenfalls durch einen Aussprung (break) verlassen werden.<br />

Page 3 of 5<br />

Der Aussprung (break) stellt die Beendigung eines Programmteils dar und sollte nicht als das verstanden<br />

werden, was <strong>Nassi</strong> und <strong>Shneiderman</strong> mit den Struktogrammen eigentlich vermeiden wollten: Die<br />

Sprunganweisung (siehe oben: unbedingter Sprung Goto).<br />

Symbol für den Aufruf eines Unterprogramms bzw. einer Prozedur oder Funktion. Nach deren<br />

Durchlauf wird zu der aufrufenden Stelle zurückgesprungen und der nächstfolgende Strukturblock<br />

durchlaufen.<br />

Jede Anweisung erhält einen eigenen Strukturblock (Sinnbilder nach DIN 66261). Selbst mehrere Anweisungen gleicher oder<br />

ähnlicher Art dürfen nicht in einem Strukturblock zusammengefasst werden.<br />

Jede Anweisung muss mindestens aus einer Zuweisung bestehen (beispielsweise<br />

Zielvariable ← Zielvariable * AndereVariable). Eine Zuweisung wird durch einen nach links gerichteten Pfeil dargestellt.<br />

http://de.wikipedia.org/wiki/<strong>Nassi</strong>-<strong>Shneiderman</strong>-<strong>Diagramm</strong><br />

17.07.2008


<strong>Nassi</strong>-<strong>Shneiderman</strong>-<strong>Diagramm</strong> – Wikipedia<br />

Ältere Struktogramme benutzen alternativ aus alten Pascal-Zeiten als Zuweisungszeichen den Doppelpunkt gefolgt vom<br />

Gleichheitszeichen (Zielvariable := Zielvariable * AndereVariable). Das Ziel einer Anweisung steht immer links vom<br />

Zuweisungszeichen. Rechts davon steht die Quelle.<br />

Über jedes Struktogramm gehört ein Name, um die Identifikation durch Ereignis- oder (Unter-)Programmaufrufe<br />

gewährleisten zu können.<br />

Praxisrelevanz<br />

In der Softwareentwicklung werden <strong>Nassi</strong>-<strong>Shneiderman</strong>-<strong>Diagramm</strong>e kaum noch eingesetzt. Dort werden vorrangig<br />

Aktivitätsdiagramme der UML verwendet (oder von diesen abgeleitete, für Anwender verständlichere vereinfachte Formen).<br />

Im Informatik-Unterricht der Sekundarstufe II werden Struktogramme verwendet, damit Schüler den Aufbau logischer<br />

Abläufe, die für die Programmierung nötig sind, trainieren können. Die Erstellung von Struktogrammen aufgrund von<br />

Beschreibungen betrieblicher Problemstellungen, die wegen wiederkehrender gleicher Vorgehensweise automatisiert werden<br />

können, ist immer noch Bestandteil vieler schulischer Abschlussprüfungen.<br />

Beispieldiagramme<br />

Einfaches Struktogramm<br />

Das folgende Beispiel zeigt den Ablauf des euklidischen Algorithmus zur Berechnung des größten gemeinsamen Teilers<br />

zweier Zahlen.<br />

als <strong>Nassi</strong>-<strong>Shneiderman</strong>-<strong>Diagramm</strong> ... ... und in Pascal:<br />

Erweitertes Struktogramm<br />

als <strong>Nassi</strong>-<strong>Shneiderman</strong>-<strong>Diagramm</strong> ...<br />

... und die Umsetzung in VBA:<br />

PROGRAM GGT(Input,Output);<br />

VAR a,b: Integer;<br />

BEGIN<br />

ReadLn(a,b);<br />

WHILE (a > 0) AND (b > 0) DO<br />

IF a > b THEN<br />

a := a-b;<br />

ELSE<br />

b := b-a;<br />

IF b=0 THEN<br />

WriteLn(a)<br />

ELSE<br />

WriteLn(b)<br />

END.<br />

http://de.wikipedia.org/wiki/<strong>Nassi</strong>-<strong>Shneiderman</strong>-<strong>Diagramm</strong><br />

Page 4 of 5<br />

17.07.2008


<strong>Nassi</strong>-<strong>Shneiderman</strong>-<strong>Diagramm</strong> – Wikipedia<br />

Option Explicit<br />

Private Sub btnZensur_Click()<br />

Dim intZensur As Integer, strZensur As String<br />

intZensur = InputBox("Geben Sie die Zensur als Zahl ein.")<br />

Select Case intZensur<br />

Case 1: strZensur = "sehr gut"<br />

Case 2: strZensur = "gut"<br />

Case 3: strZensur = "befriedigend"<br />

Case 4: strZensur = "ausreichend"<br />

Case 5: strZensur = "mangelhaft"<br />

Case 6: strZensur = "ungenügend"<br />

Case Else: strZensur = "ungültig"<br />

End Select<br />

MsgBox "Ihre eingegebene Zensur als Text:" & strZensur<br />

End Sub<br />

Software<br />

<strong>Nassi</strong>-<strong>Shneiderman</strong> Diagram-Editor mit OnlineDoc<br />

Struktogrammeditor (Struktogramme online erstellen und ablaufen lassen)<br />

Software für Struktogramme und Ablaufdiagramme<br />

Struktogramme.dot (Macros und Symbolleiste für MS-Word, Freeware)<br />

struktex − LaTeX-Paket zum Erzeugen von <strong>Nassi</strong>-<strong>Shneiderman</strong>-<strong>Diagramm</strong>en<br />

nassflow − LaTeX-Paket zum Erzeugen von <strong>Nassi</strong>-<strong>Shneiderman</strong>-<strong>Diagramm</strong>en<br />

EasyCODE Development Suite zum Editieren im Struktogramm<br />

Py<strong>Nassi</strong> (Struktogramme für Python, die Freeware kann aus den Struktogrammen Python-Quelltext generieren)<br />

Structorizer – <strong>Nassi</strong>-<strong>Shneiderman</strong> <strong>Diagramm</strong>-Editor für Linux, Mac OS X & Microsoft Windows (GPL)<br />

Vips – Visual Programming with Structograms – Visueller Editor für Struktogramme für Windows und Linux<br />

(Freeware)<br />

Weblinks<br />

DIN 66261: Sinnbilder für Struktogramme nach <strong>Nassi</strong>-<strong>Shneiderman</strong><br />

Englische Übersicht über <strong>Nassi</strong>-<strong>Shneiderman</strong> Webseiten<br />

Von „http://de.wikipedia.org/wiki/<strong>Nassi</strong>-<strong>Shneiderman</strong>-<strong>Diagramm</strong>“<br />

Kategorien: Softwarearchitektur | Programmierung | <strong>Diagramm</strong><br />

Diese Seite wurde zuletzt am 7. Juli 2008 um 18:51 Uhr geändert.<br />

Ihr Text steht unter der GNU-Lizenz für freie Dokumentation.<br />

Wikipedia® ist eine eingetragene Marke der Wikimedia Foundation Inc.<br />

http://de.wikipedia.org/wiki/<strong>Nassi</strong>-<strong>Shneiderman</strong>-<strong>Diagramm</strong><br />

Page 5 of 5<br />

17.07.2008

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!