kapitel 1: zweck der vorlesung gp1 - universität...

20
Kapitel 1: Zweck der Vorlesung GP1 Grundlagen der Programmierung 1 Holger Karl Wintersemester 2016/2017 Inhaltsverzeichnis Inhaltsverzeichnis 1 Abbildungsverzeichnis 2 Liste von Definitionen u.ä. 2 1.1 Überblick ............................... 3 1.2 GP1 im Studienverlauf ....................... 3 1.3 Denken in Algorithmen und Datenstrukturen .......... 5 1.4 Programmierparadigma ....................... 10 1.5 Welche Programmiersprache? ................... 12 1.6 Werkzeuge .............................. 14 1.7 Programmierung im Kontext .................... 16 1.8 Material ............................... 18 1

Upload: doxuyen

Post on 18-Sep-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

Kapitel 1: Zweck der Vorlesung GP1Grundlagen der Programmierung 1

Holger Karl

Wintersemester 2016/2017

Inhaltsverzeichnis

Inhaltsverzeichnis 1

Abbildungsverzeichnis 2

Liste von Definitionen u.ä. 21.1 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2 GP1 im Studienverlauf . . . . . . . . . . . . . . . . . . . . . . . 31.3 Denken in Algorithmen und Datenstrukturen . . . . . . . . . . 51.4 Programmierparadigma . . . . . . . . . . . . . . . . . . . . . . . 101.5 Welche Programmiersprache? . . . . . . . . . . . . . . . . . . . 121.6 Werkzeuge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141.7 Programmierung im Kontext . . . . . . . . . . . . . . . . . . . . 161.8 Material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

1

1.9 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . 19

Abbildungsverzeichnis

1.1 Was ist Programmierung? . . . . . . . . . . . . . . . . . . . . . 31.2 One does not simply walk into programming . . . . . . . . . . . 51.3 Einfaches Ausführungsmodell . . . . . . . . . . . . . . . . . . . 81.4 Beispiele für Programmierparadigmen . . . . . . . . . . . . . . 111.5 Hartnäckigkeit kann sich auszahlen . . . . . . . . . . . . . . . . 14

Liste von Definitionen u.ä.

1.1 Zitat (GP1 laut Modulhandbuch) . . . . . . . . . . . . . . . . . 41.1 Definition (Algorithmus) . . . . . . . . . . . . . . . . . . . . . 51.2 Definition (Datenstrukur) . . . . . . . . . . . . . . . . . . . . . 61.3 Definition (Zustand) . . . . . . . . . . . . . . . . . . . . . . . . 61.4 Definition (Ausführungsmodell) . . . . . . . . . . . . . . . . . 71.5 Definition (Programmiersprache) . . . . . . . . . . . . . . . . . 9

2

1.1. Überblick 3

1.1 Überblick

1.1.1 Dieses Kapitel

• Übersicht: Was beinhaltet Programmieren?• Was macht eine gute Programmiererin aus?• Was soll in GP1 erreicht werden?• Warum machen wir das so?

1.2 GP1 im Studienverlauf

1.2.1 Was ist Programmierung?

Abbildung 1.1: Was ist Programmierung?

1.2.2 Vorlesungsinhalt GP1

Von allem ein bisschen, insbesondere:

• Grundlegende Programmierparadigmen– Imperativ– Objektorientiert– Dynamisch vs. statisch typisiert

4 Liste von Definitionen u.ä.

• Coding– Entwicklung– Wiederbenutzung– Test– Werkzeuge

Programmierparadigmen

Mit dem Begriff Programmierparadigmen klassifiziert man Programmierspra-chen in Familien. Innerhalb einer Familie kommen ähnliche Konzepte undGrundannahmen zur Geltung. Das betrifft zum Beispiel Annahmen über dasAusführungsmodell, über die Reihenfolgen von Ausführungen, und ähnliches.Andere Aspekte sind die Organisation des Codes in kleinere oder größereEinheiten. Stilfragen zählen ebenfalls dazu

1.2.3 GP1 im Modulhandbuch

Zitat 1.1 (GP1 laut Modulhandbuch). Die Studierenden sollen• die Programmentwicklung von Grund auf erlernen;• lernen, Sprachkonstrukte sinnvoll und mit Verständnis anzuwenden;• grundlegende Konzepte der objektorientierten Programmierung verste-hen und anzuwenden lernen;

• lernen, Software aus objektorientierten Bibliotheken wiederzuverwen-den.

1.2.4 Modul I.1.1

• Pflichtmodul im Gebiet „Softwaretechnik und Informationssysteme“• Ziel des Moduls „Programmiertechnik“:

– Das Modul vermittelt einführende und grundlegende Kenntnisseund Fähigkeiten in der Programmierung

• Modul I.1.1 besteht aus– Grundlagen der Programmierung 1 (GP1)– Grundlagen der Programmierung 2 (GP2)– Grundlagen der Programmiersprachen (GPS)

1.2.5 Programmieren?

• Irgendwie dem Computer erklären was er machen soll?• Irgendwie zusammen hacken. . . ?

Wirklich?

1.3 Denken in Algorithmen und Datenstrukturen

1.3. Denken in Algorithmen und Datenstrukturen 5

Abbildung 1.2: One does not simply walk into programming

1.3.1 Grobe Vorstellung

• Algorithmus: Was wird wie verarbeitet?• Datenstruktur: Wie werden Daten repräsentiert?

1.3.2 Algorithmus

Definition 1.1 (Algorithmus). Ein Algorithmus ist eine endliche, eindeuti-ge, unmissverständliche Handlungsvorschrift zur Lösung eines Problems.

1.3.3 Algorithmus

Historisch

• Erste Ideen, Abu Dscha’far Muhammad ibn Musa al-Chwarizmi, ca. 825n.u.Z.

• Ada Lovelace, 1843, Berechnung von Bernoullizahlen

Wie?

• Wie stellen wir das sicher?• Natürliche Sprache?

1.3.4 Datenstruktur

• Welche Daten verwendet?• Wie repräsentiert?• Wie manipulierbar?

Formalisiert:

• Abstrakter Datentyp• Siehe VL Modellierung

6 Liste von Definitionen u.ä.

1.3.5 Datenstruktur

Definition 1.2 (Datenstrukur). Eine Datenstruktur legt fest, wie Daten ineinem Rechner repräsentiert werden und wie sie verarbeitet oder manipuliertwerden können.

1.3.6 Algorithmus/Datenstrukturen in Isolation?

Kann man sich das beliebig ausdenken?

Nein!

• Hängt entscheidend vomMaschinenmodell ab

Beispiele:

• Normaler Rechner• Abstrakt: Turing-Maschine

– Siehe VL Modellierung, VL EBKfS• Quantencomputer

1.3.7 Maschinenmodell für GP1?

Wir gehen von normalen Rechnern aus:

• Speicher• Verarbeitung• Programm

1.3.8 Speicher

• Enthält Daten– Unterteilt in kleinere Einheiten, Speicherstellen– Einfachster Fall: Speicherstellen durchnummeriert

• Inhalte der Speicherstellen zu einem Zeitpunkt: Zustand– Zentraler Begriff!

Definition 1.3 (Zustand). Der Zustand eines Rechners ist ein Element einerdiskreten Menge. Er wird gebildet durch den Inhalt aller (veränderlichen)Speicherstellen des Rechners.

1.3.9 Verarbeitungseinheit

• Central Processing Unit (CPU)• Manipuliert Daten im Speicher

1.3. Denken in Algorithmen und Datenstrukturen 7

– Manipuliert Zustand• Hält sich dabei an Anweisungen• Es gibt nur endlich viele, wenige Anweisungen

– Der Instruktionssatz

1.3.10 Programm

• Eine Folge von Anweisungen, das Programm• Anweisungen entstammen Instruktionssatz

1.3.11 Instruktionssatz: Beispiele

Beispiele für Anweisungen:

• Übertrage Daten von beliebiger Stelle des Speichers in CPU• Übertrage Daten von CPU in beliebige Stelle des Speichers• Addiere zwei Daten• Vergleiche zwei Daten

1.3.12 Ausführungsmodell

Mit Speicher, CPU, Instruktionssatz ergibt sich ein Ausführungsmodell:

• CPU bearbeitet, zu jedem Zeitpunkt, eine aktuelle Anweisung aus demProgramm

• Bearbeitung dieser Anweisung führt ggf. zur Veränderung der Daten• Dann wird nächste Anweisung ausgeführt

1.3.13 Ausführungsmodell

Definition 1.4 (Ausführungsmodell). Ein Ausführungsmodell legt fest,wie aus einem Zustand ein Folgezustand entsteht.

1.3.14 Ausführung

• Ausführung beginnt mit einem Zustand• Jede Anweisung überführt einen Zustand in seinen Folgezustand• Ausführung insgesamt also: Folge von Zuständen

1.3.15 Ausführungsmodell (2)

Immer die nächste Anweisung?

• Langweilig. . .

8 Liste von Definitionen u.ä.

Flexibel?

• Die nächste auszuführende Anweisung kann von Vergleichen abhängen• Vorstellung eines Sprungs in der Folge der Anweisungen

1.3.16 Ausführungsmodell

Abbildung 1.3: Einfaches Ausführungsmodell

1.3.17 Fertig?

• Im Prinzip wären wir jetzt mit der Vorlesung fertig:– Instruktionssatz genau beschreiben– Details Ausführungsmodell genau beschreiben

• Praktikabel? Nein!– Zu feingranular– Für Menschen schlecht verständliche Darstellung

• Wie programmieren?

1.3.18 Programmieren

• Basteln bis es tut??• Gutes Programmieren

– Systematisches Nachdenken, Entwurf, Planung, Verständnis– Auch: Ästhetik

• Systematik? – Im Laufe der Vorlesung

1.3.19 Programmiersprachen

• Heben das Abstraktionsniveau– Mächtigere Anweisungen– Einfacher für Menschen

• Also: Definiere neuen Instruktionssatz, neue Vorstellung von Zustand,. . .

• Eine Programmiersprache

1.3. Denken in Algorithmen und Datenstrukturen 9

1.3.20 Programmiersprache – Definition

Definition 1.5 (Programmiersprache). • Eine Programmiersprachedient der Definition von Algorithmen und der in Algorithmen benutztenDatenstrukturen.

• Sie definiert ggf. Begriff des Zustandes und der Übergänge zwischenZuständen. Hierfür wird meist der Begriff der Anweisung verwendet.Dadurch wird die Semantik der Sprache festgelegt.

• Zusätzlich legt eine Programmiersprache fest, wie Anweisungen undDatenstrukturen notiert werden. Dies bestimmt die Syntax der Sprache.

Anmerkung: Zwei Sprachen

Eigentlich besteht (nahezu) jede Programmiersprache aus zwei Teilsprachen:

• Einer Sprache, die Daten beschreibt: wie sehen sie aus, wie sind siebenannt, welche Eigenschaften haben sie, wie können einfache Datenzu komplexeren Daten kombiniert werden?

• Einer Sprache, die Operationen auf Daten beschreibt: wie können Datenmanipuliert werden, wie können neue Daten berechnet werden, unterwelchen Bedingungen soll das geschehen?

In Praxis sind diese beiden Teile einer Sprache oft nicht unterscheidbar undeng mit einander verwoben. Es gibt aber durchaus Beispiele, in denen nur einAspekt auftritt, etwa bei Spezifikationssprachen für Typen.

Anmerkung: Syntax und Semantik

Mit Syntax werden die Regeln bezeichnet, die ein Text einhalten muss, umin einer gegebenen Programmiersprache als gültig angesehen zu werden –man spricht dann von einem syntaktisch korrektem Programm. Die VL Mo-dellierung (und im weiteren Studienverlauf die VL Formale Sprachen) stelltunterschiedliche formale Techniken vor, solche Syntaxregeln zu formulieren.

Die Semantik beschreibt, wie ein syntaktisch korrektes Programm Eingabenauf Ausgaben abbildet. Insbesondere auch, wie die Semantik eines Programmsaus der Semantik von Teilen des Programms – bis zu einzelnen Anweisungen– erklärt werden kann. Die mathematisch präzise Definition einer Sprachse-mantik ist dabei anspruchsvoll und wird in GP1 nicht weiter formal behandelt.Wir beschränken uns hier auf intuitive Beschreibungen dieses Begriffs.

1.3.21 Ausführung?

• Aber: Programme sind nicht mehr direkt durch reale Maschinen aus-führbar

10 Liste von Definitionen u.ä.

Das macht nichts!

• Wir stellen uns einfach eine irrealeMaschine vor, die entsprechend fähigist

• Später: von irrealer Maschine zu realer Maschine?!– Interpreter– Compiler

1.4 Programmierparadigma

1.4.1 Gute Programmiersprachen?

• Was ist das richtige Abstraktionsniveau?• Wie Sprachen gestalten, damit

– für Menschen einfach nutzbar?– für reale Maschinen gut umsetzbar?

Grundlegende Ideen

• Ideen in Programmierparadigmen beschreiben• Gruppieren Programmiersprachen zu Familien

1.4.2 Programmierparadigma

Sprachen eines Paradigmas gleichen sich in:

• Was sind statische Aspekte der Sprache?– Konstanten? Daten? Typen? Code? Variablen? . . . ?

• Was sind dynamische Aspekte der Sprache?– Variableninhalte? Variablen? Folge von Anweisungen?– Woher stammt Dynamik?

* Eingaben? Zeitablauf? Ereignisse? Zufall? . . . ?

1.4.3 Programmierparadigmen: Beispiele

Abbildung 1.4 zeigt Beispiele für Programmierparadigemn, die wir hier kurzbetrachten.

1.4.4 Programmierparadigma: Imperativ

• Älteste Sprachfamilie• Niedrige Abstraktionsebene• Sehr nahe am realen Maschinenmodell

1.4. Programmierparadigma 11

Abbildung 1.4: Beispiele für Programmierparadigmen

• Einfach zu erlernen, aber schlecht für große Anwendungen geeignet• Beispiele: BASIC, C, Pascal, . . .

1.4.5 Programmierparadigma: Objektorientiert

• Beobachtung bei imperativen Sprachen: Zusammenhang zwischen Da-ten und Anweisungen oft schwer zu sehen– Insbesondere bei großen Programmen unübersichtlich

• Idee: Zusammenfassen!– Daten und der darauf anwendbare Code werden gemeinsam be-schrieben

• Beispiele: Smalltalk, C++, Java, Python

1.4.6 Programmierparadigma: Funktional

• Programm selbst kann zum Gegenstand des Programms werden– Schlagwort: Functions as first-class citizens

• Vermeidung der Vorstellung eines Zustands– Keine Seiteneffekte

• Beispiele: Lambda-Kalkül, Lisp, Haskell, F#

1.4.7 Programmierparadigma: Logisch

• Ein Programm beschreibt Fakten und Schlussregeln• Maschine konstruiert durch Anwendung der Regeln auf Fakten neueFakten

• Wenn eine Frage als Fakt konstruiert werden kann, ist sie wahr

12 Liste von Definitionen u.ä.

• Beispiele: Prolog

1.4.8 Welches Paradigma für GP1?

• Anforderungen– Leicht erlernbar– Praxisrelevant– Ausgangspunkt für weitere Ausbildung

• GP1: 30% imperativ, 60% objektorientiert, 10% funktional• Details: VL Grundlagen der Programmiersprachen

1.4.9 Paradigma und Sprache?

• Meist keine 1:1 Beziehung– Kein Paradigma mit nur einer Beispielsprache– (Fast) keine Sprache folgt nur einem Paradigma exklusiv

• Meist Mischkonzepte, Überlappungen, . . .

1.5 Welche Programmiersprache?

1.5.1 Anforderungen

• Leicht erlernbar, gut strukturiert• Praxisrelevant• Deckt wesentliche Paradigmen ab• Ausgangspunkt für weitere Ausbildung• Portierbar zwischen Betriebssystemen, Architekturen• Spass!

1.5.2 Auswahl?

• Keine Sprache erfüllt alle Anforderungen :-(• Kandidaten: C/C++, Java, Python

– Alle praxisrelevant, wesentlich im weiteren Studienverlauf

1.5.3 C/C++ ?

• Nahe am Maschinenmodell– Es passiert nichts überraschendes

• Wenig Abstraktion• Wenig fehlerverzeihend

1.5. Welche Programmiersprache? 13

• Alte Sprache: viel historischer Ballast– Durch gewünschte Rückwärtskompatibilität– Insbesondere bei C++

• (Nahezu) keine funktionalen Aspekte

Rückwärtskompatibilität

Rückwärtskompatibilität ist eine Eigenschaft, die bei neuen Versionen eines Sy-stems – hier: einer Programmiersprache – auftritt. Rückwärtskompatibilitätliegt vor, wenn die neue Version in der Lage ist, Eingaben (hier: Program-me) korrekt und unverändert zu verarbeiten, die für die alte Version erstelltwurden.

Beispiel: Benzinmotoren sind rückwärtskompatibel zu einander, da sie alleBenzin verarbeiten. Mit der Einführung des Katalysators war dies aber nichtder Fall, da verbleites Benzin nicht mehr verarbeitet werden konnte.

1.5.4 Java?

• Hohe Abstraktion• Komplexes Ausführungsmodell

– Viel Magie• Moderne Sprache, die viele Trends integriert

– Dadurch auch unübersichtlich– Beispiel: Funktional möglich, aber offensichtlich aufgepfropft

• Hoher Einarbeitungsaufwand zu Beginn

1.5.5 Python?

• Moderne Sprache, aber strikt verwaltet• Weniger komplex als Java• Sehr gut lesbar, kompakt

– Typischerweise: 1/3 – 1/5 vergleichbaren Java-Codes• Geringer Einarbeitungsaufwand• Interpretiert, dadurch einfach zu experimentieren• Vor-/Nachteil: Keine statischen Typen

1.5.6 Vergleich: TIOBE Index

• TIOBE Index: Welche Sprachen werden am Arbeitsmarkt nachgefragt?

Ranking:

1. Java2. C, C++3. Python

14 Liste von Definitionen u.ä.

1.5.7 Konsequenz?

• Beginn: Python – ca. 3/4 der Vorlesung– Grundlegende imperative, objektorientierte, funktionale Aspekte

• Zum Ende: Java – ca. 1/4– Einführung statischer Typisierung

(und C kommt im vierten Semester. . . )

Vorteil?

• Einfacher Einstieg & breiter Horizont• Zwei Sprachen sind kein Hexenwerk!

1.5.8 Alle Sprachen?

Abbildung 1.5: Hartnäckigkeit kann sich auszahlen

1.6 Werkzeuge

1.6.1 Werkzeuge

• Programmierer brauchen Werkzeuge, je nach Sprache• Wesentlich:

– Editor– Debugger– Profiler– (IDE)– Dokumentation– Versionsverwaltung

1.6.2 Editor

• Programmtext eintippen. . .

1.6. Werkzeuge 15

• Einfacher Editor– Komfortabel– Aber keine spezifische Unterstützung für gewählte Programmier-sprache

• Programmier-Editor– Unterstützt editieren in gewählter Sprache– Versteht Programmiersprache– Kann Vorschläge machen, Ergänzungen, . . .

1.6.3 Editor für GP1?

• Prinzipiell: Nutzen Sie, was Sie wollen!• Abgaben durch Browser-basiertes System

– Jupyter, Projekt Webseiten– Insbesondere: Editor im Browser

1.6.4 Debugger

• Niemand programmiert fehlerfrei• Debugger hilft bei Fehlersuche

– Programm gezielt anhalten– Variablenwerte anschauen, verändern– . . .

1.6.5 Profiler

• Laufzeit eines Programms untersuchen• Wo ist es unnötig langsam?• Statistiken für viele Läufe erheben

1.6.6 Dokumentation

• Innerhalb eines Programms: Dokumentation, Kommentare– Notizen was, warum und wie geschieht

• In Programm verteilt• Werkzeug: Dokumentation extrahieren und in kompakter Form bereitstellen

• Beispiele: javadoc, doxygen (mit Abarten), pydoc, autodoc, . . .

1.6.7 Versionsverwaltung

• Kein Programm ist direkt perfekt– Verfeinert, Fehler behoben, . . .– Es entstehen Versionen eines Programms

• Handhabung?

16 Liste von Definitionen u.ä.

– Kopien in Ordnern? MyProgram/v17.3_after_midnight ?

1.6.8 Werkzeuge für Versionsverwaltung

• Nutzen Sie spezialisierte Werkzeuge!• Nur eine Version des Programms in Bearbeitung• Ältere Versionen, Alternativen zugreifbar• Beispiele:

– svn, git (mit Zusatzfunktionen wie etwa github )– Jupyter: einfaches Abspeichern und Wiederbenutzen älterer Ver-sionen (sog. checkpoint)

Versionsverwaltung – aktueller Stand

Es gibt eine große Anzahl unterschiedlicher Versionsverwaltungswerkzeuge.Aktuell ist git vermutlich am weitesten verbreitet; es ist sehr flexibel undfunktionsreich.

In GP1 werden wir allerdings auf explizite Versionsverwaltungswerkzeuge(voraussichtlich) verzichten.

1.6.9 Integrierte Entwicklungsumgebung

• Integrated Development Environment (IDE)• Fasst viele Werkzeuge in einem Programm zusammen• Problem: Meist sehr komplex

– Bedienung, Nutzung einer IDE zu lernen ist sehr zeitaufwändig• IDE-Bedienung ist nicht programmieren!

Empfehlung

• Tun Sie es nicht• Jedenfalls nicht in GP1!

1.7 Programmierung im Kontext

1.7.1 Alles alleine?

• Schreiben Sie alle Programme von Grund auf (from scratch)?

Natürlich nicht

• Sie nutzen Arbeit anderer

1.7. Programmierung im Kontext 17

– Allgemein verfügbar– Aus Ihrem Team

• Sie nutzen Erfahrungen anderer

1.7.2 Allgemein verfügbar: Bibliotheken

• Bibliothek– Programmcode der vielen Zwecken dienen kann– Teil der Sprache: Standard-Bibliothek– Oder zusätzlich verfügbar

• Stark unterschiedliche Ansätze zwischen Sprachen– C: fast leere Standardbibliothek– Python: sehr umfangreich (batteries included)

Effizienz des Programmierers

• Gute Programmiersprache mit guter Bibliothek!

1.7.3 Technisch: Package management systems

• Wie findet man, installiert man zusätzliche Bibliotheken?– Bibliothek: Package– Package management system

• Stark unterschiedliche Ansätze zwischen Sprachen– C: ???– Python: Python Package Index (PIP), Conda, u.a.

• Beispiele: Später

1.7.4 Team-Arbeit: Versionsverwaltung

• Versionsverwaltung auch (insbesondere) für Team-Arbeit gedacht• Gemeinsame Arbeit an größerem Projekt• Wiederverwendung!• Beispiele: Später

1.7.5 Hilfe finden

Wo finden Sie Hilfe? Bei allgemeinen Fragen?

• StackExchange– Mit spezialisierten Unterseiten für einzelne Gebiete– stackOverflow – 4.7 million programmers, helping each other– AskUbuntu– System adminstration– TEX/LaTex StackExchange – Textverarbeitung für ernsthafte Text-verarbeiter

18 Liste von Definitionen u.ä.

– emacs – Editor für ernsthafte Programmierer

1.7.6 Hilfe finden (2)

• Spezifisch: Sprache, Entwicklungsumgebung, . . .– Beispiel C++: C++ Reference Site

1.7.7 Gute Programmierer

. . . wissen, wie man google/stackoverflow die richtigen Fragen stellt

1.8 Material

1.8.1 Programmierung

• Programmierung allgemein– Felleisen et al., How to design programs, An introduction to pro-gramming and computing, MIT Press (online verfügbar).

• Online– CodeCademy: Große Sammlung von Kursen zu unterschiedlichenThemen; interaktiv

– CodeWars: Lernen durch Herausforderungen– s. a. Übersichtswebsite; meist kommerzielle Angebote

1.8.2 Python

• Python, die Sprache– Python Dokumentation– Mark Lutz, Learning Python, 5th ed., O’Reilly

* Auch als eBook in der UniBib– Jason Briggs, Python for Kids– Bernd Klein, Einführung in Python 3: In einer Woche programmie-ren lernen

– Thomas Theis, Einstieg in Python

1.8.3 Python, Umgebungen

• Jupyter– Jupyter Projekt Webseiten

• Texteditor– Atom

1.9. Zusammenfassung 19

– Emacs* Mit Abarten je nach Betriebssystem

– und viele, viele andere . . .• IDEs

– (Vorsicht, sehr komplex)– Kommerziell: PyCharm– Open Source: Eclipse, insbes. PyDev

1.8.4 Java

• Bücher– Hanspeter Mössenböck, Sprechen Sie Java? dpunkt Verlag– Reinhard Schiedermeier, Programmieren mit Java, Pearson Studi-um

• Java Tutorial

1.8.5 Java, Umgebungen

• IDEs– (Vorsicht, sehr komplex)– Open Source: Eclipse

1.9 Zusammenfassung

1.9.1 Aber das kann ich doch alles

• Vorkenntnisse vorhanden? Super!• Keine? Auch gut!• Selbsteinschätzung – brauche ich die Vorlesung?

– Variablen: Referenztypen vs. normale Typen– Statisch vs. dynamisch typisierte Sprachen– Kontrollstrukturen: if, while, formit Iteratoren– Algorithmenentwurf mit rekursiven Funktionen– Funktionen: Closures, Generatoren– Objektorientierung

* Mehrfachvererbung,MethodResolutionOrder durchC3-Algorithmus* Einfachvererbung: Abstrakte Klassen vs. Interfaces

– Debugging: Konzepte und Werkzeuge

20 Liste von Definitionen u.ä.

1.9.2 Übung auch bei Vorkenntnissen

• Siemüssen selbst bei perfekten Vorkenntnissen Übungsaufgaben abge-ben

• Zulassungsvoraussetzung für Klausur!• Aber das ist dann ja kein Aufwand für Sie!

1.9.3 Zusammenfassung

• Programmieren ist– mehr als nur Coding– ein systematischer Prozess– spielt sich in einem gewählten Paradigma ab

• Gute Programmierer– sind analytisch und stilistisch sicher– beherrschen wesentliche Werkzeuge– kennen den Entwicklungskontext