17.10.2013 Aufrufe

Programmierung, Algorithmen und Techniken von Thomas Ohlhauser

Programmierung, Algorithmen und Techniken von Thomas Ohlhauser

Programmierung, Algorithmen und Techniken von Thomas Ohlhauser

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>Programmierung</strong>, <strong>Algorithmen</strong><br />

<strong>und</strong> <strong>Techniken</strong><br />

<strong>von</strong><br />

<strong>Thomas</strong> <strong>Ohlhauser</strong>


1. Begriff <strong>Programmierung</strong><br />

Entwicklung <strong>von</strong> Programmen inklusive der dabei verwendeten<br />

Methoden <strong>und</strong> Denkweisen.<br />

Ein Programm ist eine eine Zusammensetzung <strong>von</strong> <strong>Algorithmen</strong>,<br />

die in einer Programmiersprache formuliert werden.<br />

Algorithmus ist ein Verfahren, das durch eine Folge <strong>von</strong><br />

Anweisungen, die nacheinander schrittweise abgearbeitet werden,<br />

ein Problem löst.


2. Vom Problem zum Programm<br />

Gründe für die Softwarekrise Ende der 70er Jahre:<br />

• Programme taten nicht, was sie tun sollten,<br />

• oder taten es fehlerhaft,<br />

• ein Großteil der Entwicklungen wurde nicht fertig,<br />

• kostete ein Vielfaches dessen, was geplant war.<br />

• Termine wurden nicht eingehalten.<br />

• Nachträgliche Änderungen <strong>von</strong> Programmen waren nahezu<br />

• unmöglich.


Vom Problem zum Programm<br />

Deshalb wurde der Versuch unternommen, Verfahren zu<br />

entwickeln, um Softwareentwicklung mit ingenieurmäßigen<br />

Methoden zu betreiben.<br />

Dieser Bereich der Informatik heißt daher auch Software<br />

Engineering.<br />

Es entstand ein systematisches Modell, das den<br />

Entwicklungsprozess <strong>von</strong> Software in fünf Abschnitte, Phasen,<br />

zerlegt:


3. Vorgehensmodell der Systementwicklung<br />

Problemanalyse <strong>und</strong> Produktdefinition<br />

Entwurf<br />

Codierung<br />

Test<br />

Einsatz <strong>und</strong> Wartung


Phase Problemanalyse <strong>und</strong> Produktdefinition<br />

Problemanalyse:<br />

Produktanforderungen werden ermittelt<br />

Durchführbarkeitsstudie wird erstellt<br />

Kosten-/Nutzen-Analyse wird durchgeführt<br />

Produktdefinition (Anforderungsdefinition, Pflichtenheft):<br />

Leistungsumfang wird genau beschrieben<br />

Vertragsbasis zwischen Auftraggeber <strong>und</strong> -nehmer<br />

entsprechend erfolgt die Endabnahme nach den hier<br />

festgelegten Vorgaben<br />

Funktionsumfang, Leistungsverhalten<br />

Benutzerschnittstelle<br />

Dokumentationsrichtlinien<br />

Terminplanung


Phase Entwurf<br />

Auf der Gr<strong>und</strong>lage der Produktdefinition wird die Struktur des<br />

Softwaresystems, die Systemarchitektur, festgelegt. Dazu gehören<br />

unter Anderem:<br />

Zerlegung der Gesamtaufgabe in kleinere, sachlich<br />

fassbare Teilbereiche<br />

Beschreibung der einzelnen Komponenten <strong>und</strong> ihres<br />

Zusammenwirkens<br />

Der Entwurf bestimmt im Wesentlichen die Qualität des<br />

Gesamtsystems.


Phase Codierung<br />

Die einzelnen Komponenten des Entwurfs werden in<br />

einer Programmiersprache implementiert. Es entsteht<br />

eine Sammlung <strong>von</strong> Programmen.


Phase Test<br />

Innerhalb dieser Phase werden zunächst die einzelnen<br />

Komponenten getestet (Komponententest).<br />

Anschließend wird das Zusammenspiel der einzelnen<br />

Komponenten getestet (Integrationstest).<br />

Schließlich erfolgt der Test des gesamten Programmes<br />

(Systemtest).


Qualität eines Programmes<br />

Die Qualität eines Programmes wird im Allgemeinen anhand<br />

folgender Kriterien gemessen:<br />

• Benutzerfre<strong>und</strong>lichkeit<br />

• Zuverlässigkeit<br />

• Wartbarkeit<br />

• Anpassbarkeit, Änderbarkeit, Erweiterbarkeit<br />

• Wiederverwendbarkeit<br />

• Portabilität<br />

• Ergonomie


4. Dokumentation<br />

Während Software bisher vornehmlich als ausführbares Programm<br />

gesehen wurde, wird Software mehr <strong>und</strong> mehr als Einheit aus<br />

ausführbaren Programmen, zugehörigen Daten <strong>und</strong> Sammlung <strong>von</strong><br />

Dokumenten betrachtet. Dies beruht vor allem darauf, dass<br />

Dokumente sowohl während der Entwicklung als auch später im<br />

Einsatz der Software eine bedeutende Rolle spielen. Hier können<br />

beispielsweise dokumentierte Absprachen zwischen Auftragnehmer<br />

<strong>und</strong> Auftraggeber, die Dokumentation des Entwicklungsprozesses,<br />

wie Planungsdokumente <strong>und</strong> Spezifikationen, die Dokumentation<br />

der Phasen, vor allem des Entwurfs, der Implementierung <strong>und</strong> der<br />

Tests sowie Dokumentationen für den Benutzer genannt werden.


5. Grafische Darstellung <strong>von</strong><br />

Programmabläufen<br />

So wie für jeden Hausbau ein Plan erforderlich ist, der<br />

Details über Ausmaße, Fenster, Türen, Kamin usw. enthält<br />

<strong>und</strong> Auskunft über den „logischen“ Aufbau des Hauses gibt,<br />

so muss auch einem Programm ein Plan zu Gr<strong>und</strong>e liegen.


Programmablaufpläne haben das Ziel, die Logik, die hinter einem<br />

Programm steckt, anschaulich (graphisch) darzustellen. Diese<br />

graphische Darstellung dient dem Programmierer<br />

• als Gr<strong>und</strong>lage für die <strong>Programmierung</strong><br />

• als Dokumentation<br />

Vergleichbar mit einem Haus dient der Plan<br />

• dem Maurer als Gr<strong>und</strong>lage für die Position der Fenster<br />

• dem Eigentümer, um später eventuelle Änderungen (z.B.<br />

Ausbau des Dachgeschosses) vornehmen zu können.<br />

Für die Darstellung <strong>von</strong> Programmabläufen sind in der Praxis 2<br />

Darstellungsformen üblich:<br />

• der Programmablaufplan nach DIN 66001 (PAP)<br />

• das Struktogramm nach Nassi-Shneiderman (DIN 66261)


6. PAP <strong>und</strong> NSD<br />

6.1. Anweisungen<br />

Als Anweisungen können alle Befehle einer Programmiersprache bezeichnet werden die<br />

nicht den Charakter einer Schleife (Iteration) oder eine Auswahl hat. In einer einfachen<br />

Programmiersprache sehen Anweisungen so aus:<br />

Private Sub tmrUhr_Timer()<br />

lblSek<strong>und</strong>en.Caption = Format(DateDiff("s", Now, "1.01.2000"), "#,###")<br />

lblMinuten.Caption = Format(DateDiff("n", Now, "1.01.2000"), "#,###")<br />

lblSt<strong>und</strong>en.Caption = Format(DateDiff("h", Now, "1.01.2000"), "#,###")<br />

lblTage.Caption = Format(DateDiff("d", Now, "1.01.2000"), "#,###")<br />

lblWochen.Caption = Format(DateDiff("ww", Now, "1.01.2000"), "#,###")<br />

lblMonate.Caption = Format(DateDiff("m", Now, "1.01.2000"), "#,###")<br />

lblJahre.Caption = Format(DateDiff("yyyy", Now, "1.01.2000"), "#,###")<br />

End Sub<br />

Die Anweisungen eines Programmes werden nun im PAP <strong>und</strong> im NSD mit Hilfe <strong>von</strong><br />

Rechtecken dargestellt. Innerhalb der Rechtecke wird eine Beschreibung oder die<br />

Anweisung selbst eingetragen. Die Anweisungen werden in der Reihenfolge A1 , A2 ,<br />

A3, ...An ausgeführt.


PAP<br />

(bzw. untereinander)<br />

NSD


6.2. Auswahl (IF <strong>und</strong> IF / THEN / ELSE)<br />

Innerhalb eines Programmes ist es oft notwendig, eine oder mehrere Anweisungen nur<br />

unter einer bestimmten Bedingung - beispielsweise auf Gr<strong>und</strong> einer Benutzereingabe -<br />

auszuführen. Man drückt dies in den meisten Programmiersprachen durch eine «IF-<br />

Anweisung» aus.<br />

Private Sub Cmdentscheide_Click()<br />

If optm = True Then<br />

lblErgebnis.Caption = "Es wurde männlich gewählt"<br />

Else<br />

lblErgebnis.Caption = "Es wurde weiblich gewählt"<br />

End If<br />

End Sub


PAP NSD<br />

Diese Darstellungen sind wie folgt zu interpretieren: Falls die Bedingung C zutrifft<br />

(wahr ist), wird die Anweisung A ausgeführt, sonst wird mit der nächsten Anweisung<br />

weitergefahren. In dieser Darstellung ist - im Gegensatz zum kleinen Programmbeispiel<br />

- noch keine ELSE-Verzweigung vorhaden.


Ist im Programmcode zusätzlich eine ELSE-Verzweigung so wird die Darstellung<br />

entsprechend erweitert:<br />

IF / THEN / ELSE in einem PAP<br />

IF / THEN / ELSE in einem Nassi-<br />

Shneiderman-Diagramm<br />

Interpretation: Falls die Bedingung C zutrifft (wahr ist), wird die Anweisung A1 , sonst<br />

die Anweisung A2 ausgeführt


6.3. Auswahl (CASE)<br />

Eine weitere - sehr nützliche - Auswahl-Version ist die bedingte Anweisung mit<br />

mehreren Ausgängen. Diese wird «CASE-Anweisung» genannt. Das Beispiel für die<br />

CASE-Anweisung in einem VBASIC-Dialekt:<br />

Private Sub cmdBerechnen_Click()<br />

Dim Anzahl As Integer<br />

Dim Kosten As Currency<br />

Anzahl = Val(txtAnzahl.Text)<br />

Select Case Anzahl<br />

Case Is < 7<br />

Kosten = 0<br />

Case 8 To 17<br />

Kosten = (Anzahl - 6) * 0.75<br />

Case Else<br />

Kosten = (Anzahl - 16) * 0.35 + 3<br />

End Select<br />

If chkOnline.Value Then<br />

Kosten = Kosten * 0.35<br />

End If<br />

lblKosten.Caption = Format(Kosten, "0.00") & " DM"<br />

End Sub


Die Darstellung dieser CASE-Auswahl in grafischer Form<br />

(PAP <strong>und</strong> Struktogramm):


6.4. Wiederholungen (Do While...Loop)<br />

Die erste Art ist eine Wiederholung, die solange ausgeführt wird, solange eine Bedingung (C)<br />

gegeben ist, man nennt diese Anweisung eine "WHILE-Anweisung". Bedingung C wird vor dem<br />

Schleifeneintritt geprüft.<br />

Private Sub Form_Load ( )<br />

x=2<br />

Do While x < 1000<br />

MsgBox (x)<br />

x = 2 * x<br />

Loop<br />

End<br />

End Sub


6.5. Do .....Loop While / Until<br />

Eine ähnliche Wiederholungs-Struktur ist die «Do....Loop While-Schleife». Der Unterschied zur<br />

Do WHILE...Loop - Anweisung besteht darin, dass die Bedingung C immer nach (anstatt vor)<br />

Ausführung der Anweisung A geprüft wird. Die Anweisung A wird also mindestens einmal<br />

ausgeführt.<br />

Private Sub Form_Load()<br />

x = 2<br />

Do<br />

MsgBox (x)<br />

x = 2 * x<br />

Loop Until x >= 1000<br />

End


6.6. Wiederholungen (FOR)<br />

Wiederholungen (FOR)<br />

Als letze Form der Wiederholungen-Strukturen gibt es noch die FOR-Iteration, bei der eine<br />

bekannte Anzahl ausgeführt wird. Eine einheitliche, normierte Darstellung der FOR-Anweisung in<br />

einem Flowchart-Diagramm ist nicht bekannt.<br />

Bsp: 200 mal wird der Sinus einer Zahl berechnet!<br />

Public Sub cmdzähle_click ()<br />

Dim zahl As Long<br />

For i = 1 To anz * 200<br />

zahl = Sin (12.3456789)<br />

Next i<br />

End Sub<br />

Eine interne Kontrollvariable (i) schreitet im Intervall [a, b] voran. Ein optionaler Parameter<br />

bestimmt die Schrittweite, die ohne Angabe gleich 1 gesetzt wird. Solange die Kontrollvariable im<br />

Intervall [a, b] ist, wird die Anweisung A ausgeführt <strong>und</strong> die Kontrollvariable um die Schrittweite<br />

erhöht.


6.7. Unterprogramme (Sub-Prozeduren)<br />

Häufig werden in Programmen bestimmte Folgen <strong>von</strong> Anweisungen mehrmals an verschiedenen<br />

Stellen verwendet. Diese Folge wird als Prozedur oder Funktion aus dem Hauptprogramm<br />

genommen <strong>und</strong> als eigenständiges Unterprogramm implementiert, das dann vom Hautprogramm<br />

aus aufgerufen wird.<br />

Private Sub cmdEnde_Click<br />

End<br />

End Sub<br />

A<br />

PAP Struktogramm

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!