Zum Ende der Metadaten springen
Zum Anfang der Metadaten

You are viewing an old version of this content. View the current version.

Unterschiede anzeigen View Version History

Version 1 Nächste Version anzeigen »

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.[1] Sie setzen sich üblicherweise aus schrittweisen Anweisungen aus erlaubten (Text-)Mustern zusammen, der sogenannten Syntax.

Während die ersten Programmiersprachen noch unmittelbar an den Eigenschaften der jeweiligen Rechner ausgerichtet waren, werden heute meist problemorientierte oder auch (allgemeiner) höhere Programmiersprachen verwendet, die eine maschinenunabhängigere[2] und somit für den Menschen leichter verständliche Ausdrucksweise erlauben. In diesen Sprachen geschriebene Programme können automatisiert in Maschinensprache übersetzt werden, welche unmittelbar von einem Prozessor ausgeführt werden kann. Zunehmend kommen auch visuelle Programmiersprachen zum Einsatz, welche den Zugang zu Programmiersprachen erleichtern.

Bei deklarativen Programmiersprachen ist der Ausführungsalgorithmus schon vorab festgelegt und wird nicht im Quelltext ausformuliert/beschrieben, sondern es werden nur seine Anfangswerte und Bedingungen festgelegt, sowie die Regeln, die das Ergebnis erfüllen muss.

Die Programmiersprachen lassen sich in Kategorien einteilen, die sich im evolutionären Verlauf der Programmiersprachen-Entwicklung als sog. Programmierparadigmen gebildet haben. Grundlegend sind die Paradigmen der strukturierten, der imperativen, der deklarativen und der objektorientierten Programmierung – mit jeweils weiteren Unterteilungen. Eine Programmiersprache kann jedoch auch mehreren Paradigmen gehorchen, das heißt die begriffsbestimmenden Merkmale mehrerer Paradigmen unterstützen.

Strukturierte Programmiersprachen[Bearbeiten | Quelltext bearbeiten]

Hauptartikel: Strukturierte Programmierung

Strukturierte Programmierung ist Anfang der 1970er Jahre auch aufgrund der Softwarekrise populär geworden. Es beinhaltet die Zerlegung eines Programms in Unterprogramme (prozedurale Programmierung) und die Beschränkung auf die drei elementaren Kontrollstrukturen Anweisungs-Reihenfolge, Verzweigung und Wiederholung.

Programmierparadigmen

Imperative Programmiersprachen

Ein in einer imperativen Programmiersprache geschriebenes Programm besteht aus Anweisungen (latein. imperare = befehlen), die beschreiben, wie das Programm seine Ergebnisse erzeugt (zum Beispiel Wenn-dann-Folgen, Schleifen, Multiplikationen etc.).

Deklarative Programmiersprachen

Den genau umgekehrten Ansatz verfolgen die deklarativen Programmiersprachen. Dabei beschreibt der Programmierer, welche Bedingungen die Ausgabe des Programms (das Was) erfüllen muss. Wie die Ergebnisse konkret erzeugt werden, wird bei der Übersetzung, zum Beispiel durch einen Interpreter festgelegt. Ein Beispiel ist die Datenbankabfragesprache SQL.

Ein Programm muss nicht unbedingt eine Liste von Anweisungen enthalten. Stattdessen können grafische Programmieransätze, zum Beispiel wie bei der in der Automatisierung verwendeten Plattform STEP 7, benutzt werden.

Die Art der formulierten Bedingungen unterteilen die deklarativen Programmiersprachen in logische Programmiersprachen, die mathematische Logik benutzen, und funktionale Programmiersprachen, die dafür mathematische Funktionen einsetzen.

Objektorientierte Programmiersprachen

Hauptartikel: Objektorientierte Programmierung

Im Gegensatz zur prozeduralen Programmierung, wo zuerst die verarbeitenden Prozeduren im Fokus stehen („Was will ich rechnen?“) und die Daten „irgendwie durchgeschleust“ werden, konzentriert sich die objektorientierte Programmierung zunächst auf die Daten: „Mit welchen Dingen (der Real-/Außenwelt) soll gearbeitet werden? Welche Attribute/Daten beschreiben diese (→ Objekt-Klassen)?“ Erst anschließend wird die Handhabung zu den Objekten entworfen (→ Methoden, „was kann man mit diesem Objekt machen? Was kann dieses Objekt für das Programm machen?“). Die Methoden werden den Daten zugeordnet, und zusammen werden beide in Objekten/Objekt-Klassen zusammengefasst. Objektorientierung verringert die Komplexität der entstehenden Programme, macht sie wiederverwendbarer und bildet die Realität meist genauer ab als dies bei rein prozeduraler Programmierung der Fall ist.

Objektorientierung bietet die folgenden Paradigmen:[6]

Datenkapselung

Verbergen von Implementierungsdetails: Ein Objekt bietet dem Verwender eine festgelegte Menge an Möglichkeiten (Methoden), es zu ändern, zu beeinflussen, etwas zu berechnen oder Auskünfte zu erhalten. Darüber hinausgehende Hilfsroutinen oder Zustandsspeicher werden verborgen, auf sie kann nicht (direkt) zugegriffen werden.

Vererbung, Spezialisierung und GeneralisierungVererbung heißt vereinfacht, dass eine abgeleitete Klasse die Methoden und Attribute der Basisklasse ebenfalls besitzt, also erbt. Zudem kann sie zusätzliche Attribute und Eigenschaften besitzen und zusätzliche Handlungsmöglichkeiten bieten – eine abgeleitete Klasse ist ein „Spezialfall“ der Basisklasse.
Umgekehrt kann gleiche Funktionalität mehrerer Klassen in eine gemeinsamen Basisklasse „ausgelagert“ werden, wo sie nur noch 1 Mal programmiert ist, was Code spart, leichter wartbar ist und ggf. für weitere Spezialklassen wiederverwendbar ist – sie erben einfach von dieser Basisklasse; die Basisklasse beschreibt das generelle Verhalten aller abgeleiteten (Spezial-)Klassen.

Polymorphie

Ein Objekt einer Spezialklasse kann stets auch als Mitglied der Basisklasse betrachtet werden. Dadurch kann in einer Variable, die ein Objekt der Basisklasse aufnehmen kann, auch ein Objekt einer abgeleiteten Klasse gespeichert werden, denn aufgrund der Vererbung bietet es ja die Methoden und Attribute der Basisklasse.

Quelle: Programmiersprache – Wikipedia

Kriterien zur Beurteilung von Programmiersprachen

Kapselung: Die Programmiersprache muss die Moeglichkeit bieten, Daten, Methoden und Regeln zu einer syntaktischen Einheit zusammenzufassen. Diese Komponenten eines ADTs werden in der Programmiersprache zu einer Klasse zusammengefasst.

  1. Kapselung: Die Programmiersprache muss die Moeglichkeit bieten, Daten, Methoden und Regeln zu einer syntaktischen Einheit zusammenzufassen. Diese Komponenten eines ADTs werden in der Programmiersprache zu einer Klasse zusammengefasst.

  2. Instanzierung: Es muss moeglich sein, Objekte als konkrete Realisierung einer Klasse zu definieren. Ein Objekt ist ein Element aus der Menge der Gegenstaende, die durch den ADT beschrieben wird, und muss alle Eigenschaften haben, die dabei festgelegt wurden.

  3. Schutz: Einzelne Komponenten einer Klasse muessen gegen den unkontrollierten Zugriff geschuetzt werden koennen. Der Zustand eines Objekts darf nur veraenderbar sein durch die Anwendung einer Methode der entsprechenden Klasse.

  4. Trennung von Spezifikation und Implementierung: Es muss moeglich sein, die Eigenschaften einer Klasse getrennt von deren Implementierung zu definieren. Hierzu ein Beispiel: Ein Stack laesst sich durch einen ADT beschreiben. Eine Push-Operation bedeutet zum Beispiel, dass aus einem Stack und einem Element ein neuer Stack gebildet wird. Die naechste Pop-Operation liefert bei einem nichtleeren Stack das letzte Element, das mit "push" auf den Stack gelegt wurde. Ob die Elemente des Stacks in der Implementierung als Vektor mit fester Anzahl von Elementen oder als verkettete Liste gespeichert werden, hat keine Auswirkung auf die Eigenschaften. Diese Forderung ist deshalb so wichtig, weil damit die Trennung zwischen der Entwurfsphase und der Realisierung sauber vollzogen werden kann. Der Entwurf definiert Eigenschaften, die bei der Realisierung in ein Programm umgesetzt werden. Durch die Trennung ist es moeglich, zu einem spaeteren Zeitpunkt die Realisierung ohne Auswirkung auf die Eigenschaften zu veraendern.

  5. Vererbung: Eine Klasse muss ihre Eigenschaften an andere Klassen weitergeben koennen. Dies bedeutet, dass die Eigenschaften einer Basisklasse in einer davon abgeleiteten Klasse verfuegbar sind. Auch dazu ein Beispiel: In einer Verwaltung gibt es verschiedene Kategorien von Personen, naemlich Kunden, Lieferanten und Mitarbeiter. Die gemeinsamen Eigenschaften werden in einer Basisklasse zusammengefasst, in den davon abgeleiteten Klassen werden jeweils nur die zusaetzlichen Eigenschaften definiert. Es muss moeglich sein, dass eine Klasse durch Mehrfachvererbung von mehreren Basisklassen Eigenschaften uebernimmt.

  6. Verzicht auf ein Hauptprogramm: Ein objektorientiertes System besitzt kein Hauptprogramm im herkoemmlichen Sinne. Es besteht vielmehr aus einer Menge von Objekten, die untereinander Nachrichten austauschen, neue Objekte erzeugen und Objekte vernichten koennen. Der Ablauf der Bearbeitung ergibt sich aus dem Datenaustausch zwischen den Objekten. Die Zielsetzung der Nebenlaeufigkeit fordert sogar, dass gleichzeitig mehrere Objekte Aktionen ausfuehren koennen, was im Idealfall in einem Mehrprozessor-System zu einer echten Parallelverarbeitung fuehren koennte.

Quelle: An sechs Kriterien zur Beurteilung von Programmiersprachen gemessen - computerwoche.de

  • Keine Stichwörter