Mag. iur. Dr. techn. Michael Sonntag Softwareentwicklung Allgemeines und prozedurale Konstrukte Institut für Informationsverarbeitung und Mikroprozessortechnik (FIM) Johannes Kepler Universität Linz, Österreich E-Mail: [email protected] http://www.fim.uni-linz.ac.at/staff/sonntag.htm © Michael Sonntag 2004 ? ? ? Fragen? ? Bitte gleich stellen! ? © Michael Sonntag 2004 ? Grundlagen Allgemeines Michael Sonntag Prozedurale Konstrukte 3 Algorithmen z Algorithmus = Verfahren zur Problemlösung Æ Schrittweise » Einzelne Befehle oder Blöcke Æ Präzise » Genaue Bedeutung, genaue Schreibweise (HAARGENAU!) Æ Statisch endlich » Sie wollen irgendwann mit dem Programmieren fertig sein Æ Dynamisch endlich » Sie wollen die Antwort noch erleben z Meist in natürlicher Sprache: Æ Æ Michael Sonntag Noch nicht ganz präzise niedergeschrieben (auch wenn so gedacht) Befehle/Blöcke sind für Maschinen unverständlich Prozedurale Konstrukte 4 Programm (1) z Programm = Realisierung eines Algorithmus in einer Programmiersprache Æ Nun wirklich alles haargenau » Sonst gibt es eine Fehlermeldung! Æ z Befehle und Blöcke sind fest definiert: Damit muss man auskommen! Vollständigkeit: Æ Alle modernen Programmiersprachen sind vollständig » D. h. alles was man als Algorithmus hinschreiben kann, kann man auch programmieren – Auch wenn es oft zu lange (statisch oder dynamisch) dauern würde!!! » Jedes praktische Problem kann (zumindest theoretisch) damit gelöst werden, da für alles ein Algorithmus existiert – Was nicht gelöst werden kann: Siehe Gödel! Michael Sonntag Prozedurale Konstrukte 5 Programm (2) z Praktische Probleme bei Programmen Æ Manche Probleme sind „NP vollständig“ » Man kann sie programmieren, aber außer bei Trivialbeispielen endet das Universum bevor das Programm fertig ausgeführt ist » Annäherungslösungen müssen gesucht werden Æ Manche Probleme sind „schwer“: Der Algorithmus ist nicht leicht zu finden » Kreativität, Nachdenken und Abschreiben (z. B. im Internet oder in Literatur nach Lösungen suchen) Æ Manche Probleme sind aufwendig: Der Algorithmus ist da, aber er ist sehr lang und sehr kompliziert » Nachdenken und Arbeiten Michael Sonntag Prozedurale Konstrukte 6 Problem-Probleme ??? z Praktische Probleme bei Problemen Was ist eigentlich das Problem? z Viele Auftraggeber haben nur eine ungenaue Vorstellung dessen, was sie eigentlich wollen: » „Soll die Lohnabrechnung machen, aber man sollte vielleicht auch gleich noch den Lagerbestand feststellen können; und überhaupt soll auch die ganze Entwicklungsabteilung damit unterstützt werden“ z Feststellen, was überhaupt genau gemacht werden soll, ist der erste (und oft wichtigste) Schritt! Æ z Dies wird hier nicht näher erläutert! Der nächste Schritt ist die Reduktion des Problems Æ Michael Sonntag Praktische Probleme sind so groß, daß ein Algorithmus für alles auf einmal nicht mehr erstellt werden kann: Überforderung des Gehirns (und der Papierfläche, die man noch ansehen kann!) Prozedurale Konstrukte 7 Software Engineering z z =Unterteilung des Problems in so kleine Teilprobleme, daß diese komplett verstanden und dann auf einmal und einheitlich gelöst werden können Auf einmal: Von einer Person kann ein Algorithmus entwickelt werden Einheitlich: Eine Person kann das zugehörige Programm schreiben Æ z Auch wenn es mit mehreren Personen ev. schneller geht Siehe dazu Kapitel 15 (Schrittweise Verfeinerung) im Buch! Æ Dies ist eine Methode; es gibt noch andere » Siehe dazu auch: SE Modelle, OO Design, AOE, ... Michael Sonntag Prozedurale Konstrukte 8 Softwareentwicklung z Wir gehen davon aus, dass das Problem genau bekannt ist und wir auch eine genaue Beschreibung davon besitzen Æ z Übungen: Fragen hierzu an den Übungsleiter/Vortragenden! Umsetzung in einen Algorithmus ist eine kreative Tätigkeit Æ Æ Wenig erforscht, kaum lehrbar Aufgabe der Teilnehmer mit Hinweisen des Vortragenden » Die meisten Probleme sind gar nichts so schwer… » Im Grundsatz auch in der Praxis nicht! – Die Details haben es meist in sich, sowie wenn später Änderungen oder Erweiterungen gewünscht werden z Umsetzung des Algorithmus in ein Programm Æ Æ Michael Sonntag Hauptaugenmerk der LVA Wir beschäftigen uns hier mit Java Prozedurale Konstrukte 9 Einteilung der Programmiersprachen z Funktionale: Alles ist ein mathematischer Ausdruck Æ Auch das ist vollständig! Alles lässt sich damit lösen! » Für Benutzerinterfaces oä schlecht geeignet » Sehr gut für komplexe Berechnungen Æ z Prozedurale: Schritt für Schritt ein Befehl an den Computer Æ Æ Æ z Beispiel: Lisp Direkte 1:1 Umsetzung des Algorithmus Bei weitem die allergrößte Verbreitung Beispiel: Java Sonstige: Verschiedene Misch- oder Sonderformen Æ Æ Michael Sonntag Eher unbedeutend; am ehesten noch bei künstlicher Intelligenz oder in bestimmten Sondergebieten/Spezialanwendungen Beispiele: Prolog Prozedurale Konstrukte 10 Grundlagen Prozedurale Konstrukte Michael Sonntag Prozedurale Konstrukte 11 Daten, Befehle z Datum = Bestimmter Wert (Plural: Daten) Æ Æ z Befehle = Anweisungen zur Datenmanipulation Æ Æ z Beispiele: -2,“Java“, 3.14159, 14.3.2003, März 2003, ... Computer verarbeiten Daten (=Datenverarbeitung; EDV) Beispiele: Addieren, Multiplizieren, Ausgeben, Datei öffnen, Webseite von Server abholen, …. Befehle können sehr einfach bis extrem kompliziert sein Praxis: Æ Æ Æ Michael Sonntag Maschinensprache (=Hardware) = Sehr einfache Befehle Programmiersprache = „Mittelschwere“ Befehle Bibliotheken (=fertige Programme für Teilaufgaben) = Leicht bis extrem kompliziert Prozedurale Konstrukte 12 Daten, Befehle z Heute: Daten und Befehle konzeptuell streng getrennt Æ z Daten = Æ Æ z Früher: Selbstmodifizierende Programme (=Programm sieht seine Befehle als Daten an und verändert sie) Variablen (veränderlich), oder Konstanten (invariant) Befehle (Anweisungen) = Æ Æ Vorgegeben von der Programmiersprache Meistens zwischen 50 und 100 gelegen » Je nach Definition, was alles ein getrennter Befehl ist Æ Grundmuster sind jedoch noch viel weniger: Vier Stück » Zuweisung, Sequenz, Verzweigung, Schleife – Dies reicht für Vollständigkeit aus! Weniger genügt jedoch nicht! Michael Sonntag Prozedurale Konstrukte 13 Variablen z „Behälter“ für Daten mit einem Namen Æ z Besitzen eine bestimmte Form, nur diese Art von Dingen passt hinein (entspricht einem Wertebereich) Æ z z Name ist meist frei wählbar (in bestimmten Grenzen) Moderne Programmiersprachen: Jede Variable ist typisiert, d. h. sie besitzt einen Typ und NUR das kann hinein! Kann jederzeit beliebig verändert werden Besitzt immer einen bestimmten Wert Æ Æ Achtung: Bei Java kann dieser ev. nicht abgefragt werden! Realisierung: Jede Variable besitzt einen Platz im Speicher; darin steht immer irgendetwas, das entsprechend dem Typ der Variable interpretiert wird » Beispiel: 48 kann als Zahl 48 aufgefasst werden (Typ: Ganze Zahl), aber auch als Zahl 0 (Eigentlicher Typ: Zeichen, also „0“)! Michael Sonntag Prozedurale Konstrukte 14 Zuweisung z Zuweisung eines neuen Wertes an eine Variable Æ z Meist: Berechnung eines Wertes. Beispiele: Æ Æ Æ Æ Æ z z Dies kann auch eine temporäre Variable ohne Namen sein i=1 („i“: Name der Variablen „=“: Zuweisung; „1“: neuer Wert) i=1+1 (Berechnung eines neuen Wertes) c=„Lehrgang“ (Zuweisung von Text) c=c+„ akademischen Characters“ („Berechnung“ neuen Wertes) x=y+z Zuweisungen sind nur möglich auf „Dinge“, die eine Speicherstelle repräsentieren (=„L-Value“; left-value) Unmöglich ist daher: Æ Æ Michael Sonntag 1=i (1 ist ein Wert; i repräsentiert eine Speicherstelle) y+z=x (x, y, z sind Speicherstellen; y+z aber nicht, dies ist ein Wert!) Prozedurale Konstrukte 15 Sequenz z z z Die Hintereinander-Ausführung von mehreren einzelnen Anweisungen Werden der Reihe nach ausgeführt Jede Anweisung wird komplett beendet bevor die nächste begonnen wird Æ z Keine Verzahnung (nächster Befehl beginnt, bevor der vorige komplett beendet wurde)! Reihenfolge wird durch die statische Schreibung festgelegt Æ Michael Sonntag Was weiter oben steht, wird zuerst ausgeführt! Prozedurale Konstrukte 16 Sequenz EBNF z z z x=3 y=4 z=x*y x=3 Michael Sonntag y=4 z=x*y Prozedurale Konstrukte 17 Sequenz Nassi-Shneiderman-Diagramm z z z x=3 y=4 z=x*y x=3 y=4 z=x*y Michael Sonntag Prozedurale Konstrukte 18 Verzweigung z Entscheidung zwischen zwei Alternativen Æ Æ z Es wird IMMER nur EINE davon ausgeführt, NIE beide! Auch: Selektion, Auswahl Entscheidung erfolgt nach einem Ausdruck Æ Michael Sonntag Dieser muss einen logischen Wert (Wahr oder Falsch) ergeben Prozedurale Konstrukte 19 Verzweigung EBNF z Wenn x<y, dann min=x, sonst min=y. min=x min=y z Es fehlt die Bedingung (x<y)! Æ Michael Sonntag EBNF kann nicht alles ausdrücken, was wir programmieren können! Prozedurale Konstrukte 20 Verzweigung Nassi-Shneiderman-Diagramm z Wenn x<y, dann min=x, sonst min=y. J x<y? min=x Michael Sonntag N min=y Prozedurale Konstrukte 21 Schleife z Wiederholte Ausführung einer Anweisung Æ z Jede Schleife besitzt eine Bedingung die spezifiziert, wie oft sie ausgeführt wird Æ Æ z Auch genannt: Iteration, Wiederholung Abbruchbedingung Dadurch unterscheiden sich die verschiedenen Arten Drei/vier grobe Hauptarten von Schleifen: Æ Æ Æ Æ Prüfung der Bedingung am Anfang vor jedem Durchlauf (=While) Prüfung der Bedingung am Ende nach jedem Durchlauf (=Repeat) Prüfung vor der ersten Ausführung; feste Anzahl (=For) Gar keine Prüfung: Endlosschleife (=Loop) » Nicht verwenden! Michael Sonntag Prozedurale Konstrukte 22 Schleifen EBNF z i=1, bis i=10 erhöhe i um 1 und gibt „*“ aus i=1 z z i=i+1 ausgeben “*” Auch hier fehlt wieder die Bedingung! Außerdem könnten wir das auch anders zeichnen: i=1 ausgeben “*” z i=i+1 Grund: Text ist nicht genau genug! Michael Sonntag Prozedurale Konstrukte 23 Schleifen Nassi-Shneiderman-Diagramm z i=1, bis i=10 erhöhe i um 1 und gibt „*“ aus Als While-Schleife: i=1 while i<=10 i=i+1 ausgeben “*” Michael Sonntag AlsRepeat-Schleife: i=1 i=i+1 ausgeben “*” until i>10 Prozedurale Konstrukte 24 Wann welche Schleife? Die Auswahl-Frage! z Wir wissen von Anfang an genau, wie oft die Schleife durchgeführt werden soll Æ Æ z Schleife muss immer mindestens ein Mal durchlaufen werden Æ z Oder nur in ganz seltenen Ausnahmefällen einmal anders FOR Schleife verwenden! REPEAT (do-while) Schleife verwenden! Sonst oder wenn unsicher, was besser geeignet is Æ Æ Æ Michael Sonntag Schleife wird ev. gar nicht durchlaufen Aussage schwer, wann genau wie oft WHILE Schleife verwenden! Prozedurale Konstrukte 25 Kombinationen z Zuweisung, Sequenz, Verzweigung, Schleife Æ Dies ist ALLES was sie hier lernen werden » Zumindest im Grundsatz… Details folgen noch! z Diese Elemente können beliebig kombiniert werden: Æ Æ Æ Æ Michael Sonntag Schleife in Verzweigung Verzweigung in Schleife Sequenz von Zuweisungen …. Prozedurale Konstrukte 26 Kombinationen Nassi-Shneiderman-Diagramm z Summe der geraden Zahlen von 1 bis 20 berechnen N Summe=0 Zähler=1 Zähler gerade? J Summe= Summe+Zähler Zähler=Zähler+1 Until Zähler>20 Summe anzeigen Michael Sonntag Prozedurale Konstrukte 27