• Keine Ergebnisse gefunden

Vorlesung Informatik 1

N/A
N/A
Protected

Academic year: 2022

Aktie "Vorlesung Informatik 1"

Copied!
46
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Vorlesung Informatik 1

Hochschule Esslingen

Studiengang Wirtschaftsinformatik

Teil 1: Grundlagen

Dr. rer. nat. Andreas Rau

http://www.hs-esslingen.de/~rau andreas.rau@hs-esslingen.de

(2)

Überblick & Grundbegriffe

(3)

Wie viele andere Erfindungen kommen Computer ursprünglich aus dem militärischen Bereich (Berechnung von Flugbahnen, Geheimdienst und Verschlüsselung).

Weiterentwicklung von mechanischen Rechenmaschinen (daher: Rechner)

Spezialisiert auf Umgang mit Zahlen bzw. Berechnungen (Grundprinzip)

Andere Daten können als Zahlen kodiert werden

z.B. ASCII Code für Buchstaben (siehe Buch Anhang A: 65=a, ...)

Interne Darstellung als ja/nein, 1/0, ...

Anderes Zahlensystem (Dualsystem, Binärkode)

Menschenfreundlichere Darstellung zur Programmierung

Maschinencode, Assembler, Höhere Programmiersprachen, ...

Vgl. Witz mit Programmierern („keine Nullen mehr“) Terminologie geht teilweise noch auf Historie zurück

Fehler = Bug (Insekt auf Relaiskontakt)

Speicherabzug = Core-Dump (früher Kernspeicher)

Historie von Computern

(4)

Ein Computer ist eine Maschine, allerdings keine gewöhnliche:

Während andere Maschinen meist genau einen definierten Zweck verfolgen, sind Computer universelle Werkzeuge zum Lösen von Problemen verschiedenster Art.

Allerdings müssen Sie dazu zuerst programmiert werden!

In gewisser Weise sind Sie darin dem Menschen vergleichbar, der sich verschiedenen Umgebungen durch Lernen anpassen kann. Tatsächlich gibt es viele Analogien zwischen einem Computer und dem menschlichen Gehirn: Hauptspeicher/Kurzzeitgedächtnis Festplatte/Langzeitgedächtnis, Gehirn/Prozessor ... Im Unterschied zum Menschen fehlt der Maschine jedoch die Fähigkeit zur Einsicht. Dafür ermüdet sie niemals und befolgt zuverlässig ihre Anweisungen. Diese müssen haargenau sein

Während man bei Menschen ein gewisses Maß an Wissen voraussetzen darf, muss man dem Rechner alles haarklein vorkauen. Damit ist das Prädikat „computerberechnet“ nur so gut wie der Programmierer des zugehörigen Programms. Computer schützen nicht vor Fehlern. Blindes Vertrauen in sie kann sogar Fehler verschleiern. Daher sind Tests von Programmen und Plausibilisierungen von Ergebnissen nach wie vor wichtig. Künstliche Intelligenz ist keine Intelligenz im eigentlichen Sinne, sondern lediglich die Simulation von Intelligenz (für einen definierten Problembereich), d.h. die Maschine wirkt nur intelligent.

Eigenschaften von Computern - Was können sie (nicht)

(5)

Ein Computer ist ein hochkomplexes Gerät und besteht aus einer Vielzahl von Komponenten. Glücklicherweise muss man diese nicht alle verstehen, um einen Computer bedienen zu können (wie beim Autofahren*...).

Grundsätzliche Unterscheidung:

Hardware (Bauteile/Gerät, man kann Sie sehen, anfassen und dagegentreten)

Software (reine Logik/Programm, nicht sichtbar oder greifbar) Beispiele für Bauteile (vgl. Demo-Hardware)

Motherboard mit CPU, Chipsatz, Speicher

Ein-/Ausgabegeräte (Bildschirm, Tastatur, Maus, ...)

Ein-/Ausgabeschnittstellen (seriell, parallel, ps/2, usb, ...)

*auch in Autos finden sich mittlerweile viele Computer und etliche Kilometer Kabel

Bestandteile von Computern(1)

(6)

Bestandteile von Computern(2)

interner bus CPU

Speicher I/O

I/O I/O I/O Maus

Drucker I/O

I/O Tastatur

Monitor

Ext. Speicher

Netzwerk für Programme

und Daten

Schnittstellen (Interfaces) für

Ein-/Ausgabe (Input/Output), z.B.

PS/2, seriell, parallel, IDE, VGA, Ethernet

Bei der Unterbringung von Programmen und Daten im selben Speicher spricht man von der sog. von-Neumann Architektur (im Gegensatz zur nicht mehr gebräuchlichen Harvard-Architektur). Wie wir später sehen werden, ist der physikalische Speicher in verschiedene logische Bereiche für Programme und Daten unterteilt.

(7)

Bestandteile von Computern(3)

Allgemeines EVA-Verarbeitungsprinzip für Hardware und Software

gilt auch für einzelne Verarbeitungsschritte in einem größeren Gesamtablauf

Eingabe (Input) Verarbeitung

(Processing) Ausgabe

(Output) Was

wird wie wozu verarbeitet

Dieses Prinzip und die damit verbundenen Fragestellungen sind elementar wichtig und werden uns später bei der schrittweisen (top-down) Zerlegung unserer Software unter dem Stichwort Schnittstellen (Interfaces) intensiv beschäftigen.

Auch die (hierarchische) Zerlegung ist ein elementares Prinzip bei der Lösung komplexer Aufgaben (Problem -> kleine Problemchen -> Lösungsschritte -> Gesamtlösung). Damit verbunden ist eine Arbeitsteilung sowohl bzgl. Komplexität als auch Aufwand.

(8)

Bestandteile von Computern(4)

Zugriffsgeschwindigkeit = Verarbeitungsgeschwindigkeit; daher wird versucht, möglichst viel im schnellen (internen) Speicher zu verarbeiten und nur in Ausnahmefällen auf den langsamen (externen) Speicher zuzugreifen: Der Cache wurde überhaupt nur deswegen eingeführt. Da der interne Speicher jedoch flüchtig ist, hat der externe Speicher trotzdem seine Daseinsberechtigung. Daneben sei noch angemerkt, dass der Preis für eine bestimmte Speicherkapazität von unten nach oben tendenziell drastisch ansteigt.

Intern (fchtig)Extern (dauerhaft)

Register

Cache (1st Level, 2nd Level) Hauptspeicher

Festplatte CD/DVD Diskette/MO

Bandlaufwerk (Tape) USB-Stick

elektro-dynamisch elektro-dynamisch elektro-dynamisch magnetisch

magnetisch/magneto-optisch magnetisch

elektro-statisch optisch

Zugriffsgeschwindigkeit

Arten von Speicher

(9)

Bestandteile von Computern(5)

+

ALU*

Register Register

Register CPU

*ALU = Arithmetic/Logic Unit Cache

Bus Bus interner

Speicher

externer Speicher Daten

Fabrik-Analogie

(10)

Das Betriebssystem verwaltet die Resourcen (Betriebsmittel) des Computers (z.B. Prozessorzeit, Speicherplatz, Ein-/Ausgabegeräte) und teilt diese den verschiedenen Programmen zu (bzw. nimmt sie ihnen wieder weg).

Wichtige Bestandteile sind u.a.

Scheduler - Verwaltung der CPU (vgl. viel später: Threads in Java)

Speicherverwaltung - Verwaltung des Speichers (sic!)

Dateisystem – Verwaltung von Dateien und Zugriffsrechten Analogie:

Computer = Haus (Spielfeld)

Programme = Hausbewohner (Spieler)

Betriebsysteme = Hausmeister (Schiedsrichter)

Das Betriebssystem sorgt auch dafür, dass der Computer scheinbar mehrere Dinge gleichzeitig (parallel) tut. In Wirklichkeit passieren diese Dinge abwechselnd und in kleinen Schritten schnell hintereinander.

Ein Computer kann schneller umdenken als ein Mensch

Betriebssystem(1)

(11)

Es gibt verschiedene Betriebssysteme bzw. Betriebssystemfamilien mit unterschiedlichen Organisationsformen:

Allen Betriebsystemen gemeinsam ist die hierarchische Organisation von Daten als Dateien in einer hierarchischen Ordnerstruktur (vgl. Windows Explorer). Im Detail gibt es jedoch gewisse Unterschiede

Unix-like (Unix, Linux)

Integration von Geräten in einen Verzeichnisbaum

Windows-like (Win 3.0, ..., Win XP, Win Vista)

Unterscheidung von Geräten über Laufwerksbuchstaben

Gute Strukturierung ist wichtig zur Orientierung.

Das gilt auch für Programmcode.

Wie wir später sehen werden, gibt es Ähnlichkeiten zwischen „echten Computern“ und der „Java Welt“ (virtuelle Maschine, Paketstruktur).

Betriebssystem(2)

(12)

Viele der von Hardware bekannten Eigenschaften gelten für Software nicht

Einerseits führt dies zu Widersprüchen mit unseren Erfahrungen in der realen Welt. Andererseits eröffnet die Flexibilität von Software neue Möglichkeiten und neue Gefahren. Die scheinbare Einfachheit von Änderungen und Updates einerseits und die Tatsache, daß ihre Folgen oftmals schwer absehbar sind, haben schon so manches Projekt in Schwierigkeiten gebracht. Die fehlenden physikalischen Gesetze müssen durch sorgfältige Vorüberlegungen ersetzt werden. Ansonsten führt die „schau mer mal“ Einstellung schnell zum Chaos.

Eigenschaften von Software(1)

Hardware

reale Welt, greifbar Serienentwicklung hohe Materialkosten

Aktualisierung nur bedingt möglich

Einschränkung durch physikalische Gesetze Stetigkeit von Ursache und Wirkung räuml. Nähe von Ursache und Wirkung

Abnutzung durch Verschleiß

Software

abstrakte Welt, nicht greifbar individuelle Entwicklung

keine Materialkosten

Updates möglich, z.B. über Internet keine Einschränkungen, „alles ist möglich“

sprunghafte Änderungen sind möglich Ursache und Wirkung evtl. weit entfernt Keine Alterung, Abnutzung durch Wartung

(13)

Computer/Software sind nur so gut wie ihre Entwickler:

I really hate this damned machine I wish that they would sell it.

It never does quite what I mean but only what I tell it.

Computer stehen für Präzision (Aberglaube, vgl. Werbung)

If you put garbage in a computer nothing comes out but garbage.

But this garbage, having assed through a very expensive machine, is somehow enobled and none dare criticize it.

Ein Computer ermüdet zwar nicht so wie ein Mensch, d.h. er macht keine Leichtsinnsfehler. Andererseits lernt er aber auch nicht dazu, d.h. er macht systematische Fehler zuverlässig immer wieder!

Eigenschaften von Software(2)

(14)

Eigenschaften von Software(3)

(15)

Softwareentwicklung

(16)

Ein Problem kann durch verschiedene Arten von Software gelöst werden:

Individualsoftware

Wird speziell zur Lösung eines bestimmten Problems entwickelt

Maßgeschneiderte Lösung; nur schwer für andere Zwecke einsetzbar

Kleiner Anwenderkreis (typisch: nur Auftraggeber)

Sehr teuer

Standardsoftware (engl. Common-of-the-shelf bzw. COTS)

Zur Lösung einer bestimmten Klasse von Problemen entwickelt

Lösung von der Stange; nur bedingt an spezielle Bedürfnisse anpassbar

Sehr großer Anwenderkreis

Günstig

Zur Lösung eines Problems muss also nicht immer selbst programmiert werden!

Die Auswahl der Lösung entspricht einer „make or buy“-Entscheidung.

Arten von Programmen

(17)

Neuentwicklung vs Wartung

Nicht alles ist so kurzlebig wie auf dem PC

Es gibt weniger Neuentwicklungen als man denkt

Sehr viele Softwareentwickler arbeiten in der Wartung

Es gibt sehr komplexe, langlebige Software in der Industrie, bei Banken…

Softwarekrise

Viele Projekte

überziehen Ihr Budget

werden zu spät fertig

werden vorzeitig eingestellt

Viele Produkte

erfüllen nicht die Anforderungen

werden nach Fertigstellung nicht verwendet

Daraus resultiert der Vorwurf, Softwareentwicklung sei keine Ingenieursdisziplin.

Dem soll durch Software-Engineering und seine Methoden abgeholfen werden.

Softwareentwicklung in der Praxis

(18)

Man kann unterscheiden zwischen Programmierung im Großen und im Kleinen

Die Probleme, die gemeinhin als „Software-Krise“ bezeichnet werden, treten vornehmlich beim Programmieren im Großen zutage. Hier muß großer Aufwand für Planung, Dokumentation und Kommunikation betrieben werden, um die

hohe Komplexität zu bewältigen und das Projekt „auf Kurs“ zu halten. Im Kleinen wird dagegen oft „vom Hirn ins Terminal“ (VHIT) programmiert.

Viele Projekte scheitern nach wie vor. Die Ursachen hierfür sind jedoch nicht immer technischer sondern häufig auch politischer oder organisatorischer Natur.

Programmierung im Großen und im Kleinen

Im Kleinen

wenige/ein Entwickler wenige/ein Anwender Entwickler == Anwender kleiner Umfang/Komplexität Programmieren aus dem Kopf

spontane ad hoc Entwicklung kurze Projektdauer

Im Großen

viele Entwickler viele Anwender Entwickler != Anwender hoher Umfang/Komplexität

Programmieren nach Plan formaler Entwicklungsprozess

lange Projektdauer

(19)

Grundsätzliche Vorgehensweise:

Problem entdecken

Problem verstehen und Ziel definieren

Lösung entwerfen (i.d.R. top-down*)

Lösung umsetzen (versch. Ansätze)

Praxistest

Obwohl die Lösung in einer mathematisch-logischen Welt erstellt wird, sind nicht alle Schritte formalisierbar geschweige denn mechanisierbar.

Das Problem kommt aus der realen Welt

Seine Umsetzung erfordert Kreativität und Verständnis

Programmierer werden so schnell nicht wegrationalisiert

*top-down bedeutet: vom Allgemeinen zum Speziellen

Vorgehensweise bei der Softwareentwicklung

(20)

Um ein Problem zu lösen, muß man es zunächst einmal verstehen. Klingt eigentlich logisch, oder? Trotzdem kommt es in der Praxis oft vor, daß auf Basis von halbgarem Verständnis bereits Code produziert wird, der später teuer geändert werden muß. Nachdenken ist lästig, aber es lohnt sich. Noch mehr lohnt es sich, die späteren Anwender in die Planung mit einzubeziehen.

Zur geordneten Softwareentwicklung sind verschiedene Formen von Entwicklungsprozessen definiert worden. Sie enthalten die Phasen Analyse, Entwurf, Implementierung, Test & Integration sowie Betrieb & Wartung in unterschiedlicher zeitlicher Anordnung.

Analyse : Aufgabe / Problem erkennen, definieren und verstehen Entwurf : Problem zerlegen und Lösung aus Teillösungen entwerfen Implementierung : Teillösungen arbeitsteilig umsetzen

Test & Integration : Teillösungen zusammenfügen und in der Praxis testen Betrieb & Wartung : Lösung einsetzen und verbessern bzw. Fehler beheben

Entwicklungsprozess(1)

(21)

Beim Wasserfallmodell sind diese Phasen alle sequentiell hintereinander angeordnet. Er eignet sich nur, wenn man vorher genau weiss, was man will.

Phasen sollen vollständig abgeschlossen bevor die nächste beginnt.

In der Praxis kommt es jedoch häufig zu Rücksprüngen, die hohen Aufwand verursachen.

Entwicklungsprozess(2)

Betrieb & Wartung Test & Integration

Implementierung Entwurf

Analyse

(22)

Bei neuartigen Anwendungen muss man oft „learning by doing“ betreiben, d.h.

man weiss erst im Laufe der Zeit, was man will. Dafür ist ein inkrementelles und iteratives Prozessmodell (z.B. das Spiralmodell) besser geeignet. Hierbei baut man ein System ausgehend von einem Kernsystem Schritt für Schritt weiter aus.

Entwicklungsprozess(3)

Integration & Test Analyse

Entwurf Implementierung

(23)

Softwaretechnische

Begriffe

(24)

Qualität wird definiert über mess- bzw. fühlbare Qualitätsmerkmale. Diese widersprechen sich teilweise bzw. werden fallweise unterschiedlich gewichtet.

Generell muss gute Software unter anderem folgende Qualitätsmerkmale haben:

Korrektheit (der Funktion)

Ergonomie (der Oberfläche)

Verfügbarkeit (der Funktion)

Robustheit (bei Fehlbedienung)

Vertraulichkeit (der Daten)

Integrität (der Daten)

Verständlichkeit (des Quellcodes)

Wartbarkeit (des Quellcodes)

Fazit: Der Entwickler muss an mehr denken, als der Kunde sieht

Softwarequalität

(25)

Komplexe Software besteht genauso wie komplexe technische Anlagen aus sog.

Komponenten (=Bausteine mit definierter Funktion und Schnittstelle).

Bei physikalischen Anlagen werden diese Bausteine verschraubt, verschweißt, verklebt, verkabelt, … um sie zusammenzufügen. Auch Software muss

zusammengefügt werden. Das entscheidende Bindeglied dazu sind … Namen!

Aus diesem Grund wird der Auswahl, Ordnung, Sichtbarkeit und Schreibweise von Namen in der Software viel Aufmerksamkeit geschenkt und es existieren zahlreiche technische Mechanismen und Konventionen um „Namen aufzulösen“

d.h. „die Sache dahinter“ eindeutig zu identifizieren.

Der andere Schlüsselfaktor bei der Softwareentwicklung sind Struktur bzw.

Architektur, d.h. der kreative Entwurf einer möglichst klaren und geeigneten Anordnung der verschiedenen Bestandteile. Da man diese – wie Software im allgemeinen – nicht sehen kann, braucht man dafür eine Vorstellung, Modelle und eigene Begriffe bzw. Eselsbrücken (letztere dürfen auch „schräg“ sein).

Was Software zusammenhält

(26)

Ein Problem ist eine (hoffentlich lösbare) Aufgabe

mit klar definierten Anforderungen

i.d.R. aus der realen Welt

Bestimmte Probleme lassen sich überhaupt erst durch Software lösen oder zumindest besser zu lösen als zuvor. Gleichwohl gibt es nach wie vor eine Vielzahl von manuellen (Teil)lösungen - auch der Mensch ist eine Art Prozessor!

Dabei geht es meist um Datenspeicherung oder Datenverarbeitung oder die automatisierung von Abläufen, z.B. durch Steuerung von Maschinen.

Ein Paradigma ist eine Art und Weise,

Probleme zu analysieren und

Probleme zu lösen

Jedes Paradigma ist durch bestimmte Grundkonzepte gekennzeichnet und ist außerdem kennzeichnend für eine Familie von Programmiersprachen.

Hinweis: Sprachen bestimmen die Art und Weise wie wir denken!

Probleme und Paradigmen

(27)

Ein Algorithmus

ist eine abstrakte, universelle, vollständige und nachvollziehbare Beschreibung der Lösung zu einem Problem. Insbesondere werden alle Instanzen des Problems durch denselben Algorithmus gelöst (es gibt jedoch auch Algorithmen für Teilprobleme). Wichtig: Ein Algorithmus ist unabhängig von einer bestimmten Programmiersprache (allerdings setzen manche Algorithmen bestimmte Eigenschaften einer Programmiersprache voraus bzw. sind in manchen Programmiersprachen leichter zu implementieren als in anderen).

Ein Programm

ist eine maschinenlesbare Implementierung für einen Algorithmus bzw. eine Ansammlung von Algorithmen in einer bestimmten Programmiersprache. Dabei handelt es sich i.d.R. um eine sehr detaillierte Folge von Einzelanweisungen.

Typisch für Programme ist die Verarbeitung von Daten, d.h. ein Programm wandelt Eingaben nach einem bestimmten Verfahren in Ausgaben um (EVA).

Ein Algorithmus enspricht der Lösungsidee und das Programm ihrer Umsetzung

Algorithmen und Programme

(28)

Programmierkonzepte

sind abstrakt, d.h. entsprechen grundsätzliche Ideen, nicht deren Umsetzung

sind universell, d.h. nicht auf eine bestimmte Programmiersprache beschränkt

sind bereits in der Analyse und Designphase anwendbar

Programmiersprachen

sind konkret, d.h. haben einen formalen Aufbau und eine definierte Syntax

sind speziell, d.h. jede Programmiersprache ist ein bißchen anders

sind erst bei der Implementierung anwendbar

Es ist wichtig, zwischen Konzepten und deren Umsetzung in einer gegebenen Programmiersprache zu unterscheiden. Nicht jede Programmiersprache

implementiert alle Konzepte und verschiedene Programmiersprachen können Konzepte auf unterschiedliche Art und Weise implementieren. Wer sich nicht von der Syntax verwirren läßt, sondern die Konzepte versteht, kommt theoretisch

und praktisch leichter mit verschiedenen Programmiersprachen zurecht.

Programmierkonzepte vs. Programmiersprachen

(29)

Klassifizierung von

Programmiersprachen

(30)

Funktionale Sprachen

Grundkonzept: Mathematische Funktionen, fest an Werte gebundene Variablen Vor- und Nachteile: Mächtige Bibliotheken

Anwendungsgebiet: Forschung, Rechenintensive Anwendungen Beispiele: Scheme, ML, Haskel

Logik Sprachen

Grundkonzept: Wissen in Form von logische Ausdrücken und Schlußregeln Vor- und Nachteile: Automatische Ableitung von Ergebnissen; Sehr speziell Anwendungsgebiet: Forschung, Künstliche Intelligenz, Expertensysteme Beispiele: Prolog

Imperative Sprachen

Grundkonzept: Schritt-für-Schritt Anweisungen, Variablen mit Speicherplatz

Vor- und Nachteile: Strukturierte Konzepte; relativ niedriges Abstraktionsniveau Anwendungsgebiet: Universell einsetzbar

Beispiele: Algol, Pascal, C

Sprachklassen(1)

(31)

Objektorientierte Sprachen

Grundkonzept: Kapselung von Funktionen und Daten in Objekten bzw. Klassen Vor- und Nachteile: Sehr hohes Abstraktionsniveau und Produktivität, langsam Anwendungsgebiet: Universell bzw. für GUI-basierte Anwendungen

Beispiele: Simula, Smalltalk, Java

Hybride Sprachen

Grundkonzept: Hybride Sprachen enthalten Konzepte mehrerer Sprachklassen.

Vor- und Nachteile: Verbinden die Vor- und Nachteile ihrer Vorbilder Anwendungsgebiet: Universell bzw. für GUI-basierte Anwendungen Beispiele: C++ (imperativ und objektorientiert)

Für weitere Informationen zur Geschichte von Programmiersprachen siehe z.B.

http:\\www.bernd-leitenberger.de/programmiersprachen-geschichte.html

Sprachklassen(2)

(32)

Das Abstraktionsniveau einer Sprache drückt sich auch in ihrer Darstellung aus:

grafische Darstellung Modellierungssprachen (Symbole)

textuelle Darstellung Hochsprachen (Anweisungen und Ausdrücke) Assembler (Mnemonics)

Maschinensprache (Einsen und Nullen)

Während die meisten textuellen Programmiersprachen universell eingesetzt werden können, haben Modellierungssprachen ein spezielles Einsatzgebiet, z.B.

Regelungstechnik. Sie basieren oftmals auf bereits vorhandenen Notationen.

Mit dem Abstraktionsniveau einer Programmiersprache steigt i.d.R. auch die erreichbare Produktivität (weniger Programmzeilen für das gleiche Ergebnis). Im Gegenzug nimmt die Eignung für hardwarenahe Anwendungen (z.B.

Steuerungsaufgaben) ab.

Sprachklassen(3)

Abstraktionsniveau

(33)

Im Zusammenhang mit den verschiedenen Abstraktionsniveaus spricht man auch von verschiedenen Generationen von Programmiersprachen:

1GL bzw. first generation languages

Der kodierte Befehlssatz des jeweiligen Prozessors ("Nullen und Einsen").

2GL bzw. second generation languages

Assemblersprachen (Mnemonics für den Maschinencode, z.B. MOV 0,1).

3GL bzw. third generation languages

Höhere technische Programmiersprachen mit Kontrollstrukturen und Datentypen 4GL bzw. fourth generation languages

Höhere Programmiersprachen wie SQL die "fast natürlich klingen".

5GL bzw. fifth generation languages

Sprache mit grafischer Oberfläche zum "programmieren mit der Maus".

Sprachklassen(4)

(34)

Neben den klassischen Programmiersprachen existiert auch eine ganze Reihe von sogenannten Skriptsprachen (die natürlich auch Programmiersprachen sind). Historisch betrachtet unterscheiden sich diese beiden Sprachtypen durch Ihren Anwendungsbereich.

Während Programmiersprachen zur Anwendungsentwicklung eingesetzt wurden war der ursprüngliche Zweck von Skriptsprachen die Automatisierung kürzer Abläufe, v.a. im Bereich der Systemadministration.

Daraus ergeben sich auch unterschiedliche Anforderungen an die jeweiligen Sprachen: Während eine Programmiersprache Konzepte wie strenge Datentypen und Module bieten muss, um die Komplexität von Anwendungen zu beherrschen kommt es bei Skriptsprachen in erster Linie darauf an, schnell zum Ergebnis zu kommen. Es gilt also wie im richtigen Leben: Für jede Aufgabe gibt es ein geeignetes (und ein ungeeignetes Werkzeug).

Heute lassen sich auch mit Skriptsprachen komplexe (Web)anwendungen entwickeln. Allerdings ist dabei viel Disziplin bei der Strukturierung gefragt!

Sprachklassen(5)

(35)

Imperative Programmierung(1)

Datenstrukturen

typdef struct datum { int tag;

int monat;

int jahr;

} Datum;

Funktionen

void menu(void) {

// Aufrufe für Menüpunkte }

int main(int argc, char **argv) { menu();

}

Datum

Tag Monat

Jahr

Main Menu Punkt2

Punkt1 Punkt3

Sub3 Sub1b

Sub1a

Daten und Funktionen werden also vollkommen getrennt voneinander verfeinert.

(36)

Imperative Programmierung(2)

Wesentliche Konzepte der imperativen Programmierung sind

Manipulation von Variablen

Variablen repräsentieren Speicherplätze.

Gesamtmenge der Variablen bildet den Programmzustand.

Algorithmus als eine Folge von Zustandstransformationen.

Aufruf von Funktionen

Bildung einer Funktionshierarchie ausgehend von einer Startfunktion.

Kopplung von Funktionen über Parameter und globale Daten.

Trennung von Funktion und Daten

Daten und Funktionen werden getrennt verfeinert.

Bei näherer Betrachtung erscheinen imperative Sprachen als eine natürliche Zwischenstufe zwischen funktionalen Sprachen (Aufruf von Funktionen, feste Bindung von Variablen) und objektorientierten Sprachen (Verschmelzung von Daten und Funktionen zu Objekten, dynamische Kooperation von Objekten).

(37)

Imperative Programmierung(3)

Wesentliche Nachteile der imperativen Programmierung sind

Abstraktion

Module als einziges Abstraktionskonzept. Trennung von Daten und Funktionen.

Verständlichkeit

Rein technische, nicht geschlossene Abbildung der realen Welt.

Erschwerte Kommunikation mit Nicht-Fachleuten (z.B. Kunden).

Wartbarkeit

Schlechte Wartbarkeit durch globale Daten und

schwer durchschaubare Aufrufhierarchie von Funktionen

Wiederverwendbarkeit

Bildung von unabhängigen Modulen erfordert sehr viel Disziplin.

Daneben soll jedoch nicht verschwiegen werden, dass imperative Programme derzeit (noch) performanter sind als vergleichbare objektorientierte Programme.

(38)

In objektorientierten Sprachen gibt es immer noch Variablen. Allerdings werden diese nun mit Funktionen zum Zugriff und zur Manipulation kombiniert und in Objekten gekapselt. Dadurch wird verbunden, was zusammengehört und verborgen, was nicht für jeden relevant ist. Dies dient der Abstraktion sowie der Wartbarkeit und Wiederverwendbarkeit.

Ein Klasse beschreibt die Struktur gleichartiger Objekte (Bauplan, Gußform) und existiert nur einmal. Es kann jedoch viele Objekte zu einer Klasse geben. Die Eigenschaften einer Klasse sind ihre Identität (z.B. Klassenname), ihr Zustand, ihr Verhalten und ggf. ihre Vaterklasse(n). Klassen sind statisch vordefiniert.

Ein Objekt hat eine eindeutige Identität (z.B. Referenz bzw. Adresse im Hauptspeicher), einen Zustand (Werte der Variablen), ein Verhalten (Funktionsumfang) und gehört zu einer bestimmten Klasse. Objekte können zur Laufzeit (gemäß Bauplan) dynamisch erzeugt und gelöscht werden.

In manchen Programmiersprachen sind Klassen auch (einzigartige) Objekte...

Objektorientierte Programmierung(1)

(39)

Methoden sind

die Schnittstellen des Objekts

Daten sind gekapselt.

Sie können nur von den eigenen Methoden des Objekts

manipuliert werden.

Objektorientierte Programmierung(2)

(40)

Nachrichten

Objektorientierte Programmierung(3)

Objekte kommunizieren und kooperieren durch Austausch von Nachrichten.

Praktisch bedeutet dies gegenseitigen Aufruf von Methoden.

Voraussetzung dafür ist, dass sich die Objekte gegenseitig kennen, d.h. eine Beziehung zueinander haben (über Arten von Beziehungen später mehr).

Praktisch werden Beziehungen durch Variablen mit Referenzen auf Objekte implementiert.

(41)

Objektorientierte Programmierung(4)

Eigenschaften lassen sich durch Vererbung abstrahieren und wiederverwenden:

:Fahrzeug :Objekt

:Landfahrzeug :Wasserfahrzeug

:Auto :Pkw

:Smart

:Lkw

:Boot

:Segelboot :Motorboot

Statt Vererbung spricht man auch von Spezialisierung oder ist-ein Beziehung.

Die Kunst besteht darin, die richtige Schrittweite zu finden – zum besseren Verständnis und für Erweiterungen, z.B. Fahrrad oder Surfbrett).

Ein Auto ist-ein

spezielles Landfahrzeug

(42)

Objektorientierte Programmierung(5)

Wesentliche Grundkonzepte der Objektorientierung sind:

Kapselung

Zusammenfassung von Daten und Funktionen zu Objekten.

Schutz der Daten durch unbefugte Zugriffe/Manipulationen.

Vererbung

Spezialisierung von Klassen und Objekten durch Übernahme und Verfeinerung der Eigenschaften vorhandener Klassen.

Dadurch Aufbau einer Hierarchie von verwandten Klassen.

Polymorphie

Ein Objekt kann viele Gesichter haben.

Insbesondere kann es sich wie einer seiner

Vorfahren innerhalb der Klassenhierarchie verhalten.

Die Summe aller Methoden eines Objekts stellt quasi einen Vertrag dar: Das aufgerufene Objekt ist der Dienstleister und das aufrufende Objekt ist der Kunde.

(43)

Wesentliche Vorteile der Objektorientierung sind

Abstraktion

Zusammenfassung von Daten und Funktionen zu einer sinnvollen Einheit.

Verständlichkeit

Modellierung von Gegenständen und Konzepten der realen Welt.

Einfachere Kommunikation mit Nicht-Fachleuten (z.B. Kunden).

Wartbarkeit

Verbesserte Wartbarkeit durch Schutz der Daten

Wiederverwendbarkeit

Zusammenfassung von zusammengehörigen Daten und Funktionen.

Objektorientierte Programmierung(6)

(44)

Fortran Assemblersprachen

C

Pascal Cobol Basic

Algol Simula Smalltalk

Java

C++

Stammbaum

80er

70er 60er

50er

Imperativ

90er

Objektorientiert

Maschinensprachen

(45)

Die Programmiersprache Java(1)

Java ist also „im Prinzip nichts Neues“, sondern eine neue Kombination von bewährten alten Konzepten bzw. eine starke Mischung bekannter Zutaten.

Konzepte und Wurzeln von Java

(46)

Die Programmiersprache Java(2) Eigenschaften von Java

Einfachheit und Stabilität

Verzicht auf problematische Konstrukte wie z.B. Zeiger

Objektorientiertheit

Keine Funktionen ohne Klasse/Objekt. Zwang zur sauberen Modellierung.

Verteilbarkeit

Bibliotheken für Kommunikation im Netz

Sicherheit

Mehrstufiges Sicherheitskonzept für Programmübersetzung und -ausführung

Portierbarkeit

Übersetzung in Bytecode („write once, run anywhere“)

Referenzen

ÄHNLICHE DOKUMENTE

[r]

Wir müssen noch zeigen, dass beide Rekursionen dieselben

Damit sind Hashfunktionen im Zufallsorakelmodell auch kollisionsresistent, wenn gleich der Aufwand zum Finden einer Kollision wesentlich geringer ist als der, Urbilder zu berechnen..

Damit sind Hashfunktionen im Zufallsorakelmodell auch kollisionsresistent, wenn gleich der Aufwand zum Finden einer Kollision wesentlich geringer ist als der, Urbilder zu berechnen..

• Für ein elegantes Programmieren sind gelegentlich Variablen, deren Wert geändert werden kann, ganz nützlich :-). • Darum erweitern wir unsere kleine Programmiersprache

• Am besten wäre es, wenn wir erst auswerten, dann auf das Ergebnis zugreifen .... Helmut Seidl, TU München ;-).. dem Wert für stop ). → Es werden automatisch alle

Auch über die Pädagogische Hochschule Thurgau PHTG, die Partnerhochschule der Universität Konstanz mit gemeinsamen Studiengängen, kommt Konstanzer Studierenden die persönliche

[r]