Informatik 01 - Einführung und Grundbegriffe
Zentraler Begriff: Algorithmus Definition
• Allgemeines Verfahren zur Lösung einer Klasse von Problemen, das durch eine eindeutige Vorschrift so genau festgelegt ist, dass man es anwenden kann, ohne es verstanden zu haben.
Teilgebiete der Informatik Informatik und Gesellschaft
• Auswirkungen der Informatik auf die Gesellschaft (Rationalisierung, Datensicherheit, soziale Netzwerke, ...)
Ziele
• Begriffsbildungen: Informatik, Algorithmus, Programm, Compiler ... • Einordnung von Java • Ein einfaches Java-Programm erstellen, übersetzen und ausführen • Java-Programme dokumentieren
Teilgebiete der Informatik Theoretische Informatik
• Formale Sprachen • Syntax und Semantik von Programmiersprachen • Algorithmen und Komplexität
Arten höherer Progammiersprachen Logische Sprachen
typisch: Fakten, Regeln, logische Deduktion von neuen Fakten Beispiele: Prolog, Mercury, ...
Arten höherer Progammiersprachen Imperative Sprachen
typisch: Variable, Anweisungen (Befehle), Schleifen (Iteration) Beispiele: Fortran, Algol, Pascal, Modula, C, ...
Arten höherer Progammiersprachen Objektorientierte Sprachen
typisch: wie imperative Sprachen + Klassen, Objekte, Vererbung Beispiele: Simula, Smalltalk, C++, C#, Java, ...
Arten höherer Progammiersprachen Funktionale Sprachen
typisch: Ausdrücke, Funktionsauswertung, rekursive Funktionen Beispiele: Lisp, SML, Haskell, ...
Übersetzung von Java-Programmen
Übersetzung in Bytecode (= Maschinencode für die JVM) • aus einer Textdatei mit Endung „.java" erzeugt der Compiler javac eine Datei mit gleichem Namen, aber Endung „.class" • diese enthält den Bytecode für die JVM
Kommentare in Programmen C. A. R. Hoare: Hints on Programming Language Design (1973)
„The view that documentation is something that is added to a program after it has been commissioned seems to be wrong in principle, and counterproductive in practice. Instead, documentation must be regarded as an integral part of the process of design and coding."
Zentraler Begriff: Algorithmus Eigenschaften
• Jeder Schritt ist eindeutig festgelegt und berechenbar. • Das Verfahren liefert nach endlich vielen Schritten eine Lösung.
Zentraler Begriff: Algorithmus Beispiele
• Modellbau: Montageanleitung • Küche: Kochrezept • Informatik: Such- und Sortieralgorithmen
Teilgebiete der Informatik Praktische Informatik
• Programmierung und Software-Entwicklung • Datenbanksysteme • Betriebssysteme, Middleware für verteilte Systeme
Teilgebiete der Informatik Technische Informatik
• Rechenanlagen und Rechnernetze
Charakteristika von Java
• Imperativ • Objektorientiert: Klassenkonzept, strenge Typisierung • Unabhängig von Plattform: Durch Übersetzung in Virtuelle Maschine (JVM); z.B. für Web-Anwendungen (mit Applets) • Unterstützt parallele Ausführungen (Nebenläufigkeit) • Besitzt eine reichhaltige Klassenbibliothek (API, "Application Programming Interface") zur Wiederverwendung von Programmen
Grober Aufbau eines Java Programms
• Java Programme bestehen aus einer Menge von Klassen. • Eine Klasse besteht aus → Attributen: Beschreiben charakteristische Merkmale der Objekte dieser Klasse → Methoden: Beschreiben Operationen in Form von Algorithmen
Programmierung und Software-Entwicklung Programm
Beschreibung von Datenstrukturen und Algorithmen in einer „dem Computer verständlichen" Sprache (Programmiersprache)
Höhere Programmiersprachen
• Formale Sprachen, in denen Algorithmen und Datenstrukturen möglichst verständlich beschrieben werden können. • Programme in höheren Sprachen werden automatisch, durch Compiler (Übersetzer) genannte Programme, in Maschinencode übersetzt.
Korrektheit von Programmen Semantische Korrektheit
Ein Programm ist semantisch korrekt, wenn bei der Ausführung des Programms die gewünschte Wirkung erzielt wird Beachte: Syntaktisch korrekte Programme sind häufig semantisch nicht korrekt.
Korrektheit von Programmen Syntaktische Korrektheit
Ein Programm ist syntaktisch korrekt, wenn es gemäß den (syntaktischen) Regeln der Programmiersprache geschrieben ist.
Berechenbarkeit
Es gibt verschiedene äquivalente Definitionen der Berechenbarkeit, z.B.: • Ein Problem ist berechenbar, wenn es durch eine Turing-Maschine berechnet werden kann (Alan Turing: 1912 - 1954). • Ein Problem ist berechenbar, wenn es durch eine partiell-rekursive Funktion berechnet werden kann. • Ein Problem ist berechenbar, wenn es durch ein While-Programm berechnet werden kann. Beachte: Nicht alle Probleme sind berechenbar! Beispiel „Halteproblem": Bestimme ob ein x-beliebiges Programm für eine x-beliebige Eingabe terminiert.
Zentraler Begriff: Algorithmus Beispiel: Sortieren einer Liste
Gegeben: Eine Liste von Elementen, die geordnet werden können. Gesucht: Liste mit denselben Elementen in aufsteigender Reihenfolge angeordnet Algorithmus: z.B. Sortieren durch Vertauschen („Bubble Sort"): Falls die Liste leer ist: fertig. Ansonsten: Sei „outer" ein Zeiger auf das letzte Element der Liste. Solange „outer" nicht auf das erste Element zeigt: 1. Sei „inner" ein Zeiger auf das erste Element der Liste. Solange „inner < outer": 1.1 Vertausche Elemente an den Positionen „inner" und „inner+1", wenn sie in falscher Reihenfolge stehen. 1.2 Rücke mit „inner" eine Position vorwärts. 2. Rücke mit „outer" eine Position rückwärts. Beispiel: Sortiere die Liste 5, 33, 12, 13, 8, 1
Gödelscher Unvollständigkeitssatz (1931)
In der Arithmetik gibt es Aussagen, die weder formal bewiesen noch widerlegt werden können
Informatik - Begriff
Information + Mathematik Englisch: Computer Science bedeutet: Wissenschaft der maschinengestützten Informationsverarbeitung
Korrektheit von Programmen Empirie
Man spricht von • normaler Software bei bis zu 25 Fehlern pro 1000 LOC (lines of code), also 2,5% Defektniveau, • guter Software bei bis zu 2 Fehlern pro 1000 LOC (lines of code), also 0,2% Defektniveau.
Erzeugung der Dokumentation
Mit dem Befehl → javadoc Hallo.java wird automatisch eine Beschreibung der Klasse Hallo erzeugt und in die Datei → Hallo.html geschrieben.
Programmierung und Software-Entwicklung Software-Entwicklung
Systematische Konstruktion von Programmen und komplexen Softwaresystemen (→ Systemarchitektur)
Leerzeichen und Formatierung
Völlig irrelevant, man befolgt aber bestimmte Konventionen und Formatierungen