Fehler beim Erstellen des Vorschaubildes: Datei fehlt
Schön, dass Sie da sind!

PlusPedia wird derzeit technisch modernisiert. Wie alles, was bei laufendem Betrieb bearbeitet wird, kann es auch hier zu zeitweisen Ausfällen bestimmter Funktionen kommen. Es sind aber alle Artikel zugänglich, Sie können PlusPedia genauso nutzen wie immer.

Bei PlusPedia sind Sie sicher: – Wir verarbeiten keine personenbezogenen Daten, erlauben umfassend anonyme Mitarbeit und erfüllen die Datenschutz-Grundverordnung (DSGVO) vollumfänglich. Es haftet der Vorsitzende des Trägervereins.

Bitte beachten: Aktuell können sich keine neuen Benutzer registrieren. Wir beheben das Problem so schnell wie möglich.

PlusPedia blüht wieder auf als freundliches deutsches Lexikon.
Wir haben auf die neue Version 1.43.3 aktualisiert.
Wir haben SSL aktiviert.
Hier geht es zu den aktuellen Aktuelle Ereignissen

Hinweis zur Passwortsicherheit:
Bitte nutzen Sie Ihr PlusPedia-Passwort nur bei PlusPedia.
Wenn Sie Ihr PlusPedia-Passwort andernorts nutzen, ändern Sie es bitte DORT bis unsere Modernisierung abgeschlossen ist.
Überall wo es sensibel, sollte man generell immer unterschiedliche Passworte verwenden! Das gilt hier und im gesamten Internet.
Aus Gründen der Sicherheit (PlusPedia hatte bis 24.07.2025 kein SSL | https://)

Aggregierter Datentyp

Aus PlusPedia
Zur Navigation springen Zur Suche springen

Das Ziel eines Aggregierten Datentyps ist es mehrere Objekte unter einem Namen zusammenzufassen und ansprechen zu können.

Bottom-Up: Konstrukoren

  • Array -
    • Ein ein- oder mehrdimensionales Feld
    • Ein Array enthält typischerweise denselben Datentyp.
  • Record (Verbund, Struct)
    • In einem Record können verschiedene Dateitypen zusammengefast werden
    • Zugriff über die Namenskonversion: record_name.komponenten_name
  • Zeiger oder Pointer
    • Ein Zeiger zeigt auf ein bestimmtes Objekt.
    • In maschinennahen Programmiersprachen wie Assembler oder C oder C++ [1] kommen sie vor
    • In streng typisierten Sprachen wie Modula-2 oder Ada stark eingeschränkt
    • In Sprachen wie Java, Eiffel oder Python sind Zeiger intern vorhanden - die Zeiger sind vor dem Programmierer verborgen.
    • Zeiger sind sehr fehleranfällige Konstrukte. "Pufferüberläufe" und "Abstürze"
    • Ein Zeiger kann zeigen auf
      • Daten
      • Programmcode
      • Andere Zeiger
    • Vorzüge
      • Verkettete Listen
      • Dynamische Datentypen (Einfaches Ändern einer Reihenfolge ohne zu kopieren)
      • Effizient
      • Einfaches Durchlaufen eines Feldes
    • Nachteile
      • Schwer zu erlernen, kompliziert und fehlerfanfällig (Auch Flüchtigkeitsfehler)
      • Programmierung mit Zeigern kann Daten und Programmcode zerstören
      • Effizienz kann auch leiden, da der Compiler schwer optimieren kann - und Daten verstreut im Adressraum liegen können.
      • Die Strukturen müssen ziemlich genau bekannt werden (Verhindert Abstraktion)

Top-Down-Sicht: Konstrukoren

In der Mathematik gibt es

  • Mengen
  • Tupel
  • Relationen und Funktionen

Mengen

„Eine Menge ist eine Zusammenfassung bestimmter, wohlunterschiedener Objekte unsere Anschauung oder unseres Denkens zu einem Ganzen. Diese Objekte heißen Elemente der Menge.“ (naive Definition von Cantor)

Operatoren sind:

  • ∈ ∉ ∩ ∪ ⊂ ⊃ ⊆ ⊇ \ Δ

Tupel

  • Tupel sind eine endliche Liste
  • Auf ein Tuppel kann über einen Index zugegriffen werden
    • x(i,j)

Funktionen

(partielle) Funktion/Abbildungen: "Eine partielle Funktion ist eine rechtseindeutige Relation R. R ist eine Menge von n-Tupeln. Objekte, die in der Relation R zueinander stehen, bilden ein n-Tupel, das Element von R ist."

Die unabhängige Variable nennt man in der Informatik den Schlüssel - und die abhängige Variable ist der Wert.

  • (Schlüssel, Wert);
  • auch geschrieben als {Schlüssel, Wert}

Konstrukte

Struktur Ordnung Einzigartigkeit der Werte der Elemente Werte pro Element
Set nein ja 1
List ja nein 1
Map (Dictionary) nein ja für das erste Element: sichert Rechtseindeutigkeit,
also die Eigenschaft eine partielle Funktion zu sein
2


Wichtige Datenstrukturen

  • Liste
    • Array
  • Stapel
  • Schlange
  • Graph
  • Menge
  • Abbildung
  • Verbund

In den verschiedenen Programmiersprachen

In Python

In Python gibt es

  • None
  • Elementare
  • Kollektionen
    • Mengen
      • frozenset()
      • set()
    • Sequenzen
      • string
      • tupel()
      • list()
    • Abbildungen
      • dictionary()
  • aufrufbar
    • Prozeduren
    • Klassen

Liste

Struktur Bedeutung
Liste = [] Erzeugt eine leere Liste
Liste = [1,2,3] Enthält drei Integer-Elemente
i = Liste[1] Zugriff auf das 2. Element
Liste2 = ['Text', Liste, [5,6], 3.1415] Eine Liste, die einen Text, die Liste, eine zweite Liste und eine Doublezahl enthält.

Tupel

Identisch zu Listen - aber mit runden Klammern; Die Werte von Tupeln sind nicht veränderbar.

Struktur Bedeutung
Tupel = () Erzeugt eine leere Liste
Tupel = (1,2,3) Enthält drei Integer-Elemente
i = Tupel(1) Zugriff auf das 2. Element
Tupel2 = ('Text', Tupel, (5,6), 3.1415) Eine Tupel-Liste, die einen Text, die Liste, eine zweite Liste und eine Doublezahl enthält.

Ein Tupel wird in Python mit (1,) gekennzeichnet und von einem geklammerten Ausdruck unterschieden.

Sets

Mengenobjekte werden durch {} erzeugt oder mit eingebauten Funktionen set (mutable) oder frozenset (unmutable) erzeugt.

  • x = {'a', 'c', 'b'}
  • y = set ('bcde')

Operatoren bei Sets:

Struktur Bedeutung
x & y
x ^ y
len (N)
x in M
x not in M
N <= M
N >= M
M (PIPE) N
M (PIPE)= N
M & N
M &= N
M - N
M -= N
M ^ N

Methoden:

  • M.add(x)
  • M.clear()
  • M.pop()
  • M.remove(x)

Dictionaries

Bei einem Dictionary benutzt man das 2-Tupel der Form (Schlüsel, Wert), geschrieben als:

  • {Schlüssel:Wert.}
    • Wert ist beliebig (Elementare Typen, aber auch Listen, andere Dictionaries etc)

Kein Zugiff über Index möglich, sondern Zugriff geschieht über den Schlüssel.

Schlüssel können Strings oder Zahlen oder Tupels sein. Listen können keine Schlüssel sein, weil sich Listen ändern können. Schlüssel müsen unmutable sein.

Struktur Bedeutung
{} Leeres Dictionary


Operation Bedeutung
Speichern eines Wertes
Suchen über einen Schlüssel
Löschen eines Wertes


Unterschied zwischen Zuweisung, copy und deepcopy

Wird ein aggregierter Typ übergeben, so wird eine Referenz übergeben.

  • s = [1,2,3]
  • t = s
  • t is s --> liefert True

Dies ist eine shallow copy. t ist ein Aliasname zum selben Objekt.

Daneben gibt es im Modul copy echte Kopien anzulegen.

  • copy.copy()
  • copy.deepcopy()
  • import copy
  • s = [1,2,3]
  • t = copy.copy (s)
  • t is s --> False

Beim Deepcopy werden auch Referenzen aufgelöst und neu angelegt.

Deepcopy löst

  • Modulobjkete
  • Fileobjekte
  • Socketobjekte
  • Tracebackobjekte

Daneben gibt es Slicing.


Links und Quellen

Siehe auch

Weblinks

Quellen

Literatur

Einzelnachweise

  1. Chuck Sphaer: Visual C++ - Schritt für Schritt, (deutsche Übersetzung von Learn Visual C++ Now), Microsoft Press, 1999, S. 110: "Eines der am häufigsten verwendeten Merkmale von C und C ++ ist der Zeiger."

Andere Lexika

Wikipedia kennt dieses Lemma (Aggregierter Datentyp) vermutlich nicht.

---