Objectgericht ontwerp begon vanaf het moment dat computers werden uitgevonden. Programmeren was er, en programmeerbenaderingen kwamen in beeld. Programmeren is in feite het geven van bepaalde instructies aan de computer.
Aan het begin van het computertijdperk was programmeren meestal beperkt tot programmeren in machinetaal. Machinetaal betekent de sets instructies die specifiek zijn voor een bepaalde machine of processor, in de vorm van nullen en enen. Dit zijn reeksen bits (0100110…). Maar het is best lastig om een programma te schrijven of software te ontwikkelen in machinetaal.
Het is eigenlijk onmogelijk om software te ontwikkelen die in de huidige scenario’s wordt gebruikt met reeksen bits. Dit was de belangrijkste reden dat programmeurs overgingen naar de volgende generatie programmeertalen, waarbij ze assembleertalen ontwikkelden, die dicht genoeg bij de Engelse taal lagen om gemakkelijk te begrijpen. Deze assembleertalen werden gebruikt in microprocessors. Met de uitvinding van de microprocessor floreerden assembleertalen en regeerden ze over de industrie, maar dat was niet genoeg. Opnieuw kwamen programmeurs met iets nieuws, namelijk gestructureerd en procedureel programmeren.

Gestructureerde programmering –
Het basisprincipe van de gestructureerde programmeeraanpak is het verdelen van een programma in functies en modules. Het gebruik van modules en functies maakt het programma begrijpelijker en leesbaarder. Het helpt om schonere code te schrijven en de controle over de functies en modules te behouden. Deze benadering hecht belang aan functies in plaats van aan gegevens. Het richt zich op de ontwikkeling van grote softwareapplicaties, C werd bijvoorbeeld gebruikt voor de ontwikkeling van moderne besturingssystemen. De programmeertalen: PASCAL (geïntroduceerd door Niklaus Wirth) en C (geïntroduceerd door Dennis Ritchie) volgen deze aanpak.
Procedurele programmeringsaanpak –
Deze aanpak wordt ook wel de top-down benadering genoemd. Bij deze benadering wordt een programma opgedeeld in functies die specifieke taken uitvoeren. Deze aanpak wordt vooral gebruikt voor middelgrote toepassingen. Gegevens zijn mondiaal en alle functies hebben toegang tot mondiale gegevens. Het fundamentele nadeel van de procedurele programmeerbenadering is dat gegevens niet beveiligd zijn, omdat gegevens globaal zijn en toegankelijk zijn voor elke functie. De programmacontrolestroom wordt bereikt via functieaanroepen en goto-instructies. De programmeertalen: FORTRAN (ontwikkeld door IBM) en COBOL (ontwikkeld door Dr. Grace Murray Hopper) volgen deze aanpak.
Deze programmeerconstructies zijn eind jaren zeventig en tachtig ontwikkeld. Er waren nog steeds enkele problemen met deze talen, hoewel ze voldeden aan de criteria van goed gestructureerde programma's, software, enz. Ze waren niet zo gestructureerd als de vereisten destijds. Ze lijken te algemeen te zijn en correleren niet met realtime toepassingen.
Om dit soort problemen op te lossen, werd OOP, een objectgeoriënteerde aanpak, als oplossing ontwikkeld.

De Object-Oriented Programming (OOP)-aanpak –
Het OOP-concept was in principe ontworpen om het nadeel van de bovengenoemde programmeermethodologieën, die niet zo dicht bij toepassingen in de echte wereld stonden, te ondervangen. De vraag nam toe, maar toch werden conventionele methoden gebruikt. Deze nieuwe aanpak bracht een revolutie teweeg op het gebied van programmeermethodologie.
Objectgeoriënteerd programmeren (OOP) is niets anders dan datgene dat het schrijven van programma's mogelijk maakt met behulp van bepaalde klassen en real-time objecten. We kunnen zeggen dat deze benadering heel dicht bij de echte wereld en de toepassingen ervan ligt, omdat de toestand en het gedrag van deze klassen en objecten bijna hetzelfde zijn als die in de echte wereld.
Laten we dieper ingaan op de algemene concepten van OOP, die hieronder worden gegeven:
Wat zijn klasse en object?
Het is het basisconcept van OOP; een uitgebreid concept van de structuur die in C wordt gebruikt. Het is een abstract en door de gebruiker gedefinieerd gegevenstype. Het bestaat uit verschillende variabelen en functies. Het primaire doel van de klas is het opslaan van gegevens en informatie. De leden van een klasse bepalen het gedrag van de klasse. Een klasse is de blauwdruk van het object, maar we kunnen ook zeggen dat de implementatie van de klasse het object is. De klasse is niet zichtbaar voor de wereld, maar het object wel.
CPP
tekenreeks in Java-formaat
Class car> {> >int> car_id;> >char> colour[4];> >float> engine_no;> >double> distance;> > >void> distance_travelled();> >float> petrol_used();> >char> music_player();> >void> display();> }> |
>
>
Hier heeft de klasseauto de eigenschappen car_id, color, engine_no en distance. Het lijkt op de echte auto met dezelfde specificaties, die openbaar (zichtbaar voor iedereen buiten de klasse), beschermd en privé (zichtbaar voor niemand) kunnen worden verklaard. Er zijn ook enkele methoden zoals distance_travelled(), petrol_used(), music_player() en display(). In de onderstaande code is de auto een klasse en is c1 een object van de auto.
CPP
een lijst herhalen in Java
#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;> }> |
>
>
Data abstractie -
Abstractie verwijst naar de handeling waarbij belangrijke en bijzondere kenmerken worden weergegeven zonder de achtergronddetails of uitleg over dat kenmerk op te nemen. Gegevensabstractie vereenvoudigt het databaseontwerp.

- Fysiek niveau:
Het beschrijft hoe de records worden opgeslagen, die vaak verborgen zijn voor de gebruiker. Het kan worden beschreven met de zinsnede: opslagblok.
Logisch niveau:
Het beschrijft gegevens die zijn opgeslagen in de database en de relaties tussen de gegevens. De programmeurs werken over het algemeen op dit niveau omdat ze zich bewust zijn van de functies die nodig zijn om de relaties tussen de gegevens te onderhouden.
Bekijk niveau:
Applicatieprogramma's verbergen details van gegevenstypen en informatie om veiligheidsredenen. Dit niveau wordt doorgaans geïmplementeerd met behulp van een GUI en details die bedoeld zijn voor de gebruiker worden weergegeven.
Inkapseling –
Inkapseling is een van de fundamentele concepten in objectgeoriënteerd programmeren (OOP). Het beschrijft het idee van het inpakken van gegevens en de methoden die werken met gegevens binnen één eenheid, bijvoorbeeld een klasse in Java. Dit concept wordt vaak gebruikt om de interne toestandsrepresentatie van een object voor de buitenkant te verbergen.
Erfenis -
Overerving is het vermogen van één klasse om mogelijkheden of eigenschappen van een andere klasse, de bovenliggende klasse, te erven. Wanneer we een klasse schrijven, erven we eigenschappen van andere klassen. Wanneer we dus een klasse maken, hoeven we niet alle eigenschappen en functies steeds opnieuw te schrijven, omdat deze kunnen worden geërfd van een andere klasse die deze bezit. Door overerving kan de gebruiker de code waar mogelijk hergebruiken en de redundantie ervan verminderen.

Java
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);> >}> }> |
>
Java-programmeerpatronen
>
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. }> |
>
>Uitvoer
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!>
Polymorfisme –
Polymorfisme is het vermogen van gegevens om in meer dan één vorm te worden verwerkt. Het maakt de uitvoering van dezelfde taak op verschillende manieren mogelijk. Het bestaat uit het overbelasten van de methode en het overschrijven van de methode, dat wil zeggen het één keer schrijven van de methode en het uitvoeren van een aantal taken met dezelfde methodenaam.

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;> }> |
mergesort-algoritme
>
>
Enkele belangrijke punten die u moet weten over OOP:
- OOP behandelt gegevens als een cruciaal element.
- De nadruk ligt op data in plaats van op procedures.
- Ontleding van het probleem in eenvoudiger modules.
- Zorgt ervoor dat gegevens niet vrij door het hele systeem kunnen stromen, dat wil zeggen een gelokaliseerde controlestroom.
- Gegevens zijn beschermd tegen externe functies.
Voordelen van OOP’s –
- Het modelleert de echte wereld heel goed.
- Met OOP zijn programma's gemakkelijk te begrijpen en te onderhouden.
- OOP biedt herbruikbaarheid van code. Reeds gemaakte klassen kunnen opnieuw worden gebruikt zonder dat u ze opnieuw hoeft te schrijven.
- OOP vergemakkelijkt de snelle ontwikkeling van programma's waarbij parallelle ontwikkeling van klassen mogelijk is.
- Met OOP zijn programma's eenvoudiger te testen, beheren en debuggen.
Nadelen van OOP –
- Met OOP hebben klassen soms de neiging om overgegeneraliseerd te zijn.
- De relaties tussen klassen worden soms oppervlakkig.
- Het OOP-ontwerp is lastig en vereist de juiste kennis. Ook moet men een goede planning en ontwerp maken voor OOP-programmering.
- Om met OOP te kunnen programmeren, heeft de programmeur de juiste vaardigheden nodig, zoals ontwerp, programmeren en denken in termen van objecten en klassen, enz.