<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Objekt_%28Programmierung%29</id>
	<title>Objekt (Programmierung) - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Objekt_%28Programmierung%29"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Objekt_(Programmierung)&amp;action=history"/>
	<updated>2026-06-03T11:06:28Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Objekt_(Programmierung)&amp;diff=563925&amp;oldid=prev</id>
		<title>imported&gt;Y2kbug: Speicherbereich verlinkt</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Objekt_(Programmierung)&amp;diff=563925&amp;oldid=prev"/>
		<updated>2025-02-14T08:29:19Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php/Speicherbereich&quot; title=&quot;Speicherbereich&quot;&gt;Speicherbereich&lt;/a&gt; verlinkt&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Belege fehlen|2=Einige Angaben in diesem Artikel|Plural=1}}&lt;br /&gt;
&lt;br /&gt;
Ein &amp;#039;&amp;#039;&amp;#039;Objekt&amp;#039;&amp;#039;&amp;#039; in der [[Programmierung]] bezeichnet eine inhaltlich zusammengehörige [[Datenmenge]]:&lt;br /&gt;
&lt;br /&gt;
* In der [[Objektorientierte Programmierung|objektorientierten Programmierung]] wird eine Objektinstanz aus einer Klasse erzeugt und weist zur [[Laufzeit (Informatik)|Laufzeit]] einen [[Datentyp]] auf. Zur Laufzeit wird dem „Objekt“ [[Allokation (Informatik)|Speicher reserviert]], in dem seine Daten und [[Methode (Programmierung)|Methoden]] gespeichert werden.&lt;br /&gt;
* In anderen (nicht-objektorientierten) [[Programmiersprache]]n wie [[C (Programmiersprache)|C]] werden mitunter &amp;#039;&amp;#039;reservierte [[Speicherbereich]]e&amp;#039;&amp;#039; als „Objekte“ bezeichnet (siehe auch [[virtuelle Speicherverwaltung]]).&lt;br /&gt;
* Im [[Semantic Web]] sind „Objekte“ grundlegende Ressourcen, auf die über das [[Internet]] zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
== Objektorientierte Programmierung ==&lt;br /&gt;
=== Eigenschaften ===&lt;br /&gt;
Jedes Objekt hat einen Zustand, ein Verhalten und eine Identität. Der Zustand des Objektes setzt sich aus seinen Eigenschaften ([[Attribut (Programmierung)|Attribute]]) und Verbindungen zu anderen Objekten zusammen. Das Verhalten des Objektes wird durch die Menge seiner [[Methode (Programmierung)|Methoden]] beschrieben. Die Identität unterscheidet ein Objekt von anderen Objekten, auch wenn diese anderen Objekte den gleichen Zustand und das gleiche Verhalten haben.&amp;lt;ref&amp;gt;{{Literatur |Autor=Heide Balzert |Titel=Lehrbuch der Objektmodellierung: Analyse und Entwurf |Verlag=Spektrum Akademischer Verlag |Ort=Heidelberg |Datum=1999 |ISBN=3-8274-0285-9 |Seiten=18}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In den meisten objektorientierten Programmiersprachen wird ein Objekt oder Exemplar (auch Instanz genannt) &amp;#039;&amp;#039;aus einer Klasse&amp;#039;&amp;#039; erzeugt, mittels Konstruktion (siehe auch [[Konstruktoren und Destruktoren]]). Diese Instanz besitzt dann zur [[Laufzeit (Informatik)|Laufzeit]] ihren eigenen [[Datentyp]], eigene Eigenschaften und [[Methode (Programmierung)|Methoden]].&lt;br /&gt;
In manchen OOP-Sprachen werden Objekte stattdessen dadurch erzeugt, dass von einem bereits vorhandenen Objekt eine Kopie erzeugt wird; die Kopie kann um weitere Attribute und Methoden erweitert werden. Meist besitzen diese Sprachen kein Klassenkonzept. Objekte ohne Vorlage können dann auch direkt angelegt werden. In [[Lua]] beispielsweise kann eine „Tabelle“ angelegt werden, die unterschiedliche Elemente in Form von Werten mit einfachen Datentypen, von Funktionen, oder auch wieder neuen „Tabellen“ enthalten.&lt;br /&gt;
&lt;br /&gt;
=== Instanziierung ===&lt;br /&gt;
Als Instanziierung bezeichnet man in der [[Objektorientierte Programmierung|objektorientierten Programmierung]] das Erzeugen eines konkreten Objekts einer bestimmten [[Klasse (Objektorientierung)|Klasse]] bzw. das Erzeugen einer Kopie eines anderen, existierenden Objekts. Während der Instanziierung eines Objekts wird in vielen [[Programmiersprache]]n ein sogenannter [[Konstruktoren und Destruktoren|Konstruktor]] ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Die Instanz einer [[Klasse (Objektorientierung)|Klasse]] ist ein konkretes Exemplar mit konkreten Ausprägungen, mit dem bis zu dessen Zerstörung gearbeitet werden kann. Zum Beispiel könnte es in einem Programm, das mit Autos arbeitet (beispielsweise eine Shopsoftware), eine Klasse „Auto“ geben, in der möglichst abstrakt beschrieben wird, welche Eigenschaften ein Auto hat. Wenn in einem solchen Programm ein konkretes Auto, zum Beispiel „Porsche, schwarz, Fahrzeugnummer 42“, erstellt wird, das dann dem Programm zur weiteren Verwendung zur Verfügung steht, so nennt man dieses nun eine Instanz der Klasse „Auto“, und der Vorgang der Objekterstellung heißt &amp;#039;&amp;#039;Instanziierung&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== Herkunft des Begriffs &amp;#039;&amp;#039;Instanz&amp;#039;&amp;#039; ===&lt;br /&gt;
Es gibt die Annahme, dass der heutige Sprachgebrauch „Ein Objekt ist eine Instanz einer Klasse“ auf einer Fehlübersetzung der englischen Bezeichnung „instance“ = „Beispiel“, „Auftreten“ oder „Fall“ beruht. Als Begründung dient die Beobachtung, dass Instanzen im juristischen Kontext zueinander immer in einem über- oder untergeordneten Verhältnis liegen. Diese Annahme wird jedoch von Kritikern als &amp;#039;&amp;#039;falsch&amp;#039;&amp;#039; bezeichnet: Die lateinische [[Wortwurzel|Wurzel]] „instantia“ = „das Daraufbestehen“ enthält keine solche Hierarchie von Instanzen untereinander. Vielmehr müssen Instanzen auf anderen Dingen bestehen, was Exemplare von Klassen tun (sie bestehen auf Klassen oder genauer, sie werden in der [[Objektorientierte Programmierung|Programmierung]] zur [[Laufzeit (Informatik)|Laufzeit]] aus einer [[Klasse (Objektorientierung)|Klasse]] erzeugt). Auch [[Johann Wolfgang von Goethe|Goethe]] nutzte den Begriff „Instanz“ schon in der Bedeutung „[[Exemplar]]“: „Eine Instanz aus dem Tierreich der niedrigsten Stufe führen wir noch zu mehrerer Anleitung hier vor.“&amp;lt;ref&amp;gt;Johann Wolfgang von Goethe: &amp;#039;&amp;#039;Bildung und Umbildung Organischer Naturen. Zur [[Morphologie (Biologie)|Morphologie]]&amp;#039;&amp;#039;. Band&amp;amp;nbsp;1, Heft&amp;amp;nbsp;1; Jahr 1817.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
Der Objekttyp (die Klasse) „Buch“ mit der identifizierenden Eigenschaft „Inventarnummer“ (im Falle einer Bibliothek und als einzelne Instanz) enthält die zugehörigen Eigenschaften (Inventarnummer, Ausleihstatus, Beschaffungsdatum,&amp;amp;nbsp;…) und die Beschreibung zur Bearbeitung der Eigenschaften (die Methoden, wie z.&amp;amp;nbsp;B. die Veränderung des Ausleihstatus im Falle einer Ausleihe durch einen Kunden).&lt;br /&gt;
&lt;br /&gt;
Ein Objekt ist dann eine reale Ausprägung der [[Klasse (Objektorientierung)|Klasse]], also ein bestimmtes Buch, wie z.&amp;amp;nbsp;B. mit der Inventarnummer 4711. [[Objektorientierte Programmierung|Objektorientierte Programmiersprachen]] erlauben die gleichzeitige Koexistenz verschiedener Objekte, etwa ein Buch mit der Nummer 4711 und eines mit der Nummer 1234.&lt;br /&gt;
&lt;br /&gt;
=== Unterschied zwischen Entität und Objekt ===&lt;br /&gt;
Der Begriff &amp;#039;&amp;#039;Objekt&amp;#039;&amp;#039; ist in der [[Programmierung]] mit dem Begriff [[Entität (Informatik)|&amp;#039;&amp;#039;Entität&amp;#039;&amp;#039;]] verwandt.&lt;br /&gt;
&lt;br /&gt;
Die Begriffe &amp;#039;&amp;#039;Entität&amp;#039;&amp;#039; und &amp;#039;&amp;#039;Entitätstyp&amp;#039;&amp;#039; werden bei der [[Datenmodellierung]], z.&amp;amp;nbsp;B. beim [[Entity-Relationship-Modell|ER-Modell]] verwendet. Entitätstypen besitzen [[Attribut (Programmierung)|Attribute]], aber keine [[Methode (Programmierung)|Methoden]].&lt;br /&gt;
&lt;br /&gt;
Die Begriffe &amp;#039;&amp;#039;Objekt&amp;#039;&amp;#039; und &amp;#039;&amp;#039;[[Klasse (Objektorientierung)|Klasse]]&amp;#039;&amp;#039; kommen hingegen bei der [[Objektorientierte Programmierung|objektorientierten Programmierung]] zum Einsatz. Ein Objekttyp (Klasse) ist die programmtechnische Repräsentation eines Entitätstyps, erweitert um zugehörige Bearbeitungsfunktionen ([[Methode (Programmierung)|Methoden]]).&lt;br /&gt;
&lt;br /&gt;
== Andere Programmiersprachen ==&lt;br /&gt;
=== Objekte in C ===&lt;br /&gt;
==== Definition ====&lt;br /&gt;
In der [[Programmiersprache]] [[C (Programmiersprache)|C]] gibt es eine pragmatische Definition, was dort als Objekt gilt:&lt;br /&gt;
&lt;br /&gt;
{{Zitat&lt;br /&gt;
 |Text=&amp;#039;&amp;#039;&amp;#039;object&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;region of data storage in the execution environment, the contents of which can represent values&amp;lt;br /&amp;gt;{{Kapitälchen|Note:}} When referenced, an object may be interpreted as having a particular type; see 6.3.2.1&lt;br /&gt;
 |Sprache=en&lt;br /&gt;
 |Autor=ISO/IEC 9899:1999&lt;br /&gt;
 |Quelle=§ 3.14}}&lt;br /&gt;
&lt;br /&gt;
C gilt allerdings nicht als objektorientierte Programmiersprache. Die Konzepte der [[Objektorientierte Softwareentwicklung|objektorientierten Softwareentwicklung]], wie [[Vererbung (Programmierung)|Vererbung]], [[Polymorphie (Programmierung)|Polymorphie]] und [[Datenkapselung (Programmierung)|Datenkapselung]] fehlen im Sprachkern und müssen über selbstdefinierte [[Funktion (Programmierung)|Funktionen]] nachgebaut werden. Hierfür existieren verschiedene [[Programmbibliothek]]en. Sofern ausschließlich über diese Funktionen auf einen reservierten Speicherbereich zugegriffen wird, erfüllt er die Kriterien eines „Objektes“ aus objektorientierter Sicht.&lt;br /&gt;
&lt;br /&gt;
==== Realisierung ====&lt;br /&gt;
Der Zustand eines Objektes im Sinne der genannten Definition ist durch die Werte seiner [[Attribut (Programmierung)|Attribute]] vollständig bestimmt. Unbenannte Attribute sowie Füllbits und -bytes (Padding) tragen dabei nichts zum definierten Zustand des Objektes bei, ihr Inhalt ist undefiniert.&lt;br /&gt;
&lt;br /&gt;
C kennt keine [[Methode (Programmierung)|Methoden]]. Diese müssen über [[Funktion (Programmierung)|Funktionen]], die einen [[Zeiger (Informatik)|Zeiger]] auf den reservierten Speicherbereich als ersten [[Parameter (Informatik)|Parameter]] bekommen, nachgebildet werden. [[Polymorphie (Programmierung)|Polymorphie]] wird über Funktionszeiger, die als [[Attribut (Programmierung)|Attribute]] im Objekt gespeichert werden, realisiert.&lt;br /&gt;
&lt;br /&gt;
Die eindeutige Identität eines Objektes wird durch seine [[Speicheradresse]] definiert. Somit muss jedes Objekt eine eigene Speicheradresse haben. Dies wird sichergestellt, indem jede [[Datenstruktur]] mindestens 1&amp;amp;nbsp;Byte Speicher belegt. Wird die Speicheradresse eines Objektes im [[Computerprogramm|Programm]] jedoch nicht benötigt und kann der [[Compiler]] dies erkennen, ist es möglich, dass für dieses Objekt kein Speicher reserviert wird, da die Semantik des Programmes sich hierdurch nicht ändert.&lt;br /&gt;
&lt;br /&gt;
== Semantic Web ==&lt;br /&gt;
{{Hauptartikel|Semantic Web}}&lt;br /&gt;
Das [[Semantic Web]] ist im Wesentlichen ein [[Framework]] für verteilte Objekte. Zwei [[Schlüsseltechnologie]]n im Semantic Web sind die [[Web Ontology Language]] (OWL) und das [[Resource Description Framework]] (RDF). RDF bietet die Möglichkeit, grundlegende Objekte zu definieren –&amp;amp;nbsp;Namen, Eigenschaften, Attribute, Beziehungen&amp;amp;nbsp;–, auf die über das [[Internet]] zugegriffen werden kann. OWL fügt ein umfangreicheres Objektmodell hinzu, das auf der [[Mengenlehre]] basiert und zusätzliche Modellierungsfunktionen wie [[Mehrfachvererbung]] bietet.&lt;br /&gt;
&lt;br /&gt;
OWL-Objekte sind nicht wie standardmäßige verteilte Objekte, auf die über eine [[Schnittstellenbeschreibungssprache]] zugegriffen wird. Ein solcher Ansatz wäre für das [[Internet]] nicht geeignet, da sich das Internet ständig weiterentwickelt und eine Standardisierung auf einer Reihe von Schnittstellen schwierig zu erreichen ist. OWL-Objekte ähneln in der Regel der Art von Objekten, die zum Definieren von Anwendungsdomänen in [[Objektorientierte Programmiersprache|objektorientierten Programmiersprachen]] verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Es gibt jedoch wichtige Unterschiede zwischen OWL-Objekten und herkömmlichen [[Objektorientierte Programmierung|objektorientierten Programmierobjekten]]. Herkömmliche Objekte werden normalerweise mit einfacher [[Vererbung (Programmierung)|Vererbung]] in statische Hierarchien kompiliert, OWL-Objekte sind jedoch dynamisch. Ein OWL-Objekt kann zur [[Laufzeit (Informatik)|Laufzeit]] seine Struktur ändern und eine Instanz neuer oder anderer [[Klasse (Objektorientierung)|Klassen]] werden.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer kritischer Unterschied ist die Art und Weise, wie das Modell Informationen behandelt, die sich derzeit nicht im System befinden. Programmierobjekte und die meisten [[Datenbanksystem]]e verwenden die [[Closed world assumption]]. Wenn dem System eine Tatsache nicht bekannt ist, wird angenommen, dass diese Tatsache falsch ist. Semantic Web-Objekte verwenden die [[Open world assumption]]. Eine Aussage wird nur dann als falsch angesehen, wenn tatsächlich relevante Informationen vorliegen, dass sie falsch ist. Andernfalls wird angenommen, dass sie unbekannt ist, weder wahr noch falsch.&lt;br /&gt;
&lt;br /&gt;
OWL-Objekte ähneln tatsächlich Objekten in Rahmensprachen mit [[Künstliche Intelligenz|künstlicher Intelligenz]] wie [[KL-ONE]] und Loom.&lt;br /&gt;
&lt;br /&gt;
In der folgenden Tabelle werden herkömmliche Objekte aus [[Objektorientierte Programmierung|objektorientierten Programmiersprachen]] wie [[C-Sharp|C#]], [[C++]] und [[Java (Programmiersprache)|Java]] mit [[Semantic Web]] Objects verglichen:&amp;lt;ref&amp;gt;{{cite web |url=https://www.w3.org/2001/sw/BestPractices/SE/ODSD/ |title=A Semantic Web Primer for Object-Oriented Software Developers |last1=Knublauch |first1=Holger |last2=Oberle |first2=Daniel |last3=Tetlow |first3=Phil |last4=Wallace |first4=Evan |publisher=[[W3C]] |date=2006-03-09 |accessdate=2024-11-14 |language=en}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe6&amp;quot;&lt;br /&gt;
! Objektorientierte Programmiersprachen !! OWL und RDF&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;| Klassen und Instanzen&lt;br /&gt;
|-&lt;br /&gt;
| Klassen werden als Typen für Instanzen angesehen. || Klassen werden als Gruppen von Individuen betrachtet.&lt;br /&gt;
|-&lt;br /&gt;
| Jede Instanz hat eine Klasse als Typ. Klassen können keine Instanzen gemeinsam nutzen. || Jedes Individuum kann mehreren Klassen angehören.&lt;br /&gt;
|-&lt;br /&gt;
| Instanzen können ihren Typ zur Laufzeit nicht ändern. || Die Klassenmitgliedschaft kann sich zur Laufzeit ändern.&lt;br /&gt;
|-&lt;br /&gt;
| Die Liste der Klassen ist zur Übersetzungszeit vollständig bekannt und kann sich danach nicht mehr ändern. || Klassen können zur Laufzeit erstellt und geändert werden.&lt;br /&gt;
|-&lt;br /&gt;
| Compiler werden zur Erstellungszeit verwendet. Fehler bei der Kompilierung weisen auf Probleme hin.&lt;br /&gt;
| Reasoner können zur Klassifizierung und Konsistenzprüfung zur Laufzeit oder zur Erstellungszeit verwendet werden.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;| Eigenschaften, Attribute und Werte&lt;br /&gt;
|-&lt;br /&gt;
| Eigenschaften werden lokal für eine Klasse und ihre Unterklassen durch Vererbung definiert. || Eigenschaften sind eigenständige Entitäten, die ohne bestimmte Klassen existieren können.&lt;br /&gt;
|-&lt;br /&gt;
| Instanzen können nur Werte für die angehängten Eigenschaften haben. Die Werte müssen korrekt eingegeben werden. Bereichsbeschränkungen werden zur Typprüfung verwendet. || Instanzen können für jede Eigenschaft beliebige Werte haben. Bereichs- und Domäneneinschränkungen können zur Typprüfung und Typinferenz verwendet werden.&lt;br /&gt;
|-&lt;br /&gt;
| Klassen implementieren einen Großteil ihrer Bedeutung und ihres Verhaltens durch imperative Funktionen und Methoden. || Klassen machen ihre Bedeutung in Form von OWL-Anweisungen explizit. Es kann kein zwingender Code angehängt werden.&lt;br /&gt;
|-&lt;br /&gt;
| Klassen können ihre Member für den privaten Zugriff kapseln.&lt;br /&gt;
| Alle Teile einer OWL-Datei oder RDF-Datei sind öffentlich und können von jedem anderen Ort aus verlinkt werden.&lt;br /&gt;
|-&lt;br /&gt;
| [[Closed world assumption]]: Wenn es nicht genügend Informationen gibt, um eine Aussage als wahr zu beweisen, wird angenommen, dass sie falsch ist.&lt;br /&gt;
| [[Open world assumption]]: Wenn es nicht genügend Informationen gibt, um eine Aussage als wahr zu beweisen, kann sie wahr oder falsch sein.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;| Rolle im Designprozess&lt;br /&gt;
|-&lt;br /&gt;
| Einige generische APIs werden von Anwendungen gemeinsam genutzt. Es werden nur wenige UML-Diagramme gemeinsam genutzt.&lt;br /&gt;
| RDF und OWL wurden von Grund auf für das Web entwickelt. Domain-Modelle können online geteilt werden.&lt;br /&gt;
|-&lt;br /&gt;
| Domänenmodelle werden als Teil einer Softwarearchitektur entworfen.&lt;br /&gt;
| Domänenmodelle dienen zur Darstellung des Wissens über eine Domäne und zur Informationsintegration.&lt;br /&gt;
|-&lt;br /&gt;
| UML, Java, C# usw. sind ausgereifte Technologien, die von vielen kommerziellen und Open-Source-Tools unterstützt werden.&lt;br /&gt;
| Das Semantic Web ist eine aufstrebende Technologie mit einigen Open-Source-Tools und einer Handvoll kommerzieller Anbieter.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;| Verschiedene Funktionen&lt;br /&gt;
|-&lt;br /&gt;
| Instanzen sind insofern anonym, als sie von außerhalb eines ausführenden Programms nicht einfach angesprochen werden können.&lt;br /&gt;
| Alle genannten RDF- und OWL-Ressourcen verfügen über einen eindeutigen [[Uniform Resource Identifier|URI]], unter dem auf sie verwiesen werden kann.&lt;br /&gt;
|-&lt;br /&gt;
| UML-Modelle können in XML serialisiert werden, das für den Austausch von Tools ausgelegt ist, jedoch nicht wirklich webbasiert. Java-Objekte können in verschiedenen XML-basierten oder nativen Zwischenformaten serialisiert werden.&lt;br /&gt;
| RDF- und OWL-Objekte verfügen über eine auf XML basierende Standardserialisierung mit eindeutigen [[Uniform Resource Identifier|URIs]] für jede Ressource in der Datei.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Objektorientierte Programmierung]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Y2kbug</name></author>
	</entry>
</feed>