Einführung OOP
Prozedurale Programmierung
Bei der prozeduralen Programmierung wird ein Problem in Teilprobleme zerlegt. Diese werden in Funktionen (auch: Prozeduren) mit einem Eingang und einem Ausgang gelöst.
Funktionen sollen Daten verarbeiten, die ihnen über Parameterlisten als Schnittstellen übergeben worden sind.
Ursprünglich dienten Computer fast ausschließlich dazu, Rechenaufgaben
zu lösen, deren Umfang und Komplexität relativ begrenzt war. Die
Programme waren noch relativ klein (gemessen an heutigen Maßstäben). Für
diese Zwecke war das Programmierkonzept der prozeduralen Programmierung
völlig ausreichend.
Mit
steigender Leistung der Computer wuchs aber auch die Größe und
Komplexität der Programme sehr stark. Der Computer vollzog einen Wandel
zu einem universellen Arbeitsgerät. Heute erstrecken sich die
Anwendungen über Gebiete wie z.B. Multimedia, künstlicher Intelligenz
und Kommunikation.
Das erfordert eine größere Übersicht bei der Programmierung, bzw. mehr Programmstruktur.
Diese Entwicklung erforderte ein Umdenken auch bei dem Programmierkonzept:
Objektorientiertes Programmieren
Die reale Welt besteht nicht aus Abläufen, die man gut mittels Funktionen in der abstrakten prozeduralen Art und Weise darstellen kann. (Programme bilden immer auf die eine oder andere Art die Realität ab.)
Die Welt besteht zunächst einmal aus Dingen, Gegenständen, Personen etc., die es zu betrachten und damit in den Vordergrund zu stellen gilt. Diese Objekte haben bestimmte Eigenschaften und interagieren in bestimmter Weise miteinander.
Objekte verarbeiten mit ihren eigenen Methoden die eigenen Daten (Eigenschaften).
Wenn Objektdaten (Eigenschaften) nur über eine Methode des Objekts selbst verändert werden können und niemals direkt, spricht man von Datenkapselung.
Objekt
Die Eigenschaft "Geldmenge"eines Geldautomaten kann nur durch eine Methoden "ein- und auszahlen" genau dieses Geldautomaten verändert werden. Direkt lässt sie sich nicht verändern, was die Programmsicherheit stark erhöht. Die Geldmenge des Nachbarautomaten ist nur durch die Methoden "ein- und auszahlen" eben dieses Nachbarautomaten möglich.
- namespace Geldautomat
- {
- class Program
- {
- static void Main(string[] args) // Programmstart
- {
- Geldautomat ga1 = new Geldautomat(); // Erzeugung eines Objekts ga1
- // der Klasse Geldautomat
- ga1.einzahlen(1000); // Aufruf der Methode einzahlen()
- // des Objekts ga1
- Console.WriteLine(ga1.auszahlen(100));
- }
- }
- class Geldautomat // Klassendefinition
- {
- private double geldMenge; // gekapselte Eigenschaft: in allen Methoden der Klasse verfügbar
- public double auszahlen(double betrag) // Methodendefinition
- {
- if (geldMenge >= betrag)
- {
- geldMenge -= betrag;
- return betrag;
- }
- else
- return -1; // Fehlercode
- }
- public void einzahlen(double betrag)
- {
- geldMenge += betrag;
- }
- }
- }
| Objektorientierte Programmierung | Prozedurale Programmierung |
| + Reale Welt besteht aus Objekten, daraus folgt, bessere Abbildbarkeit. + Durch Datenkapselung sind die Eigenschaften eines Objektes geschützt. + Mehr Übersicht => bessere Wartbarkeit usw. + Wiederverwendung durch Vererbung wird erleichtert. |
+ Etwas weniger Quellcode bei kleinen Programmen, + etwas mehr Performance (Geschwindigkeit) bei Interpreter- Sprachen |