42 terms

Informatik 01 - Einführung und Grundbegriffe

Informatik - 01 Einführung und Grundbegriffe
STUDY
PLAY
Ziele
• Begriffsbildungen: Informatik, Algorithmus, Programm, Compiler ...

• Einordnung von Java

• Ein einfaches Java-Programm erstellen, übersetzen und ausführen

• Java-Programme dokumentieren
Informatik - Begriff
Information + Mathematik

Englisch:
Computer Science

bedeutet:
Wissenschaft der maschinengestützten Informationsverarbeitung
Teilgebiete der Informatik

Praktische Informatik
• Programmierung und Software-Entwicklung

• Datenbanksysteme

• Betriebssysteme, Middleware für verteilte Systeme
Teilgebiete der Informatik

Theoretische Informatik
• Formale Sprachen

• Syntax und Semantik von Programmiersprachen

• Algorithmen und Komplexität
Teilgebiete der Informatik

Technische Informatik
• Rechenanlagen und Rechnernetze
Teilgebiete der Informatik

Informatik und Gesellschaft
• Auswirkungen der Informatik auf die Gesellschaft
(Rationalisierung, Datensicherheit, soziale Netzwerke, ...)
Aufbau eines Computers (von Neumann Modell)
Programmierung und Software-Entwicklung

Programm
Beschreibung von Datenstrukturen und Algorithmen in einer „dem Computer verständlichen" Sprache (Programmiersprache)
Programmierung und Software-Entwicklung

Programmierung
Programmierung und Software-Entwicklung

Software-Entwicklung
Systematische Konstruktion von Programmen und komplexen Softwaresystemen (→ Systemarchitektur)
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.
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
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.
Gödelscher Unvollständigkeitssatz (1931)
In der Arithmetik gibt es Aussagen, die weder formal bewiesen noch widerlegt werden können
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
Zentraler Begriff: Algorithmus

Beispiel: Sortieren einer Liste

Bubble Sort in Java
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.
Arten höherer Progammiersprachen

Imperative Sprachen
typisch: Variable, Anweisungen (Befehle), Schleifen (Iteration)

Beispiele: Fortran, Algol, Pascal, Modula, C, ...
Arten höherer Progammiersprachen

Funktionale Sprachen
typisch: Ausdrücke, Funktionsauswertung, rekursive Funktionen

Beispiele: Lisp, SML, Haskell, ...
Arten höherer Progammiersprachen

Objektorientierte Sprachen
typisch: wie imperative Sprachen + Klassen, Objekte, Vererbung

Beispiele: Simula, Smalltalk, C++, C#, Java, ...
Arten höherer Progammiersprachen

Logische Sprachen
typisch: Fakten, Regeln, logische Deduktion von neuen Fakten

Beispiele: Prolog, Mercury, ...
Entwicklunggeschichte von Java
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
Syntaktische Struktur eines (sehr) einfachen Java-Programms
Syntaktische Struktur eines (sehr) einfachen Java-Programms

Folgendes Beispiel-Programm gibt den Text „Hallo!" aus:
Methodenaufruf
Leerzeichen und Formatierung
Völlig irrelevant, man befolgt aber bestimmte Konventionen und Formatierungen
Ü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
Übersetzung von Java-Programmen

Grafische Darstellung
Ausführung von Java-Programmen
Korrektheit von Programmen

Syntaktische Korrektheit
Ein Programm ist syntaktisch korrekt, wenn es gemäß den (syntaktischen) Regeln der Programmiersprache geschrieben ist.
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

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.
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."
Kommentare in Java-Programmen

Kommentar in einer Zeile
Kommentare in Java-Programmen

Kommentare in mehreren Zeilen
Kommentare in Java-Programmen

Erzeugung von Kommentaren zu Klassen und Methoden
Kommentare in Java-Programmen

Beispiel
Erzeugung der Dokumentation
Mit dem Befehl

→ javadoc Hallo.java

wird automatisch eine Beschreibung der Klasse Hallo erzeugt und in die Datei

→ Hallo.html

geschrieben.
Spezielle Anweisungen für javadoc
OTHER SETS BY THIS CREATOR