Objektorientierte Programmierung: Unterschied zwischen den Versionen

Aus KGS-Wiki
K (Links ergänzt)
Keine Bearbeitungszusammenfassung
 
(4 dazwischenliegende Versionen von 2 Benutzern 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 oder.
* ''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 30: Zeile 30:
==Konzepte==
==Konzepte==


* '''[[Abstraktion]]''':<br> 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).
;[[Abstraktion]]:<br> 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).
**'''[[Klasse (Informatik)|Klassen]]''':<br> Klassen bestehen aus '''Attributen''' (Eigenschaften)und '''Methoden''', zum beschreiben des Verhaltens, welche von der Basisklasse vererbt werden können.
:;[[Klasse (Informatik)|Klassen]]:<br> Klassen bestehen aus '''Attributen''' (Eigenschaften)und '''Methoden''', zum beschreiben des Verhaltens, welche von der Basisklasse vererbt werden können.
**'''[[Prototyp (Objektorientierung)|Prototypen]]''':<br> Prototypen können geklont werden. Diese '''Klone''' müssen ''nur'' ihre Unterschiede definieren. Jede Veränderung am Prototypen werden dynamisch auf die Klone übertragen.
:;[[Prototyp (Objektorientierung)|Prototypen]]:<br> Prototypen können geklont werden. Diese '''Klone''' müssen ''nur'' ihre Unterschiede definieren. Jede Veränderung am Prototypen werden dynamisch auf die Klone übertragen.
*'''[[Datenkapselung]]''' (Enkapsulation): <br> Datenkapselung beschreibt das '''Verbergen von Details''' eines Objektes, welche jedoch mit einer Schnittstelle veränderbar sein können. ''(z.B. public, protected, private)''
;[[Datenkapselung]] (Enkapsulation): <br> Datenkapselung beschreibt das '''Verbergen von Details''' eines Objektes, welche jedoch mit einer Schnittstelle veränderbar sein können. ''(z.B. public, protected, private)''
*'''[[Feedback]]''':<br> 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)''
;[[Feedback]]:<br> 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]]''':<br> '''Objektvariablen''' existieren, solange die Objekte vorhanden sind und '''„verfallen“ nicht''' nach Abarbeitung einer Methode.
;[[Persistenz]]:<br> '''Objektvariablen''' existieren, solange die Objekte vorhanden sind und '''„verfallen“ nicht''' nach Abarbeitung einer Methode.
*'''[[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 />
{{Navigationsleiste OOM}}
[[Kategorie:Objektorientierte Programmierung]]
[[Kategorie:Objektorientierte Programmierung]]
[[Kategorie:Programmierung]]
[[Kategorie:Programmierung]]

Aktuelle Version vom 17. November 2024, 12:34 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]:

  1. Everything is an Object
  2. Objects communicate by sending and receiving messages
  3. Objects have their own memory
  4. Every object is an instance of a class (which itself is also an object)
  5. The class holds the shared behaviour for its instances (in the form of objects in a program list)
  6. 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.
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

Quellen