www.wikidata.de-de.nina.az
Zuweisungskompatibilitat liegt bei in Programmiersprachen formulierten Anweisungen vor wenn Ausdrucke und Variablen aufgrund kompatibler Datentypen einander zugewiesen miteinander verglichen oder miteinander verknupft werden konnen Compiler oder Interpreter konnen bei typsicheren Programmiersprachen bereits im Quelltext prufen ob eine hinreichende Zuweisungskompatibilitat vorliegt 1 Um eine Typverletzung zu beheben muss durch den Compiler beziehungsweise Interpreter eine implizite oder durch den Programmierer eine explizite Typumwandlung durchgefuhrt werden In beiden Fallen kann es leicht zu Programmfehlern kommen und daher ist in vielen modernen Programmiersprachen die implizite Typumwandlung nur in den Ausnahmen zulassig wo sie die Quelltexte vereinfacht aber keine Gefahr darstellt Inhaltsverzeichnis 1 Strenge Zuweisungskompatibilitat 1 1 Logische Kompatibilitat 2 Zuweisungskompatibilitat ohne Informationsverlust 2 1 Beispiel mit Zuweisungskompatibilitat 2 2 Beispiel ohne Zuweisungskompatibilitat 3 Zuweisungskompatibilitat mit geringem Informationsverlust 4 Zuweisungskompatibilitat mit definiertem Informationsverlust 5 Zuweisungen ohne Typsicherheit 5 1 Zeiger 5 2 Wahrheitswerte 5 3 Mengen 6 Literatur 7 Weblinks 8 EinzelnachweiseStrenge Zuweisungskompatibilitat BearbeitenZuweisungen sind uneingeschrankt zulassig wenn eine strenge Zuweisungskompatibilitat gegeben ist Dazu mussen die Datentypen des zuzuweisenden Ausdrucks und der Variable exakt ubereinstimmen Bei Verbunden mussen die Anzahl die Reihenfolge und die Datentypen aller Komponenten des Verbunds ubereinstimmen was dadurch gewahrleistet werden kann dass alle beteiligten Variablen mit demselben Datentyp deklariert worden sind 2 Beispiel TYPE Mann Verbund von INTEGER alter und REAL groesse VARIABLE otto emil Mann otto alter 50 otto groesse 1 80 emil otto Alle Attribute von otto werden emil zugewiesen Bei Feldern ist die strenge Zuweisungskompatibilitat nur gegeben wenn der Basisdatentyp und die Lange identisch sind Beispiel TYPE Vorname Feld der Grosse 4 von CHARACTER Zeichenkette der Lange 4 VARIABLE personename Vorname personename Hugo Die Konstante Hugo ist zuweisungskompatibel zur Variablen personenname personename Alexander Die Konstante Alexander ist nicht zuweisungskompatibel zur Variablen personenname Ein Sonderfall sind offene Felder mit nicht deklarierter Lange Bei formalen Parametern beziehungsweise dynamisch erst zur Laufzeit vollstandig definierten Feldern reicht zur Erlangung der Zuweisungskompatibilitat die Ubereinstimmung des jeweiligen Basisdatentyps der Felder 3 Beispiel TYPE Vorname Feld von CHARACTER Zeichenkette mit offener Lange VARIABLE personename Vorname personename Hugo Die Variable personenname wird dynamisch mit der Lange 4 erzeugt personename Alexander Die Variable personenname wird erneut dynamisch erzeugt diesmal mit der Lange 9 Bei Prozedurvariablen mussen die Anzahl die Art die Reihenfolge und die Datentypen aller Parameter und Ruckgabewerte ubereinstimmen also abgesehen vom Prozedurnamen die Signaturen der beiden Prozeduren ubereinstimmen Zwei Instanzen sind in diesem Sinne zuweisungskompatibel wenn sie exakt derselben Klasse angehoren Beispiel TYPE Rechteck Klasse mit INTEGER breite hoehe und mit Methode flaechenberechnung VARIABLE fenster1 fenster2 Rechteck fenster1 breite 200 fenster1 hoehe 100 fenster1 flaechenberechnung Flachenberechnung fur fenster1 ausfuhren Ergebnis 20000 fenster2 fenster1 Zuweisung ist moglich da beide Instanzen derselben Klasse angehoren fenster2 flaechenberechnung Flachenberechnung auch fur fenster2 ausfuhren Ergebnis 20000 Logische Kompatibilitat Bearbeiten Bei besonders strenger Betrachtungsweise sind sogar zwei identische Definitionen von Datentypen nicht zuweisungskompatibel weil zwar die Daten eindeutig ineinander uberfuhrt werden konnen technische Kompatibilitat aber zwei verschiedene Definitionen verwendet wurden logische Kompatibilitat 4 Folgendes Beispiel ware demzufolge technisch korrekt aber nicht logisch TYPE Mann Verbund von INTEGER alter und REAL groesse TYPE Frau Verbund von INTEGER alter und REAL groesse VARIABLE otto Mann VARIABLE anna Frau otto alter 50 otto groesse 1 80 anna otto Zuweisung ist technisch moglich aber logisch nicht korrekt Um logische Programmfehler zu vermeiden sind solche Zuweisungen mit impliziter Typumwandlung in einigen Programmiersprachen mit verhaltnismassig starker Typisierung wie zum Beispiel Modula 2 oder Oberon nicht zulassig Zuweisungskompatibilitat ohne Informationsverlust BearbeitenIn gewissen Fallen kann die Information die in einem Datentyp abgelegt ist eindeutig und ohne Informationsverlust in einen anderen Datentyp uberfuhrt werden Typische Beispiele sind ganzzahlige Datentypen mit unterschiedlicher Speichergrosse So kann ein Integer mit 16 Bit Speichergrosse eindeutig in einer vorzeichenbehafteten Integer Variablen mit 32 Bit Speichergrosse abgelegt werden ohne dass die ursprunglich nur mit 16 Bit definierte Zahl verandert wird Umgekehrt ist dies jedoch nicht immer moglich insbesondere unter der Beachtung von Vorzeichen und zu grossen Zahlen Weitere Beispiele ergeben sich bei Zeichenketten oder anderen Feldern deren feste Lange verschieden ist Das kurzere Feld kann im langeren gespeichert werden aber nicht umgekehrt Zwei Instanzen sind ohne Informationsverlust zuweisungskompatibel wenn sie die zuzuweisende Klasse derselben Klasse angehort wie die zugewiesene Klasse Beispiel mit Zuweisungskompatibilitat Bearbeiten zahl1 BYTE mit 8 Bit fur ganze Zahlen von 128 bis 127 zahl2 SHORTINT mit 16 Bit fur ganze Zahlen von 32768 bis 32767 zahl1 55 Zuweisung der ganzen Zahl 55 an die Variable zahl1 zahl2 zahl1 Zuweisung der ganzen Zahl 55 aus der Variablen zahl1 an die Variable zahl2 Beispiel ohne Zuweisungskompatibilitat Bearbeiten zahl1 BYTE mit 8 Bit fur ganze Zahlen von 128 bis 127 zahl2 SHORTINT mit 16 Bit fur ganze Zahlen von 32768 bis 32767 zahl2 555 Zuweisung der ganzen Zahl 555 an die Variable zahl2 zahl1 zahl2 Ungultiger Versuch der Zuweisung der ganzen Zahl 555 aus der Variablen zahl2 an die Variable zahl1 Bei einer solchen Zuweisung kann bereits der Compiler verhindern dass ausfuhrbarer Maschinencode erzeugt wird da nicht sichergestellt werden kann dass grosse Zahlen die in der Variable zahl2 gespeichert sind immer auch ohne Informationsverlust in der Variable zahl1 abgelegt werden konnen Bei fehlender Uberprufung durch den Compiler werden zwangslaufig und unbemerkt Ziffern abgeschnitten so dass bei nachfolgenden Berechnungen unter Umstanden grobe Berechnungsfehler auftreten konnen die teilweise schwierig zu analysieren sind Zuweisungskompatibilitat mit geringem Informationsverlust BearbeitenEin Sonderfall ist die Zuweisung von ganzen Zahlen an Variablen die Gleitkommazahlen reprasentieren Meist kann ohne die Gefahr von Programmfehlern toleriert werden grosse ganze Zahlen implizit in Gleitkommazahlen umzuwandeln da der Rechenfehler wenn uberhaupt vorhanden hierbei sehr klein ist Auch dies kann an einem Beispiel verdeutlicht werden zahl1 LONGINT mit 64 Bit fur ganze Zahlen von 2 63 displaystyle 2 63 nbsp bis 2 63 1 displaystyle 2 63 1 nbsp zahl2 REAL mit 64 Bit fur Gleitkommazahlen mit einer Mantisse mit maximal 14 Nachkommastellen nach IEEE 754 zahl1 9223372036854775807 Zuweisung der ganzen Zahl 2 63 1 displaystyle 2 63 1 nbsp an die Variable zahl1 zahl2 zahl1 Gultiger Versuch der Zuweisung der ganzen Zahl 2 63 1 displaystyle 2 63 1 nbsp aus der Variablen zahl1 an die Variable zahl2 die allerdings anschliessend den gerundeten Zahlenwert 9 223 37203685478 10 18 displaystyle 9 22337203685478 cdot 10 18 nbsp enthalt Der Fehler durch das Abschneiden der letzten Nachkommastellen liegt hier also nur in einer Grossenordnung von 10 14 displaystyle 10 14 nbsp und kann daher fur praktisch alle Anwendungen vernachlassigt werden Zuweisungskompatibilitat mit definiertem Informationsverlust BearbeitenZwei Instanzen sind mit definiertem Informationsverlust zuweisungskompatibel wenn die zuzuweisende Klasse einer von der zugewiesenen Klasse abgeleiteten Klasse angehort Alle Daten die in der zugewiesenen Klasse deklariert und somit erforderlich sind konnen zugewiesen werden jedoch werden die in der zuzuweisenden abgeleiteten Klasse hinzugefugten Attribute und Methoden ignoriert Beispiel TYPE Lebewesen Verbund von INTEGER alter gewicht TYPE Mensch Lebewesen mit INTEGER intelligenzquotient Der Datentyp Mensch erbt alle Eigenschaften von Lebewesen VARIABLE otto Mensch VARIABLE eukaryot Lebewesen otto alter 50 otto gewicht 75 otto intelligenzquotient 100 eukaryot otto Zuweisung ist korrekt das Attribut intelligenzquotient wird jedoch nicht zugewiesen Zuweisungen ohne Typsicherheit BearbeitenProgrammiersprachen die fur die maschinennahe Programmierung konzipiert wurden wie zum Beispiel C haben oft gar keine oder nur eine sehr schwache Typprufung Diese Toleranz fuhrt leicht zu Programmfehlern Zeiger Bearbeiten In manchen Programmiersprachen wie zum Beispiel C ist es erlaubt beliebige Zeiger einer Zeigervariablen zuzuweisen ohne dass gepruft wird oder uberhaupt gepruft werden kann ob die Datentypen der referenzierten Daten identisch oder kompatibel sind Wahrheitswerte Bearbeiten In einigen alteren Programmiersprachen wie zum Beispiel C gibt es keinen eigenen Datentyp fur zweiwertige boolesche Variablen Zur Behandlung und Verarbeitung entsprechender Information wird dann haufig der ganzzahlige Datentyp mit dem kleinsten Speicherbedarf verwendet wobei der Zahlenwert null fur den Wahrheitswert Falsch und alle anderen Zahlenwerte fur den Wahrheitswert Wahr Verwendung finden Auch hier ergeben sich logische Inkompatibilitaten und somit Komplikationen da mit binaren Werten keine Arithmetik und mit Zahlen keine logischen Verknupfungen oder logischen Operationen durchgefuhrt werden konnen Im folgenden Beispiel wird dieser Missbrauch verdeutlicht VARIABLE falscheWahrheit1 falscheWahrheit2 ergebnisWahrheit INTEGER ganze Zahlen falscheWahrheit1 0 0 soll den Wahrheitswert Falsch reprasentieren falscheWahrheit2 1 1 soll den Wahrheitswert Wahr reprasentieren ergebnisWahrheit falscheWahrheit1 falscheWahrheit2 Ergebnis dieser unsinnigen arithmetischen Addition ist 1 was fur den Wahrheitswert Wahr steht ergebnisWahrheit falscheWahrheit1 UND falscheWahrheit2 Ergebnis dieser logischen Konjunktion ist 0 was fur den Wahrheitswert Falsch steht ergebnisWahrheit falscheWahrheit2 falscheWahrheit2 Ergebnis ist 2 und zuweisungskompatibel aber ohne logischen Sinn Eine eindeutige und korrekte Implementierung konnte wie folgt aussehen VARIABLE richtigeWahrheit1 richtigeWahrheit2 ergebnisWahrheit BOOLEAN Wahrheitswerte richtigeWahrheit1 FALSCH nur Wahrheitswerte sind zuweisungskompatibel richtigeWahrheit2 WAHR nur Wahrheitswerte sind zuweisungskompatibel ergebnisWahrheit richtigeWahrheit1 UND richtigeWahrheit2 nur logische Operatoren sind zulassig und nur Ergebnisse mit Wahrheitswerten hier FALSCH sind zuweisungskompatibel Mengen Bearbeiten Sinngemass gilt das Gleiche fur die Verknupfungen von Mengen Wenn hier bei den Datentypen und zulassigen Operatoren nicht zwischen Mengen englisch Bitsets 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 reprasentieren falscheMenge2 1 1 soll eine Menge mit dem Element 1 reprasentieren differenzMenge falscheMenge1 falscheMenge2 Ergebnis dieser unsinnigen arithmetischen Subtraktion ist 1 Eine eindeutige und korrekte Implementierung konnte wie folgt aussehen VARIABLE richtigeMenge1 richtigeMenge2 differenzMenge BITSET Mengen richtigeMenge1 soll eine leere Menge reprasentieren richtigeMenge2 1 soll eine Menge mit dem Element 1 reprasentieren differenzMenge richtigeMenge1 richtigeMenge2 Nur Mengen Operatoren sind zulassig und nur Ergebnisse mit Mengen hier ist das Ergebnis die leere Menge sind zuweisungskompatibel Literatur BearbeitenHanspeter Mossenbock Anhange zur Sprachdefinition Begriffsdefinitionen Kapitel A 12 1 in Objektorientierte Programmierung in Oberon 2 Verlag Springer 1998 ISBN 978 3 5406 4649 5Weblinks BearbeitenStefan Middendorf Reiner Singer Jorn Heid Zuweisungskompatibilitat in Objektorientierte Programmierung mit Java Die Sprache Java Programmierhandbuch und Referenz fur die JavaTM 2 Plattform 3 Auflage 2002 Uwe Schmidt Zuweisungskompatibilitat in Objektorientierte Programmierung mit Java Fachhochschule WedelEinzelnachweise Bearbeiten Kathleen Jensen Niklaus Wirth Andrew B Mickel Assignment Statements in Pascal user manual and report ISO Pascal standard Kapitel 9 1 1 Seite 170 Verlag Springer 1991 ISBN 978 0 3879 7649 5 Laszlo Boszormenyi Jurg Gutknecht Gustav Pomberger Symbol Table Handling in The school of Niklaus Wirth the art of simplicity Seiten 61 und 62 Verlag Morgan Kaufmann 2000 ISBN 9781558607231 Joel Pitt Volition Systems Modula 2 Programming Language in InfoWorld vom 19 September 1983 Band 5 Nummer 38 InfoWorld Media Group ISSN 0199 6649 Kent Lee Example 8 2 in Programming Languages An Active Learning Approach Kapitel 8 Seiten 228 und 229 2008 ISBN 9780387794211 Abgerufen von https de wikipedia org w index php title Zuweisungskompatibilitat amp oldid 220371434