Was ist eine Programmiersprache

Hallo,

ich suche schon seit langem die Definition einer Programmiersprache bzw was eine Programmiersprache können muss. Ist z.B. HTML eine Programmiersprache oder nicht?
Ebenso suche ich nach einer Definition von OOP bzw den Eigenschaften einer OO Programmiersprache.

Vielen Dank im Voraus

Christian

ich suche schon seit langem die
Definition einer Programmiersprache bzw
was eine Programmiersprache können muss.

Eine Programmiersprache ist eine künstliche Sprache, die der Kommunikation mit dem Computer dient. Gegenüber der natürlichen Sprache ist die Syntax einer Programmiersprache wesentlich restrektiver gehalten und erlaubt im allgemeinen keine Abweichungen […] (Ja, das habe ich abgeschrieben … :smile:.

Was eine Programmiersprache können muß ist einfacher, sie muß auf jeden Fall einmal diverse Kontrollstrukturen wie bedingte Sprünge und Schleifen verstehen. Außerdem sollte man die Programm in kleine, übersichtliche Einheiten, sogenannte Prozeduren und Funktionen zerlegen können.

Ebenso suche ich nach einer Definition
von OOP bzw den Eigenschaften einer OO
Programmiersprache.

Nojo, mit einer objektorientierten Programmiersprache muß man einerseits Klassen erstellen bzw. auch Instanzen anderer Klassen erzeugen können (das sind dann die Objekte). Weiters wichtig ist Vererbung, das heißt man kann aus einer Klasse eine andere Klasse erzeugen die dann die Datenstruktur und Methoden erbt, in der neuen Klasse kann man aber Änderungen an Struktur, etc. vornehmen. Dann gäbe es noch den Polymorphismus, das sagt im Prinzip nichts andres aus, als daß man die Funktionalität eines Operators für Objekte einer Klasse neu definieren kann (du kannst z. B. eine eigene Routine schreiben die aufgerufen wird wenn zwei Instanzen deiner Klasse mit „+“ verknüpft werden, nennt man auch Operatoren überladen).

Korrigierts mich irgendwer wenn ich jetzt Blödsinn geschrieben habe … :o)

Grüße, Robert

Hm, irgendwie habe ich mich in meiner Frage nicht ganz gut ausgedrückt, denn ich kenne schon einige Programmiersprachen (C, C++, PASCAL, BASIC, LabVIEW, …) aber ich suche nach einer Definition der zu einer Programmiersprache gehörenden Syntaxelemente. Also z.B. dass Schleifen vorhanden sein müssen o.ä. Also z.B. C enthält jede Menge Elemente, die es z.B. in HTML nicht gibt. Aber HTML ist auch eine Form an einen Computer anweisungen zu geben…

Kennt jemand einen Link oder ein gutes Buch (z.B.: Philosophieren über Programmiersprachen :wink:zu der Frage?

Vielen Dank
Christian

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo!

ich suche schon seit langem die
Definition einer Programmiersprache bzw
was eine Programmiersprache können muss.
Ist z.B. HTML eine Programmiersprache oder
nicht?

HTML ist keine Programmiersprache, sondern nur eine Seitenbeschreibungssprache. Du kannst damit nur bestimmen, wie das Layout Deiner HTML-Seite im Browser aussehen soll.

Jede Programmiersprache muß drei Grunkomponenten unterstützen:

  • Sequenz (Bsp.: führe x aus, danach y)

  • Fallunterscheidung (Bsp.: wenn a, dann b, ansonsten c)

  • Iteration (Bsp.: Schleife, durchlaufe die Anweisung x y-Mal)

Dann gäbe es noch den Polymorphismus, das
sagt im Prinzip nichts andres aus, als
daß man die Funktionalität eines
Operators für Objekte einer Klasse neu
definieren kann (du kannst z. B. eine
eigene Routine schreiben die aufgerufen
wird wenn zwei Instanzen deiner Klasse
mit „+“ verknüpft werden, nennt man auch
Operatoren überladen).

Ich verstehe Dein Beispiel nicht so ganz. Wie meinst Du das?

Polymorphismus gewährleistet, daß unterschiedlichen Klassen angehörende Objekte aufgrund ein und derselben Nachricht verschieden reagieren können. Es lassen sich 3 verschiedene Arten unterscheiden:

  • Vererbung: Methode wird in Superklasse spezifiziert und in Subklasse implementiert.

  • Überschreiben: Methode wird in Superklasse implementiert, in Subklasse verändert.

  • Überladen: Implementierung mehrerer Methoden mit unterschiedlicher Schnittstelle (Parameter) in der selben Klasse.

Grüße, Tanja

Polymorphismus gewährleistet, daß
unterschiedlichen Klassen angehörende
Objekte aufgrund ein und derselben
Nachricht verschieden reagieren können.

Hmmm, das hört sich gut an. :o)

Ich nehme an ich meine genau das, ich kenne es halt nur für die Operatoren, also das wenn ich zwei Objekte der Klasse x addiere ganz was andres passiert als zwei Objekte der Klasse y, und das was passiert kann ich halt selber implementieren. Und irgendwer hat mir mal gesagt, daß das Polymorphismus heißt. :smile:

Es lassen sich 3 verschiedene Arten
unterscheiden:

Das verstehe ich wiederum nicht, wieso ist Vererbung und Überschreiben eine Art des Polymorphismus?

Grüße, Robert

Hallo!

Polymorphismus gewährleistet, daß
unterschiedlichen Klassen angehörende
Objekte aufgrund ein und derselben
Nachricht verschieden reagieren können.

Hmmm, das hört sich gut an. :o)

Ich nehme an ich meine genau das, ich
kenne es halt nur für die Operatoren,
also das wenn ich zwei Objekte der Klasse
x addiere ganz was andres passiert als
zwei Objekte der Klasse y, und das was
passiert kann ich halt selber
implementieren. Und irgendwer hat mir mal
gesagt, daß das Polymorphismus heißt. :smile:

Also irgendwie finde ich nicht, daß das ein Beispiel für Polymorphismus ist, aber na ja… :wink:

Hier mal ein Konstruktor (in Java), der Polymorphismus etwas besser verdeutlicht:

Azubi(String name, String vorname, int gehalt)
{
// Konstruktor der Basisklasse Mitarbeiter wird aufgerufen
super(name,vorname,gehalt);
// Initialisierung der Azubi-Datentypen
abgelegte_Pruefungen = 0;

}

Es lassen sich 3 verschiedene Arten
unterscheiden:

Das verstehe ich wiederum nicht, wieso
ist Vererbung und Überschreiben eine Art
des Polymorphismus?

Jetzt mußte ich doch mal mein Skript zur Vorlesung „Objektorientiertes Systemdesign“ hervorkramen. Da wird Polymorphismus durch Vererbung, Überschreiben und Überladen auf 4 Seiten durch Grafiken beschrieben. Wenn Du Interesse daran hast, kann ich es Dir einscannen und mailen.

Grüße, Tanja

Hm, irgendwie habe ich mich in meiner
Frage nicht ganz gut ausgedrückt, denn
ich kenne schon einige
Programmiersprachen (C, C++, PASCAL,
BASIC, LabVIEW, …) aber ich suche nach
einer Definition der zu einer
Programmiersprache gehörenden
Syntaxelemente. Also z.B. dass Schleifen
vorhanden sein müssen o.ä. Also z.B. C
enthält jede Menge Elemente, die es z.B.
in HTML nicht gibt. Aber HTML ist auch
eine Form an einen Computer anweisungen
zu geben…

[…]

Ich glaube, Du wirfst da ein paar Sachen durcheinander. Zuerst einmal folgendes: Eine Sprache (für Computer) wird immer durch eine Grammatik (sprich die Syntax) und durch die Bedeutung gewisser Konstrukte (sprich die Semantik) definiert.
Die Grammatik kann man in Backus-Naur-Form (kurz BNF) angeben, die eine bestimmte Art und Weise darstellt Grammatiken aufzuschreiben und mit der man 1) alle gültigen Terme der Grammatik erzeugen kann und 2) einen Term auf Gültigkeit (z.B. ist dies ein gültiges C-Statement oder ist es ein Syntax-Fehler) abprüfen kann.

Die Semantik beschreibt nun, was ein gültiger Term bedeutet.
Für HTML ist dies die Darstellung von z.B. Fett.
In C bedeutet i++ den Inhalt der Variablen i holen und diesen um eins erhöhen. Man kann die Bedeutung jedoch sehr genau durch mathematische Terme (z.B. Prädikatenlogik) beschreiben, wenn man ein Modell (uff, schon wieder ein mathematischer Begriff :wink:) hat, in dem man einen Term interpretieren möchte.

Für die Definition einer Programmiersprache , d.h. also die Erweiterungen was ich hier als Sprache dargestellt habe, dafür hat Tanja Schaettler (wie ich finde) eine sehr gute Definition gegeben.

Was ich sehr lustig finde, ist die Tatsache, daß schon kleinste prädikatenlogische Terme demnach einen Teil einer Programmiersprache sind.
Aber das wird wohl auch für alle Sprache gelten, mit denen man Algorithmen beschreiben kann.

MfG Frank