Zuweisungskompatibilität

Zuweisungskompatibilität liegt bei in Programmiersprachen formulierten Anweisungen vor, WENN Ausdrücke und die Variable aufgrund kompatibel Datumstyp Einander zugewiesen , Mannheimer verglichen oder Mannheimer verknüpft Werden Können.

Compiler oder Interpreter kann bei typsicheren Programmierung erfolgen in Quelltext prüfen, ob eine hinweisende Zuarbeitungskompatibilität besteht. [1] Um Eine Typverletzung zu beheben, Muss Durch den Compiler Beziehungsweise Interpreter Eine implizite oder Durch den Programmierer Eine Explizite Typumwandlung durchgeführt Werden. In Beide Fall Kann es leicht zu Programmfehlern kommen und DAHER sind in vielen Modernen Programmiersprachen implizite Typumwandlung nur in der ausnahme Zulässig sterben Wo, się stirbt Quelltexte Vereinfacht, aber keine Gefahr darstellt.

Strenge Zuweisungskompatibilität

Zuwendungen sind unbegrenzt zulässig, wenn eine Verstär- kungskompatibilität gegeben ist. Dazu Müssen sterben Datumstyp des zuzuweisenden Ausdruck und die Variable EXAKT übereinstimmen.

Bei Verbund Müssen Anzahl sterben, reihenfolge und sterben Datum Art große Komponente Dezember Verbund übereinstimmen sterben, war Characterized gewährleistet Werden Kann, Dass alle beteiligten die Variable mit dems Elbe Datentyp deklariert Worden Sind. [2] beispiel:

TYP Mann = Verbund von INTEGER alter; und REAL Groesse;
VARIABEL otto, emil: Männlich;
otto.alter: = 50;
otto.groesse: = 1,80;
Emil: = Otto; (Alle Attribute von "Otto" wurden "emil" zugewiesen)

Bei Feldern ist die strenge Zuweisungskompatibilität gut, wenn die Basisdatentyp und Länge identisch sind. beispiel:

TYPE Vorname = Feld der Größe 4 von CHARACTER; (Zeichenkette der Länge 4)
Name der VARIABLE-Person: Vorname;
personame: = "Hugo"; ( Dieser Constant "Hugo" ist zur Personenkompatibel zur Variablen "personename") personame
: = "Alexander"; (Diese Konstante "Alexander" ist nicht kompatibel mit den "Variablen").

Ein Sonder – Fall Sind offene Felder mit nicht deklarierter Länge: Bei Form Ellen Parameter Beziehungsweise dynastischen misch erst zur Laufzeit Vollständig definierten Felder reichen zur Erlangung wo Zuweisungskompatibilität Übereinstimmung jeweiligen Dezember stirbt Basisdatentyp wo Felder. [3] beispiel:

TYPE Vorname = Feld von CHARACTER; (Zeichenkette mit offener Länge)
Name der VARIABLE-Person: Vorname;
personame: = "Hugo"; (Die Variable "Personenname" wird dynastischen misch mit der Länge 4 Erzeugt)
Person name = "Alexander"; (Die Variable "Personenname" ist dynamisch dynamisch, diesmal mit der Länge 9)

Bei Prozedurvariablen Müssen sterben Anzahl, sterben Art, sterben reihenfolge und sterben Datumsart sehr Parameter und Rückgabewerte übereinstimmen, auch abgesehen vom Prozedurnamen sterben Unterschrift der Beiden Prozeduren übereinstimmen.

Zwei Instanzen in diesem Sinne der Liebe Kompatibel, wennnie genau derselben Klasse gehorhren. beispiel:

TYP Rechteck, Klasse und Methode flaechenberechnung ();
VARIABLE fenster1, fenster2: Rechteck;
fenster1.breite: = 200;
fenster1.hoehe: = 100;
fenster1.flaechenberechnung (); (Flächenberechnung für "fenster1" durchführen; Ergebnis = 20000)
fenster2: = fenster1; (Zuanweisung ist möglich, wie beide Instanze derselben Klasse gehört)
fenster2.flaechenberechnung (); (Flächenberechnung auch für "fenster2" durchführen; Ergebnis = 20000)

Logisches Kompatibilitätskit

Bei BESONDERS Strings Betrachtungsweise Ist Zwei Sogara identische Definition von nicht zuweisungskompatibel Datumstyp, Weil Zwar sterben Daten Eindeutig ineinander überführt Werden can (technische Kompatibilität), aber Zwei verschiedene Definition used gerechnet wird (logisch Kompatibilität). [4] Folgendes Beispiel wäre technisch korrekt, aber logisch logisch:

TYP Mann = Verbund von INTEGER alter; und REAL Groesse;
TYP Frau = Verbund von INTEGER alter; und REAL Groesse;
VARIABEL otto: Männlich;
VARIABLE ANNA: Frau;
otto.alter: = 50;
otto.groesse: = 1,80;
Anna: = Otto; (Zuwendung ist technisch möglich aber logisch nicht korrekt)

Um Logisch Programmfehler zu vermeiden, Ist Sölch Zuweisungen mit impliziter Typumwandlung in Einigen Programmiersprachen mit verhältnismäßig starken Typisierung , Wie zum beispiel Modula-2 oder Oberon , nicht Zulässig.

Zuweisungskompatibilität ohne Informationsverlust

In Gewiss Fall Können Informationen sterben, stirbt in Einem Datentyp abgelegt ist, und ohne Eindeutig Informationsverlust in EINEM other Datentyp überführt Werden.

Typische Beispiele sind zahnartige Datentypen mit unterschiedlicher Speichergröße. So kann ein Integer Mit 16 Bit Speichergröße Eindeutig in Einer vorzeichenbehafteten Integer-Variable Die mit 32 Bit Speichergröße abgelegt Werden, ohne that sterben ursprünglich Nur mit 16 – Bit – Zahl Verändert Wird bestimmt. Umgekehrt sind stirbt jedoch nicht immer Möglich, insbesondere unter der Beachtung von Vorzeichen und zu Grossen Zahlen.

Weitere Beispiele erstellen bei Zeichenketten oder anderen Feldern, deren feste Länge ist ist ist. Ihr kürzes Feld könnte gespeichert worden sein, aber nicht umgekehrt.

Zwei Instanzen sind ohne Information Verlustkompatibilitäten, wenn die komprimierten Klassen wie in der vorherigen Klasse.

Beispiel mit Zuarbeitungskompatibilität

zahl1: BYTE; (mit 8 Bit für Ganze Zahlen zwischen -128 bis +127)
zahl2: SHORTINT; (mit 16 Bit für große Zahlen zwischen -32768 bis +32767)
zahl1: = 55; (Zuwendung der Gänsezahl 55 an die Variable Variable "zahl1")
zahl2: = zahl1; (Zuweisung der Gänsezahl 55 aus der Variablen "zahl1" und der Variablen "zahl2")

Beispiel ohne Zuarbeitungskompatibilität

zahl1: BYTE; (mit 8 Bit für Ganze Zahlen zwischen -128 bis +127)
zahl2: SHORTINT; (mit 16 Bit für große Zahlen zwischen -32768 bis +32767)
zahl2: = 555; (Zuwendung der Gänse Zahl 555 und die Variable "zahl2")
zahl1: = zahl2; (555 aus der Variable "zahl2" an die Variable "zahl1")

Bei Einer Sölch Zuweisung Kann BEREITS den Compiler verhindert that ausführbaren Maschinencode Erzeugt Wird, da nicht sichergestellt Werden Können, Dass große Zahlen, Infos finden in der Variable „zahl2“ Gespeichert Ist, immer Auch ohne Informationsverlust in der Variable „zahl1“ abgelegt Werden sterben.

Bei fehlender Überprüfung Durch den Compiler Werden zwangsläufig und unbemerkt Ziffern abgeschnitten, so that bei nachfolgenden Berechnungen unter umständen Grobe Berechnungsfehler auftreten can, sterben zu analysieren Teilweise Schwierig Sind.

Zuweisungskompatibilität mit bedingtem Informationsverlust

Ein Sonder Fall – das ist von Zuweisung Ganze Zahlen Der Variable abhängen, sterben Gleitkommazahlen repräsentieren. Meist Kann ohne Gefahr von Programmfehlern toleriert Werden, große Ganze Zahlen implizit in Gleitkommazahlen umzuwandeln sterben, wenn es Rechenfehler (wenn überhaupt vorhanden) hierbei sehr klein ist. Auch stirbt Kann An einem beispiel verdeutlicht werden:

zahl1: LONGINT; (mein 64 Bit für Ganze Zahlen zwischen
 {\ displaystyle {-2} ^ {63}}
 bis
 {\ displaystyle {+2} ^ {63} -1}
)
zahl2: REAL; (mein 64 Bit für Gleitkommazahlen mit einer Mantisse mit max 14 Nachkommastellen nach IEEE 754 )
zahl1: = 9223372036854775807; (Zuwendung der Gänse Zahl
 {\ displaystyle {2} ^ {63} -1}
an de Variable "zahl1")
zahl2: = zahl1; (Gütiger Versuch der Zuwendung der Gänse Zahl
 {\ displaystyle {2} ^ {63} -1}
aus der die Variable "zahl1" An der Variable "zahl2"
 stirbt allerdings anschließend der gerundete Zahlenwert
 {\ displaystyle 9 {,} 22337203685478 \ cdot {10} ^ {18}}
 Enthält)

Der Fehler durch das Abwarten der letzten Nachkommastellen liegt auch hier in einer Größenordnung von{\ displaystyle {10} ^ {- 14}} und kann für praktisch alle Anwendungen nachvollziehbar sein.

Zuweisungskompatibilität mit definiertem Informationsverlust

Zwei Instanzen sind mit definierter Informationslust, wenn die Klasse eine von der gewählten Klasse zugewiesene Klasse angehoert. Alle Termine, die in die gleiche Kategorie eingeordnet sind, sind gleichbedeutend mit der Bedeutung des Satzes und wurden ignoriert, sie wurden von den Missbrauchern ignoriert, abgegrenzte Klasse hinzugefügter Attribute und Methoden . beispiel:

TYP Lebewesen = Verbund von INTEGER Alter, Gewicht;
TYPE Mensch = Lebewesen mit INTEGER intelligentquotient; (Der Datentyp "Mensch" bietet alle Eigenschaften von Lebewesen)
VARIABEL otto: Mensch;
VARIABLE Eukaryot: Lebewesen;
otto.alter: = 50;
otto.weight: = 75;
otto.intelligenzquotient: = 100;
Eukaryot: = Otto; (Zuwendung ist korrekt, das Attribut "intelligenter quotient" wird jedes Mal nicht zugewiesen)

Zuweisungen ohne Typsicherheit

Programmiersprachen, stirbt für sterben maschinennahe Programmierung konzipiert gerechnet wird, Wie zum beispiel C , hat oft gar Nur eine sehr keine oder schwache Typprüfung . Diese Toleranz führt leicht zu Programmfehlern .

Zeiger

In Mancha Programmiersprachen, Wie zum beispiel C, ist es Erlaubt, Beliebers Zeiger Wacholder Zeigervariablen zuzuweisen, ohne Dass geprüft Wird oder überhaupt geprüft Werden Kann, ob Datum Art sterben , wo referenzierten Daten Identisch oder kompatibel Ist.

Wahrheitswerte

In Einigen Ältere Programmiersprachen, zum beispiel Wie C, sind also Keine Eigener Datentyp für zweiwertige Boolesche Der Variablen . Zur treatment und VERARBEITUNG entsprechend Informationen Werden Dann Hauf gibt ganzzahlige Datentyp with the used Speicherbedarf klein Stein, wo Wobei Zahlenwert Null für den Wahrheitswert „Falsch“ und alle other Zahlenwerte für den Wahrheitswert „Wahr“ verwendung FINDEN. Auch hier Ergeben sich logisch Inkompatibilitäten und SOMIT Komplikationen , wenn mit binär Wert keine Arithmetik und mit Zahlen keine logistischen chen Verknüpfungen oder logistisch chen Der Betrieb durchgeführt Werden Können. Im folgenden Beispiel wird dieser Missbrauch verdeutlicht:

VARIABLE FalscheWahrheit1, FalscheWahrheit2, ErgebnisWahrhe: INTEGER (Ganze Zahlen)
falscheWahrheit1: = 0; (0 soll der Wahrheitswert falsch sein)
falscheWahrheit2: = 1; (1 soll der Wahrheits Wahr Einwohner)
ErgebnisWahrheit: = falscheWahrheit1 + falscheWahrheit2; (Ergebnis dieser unsinnigen arithmetischen Addition ist 1,
 war für den Wahrheitswert Wahr)
ErgebnisWahrheit: = falscheWahrheit1 UND falscheWahrheit2; (Ergebnis dieser logischen Konjunktion ist 0,
 war für den Wahrheitswert Falsch)
ErgebnisWahrheit: = falscheWahrheit2 + falscheWahrheit2; (Ergebnis ist 2 und zuweisungskompatibel,
 aber ohne logischer Sinn)

Ihre endgültige und korrekte Implementierung könnte wie folgt aussehen:

VARIABLE DIRECT Wahrheit1 , DirektWahrheit2, ErgebnisWahrhe: BOOLEAN (Wahrheitswerte)
targetWahrheit1: = FALSCH; (nur Wahrheitswerte sind zuweisungskompatibel)
directWahrheite2: = WAHR; (nur Wahrheitswerte sind zukunftcompatibel)
ergebnisWahrheit: = richWahrheit1 UND zielgerichtetWahrheit2; (nur logische Operatoren sind zulässig, und nur Ergebnisse
 mit Wahrheitswerten (hier FALSCH) mind zuweisungskompatibel)

Mix

Sinngemäß vergoldet das Same für die Verknüpfungen von Mengen . If hier bei dem Datumstyp und zulässige Betreiber nicht between Mengen (englisch = BITS) und Zahlen Unterschieden Wird, kommt es Wie zum beispiel bei der Bestimmung von Differenzmengen zu Interpretationsproblemen:

VARIABLE FalscheMenge1, FalscheMenge2, DifferenzMenge: INTEGER (Ganze Zahlen)
falscheMenge1: = 0; (0 soll eine leere Menge darstellen)
falscheMenge2: = 1; (1 Unze mit mir Element 1 Reporter Besitzer)
differenzMenge: = falscheMenge1 - falscheMenge2; ( Plan Ergebnis of this UNSINN arithmetische Subtraktion ist -1)

Ihre endgültige und korrekte Implementierung könnte wie folgt aussehen:

VARIABLE targetMenge1, targetMenge2, differenceMenge: BITSET (Mix)
targedMenge1: = {}; (soll eine leere Menge darstellen)
targetMenge2: = {1}; (Sie sind willkommen mit Element 1 Vertreter)
differenzMenge: = targetMenge1 - targetMenge2; (Nur Mengen-Operators Mind Zulässig,
 und nur Ergebnisse mit
 mengen)

Literatur

  • Hanspeter Mössenböck : Anhänge zum Sprachdefinition – Begriffsdefinitionen Kapitel A.12.1, in: Objektorientierte Programmierung in Oberon-2 , Verlag Springer 1998, ISBN 978-3-5406-4649-5

Weblinks

  • Stefan Middendorf, Reiner Sänger, Jörn Heid: Zuweisungskompatibilität in: Objektorientierte Programmierung mit Java, Die Sprache Java, Programmierhand und Referenz für sterben JavaTM 2 Platform , 3. Auflage 2002
  • Uwe Schmidt: Zuweisungskompatibilität in: Objektorientierte Programmierung mit Java, Fachhochschule Wedel

Einzelstunden

  1. Hochspringen↑ Kathleen Jensen, Niklaus Wirth, Andrew B. Mickel: Zuweisungsanweisungen , in: Pascal Bedienungsanleitung und berichten: ISO Pascal Standard , Kapitel 9.1.1, Seite 170, Verlag Springer, 1991, ISBN 978-0-3879-7649-5
  2. Hochspringen↑ László Boszormenyi-, Jürg Gutknecht, Gustav Pomberger: Symboltabelle Aktion , in: Die Schule von Niklaus Wirth: Die Kunst der Einfachheit , Seiten 61 und 62 Verlag Morgan Kaufmann 2000 ISBN 9781558607231
  3. Hochspringen↑ Joel Pitt: Volition Systeme Modula-2 – Programmiersprache , in: Infoworld vom 19. September 1983, Band 5, 38 Anzahl, Infoworld Media Group, ISSN  0199-6649
  4. Hochspringen↑ Kent Lee: Beispiel 8.2 , in: Programmiersprachen: ein aktiven Lernansatz , Kapitel 8, Seiten 228 und 229, 2008 ISBN 9780387794211