• Keine Ergebnisse gefunden

Praktische Informatik I – Der Imperative Kern Didaktische Einführung

N/A
N/A
Protected

Academic year: 2021

Aktie "Praktische Informatik I – Der Imperative Kern Didaktische Einführung"

Copied!
34
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Praktische Informatik I – Der Imperative Kern Didaktische Einführung

Prof. Dr. Stefan Edelkamp

Institut für Künstliche Intelligenz

Technologie-Zentrum für Informatik und Informationstechnik (TZI) Am Fallturm 1, 28359 Bremen

+49-(0)421-218-64007 www.tzi.de/~edelkamp

(2)

Outline

1 Zur Geschichte der Programmierausbildung

2 Die Welt vor 40 Jahren: Die Zeit der Maschinen– und ersten Hochsprachen

3 Die Welt vor 30 Jahren: Die Zeit der Imperativen Sprachen

4 Die Welt vor 20 Jahren: Die Zeit der Alternativen Sprachen

5 Die Welt vor 10 Jahren: Die Zeit der Kompendien

6 Objects First

7 Die Qual der Wahl

8 Technische Vorüberlegungen

(3)

Pioniere der Informatik

Die Informatik ist mit wenigern als 100 Jahren eine vergleichsweise junge Wissenschaft, die unter anderem mitVordenkernwie

Alan Turing, Max Neumann, David Hilbert,

Wilhelm Ackermann, Kurt Gödel,

Alonzo Church,

Stephen C. Kleen, sowie Emil Post

ihren Anfang nahm und durch die Entwicklung von immer

leistungsfähigeren Computern unser heutiges Leben durchdringt.

Mittlerweile gibt es über 1.000 Institutionen, dieInformatik als Studium in Deutschland anbieten.

(4)

Didaktische Konzepte

Der Vermittlung von informatischen Inhalten an der Hochschule hat Forscher immer wieder dazu animiert, sich über denZugang zu InformatikGedanken zu machen.

MitObject Firstwird eine grundlegende Veränderung der Vermittlung von Informatikinhalten gefordert, die das Konzept des Objekts, seiner Instanzen und die hierarchische Gliederung von Klassen vor dem Studium desimperativen Kernesund der Algorithmenanalyse stellt.

(5)

Outline

1 Zur Geschichte der Programmierausbildung

2 Die Welt vor 40 Jahren: Die Zeit der Maschinen– und ersten Hochsprachen

3 Die Welt vor 30 Jahren: Die Zeit der Imperativen Sprachen

4 Die Welt vor 20 Jahren: Die Zeit der Alternativen Sprachen

5 Die Welt vor 10 Jahren: Die Zeit der Kompendien

6 Objects First

7 Die Qual der Wahl

8 Technische Vorüberlegungen

(6)

Erste Programmiersprachen

Das Ziel, Computer zur Unterstützung desUnterrichtsund der

Forschungeinzusetzen, war ein Paradigmenwechsel in der Informatik.

C/ALGOL In 1972 wurde die ProgrammierspracheC(für das neu entwickelte Betriebssystem Unix) entworfen, die auf ALGOLzurückgeht.

BASIC Beginner’s All-purpose Symbolic Instruction Codewurde um das Jahr 1964 speziell für die Interessen von und in Zusammenarbeit mit Studierenden an Universität Dartmouth entwickelt.

FORTRAN/LISP/COBOL FORTRAN(Formula Translator, 1954),LISP (List Processor, 1959) undCOBOL(Common Buisinees Oriented Language, 1959).

SIMULA Objekt-orientierte Sprachen verweisen aufSIMULA– eingeführt in den 60er Jahren.

(7)

Informatik, die Anfänge

In Deutschland bot die Universität Karlsruhe im Wintersemester 1969/70 erstmals einVollstudium Informatikan, wobei 1969 das Institut für Informatikund 1972 dieFakultät für Informatikmit vier Instituten gegründet wurde.

Die Programmier-Ausbildung fand u.a. an Rechnern wieZuse Z 22 statt, der in einerAssemblerähnlichen Sprache programmiert wurde.

Ein- und Ausgaben fand aufLochstreifen/-kartenstatt.

Donald E. Knuthschreibt seine MonographieThe Art of Computer Programming, ein dreibändiges mathematisches Manifest zur Grundlage der modernen Informatik.

(8)

Outline

1 Zur Geschichte der Programmierausbildung

2 Die Welt vor 40 Jahren: Die Zeit der Maschinen– und ersten Hochsprachen

3 Die Welt vor 30 Jahren: Die Zeit der Imperativen Sprachen

4 Die Welt vor 20 Jahren: Die Zeit der Alternativen Sprachen

5 Die Welt vor 10 Jahren: Die Zeit der Kompendien

6 Objects First

7 Die Qual der Wahl

8 Technische Vorüberlegungen

(9)

Weitere Lehrbücher

Der Klassiker zur Einführung in die Programmierung warThe C Programming Languagevon Brian Kernighan and Dennis Richie (der ANSI C Standard wird heute noch verwendet)

Kurt Mehlhorn zeigt mit seiner TriologieData Structures and Algorithmsden Status Quo der Algorithmenanalyse auf.

Thomas Ottmann und Peter Widmayer stellen mit

Programmierung mit PASCALein Taschenbuch zur Verfügung, das mittlerweile in der 7. Auflage erscheint.

Bjarne Stroustrup stellt die ProgrammierspracheC++vor, auf die viele andere Programmierspachen, wieJavaoderC#basieren.

Niklaus Wirth entwickelte an der ETH Zürich die

ProgrammierspacheModulaals Grundlage der strukturierten Programmierung, das assoziiertes LehrbuchAlgorithmen und Datenstrukturen in Modula-2reicht bis in das Jahr 1975 zurück.

(10)

Outline

1 Zur Geschichte der Programmierausbildung

2 Die Welt vor 40 Jahren: Die Zeit der Maschinen– und ersten Hochsprachen

3 Die Welt vor 30 Jahren: Die Zeit der Imperativen Sprachen

4 Die Welt vor 20 Jahren: Die Zeit der Alternativen Sprachen

5 Die Welt vor 10 Jahren: Die Zeit der Kompendien

6 Objects First

7 Die Qual der Wahl

8 Technische Vorüberlegungen

(11)

Neue Programmiersprachen

DieEingangsvoraussetzungen für den Informatikanfangsuntericht waren sehrunterschiedlich– einige Studierende hatten Erfahrungen mit der Programmgestaltun gemacht, andere nicht.

In Anlehnung an das bekannteMITwurde die LISP-ähnliche Programmiersprache Scheme nach dem Lehrbuch Structure and Interpretation of Computer Programs gelehrt.

Schöpfungen: Ben Bitdiddle, Eva Lu Ator, Louis Reaosner, Alyssa P.

Hacker, Cy D. Fect und Lem E. Tweakit

Aufbauend auf dem Erfolge wurden vermehrtfunktionale Programmierspracheneingesetzt, wie zum BeispielHaskell

(12)

Funktional ⇒ Objekt-orientiert ⇒ Imperativ

Manchmal fand sogar die starkObjekt-orientierteProgrammiersprache Smalltalkden Einzug in die Hörsäle, konnte sich aufgrund der

geringen Praxisrelevanz nicht durchsetzen.

Theoretische Konzeptewie Rekursionen, Lambda-Ausdrücke, verzögerte Auswertung, sowie die grundlegende Funktionalität des Computers wurden vermittelt undKorrektheits-, sowie

Effizienzeigenschaftenbewiesen.

Robert Sedgewicks veröffentlichtes WerkAlgorithmswurde 1992 ins Deutsche übertragen und in den Beispielen den vorherrschenden ProgrammiersprachenJava/C/C++angepasst. Es teilt sich in Grundlagen, Sortieren und Suchen, Graphen, Zeichenketten und weiterreichendes Materialauf.

(13)

Outline

1 Zur Geschichte der Programmierausbildung

2 Die Welt vor 40 Jahren: Die Zeit der Maschinen– und ersten Hochsprachen

3 Die Welt vor 30 Jahren: Die Zeit der Imperativen Sprachen

4 Die Welt vor 20 Jahren: Die Zeit der Alternativen Sprachen

5 Die Welt vor 10 Jahren: Die Zeit der Kompendien

6 Objects First

7 Die Qual der Wahl

8 Technische Vorüberlegungen

(14)

Kompendien

Mit dem TextbuchIntroduction to Algorithmswurde ein Kompendium zur Grundlage vieler Anfängervorlesungen. Neben klassischen Suchen- und Sortierenverfahren werden anspruchsvolle Themen, wie Fibonacci-Heaps, die diskrete Fouriertransformation, bis hin zur Einführung in die Komplexitätstheoriebehandelt.

Die Grundlage für Vorlesungen im deutschsprachigen Raum war oft das didaktisch gut aufgearbeitete BuchAlgorithmen und

Datenstrukturenvon Thomas Ottmann und Peter Widmayer, ein Kompendium, das mittlerweile in der 5. Auflage existiert. Bei dem Wechsel von der 3. zur 4. Auflage wurde ein Wandel vonPascalzu Javavollzogen.

Es entstanden zu den Büchernmultimediale Ergänzungen1, also ausgearbeitete Foliensätze und ausführbare Programme.

1Siehehttp://algo.informatik.uni-freiburg.de/

(15)

Java und Ruby

Vor 10 Jahren bestimmte die damals noch junge Programmiersprache Javadie Wahl in den Anfängervorlesungen, die Konzentration lag auf der Vermittlung von imperativer Programmierung.

DieApplet-Programmierungermöglichte eine Verbindung zwischen Programm und dem Internet, wurde jedoch selten eingesetzt.

Mit dem Internet wuchsRuby– eine, weitgehend entschlackte, Objekt-Orientierte Sprache mit Skriptsprachanteilen, die im

Zusammenspiel mitRailsin vielen Web-Anwendungen Anwendung findet.Programming in Rubyist mittlerweile auch in Deutsch verfügbar.

Die agile Softwareentwicklung mit Vertretern wieExtreme Programmierungund Vorgehensmodellen wieScrumentstehen.

(16)

Weitere Algorithmik-Textbücher

Gerhard Goos und Wolf Zimmermann: Vorlesung über Informatik mitGrundlagen und funktionales Programmierenin Band 1 Objektorientiertes Programmieren und Algorithmenin Band 2 Ralf Hartmut Güting:Datenstrukturen und Algorithmenmit dem Fokus auf geometrische Divide-and-Conquer Verfahren

Jürg Nievergelt und Klaus Hinrich: Algorithms and Data Structures mit Anwendungen in der algorithmischen Geometrie

Juraj Hromkovic, mit einer Vielzahl von grundlegenden

deutschsprachigen Werken, wieTheoretische Informatik: Formale Sprachen, Berechenbarkeit, Komplexitätstheorie, Algorithmik, Kommunikation und Kryptographie

Uwe SchöningsAlgorithmikbehandelt neben grundlegenden Konzepten Verfahren zur Lösung der SAT-Problematik.

Kurt Mehlhorn und Peter Sanders:Data Structures and Algorithms – The Basic Toolboxbelegt den Trend zumAlgorithm Engineering

(17)

Outline

1 Zur Geschichte der Programmierausbildung

2 Die Welt vor 40 Jahren: Die Zeit der Maschinen– und ersten Hochsprachen

3 Die Welt vor 30 Jahren: Die Zeit der Imperativen Sprachen

4 Die Welt vor 20 Jahren: Die Zeit der Alternativen Sprachen

5 Die Welt vor 10 Jahren: Die Zeit der Kompendien

6 Objects First

7 Die Qual der Wahl

8 Technische Vorüberlegungen

(18)

OO – ja, aber wann und wieviel?

Die Objekt-Orientierung ist diekonsequente Weiterführung von strukturierenden Elementen– wie Methoden und Records.

Manche Software-Konzepte empfehlen in natürlich-sprachliche Texte, Nomensowie die sie verbindenenVerbenhervorzuheben – aus ihnen werden dannObjekteund derenMethoden

Über den Erfolg von Objekt-Orientierung in der industriellen Softwareentwicklung besteht kein Zweifel.

Kurt Mehlhorn sagte überspitzt zur übersteigerten Objekt-Orientierung sinngemäß: Um 2+3 auszurechnen, sollte man nicht der Zahl 3 sagen müssen, dass sie sich zur 2 hinzuaddieren soll.

(19)

Object-First

Grundidee: Die Objekt-Orientierung rückt von Anfang an in den Mittelpunkt der Programmierausbilung.

Tatsächlich ist in der Programmiersprache Java aller Programmtext in Objekten gekapselt.

Object Firstist eine konsequente Entwicklung des Gedankens, die Vermittlung der Programmierung an der Definition von Objekten zu binden.

Anstatt – wie in den bis dato vorherrschenden Einführungen in Java – die Objekt-Orientierung nach hinten zu stellen, wird diesevon der ersten Programmzeilepropagiert.

(20)

Von Objects First zu BlueJ und Greenfood

Objects Firstwird manchmal alsKlassen zuerstinterpretiert

Objects EarlyObjekt-orientierte Programmierung wird anhand einer konkreten Programmiersprache bereits früh eingeführt.

Entwicklungswerkzeuge wieBlueJundGreenfoot, erlauben, Objekte- und deren Instanzen in einergraphischen Benutzeroberfläche

interaktiv zu verändern und mit wenigen Programmzeilen, einSpielzu programmieren.

Als Rückgrad wird dasWechselspiel aus Instanzen und Unterklassen vermittelt.

(21)

Objects First with Java

Ein von David J. Barnes und Michael Kölling editiertes Buch mit dem UntertitelA Practical Introduction using BlueJ.

Geworben wird mit einem neuen softwaretechnologisch motivierten Programmierparadigma– das etablierte Ansätze ersetzen soll.

Das Buch wird u.a. inAarhus,OntarioundBremenzur Anfängerausbildung eingesetzt.

Das Buch führt die Objekt-Orientierung alsfundamentales Konzeptein und nutzt ein grafisches Beispiel als Aufhänger.

Lineare ListenoderHashtabellenwerden genutzt, dieKonzepte dahinter jedoch nicht erläutert, gleiches geschieht mit der Performanzanalyse von Algorithmen

(22)

The Top 10 Reasons Why Object-Oriented Programming Can’t be tought in CS 1

our lack of understanding of the paradigm,

our fear of the commonly-used object-oriented programming languages (most notably C++),

our procedural biases derived from years of teaching Pascal, or what we now see as a growing body of object-oriented

programming that reflects a number of myths about object-oriented programming

Bjarne Stroustrup sagte voraus, dass die Umorientierung zur Objekt-Orientierung für einen mittleren Programmierer 6-18 Monate braucht.

Strictly Object Firststützt sich aufPedagogical Patterns– schwere Lerninhalte sollen möglichst früh gelernt und oft wiederholt werden.

Kritiker vertreten, dass immer nurein Paradigma zu einer Zeitgelehrt

(23)

Hello World in Object First

Ein Objekt in Java ist einZeigerauf einenausgezeichneten

Speicherbereich, der aus grundlegenden Datentypen oder wiederum aus Zeigern auf ausgezeichnete Speicherbereiche besteht.

Die allgemeine, dieObjekt-Taxonomiean der Wurzel begründende, Klasse heißtObject.

Zur Vermeidung von Quelltext-VervielfachungenerbenObjekte von ihren Oberklassen die Methoden, d.h. sie erlangen durch die Erweiterung die Möglichkeit, diese Methoden aufzurufen.

DasHello World-Programm inGreenfootistsuper(x,y,z)Super entspricht dabei dem Aufruf des unbekannten Konstruktors der Oberklasse.

(24)

Outline

1 Zur Geschichte der Programmierausbildung

2 Die Welt vor 40 Jahren: Die Zeit der Maschinen– und ersten Hochsprachen

3 Die Welt vor 30 Jahren: Die Zeit der Imperativen Sprachen

4 Die Welt vor 20 Jahren: Die Zeit der Alternativen Sprachen

5 Die Welt vor 10 Jahren: Die Zeit der Kompendien

6 Objects First

7 Die Qual der Wahl

8 Technische Vorüberlegungen

(25)

Fazit

Objects First inBlueJist eine moderne und interessante Bereicherung der Informatikprogrammierausbildung. Das didaktische Konzept wurde mehrfach ausgezeichnet.

Das Interaktionskonzept inBlueJhat seinen Charme, da man mit dem Programm direkt kommunizieren kann.

Der Nutzen einer integrierten Programmierumgebung kann als ein Schritt zu Entwicklungsumgebungen wieEclipseverstanden werden.

Die Programmierausbildung inJava sollte mit Vorsicht geschehen, da Programme häufig an komplexe Bibliotheksfunktionen gebunden werden: Datenstrukturen werden oft ungesehen genutzt

Die Turn-Around Zeiten in der Enwicklung (Zyklus: Kompilieren – Starten – Verifizieren – Ändern) sind oft höher als in anderen Programmiersprachen. Die Objekt-Orientierung ist zudem eingeschränkt, da Javakeinen echten Polymorphismusanbietet.

(26)

Was bietet sich demnach heute für eine Programmiersprache an?

ETH Zürich, nutztC als Einstiegssprache- softwaretechnologisch eine mittlere Katastrophe und doch lassen sich grundlegende

Programmieraufgaben in wenigen Zeilen lösen.

Ein anderes Extrem: Python– eine moderne untypisierte Skriptsprache.

Auch die Einführung/Wiederbelebung von eher unbekannten

Programmiersprachen, wie z.B.Luasollte überdacht werden; selbst Matlabkann eine Option sein.

Für einen Barriere-freien Einstieg in die Programmierung geht, ist Scratchvom MIT empfehlenswert, da hier sogar mitDrag’n Drop programmiert werden kann; die Sprache richtet sich allerdings an Kinder und nicht an Studierende.

Laut TIOBE Index (2012) stehtCvorJavadannObjektive C, C++ und C#zusammen über 60% Marktanteil: Hauptargumente für Java sind

(27)

Konklusion

Das Erstellen eines Programmes gleicht dem einesKunstwerks. Anstatt wie in der Mathematik mit dem Peano-Axiomen für die natürlichen Zahlen das Haus von unten aufzubauen, wird inObjects Firstdas Haus vom Dach aus gebaut.

Freude am Programmieren ist ein wesentlicher Lernantrieb, der mit der Gestaltung eines Spieles angesprochen werden kann.

Für Objects First gibt es viele valide Argumente. Vorsicht ist allerdings geboten, wennObjects FirstzuNo Algorithmswird.

Demnach werden in diesem Vorlesungsteil algorithmische Konzepte und lauffähige Implementierungen für denimperativen ProgrammiersprachenkernvonJavavorgestellt. Bei der

Entwicklungsumgebung haben wir uns fürBlueJentschieden.

(28)

Outline

1 Zur Geschichte der Programmierausbildung

2 Die Welt vor 40 Jahren: Die Zeit der Maschinen– und ersten Hochsprachen

3 Die Welt vor 30 Jahren: Die Zeit der Imperativen Sprachen

4 Die Welt vor 20 Jahren: Die Zeit der Alternativen Sprachen

5 Die Welt vor 10 Jahren: Die Zeit der Kompendien

6 Objects First

7 Die Qual der Wahl

8 Technische Vorüberlegungen

(29)

Aufbau

Jede Einheit wird eingeleitet durchLernzieleund abgeschlossen durch Merksätzesowie durch Fragen, die zum Weiterdenken anregen.

Diskussionsergebnisse sollten Sie zur Ergebnissicherung und nachgelagerten Zusammenführung schriftlich festhalten.

Der Vorlesungstext wird durchProgrammebegleitet.

Erschrecken Sie nicht! Die Funktionsweise der Programme erschließt sich schnell durch die vorgegebenen Quelltexte.

Kommentare(traditionell in englischer Sprache) helfen dabei.

Hauptprogrammiersprache istJava– ProgrammierumgebungBlueJ Imimperativen Kernsind die Programmiersprachen oft verwandt: Viele einfache Code-Fragmente lassen sich schnell übertragen.

(30)

Vorkenntnisse

Erste Begegnungen mit

Variablen vom Typchar,int,long,floatunddouble, Schleifen, wiewhile(.){.},for(.;.;.){.}, bzw. do{.}while(.);, Verzweigungen, wieif(.){.}else{.}, bzw. (.)? {.} : {.}, Arrays, wieint a[..]und

Unterprogrammen (Rückgabe mittelsreturn, vgl. Programm 1) sollten vorhanden sein.

(31)
(32)

Programm 1:Programm zur Umrechnung von Gradzahlen.

public classCelsius {

public doublefahrenheit2celsius(doublefahrenheit) { return(fahrenheit−32)/1.8;

}

public doublecelsius2fahrenheit(doublecelsius) { return(celsius∗1.8) + 32;

}

public doublekelvin2celsius(doublekelvin) { returnkelvin273.15;

}

public doublecelsius2kelvin(doublecelsius) { returncelsius+ 273.15;

}

public doublefahrenheit2kelvin(doublefahrenheit) { returncelsius2kelvin(fahrenheit2celsius(fahrenheit));

}

public doublekelvin2fahrenheit(doublekelvin) { returncelsius2fahrenheit(kelvin2celsius(kelvin));

} }

(33)

Vorbereitungen

Nahezu alle Programmtexte sindvollständig

Installieren SieBlueJund laden Sie das aktuelle Java SKD herunter.

Beim Aufruf von BlueJ startet die graphische Entwicklungsumbebung in der ein Editor und ein Ausführungsmechanismus durch die

Anbindung an dievirtuelle Maschinevon Java steckt.

Der Editor bietet einezweidimensionale, farbliche Unterstützung der Einrückungstiefe

Prinzipiell können Sie Programme mit javac Programm.java manuell übersetzen und den entstehendenBytecodedirekt mit java Programm

starten.

Dabei muss allerdings in der DateiProgramm.javadiemain-Methode eingebunden werden.

(34)

Interaktion

InBlueJgibt es die elegante Möglichkeit, Methodeninteraktiv zu parametrisierenund zu starten, so dass wir auf die Angabe eines Hauptprogrammes verzichten.

DieRückgabenvon Funktionen werden zurInspektionin einem Fenster angegeben.

Konsolenausgaben werden durchSystem.out.print(ln)initiert und werden in einem eigenen Fenster sichtbar.

Referenzen

ÄHNLICHE DOKUMENTE

1 Falls in der i-ten Zeile die Zahl in der i-ten Spalte 0 ist, wird diese Zeile mit einer Zeile unterhalb ausgetauscht, bei der in der i-ten Spalte eine Zahl steht. Falls keine

Eine gute Wahl für X mit geringer Vergleichsanzahl ist Mergesort – einem klassischen Divide-and-Conquer Verfahren, das die zu sortierenden Daten rekursiv in kleinere Teile zerlegt..

Die Platten sind in der Größe verschieden und eine kleinere Platte darf niemals unterhalb einer größere Platte liegen!. Das folgende Bild zeigt alle möglichen Zustände mit n =

Eine zufällige Permutation kann dadurch erzeugt werden, dass für alle k aus n − 1,.. ,

Schätzen Sie die untere Schranke für die Lebensdauer τ des Protons ab, wenn aus einem Ensemble von n = 10 28 Protonen während einer Messzeit von ∆t = 0.4 a (Jahren) nicht mehr als

Ein Teilchen 1 stoße elastisch ein ruhendes Teilchen 2. a) Wie groß ist demnach der maximale Energieübertrag (relativ) beim Stoß eines 12 C- Teilchens mit einem in Ruhe

Skizzieren Sie den sich daraus ergebenen Verlauf der „Schmidt-Linien“ (µ als Funktion von j von 1/2 bis 13/2). Berechnen Sie die Dopplerverschiebung des γ -Quants in und entgegen

Beschreiben Sie die Po-Zustände nach dem Schalenmodell, berechnen Sie das magnetische Moment und den g-Faktor des 8 + - Zustands unter Benutzung des Moments des benachbarten 209