Aspekte der Informatik - Technische Universität Braunschweig

Werbung
Aspekte der Informatik
1. Algorithmen und Datenstrukturen
a) Intuitiver Algorithmusbegriff, Standard-Algorithmen, Standard-Datenstrukturen
b) Paradigmen: oo, imperativ, funktional, logisch, regelbasiert
c) Formaler Algorithmusbegriff, Grenzen der Berechenbarkeit
d) Spezifikation, Korrektheit
e) Komplexität
f) Datenstrukturen: Abstrakte Datentypen, Typsysteme
g) Entwurf von Algorithmen
h) Variationen des Algorithmenbegriffs
2. Sprachen der Informatik
a) GPL: General Purpose Languages
b) DSL: Domain Specific Languages
c) Formale Sprachen
3. Informatiksysteme
a) Hardware
b) Software
c) Vernetzung
4. Software
a) Systemsoftware
b) Anwendungssoftware
c) Softwarewerkzeuge
5. Betriebsysteme
a) User-Verwaltung
b) Oberfläche:
– Textuell: Shell
– Grafisch: X, Window-Manager, Desktop-Manager
c) Dateisystem, Zugriffsrechte
d) Netzanbindung: lokale, globale Netze
e) Prozessverwaltung
6. Shell
a) Bedienung: interaktiv, Skript, Konfiguration
b) Standard-Eingabe-Kanal, Standard-Ausgabe-Kanal, Standard-Fehler-Kanal, Umlenkung, Pipelining
c) Builtins: alias, history, completion, Arithmetik in der Shell, . . .
d) Externe Tools: find, dort, grep, cut, tr, awk, . . .
e) Sprachkonstrukte:
– Variable, Kontrollstrukturen, Funktionen, Shell-Skripte, reguläre Ausdrücke, quoting
– Umgebung, shell-intern, user-definiert
7. Programmierung, Software-Entwicklung
a) Programmiersprachen: Definition (Lexik, Syntax, Semantik), Implementierung (Compiler, Interpreter)
b) Software-Entwicklung: Spezifikation, Implementierung, Verifikation, Validierung, Test
8. Anwendungen (Beispiele)
a) Datenbanksysteme
b) Robotik
c) Medizin-Informatik
d) Computergrafik
Algorithmen und Datenstrukturen
1. Der intuitive Algorithmenbegriff
2. Algorithmenbegriff: Paradigmen
a) Imperative Algorithmen
b) Funktionale Algorithmen
c) Prädikative Algorithmen
d) Objektorientierte Algorithmen
3. Der formale Algorithmenbegriff
a) Formale Algorithmenmodelle: Turing-Maschinen, Markov-Algorithmen, λ-Kalkül, . . .
b) Grenzen der Berechenbarkeit: (Nicht)berechenbare Funktionen, (un)entscheidbare Probleme
c) Universelle Turing-Maschine, Halteproblem, Satz von Rice
4. Korrektheit von Algorithmen
a) Spezifikation, Zusicherungen, Invarianten
b) Sicherheitseigenschaften, partielle Korrektheit, Hoare-Logik, separation logic
c) Lebendigkeitseigenschaften, totale Korrektheit
d) Fairness
5. Komplexität von Algorithmen
a) Laufzeit- und Speicherkomplexität
b) Komplexität im günstigsten, mittleren und ungünstigsten Fall
c) Landausche Symbole, Komplexitätsklassen, N=NP-Problem
d) Berechnung der Komplexität: Rekurrenzgleichungen, Mastertheorem, Matroide, . . .
6. Datenstrukturen und Typsysteme
a) Primitive und komplexe Datentypen, Typsysteme
b) Abstrakte Datentypen (ADT): Sorten, Signaturen, Operationen, Algebren, Axiome, Modelle
c) Dynamische Datenstrukturen: Listen, Keller, Schlangen, Prioritätsschlangen, Graphen, Bäume, Heaps, Mengen,
Verzeichnisse, . . .
d) Implementierung dynamischer Datenstrukturen
7. Standardalgorithmen
a) Such- und Sortierverfahren: Insertionsort, Selectionsort, Bubblesort, Quicksort, Mergesort, Countingsort, . . .
b) Graphalgorithmen: Breiten- und Tiefensuche, Bestimmung kürzester Wege und spannender Bäume, . . .
c) Datenstromalgorithmen, Hashverfahren, . . .
8. Algorithmenentwurf: Paradigmen
a) Vollständige Suche, Brute-Force-Algorithmen
b) Backtracking-Algorithmen
c) Greedy-Algorithmen
d) Divide-and-Conquer-Algorithmen
e) Branch-and-Bound-Algorithmen
f) Dynamische Programmierung
g) Schwarm- und populationsbasierte Algorithmen
h) Evolutionäre/genetische Algorithmen
i) Heuristische Algorithmen
j) Adaptive Algorithmen, . . .
9. Variationen des Algorithmenbegriffs
Nichtdeterministische, randomisierte, parallele, verteilte, approximative, reaktive, . . . Algorithmen
(Werner Struckmann)
Zum Algorithmusbegriff
• Der intuitive Algorithmusbegriff
„Intuitiv heißt nicht erlernt.“ (Bruce M. Hood)
• Formulierung von Algorithmen/Paradigmen:
◦ objektorientiertes Paradigma
◦ imperatives Paradigma
◦ funktionales Paradigma
◦ logisches Paradigma
• Der formale Algorithmusbegriff
◦ Turing-berechenbare Funktionen
◦ µ-rekursive Funktionen
◦ λ-Kalkül
◦ durch Markov-Algorithmen berechenbare Funktionen
◦ durch While-Programme berechenbare Funktionen
◦ durch Register-Maschinen berechenbare Funktionen
◦ ...
• Satz: Die formalen Algorithmenbegriffe sind äquivalent.
• Alonzo Church (1903–1995): Jede im intuitiven Sinne berechenbare Funktion ist Turing-berechenbar (1936).
Diese Aussage wird als Church’sche These bezeichnet.
Sie besagt also, dass alle formalen Algorithmenbegriffe zum intuitiven Algorithmusbegriff äquivalent sind.
Die Church’sche These ist nicht formal beweisbar!
• Halteproblem
◦ Das Halteproblem ist unentscheidbar.
◦ Konsequenz: Die Definition des Begriffs Algorithmus sollte nicht verlangen, dass Algorithmen terminieren. Sonst
wäre die Definition nicht algorithmisch überprüfbar (z. B. durch Compiler).
• Variationen des Algorithmusbegriffs
◦ deterministischer Algorithmus
◦ determinierter Algorithmus
◦ nichtdeterministischer Algorithmus
◦ nichtdeterminierter Algorithmus
◦ randomisierter Algorithmus
◦ paralleler Algorithmus
◦ verteilter Algorithmus
◦ approximativer Algorithmus
◦ reaktiver Algorithmus
◦ ...
Sprachen der Informatik
1. Natürliche, künstliche und formale Sprachen
2. Paradigmen, Konzepte und Sprachen
a) Grundlegende Programmierkonzepte
i. Semantische Grundbegriffe: Variable, Speicher, Umgebung
ii. Typsysteme und Datenstrukturen: primitive Datentypen, Literale, Werte und ihre Speicherung,
Operatoren, Typkonstruktoren, Typäquivalenz, Typkompabilität, Typanpassungen
iii. Steuerung des Kontrollflusses
iv. Abstraktion: Programmeinheiten, Module, abstrakte Datentypen
v. Programmiersicherheit: Ausnahmebehandlung, Spezifikation und Verifikation, Testverfahren
b) Klassische Programmierparadigmen und -sprachen, GPL (General Purpose Language)
i. Imperative Programmierung
ii. Objektorientierte Programmierung
iii. Funktionale Programmierung
iv. Prädikative Programmierung
v. Hybride Paradigmen
c) Skriptsprachen
d) Paradigmenübergreifende Konzepte (Auswahl)
i. Generische Programmeinheiten
ii. Parallele und verteilte Programmierung
iii. Ereignisbehandlung
iv. Annotationen
v. Programmierung randomisierter / nichtdeterministischer Algorithmen
vi. Echtzeitprogrammierung
vii. Netzwerkprogrammierung
viii. Programmierung grafischer Oberflächen
ix. Visuelle Programmierung
e) Spezielle Sprachklassen, DSL (Domain Specific Language) (Auswahl)
i. Markup- u. Seitenbeschreibungssprachen: TEX, HTML, XML, SGML, Postscript
ii. Modellierungssprachen: UML
iii. Spezifikationssprachen u. Verifikationskalküle: Z, VDM-SL
iv. Symbolische Sprachen und Computeralgebrasysteme: Maple, Mathematica
v. Datenbanksprachen: SQL
vi. Simulationssprachen: GPSS
f) Prinzipien des Sprachentwurfs
Effizienz, Allgemeingültigkeit, Orthogonalität, Uniformität, Einfachheit, Ausdruckskraft, Genauigkeit,
Maschinenunabhängigkeit, Sicherheit, Konsistenz mit Konventionen, Erweiterbarkeit, Einschränkbarkeit
3. Definition von Sprachen
a) Lexik: Schlüsselwörter, Bezeichner, . . . bilden die Lexeme einer Sprache
b) Kontextfreie und andere Grammatiken zur Festlegung der Syntax
c) Semantik: Operationelle, denotationale, axiomatische, algebraische und andere Wege
d) Pragmatik von Sprachen
4. Implementierung von Sprachen
a) Compiler und Interpreter
b) Programmierwerkzeuge
c) Integrierte Entwicklungsumgebungen
(Werner Struckmann)
Systeme
In der Informatik versteht man unter einem System die Zusammenfassung mehrerer Komponenten zu einer als Ganzes
aufzufassenden Einheit. Die Komponenten können von gleicher Art sein (homogene Systeme, z. B. Programmsysteme)
oder sehr unterschiedlich sein (heterogene Systeme, z. B. die Zusammenfassung von Hard- u. Softwaresystemen zu einem
Computersystem oder hybride Systeme, wenn gewissen Komponenten sehr unterschiedliche technologische Konzeptionen
zugrunde liegen wie bei der Zusammenfassung von analogen und digitalen Systemen).
Ein System löst oder bearbeitet in der Regel ein wohldefiniertes System von Aufgaben. Systeme können können außerordentlich komplex und vernetzt sein.
Systeme lassen sich meist durch mindestens einen der folgenden Punkte charakterisieren:
• durch ein nach außen sichtbares Verhalten. Dies kann man versuchen durch Tests und Experimente zu ermitteln.
• durch eine innere Struktur. Diese ist in der Regel nur den Entwicklern, nicht aber den Benutzern von Systemen
bekannt. Sie lässt sich im Allgemeinen nicht durch Experimente, sondern nur durch eine genaue Analyse der Komponenten ermitteln.
• durch Eigenschaften. Diese erfasst man mithilfe einer Spezifikation, die zur Entwicklung einer konkreten Realisierung
dienen kann.
Wird das zu beschreibende System nicht in eine Umgebung eingebettet und wird sein Verhalten nicht durch die Umwelt
beeinflusst, dann spricht man von einem geschlossenen System. Die Beschreibung solcher Systeme ist in der Regel einfacher
als die von offenen Systemen, bei denen eine Umgebung angenommen wird, die auf das System einwirkt und auf die das
System (durch Signale, Bewegungen, usw.) reagiert. Bei offenen Systemen sind die Schnittstellen des Systems zu seiner
Umwelt von zentraler Bedeutung.
Systeme besitzen in der Regel Zustände. Ein Zustand beschreibt einen speziellen Ausschnitt des Systems zu einem
gegebenen Zeitpunkt vollständig. Hierbei spielt der Detaillierungsgrad eine Rolle. Systeme mit endlich oder abzählbar
vielen Zuständen nennt man diskret, solche mit überabzählbar vielen Zuständen kontinuierlich.
Der Systembegriff ist sehr allgemein und daher meistens wenig aussagekräftig. Als konkretes Beispiel sei das Betriebssystem eines Rechners genannt.
Informatiksysteme
Als Informatiksystem bezeichnet man die spezifische Zusammenstellung von Hardware, Software und Netzverbindungen zur
Lösung eines Anwendungsproblems. Eingeschlossen sind alle durch die Einbettung des Systems in den Anwendungsbereich
beabsichtigten oder verursachten nichttechnischen Fragestellungen und ihre Lösungen, also Fragen der Gestaltung des
Systems, der Qualifizierung der Nutzer, der Sicherheit sowie der Auswirkungen und Folgen des Einsatzes.
Informatik ist dann die Wissenschaft von Entwurf und Gestaltung von Informatiksystemen.
Die früher meist verwendeten Begriffe „Rechnersystem“ oder „Computersystem“ zur Zusammenfassung von Hard- und
Software wurden mittlerweile weitgehend aufgegeben, da sie die technische Dimension überbetonen.
Reaktive Systeme
Algorithmen sind klassischerweise determiniert oder deterministisch. Eine Erweiterung dieses Begriffs bilden nichtdeterminierte, nichtdeterministische, randomisierte, ... Algorithmen.
Zum anderen erweitert man den Algorithmusbegriff um die so genannten reaktiven Systeme, bei denen nicht die Berechnung eines Funktionswertes zu einer Eingabe im Vordergrund steht, sondern die fortlaufende, prinzipiell unendliche
Reaktion auf Ereignisse und Daten aus der Umwelt.
Zu den reaktiven Systemen rechnen u. a. die eingebetteten Systeme, die mit Bausteinen im Verbund stehen, die nicht der
Datenverarbeitung dienen (z. B. Menschen oder Apparate) und die adaptiven Systeme, die sich Veränderungen der Umwelt
selbsttätig anpassen und keine dauerhaft gültige Aufgabenstellung besitzen.
Ein eingebettetes System ist z. B. der Computer, der in einem Auto die Motorsteuerung in Abhängigkeit von der Geschwindigkeit, der Last, der Gaspedalstellung, usw. vornimmt. Adaptive Systeme sind z. B. Marssonden, die mit genügend
Fähigkeiten ausgestattet wurden, um sich in einem unbekannten Terrain zurechtzufinden.
(Duden Informatik, 4. Auflage, 2006)
Software
• Zur Systemsoftware zählen alle Programme, die für den korrekten Ablauf von Rechnern oder Rechnernetzen erforderlich sind:
◦ Betriebssysteme
◦ Compiler, Interpreter
◦ Binder, Lader bzw. Bindelader
◦ Programme zur Verwaltung von Geräten
◦ Netzsoftware
• Die Anwendungssoftware wird zur Lösung von Problemen, die nicht ursächlich mit Rechnern zu tun haben, eingesetzt:
◦ Datenbankprogramme
◦ Computeralgebrasysteme
◦ Office-Software: Textverarbeitung, Tabellenkalkulation, Präsentation, . . .
◦ Internetsoftware: Browser, E-Mail, . . .
◦ Mediensoftware: Grafik-, Photo-, Audio-, Videoprogramme
◦ ...
• Softwarewerkzeuge unterstützen die Erstellung von System- und Anwendungsprogrammen.
◦ Modellbildung
◦ Programmierwerkzeuge
◦ Versionskontrolle
◦ Integrierte Entwicklungsumgebungen
Anwendungssoftware
Beispiel: Datenbank
http://de.wikipedia.org/wiki/Datenbank
Ein Datenbanksystem (DBS) ist ein System zur elektronischen Datenverwaltung. Die wesentliche Aufgabe eines Datenbanksystems ist es, große Datenmengen effizient, widerspruchsfrei und dauerhaft zu speichern und benötigte Teilmengen
in unterschiedlichen, bedarfsgerechten Darstellungsformen für Benutzer und Anwendungsprogramme bereitzustellen.
Ein DBS besteht aus zwei Teilen: der Verwaltungssoftware, genannt Datenbankmanagementsystem (DBMS) und der
Menge der zu verwaltenden Daten, der eigentlichen Datenbank (DB). Die Verwaltungssoftware organisiert intern die strukturierte Speicherung der Daten und kontrolliert alle lesenden und schreibenden Zugriffe auf die Datenbank. Zur Abfrage
und Verwaltung der Daten bietet ein Datenbanksystem eine Datenbanksprache an.
Datenbanksysteme gibt es in verschiedenen Formen. Die Art und Weise, wie ein solches System Daten speichert und
verwaltet, wird durch das Datenbankmodell festgelegt. Die bekannteste Form eines Datenbanksystems ist das Relationale
Datenbanksystem.
Beispiel: OpenOffice
http://de.wikipedia.org/wiki/OpenOffice.org
OpenOffice.org ist ein freies Office-Paket, das aus einer Kombination verschiedener Programme zur Textverarbeitung,
Tabellenkalkulation, Präsentation und zum Zeichnen besteht. Ein Datenbankprogramm und ein Formeleditor sind ebenfalls
enthalten.
Das Programm wird oft auch kurz OpenOffice genannt; dieser Begriff ist bzw. war jedoch in einigen Ländern markenrechtlich durch Dritte für andere Produkte geschützt. Das Projekt und das Programm nennen sich deshalb OpenOffice.org
(kurz: OOo), um dieses Problem zu umgehen. Zwischenzeitlich war die Notwendigkeit hinzugekommen, OpenOffice.org
von dem damit nicht identischen, inzwischen eingestellten Oracle Open Office zu unterscheiden.
Das quelloffene Projekt ist das international führende Office-Paket und für alle wichtigen Betriebssysteme verfügbar. Der
Zugang zu Funktionen und Daten wird durch offengelegte Schnittstellen und ein XML-basiertes Dateiformat ermöglicht.
OpenOffice.org wird unter der LGPL herausgegeben.
OpenOffice.org entstand aus den Quelltexten des damaligen StarOffice im Jahr 2000 und wurde seither maßgeblich
von Sun Microsystems bzw. Oracle weiterentwickelt.
Das Office-Paket enthält die folgenden Module:
• Writer (Textverarbeitung)
• Calc (Tabellenkalkulation)
• Impress (Präsentationsprogramm)
• Draw (Grafikprogramm)
• Base (Datenbankprogramm)
• Math (Formel-Editor)
Beispiele: Robotik, Computergrafik, med. Informatik, . . .
Herunterladen