Vergleich Programmiersprachen

Entspricht dem Modul 2.2 Programmiersprachen – Vergleich

Entspricht dem Modul 2.2 Programmiersprachen – Vergleich


Set of flashcards Details

Flashcards 27
Language Deutsch
Category Computer Science
Level Other
Created / Updated 03.02.2014 / 14.02.2020
Weblink
https://card2brain.ch/box/vergleich_programmiersprachen
Embed
<iframe src="https://card2brain.ch/box/vergleich_programmiersprachen/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>

Was ist ein Programm

Ein Computerprogramm oder kurz Programm ist eine den Regeln einer bestimmten Programmiersprache genügende Folge von Anweisungen (bestehend aus Deklarationen und Instruktionen), um auf einem Computer eine bestimmte Funktionalität, Aufgaben- oder Problemstellung bearbeiten/lösen zu können.

Was ist eine Programmiersprache

Eine Programmiersprache ist eine formale Sprache zur Formulierung von Datenstrukturen und Algorithmen, d. h. von Rechenvorschriften, die von einem Computer ausgeführt werden können. Sie setzen sich aus Anweisungen nach einem vorgegebenen Muster zusammen, der sogenannten Syntax.

Was ist eine Assemblersprache

Eine Assemblersprache ist eine Programmiersprache, welche die Maschinensprache einer spezifischen Prozessorarchitektur in einer für den Menschen lesbareren Form repräsentiert. Jede Prozessorarchitektur hat ihre eigene Assemblersprache.

Was sind Hochsprachen

Eine Hochsprache oder auch höhere Programmiersprache (engl. high level programming language) ist eine Programmiersprache,  deren Befehlsnamen und Syntax der menschlichen Sprache angenähert und dadurch vergleichsweise leicht erlernbar sind.

Was versteht man unter Maschinensprache

Als Maschinensprache bezeichnet man den binär ausgedrückten Befehlssatz eines Prozessors. 

Was ist Maschinencode

Als Maschinencode bezeichnet man lückenlose, binär dargestellte Codes, welche sowohl Befehle als auch  speicherinterne Daten repräsentieren und direkt von einem Prozessor verarbeitet werden können. 

Was versteht man unter Syntax

Die Syntax einer Programmiersprache beschreibt die gültigen Folgen von Zeichenketten. Die Syntax regelt also  die "Rechtschreibung" einer Programmiersprache. Sie lässt sich formal festlegen, z.B. mit Syntaxdiagrammen  oder in einer Grammatik. 

Semantik

Die Semantik beschreibt, welche Bedeutung die einzelnen Sprachelemente der Syntaxdefinition besitzen. Die  Semantik wird in der Regel textuell beschrieben.

Was ist die Erweiterte Backus-Naur Form

Die Backus Naur Form ist eine Variante von Syntaxdiagrammen.

Unterschied zwischen Backus Nauer Form und Syntaxdiagrammen

Die Backus Nauer Form erlaubt nicht alle Verbindungen, hat strengere Auflagen. Deshalb ist jede EBNF als Syntaxdiagramm darstellbar, aber nicht umgekehrt.

Produktion in EBNF

  • Eine EBNF besteht aus einer Liste von Produktionen.
  • Jede Produktion beschreibt die Syntax eines bestimmten Grammatikfragmentes.
  • Produktionen werden als eine Art Gleichungen geschrieben. Auf der linken Seite steht ein Name für das definierte Grammatikfragment, auf der rechten Seite eine Folge von Symbolen, die den Aufbau des Grammatikfragmentes festlegen.
  • Zwischen linker und rechter Seite wird das Trennzeichen ::= gesetzt. 
  • Das Ende einer Produktion wird mit einem Punkt gekennzeichnet, also schematisch: 

linke Seite ::= rechte Seite. 

– Wenn mehrere Symbolfolgen auf der rechten Seite einer Produktion  zur Auswahl stehen, werden die Möglichkeiten nacheinander  aufgeführt und mit senkrechten Strichen getrennt.    integer ::= [sign] digit {digit}.  sign ::= "+" | "-".  digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9".  integer ::= [sign]  ("0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9") {digit}.  sign ::= "+" | "-".  digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9". 

Symbole EBNF

Definition =

Aufzählung , 

Endezeichen  ;

Alternative |

Option [ … ]

Optionale Wiederholung { … }

Gruppierung ( … ) Anführungszeichen, 1. Variante " … "

Anführungszeichen, 2. Variante ' … '

Kommentar ("…")

Spezielle Sequenz  ? … ?

Ausnahme -

Was geschieht beim Compilieren

Der Quelltext des Programms wird vor der ersten Ausführung durch einen Compiler in Maschinencode übersetzt.

Beim Ausführen des compilierten Programms wird eine hohe Ausführungsgeschwindigkeit erreicht.

Während des Compilierens wird der Quelltext durch den Compiler auf syntaktische Fehleruntersucht.

Compilierte Sprachen sind meistens typsicher.

Vertreter: C, C++, Smalltalk, Objective-C

Interpretierende Programmiersprachen

Der Quelltext des Programms wird zur Laufzeit von einem Interpreter eingelesen und Anweisung für Anweisung abgearbeitet

Dei Ausführung eines interpretierten Programms ist langsamer als diejenige eines compilierten Programms.

Bei kleinen Programmen kann bei kleinen Programmen auf den Edit-Compile-Test-Zyklus verzichtet werden.

Der Interpreter überwacht die Ausführung des Programms während der Laufzeit.

Vertreter: VBA, ASP, JavaScript, LISP, MATLAB 

Mischformen Compiliert, Interpretiert

Moderne Programmiersprachen wie z.B. Java oder C# compilieren das auszuführende Programm zunächst in einen Zwischencode (bei Java «Bytecode», in .NET IML genannt), der zur Laufzeit durch einen Interpreter in Form einer virtuellen Maschine ausgeführt wird. In Java werden zur Laufzeit so genannte „Hotspots“ (häufig benutzte Programmsegmente) erkannt und während des Programmlaufs in ein Maschinenprogramm übersetzt. Dadurch können Java-Programme eine – verglichen zu compilierten Programmen – ebenfalls gute Performance erreichen. 

Java Virtual Machine

 Die Java Virtual Machine (abgekürzt Java VM oder JVM) ist Teil der Java-Laufzeitumgebung (JRE)  • Die JVM ist für die Ausführung des Java-Bytecodes verantwortlich  • Die JVM dient als Schnittstelle zur Maschine und zum Betriebssystem und ist für die meisten Plattformen verfügbar (z.B. Linux, Mac, Solaris, Windows, usw.)  • Die JVM selbst ist oft in C und/oder C++ geschrieben  

Programmiersprachen 1. Generation (Maschinensprache) 

Ab 1941.

Als Sprachen der 1. Generation werden die Maschinensprachen bezeichnet.  Anweisungen werden binär (mit 0 oder 1) oder hexadezimal codiert.  Der Code kann vom Prozessor ohne vorhergehende Umwandlung durch einen Assembler oder Compiler abgearbeitet werden. Erlaubt die Erstellung von Effizientem und schnellem Code.  Schwierige Fehlersuche.  Aufwändige Programmierung, da jede Maschinenanweisung einzeln programmiert werden muss.  Auf spezifische Maschinen und CPU‘s zugeschnitten und deshalb nicht portierbar. 

Programmiersprachen 2. Generation (Assemblersprachen) 

1949/1952 

Als Sprachen der 2. Generation werden die Assemblersprachen bezeichnet.  Anstelle von binärem Code werden Mnemonische Symbole verwendet.  Von Menschen lesbarer Code.  Der Assemblercode wird von einem Assembler in Maschinencode umgewandelt.  Computer und CPU spezifisch und somit nicht portierbar.  Leichteres Debugging im Vergleich zu Maschinencode.  Erlaubt bereits Makro- und Strukturierte Programmierung.  Wird in der Regel bei Performancekritischen Anwendungen verwendet.  

Programmiersprachen 3. Generation  (Höhere Programmiersprachen) 

1952/1957 

• Sprachen der 3. Generation werden auch als Höhere Programmiersprachen bezeichnet.   • Syntax weist Ähnlichkeit zur menschlichen Sprache auf (Grammatik). • Zu den 3GL Sprachen werden die problemorientierten / imperativen Sprachen gezählt.  • Code einer 3GL Programmiersprache beschreibt die Problemlösung mittels Algorithmen.  • Der Code wird mittels eines Compilers in Maschinencode umgewandelt oder zur Laufzeit durch einen Interpreter ausgeführt.  • Einführung von Kontrollstrukturen, Befehlen, Variablennamen, Subroutinen. 

Programmiersprachen 4. Generation

 1970 

• Weitere Abstraktion zu 3GL Programmiersprachen, hin zu  Programmiersprachen die noch näher bei der menschlichen Sprache und  Denkweise sind.  • Bezieht sich eher auf Softwaresysteme als auf eine einzelne Programmiersprache.  • Mit dem Code wird das zu erreichende Resultat / Ziel beschrieben und nicht die Problemlösung.  • Anwendungsprogrammentwicklung: Die zur Problemlösung nötigen Algorithmen sind in der Programmiersprache integriert und brauchen durch den Softwareentwickler nicht codiert zu werden.  • Ziel ist es den Aufwand und die Kosten der Softwareentwicklung zu reduzieren.  • Generierung von Code mit CASE-Tools (Computer Aided Software Engineering).  • Anwendungsbereiche: Datenbankabfragen, Erzeugen von Reports, Webentwicklung etc. 

Programmiersprachen 5. Generation  (A.I.) 

1972

• Programmiersprachen mit der Prämisse dass ein Problem gelöst werden kann, und eine Applikation dafür gebaut werden kann, in dem man die für die Lösung notwendigen Bedingungen und Einschränkungen logisch  beschreibt.  • Die Eigenschaften einer zu erreichende Lösung werden logisch beschrieben und das System erzeugt danach die für die Problemlösung geeigneten Algorithmen.  • Anwendungsbereich: Artifizielle Intelligenz. 

Programmierparadigma

Als Programmierparadigma einer Programmiersprache bezeichnet man die Sichtweise auf und den Umgang mit den zu verarbeitenden Daten und Operationen. 

Prozedurales Paradigma

Abfolge von Befehlen

Kontrollstrukturen (Folge, Auswahl, Wiederholung)

Aufruf von Unterprogrammen und das Durchleiten und die Rückgabe von Parameterwerten

Programme in kleinere Teilaufgaben aufzuspalten

+Leicht verständlich

+Einfache Lösungen mit geringem Aufwand umsetzbar

- Umfangreiche Applikationen schwer übersichtlich

Objektorientiertes Paradigma

Basiert auf Klassen und Objekten

Die Prgrammlogik ist in Methoden abgebildet

Ein Objekt kapselt Daten und Methoden

Unterstützung von Vererbungsmechanismen, Polymorphie

Vorteile: 

+Wiederverwendbarkeit ist sehr hoch

+Übersichtlichkeit und Granularität sind hoch

+Probleme lassen sich aus dem Verständnis der realen Welt lösen

- Ein schlechtes Design kann grossen Schaden anrichten

- hoher Initialaufwand für die Architektur

Funktionales Paradigma

Programme bestehen ausschliesslich aus Funktionen

Die Programmlogik ergibt sich aus den funktionalen Zusammenhängen

Fehlen von imperativen Sprachelementen

+ Wenige, einfache, transparente Befehle

+ Ergibt kurzen und prägnanten Code

- Lernkurve ziemlich steil 

- geringe Verbreitung

Imperativ

Imperative Programmierung ist ein Programmierparadigma. Danach werden Programme so entwickelt, dass „ein Programm (Anm.: der Quellcode) aus einer Folge von Anweisungen besteht, die vorgeben, in welcher Reihenfolge was vom Computer getan werden soll. Die Bezeichnung geht auf lateinisch 'imperare' = 'anordnen, befehlen' zurück.

Deklarativ

Die deklarative Programmierung ist ein Programmierparadigma, bei dem die Beschreibung des Problems im Vordergrund steht. Der Lösungsweg wird dann automatisch ermittelt.