Prozedurale vs. objektorientierte Programmierung

Objektorientierte Programmierung ist ein Programmierparadigma, das die Abstraktion (in Form von Klassen und Objekten) nutzt, um Modelle auf der Grundlage der realen Umgebung zu erstellen. Anders als die prozedurale Programmierung verwendet eine objektorientierte Anwendung eine Sammlung von Objekten, die durch die Übergabe von Nachrichten an Anforderungsdienste kommunizieren. Objekte sind in der Lage, Nachrichten zu übergeben, Nachrichten zu empfangen und Daten zu verarbeiten.

Ziel der objektorientierten Programmierung ist es, die Flexibilität und Wartbarkeit von Programmen zu erhöhen. Die prozedurale Programmierung verfolgt einen anderen Ansatz, hier steht der Code im Vordergrund. Da Programme in der objektorientierten Entwicklung modular sind, können sie einfacher zu entwickeln und nach der Entwicklung einfacher zu verstehen sein.

Objektorientierte Programmierung vs. Prozedurale Programmierung

Programme bestehen aus Modulen, die Teil eines Programms sind, das separat kodiert und getestet werden kann, und dann zu einem vollständigen Programm zusammengestellt werden. Die prozedurale Programmierung in Sprachen wie zum Beispiel C nutzt für diese Module Prozeduren, bei denen eine Prozedur eine Folge von Anweisungen ist. In C sind Prozeduren beispielsweise eine Folge von zwingenden Anweisungen. Hierzu zählen zum Beispiel Schleifen, Test, Zuweisungen sowie Aufrufe von Unterprozeduren. Diese Prozeduren sind bestimmte Funktionen, die definierte Argumente abbilden, um Anweisungen zurückzugeben.

Die prozedurale Programmierung verwendet als Entwurfsmethode das „Top-Down-Design“. Hier beginnst Du mit einem Problem (Prozedur) und zerlegst das Problem dann systematisch in Teilprobleme (Teilprozeduren). Dies wird als funktionale Zerlegung bezeichnet, die so lange andauert, bis ein Teilproblem einfach genug ist, um durch die entsprechende Teilprozedur gelöst zu werden. Prozedurale Programmierung hat zur Folge, dass die Softwarepflege komplex und zeitaufwendig sein kann. Wenn Du Änderungen an der Hauptprozedur vornehmen musst, können diese Änderungen in die Unterprozeduren der Hauptprozedur und deren Unterprozeduren kaskadiert werden, wobei die Änderung alle Prozeduren in der Pyramide beeinflussen kann.

In der Webentwicklung und SPS Programmierung stößt die prozedurale Programmierung an ihre Grenzen. Eine Alternative ist die objektorientierte Programmierung. Die objektorientierte Programmierung soll die Schwierigkeiten, wie sie für die prozedurale Programmierung bekannt sind, beheben. Objektorientierte Programmierung nutzt als die Hauptmodule eines Programms eher Klassen als Prozeduren. Mit dem objektorientierten Ansatz kannst Du Klassen und Objekte erstellen, die reale Objekte modellieren. Dieser Ansatz ist für Softwareentwickler in der Webentwicklung und vielen anderen Gebieten besser geeignet.

Objektorientierte Programmierung: Klassen und Objekte

Eine Klasse ist eine Sammlung von Objekten, die gemeinsame Eigenschaften, Operationen und Verhaltensweisen haben. Eine Klasse ist eine Kombination aus Zustand (Daten) und Verhalten (Methoden). In objektorientierten Sprachen ist eine Klasse ein Datentyp. Objekte sind Instanzen dieses Datentyps. Klassen sind also Prototypen, aus denen Objekte erstellt werden.

Zum Beispiel kannst Du eine Klasse Mensch programmieren, die eine Sammlung aller Menschen der Welt ist. Menschen haben einen Zustand, wie Größe, Gewicht und Haarfarbe. Sie besitzen auch Verhaltensweisen wie Essen, Gehen und Sprechen. Die gesamten Zustände sowie das Verhalten einer Person ist in der Klasse Mensch verkapselt (enthalten).

Ein Objekt ist eine Instanz einer Klasse. Objekte sind Einheiten der Abstraktion. Ein Objekt kann mit anderen Objekten über Nachrichten kommunizieren. Ein Objekt übergibt eine Nachricht an ein anderes Objekt, was zum Aufruf einer Methode führt. Objekte führen dann die Aktionen aus, die erforderlich sind, um eine Antwort vom System zu erhalten.

Reale Objekte besitzen alle zwei Eigenschaften: Zustand und Verhalten. Eine Möglichkeit, objektorientiert zu denken, besteht darin, den Zustand und das Verhalten von realen Objekten zu identifizieren. Die Komplexität der Objekte kann unterschiedlich sein, einige Objekte haben mehr Zustände und komplexere Verhaltensweisen als andere Objekte. Vergleiche den Zustand und das Verhalten eines Fernsehers mit dem Zustand und dem Verhalten eines Autos.

Beim Programmieren sind Software-Objekte konzeptionell den realen Objekten ähnlich. Ein Objekt speichert seinen Zustand in Feldern und es zeigt sein Verhalten durch seine Methoden an.

Die objektorientierte Programmierung besitzt als Grundprinzip die Kapselung, das Verstecken eines internen Zustands eines Objekts und die Anforderung, dass alle Interaktionen mit den Objektmethoden durchgeführt werden.

Beispiel für Klassen und Objekte – Klasse Fahrrad

Es gibt viele Arten von Fahrrädern, aber jedes Fahrrad wurde nach dem gleichen Konzept (oder Prototyp) gebaut und jedes Fahrrad enthält die gleichen Komponenten. Dein Fahrrad (ein bestimmtes Fahrradobjekt) ist eine Instanz einer Klasse von Objekten, die als Fahrräder bezeichnet werden. Beim Programmieren beschreibst Du den Zustand und das Verhalten eines Fahrrads.

Felder und Methoden

Objekte in einer Klasse haben eine Reihe von gemeinsamen Eigenschaften. Felder sind die in einer Klasse enthaltenen (gekapselten) Variablen, die zur Darstellung dieser Eigenschaften verwendet werden. So kann beispielsweise die Klasse Student ein ganzzahliges Feld für das Abschlussjahr oder ein Zeichenkettenfeld für den Nachnamen des Studenten besitzen.

Bevor Felder in einem Objekt bewertet werden können, muss das Objekt zunächst konstruiert bzw. angelegt werden. In Java (als Beispiel für eine OO-Sprache) wird eine spezielle Funktion namens Konstruktor verwendet, um eine Instanz einer Klasse zu erzeugen und zu initialisieren. Der Befehl:

neuer Student();

erzeugt eine Instanz der Klasse Student, d. h. ein Student Objekt. Jede Klasse hat Operationen, die mit ihr verbunden sind. Jedes Studentenobjekt hat eine Reihe von unterschiedlichen Verhaltensweisen, wie zum Beispiel Lernen, Schlafen, Arbeiten. Die einer Klasse zugeordneten Operationen sowie die Attribute einer Klasse werden innerhalb der Klasse gekapselt. Diese Operationen werden als Methoden einer Klasse bezeichnet. Methoden sind Funktionen, die die Operationen repräsentieren, die einer bestimmten Klasse zugeordnet sind. Felder und Methoden werden als Klassenmitglieder bezeichnet.

Verkapselung

Die Fähigkeit eines Objekts, seine Daten und Methoden vor dem Rest der Welt zu verstecken ist eines der Grundprinzipien der OOP. Da Objekte Daten und Implementierung kapseln, kann der Benutzer eines Objekts das Objekt als Black Box betrachten, die Dienste bereitstellt. Instanzvariablen und -methoden können hinzugefügt, gelöscht oder geändert werden. Aber solange die vom Objekt bereitgestellten Dienste gleich bleiben, kann Code das Objekt weiterhin verwenden, ohne ihn neu programmieren zu müssen.

Kopplung ist der Grad, in dem ein Modul (Klasse) von anderen Klassen abhängt. Bei einem guten Design solltest Du versuchen, die Kopplung zu minimieren. Klassen sollten in sich geschlossene Einheiten sein, die eine geringe Abhängigkeit von anderen Klassen aufweisen. Das Verstehen und Verwenden einer Klasse sollte kein Verständnis einer anderen Klasse erfordern. Bei niedriger Kopplung erfordert eine Änderung in einem Modul keine Änderungen in anderen Modulen.

Im Zusammenhang mit dem Konzept der Kopplung steht das Verstecken von Informationen. Information Hiding schützt andere Teile des Programms vor Änderungen, wenn die Implementierung geändert wird. Der Schutz einer Implementierung beinhaltet die Bereitstellung einer stabilen Schnittstelle, über die andere Klassen auf die von der Klasse bereitgestellten Dienste zugreifen können. Häufig werden Verkapselung und Informationsverschleierung austauschbar eingesetzt.

Beispiel: Auto und Fahrer

Kohäsion ist das Maß innerhalb eines Moduls (Klasse) dafür, wie gut die Mitglieder zusammenarbeiten, um eine bestimmte Funktionalität bereitzustellen. Der Zusammenhalt wird daran gemessen, wie stark die Verantwortlichkeiten einer einzelnen Klasse miteinander verbunden und fokussiert sind. Bei gutem Programmieren sollte die Kohäsion maximiert werden. Der Zusammenhalt wird verringert, wenn die Methoden einer Klasse wenig gemeinsam haben oder Methoden viele Aktivitäten durchführen.

Wenn die Kohäsion gering ist, können Module schwer verständlich sein, die Wartung ist schwierig, weil Änderungen viele Module betreffen können, und Module können nicht wiederverwendet werden, weil es unwahrscheinlich ist, dass eine andere Anwendung eine Verwendung für die zufällige Gruppierung von Funktionen hat.

Beispiel: Herd mit eingebautem Radio und Wecker.

Ein gut durchdachtes System sollte die Kohäsion maximieren und die Kopplung minimieren.

Vererbung

Mehrere Klassen können einige der gleichen Merkmale teilen und Dinge miteinander gemeinsam haben, aber auch bestimmte Eigenschaften besitzen, die sie voneinander unterscheiden. Objektorientierte Programmiersprachen ermöglichen es Klassen, häufig verwendete Zustände und Verhaltensweisen von anderen Klassen zu übernehmen.

Klassen in Java kommen in Vererbungshierarchien vor. Diese Hierarchien bestehen aus übergeordneten Kindbeziehungen zwischen den Klassen. Die Vererbung wird verwendet, um eine übergeordnete Klasse zu spezialisieren und um eine Unterklasse zu erstellen. Die Vererbung ermöglicht es dem Softwareentwickler auch, Merkmale von Klassen in einem gemeinsamen übergeordneten System zu kombinieren.

Vorteile der objektorientierten Programmierung für Softwareentwickler

  1. Modularität:
    Der Quellcode einer Klasse kann unabhängig vom Quellcode anderer Klassen geschrieben und gepflegt werden. Einmal erstellt, kann ein Objekt einfach innerhalb des Systems weitergegeben werden.
  2. Informationen verbergen:
    Durch die Interaktion nur mit den Methoden eines Objekts bleiben die Details seiner internen Implementierung der Außenwelt verborgen.
  3. Wiederverwendung von Code:
    Wenn bereits eine Klasse existiert, kannst Du Objekte aus dieser Klasse in Deinem Programm verwenden. Auf diese Weise können Softwareentwickler komplexe, aufgabenspezifische Objekte implementieren, testen und debuggen, die Sie dann in Ihrem eigenen Code verwenden können.
  4. Einfaches Debuggen:
    Wenn sich ein bestimmtes Objekt als Problem herausstellt, kannst Du es einfach aus Deiner Anwendung entfernen und ein anderes Objekt als Ersatz verwenden. Dies ist analog zur Behebung mechanischer Probleme in der realen Welt. Wenn eine Schraube bricht, tauscht Du nur diese aus, nicht die gesamte Maschine.

Zusammenfassung der objektorientierten Konzepte

  • Alles ist ein Objekt.
  •  Die (SPS) Programmierung erfolgt durch Objekte, die miteinander kommunizieren und verlangen, dass andere Objekte Aktionen ausführen. Objekte kommunizieren, indem sie Nachrichten senden und empfangen. Eine Nachricht ist eine Aufforderung zum Handeln, gebündelt mit allen Argumenten, die zur Erfüllung der Aufgaben erforderlich sind.
  • Jedes Objekt hat seinen eigenen Speicher, der aus anderen Objekten besteht.
  • Jedes Objekt ist eine Instanz einer Klasse. Eine Klasse stellt einfach eine Gruppierung ähnlicher Objekte dar, wie zum Beispiel ganze Zahlen oder Listen.
  • Die Klasse ist die Zusammenfassung der mit einem Objekt verbundenen Verhalten. Das heißt, dass alle Objekte, die Instanzen derselben Klasse sind, die gleichen Aktionen durchführen können.
  • Die Klassen sind in einer einzeln verwurzelten Baumstruktur organisiert, der sogenannten Vererbungshierarchie. Speicher und Verhalten, die mit Instanzen einer Klasse verbunden sind, stehen automatisch jeder Klasse zur Verfügung, die mit einem Nachkommen in dieser Baumstruktur verbunden ist.

Fazit

Die objektorientierte Programmierung besitzt eine Reihe von Vorteilen. Anders als die prozedurale Programmierung stehen hier nicht die programminternen Prozeduren im Mittelpunkt, sondern Objekte. Diese können miteinander kommunizieren und ihre Eigenschaften sind vererbbar. Besserer Code und einfachere Wartung zeichnen die objektorientierte Programmierung aus.

Programmieren ist nicht gleich Informatik

Programmieren und Informatik: Zwei Begriffe, die oft vertauscht werden. Das kommt daher, dass das Feld der Informationstechnik eines der kompliziertesten der Berufswelt ist. Die relativ junge Disziplin stellt viele Menschen immer noch vor Rätsel und das, obwohl die Welt ohne ihre technischen Fortschritte nicht mehr auskommen würde.

Allgemein lässt sich sagen, dass Programmieren teil der Informatik ist, diese allerdings viele Themengebiete umfasst, von denen das Programmieren nur eines dieser Teilgebiete ist. Wer also ein Informatik Studium oder IT Studium absolvieren will, wird auch programmieren lernen.
  • Die Informatik beschäftigt sich mit der Darstellung, Speicherung, Verarbeitung und Übertragung von Informationen mit der Hilfe von Computern
  • Die Programmierung hingegen ist ein Teilgebiet der Softwareentwicklung. Hier wird ein Programm von einem Entwickler geschrieben, sodass dieses auf einem Computer einsetzbar ist.

Doch es gibt noch viele weitere, tiefgreifende Unterschiede zwischen den beiden Begriffen und gerade, wenn es darum geht, sich für einen Job zu entscheiden, müssen alle diese Unterschiede aufgezeigt werden.

Die Informatik

Geschichte

Der Begriff setzt sich aus den beiden Wörtern Mathematik und Informationen zusammen und kann als eine der Naturwissenschaften gesehen werden. Die Disziplin wurde sowohl aus mathematischen Berufen, als auch aus dem Ingenieurwesen entwickelt, da die genauen Berechnungen von Computern immense Vorteile darstellten.

Erste Ursprünge lassen sich bereits im Mittelalter finden. Bereits damals wurden Geräte entwickelt, um mathematische Probleme systematisch lösen zu können. Der Rechenschieber ist ein analoges Beispiel für einen Computer, mit dem erste primitive Operationen durchgeführt werden konnten. Andere sehen bereits den Algorithmus des Euklid im antiken Griechenland, als den Urahn der Informatik. Hier wurde eine Gleichung aufgestellt, um den kleinstmöglichen, gemeinsamen Teiler zu finden.

Bis heute wird dieser Algorithmus als eine der ersten Aufgaben in vielen Informatik-Studiengängen behandelt. Der Wissenschaftler Konrad Zuse entwickelte dann in der Mitte der 20. Jahrhunderts die erste Maschine Z3 , die als Digitalrechner bezeichnet werden kann. Damit ist gemeint, dass Zahlen- und Operationsdarstellung diskret und binär stattfinden. Die normale Darstellung, an die Menschen gewohnt sind, findet analog und im Dezimalsystem statt.

Durch große Vorstöße in der zweiten Hälfte des 20. Jahrhunderts in den Feldern der Transistortechnik und der Mikroprozessortechnik, wurde es ermöglicht, Computer immer handlicher, leistungsstärker und billiger zu machen. Der erste wirklich massentaugliche Computer wurde 1982 von der Firma Commodore veröffentlicht.

Auch die Entwicklung von Programmiersprachen machte die Informatik zu dem, wie wir sie heute kennen. Diese dienen sozusagen als Schnittstelle zwischen dem Menschen und dem Computer und übersetzen die menschlichen Befehle für den Computer in verständliche Signale. Dazu später beim Programmieren mehr.

Heute lässt sich die Wissenschaft in den theoretischen, praktischen und technischen Bereich aufteilen.

Theoretisch

Dieses Teilgebiet behandelt die mathematischen und abstrakten Hintergründe der Wissenschaft. Stochastik, formale Sprachen und Komplexitätstheorien stellen hier die größten Felder dar.
Die Stochastik befasst sich mit den Fragen der Berechenbarkeit und Wahrscheinlichkeit. Hier geht es darum, festzustellen, welche Aufgaben von Computern lösbar sind.

Als Turing-vollständig wird ein Rechnermodell bezeichnet, wenn mit diesem andere Rechnermodelle vollständig bearbeitbar sind. Das heißt, es besteht die Möglichkeit, selbst Änderungen am Algorithmus vorzunehmen. Das wird hier mit mathematischen Formeln bewiesen, wodurch wiederum bewiesen wird, dass das gesamte System der Informatik funktioniert und eine mathematische und logische Grundlage hat.

Formale Sprachen werden dafür benutzt, um dem Rechner Befehle verständlich zu machen. Dazu wird mit Hilfe von mathematischen Formeln ein Katalog von Anweisungen gebildet, die der Computer verstehen kann. So wird die Kommunikation möglich.

Die Komplexitätstheorie beschäftigt sich mit dem Ressourcenverbrauch der Algorithmen.
Da Computer eine beschränkte Rechenleistung haben, ist es wichtig zu wissen, welche Komplexität die Anweisungen besitzen dürfen, um weiterhin vom Rechner bearbeitbar zu sein. In diesem Feld gibt es passende Formeln, um diese Grenzen zu finden.

Praktisch

Im praktischen Teil kommen wir der Programmierung am nächsten. In diesem Gebiet werden Lösungen für reale Probleme gesucht. Softwareentwicklung oder Datenbankverwaltung lassen sich hier finden. Auch Algorithmen von Suchmaschinen oder Sortiermaschinen fallen in diesen Bereich, da diese unser alltägliches Leben einfacher machen. Die Entwicklung von Programmiersprachen oder Dateisystemen ist ebenfalls ein zentraler Bestandteil.

Technisch

Hier geht es um die technischen Hintergründe der Disziplin. Durch Mikroprozessoren können komplexe Schaltkreise im Nanometerbereich gebaut werden, was für komplexere und kompaktere Systeme hilfreich ist. Mikroprozessoren sind auch sehr exakt und fehlerfrei, was für den Betrieb von Rechnern unerlässlich ist. Die Rechnerarchitektur beschäftigt sich mit dem Zusammenspiel der einzelnen Komponenten.
In modernen Rechnern werden zum Betrieb ein Prozessor, eine Festplatte, eine Grafikkarte und viele weitere Geräte benötigt. Diese müssen auf einander abgestimmt sein, um einen reibungslosen Ablauf zu garantieren.

Programmieren

Das Programmieren ist ein Teil der Softwareentwicklung und befasst sich mit der Erstellung von Computerprogrammen. Die Möglichkeit, Software zu programmieren, wird erst durch Programmiersprachen geboten. Dazu werden die Algorithmen und Befehle, die der Programmierende dem Programm übergeben will, entsprechend formuliert, sodass der Computer den Code kompilieren und lesen kann. Im Anschluss führt er die Befehle dann aus

Genau wie „echte“ Sprachen, besitzen die Programmiersprachen auch eine Syntax, die beachtet werden muss. Damit Softwares programmieren werden können, muss diese Sprache erlernt werden. Wenn man vorhat, ein IT oder Informatik Studium zu absolvieren, ist dies meist mit inbegriffen. Eine andere Möglichkeit ist das selbstständig Erlernen der Programmier-Sprache.

Wer gute Programme schreiben will, sollte auf den Programmierstil achten. Trotz persönlicher Note, sollten Programmierer immer darauf achten, übersichtlich zu schreiben und die Konventionen der Sprache einzuhalten.

Ein weiterer wichtiger Punkt ist die Verständlichkeit. Der geschriebene Code ist meist nicht final. Durch Updates oder neue Anforderungen wird ein Programm oft verändert. Optimalerweise werden beim ersten Programmieren Hinweise und Kommentare hinterlassen, die den Code zu erklären. Softwares sind für Außenstehende oft schwer zu verstehen, weshalb gute Kommentare sehr hilfreich sind und viele Programmiersprachen bieten Features, die extra hierfür gemacht sind.

Auf der Wartbarkeit der Software sollte ebenfalls ein Augenmerk liegen. Bei der ersten Programmierung muss sichergestellt werden, dass die Software gut gewartet werden kann. Sauber getrennte Abschnitte und eine übersichtliche Codierung sind hier gewünscht.

Programmieren ist also dafür da, mit neuen Programmen das Arbeiten an Rechnern leichter zu machen. Jede Aufgabe, die der Rechner anstatt des Menschen selbst verrichten kann, sollte dieser auch durch ein entsprechendes Programm verrichten können.

Fazit

Der Unterschied zwischen Programmieren und Informatik liegt also vor allem in der Breite der Gebiete. Während die Informatik die technischen, theoretischen und praktischen Aspekte abdeckt, findet die Programmierung rein im praktischen Bereich statt. Ein Informatik Studium wird alle drei Aspekte behandeln und so wird es währenddessen auch möglich sein, programmieren zu lernen.

Software programmieren erfordert keine Kenntnisse über die theoretischen und technischen Aspekte der Informatik, diese sind jedoch trotzdem hilfreich. So könnte man vorzeitig erkennen, falls ein Programm zu komplex für den Rechner wird und es anpassen, während man ohne dieses Wissen eventuell sehr unangepasste Programme schreiben würde.

Abschließend kann der Unterschied zwischen Programmieren und Informatik mit einem Anleger auf dem Aktienmarkt verglichen werden. Wenn der Anleger nur weiß, wie er das Geld anlegen kann, aber hat keine Ahnung , wie der Markt funktioniert, wird dieser sein Geld schnell verlieren. Hat sich der Anleger jedoch über die Kurse und die einzelnen Firmen, sowie das System der Börse informiert, steigen seine Chancen, einen Gewinn zu erzielen, enorm.