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: rusu@cs.ubbcluj.ro
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)
Integer >>> type(1) <type 'int'> Grund-Datentypen (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 String str1 = "abc" str2 = 'abc' str3 = """ abc """ str4 = ("abc" "def") Escape-Sequenz Erklärung \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 Erklärung d, i Integer mit Vorzeichen f Float (Dezimaldarstellung) g, G Float (wiss. mit Exponent) u Integer ohne Vorzeichen x Hexzahl ohne Vorzeichen o Oktalzahl ohne Vorzeichen e, E Float (Exponentendarst.) c Zeichen (Länge 1) s, r 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 Python- Objekt 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 Programm Erklärung a 0 Gesamt b 1/2 Zahl einfügen c 1/2 Gesamt d 2/3 Zahl einfügen e 5/6 Gesamt f 1/6 Zahl einfügen g 1 Gesamt h -6/6 Zahl einfügen i 0 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 2 3 1 2 4 2 6 4 2 0 2 2 2 0 2 24 9 3 c=ggt(a,b) -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