Java Onder de Knie: Objects, Classes en Kern OOP Concepten
Java is een Object-Georiënteerde Taal. Als taal met OO-karakter ondersteunt Java de volgende fundamentele concepten:
- Polymorfisme
- Erfelijkheid (Inheritance)
- Encapsulatie
- Abstractie
- Classes
- Objecten
- Instanties
- Methodes
- Bericht Doorgeven (Message Passing)
In dit hoofdstuk kijken we naar Classes en Objecten.
- Object – Heeft states en behaviors. Voorbeeld: hond met state (kleur, naam, ras) en behavior (blaf, staart wagen, eet). Een object is een instantie van een class.
- Class – Een sjabloon/blueprint die beschrijft welk gedrag/state het object van dat type ondersteunt.
Objecten in Java
In de echte wereld vind je veel objecten: auto's, honden, mensen. Allen hebben state en behavior.
Een hond: state = naam, ras, kleur; behavior = blaffen, staart wagen, rennen.
Software objecten hebben ook state en behavior. State wordt opgeslagen in velden (fields), behavior getoond via methodes. Methodes opereren op de interne state van een object en object-communicatie gebeurt via methodes.
Classes in Java
Een class is een blueprint waaruit individuele objecten gemaakt worden.
Voorbeeld
public class Dog {
String breed;
int age;
String color;
void barking() { }
void hungry() { }
void sleeping() { }
}
Een class kan deze variabeltypen bevatten:
- Lokale variabelen – Binnen methodes, constructors of blokken gedeclareerd. Gedeclareerd en geïnitialiseerd in de methode, vernietigd na afloop.
- Instance variabelen – In de class, buiten methodes. Geïnitialiseerd bij instantiatie. Toegankelijk vanuit alle methodes, constructors, blokken van die class.
- Class variabelen – In de class, buiten methodes, met
statickeyword.
Een class kan methodes hebben om waarden te benaderen. In het voorbeeld: barking(), hungry(), sleeping().
Constructors
Elke class heeft een constructor. Zonder expliciete constructor bouwt de Java compiler een default constructor die alle member variabelen op nul initialiseert. Zodra je je eigen constructor definieert, wordt de default niet meer gebruikt.
Elke keer dat een nieuw object gemaakt wordt, wordt minstens één constructor aangeroepen. Hoofdregel: constructor heeft dezelfde naam als de class. Een class kan meerdere constructors hebben.
Voorbeeld
public class Puppy {
public Puppy() { }
public Puppy(String name) {
// Deze constructor heeft één parameter, name.
}
}
Java ondersteunt ook Singleton Classes waar je slechts één instantie kunt maken.
Let op – Er zijn twee typen constructors. We bespreken ze gedetailleerd in volgende hoofdstukken.
Een Object Maken
Een class levert de blueprints voor objecten. In Java wordt het new keyword gebruikt om objecten te maken.
Drie stappen:
- Declaratie – Variabele declaratie met object type.
- Instantiatie –
newkeyword creëert het object. - Initialisatie –
newgevolgd door constructor call initialiseert het object.
Voorbeeld
public class Puppy {
public Puppy(String name) {
System.out.println("Passed Name is :" + name);
}
public static void main(String []args) {
Puppy myPuppy = new Puppy("tommy");
}
}
Output
Passed Name is :tommy
Instance Variabelen en Methodes Benaderen
Via aangemaakte objecten:
/* Eerst object maken */ ObjectReference = new Constructor(); /* Variabele aanroepen */ ObjectReference.variableName; /* Methode aanroepen */ ObjectReference.MethodName();
Voorbeeld
public class Puppy {
int puppyAge;
public Puppy(String name) {
System.out.println("Name chosen is :" + name);
}
public void setAge(int age) { puppyAge = age; }
public int getAge() {
System.out.println("Puppy's age is :" + puppyAge);
return puppyAge;
}
public static void main(String []args) {
Puppy myPuppy = new Puppy("tommy");
myPuppy.setAge(2);
myPuppy.getAge();
System.out.println("Variable Value :" + myPuppy.puppyAge);
}
}
Output
Name chosen is :tommy Puppy's age is :2 Variable Value :2
Source File Declaratie Regels
Essentiële regels voor het declareren van classes, import en package statements:
- Maximaal één
publicclass per source file. - Meerdere non-public classes mag.
- Public class naam = bestandsnaam + .java. Voorbeeld:
public class Employee{}→Employee.java. - Als class in package: package statement moet eerste statement zijn.
- Import statements tussen package statement en class declaratie. Geen package? Import is eerste regel.
- Import en package gelden voor alle classes in het bestand. Niet mogelijk om per class te differentiëren.
Classes hebben verschillende access levels en typen: abstract, final, etc. Details volgen in access modifiers hoofdstuk. Java heeft ook speciale classes: Inner classes en Anonymous classes.
Java Package
Manier om classes en interfaces te categoriseren. Bij honderden classes/interfaces in een applicatie is categoriseren een must en maakt het leven makkelijker.
Import Statements
Als een fully qualified naam (package + class) gegeven is, kan de compiler de source code of classes vinden. Import statement geeft de juiste locatie voor de compiler.
Voorbeeld: import java.io.*; laadt alle classes in java_installation/java/io.
Een Eenvoudige Case Study
We maken twee classes: Employee en EmployeeTest.
Eerst Employee.java (public class):
import java.io.*;
public class Employee {
String name; int age; String designation; double salary;
public Employee(String name) { this.name = name; }
public void empAge(int empAge) { age = empAge; }
public void empDesignation(String empDesig) { designation = empDesig; }
public void empSalary(double empSalary) { salary = empSalary; }
public void printEmployee() {
System.out.println("Name:"+ name);
System.out.println("Age:" + age);
System.out.println("Designation:" + designation);
System.out.println("Salary:" + salary);
}
}
Dan EmployeeTest.java met main methode:
import java.io.*;
public class EmployeeTest {
public static void main(String args[]) {
Employee empOne = new Employee("James Smith");
Employee empTwo = new Employee("Mary Anne");
empOne.empAge(26);
empOne.empDesignation("Senior Software Engineer");
empOne.empSalary(1000);
empOne.printEmployee();
empTwo.empAge(21);
empTwo.empDesignation("Software Engineer");
empTwo.empSalary(500);
empTwo.printEmployee();
}
}
Compileren en draaien:
C:\> javac Employee.java C:\> javac EmployeeTest.java C:\> java EmployeeTest Name:James Smith Age:26 Designation:Senior Software Engineer Salary:1000.0 Name:Mary Anne Age:21 Designation:Software Engineer Salary:500.0
Wat Volgt?
Volgende sessie: basis datatypes in Java en hoe ze gebruikt worden in applicaties.
Java
- C# Classes & Objects: Fundamenten voor Robuuste OOP
- C++ klassen & objecten: praktische gids voor object-georiënteerd programmeren
- C++ Friend Functies en Friend Classes: Toegangscontrole Beheersen
- Java-variabelen en literals: een uitgebreide gids
- Java klassen en objecten: een praktische gids
- Java's final-sleutelwoord begrijpen: variabelen, methoden en klassen
- Java instanceof operator: een uitgebreide gids
- Java abstracte klassen en methoden: een uitgebreide gids
- Java geneste en inner classes meesteren: typen, voorbeelden en best practices
- Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
- Java Singleton patroon uitgelegd: hoe veilig te implementeren en gebruiken