Erklärung : Objekt-orientierte Programmierung


#1
Erklärung : Objekt Orientierte Programmierung

[von JoelH]

OOP verfolgt einen völlig anderen Ansatz als Prozedurale Programmierung ! OOP versucht die Welt zu beschreiben und dies dann in Klassen zu fassen während Prozedurale Methoden versuchen ein Problem zu lösen.

d.h. Ein OOP Progger versucht erstmal zu erkennen was das teil machen soll und von wem es abstmmt wärend ein zB: Pascal Progger einfach das Problem löst

Nee, so einfach ist es natürlich nciht, OOP hat eine Idee die sehr gut ist wenn man grosse Projekte startet, nehmen wir einfach man Windows, die Fenster sind eigentlich immer gleich, sie sind ein Objekt, jeder der Windows programmiert hat die Fensterklasse und muss sie sich nicht selbst basteln, aber man kann sie auch erweitern, sagen wir mal um ein Unterfenster oder so, dann nimmt man einfach die vorhandene Klasse und erweitert sie um 2 'Methoden', Methoden sind 'Eigenschaften' die Klassen (Fenster) haben. Nehmen wir das auf und zuziehen dieser eben .
Man hat den Vorteil dass man einfach den alten Code gut weiterverwenden kann ohne auf viel achten zu müssen weil die ganzen Konventionen von der Programmiersprache übernommen wird.

Bei Prozeduralen Sprachen geht das eigentlich auch, denn man kann ja Prozeduren schreiben die man als Units an andere Programme weitergibt, aber die's ist nicht wirklcih dasselbe weil es einfach nicht so weitreichend ist ! Funtionen kann man nicht einfach erweitern um einen Integerwert oder eine Eigenschaft, das geht nur bei Klassen denen man eine weitere Methode gibt.
 
#2
ein kleines beispiel...

um das prinzip der objektorientierung anhand von etwas alltäglichem deutlich zu machen, benutze ich immer wieder gerne ein bestimmtes beispiel: ein fahrzeug.

ein fahrzeug ist eine klasse, die durch bestimmte grundlegende eigenschaften charakterisiert wird. beispielsweise hat jedes fahrzeug eine farbe, eine seriennummer, eine höchstgeschwindigkeit, etc.
ausserdem hat die klasse der fahrzeuge verschiedene methoden, mit denen man die zweckmässigen aktionen von fahrzeugen auslösen kann - beispielsweise fahren, bremsen, lenken, usw.

da die klasse der fahrzeuge aber noch sehr ungenau definiert ist, kann man damit evtl. nicht das machen, was man gerade braucht - z.b. hat nicht jedes fahrzeug ein dach. wenn es jetzt allerdings regnet und man möchte nicht nass werden, dann hätte man schon gerne ein fahrzeug mit dach.
also leitet man sich von der klasse der fahrzeuge eine unterklasse der "fahrzeuge mit dach" ab. diese unterklasse hat alle eigenschaften und methoden der fahrzeuge und zusätzlich noch ein dach. da der name "fahrzeuge mit dach" ziemlich bescheuert klingt, nennen wir diese abgeleitete klasse einfach "auto". ;)

jedes auto weltweit stammt nun von dieser klasse ab und stellt eine eigene instanz der klasse dar, ein objekt. ein objekt verhält sich zu einer klasse ähnlich wie eine variable zu einem datentypen.
obwohl jeder golf gti die gleichen eigenschaften und methoden hat, ist jeder einzelne davon einzigartig und eindeutig identifizierbar.

haben wir nicht noch irgendwas ganz wichtiges vergessen? richtig! ein auto braucht natürlich auch reifen, türen, fenster, motor, und und und. da diese bauteile aber wieder eigene klassen sind, können davon nur instanzen verwendet werden. wir halten also fest, dass eine klasse andere objekte enthalten kann - diese unterobjekte werden meistens ähnlich wie eigenschaften behandelt.

dazu kommen bei den klassen noch ereignisse, die durch bestimmte aktionen ausgelöst werden. bei der verarbeitung dieser ereignisse werden wieder andere aktionen und methoden ausgeführt. am beispiel der autos ist ein solches ereignis z.b. ein einbruchversuch: wenn ein einbruch stattfindet, können verschiedene dinge passieren - in diesem beispiel könnte unter anderem die alarmanlage ausgelöst werden.

eine ganz konkrete zusammenfassung unseres autos wäre also folgende: ein grüner golf gti mit 180ps, klimaanlage und cd-wechsler im kofferraum. wenn jemand versucht einzubrechen, geht der alarm los.

ich hoffe, ich hab mit diesem kleinen alltagsbeispiel niemanden verwirrt. :rolleyes:
natürlich ist das hier nicht vollständig, eine komplette behandlung des themas würde auch wesentlich umfangreicher ausfallen. ;)