Grundlagen der Programmierung Dr. Cătălin Rusu Workload (in Stunden): Vorlesung: 2 Seminar/Übung: 2 + 2 URL: http://www.cs.ubbcluj.ro/~rusu Email: [email protected] Kursinhalt 1. Überblick, grundlegende Sprachelemente 2. Phasen eines Softwareprojekts 3. Algorithmus 4. Wie funktioniert Python Kursinhalt 1. Software Entwicklung 2. Prozedurale Programmierung 3. Modulare Programmierung 4. Objektorientierte Programmierung 5. Softwarearchitektur 6. Vereinheitlichte Modellierungssprache (UML) 7. Software testing 8. Rekursive Programmierung 9. Komplexitätstheorie 10. Suchalgorithmen 11. Sortieralgorithmen 12. Divide-et-Impera 13. Backtracking Prüfungsform: Klausur (40%) Lab (30%) Praktische Prüfung (30%) Minimale Leistungsstandards: K,P,L >= 5 Lecture 1 ● Was ist Programmierung ● Python. Grundlegende Sprachelemente ● Feature Driven Development Was ist Programmierung Hardware & Software Hardware: computers/multi-platform? Software Programmiersprache Python Python Shell Python standard library: Datentypen, Funktionen Der Computer Memory: RAM Festplatte CPU: ALU Control Unit I/O Unit: Tastatur, Bildschirm Andere Systeme Daten Digitale Repräsentation von Information ● Strukturierte ● Semistrukturierte ● Unstrukturierte Datenverarbeitung? Python eine neue Programmiersprache, die ● ● Einsteigerfreundlich und leicht zu lernen ist, Viele Möglichkeiten bietet ohne unübersichtlich zu werden, ● Mehr als ein Programmierparadigma unterstützt, ● Mit wenigen Keywords auskommt. Python ist leicht zu lernen ● ist meist wohl strukturiert ● intuitiv ● gut lesbar Python ist eine Interpretersprache ● mit interaktiver Shell ● erzeugt Python-Bytecode ● nutzt Stackbasierte VM ● gut dokumentiert! http://xkcd.com/303/ Python ist eine moderne Sprache ● Objektorientiert ● Skalierbar ● OS unabhängig ● Reich an Libraries ● Erweiterbar http://xkcd.com/138/ Python Ein Mantra ● Beautiful is better than ugly ● Explicit is better than implicit ● Simple is better than complex ● Flat is better than nested ● Sparse is better than dense ● Readability counts Werkzeuge Python(x,y): Softwaresuite mit allen Werkzeugen IDLE: Python Interpreter Shell Eclipse + PyDev: Integrierte Entwicklungsumgebung Python Grundlagen >>> print ("Hallo Welt!") Hallo Welt! >>> >>> a = input ("a: ") a: 4 >>> b = input ("b: ") b: 6 >>> c = int (a) + int (b) >>> print (c) 10 >>> Python Grundlagen Eigene Syntaxelemente ● ● ● Kommentare: beginnen mit einem Doppelkreuz-Zeichen # Name: erlaubt sind die Buchstaben A - Z und a - z, die Zahlen 0 - 9, sowie der Unterstrich "_". Literale: direkte Darstellung der Werte von Basistypen >>> STRING = "# Dies ist kein Kommentar." >>> Datenmodell Data abstraction: alle Daten sind Objekte Ein Objekt: Zustand Verhalten Identität unveränderlichen gegen veränderlichen Objekte Grund-Datentypen (Zahlen, Strings, Tupel) Liste,ADTs (Abstrakter Datentyp) Grund-Datentypen Integer >>> type(1) <type 'int'> (sehr) lange Integer >>> type(1L) <type 'long'> Gleitkommazahlen >>> type(1.0) <type 'float'> Komplexe Zahlen >>> type(1 + 2j) <type 'complex'> Standardoperationen Addition + Subtraction Division / Integerdivision // Multiplikation * Expotentieren ** Modulo % Built-in Funktionen round, pow, etc. Numersche Operationen Operation Abkürzung x=x+y x += y x=x-y x -= y x=x*y x *= y x=x/y x /= y x=x%y x %= y x = x**y x **= y x = x//y x //= y Vergleichsoperation x == y x != y x<y x <= y x>y x >= y Strings Escape-Sequenz Erklärung String str1 = "abc" str2 = 'abc' str3 = """ abc """ str4 = ("abc" "def") \a erzeugt Signalton \b Backspace \f Seitenvorschub \n Linefeed \r Carriage Return \t horizonal Tab \v vertikal Tab \" \' \\ Escaping " ' \ Formatierung mit Strings Syntax "...%n...%m..." % (Wert1, Wert2) Beispiele >>> a = 'H' >>> b = 'ello World' >>> "%c%s" % (a,b) 'Hello World' Format d, i f g, G u x o e, E c s, r % Erklärung Integer mit Vorzeichen Float (Dezimaldarstellung) Float (wiss. mit Exponent) Integer ohne Vorzeichen Hexzahl ohne Vorzeichen Oktalzahl ohne Vorzeichen Float (Exponentendarst.) Zeichen (Länge 1) String Prozentzeichen Ausdrücke und Variabilen Variabile: abstrakter Behälter für eine Größe, welche im Verlauf eines Rechenprozesses auftritt Name Adresse ● Ausdrück: eine Kombination von Operanden (Werten, Variablen) und Operatoren. >>> 2*3-4 2 >>> 2*(3-4) -2 Anweisungen Programm: eine Abfolge von Anweisungen. Ein Programm ist dabei aus Anweisungsblöcken aufgebaut Zuweisung die Verbindung zwischen einem Namen und dem Wert >>> x = 1 >>> >>> x = x + 2 >>> Die Katze auf der Terrasse Mit Python-Objekten ist es wie mir der Katze, die du irgendwann schlafend auf deiner Terrasse vorfindest. Ganz wie ein PythonObjekt kann dir die Katze nicht sagen, wie sie heißt – es ist ihr auch ganz egal. Um ihren Namen herauszufinden, wirst du wohl deine Nachbarn fragen müssen, und du solltest nicht überrascht sein, wenn du herausbekommst, dass die Katze viele Namen hat. Rollen in der Software Engineerings Der Entwickler/Tester/Architekt Der Stakeholder Der Nutzer Stakeholder Einzelpersonen und Organisationen • die aktiv an einem Projekt beteiligt sind. • deren Interessen als Folge der Projektdurchführung oder des Projektabschlusses positiv oder negativ beeinflusst werden können. • die das Projekt und seine Ergebnisse beeinflussen Die Phasen eines Softwareprojekts Softwaretechnik: systematische Verwendung von Prinzipien, Methoden und Werkzeugen für die arbeitsteilige, ingenieurmäßige Entwicklung und Anwendung von umfangreichen Softwaresystemen Feature-driven development Die Phasen eines Softwareprojekts Problemstellung. Idee Ein Lehrer braucht ein programm für alle Studenten, die Rationale Zahlen lernen möchten. Anforderungs (was?) Genaue Festlegung des Leistungsumfanges des geplanten Systems Umsetzung der Anforderungen in ein Modell, welches die künftige Funktionalität des zu entwickelnden Produktes vollständig beschreibt Die Phasen eines Softwareprojekts Problemstellung. Idee Ein Lehrer braucht ein programm für alle Studenten, die Rationale Zahlen lernen möchten. Anforderungs (was?) Genaue Festlegung des Leistungsumfanges des geplanten Systems Umsetzung der Anforderungen in ein Modell, welches die künftige Funktionalität des zu entwickelnden Produktes vollständig beschreibt Probleme ● Kunden wissen nicht was sie wirklich wollen. ● Kunden benutzen ihre eigene Fachsprache. ● ● ● ● Verschiedene Stakeholder können widersprüchliche Anforderungen haben. Politische und organisatorische Faktoren können Anforderungenbeeinflussen. Anforderungen ändern sich während der Analyse und Entwicklung. Neue Stakeholder mischen sich ein Anforderungs Vollständig Alle Anforderungen des Kunden müssen explizit beschrieben sein, es darf keine impliziten Annahmen des Kunden über das zu entwickelnde System geben. Atomar Es darf nur eine Anforderung pro Abschnitt oder Satz beschrieben sein. Anforderungs Identifizierbar Jede Anforderung muss eindeutig identifizierbar sein Nachprüfbar Die Anforderungen sollten mit Abnahmekriterien verknüpft werden, damit bei der Abnahme geprüft werden kann, ob die Anforderungen erfüllt wurden. Konsistent Die definierten Anforderungen sind untereinander widerspruchsfrei. Features Die Features werden nach dem einfachen Schema <Aktion> <Ergebnis> <Objekt> aufgeschrieben (z.B. „Berechne Gesamtsumme der Verkäufe“). Ein Feature darf maximal wenige Stunden zu seiner Realisierung benötigen. Features Rechner (Feature-Liste) F1. Eine Zahl einfügen F2. Rechner löschen F3. Die letzte Änderung rückgängig machen Feature Driven Development Erstelle eine Feature-Liste Plane jede Iteration Für jeden Iteration: Entwurf je Feature Konstruiere je Feature Ein Beispiel - Rechner (die erste Iteration) Interaktionsszenario (running scenario) Nutzer a b 0 1/2 c d 1/2 2/3 e f 5/6 1/6 g h i Programm 1 -6/6 0 Erklärung Gesamt Zahl einfügen Gesamt Zahl einfügen Gesamt Zahl einfügen Gesamt Zahl einfügen Gesamt Tasks Eine Aufgabe für jede Operation (T1,T2) Eine Aufgabe für die Benutzerinteraktion (T4) Eine Aufgabe für jede Schnittstellenfunktion (T3) Aufgabenabhängigkeit : T4->T3->T2->T1 T1. Berechne den Größten gemeinsamen Teiler T2. Addition zweier rationaler Zahlen (c,e,g,i) T3. Implementiere den Rechner: init, add, total T4. Implementiere eine Benutzerschnittstelle T1 - ggT berechnen Testfall Ein Testfall ist gegeben durch eine Folge von Eingabewerten, die für ein bestimmtes Testobjekt unter definierten Randbedingungen eine zugehörige Folge von Sollreaktionen erzeugt. Input: a, b c=ggT(a,b) 23 1 24 2 64 2 02 2 20 2 24 9 3 -2 0 Fehler 0 -2 Fehler If - anweisung While - Schleife References 1. The Python language reference. http://docs.python.org/py3k/reference/index. html 2. The Python standard library. http://docs.python.org/py3k/library/index.html 3. The Python tutorial. http://docs.python.org/tutorial/index.html