Senin, 09 April 2012

Enkapsulasi Java | PBO

Enkapsulasi adalah suatu cara untuk menyembunyikan informasi detail dari suatu class. Dua hal yang mendasar dalam enkapsulasi yakni :
• Information hiding.
• Interface to access data.
Information hiding
Sebelumnya kita dapat mengakses anggota class baik berupa atribut maupun method secara langsung dengan menggunakan objek yang telah kita buat. Hal ini dikarenakan akses kontrol yang diberikan kepada atribut maupun method yang ada di dalam class tersebut adalah 'public'. Kita dapat menyembunyikan informasi dari suatu class sehingga anggota class tersebut tidak dapat diakses dari luar, caranya adalah hanya dengan memberikan akses kontrol 'private' ketika mendeklarasikan atribut atau method. Proses ini disebut dengan information hiding.
Interface to access data
Jika kita telah melakukan information hiding terhadap suatu atribut pada suatu class, lalu bagaimana cara melakukan perubahan terhadap atribut yang kita sembunyikan tersebut, caranya adalah dengan membuat suatu interface berupa method untuk menginisialisasi atau merubah nilai dari suatu atribut tersebut.


Implementasi UML

Berikut ini kita akan coba untuk lebih memahami penggunaan konsep enkapsulasi dengan mengimplementasikan UML berikut :

UML Vehicle class with no hiding
Vehicle class berisi atribut yang mempunyai modifier public(+), sehingga TestVehicle1 sebagai test program mempunyai akses langsung terhadap atribut pada Vehicle.
Listing program - Vehicle.java
public class Vehicle{
public double load, maxLoad;
public Vehicle (double maxLoad){
maxLoad = maxLoad + load;
}
public double getLoad(){
return load;
}
public double getMaxLoad(){
return maxLoad;
}
}
Listing program - TestVehicle.java
public class TestVehicle{
public static void main(String[] args){
System.out.println("Creating a vehicle with a 10,000kg maximum load.");
Vehicle vehicle = new Vehicle(10000.0);
System.out.println("Add box #1 (500kg)");
vehicle.load = vehicle.load + 500.0;
System.out.println("Add box #2 (250kg)");
vehicle.load = vehicle.load + 250.0;
System.out.println("Add box #3 (5000kg)");
vehicle.load = vehicle.load + 5000.0;
System.out.println("Add box #4 (4000kg)");
vehicle.load = vehicle.load + 4000.0;
System.out.println("Add box #4 (300kg)");
vehicle.load = vehicle.load + 300.0;
System.out.println("Vehicle load is = " +vehicle.getLoad() + "kg");
}
}
Compile Vehicle.java dan TestVehicle.java lalu jalankan TestVehicle.java. Seharusnya akan keluar tampilan sebagai berikut :
Analisa program
Kita lihat bahwa pada output program tersebut kita menginisialisasi batas maximum load 10,000 kg,
Vehicle vehicle = new Vehicle(10000.0);
akan tetapi dengan memberikan akses kontrol / modifier public pada atribut class Vehicle
public double load, maxLoad;
kita dapat mengakses langsung atribut class yang seharusnya perlu diberi pengecekan agar tidak sampai melebihi maxload
vehicle.load = vehicle.load + 500.0;
maka dapat mengakibatkan masalah(trouble) yakni batas maximum load yang kita buat tidak berpengaruh apapun sehingga terdapat penambahan boxes yang melebihi kapasitas(10050.0kg) dikaernakan tidak ada pengecekan kapasitas maksismum.
UML Vehicle class with hiding
Vehicle class berisi atribut yang mempunyai modi_er public, sehingga TestVehicle1 sebagai test program mempunyai akses langsung terhadap atribut pada Vehicle.
Listing program - Vehicle.java
public class Vehicle1{
private double load, maxLoad;
public Vehicle1 (double max){
this.maxLoad = max;
}
public double getLoad(){
return this.load;
}
public double getMaxLoad(){
return this.maxLoad;
}
public boolean addBox(double weight){
double temp = 0.0D;
temp = this.load + weight;
if(temp <= maxLoad){
this.load = this.load + weight;
return true;
}
else{
return false;
}
}
}
Listing program - TestVehicle.java
public class TestVehicle1{
public static void main(String[] args){
System.out.println("Creating a vehicle with a 10,000 kg maximum load.");
Vehicle1 vehicle = new Vehicle1(10000);
System.out.println("Add box #1 (500kg) : " + vehicle.addBox(500));
System.out.println("Add box #2 (250kg) : " + vehicle.addBox(250));
System.out.println("Add box #3 (5000kg) : " + vehicle.addBox(5000));
System.out.println("Add box #4 (4000kg) : " + vehicle.addBox(4000));
System.out.println("Add box #5 (300kg) : " + vehicle.addBox(300));
System.out.println("Vehicle load is " +vehicle.getLoad() + "kg");
}
}
Compile Vehicle1.java dan TestVehicle1.java lalu jalankan TestVehicle1.java. Maka akan keluar tampilan sebagai berikut :
Analisa program
Kita lihat bahwa pada output program tersebut pada penambahan box ke-5 terjadi kelebihan kapasitas maksimal sehingga method addBox mengembalikan nilai false, dalam arti bahwa terjadi penolakan terhadap penambahan box ke 5.\


Bagus Diyan Permadi

Tidak ada komentar:

Posting Komentar