Objektorientiertes Design begann bereits mit der Erfindung des Computers. Die Programmierung war da, und Programmieransätze kamen ins Spiel. Beim Programmieren geht es im Wesentlichen darum, dem Computer bestimmte Anweisungen zu geben.
Zu Beginn des Computerzeitalters beschränkte sich die Programmierung meist auf die Programmierung in Maschinensprache. Unter Maschinensprache versteht man jene Befehlssätze, die für eine bestimmte Maschine oder einen bestimmten Prozessor spezifisch sind und die Form von Nullen und Einsen haben. Dabei handelt es sich um Bitfolgen (0100110…). Aber es ist ziemlich schwierig, ein Programm zu schreiben oder Software in Maschinensprache zu entwickeln.
Es ist eigentlich unmöglich, Software, die in heutigen Szenarien verwendet wird, mit Bitfolgen zu entwickeln. Dies war der Hauptgrund dafür, dass Programmierer zur nächsten Generation von Programmiersprachen übergingen und Assemblersprachen entwickelten, die der englischen Sprache nahe genug waren, um leicht verständlich zu sein. Diese Assemblersprachen wurden in Mikroprozessoren verwendet. Mit der Erfindung des Mikroprozessors blühten Assemblersprachen auf und beherrschten die Branche, aber das reichte nicht aus. Auch hier haben sich Programmierer etwas Neues ausgedacht, nämlich strukturierte und prozedurale Programmierung.

Strukturierte Programmierung –
Das Grundprinzip des strukturierten Programmieransatzes besteht darin, ein Programm in Funktionen und Module zu unterteilen. Durch den Einsatz von Modulen und Funktionen wird das Programm verständlicher und lesbarer. Es hilft, saubereren Code zu schreiben und die Kontrolle über die Funktionen und Module zu behalten. Dieser Ansatz legt Wert auf Funktionen statt auf Daten. Der Schwerpunkt liegt auf der Entwicklung großer Softwareanwendungen, beispielsweise wurde C für die Entwicklung moderner Betriebssysteme verwendet. Die Programmiersprachen PASCAL (eingeführt von Niklaus Wirth) und C (eingeführt von Dennis Ritchie) folgen diesem Ansatz.
Ansatz der prozeduralen Programmierung –
Dieser Ansatz wird auch als Top-Down-Ansatz bezeichnet. Bei diesem Ansatz wird ein Programm in Funktionen unterteilt, die bestimmte Aufgaben ausführen. Dieser Ansatz wird hauptsächlich für mittelgroße Anwendungen verwendet. Daten sind global und alle Funktionen können auf globale Daten zugreifen. Der grundlegende Nachteil des prozeduralen Programmieransatzes besteht darin, dass die Daten nicht gesichert sind, da sie global sind und von jeder Funktion abgerufen werden können. Der Programmkontrollfluss wird durch Funktionsaufrufe und goto-Anweisungen erreicht. Die Programmiersprachen FORTRAN (entwickelt von IBM) und COBOL (entwickelt von Dr. Grace Murray Hopper) folgen diesem Ansatz.
Diese Programmierkonstrukte wurden in den späten 1970er und 1980er Jahren entwickelt. Es gab immer noch einige Probleme mit diesen Sprachen, obwohl sie die Kriterien gut strukturierter Programme, Software usw. erfüllten. Sie waren nicht so strukturiert, wie es damals die Anforderungen waren. Sie scheinen zu verallgemeinert zu sein und korrelieren nicht mit Echtzeitanwendungen.
Um solche Probleme zu lösen, wurde OOP, ein objektorientierter Ansatz, als Lösung entwickelt.

Der objektorientierte Programmieransatz (OOP) –
Das OOP-Konzept wurde im Wesentlichen entwickelt, um die Nachteile der oben genannten Programmiermethoden zu überwinden, die nicht so nah an realen Anwendungen waren. Die Nachfrage stieg, es wurden aber weiterhin konventionelle Methoden eingesetzt. Dieser neue Ansatz brachte eine Revolution im Bereich der Programmiermethodik.
Unter objektorientierter Programmierung (OOP) versteht man nichts anderes als das, was das Schreiben von Programmen mithilfe bestimmter Klassen und Echtzeitobjekte ermöglicht. Wir können sagen, dass dieser Ansatz der realen Welt und ihren Anwendungen sehr nahe kommt, da der Zustand und das Verhalten dieser Klassen und Objekte fast mit denen realer Objekte identisch sind.
Lassen Sie uns tiefer auf die allgemeinen Konzepte von OOP eingehen, die im Folgenden aufgeführt sind:
Was sind Klasse und Objekt?
Es ist das Grundkonzept von OOP; ein erweitertes Konzept der in C verwendeten Struktur. Es handelt sich um einen abstrakten und benutzerdefinierten Datentyp. Es besteht aus mehreren Variablen und Funktionen. Der Hauptzweck der Klasse besteht darin, Daten und Informationen zu speichern. Die Mitglieder einer Klasse definieren das Verhalten der Klasse. Eine Klasse ist der Bauplan des Objekts, aber wir können auch sagen, dass die Implementierung der Klasse das Objekt ist. Die Klasse ist für die Welt nicht sichtbar, das Objekt jedoch schon.
CPP
Class car> {> >int> car_id;> >char> colour[4];> >float> engine_no;> >double> distance;> > >void> distance_travelled();> >float> petrol_used();> >char> music_player();> >void> display();> }> |
>
Tiger im Vergleich zum Löwen
>
Hier hat die Klasse car die Eigenschaften car_id, colour, engine_no und distance. Es ähnelt dem realen Auto mit denselben Spezifikationen, die als öffentlich (für alle außerhalb der Klasse sichtbar), geschützt und privat (für niemanden sichtbar) deklariert werden können. Außerdem gibt es einige Methoden wie distance_travelled(), Petrol_used(), music_player() und display(). Im unten angegebenen Code ist das Auto eine Klasse und c1 ein Objekt des Autos.
CPP
#include> using> namespace> std;> > class> car {> public>:> >int> car_id;> >double> distance;> > >void> distance_travelled();> > >void> display(>int> a,>int> b)> >{> >cout <<>'car id is= '> << a <<>'
distance travelled = '> << b + 5;> >}> };> > int> main()> {> >car c1;>// Declare c1 of type car> >c1.car_id = 321;> >c1.distance = 12;> >c1.display(321, 12);> > >return> 0;> }> |
>
>
Datenabstraktion -
Unter Abstraktion versteht man den Vorgang der Darstellung wichtiger und besonderer Merkmale, ohne Hintergrunddetails oder Erläuterungen zu diesem Merkmal einzubeziehen. Datenabstraktion vereinfacht das Datenbankdesign.

- Körperliches Niveau:
Es beschreibt, wie die Datensätze gespeichert werden, die dem Benutzer oft verborgen bleiben. Man kann es mit dem Begriff „Speicherblock“ beschreiben.
Logische Ebene:
Es beschreibt die in der Datenbank gespeicherten Daten und die Beziehungen zwischen den Daten. Die Programmierer arbeiten im Allgemeinen auf dieser Ebene, da sie sich der Funktionen bewusst sind, die zur Aufrechterhaltung der Beziehungen zwischen den Daten erforderlich sind.
Ansichtsebene:
Aus Sicherheitsgründen verbergen Anwendungsprogramme Details zu Datentypen und Informationen. Diese Ebene wird im Allgemeinen mithilfe einer GUI implementiert und es werden Details angezeigt, die für den Benutzer bestimmt sind.
Kapselung –
Kapselung ist eines der Grundkonzepte der objektorientierten Programmierung (OOP). Es beschreibt die Idee, Daten und die Methoden, die mit Daten arbeiten, innerhalb einer Einheit, z. B. einer Klasse in Java, zu verpacken. Dieses Konzept wird häufig verwendet, um die interne Zustandsdarstellung eines Objekts nach außen zu verbergen.
Nachlass -
Unter Vererbung versteht man die Fähigkeit einer Klasse, Fähigkeiten oder Eigenschaften einer anderen Klasse, der sogenannten übergeordneten Klasse, zu erben. Wenn wir eine Klasse schreiben, erben wir Eigenschaften von anderen Klassen. Wenn wir also eine Klasse erstellen, müssen wir nicht alle Eigenschaften und Funktionen immer wieder schreiben, da diese von einer anderen Klasse geerbt werden können, die sie besitzt. Durch Vererbung kann der Benutzer den Code nach Möglichkeit wiederverwenden und seine Redundanz reduzieren.

Java
Java vs. C++
import> java.io.*;> > class> GFG {> >public> static> void> main(String[] args)> >{> >System.out.println(>'GfG!'>);> > >Dog dog =>new> Dog();> >dog.name =>'Bull dog'>;> >dog.color =>'Brown'>;> >dog.bark();> >dog.run();> > >Cat cat =>new> Cat();> >cat.name =>'Rag doll'>;> >cat.pattern =>'White and slight brownish'>;> >cat.meow();> >cat.run();> > >Animal animal =>new> Animal();> > >animal.name =>'My favourite pets'>;> > >animal.run();> >}> }> > class> Animal {> >String name;> >public> void> run()> >{> > >System.out.println(>'Animal is running!'>);> >}> }> > class> Dog>extends> Animal {> > /// the class dog is the child and animal is the parent> > >String color;> >public> void> bark()> >{> >System.out.println(name +>' Wooh ! Wooh !'> >+>'I am of colour '> + color);> >}> }> > class> Cat>extends> Animal {> > >String pattern;> > >public> void> meow()> >{> >System.out.println(name +>' Meow ! Meow !'> >+>'I am of colour '> + pattern);> >}> }> |
>
>
C++
#include> #include> using> namespace> std;> > class> Animal {> public>:> >string name;> >void> run(){> >cout<<>'Animal is running!'>< } }; class Dog : public Animal { /// the class dog is the child and animal is the parent public: string color; void bark(){ cout<' Wooh ! Wooh !' <<'I am of colour '< } }; class Cat : public Animal { public: string pattern; void meow(){ cout<' Meow ! Meow !'<<'I am of colour '< } }; int main(){ cout<<'GFG'< Dog dog; dog.name = 'Bull dog'; dog.color = 'Brown'; dog.bark(); dog.run(); Cat cat; cat.name = 'Rag doll'; cat.pattern = 'White and slight brownish'; cat.meow(); cat.run(); Animal animal; animal.name = 'My favourite pets'; animal.run(); return 0; //code contributed by Sanket Gode. }> |
>
>Ausgabe
GfG! Bull dog Wooh ! Wooh !I am of colour Brown Animal is running! Rag doll Meow ! Meow !I am of colour White and slight brownish Animal is running! Animal is running!>
Polymorphismus –
Polymorphismus ist die Fähigkeit von Daten, in mehr als einer Form verarbeitet zu werden. Es ermöglicht die Ausführung derselben Aufgabe auf verschiedene Arten. Es besteht aus Methodenüberladung und Methodenüberschreibung, d. h. dem einmaligen Schreiben der Methode und dem Ausführen mehrerer Aufgaben unter Verwendung desselben Methodennamens.

CPP
#include> using> namespace> std;> > void> output(>float>);> void> output(>int>);> void> output(>int>,>float>);> > int> main()> {> >cout <<>'
GfG!
'>;> >int> a = 23;> >float> b = 2.3;> > >output(a);> >output(b);> >output(a, b);> > >return> 0;> }> > void> output(>int> var)> {>// same function name but different task> >cout <<>'Integer number: '> << var << endl;> }> > void> output(>float> var)> {>// same function name but different task> >cout <<>'Float number: '> << var << endl;> }> > void> output(>int> var1,>float> var2)> {>// same function name but different task> >cout <<>'Integer number: '> << var1;> >cout <<>' and float number:'> << var2;> }> |
>
if und else in Bash
>
Einige wichtige Punkte, die Sie über OOP wissen sollten:
- OOP behandelt Daten als kritisches Element.
- Der Schwerpunkt liegt eher auf Daten als auf Verfahren.
- Zerlegung des Problems in einfachere Module.
- Ermöglicht keinen freien Datenfluss im gesamten System, d. h. einen lokalisierten Kontrollfluss.
- Daten sind vor externen Funktionen geschützt.
Vorteile von OOPs –
- Es modelliert die reale Welt sehr gut.
- Mit OOP sind Programme leicht zu verstehen und zu warten.
- OOP bietet Wiederverwendbarkeit von Code. Bereits erstellte Klassen können wiederverwendet werden, ohne sie erneut schreiben zu müssen.
- OOP erleichtert die schnelle Entwicklung von Programmen, bei denen eine parallele Entwicklung von Klassen möglich ist.
- Mit OOP lassen sich Programme einfacher testen, verwalten und debuggen.
Nachteile von OOP –
- Bei OOP neigen Klassen manchmal dazu, zu stark zu verallgemeinern.
- Die Beziehungen zwischen den Klassen werden manchmal oberflächlich.
- Das OOP-Design ist knifflig und erfordert entsprechende Kenntnisse. Außerdem muss man die OOP-Programmierung richtig planen und entwerfen.
- Um mit OOP zu programmieren, benötigt der Programmierer entsprechende Fähigkeiten wie Design, Programmierung und Denken in Bezug auf Objekte und Klassen usw.