www.wikidata.de-de.nina.az
Ein Verbund englisch object composition ist ein Datentyp der aus einem oder mehreren Datentypen zusammengesetzt wurde Die Komponenten eines Verbunds konnen wiederum Verbunde sein wodurch auch komplexe Datenstrukturen definiert werden konnen Die Komponenten Elemente eines Verbunds werden normalerweise nacheinander im Speicher angeordnet beispielsweise als struct in der Programmiersprache C bzw als record in Pascal Eine Ausnahme stellen Unions dar Auch in anderen Programmiersprachen siehe unten wird dieser Datentyp zum Teil unterschiedlich bezeichnet Inhaltsverzeichnis 1 Verwendung in verschiedenen Programmiersprachen 1 1 Strukturen in den Programmiersprachen C und C 1 1 1 Beispiel in C 1 1 2 Grosse im Speicher 1 1 3 Unterscheidung zwischen C und C Struktur 1 1 4 Unterscheidung zwischen C Struktur und C Klasse 1 2 Implementierung in Pascal 1 3 Datengruppen in Cobol 2 Unions 2 1 Beispiel in C 2 2 Beispiel in Haskell 3 Siehe auch 4 EinzelnachweiseVerwendung in verschiedenen Programmiersprachen BearbeitenStrukturen in den Programmiersprachen C und C Bearbeiten In den Programmiersprachen C und C werden Verbunde engl auch composite types als Struktur bezeichnet und mit dem Schlusselwort struct kurz fur engl structure Struktur deklariert Die einzelnen Komponenten einer Struktur die sog members Mitglieder durfen dabei beliebige einfache Datentypen Felder konstanter Grosse oder ein Zeiger auf dieselbe Struktur sein Im Gegensatz zur union uberlappen sich die Speicherbereiche der einzelnen Strukturmitglieder nicht Beispiel in C Bearbeiten include lt stdio h gt struct Person int Personalnummer int Alter char Name 20 struct Person Person anhand Personalnummer int int main void struct Person person Person anhand Personalnummer 12345 printf Personalnummer i Alter i n person gt Personalnummer person gt Alter Hat man einen Zeiger auf die Struktur dann wird wie gezeigt auf einzelne Members am einfachsten mithilfe des Pfeils gt zugegriffen bspw person gt Alter Der Pfeil engl arrow ist eine Kurzschreibweise fur person Alter mit dem Stern als Dereferenzierungsoperator engl dereference operator und dem Punkt als Selektor engl object selector Grosse im Speicher Bearbeiten Eine Struktur kann grosser sein als die Summe der einzelnen Datentypgrossen da der Compiler die einzelnen Attribute im Speicher an bestimmten Adressen ausrichten kann Die Anordnung der Struktur im Speicher ist nach der Ubersetzung festgelegt und kann nicht mehr verandert werden Unterscheidung zwischen C und C Struktur Bearbeiten In C konnen Strukturen lediglich Variablen Zeiger Arrays und andere Strukturen enthalten wahrend Strukturen in C die zusatzliche Fahigkeit besitzen Unterprogramme sogenannte Methoden zu beinhalten zu denen auch Konstruktoren und Destruktoren gehoren 1 Dies lasst sich in C nur teilweise uber Funktionszeiger realisieren die auch Teil von Strukturen sein konnen Unterscheidung zwischen C Struktur und C Klasse Bearbeiten In C dienen die Schlusselworter public und private dazu die Zugriffsrechte auf Attribute und Methoden in Strukturen und Klassen zu regeln Der einzige Unterschied hier ist dass ohne explizite Angabe die Attribute von Strukturen standardmassig public Zugriff von aussen erlaubt die einer Klasse private Zugriff nur von innerhalb der Klasse oder durch Friend Funktionen sind 2 Implementierung in Pascal Bearbeiten Ein Verbund in Pascal mit record bezeichnet vom Datentyp Person fur die beiden Instanzen Mustermann1 und Mustermann2 konnte in Component Pascal zum Beispiel folgendermassen definiert und verwendet werden und nur Instanzen desselben Datentyps sind in dieser Programmiersprache zuweisungskompatibel MODULE Personen IMPORT Dates TYPE Person RECORD Vorname Name Wohnort ARRAY 256 OF CHAR Geburtstag Dates Date END VAR Mustermann1 Mustermann2 Person BEGIN Mustermann1 Vorname Hans Mustermann1 Name Mustermann Mustermann1 Wohnort Musterstadt Mustermann1 Geburtstag day 1 Mustermann1 Geburtstag month 1 Mustermann1 Geburtstag year 1900 Mustermann2 Mustermann1 Zwei Variablen vom selben Datentyp sind zuweisungskompatibel END Personen Der importierte im Modul Dates definierte Datentyp Dates Date ist wiederum ein Verbund mit den ganzzahligen Elementen day Tag month Monat und year Jahr Datengruppen in Cobol Bearbeiten In Cobol wird der Datentyp Verbund Datengruppe auch Gruppen Variable oder group item genannt Eine Datengruppe wird mit ihrem Bezeichner deklariert und ist der Uberbegriff bzw die Zusammenfassung fur die ihr hierarchisch untergeordneten Datentypen die selbst wieder Datengruppen sein konnen Sie hat selbst keine Formatspezifikation PIC Klausel Uber die OCCURS Klausel kann auch eine Datengruppe als Tabelle Array deklariert werden ggf auch mehrstufig In den die Datengruppe ansprechenden Befehlen wird die Gesamtheit der ihr untergeordneten Felder als ein 1 Datenfeld im PIC X Characterformat und in der Gesamtlange aller Einzelfelder behandelt Bei einem MOVE Befehl etwa findet also keine individuelle formatspezifische Verarbeitung der Einzelfelder statt auch keine Formatkonvertierung Uber die REDEFINES Klausel kann eine Datengruppe eine andere Datengruppe redefinieren wodurch beide Datengruppen denselben Speicherplatz benutzen Angewendet wird dies beispielsweise fur die Verarbeitung unterschiedlicher Eingabedaten alternativ in der einen oder in der anderen Datenstruktur Dies entspricht dem Konstrukt UNION in anderen Programmiersprachen Unions BearbeitenBei sog Unions beginnen alle Komponenten an der gleichen Speicheradresse d h ihre Speicherbereiche uberlappen sich ganz oder zumindest teilweise Eine Union belegt dabei mindestens so viel Speicher wie ihre grosste Komponente Unions sind in verschiedenen Programmiersprachen entweder als tagged Unions oder untagged Unions implementiert Eine tagged Union ordnet jeder Komponente einen Tag zu Beim Schreiben einer Komponente wird der Tag dieser Komponente in der Union Variable gespeichert Bei Lesezugriffen auf die Komponente einer Union wird der Tag der zu lesenden Komponente mit dem Tag der letzten geschriebenen Komponente verglichen Unterscheiden sich die Tags ist ein Typfehler festgestellt Somit sind tagged Unions typsicher Untagged Unions verwenden keine Tags und sind deswegen typunsicher D h es liegt in der Verantwortung des Programmierers ob der letzte Schreibzugriff einer Union die gleiche Komponente verandert hat die auch der darauf folgende Lesezugriff ausliest Neben unbeabsichtigten Typfehlern bei der Verwendung von untagged Unions existieren aber auch Anwendungsfalle fur die Seiteneffekte von untagged Unions Beispielsweise eine Union aus einer IEEE Gleitkommazahl und einer struct deren Komponenten den Zugriff auf Vorzeichen Mantisse und Exponent erlauben Beispiel in C Bearbeiten include lt stdio h gt include lt math h gt include lt inttypes h gt union Float64Components double Float64 struct uint64 t Mantissa52 52 uint64 t Exponent11 11 uint64 t Sign1 1 void main union Float64Components pi pi Float64 3 1415926535897932384626433832795 printf 20 16f 13I64X 03I64X 01I64X 20 16f n pi Float64 pi Mantissa52 pi Exponent11 pi Sign1 pi Sign1 1 1 1 0 pi Mantissa52 4503599627370496 0 pow 2 pi Exponent11 1023 Output 3 1415926535897931 921FB54442D18 400 0 3 1415926535897931 Beispiel in Haskell Bearbeiten Beispiel der Deklaration einer Union in Haskell data Tree a Br Tree a Tree a Leaf a Nil Tree ist ein algebraischer Datentyp Br Leaf und Nil sind die Konstruktoren Siehe auch BearbeitenAssoziatives ArrayEinzelnachweise Bearbeiten Peter Becker Andreas Bruchmann Dirk F Raetzel Unterschiede zum Datentyp struct Nicht mehr online verfugbar In Kapitel 12 Objektorientiertes Programmieren in C In C Eine Einfuhrung Manfred Sommer Philipps Universitat Marburg 5 Juni 2001 archiviert vom Original am 10 Januar 2014 abgerufen am 10 Januar 2014 gehostet bei http ip klaeden dyndns org nbsp Info Der Archivlink wurde automatisch eingesetzt und noch nicht gepruft Bitte prufe Original und Archivlink gemass Anleitung und entferne dann diesen Hinweis 1 2 Vorlage Webachiv IABot ip klaeden dyndns org Classes I auf cplusplus com Abgerufen von https de wikipedia org w index php title Verbund Datentyp amp oldid 234336521