Verwendung von Namen
Ein Name steht nicht für sich selbst, sondern für das Benannte (Bezeichnete).
Entitäten
Bei der sprachlichen Kommunikation werden bestimmte Modelle zugrunde gelegt. Im Rahmen solch eines Modelles werden bestimmte Dinge (durch Vereinbarung) als existent angesehen. Diese Dinge werden auch die Entitäten des Modells genannt.
Im Alltag verwendet man das Modell (Weltbild) des naïven Realismus, demzufolge beispielsweise der Mond eine Entität ist (existiert). In der Mathematik verwendet man Modelle der Mengenlehre, in denen Mengen oder Funktionen Entitäten sind. In bestimmten Märchen gibt es Modelle, in denen Drachen, Hexen oder Einhörner existieren. In einer Programmiersprache verwendet man Quelltextstrukturmodelle und Programmausführungsmodelle, in denen beispielsweise Anweisungen oder Werte Entitäten sind. Eine Entität kann also alles mögliche sein, je nach dem verwendeten Modell.
Entitäten werden in dieser Lektion über Namen deshalb erwähnt, weil sie es sind, die durch Namen benannt werden können.
Wenn man einen Namen verwendet, um von einer Entität zu sprechen, dann verwendet man den Namen so als sei er die Entität. Man sagt also nicht—umständlich—„Peter ist ein Name des Hausmeisters,” sondern einfach „Peter ist der Hausmeister,“—wenn keine Mißverständnisse möglich sind.
Bindung
In einem Text einer formalen Sprache steht ein Name in einem bestimmten Zusammenhang (Gültigkeitsbereich und Ausführungskontext) für eine bestimmte Entität. Die Beziehung zwischen dem Namen und dem Benannten wird als Bindung bezeichnet, man sagt der Name sei an das Benannte gebunden. Ein Name ist ein Teil des Quelltextes, eine Entität stellt man sich dagegen meist als etwas außerhalb des Quelltextes Existierendes vor. Die Bindung stellt also in der Regel eine Beziehung von einem Quelltextbezeichner zu einer Entität (vom Quelltext zu Elementen eines bestimmten Modells) dar. Die Entität, an die ein Name gebunden ist, kann man auch als die Bedeutung dieses Namens bezeichnen.
Name, Bindung und Entitaet [statisches Strukturdiagramm]|
Quelltext | Modell
|
.-----------------. | .-----------------.
| Name | | Bindung | Entitaet |
| (im Quelltext) |-------------------------->| (ausserhalb |
| | | | des Quelltexts) |
'-----------------' | '-----------------'
|
|
Definition
Eine Festlegung mit der für einen Namen innerhalb eines bestimmten Textes (Gültigkeitsbereichs) eine bestimmte Bindung an eine bestimmte Entität bestimmt wird, nennt man eine Definition.
So kann man beispielsweise den Namen "x" als Name für den Wert 2 definieren. Solch eine Definition kann auch folgendermaßen geschrieben werden.
x ≝ 2
Dadurch ist der Name "x" dann an den Wert "2" gebunden. (Obwohl das Numeral "2" Teil des Quelltextes ist, erfolgt die Bindung in diesem Beispiel an den Wert 2, der selber nicht Teil des Quelltextes ist.)
In allen Verwendungen steht der Name "x" dann innerhalb seines Gültigkeitsbereichs für den Wert 2.
Bindung des Namens "x" an den Wert 2 [statisches Strukturdiagramm]|
Quelltext | Modell
|
.-----------------. | .-----------------.
| x:Name | | Bindung | 2:Wert |
| ------ |-------------------------->| ------ |
| | | | |
'-----------------' | '-----------------'
|
|
Verwendung
Wird ein definierter Name verwendet, so steht er für seine Bedeutung und nicht für sich selbst.
z ≝ x · 3
In dem Ausdruck "x · 3" steht der Name "x" also nach vorangehender Definition "x ≝ 2" für 2, so daß der Ausdruck "x · 3" als "2 · 3" zu lesen ist.
Das Ersetzen eines Namens durch seine Bedeutung wird auch als Auflösung des Namens bezeichnet.
Im mathematischen Schriftsatz ist es üblich Namen, die für eine gerade vereinbarte Bedeutung stehen, kursiv zu schreiben. Auch in dieser Lektion wird eine Name kursiv gesetzt, falls er für das Benannte steht und nichtkursiv, falls er für sich selbst steht.
Gültigkeitsbereich
Durch die Definition eines Namens wird dieser nicht für alle möglichen Situationen und Zeiten festgelegt. Ein Name hat eine Bedeutung im Rahmen einer festgelegten Bindung nur innerhalb eines bestimmten Zusammenhangs, wie beispielsweise eines bestimmten Textes. Dieser Zusammenhang wird auch als Gültigkeitsbereich (scope ) oder als Textbereich des Namens bezeichnet. Er wird in formalen Sprachen oft ausdrücklich als Bereich innerhalb des Textes gekennzeichnet.
In vielen Programmiersprachen ist der Gültigkeitsbereich ein Teil des Programmtexts. Ein Name, der in einem Quelltext verwendet wird, hat seinen Sinn also nur innerhalb dieses Quelltextes. Der Anfang und das Ende eines Gültigkeitsbereiches werden manchmal beispielsweise durch geschweifte Klammern markiert.
{ x ≝ 2 }
In dem folgenden Beispiel wird der Textbereich durch geschweifte Klammern gekennzeichnet. Der Name "z" wird als "2 · 3" definiert, da seine Definition mit der Definition "x ≝ 2" in einem Textbereich ist.
{ x ≝ 3 }
{ x ≝ 2
z ≝ x · 3 }
Innerhalb eines Gültigkeitsbereichs darf ein Name nur höchstens einmal definiert werden. (Eine Ausnahme für den Fall verschiedener Namensräume wird später behandelt.) Damit ist die mehrfache Definition des Namens "x" innerhalb eines Gültigkeitsbereichs fehlerhaft.
{ x ≝ 3
x ≝ 2 }
Die Auswirkung solch fehlerhafter mehrfacher Definitionen wird auch als Namenszusammenstoß (name clash ) oder Namenskonflikt bezeichnet.
Um solche Namenskonflikte zu vermeiden, sollte der Gültigkeitsbereich eines Namens immer möglichst klein gewählt sein. Das macht die Texte auch übersichtlicher, weil bei einem kleinen Gültigkeitsbereich die Definition und alle Verwendungen eines Namens relativ nahe zusammenstehen und insgesamt relativ wenige Namen definiert sind. In einem großen Gültigkeitsbereich können viele Namen enthalten sein, und es kann schwierig werden, die Definition oder alle Verwendungen eines Namens zu finden.
Substitutionsprinzip
In dem folgenden Beispiel wird zunächst der durch "2" bezeichnete Wert als "x" benannt.
Das durch "x · 2" Bezeichnete wird mit dem Namen "z" benannt.
{ x ≝ 2
z ≝ x · 3 }
In der zweiten Definition kann der durch die erste Definition bestimmte Name "x" durch seine Bedeutung "2" substituiert (ersetzt) werden. Diese Substitution ändert nichts an der Bedeutung des Textes. Nach der Substitution ergibt sich dann der folgende Text für die Definition von "z".
z ≝ 2 · 3
Egal ob nun der Name "x" oder der Wert 2 in der Definition verwendet wurde oder nicht: Der Name "z" steht in beiden Fällen für 2 · 2.
Substitutionsprinzip Eine Verwendung eines Namens kann durch (eine andere Schreibweise für) die Bedeutung des Namens ersetzt werden, ohne an der Bedeutung des Textes etwas zu ändern.
Nominelle Transparenz
Da ein Name in einer formalen Sprache immer für das Benannte steht, kann in Texten einer formalen Sprache in der Regel nicht von dem Namen selber gesprochen werden. (Eine Ausnahme bilden einzelne Sprachen, die dafür besondere Vorkehrungen enthalten.) Man kann auch sagen: Ein Name ist keine Entität. Man kann auch sagen, ein Name sei transparent (durchsichtig), weil man durch ihn hindurch immer die benannte Entität sieht und nicht den Namen selber.
In den meisten Programmiersprachen kann ein Programm also auf die darin verwendeten Namen nicht zugreifen. Diese Konvention wirkt sich beispielsweise dahingehend aus, daß es in der Regel nicht möglich ist, in einem Programm beispielsweise ein Programmstück zu schreiben, das automatisch alle in dem Programm verwendeten Namen ausgibt. Genauso ist es in der Regel nicht möglich, daß ein Programm irgendwelche Texte einliest und mit Variablennamen vergleicht. Auch kann beispielsweise im allgemeinen auch kein Programmstück geschrieben werden, das für ein beliebiges Programm beispielsweise den ersten Buchstaben des ersten definierten Namens ausgibt. (In einigen Programmiersprachen ist dies aber doch möglich.)
Ein Text einer formalen Sprache wird eben verwendet, um über Entitäten zu sprechen und nicht über die im Text selber verwendeten Namen oder den Quelltext selber. Man kann auch sagen, daß externe Texte, also solche Texte, die ein Programm ausgeben oder einlesen kann, nicht zum Gültigkeitsbereich eines Namens gehören, der meist ein bestimmter Teil des Quelltextes ist.
Nominelle Transparenz (Fortsetzung)
“Namen sind Schall und Rauch.”
Redensart
Die nominelle Transparenz wirkt sich auch dahingehend aus, daß die Schreibweise eines Names für die Bedeutung eines Textes keiner Rolle spielt, weil diese gar nicht „sichtbar“ ist. Welcher Name gewählt wurde, ist also egal.
{ x ≝ 2
z ≝ x · 3 }
Es wurde ja schon festgestellt, daß die folgende Definition des Namens "z" die gleichen Bedeutung hat, wie die vorangehende.
z ≝ 2 · 3
Wenn in dem gesamten Gültigkeitsbereich alle Vorkommen eines Namens (unter Beachtung einiger Regeln) durch einen anderen ersetzt werden, dann ändert sich ebenfalls nichts an der Bedeutung.
In dem gegebenen Gültigkeitsbereich beispielsweise der Name "x" durch den Namen "y" ersetzt werden. Es ergeben sich dann die beiden folgenden Definitionen.
{ y ≝ 2
z ≝ y · 3 }
Die Bedeutung der zweiten Definition ist wieder die gleiche.
Wenn man einen Namen ändert, muß man allerdings darauf achten, daß der Name überall in seinem Gültigkeitsbereich verändert wird. In dem folgenden Gültigkeitsbereich ist die Bedeutung der zweiten Definition verändert, weil der Name "x" nur in einem Fall durch den Namen "y" ersetzt wurde.
{ x ≝ 2
z ≝ y · 3 }
Wenn man einen Namen ändert, muß man auch darauf achten, daß der neuen Name nicht schon im selben Gültigkeitsbereich verwendet wird. In dem folgenden Gültigkeitsbereich ist die Bedeutung der zweiten Definition verändert, weil der Name "x" durch den Namen "z" ersetzt wurde, der aber schon bisher im selben Bereich auch verwendet wurde. Die sich ergebende zweimalige Definition eines Namens innerhalb desselben Gültigkeitsbereichs ergibt in der Regel keinen Sinn.
{ z ≝ 2
z ≝ z · 3 }
Die Ersetzung durch einen anderen Namen beläßt die Bedeutung auch nur dann unverändert, wenn im Text kein Bezug auf spezielle Eigenschaften des gewählten Namens genommen wird, wie beispielsweise auf seine Länge oder seine Schreibweise. Das ist in den meisten formalen Sprachen aber ohnehin möglich.
Unter Beachtung dieser Regeln kann ein Name also durch einen anderen Namen ersetzt werden. Der gewählte Name selber hat dann also gar keine Relevanz, man kann daher auch sagen, er sei „transparent“.
Nominelle Transparenz Wird ein Name in einem Text einer formalen Sprache überall in seinem Bereich durch einen anderen, noch nicht verwendeten, Namen ersetzt, so ändert sich dadurch nichts an der Bedeutung des gesamten Texts, wenn dieser nicht irgendwie den Namen selber zum Thema hat.
Wenn sich beispielsweise alle Menschen einigten, statt „Lehrling“ den Begriff „Auszubildender“ zu verwenden, dann wäre ein Verständigung wieder ohne Mißverständnisse möglich. In der Kurzgeschichte „Ein Tisch ist ein Tisch “ von Peter Bichsel beschließt ein Mann, dem Bett „Bild“ zu sagen und weitere Dinge umzubenennen. Da diese Umbenennung jedoch nicht von allen Zeitgenossen im deutschen Sprachraum mitgemacht wurde, war eine Verständigung bald nicht mehr möglich.
Andere Beispiele von Namenswechseln aus dem Alltag, sind die Umbenennung durch Heirat oder die Änderung eines Künstler- oder Produktnamens. Da Namen natürlicher Sprachen aber meist durch ihre Etymologie und Geschichte mit anderen Wörtern verbunden sind und somit oft vielfältige spezifische Konotationen aufweisen, ist ein Name in der Umgangssprache selten ganz bedeutungslos und eine Umbenennung erfolgt in einer natürlichen Sprache selten ganz ohne Bedeutungsverschiebung. Das liegt daran, daß man bei natürlichen Sprachen fast nie in allen Verwendungen eines Namens den Namen durch einen anderen ersetzen kann, weil man nicht so viel Einfluß hat und die Verwendungen teilweise auch in der nicht mehr änderbaren Vergangenheit liegen. Außerdem reagieren Menschen auch auf Namensähnlichkeiten, die bei formalen Sprachen im allgemeinen keine Rolle spielen.
Namensräume
Ein Name kann in einem Gültigkeitsbereich verschiedenen Bedeutungen haben (überladen sein), wenn mehrere Namensräume verwendet werden. Jeder Namensraum kann einem Namen dann eine bestimmte Bedeutung zuordnen.
Beispielsweise könnte es in einer formalen Sprache möglich sein, Definitionen zu benennen, etwa als "a" und "b".
{ a : x ≝ 2
b : z ≝ x · 3 }
Wenn für die Namen von Definitionen ein eigener Namensraum existiert, dann kann es innerhalb eines Gültigkeitsbereichs sowohl eine Definition mit dem Namen "x" (beispielsweise "y ≝ 7") geben als auch einen Wert mit dem Namen "x" (beispielsweise "2").
{ w: x ≝ 2
x: y ≝ 7
y: z ≝ x · 3 }
Es ergeben sich in den beiden Namensräumen dann folgende Zuordnungen.
Definitionen w: "x ≝ 2", x: "y ≝ 7", y: "z ≝ x · 3".
Werte x: 2, y: 7, z: 6.
Der Name "x" kommt also mit unterschiedlicher Bedeutung in beiden Namensräumen vor.
In der Definition "z ≝ x · 3" muß dann zur Auflösung des Namens "x" der Namensraum der Werte herangezogen werden, da eine Definition an der Stelle der Verwendung von "x" nicht vorgesehen ist, somit ergibt sich nach der Auflösung die Definition "z ≝ 2 · 3".