62
Algorithmus und Programm: Vom Algorithmus zum Programm 1.1 Vom Algorithmus zum Programm 1.2 Programmiersprachen 1.3 Korrektheit, Komplexität und Entscheidbarkeit 1.4 Software-Grundlagen 1.1 Vom Algorithmus zum Programm 1-1

Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Embed Size (px)

Citation preview

Page 1: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Algorithmus und Programm:Vom Algorithmus zum Programm

1.1 Vom Algorithmus zum Programm1.2 Programmiersprachen1.3 Korrektheit, Komplexität und Entscheidbarkeit1.4 Software-Grundlagen

1.1 Vom Algorithmus zum Programm 1-1

Page 2: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Algorithmusbegriff

Ein Algorithmus ist eine „Berechnungsvorschrift“. Die Aufgabe, die der Algorithmuslösen soll, wird durch eine Spezifikation festgelegt.

• Die Berechnungsvorschrift wird durch einen endlichen Text kodiert.

• Sie beschreibt die auszuführenden Berechnungen „hinreichend präzise“.

• Die Berechnungen sind aus „elementaren“ Operationen aufgebaut und besitzenAus- und evtl. Eingabewerte.

Hierbei handelt es ich um eine sog. intuitive Definition. In der Informatik wird aucheine formale Definition benötigt, zum Beispiel zum Nachweis, dass für ein bestimmtesProblem kein Algorithmus existiert.

»Intuitiv heißt nicht erlernt.« (Bruce M. Hood)

1.1 Vom Algorithmus zum Programm 1-2

Page 3: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Eigenschaften von Algorithmen

• Algorithmen sollen in der Regel terminieren, d. h. bei jeder Eingabe irgendwann zueinem Ende führen. Es gibt Ausnahmen: z. B. Betriebssysteme oder sogenannte„reaktive Systeme“.

• Die Terminierung wird in der Definition des Algorithmusbegriffs nicht verwendet.Ein Grund hierfür ist zum Beispiel das Halteproblem (s. unten): Definitionenmüssen überprüfbar sein.

• Einen Algorithmus nennt man deterministisch, wenn er bei gleichen Eingabedatenstets die gleiche Berechnung ausführt.

• Ein Algorithmus heißt determiniert, wenn er bei gleichen Eingabedaten stets diegleichen Ausgabedaten liefert.

1.1 Vom Algorithmus zum Programm 1-3

Page 4: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Programm und Programmiersprache

Ein Programm ist die Formulierung eines Algorithmus mit seiner Datenbereiche ineiner Programmiersprache. Eine Programmiersprache erlaubt es, Algorithmen präzisezu beschreiben. Insbesondere legt eine Programmiersprache

• die elementaren Operationen,

• die Möglichkeiten zu ihrer Kombination und

• die zulässigen Datenbereiche

eindeutig fest. Unter „programmieren“ versteht man den Vorgang des Erstellens einesProgramms.

1.1 Vom Algorithmus zum Programm 1-4

Page 5: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Grundlegende Aspekte der Algorithmenentwicklung

• Wie wird ein Algorithmus formuliert? Paradigma.Beispiele für Paradigmen: imperativ, objektorientiert, funktional, logisch.Es gibt weitere Paradigmen, diese vier sind aber die am häufigsten erwähnten.Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ.

• Mit welchem Aufwand löst der Algorithmus das Problem? Komplexität.Beispiele zur Komplexität: benötigte Rechenzeit oder verwendeter Speicherplatz.

• Erfüllt mein Algorithmus seine Spezifikation? Korrektheit.Der Nachweis der Korrektheit wird Verifikation genannt.

• Wie werden Datentypen definiert? Abstrakte Datentypen.ADT/Abstrakte Datentypen werden durch algebraische Methoden definiert.

1.1 Vom Algorithmus zum Programm 1-5

Page 6: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Grundlegende Aspekte der Algorithmenentwicklung• Gibt es für das Problem einen Algorithmus? Berechenbarkeit/Entscheidbarkeit.

Zur Beantwortung dieser Frage wird eine formale Definition desAlgorithmenbegriffs benötigt. Beispiel: Turing-Maschine.Alonzo Church stellte 1936 die folgende These auf, die bisher nicht widerlegtwurde. Church’sche These:

Der intuitive Algorithmenbegriff wird durchdas Modell der Turing-Maschine adäquat definiert.

Die Church’sche These kann natürlich nicht bewiesen werden, da sie den intuitivenAlgorithmenbegriff verwendet. Über intuitive Dinge können keine formalen Beweisegeführt werden. Es wurde gezeigt, dass viele formale Algorithmusdefinitionenäquivalent sind. Daher könnte in der Church’schen These die Turing-Maschinedurch etliche andere formale Definitionen des Algorithmus ersetzt werden.

1.1 Vom Algorithmus zum Programm 1-6

Page 7: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Grundlegende Aspekte der Algorithmenentwicklung

• Gibt es Vorgehensweisen für die Erstellung von Algorithmen?Entwurf von Algorithmen.Beispiele: Rekursion, Backtracking, Divide-and-Conquer, Greedy-Algorithmus, . . .

• Gibt es Algorithmen, die man häufig verwenden kann?Standardalgorithmen.Beispiele: Algorithmen zum Suchen und Sortieren, Algorithmen für konkreteDatentypen (zum Beispiel: Graphen, Listen, Keller, Schlangen, . . . )

• Gibt es andere Definitionen des Algorithmenbegriffs?Varianten des Algorithmenbegriffs.Beispiele: nichtdeterministische, parallele, randomisierte Algorithmen.

1.1 Vom Algorithmus zum Programm 1-7

Page 8: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Paradigmen zur Formulierung von AlgorithmenIn einem imperativen Algorithmus gibt es Variable, die verschiedene Werte annehmenkönnen. Die Menge aller Variablen und ihrer Werte sowie der Programmzählerbeschreiben den Zustand zu einem bestimmten Zeitpunkt. Ein Algorithmus bewirkteine Zustandstransformation.

Ein funktionaler Algorithmus formuliert die Berechnung durch Funktionen. DieFunktionen können rekursiv sein; auch gibt es Funktionen höherer Ordnung.

In einem objektorientierten Algorithmus werden Datenstrukturen undMethoden/Funktionen zu einer Klasse zusammengefasst. Von jeder Klasse könnenObjekte gemäß der Datenstruktur erstellt und über die Methoden manipuliert werden.

Ein logischer (deduktiver) Algorithmus führt Berechnungen durch, indem er ausFakten und Regeln durch Ableitungen in einem logischem Kalkül Ziele beweist.

Unter einem hybriden Paradigma versteht man die Mischung von Paradigmen.

1.1 Vom Algorithmus zum Programm 1-8

Page 9: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Paradigmen zur Formulierung von Algorithmen

Aus einer übergeordneten Sichtweise werden die folgenden Kategorien unterschieden:

• Prozedurale Programmiersprachen: Es wird exakt angegeben, wie die Lösung einesProblems ermittelt werden kann. Imperative Programmiersprachen fallen in dieseKategorie.

• Deklarative Programmiersprachen: Im Gegensatz zum prozeduralen Paradigmafragt man in der deklarativen Programmierung danach, was berechnet werden soll.Es wird also nicht der Lösungsweg programmiert, sondern angegeben, welchesErgebnis gewünscht ist. Deklarative Paradigmen beruhen auf mathematischen,rechnerunabhängigen Theorien. Beispiele hierfür sind prädikative und – bis zueinem gewissen Grade – auch funktionale Programmiersprachen.

1.1 Vom Algorithmus zum Programm 1-9

Page 10: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Beispiel: Algorithmus von Euklid

Der folgende, in einer imperativen Programmiersprache formulierte,

Algorithmus von Euklid (ca. 300 v. Chr.)

berechnet den größten gemeinsamen Teiler der Zahlen x , y ∈ N mit x > 0 und y ≥ 0:

a := x;b := y;while b # 0do r := a mod b;

a := b;b := r

od

Anschließend gilt a = ggT(x , y).

1.1 Vom Algorithmus zum Programm 1-10

Page 11: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Beispiel: Algorithmus von Euklid

Variable z0 z1 z2 z5 z8 z11 z14r – – – 36 16 4 0a – 36 36 52 36 16 4b – – 52 36 16 4 0

ggT(36, 52) = 4

Durchlaufene Zustände: z0, z1, z2, ... , z14

Zustandstransformation: z0 7−→ z14

1.1 Vom Algorithmus zum Programm 1-11

Page 12: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Datenstrukturen und TypsystemeProgrammiersprachen bieten die Möglichkeit, aus elementaren Datenbereichen mithilfevon Konstruktoren komplexe Datenbereiche aufzubauen. Datenbereiche werden häufigDatenstrukturen genannt. Die Aspekte, die die Datenbereiche betreffen, werden alsTypsystem bezeichnet. Nicht alle Programmiersprachen bieten alles hiervon an.

• Elementare Datenstrukturen: Wertebereiche, Operationen boolean, char, cardinal, integer, real, enumeration

• Konstruktoren: array (Feld), record (Satz), set (Menge), pointer (Zeiger) Zeiger ermöglichen rekursive Datenstrukturen wie Listen, Bäume und Graphen.

• Typäquivalenz, Typanpassung, Typkompabilität, . . .

1.1 Vom Algorithmus zum Programm 1-12

Page 13: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Natürliche und künstliche Sprachen

• Sprache ist ein sich stets weiterentwickelndes, komplexes System von Lauten undZeichen zum Zwecke der Kommunikation. Es werden natürliche und künstlicheSprachen unterschieden.

• Natürliche Sprachen sind historisch gewachsen. Hierzu zählen z. B. Deutsch,Englisch und Französisch. Sie sind Ausdruck menschlichen Denkens, Fühlens undWollens und weisen im Unterschied zu künstlichen Sprachen Mehrdeutigkeiten auf.

• Künstliche Sprachen sind Zeichensysteme, die der Verständigung in einem engbegrenzten Fachgebiets dienen, zum Beispiel Programmiersprachen. Sprachen wieEsperanto sind ebenfalls künstliche Sprachen, die sich durch leichtere Schreibungund Grammatik gegenüber natürlichen Sprachen auszeichnen.

aus Basiswissen Deutsch, Dudenverlag

1.1 Vom Algorithmus zum Programm 1-13

Page 14: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Sprachklassen der Informatik

Die Sprachen der Informatik werden typischerweise in zwei Klassen aufgeteilt:

• General Purpose Language (GPL)

• Domain Specific Language (DSL)

Meistens zählt man die Programmiersprachen zu den GPLs und Sprachen für spezielleAnwendungen zu den DSLs.

Die Klasseneinteilung ist nicht in allen Quellen genau identisch. Eine möglicheBeispiel-Einteilung finden Sie in einem Material der Veranstaltung.

1.1 Vom Algorithmus zum Programm 1-14

Page 15: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Sprachen der Informatik

Um Objekte mit Rechensystemen zu behandeln, müssen sie in eindeutigen – alsokünstlichen – Sprachen beschrieben werden. Einige Beispiele sollen dies verdeutlichen:

• Algorithmen: Programmiersprachen (Java)

• Dokumente: Markup-Sprachen (Html, XML), Seitenbeschreibungssprachen(Postscript)

• Modelle, Systeme: Modellierungssprachen (UML)

• Spezifikationen: Spezifikationssprachen (Z, VDM-SL)

• Datenbanken: Anfragesprachen (SQL)

1.1 Vom Algorithmus zum Programm 1-15

Page 16: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Folgerung

• In der Informatik hat man es mit einer Vielzahl von künstlichen Sprachen zu tun.

• Sie alle beschreiben Sachverhalte in einem relativ kleinen Kontext,

• dafür aber (hoffentlich) präzise, widerspruchsfrei und vollständig.

In dieser Vorlesung betrachten wir die Programmiersprache Java.In anderen Veranstaltungen (z. B. „Programmieren für Fortgeschrittene“,„Logik in der Informatik“) lernen Sie weitere Sprach(klass)en kennen.Die theoretische Grundlagen der Programmiersprachen lernen Sie

in der Veranstaltung „Semantik von Programmiersprachen“ kennen.

1.1 Vom Algorithmus zum Programm 1-16

Page 17: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Algorithmus und Programm:Programmiersprachen

1.1 Vom Algorithmus zum Programm1.2 Programmiersprachen1.3 Korrektheit, Komplexität und Entscheidbarkeit1.4 Software-Grundlagen

1.2 Programmiersprachen 1-17

Page 18: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Entwicklung der ProgrammiersprachenEdsger W. Dijkstra (niederländischer Informatiker, 1930–2002):

„Jeder Programmierer weiß, dass es nur eine einzig wahre Programmiersprachegibt. Jede Woche eine neue.“

A. Weinert: Java für Ingenieure, 2001, Seite 7:

„Die Zahl der Programmiersprachen, die die Informatik in den letzten fünfzigJahren hervorgebracht hat, ist Legion. Ernst zu nehmende Schätzungensprechen von mehr als 20 000.“

Wenn Weinerts Schätzung zutrifft, sind es 7,7 Programmiersprachen pro Woche!

Zitat: Lisp ist nach Fortran die zweitälteste Sprache, die noch verbreitet ist.

1.2 Programmiersprachen 1-18

Page 19: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Entwicklung der Programmiersprachen

.

1995

1985

1975

COBOL ALGOL

BASIC

PL/I

ALGOL68 SIMULA

PASCAL

C

MODULA−2

ADA SMALLTALK80

C++

JAVA

C#

SCHEME

.

1990

1980

1970

1965

2000

LOGO

PROLOG

CSP

OCCAM

.

SCHEME (standard)

1955

1960

FORTRAN

LISP

Programmiersprachen in derInformatikausbildung

• Algol

• Algol68

• Modula-2

• Modula-2/Scheme

• Java/Scheme

• Java

1.2 Programmiersprachen 1-19

Page 20: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Definition von ProgrammiersprachenDie Lexik einer Programmiersprache bestimmt die textuellen Grundbausteine derProgramme. Solche Bausteine sind z. B. Schlüsselwörter, Zeichen und Bezeichner.Sie werden beispielsweise durch Aufzählung oder reguläre Ausdrücke angegeben.

Die Syntax einer Programmiersprache beschreibt, wie aus den Grundbausteinenvollständige Programme gebildet werden können. In den meisten Fällen wird dieSyntax einer Programmiersprache durch eine kontextfreie Grammatik festgelegt.

Die Bedeutung der syntaktisch korrekten Programme ist durch die Semantik derSprache gegeben. Sie kann beispielsweise mithilfe von Zustandsfolgen (operationelleSemantik) oder durch Funktionen, die den syntaktischen Einheiten zugeordnet sind(denotationale Semantik), definiert werden. Es gibt auch weitere Möglichkeiten.Beispiele: axiomatische Semantik, algebraische Semantik.

Die Pragmatik einer Programmiersprache untersucht ihre Anwendbarkeit undNützlichkeit. Sie gehört nicht zur Definition der Sprache.

1.2 Programmiersprachen 1-20

Page 21: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Definition von Programmiersprachen: Kleines Beispiel

Lexik:Schlüsselwörter: while, do, od, . . . Zeichen: +, ;, :=, (, ), , , . . .Bezeichner = Buchstabe · Buchstabe, Ziffer ∗

Syntax:<Anweisungsfolge> ::= <Anweisung> ; <Anweisungsfolge> | <Anweisung>

<Anweisung> ::= <Zuweisung> | <While-Anweisung> | . . .<Zuweisung> ::= <Bezeichner> := <arithmetischer Ausdruck>

<While-Anweisung> ::= while <logischer Ausdruck> do <Anweisungsfolge> od

(Operationelle) Semantik:Eine (partielle) Funktion f, die Zustände auf Zustände abbildet.Ein Beispiel: f(z0) = z14 (s. Abschnitt 1.1)

1.2 Programmiersprachen 1-21

Page 22: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Klassifikation der ProgrammiersprachenDie Programmiersprachen lassen sich grob in drei Klassen einteilen:

• MaschinensprachenBits und Bytes, für den menschlichen Leser kaum verständlich

• Maschinenorientierte Sprachen (Assembler)stellen die Befehle in einem Mnemo-Code dar

ADDIC 23, R0STO R0, #12004

• Problemorientierte Sprachenimperative, funktionale, objektorientierte, deduktive Sprachen, Spezialsprachen

Ein Computer versteht nur Maschinensprachen!

1.2 Programmiersprachen 1-22

Page 23: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Implementierung von ProgrammiersprachenCompiler übersetzen Quellprogramme aus problemorientierten Sprachen in äquivalenteZielprogramme in Maschinensprachen:

cc -o prog prog.cprog input output

Interpreter lesen das Programm ein und führen es aus. Die Eingabe kann während derAusführung oder durch eine Datei erfolgen.

scm prog.scm input output

Mischverfahren übersetzen das Programm zunächst mit einem Compiler in eineZwischensprache. Das übersetzte Programm wird anschließend interpretiert:

javac prog.java java progDie Eingabe kann zum Beispiel über die Tastatur oder Dateien erfolgen.Die Ausgabe kann zum Beispiel auf dem Bildschirm oder in Dateien geschehen.

1.2 Programmiersprachen 1-23

Page 24: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Implementierung von ProgrammiersprachenInterpreter müssen das Programm bei jedem Lauf erneut analysieren. Dies bedeuteteinen gewissen Effizienzverlust.

Typisch, aber nicht zwingend:

• Compiler: C

• Interpreter: Scheme

• Mischverfahren: Java

• Compiler und Interpreter: Haskell

Compiler1 6= Compiler2 Interpreter1 6= Interpreter2

1.2 Programmiersprachen 1-24

Page 25: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Verarbeitung von Java-Programmen

javac

java java

VM für Windows

Java−Quellprogramm

Java−Bytecode

VM für Linux

• Zuerst wird ein Quellprogramm vomCompiler in Bytecode übersetzt.

• Im zweiten Schritt wird der Bytecodevom Interpreter ausgeführt. DerBytecode kann als Maschinencode dersogenannten virtuellen Java-Maschine(JVM) angesehen werden. Bytecode istportabel.

• Der Compiler ist maschinenunabhängig,der Interpreter muss für jede Plattformneu entwickelt werden.

1.2 Programmiersprachen 1-25

Page 26: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Verarbeitung von Java-Programmen

• Interpretierter Code ist langsamer in der Ausführung als kompilierter Code, selbstwenn dieser als Bytecode vorliegt.

• Prinzipiell könnten Java-Programme auch in Maschinensprachen übersetzt werden.Dann könnte die Portierbarkeit verloren gehen.

• Eine Alternativlösung bieten Just-in-Time-Compiler (JIT). Ein JIT ist einProgramm, das den Bytecode einzelner Methoden während der Ausführung inMaschinencode der jeweiligen Plattform übersetzt. So kann die Methode beimnächsten Aufruf deutlich schneller ausgeführt werden. Vorteilhaft ist, dass derBytecode nicht verändert wird und damit das übersetzte Programm portabel bleibt.

1.2 Programmiersprachen 1-26

Page 27: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Implementierung von ProgrammenWarum muss man wissen, wie Programme umgesetzt werden?

Beispiel:

Java-Programm:

public static void main(String[] args) int z = 256*256*256*128+2147483647;System.out.println(z*z);

Ausgabe: 1

Der korrekte Wert ist 4294967295.

Warum ist die Ausgabe 1? Kann ein Computer nicht rechnen?

1.2 Programmiersprachen 1-27

Page 28: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Paradigmen und ProgrammiersprachenEinige Programmiersprachen:

imperativ: Algol, Algol68, Pascal, Ada, C, . . .funktional: Lisp, Scheme, ML, Haskell, . . .prädikativ: Prologobjektorientiert: Smalltalk, Eiffel, . . .hybrid: Java, C++, C# (imperativ, oo),

Scala (imperativ, oo, funktional), . . .

In der Regel lassen sich die Sprachen nicht eindeutig einem bestimmten Paradigmazuordnen. Zum Beispiel gibt es in Scheme Variable und Zuweisungen, d. h. imperativeKonzepte. Java ist als „imperativ-basierte objektorientierte Programmiersprache“(hybrides Paradigma) zu bezeichnen. C++ hingegen besitzt einen vollständigenimperativen Kern, während Smalltalk eine strikt objektorientierte Programmierspracheist.

1.2 Programmiersprachen 1-28

Page 29: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Skriptsprachen

• Bei Skriptsprachen handelt es sich um übergeordnete Sprachen, um vorhandeneProgramme oder Prozeduren kontrolliert ablaufen zu lassen.

• Skriptsprachen haben ihren Ursprung in den Kommandosprachen (Job ControlLanguage, JCL) von Betriebssystemen.

• Einfache Skriptsprachen sind die Shell-Skripts von Unix. Mächtigere Skriptsprachensind beispielsweise Perl, PHP, Python oder JavaScript.

• Skriptsprachen werden in der Regel interpretiert, nicht kompiliert.

1.2 Programmiersprachen 1-29

Page 30: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Dieses sind Versionen von Java1992–1995 Java-Vorläufer, zuerst unter dem Namen „Oak“.

Oak: Object Application Kernel, Eiche.Neu: Applets (little applications)

Januar 1996 JDK 1.0 (Java Development Kit)Anfang 1997 JDK 1.1

Dezember 1998 JDK 1.2, wurdeJanuar 1999 umbenannt in „Java 2 Plattform“

Mai 2000 Java 2, JDK 1.3Februar 2002 Java 2, JDK 1.4

Ende 2004 Java 2, JDK 5.0 (interne Versionsnummer: 1.5.0) „Tiger“Dezember 2006 Java Standard Edition 6 „Mustang“

Juli 2011 Java Standard Edition 7 „Dolphin“März 2014 Java Standard Edition 8

Juli 2017 ??? Java Standard Edition 9

Sprachen haben Versionen.

1.2 Programmiersprachen 1-30

Page 31: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Java-Versionen

Die installierte Version kann mit java -version ermittelt werden.

Bitte checken Sie Ihre Java-Version.

Achten Sie also darauf, dass Ihre Programme der Hausaufgaben auf Ihrem Computerund auf dem von Ihnen benutzten TU-Computer ausgeführt werden können.

1.2 Programmiersprachen 1-31

Page 32: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Java-BeispielDieses ist ein Beispiel für die Version Java 8.Java 8 macht Schritte in die Richtung Funktionalität:

@FunctionalInterfaceinterface Funktion

int rechnen (int x, int y);

Diese Prinzipien werden wir uns natürlich genauer anschauen.

1.2 Programmiersprachen 1-32

Page 33: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

public class Test public static void main(String[] args)

Funktion f = (a,b) -> a+b;Funktion g = (a,b) -> a-b;Funktion h = (a,b) -> a*b;Funktion l = (a,b) -> a/b;int a = 100;int b = 25;int w = f.rechnen(a,b);int x = g.rechnen(a,b);int y = h.rechnen(a,b);int z = l.rechnen(a,b);System.out.printf("%d + %d = %4d%n",a,b,w);System.out.printf("%d - %d = %4d%n",a,b,x);System.out.printf("%d * %d = %4d%n",a,b,y);System.out.printf("%d / %d = %4d%n",a,b,z);

1.2 Programmiersprachen 1-33

Page 34: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Übersetzung, Ausführung und Ausgabe:

javac Test.javajava -ea Test

100 + 25 = 125100 - 25 = 75100 * 25 = 2500100 / 25 = 4

1.2 Programmiersprachen 1-34

Page 35: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Algorithmus und Programm:Korrektheit, Komplexität und Entscheidbarkeit

1.1 Vom Algorithmus zum Programm1.2 Programmiersprachen1.3 Korrektheit, Komplexität und Entscheidbarkeit1.4 Software-Grundlagen

1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-35

Page 36: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Spezifikation, Korrektheit und Verifikation

Die Spezifikation beschreibt die Anforderungen an ein Softwaresystem in einerinformellen, grafischen und/oder formalen Sprache. Eine Spezifikation solltevollständig und widerspruchsfrei sein.

Ein Softwaresystem, das eine Spezifikation erfüllt, heißt korrekt bezüglich dieserSpezifikation. Man unterscheidet dabei zwischen partieller und totaler Korrektheit. EinProgramm nennt man partiell korrekt, wenn die Spezifikation erfüllt, die Terminierungvon Programmläufen aber nicht notwendigerweise gewährleistet ist. Es heißt totalkorrekt, wenn zusätzlich die Terminierung sichergestellt ist. Ein partiell korrektesProgramm liefert also keine falschen Ergebnisse.

Unter Verifikation versteht man den mathematischen Beweis der partiellen odertotalen Korrektheit eines Programms.

1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-36

Page 37: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Korrektheit des Algorithmus von Euklid

Die Spezifikation besteht aus einer Vorbedingung und einer Nachbedingung:

Vorbedingung: x > 0 und y ≥ 0Nachbedingung: a = ggT(x , y)

Der Algorithmus von Euklid ist für Eingaben x und y mit x > 0 und y ≥ 0 partiellund total korrekt. Die Variable a enthält nach Programmende den Wert des größtengemeinsamen Teilers von x und y .

Mit der Definition ggT(0, 0) = 0 ist der Algorithmus von Euklid für alle Werte x undy mit x ≥ 0 und y ≥ 0 partiell und total korrekt.

Beweis unter Verwendung einer Schleifeninvarianten: Sehen wir uns jetzt an.

1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-37

Page 38: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Test und Validierung

Der Test eines Programms ist der probeweise Ablauf des Programms. Damit der Testaussagekräftig ist, müssen die Eingabedaten sorgfältig ausgewählt werden. Ein Testkann nur die Anwesenheit von Fehlern, niemals aber deren Abwesenheit zeigen.

Als Validierung bezeichnet man den Test eines Softwaresystems unter Bedingungen,wie sie im späteren Einsatz herrschen werden. Auch wenn das zu erstellendeProgramm verifiziert wurde, kann auf eine Validierung nicht verzichtet werden, da einmathematischer Nachweis der Korrektheit beispielsweise nichts über dasLaufzeitverhalten des Programms oder die Auslastung von Leitungen aussagt.

Verifikation: verus – wahr, facere – machenValidierung: validus – gesund, stark

1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-38

Page 39: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Komplexität und O-Notation

• Unter Komplexität versteht man den Aufwand, den ein Algorithmus/Programm zurLösung einer Aufgabe benötigt. Damit ist in den meisten Fällen der erforderlicheSpeicherplatz oder die Anzahl der durchgeführten Rechenschritte gemeint.

• Mathematisch wird die Komplexität eines Algorithmus/Programms in der Regeldurch eine Funktion f : N −→ R beschrieben. Die Größenordnung einer solchenFunktion f wird häufig durch die sogenannte O-Notation nach oben abgeschätzt:

O(g) = f : N −→ R | ∃c > 0, n0 > 0 ∀n ≥ n0. 0 ≤ f (n) ≤ cg(n)

für eine Funktion g : N −→ R.

1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-39

Page 40: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Komplexität des Algorithmus von Euklid

Theorem. [G. Lamé, 1845] Es seien x, y und n mit x ≥ 0, y ≥ 0 und0 ≤ x , y < n gegeben. Dann gilt: Der Algorithmus von Euklid benötigt höchstens

f (n) :=⌈logφ

(√5 n)⌉− 2

Divisionsschritte, wobei φ = 12(1 +√5)

ist.

Beispiel: ggt(36,52), n=53, f (n) = d9, 92288...e − 2 = 10− 2 = 8.

Unter Verwendung der O-Notation erhalten wir: f (n) ∈ O(log(n)).Man schreibt es auch in der Form: f (n) = O(log(n)).

1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-40

Page 41: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Symbole zur Größenordnung von FunktionenEs sei eine Funktion g : N −→ R gegeben.

O(g) = f : N −→ R | ∃c > 0, n0 > 0 ∀n ≥ n0. 0 ≤ f (n) ≤ cg(n)Ω(g) = f : N −→ R | ∃c > 0, n0 > 0 ∀n ≥ n0. 0 ≤ cg(n) ≤ f (n)Θ(g) = f : N −→ R |

∃c1 > 0, c2 > 0, n0 > 0 ∀n ≥ n0. 0 ≤ c1g(n) ≤ f (n) ≤ c2g(n)o(g) = f : N −→ R | ∀c > 0 ∃n0 > 0 ∀n ≥ n0. 0 ≤ f (n) < cg(n)ω(g) = f : N −→ R | ∀c > 0 ∃n0 > 0 ∀n ≥ n0. 0 ≤ cg(n) < f (n)

Diese Zeichen werden Landau-Symbole genannt. Sie beschreiben das asymptotischeVerhalten von Funktionen. Eine Übersicht finden Sie auf der Web-Seite dieserVorlesung. Dieses Thema wird in den Veranstaltungen Algorithmen undDatenstrukturen und Diskrete Mathematik behandelt.

1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-41

Page 42: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Symbole zur Größenordnung von Funktionen

• 3000n2 + 7n + 23 ∈ Θ(n2) Man schreibt meistens: 3000n2 + 7n + 23 = Θ(n2)

• 3000n2 + 7n + 23 ∈ O(n2)

• 3000n2 + 7n + 23 ∈ Ω(n2)

• 23 ∈ Θ(1)

• anxn + ... + a1x + a0 ∈ Θ(xn)

• Θ(logk(n)) = Θ(logl(n))

• 6n log2(n) + 8n + 12 ∈ Θ(n log(n))

1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-42

Page 43: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Entscheidbarkeit

• Entscheidbarkeit von Problemen: Gibt es zu jedem Problem einen Algorithmus,der es löst?

• Immer wieder kommt es vor, dass ein Computerprogramm plötzlich keine Reaktionmehr zeigt („abstürzt“ oder „sich aufhängt“). Dahinter verbirgt sich häufig einAlgorithmus, der für eine spezielle Eingabe nicht terminiert. Für kommerzielleSoftware kann das sehr teuer werden.

• Die Suche nach dem Grund der Nichtterminierung kann sich sehr schwieriggestalten. Daher liegt der Wunsch nahe, einen Algorithmus zu entwickeln, derbeliebige Algorithmen auf Terminierung testet. Diese Aufgabenstellung heißtHalteproblem.

1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-43

Page 44: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Halteproblem 1Das Halteproblem ist unentscheidbar. Wir zeigen die Aussage indirekt:

• Annahme: Es gibt einen Algorithmus

HALT(algorithmus a, eingabe e),

der für einen Algorithmus a und eine Eingabe e genau dann das Ergebnis trueliefert, wenn a bei Eingabe von e terminiert.

• Der Algorithmus TEST(algorithmus a) sei definiert durch

TEST(algorithmus a): while HALT(a,a) ... .

Das heißt, TEST(a) terminiert genau dann nicht, falls a bei Eingabe von aterminiert.

1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-44

Page 45: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Halteproblem 2Zwei Fälle können eintreten:

• 1. Fall: Der Aufruf HALT(TEST, TEST) liefert true.In diesem Fall terminiert nach Definition von HALT der Aufruf TEST(TEST).Hieraus folgt aus der Definition von TEST, dass der Aufruf TEST(TEST) nichtterminiert, ein Widerspruch.

• 2. Fall: Der Aufruf HALT(TEST, TEST) liefert false.In diesem Fall terminiert nach Definition von HALT der Aufruf TEST(TEST) nicht.Hieraus folgt aus der Definition von TEST, dass der Aufruf TEST(TEST)terminiert, ein Widerspruch.

Da in beiden Fällen ein Widerspruch auftritt, kann der Algorithmus HALT nichtexistieren.

1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-45

Page 46: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Halteproblem 3

Die beiden vorherigen Seiten

• Halteproblem 1 und

• Halteproblem 2

wurden dem Schulbuch

Peter Hubwieser, Patrick Löffler et al.: Informatik 5 – Lehrwerk für Gymnasien.Ernst Klett Verlag, Stuttgart, Leipzig, 2010.

entnommen.

1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-46

Page 47: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Berechenbarkeit 1

• Eine Funktion f : A→ Y heißt berechenbar, wenn es einen Algorithmus Af gibt,der diese Funktion „realisiert“.

• Die Quadratfunktion f : N→ N ist berechenbar, denn es gibt einen Algorithmus,der für jede gegebene natürliche Zahl n das Quadrat n2 berechnet.

Ist es wirklich möglich, ganz lange Zahlen mit dem Computer zu bearbeiten?

• Es gibt überabzählbar viele Funktionen f : N→ N, aber nur abzählbar vieleAlgorithmen. Das heißt, fast keine Funktion ist berechenbar.

Wir werden den Satz von Rice kennenlernen.

1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-47

Page 48: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Berechenbarkeit 2• Mithilfe des Berechenbarkeitsbegriffs lässt sich die Entscheidbarkeit formal

definieren: Eine Menge M ⊂ X heißt entscheidbar relativ zu X , wenn diecharakteristische Funktion

χM(x) =1, x ∈ M ,0, x ∈ X \M ,

berechenbar ist.

• Formulieren Sie das Halteproblem als charakteristische Funktion einer geeignetenMenge.

Fazit: Es gibt unentscheidbare Probleme und nicht berechenbare Funktionen.Mehr zu diesem Thema lernen Sie in den Modulen Theoretische Informatik.

1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-48

Page 49: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Algorithmus und Programm:Software-Grundlagen

1.1 Vom Algorithmus zum Programm1.2 Programmiersprachen1.3 Korrektheit, Komplexität und Entscheidbarkeit1.4 Software-Grundlagen

1.4 Software-Grundlagen 1-49

Page 50: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Hardware

Für unsere Zwecke reicht das folgende einfache Modell vom Aufbau eines Rechners.Details lernen Sie in den Modulen Technische Informatik, „Rechnernetze, ... kennen:

AusgabewerkHauptspeicher

MassenspeichergeräteEingabe-

Zentraleinheit

geräte

Eingabewerk

Ausgabe-

Prozessor

1.4 Software-Grundlagen 1-50

Page 51: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Software

• Zur Systemsoftware zählen alle Programme, die für den korrekten Ablauf vonRechnern oder Rechnernetzen erforderlich sind.

• Die Anwendungssoftware wird zur Lösung von Problemen, die nicht ursächlich mitRechnern zu tun haben, eingesetzt.

• Softwarewerkzeuge unterstützen die Erstellung von System- undAnwendungsprogrammen.

1.4 Software-Grundlagen 1-51

Page 52: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Systemsoftware

Zur Systemsoftware zählen alle Programme, die für den korrekten Ablauf vonRechnern oder Rechnernetzen erforderlich sind:

• Betriebssysteme und ihre Komponenten

• Compiler, Interpreter

• Binder, Lader bzw. Bindelader

• Programme zur Verwaltung von Geräten

• Netzsoftware

• . . .

1.4 Software-Grundlagen 1-52

Page 53: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Anwendungssoftware

Die Anwendungssoftware wird zur Lösung von Problemen, die nicht ursächlich mitRechnern zu tun haben, eingesetzt:

• Datenbankprogramme

• Conputeralgebrasysteme

• Office-Software: Textverarbeitung, Tabellenkalkulation, Präsentation, . . .

• E-Mail-Programme

• Internetsoftware: Browser, . . .

• Mediensoftware: Grafik-, Photo-, Audio-, Videoprogramme, . . .

• . . .

1.4 Software-Grundlagen 1-53

Page 54: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Softwarewerkzeuge

Softwarewerkzeuge unterstützen die Erstellung von System- undAnwendungsprogrammen:

• Modellbildung

• Programmierwerkzeuge

• Versionskontrolle

• Integrierte Entwicklungsumgebungen

• . . .

1.4 Software-Grundlagen 1-54

Page 55: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Betriebssysteme

• Der Begriff Betriebssystem ist eine zusammenfassende Bezeichnung für alleProgramme, die die Ausführung der Benutzerprogramme, die Verteilung derBetriebsmittel auf die einzelnen Benutzerprogramme und die Aufrechterhaltung derBetriebsart (z. B. Stapelbetrieb, Dialogbetrieb) steuern und überwachen.

• Das Betriebssystem bietet seine Dienste dem Benutzer in einer textuellen odergrafischen Oberfläche an.

1.4 Software-Grundlagen 1-55

Page 56: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Betriebssysteme

• Das Betriebssystem kann als eine Erweiterung der Maschine gesehen werden. Derdurchschnittliche Programmierer möchte in der Regel beispielsweise nicht dieVerwaltung einer Floppy-Disk programmieren, sondern deren Funktionalität alsAbstraktion auf hohem Niveau nutzen. In diesem Zusammenhang spricht man auchvon einer virtuellen Maschine.

• Das Betriebssystem arbeitet auch als Ressourcenmanager. Moderne Rechensystemebestehen aus Prozessoren, Speichern, Uhren, Platten, Terminals, Druckern,Netzwerkschnittstellen und vielen weiteren Komponenten. Das Betriebssystem teiltdiese Ressourcen untern den verschiedenen Prozessen auf. Dieser Vorgang kann als„Multiplexen in Zeit und Raum“ beschrieben werden.

1.4 Software-Grundlagen 1-56

Page 57: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Wichtige Betriebssysteme

• UNIX-Derivate

BSD-Unix (Berkeley Software Distribution) AT&T, System V Linux (Linus Torvalds)

Distributionen für Linux: RedHat, Suse, Debian, Ubuntu, Knoppix, . . .

• Betriebssysteme der Fa. Microsoft

MS-DOS Windows 3.x/95/98/Me Windows NT, Windows 2000, Windows XP Windows Vista, Windows 7, 8, 10

1.4 Software-Grundlagen 1-57

Page 58: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Oberflächen von Betriebssystemen

• Ein heutiges Betriebssystem stellt dem Benutzer die Fähigkeiten des Rechners übereine textuelle Oberfläche (Shell) und/oder über eine grafische Oberfläche (GUI,Graphical User Interface) zur Verfügung.

• Beispielsweise gibt es für Unix üblicherweise die Shells sh, bash, csh, tcsh, ksh undeinige weitere. Für Linux wurden die grafischen Oberflächen KDE und Gnomeentwickelt. Die Wahl der jeweiligen Oberfläche bleibt dem Benutzer überlassen.

1.4 Software-Grundlagen 1-58

Page 59: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Dateiverwaltung

Dateiverwaltungssystem

Komponente eines Betriebssystems, die den gesamten Platz auf externen Speichernverwaltet. Zu den Aufgaben gehören die Lokalisierung von Dateien, die Zuweisung vonSpeicherplatz und die Buchführung über die Verwendung des Speichers.

Editor

Komponente eines Dateiverwaltungssystems zum Bearbeiten von Texten oder Daten.Verbreitete Editoren unter Unix sind vi, emacs, nedit und gedit. Notepad undWordpad sind solche für Windows.

1.4 Software-Grundlagen 1-59

Page 60: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Programmierwerkzeuge

• Änderungsverwaltung: diff, patch

• Versionsverwaltungsprogramme: rcs, cvs, svn

• Eingabeanalyse: lex, yacc

• Eingabeverarbeitung: awk

• Programmgenerierung: make

• . . .

1.4 Software-Grundlagen 1-60

Page 61: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Programmierumgebungen

Programmierumgebungen sind Software-Systeme zur Unterstützung derProgrammentwicklung. Typische Bestandteile einer Programmierumgebung sind

• ein sprachspezifischer Editor (Texteditor),

• Compiler und/oder Interpreter,

• Binder, Lader bzw. Bindelader,

• Test- und Debughilfen,

• Quelltextformatierungstools,

• Archivierungswerkzeuge sowie

• Dokumentationsgeneratoren.

1.4 Software-Grundlagen 1-61

Page 62: Algorithmus und Programm - ips.tu-braunschweig.de · Algorithmusbegriff EinAlgorithmusisteine„Berechnungsvorschrift“.DieAufgabe,diederAlgorithmus lösensoll,wirddurcheineSpezifikationfestgelegt

Integrierte EntwicklungsumgebungenEine Programmierumgebung wird auch integrierte Entwicklungsumgebung (IDE)(integrated development environment) genannt. Integrierte Entwicklungsumgebungenfür Java sind beispielsweise

• NetBeans,

• Eclipse,

• IntelliJ IDEA,

• Borland JBuilder und

• Oracle JDeveloper.

Integrierte Entwicklungsumgebungen können ggf. auch für die Arbeit mit mehrerenProgrammiersprachen geeignet sein.

1.4 Software-Grundlagen 1-62