Objektorientierte Programmierung: Unterschied zwischen den Versionen
Sn (Diskussion | Beiträge) K (Links ergänzt) |
Sn (Diskussion | Beiträge) K (Quellen-Abschnitt) |
||
(2 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Objektorientierte Programmierung]] ('''OOP''') ist ein [[Programmierparadigma]], welches [[Objekt (Informatik)|Objekt]]e und [[Unterprogramm#Methoden|Methoden]], statt [[Logik]] und [[Unterprogramm#Funktionen|Funktionen]] (siehe: [[Prozedurale Programmierung]]), benutzt, um Daten zu manipulieren. Bei einem OOP handelt es sich um eine Abstraktion (Vereinfachung; [[Datentyp|Typen]]) von Objekten, die es dem Benutzer einfacher macht mit Code umzugehen. Dafür werden verschiedene neue Konzepte benutzt: '''[[Klasse (Informatik)|Klasse]]n'''(eng. ''class''), '''[[Datenkapselung]]''' (eng. encapsulation), '''[[Vererbung (Informatik)|Vererbung]]''' (eng. inheritance), '''[[Polymorphie]]''' (eng. polymorphism). und [[Dynamisches Binden|'''Dynamisches''' '''Binden''']] (eng. dynamic binding). | <onlyinclude>[[Objektorientierte Programmierung]] ('''OOP''') ist ein [[Programmierparadigma]], welches [[Objekt (Informatik)|Objekt]]e und [[Unterprogramm#Methoden|Methoden]], statt [[Logik]] und [[Unterprogramm#Funktionen|Funktionen]] (siehe: [[Prozedurale Programmierung]]), benutzt, um Daten zu manipulieren. Bei einem OOP handelt es sich um eine Abstraktion (Vereinfachung; [[Datentyp|Typen]]) von Objekten, die es dem Benutzer einfacher macht mit Code umzugehen. Dafür werden verschiedene neue Konzepte benutzt: '''[[Klasse (Informatik)|Klasse]]n'''(eng. ''class''), '''[[Datenkapselung]]''' (eng. encapsulation), '''[[Vererbung (Informatik)|Vererbung]]''' (eng. inheritance), '''[[Polymorphie]]''' (eng. polymorphism). und [[Dynamisches Binden|'''Dynamisches''' '''Binden''']] (eng. dynamic binding).</onlyinclude> | ||
In der OOP werden verschiedene Begriffe synonym benutzt um bestimmte Sachverhalte deutlich zu machen: | In der OOP werden verschiedene Begriffe synonym benutzt um bestimmte Sachverhalte deutlich zu machen: | ||
Zeile 9: | Zeile 9: | ||
* ''Parameter:'' Wert, welcher einer Methode/Funktion weitergegeben wird und innerhalb dieser einer Variabel zugewiesen wird. | * ''Parameter:'' Wert, welcher einer Methode/Funktion weitergegeben wird und innerhalb dieser einer Variabel zugewiesen wird. | ||
* ''Methode, Tätigkeit:'' eine Funktion innerhalb eines Objektes, welches Parameter annehmen kann. | * ''Methode, Tätigkeit:'' eine Funktion innerhalb eines Objektes, welches Parameter annehmen kann. | ||
* ''kommunizieren mit einem anderen Objekt, Schnittstellen:'' eine Methode eines anderen Objektes aufrufen | * ''kommunizieren mit einem anderen Objekt, Schnittstellen:'' eine Methode eines anderen Objektes aufrufen. | ||
* ''Nachricht:'' das Aufrufen einer Methode''.'' | * ''Nachricht:'' das Aufrufen einer Methode''.'' | ||
* ''Antwort, reagieren:'' das zurückgeben eines Wertes ''(return).'' | * ''Antwort, reagieren:'' das zurückgeben eines Wertes ''(return).'' | ||
Zeile 38: | Zeile 38: | ||
*'''[[Polymorphie]]''':<br> Jede Subklasse einer Basisklasse kann eine '''Methode anders definieren''', als vorgegeben. ''"Verschiedene Objekte können auf die gleiche Nachricht unterschiedlich reagieren."'' | *'''[[Polymorphie]]''':<br> Jede Subklasse einer Basisklasse kann eine '''Methode anders definieren''', als vorgegeben. ''"Verschiedene Objekte können auf die gleiche Nachricht unterschiedlich reagieren."'' | ||
*'''[[Vererbung (Informatik)|Vererbung]]''':<br> Eine abgeleitete ''(extended)'' Klasse übernimmt ''("'''erbt'''")'' alle Bestandteile der Basisklasse. Es können weiterhin Methoden, sowie Attribute hinzugefügt und verändert werden. | *'''[[Vererbung (Informatik)|Vererbung]]''':<br> Eine abgeleitete ''(extended)'' Klasse übernimmt ''("'''erbt'''")'' alle Bestandteile der Basisklasse. Es können weiterhin Methoden, sowie Attribute hinzugefügt und verändert werden. | ||
== Zugriffskontrolle == | |||
{| class="wikitable" | |||
|+ | |||
!Modifier | |||
!Class | |||
!Package | |||
!Subclass | |||
!World | |||
|- | |||
|<code>public</code> | |||
|Y | |||
|Y | |||
|Y | |||
|Y | |||
|- | |||
|<code>protected</code> | |||
|Y | |||
|Y | |||
|Y | |||
|N | |||
|- | |||
|no modifier (package bei UML) | |||
|Y | |||
|Y | |||
|N | |||
|N | |||
|- | |||
|<code>private</code> | |||
|Y | |||
|N | |||
|N | |||
|N | |||
|} | |||
== Quellen == | |||
<references /> | |||
[[Kategorie:Objektorientierte Programmierung]] | [[Kategorie:Objektorientierte Programmierung]] | ||
[[Kategorie:Programmierung]] | [[Kategorie:Programmierung]] |
Aktuelle Version vom 6. Oktober 2023, 22:55 Uhr
Objektorientierte Programmierung (OOP) ist ein Programmierparadigma, welches Objekte und Methoden, statt Logik und Funktionen (siehe: Prozedurale Programmierung), benutzt, um Daten zu manipulieren. Bei einem OOP handelt es sich um eine Abstraktion (Vereinfachung; Typen) von Objekten, die es dem Benutzer einfacher macht mit Code umzugehen. Dafür werden verschiedene neue Konzepte benutzt: Klassen(eng. class), Datenkapselung (eng. encapsulation), Vererbung (eng. inheritance), Polymorphie (eng. polymorphism). und Dynamisches Binden (eng. dynamic binding).
In der OOP werden verschiedene Begriffe synonym benutzt um bestimmte Sachverhalte deutlich zu machen:
- Typ (eng. Type): eine Klasse.
- Instanz: ein Objekt.
- Instanziieren: erstellen eines Objektes.
- Attribute, Properties: Variablen innerhalb eines Objektes.
- Parameter: Wert, welcher einer Methode/Funktion weitergegeben wird und innerhalb dieser einer Variabel zugewiesen wird.
- Methode, Tätigkeit: eine Funktion innerhalb eines Objektes, welches Parameter annehmen kann.
- kommunizieren mit einem anderen Objekt, Schnittstellen: eine Methode eines anderen Objektes aufrufen.
- Nachricht: das Aufrufen einer Methode.
- Antwort, reagieren: das zurückgeben eines Wertes (return).
- Details, Objektdefinitionen, Bestandteile, Implementierungsdetails, interne Datenstruktur, etc.: Methoden und Attribute eines Objektes.
- Verbergen: ein Attribut privat oder protected machen.
Definition
Die Definition von Objektorientiertem Programmieren variiert in verschiedenster Weise und wurden demnach immer anders aufgefasst.
Eine Definition von Alan Kay mit Bezug auf die Sprache Smalltalk war wie folgt[1]:
- Everything is an Object
- Objects communicate by sending and receiving messages
- Objects have their own memory
- Every object is an instance of a class (which itself is also an object)
- The class holds the shared behaviour for its instances (in the form of objects in a program list)
- To eval a program list, control is passed to the first object and the remainder is treated as its message (Not sure what he means by remainder)
Die Definition der ISO/IEC-2382-15-Standard von 1999 lautet jedoch wie folgt:
"Pertaining to a technique or a programming language that supports objects, classes, and inheritance."
Wobei hier die Simplizität der Beschreibung zu bemängeln ist und die Beschreibung nicht jeder OOP-Sprache zuzuschreiben ist, da manche keine Klassen benutzen.
Konzepte
- Abstraktion:
Jedes Objekt kann wie ein Modell eines Akteurs betrachtet werden. Dieser erledigt Aufträge, berichtet und verändert seinen Zustand und kommuniziert mit anderen Objekten, ohne offenlegen zu müssen, wie diese Fähigkeiten implementiert sind. Abstraktionen sind entweder Klassen oder Prototypen (je nach Programmierart).- Klassen:
Klassen bestehen aus Attributen (Eigenschaften)und Methoden, zum beschreiben des Verhaltens, welche von der Basisklasse vererbt werden können. - Prototypen:
Prototypen können geklont werden. Diese Klone müssen nur ihre Unterschiede definieren. Jede Veränderung am Prototypen werden dynamisch auf die Klone übertragen.
- Klassen:
- Datenkapselung (Enkapsulation):
Datenkapselung beschreibt das Verbergen von Details eines Objektes, welche jedoch mit einer Schnittstelle veränderbar sein können. (z.B. public, protected, private) - Feedback:
Feedback beschreibt die Nutzung von Nachricht-Antwort-Mechanismus, der zu Veränderungen in einem Objekt führt und neue Nachrichtenaufrufe erzeugt. (z.B. return, exception, catch) - Persistenz:
Objektvariablen existieren, solange die Objekte vorhanden sind und „verfallen“ nicht nach Abarbeitung einer Methode. - Polymorphie:
Jede Subklasse einer Basisklasse kann eine Methode anders definieren, als vorgegeben. "Verschiedene Objekte können auf die gleiche Nachricht unterschiedlich reagieren." - Vererbung:
Eine abgeleitete (extended) Klasse übernimmt ("erbt") alle Bestandteile der Basisklasse. Es können weiterhin Methoden, sowie Attribute hinzugefügt und verändert werden.
Zugriffskontrolle
Modifier | Class | Package | Subclass | World |
---|---|---|---|---|
public
|
Y | Y | Y | Y |
protected
|
Y | Y | Y | N |
no modifier (package bei UML) | Y | Y | N | N |
private
|
Y | N | N | N |