OOPS Concepten in Java – Voorbeeld van OOPS Concepten

Object-Oriented Programming Concepts zijn zeer belangrijk voor programmeren. Zonder een idee te hebben over OOPS-concepten, zul je niet in staat zijn om systemen te ontwerpen in het objectgeoriënteerde programmeermodel.

Wat is het Objectgeoriënteerde Programmeermodel?

Het objectgeoriënteerde programmeermodel draait om het concept van Objecten. Wat is een Object? Een object is een instantie van een Klasse. Het bevat eigenschappen en functies. Ze lijken op objecten in de echte wereld. Bijvoorbeeld, jouw auto, huis, laptop, enz. zijn allemaal objecten. Ze hebben specifieke eigenschappen en methoden om acties uit te voeren. Wat is een Klasse? De Klasse definieert het blauwdruk van Objecten. Ze definiëren de eigenschappen en functionaliteiten van de objecten. Bijvoorbeeld, Laptop is een klasse en jouw laptop is een instantie ervan.

OOPS-concepten

Kern OOPS-concepten zijn:

  1. Abstractie
  2. Encapsulatie
  3. Polymorfisme
  4. Overerving
  5. Associatie
  6. Aggregatie
  7. Compositie

Laten we deze concepten van objectgeoriënteerd programmeren eens nader bekijken. We zullen de Java-programmeertaal gebruiken voor codevoorbeelden, zodat je weet hoe je OOP-concepten in Java kunt implementeren.

1. Abstractie

Abstractie is het concept van het verbergen van de interne details en het beschrijven van dingen in eenvoudige bewoordingen. Bijvoorbeeld, een methode die twee integers optelt. De interne verwerking van de methode is verborgen voor de buitenwereld. Er zijn veel manieren om abstractie te bereiken in objectgeoriënteerd programmeren, zoals encapsulatie en overerving. Een Java-programma is ook een uitstekend voorbeeld van abstractie. Hier zorgt Java ervoor dat eenvoudige statements worden omgezet naar machinetaal en verbergt het de innerlijke implementatiedetails voor de buitenwereld.

Meer lezen: Wat is abstractie in OOPS?

2. Encapsulatie

Encapsulatie is de techniek die wordt gebruikt om abstractie te implementeren in objectgeoriënteerd programmeren. Encapsulatie wordt gebruikt voor toegangsbeperking tot klassenleden en -methoden. Toegangsmodifier-zoekwoorden worden gebruikt voor encapsulatie in objectgeoriënteerd programmeren. Bijvoorbeeld, encapsulatie in Java wordt bereikt met behulp van private, protected en public-zoekwoorden.

3. Polymorfisme

Polymorfisme is het concept waarbij een object zich anders gedraagt in verschillende situaties. Er zijn twee soorten polymorfisme – compiletijd polymorfisme en runtime polymorfisme. Compiletijd polymorfisme wordt bereikt door methode-overbelasting. Bijvoorbeeld, we kunnen een klasse hebben zoals hieronder.

public class Circle {

	public void draw(){
		System.out.println("Drwaing circle with default color Black and diameter 1 cm.");
	}
	
	public void draw(int diameter){
		System.out.println("Drwaing circle with default color Black and diameter"+diameter+" cm.");
	}
	
	public void draw(int diameter, String color){
		System.out.println("Drwaing circle with color"+color+" and diameter"+diameter+" cm.");
	}
}

Hier hebben we meerdere teken methoden maar ze hebben verschillend gedrag. Dit is een geval van methode overbelasting omdat alle methoden dezelfde naam hebben en de argumenten verschillend zijn. Hier zal de compiler in staat zijn om de methode aan te roepen tijdens de compilatie, vandaar dat het compile-time polymorfisme wordt genoemd. Runtime polymorfisme wordt geïmplementeerd wanneer we een “IS-A” relatie hebben tussen objecten. Dit wordt ook wel methode-overschrijving genoemd omdat de subklasse de methode van de superklasse moet overschrijven voor runtime-polymorfisme. Als we werken in termen van de superklasse, wordt de feitelijke implementatieklasse beslist tijdens runtime. De compiler kan niet beslissen welke klasse-methode zal worden aangeroepen. Deze beslissing wordt genomen tijdens runtime, vandaar de naam runtime-polymorfisme of dynamische methode-dispatch.

package com.journaldev.test;

public interface Shape {

	public void draw();
}
package com.journaldev.test;

public class Circle implements Shape{

	@Override
	public void draw(){
		System.out.println("Drwaing circle");
	}

}
package com.journaldev.test;

public class Square implements Shape {

	@Override
	public void draw() {
		System.out.println("Drawing Square");
	}

}

Vorm is de superklasse en er zijn twee subklassen Cirkel en Vierkant. Hieronder staat een voorbeeld van runtime-polymorfisme.

Shape sh = new Circle();
sh.draw();

Shape sh1 = getShape(); //some third party logic to determine shape
sh1.draw();

In de bovenstaande voorbeelden weet de Java-compiler niet de werkelijke implementatieklasse van Vorm die tijdens runtime zal worden gebruikt, vandaar runtime-polymorfisme.

4. Erfenis

Overerving is het concept van objectgeoriënteerd programmeren waarbij een object is gebaseerd op een ander object. Overerving is het mechanisme van codehergebruik. Het object dat wordt geërfd, wordt de superklasse genoemd en het object dat de superklasse erft, wordt een subklasse genoemd. We gebruiken het sleutelwoord extends in Java om overerving te implementeren. Hieronder staat een eenvoudig voorbeeld van overerving in Java.

package com.journaldev.java.examples1;

class SuperClassA {

	public void foo(){
		System.out.println("SuperClassA");
	}
	
}

class SubClassB extends SuperClassA{
		
	public void bar(){
		System.out.println("SubClassB");
	}
	
}

public class Test {
	public static void main(String args[]){
		SubClassB a = new SubClassB();
		
		a.foo();
		a.bar();
	}
}

5. Associatie

Associatie is het OOP-concept om de relatie tussen objecten te definiëren. De associatie bepaalt de veelvoudigheid tussen objecten. Bijvoorbeeld objecten van leraar en student. Er is een één-op-veel relatie tussen een leraar en studenten. Op dezelfde manier kan een student een één-op-veel relatie hebben met leraarobjecten. Beide objecten, zowel student als leraar, zijn echter onafhankelijk van elkaar.

Aggregatie

Aggregatie is een speciaal type associatie. Bij aggregatie hebben objecten hun eigen levenscyclus, maar er is wel eigendom. Telkens wanneer we een “HEEFT-EEN” relatie hebben tussen objecten en eigendom, is het een geval van aggregatie.

6. Samenstelling

De compositie is een bijzonder geval van aggregatie. Compositie is een meer beperkte vorm van aggregatie. Wanneer het bevatte object in een “HEEFT-EEN” relatie niet zelfstandig kan bestaan, dan is er sprake van compositie. Bijvoorbeeld, Huis heeft-een Kamer. Hier kan de kamer niet bestaan zonder het huis. Compositie wordt gezegd beter te zijn dan erfelijkheid, lees meer op Samenstelling vs Erfenis.

Verdere Lezing: Samenstelling in Java

Dat is alles voor een snelle samenvatting van OOPS-concepten.

Je kunt meer Java-voorbeeldprogramma’s bekijken op onze GitHub Repository.

Referenties: https://docs.oracle.com/javase/tutorial/java/concepts/

Source:
https://www.digitalocean.com/community/tutorials/oops-concepts-java-example