Programmiersprachen - Institut für Informatik

Werbung
Was ist das:
eine Programmiersprache?
ł Formale Sprache*), die zur Beschreibung von
Berechnungen in Computern verwendet wird:
6. Programmiersprachen
im Überblick
Programme = Daten + Algorithmen
*)
Mengen von Wörtern über einem Alphabet:
(Folge von Symbolen)
L Ž A*
ł Wichtig:
- Sprache für menschlichen Leser verständlich;
- effizient implementierbar
ł Sprache hat Syntax (vgl. Grammatiken, EBNF)
und Semantik (Bedeutung, Wirkung).
Version: 21. Okt. 2015
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
Probleme und Fragen
Programmiersprachen: eine Auswahl
Forth
Mehr als 1000 unterschiedliche Programmiersprachen in
Forschungsgruppen, internationalen Komitees sowie in
Computerfirmen entwickelt [Wilson 93]
IBM: Fortran, PL1
Algol 60
Fortran
Smalltalk
Algol 68
SETL
Simula 67
YACC
PL/1
LEX
CLU
SPSS
Sun: Java
awk
Pascal
Snobol
IFIP: Algol 60, Algol 68
Universitäten: Pascal, Modula-2, CLU
Cobol
Concurrent Pascal
Turbo-Pascal
DoD: Cobol, Ada
SQL
Alphard
SDL
DELPHI
OPS-5
Oberon
• Sprachen, Dialekte, Versionen
... und das Hauptproblem der Vielfalt: Portabilität
Eiffel
Object Cobol
Miranda
Chill
Ada
HTML
CDL 2
Beta
Modula-3
Ada 95
C
C++
Assemblersprachen
Objective-C
Scheme
UML
Common Lisp
Oberon-2
C#
Basic
Standard-ML
VDM
Clipper
RPG
Lotus
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
Z
Act-One
Haskell
CSP
Maschinensprachen
Occam
Lisp
Opal
Prolog II
BCPL
Mesa
3
Hope
Prolog
APL
• Klassifikation …
... nach Anwendungsgebieten
... nach der Historie
... nach Programmiersprachengenerationen
... nach Programmierparadigmen
... nach Verbreitungsgrad
Latex
Postscript
Modula-2
• Klassifikation:
Wie kann eine Ordnung in die Vielfalt gebracht werden?
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
2
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
T
Linda
Java
PHP
4
Welche Programmiersprache ...
Programmiersprachen und Varianten
Pascal
•
•
•
•
•
•
Pascal-P
Standard-Pascal
Concurrent Pascal
VAX-Pascal
DEC-Pascal
Turbo-Pascal
- Version 2 ...
- Version 3 ...
- Version 4...
- Version 5 ...
- Version 6 ...
• Object Pascal
• DELPHI Pascal
Sprachdialekt
• ... sollte man beherrschen?
Fortran
• ... ist weit verbreitet?
•
•
•
•
•
Version
Fortran 77
Fortran IV
Fortran 90, 95
HP-Fortran
...
• ... ist die beste?
• ... ist modern?
Compiler
Æ Portabilitätsprobleme
Java
Hauptziel: Portabilität
Ækeine Dialekte
- Version 1.3 (Mai 2000)
- Version 1.4.0
- Version 1.4.2
- Version 1.5.0
…
- Version 8 (März 2014)
Sollte man möglichst viele
Programmiersprachen beherrschen?
C
•
•
•
•
•
Kernighan-Ritchie-C
ANSI C (Standard)
Visual C
Borland C
...
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
Wie kann eine Ordnung in die Vielfalt
von Programmiersprachen gebracht
werden?
5
Klassifikationen
6
Klassifikationen
... nach Anwendungsgebieten
... nach Anwendungsgebieten
... nach der Historie
... nach Programmiersprachengenerationen
... nach Programmierparadigmen
... nach Verbreitungsgrad
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
7
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
8
Programmiersprachen und
Anwendungen (1)
Programmiersprachen und
Anwendungen (2)
• Wissenschaftlich-technischer Bereich (Physik):
• Statistik:
Fortran
SPSS
R (statistische Auswertung von „big data“, 1990,
pupulär ab 2010)
• Kommerzieller Bereich (Banken, Verwaltung):
Cobol
• Künstliche Intelligenz (Expertensysteme ...):
Prolog, Lisp, Haskell ...
• Schriften / Texte:
• Systemsoftware (Compiler, Betriebssysteme):
Nicht mehr
Programmiersprachen
im engeren Sinne
Latex, Postscript
C, C++, Ada, Java, CDL 2
• Echtzeit:
• Compiler-Generatoren:
Ada95, Pearl
Lex, Yacc
• Datenbanken:
SQL
• formale Spezifikationen:
• Telekommunikation:
Z
Chill
• SW-Architekturen:
Achtung: Viele Sprachen sind universell anwendbar
(C, C++, Ada, Java, Pascal, Python ...)
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
UML
9
10
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
Entwicklung von Programmiersprachen
(Quelle: nach Appelrath, Ludewig 'Scriptum Informatik‘‚ 1995)
Assemblersprachen
1950
alte Sprachen
1962
1966
APL
Außenseiter
Algol58
OO Sprachen
1960
Klassifikationen
Algol-Familie
Fortran
1957
Algol60
Lisp
Cobol
Basic
Algol-W
Simula 67
PL/1
Algol68
1968
BCPL
1970
... nach der Historie
Pascal
Fortran IV
Concurrent
Pascal
FORTH
1074
C
PROLOG
Modula Mesa
1976
Fortran 77
OPS5
Smalltalk-80
1980
Modula-2
1984
C++
1988
1995
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
11
Ada
Eiffel
HP-Fortran
Delphi
Java
Ada95
Ruby (1995), Python (1995), PHP (1997), C# (2000), Swift (Apple, 2014), Cuda (2015)
12
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
Internet: Informationen zu
Programmiersprachen
Liste (aller) Programmiersprachen
(Stand 6. 10. 2015):
http://de.wikipedia.org/wiki/Liste_von_Programmiersprachen
Klassifikationen
Liste objektorientierter Programmiersprachen
(Stand 30. Mai 2015):
http://de.wikipedia.org/wiki/Liste_objektorientierter_Programmiersprachen
... nach Programmiersprachengenerationen
Zeittafel:
http://de.wikipedia.org/wiki/Zeittafel_der_Programmiersprachen
13
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
14
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
Programmiersprachgenerationen
• Programmiersprachen der 1. Generation:
Klassifikationen
Maschinensprachen
• Programmiersprachen der 2. Generation:
Assemblersprachen
... nach Programmierparadigmen
• Programmiersprachen der 3. Generation:
höhere algorithmische u. objektorientierte Sprachen
Æ Pascal, Ada, C, Basic, Java ...
• Programmiersprachen der 4. Generation:
Tabellenkalkulation, Datenbanksprachen
Æ Lotus, SuperCalc, dBase ...
Ganz wichtig!
• Programmiersprachen der 5. Generation:
Sprachen der künstlichen Intelligenz
ÆProlog, Lisp, OPS-5 ...
deskriptive Sprachen
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
Æ Abstraktionsniveau
15
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
16
Programmiermodell (Paradigma)
Programmiermodell (Paradigma)
Programmiersprachen
Programmiersprachen
imperative
(algorithmische)
maschinennah
höhere
objektorientierte
Assemblersprachen
Pascal,
Ada,
C,
Fortran,
Cobol,
Chill,
PL/1
Forth,
Basic
Oberon-2,
Haskell,
Prolog,
Eiffel,
Lisp,
Prolog II,
Simula 67,
Scheme,
OPS-2
C++,
Hope,
Object Cobol,
Miranda,
Beta,
Standard ML
Programmentwicklung folgt
Java,
Delphi
einem Modell – konzentriert sich
C#
auf Beschreibung von …
Achtung: Mischformen
- Java: objektorientiert, imperativ
- Common Lisp: objektorientiert,
funktional, imperativ
-
funktionale
maschinennah
höhere
Klassifikation deskriptive
krrip
wird später
noch einmal
objektorientierte
kttorie diskutiert
ffunktionale
unk nalle
logische
AssemblerAssemblersprachen
sprrachen
Pascal,
Ada,
Ada,
C
C,,
Fortr
ran,
Fortran,
Cobol,
Chill,
PL/1
Forth,
Basic
Oberon-2,
Eiffel,
S
imula
a 67,
6 7,
Simula
C
++,
C++,
Object Cobol,
Beta,
Java,
Delphi
C#
imperative
(algorithmische)
deskriptive
logische
Algorithmen
Objekten
Funktionalen Zusammenhängen
Logik des Problems
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
17
Programmiermodell: imperativ
Haskell,
H
as
Lisp,
L
isp
Sch
Scheme,
Ho
Hope,
Mi
Miranda,
St
Standard ML
Prolog,
Prolog II,
OPS-2
Achtung: Mischformen
- Java: objektorientiert, imperativ
- Common Lisp: objektorientiert,
funktional, imperativ
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
18
Programmiermodell: objektorientiert
• Orientiert auf Beschreibung von kooperierenden Objekten:
• Orientiert am Algorithmusbegriff:
- Programme als Folgen sequentiell auszuführender
Anweisungen
Objekt =
• Auf von-Neumann-Rechner ausgerichtet:
Semantische Einheit aus
- Anweisungen verändern Daten im Speicher
- Daten (Variablen)
• Basiskonzepte:
- Operationen / Algorithmen
zur Bearbeitung der Daten
- Variable: zur Datenspeicherung
- Anweisung: zur Bearbeitung von Variablen-Werten
• Strukturierungsmethode:
- Teilalgorithmus, d. h.
Prozedur, Methode, Funktion
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
Klasse = Beschreibungsform für ähnliche Objekte
Programm = Menge von Klassen
19
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
20
Programmiermodell: logisch
Programmiermodell: funktional
• Programm =
auf die logische Beschreibung eines Problems orientiert
Programm =
Ein funktionales Programm beschreibt eine Komposition
von (mathematischen) Funktionen.
Beschreibung von Relationen zwischen 'Daten' / d.h.
zwischen 'Objekten der Realität'
Mathematische Funktion
f: D Æ W (Definitionsbereich, Wertevorrat)
mittels der Prädikatenlogik
Beispiel:
- Keine Zuweisung von Werten an Variablen;
- Keine Beschreibung von Algorithmen; z.B. kein Zyklus
- Kein Von-Neumann-Rechner als Hardware-Modell
elternteil (lisa, maria).
elternteil (hans, maria).
Beispiel:
schwester (X, Y) :elternteil (Z, X),
elternteil (Z, Y),
weiblich (X).
weiblich (maria).
weiblich (lisa).
Programm map, das Funktion f auf alle Elemente einer Liste
anwendet, z.B
map (add 1) [1,2,3] => [2,3,4]
map (mult 2) [1,2,3] => [2,4,6]
Problem beschrieben;
nicht: Algorithmus
maennlich (hans).
21
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
Gegenstand der Vorlesung GdP
höhere
objektorientierte
Assemblersprachen
Pascal,
Ada,
C,
Fortran,
Cobol,
Chill,
PL/1
Forth,
Basic
Oberon-2,
Eiffel,
Simula 67,
C++,
Object Cobol,
Beta,
Java,
Delphi
C#
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
22
Es kommt nicht so sehr darauf an, möglichst viele
Programmiersprachen zu beherrschen, sondern vielmehr:
• Konzepte (Anweisungen, Typen ...)
• Programmiertechniken (Sortieren, Suchen ...)
• Komponentenbildung (Modularisierung: Zerlegung von großen
Programmen)
• Paradigmen (objektorientiert, imperativ, logisch, funktional)
• Methoden zur Entwicklung komplexer Software
(Software Engineering)
• theoretische Grundlagen der Programmierung
• Teamarbeit
• Kenntnisse der Fachdisziplin
deskriptive
maschinennah
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
Resümee
Programmiersprachen
imperative
(algorithmische)
Realisiert durch folgendes funktionales Programm map:
map f []
= []
(1. Fall: leere Liste [])
map f (x:xs)
= f x : map f xs (2. Fall: nicht-leere Liste)
(Funktion f auf nicht-leere Liste x:xs angewandt, wobei
x erstes Element, xs die Restliste ist; „:“ ist Verkettung))
funktionale
Haskell,
Lisp,
Scheme,
Hope,
Miranda,
Standard ML
logische
Prolog,
Prolog II,
OPS-2
Î Man muss in der Lage sein, sich zielgerichtet in eine neue Sprache
einzuarbeiten!
Logik für
Informatiker
23
Î Man sollte Vertreter wichtiger Sprachklassen aktiv beherrschen:
Java (oder C++, Eiffel, Smalltalk, Delphi), C (oder Pascal), Prolog,
Lisp ...
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
24
Warum denn so viele und immer
wieder neue Programmiersprachen?
Forth
Algol 60
Fortran
Smalltalk
Algol 68
SETL
Simula 67
YACC
PL/1
LEX
CLU
SPSS
awk
Pascal
Snobol
Programmiersprachen:
Warum so viele und immer
wieder neue?
Cobol
Concurrent Pascal
Turbo-Pascal
OPS-5
Oberon
Eiffel
Object Cobol
Prolog
Miranda
HTML
CDL 2
Lisp
Beta
Scheme
Modula-3
C++
Common Lisp
Oberon-2
Act-One
Haskell
CSP
Basic
Standard-ML
VDM
Clipper
Maschinensprachen
RPG
Occam
Z
C#
Assemblersprachen
Objective-C
UML
Opal
Prolog II
BCPL
C
25
Latex
Hope
Chill
Ada
Mesa
T
Lotus
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
Linda
Java
PHP
PHP (1997), C# (2000)
26
Warum denn so viele und immer wieder
neue Programmiersprachen?
Kooperationsprojekte der Gruppe
Softwaretechnik (Bothe)
Kandidaten für DIE endgültige Sprache – in der Vergangenheit
Assemblersprachen
1950
Daimler (Stuttgart): Java (Diplomarbeit)
Leipniz-Institut:
Fortran 77, 90, 95 (zwei Diplomarbeiten)
Institut für Physik der HU: C++
Hahn-Meitner-Institut: Turbo-Pascal, LabVIEW
(visuelle Programmierung)
Siemens: C#
Institut für Psychologie der HU: Smalltalk
Fortran
1957
Algol58
Algol60
1960
1962
1966
APL
Lisp
Cobol
Basic
Algol-W
Simula 67
PL/1
Algol68
1968
BCPL
1970
Pascal
Fortran IV
Concurrent
Pascal
FORTH
1074
C
PROLOG
Modula Mesa
1976
Fortran 77
OPS5
Smalltalk-80
1980
Modula-2
1984
1995
27
Ada
C++
1988
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
SDL
Postscript
Modula-2
APL
Ada 95
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
SQL
Alphard
DELPHI
Eiffel
HP-Fortran
Delphi
Java
Ada95
Ruby (1995), Python (1995), PHP (1997), C# (2000), Swift (Apple, 2014), Cuda (2015)
28
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
Alte Sprachen und immer wieder neue Sprachen:
neue Programmiertechnologien und -aufgaben
Assemblersprachen
1950
Fortran
1957
Algol58
Algol60
1960
Die Macht der
altenAPL
Sprachen
Basic
1966
1962
1968
1970
Neue Erkenntnisse
und Technologien
Fortran IV
FORTH
1074
1976
Cobol
Strukturierte
Programmierung:
Algol-W
Simula 67
Anweisungen und DatenAlgol68
Pascal
Komplexität von SW:
Concurrent
Modulare und
Pascal
Objektorientierte
Modula
Programmierung
Smalltalk-80
Spezialaufgaben:
1984
wiss. Rechnen,
kommerzieller
Bereich
1988
Eiffel
1995
HP-Fortran
Delphi
PL/1
Andere
BCPL
Paradigmen
C
PROLOG
Mesa
Fortran 77
1980
Lisp
Modula-2
Java
Ada
Spezielle Ziele:
OPS5
- Portabilität
- Flexibilität
- Sicherheit
C++
- ……………..
Die Macht der alten Sprachen
Fakten zu Cobol
• 1960 entwickelt
• Anwendung: kommerzieller Bereich (Banken, Verwaltung)
• weltweit mehr als 200 Milliarden LOC Cobol-Code
im Einsatz
• pro Jahr: 5 Milliarden LOC neu geschriebener
Cobol-Code
• 86 % aller Geschäftsdaten durch Cobol-Systeme verarbeitet
Gründe:
- Reife von Cobol durch ihre Weiterentwicklung,
- Spezialalgorithmen für kaufmännische Berechnungen,
- Routine
(Quelle: Computer Zeitung, 3. März 2003)
Ada95
Ruby (1995),
Python (1995),
PHP (1997), C# (2000),
Swift (Apple,
2014),Webseiten
Cuda (2015)
Verändertes
technologisches
Umfeld:
Internet,
29
K. Bothe, Institut für Informatik, HU
Berlin, GdP, WS 2015/16
30
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
The 2015 Top Ten Programming
Languages *)
Klassifikationen
... nach Verbreitungsgrad
*) Quelle: IEEE Spectrum, Juli 2015
http://spectrum.ieee.org/computing/software/the-2015-top-ten-programming-languages/?utm_source=techalert&utm_medium=email&utm_campaign=072315
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
31
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
32
The 2015 Top Ten Programming
Languages
The 2015 Top Ten Programming
Languages
(2015)
(2014)
“What are the most popular programming languages?
The only honest answer: It depends.
Are you trying to land a job at a hot mobile app startup,
model electricity flows across a continent,
or create an electronic art project?
Languages are tools, and what’s a “must have”
in one domain can be a “whatever” in another.”
• “Java and C are in first place,
• data-analysis language R is rising in popularity,
• newcomers like Apple's Swift and Nvidia's Cuda are making waves.”
Quelle: IEEE Spectrum, Juli 2015
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
33
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
Quelle: IEEE Spectrum, Juli 2015
34
Herunterladen