1. LAPORAN PRATIKUM IV
PRAKTIKUM PEMROGRAMAN BERORIENTASI OBJEK
ENCAPSULATION
Disusun untuk Memenuhi Matakuliah Praktikum Pemrograman Berorientasi Objek
Yang Dibimbing oleh Bapak Heru Wahyu Herwanto, S.T., M.Kom
Asisten Praktikum:
Jevri Tri Ardiansyah
Robi Wahyudi
Oleh:
Gisra Rahmadhita
130533608259
S1 PTI 2013 Offering B
UNIVERSITAS NEGERI MALANG
FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
S1 PENDIDIKAN TEKNIK INFORMATIKA
OKTOBER, 2014
2. Encapsulation
A. TUJUAN
1. Mahasiswa mampu memahami dan menggunakan konsep Encapsulation dalam
pemrograman java.
2. Mendefinisikan method assessor dan mutator
3. Menerapkan konsep penyembunyian data
4. Menerapkan enkapsulasi dalam pemrograman berbasis objek
B. DASAR TEORI
1. Encapsulation(Enkapsulasi)
Enkapsulasi adalah suatu cara untuk menyembunyikan informasi detail dari
suatu class.Enkapsulasi - Memastikan pengguna sebuah objek tidak dapat
mengganti keadaan dalam dari sebuah objek dengan cara yang tidak layak; hanya
metode dalam objek tersebut yang diberi izin untuk mengakses keadaannya. Setiap
objek mengakses interface yang menyebutkan bagaimana objek lainnya dapat
berinteraksi dengannya. Objek lainnya tidak akan mengetahui dan tergantung
kepada representasi dalam objek tersebut.
Berikut ini keuntungan dari prinsip encapsulation :
Bersifat independen. Suatu modul yang terenkapsulasi dengan baik akan bersifat
independen dari yang lain. Sehingga dapat digunakan pada bagian manapun dari
program.
Bersifat transparan. Jika Anda melakukan modifikasi pada suatu modul, maka
perubahan tersebut akan dirasakan oleh semua bagian yang menggunakan modul
tersebut.
Menghindari dari efek yang diluar perencanaan. Modul yang terenkapsulasi dengan
baik hanya akan berinteraksi dengan bagian program melalui variable input dan
output yang telah didefinisikan sebelumnya. Sehingga dapat mengurangi
kemungkinan bug.
3. Dua hal yang mendasar dalam enkapsulasi, yakni :
a. Information Hiding
Adalah proses yang menyembunyikan informasi dari suatu class sehingga
class tersebut tidak dapat diakses dari luar. Yaitu dengan memberikan akses
kontrol private ketika mendeklarasikan atribut atau method.
b. Interface to Acces data
Adalah cara melalukan perubahan terhadap atribut yang di information
hiding yaitu dengan membuat suatu interface berupa method untuk
menginisialisasi atau merubah nilai dari suatu atribut tersebut.
2. Mutator dan Accessor method
a. Accessor Methods
Digunakan untuk membaca nilai variabel pada class, baik berupa instance
maupun static.
b. Mutator Methods
Digunakan untuk mengubah atau memberi nilai variable pada class, baik
berupa instance maupun static.
C. LATIHAN
1. Latihan 1
Bus
- penumpang : int
- maxPenumpang :
int
+ cetak()
a. Script class Bus.java
public class Bus {
public int penumpang;
public int maxPenumpang;
public void cetak(){
System.out.println("Penumpang Bus sekarang adalah
"+penumpang);
System.out.println("Penumpang maksimum seharusnya
adalah "+maxPenumpang);
}
}
4. b. Script class UjiBus.java
public class UjiBus {
public static void main(String[] args){
//membuat objek busMini dari kelas Bus
Bus busMini =new Bus();
//memasukkan nilai jumlah penumpang dan penumpang maksimal
ke dalam
//objek busMini
busMini.penumpang =5;
busMini.maxPenumpang =15;
//memanggil method cetak pada kelas Bus
busMini.cetak();
//menambahkan penumpang pada busMini
busMini.penumpang = busMini.penumpang +5;
//memanggil method cetak pada kelas Bus
busMini.cetak();
//mengurangi jumlah penumpang pada busMini
busMini.penumpang = busMini.penumpang -2;
busMini.cetak();
//menambahkan jumlah penumpang pada busMini
busMini.penumpang = busMini.penumpang +8;
busMini.cetak();
}
}
c. Output program hasil kompilasi
d. Perhatikan jumlah penumpang Bus terakhir dengan jumlah
penumpang maksimum. Mengapa bisa demikian?
Pada program menampilkan penumpang yang overload karena pada
penjumlahan penumpang tidak ada kondisi untuk membatasi jumlah
penumpang. Karena dari hasil penjumlahan statement kedua ialah 8. Dan
nilai 8 dijumlahkan 8 maka akan menghasilkan nilai 16, karena pada
statement ke 4 berisi penumpang sekarang dijumlahkan 8 nilainya. Hal
inilah yang mengakibatkan bus overload.
e. Deskripsi Program
Dalam program terjadi kelebihan nilai pada variabel penumpang karena
tidak adanya metode untuk membatasi kelas lain (UjiBus) untuk mengelola
variabel penumpang sehingga dapat mengubah nilai sembarangan pada
5. atribut penumpang pada kelas Bus. Selain itu, karena tipe variabel tersebut
public, sehingga dapat diakses oleh kelas lain.
2. Latihan 2
Bus
- penumpang : int
- maxPenumpang : int
+ Bus(maxPenumpang : int)
+ addPenumpang(penumpang : int)
+ cetak()
a. Script class Bus.java
public class Bus {
Private int penumpang;
Private int maxPenumpang;
//konstruksi kelas Bus
public Bus(int maxPenumpang){
this.maxPenumpang = maxPenumpang;
penumpang =0;
}
//method mutator untuk menambahkan penumpang
public void addPenumpang(int penumpang){
int temp;
temp =this.penumpang+penumpang;
if(temp >= maxPenumpang){
System.out.println("Penumpang melebihi kuota");
}else{
this.penumpang = temp;
}
}
Public void cetak(){
System.out.println("Penumpang Bus sekarang adalah
"+penumpang);
System.out.println("Penumpang maksimum seharusnya adalah
"+maxPenumpang);
}
}
b. Output Program (diakses dari UjiBus)
6. c. Beri Penjelasan point b!
Saat kelas UjiBus dijalankan, maka akan terdapat beberapa error. Karena
variable penumpang dan maxPenumpang di kelas Bus telah dirubah
menjadi private, maka kelas UjiBus tidak dapat secara langsung merubah
nilai dari variable private tersebut. Maka dari itu diperlukan method
mutator pada kelas Bus untuk dapat mengakses variabel yang diprivate
(method addPenumpang) sekaligus memberikan kondisi agar tidak terjadi
overload penumpang.
d. Script Class UjiBus.java
public class UjiBus {
public static void main (String[] args){
//membuat objek busBesar dari class Bus
Bus busBesar =new Bus(40);
busBesar.cetak();
//penambahan penumpang
busBesar.addPenumpang(15);//menambahkan 15 penumpang
busBesar.cetak();
//penambahan penumpang
busBesar.addPenumpang(5);
busBesar.cetak();
//penambahan penumpang
busBesar.addPenumpang(26);//menambahkan 26 penumpang
busBesar.cetak();
}
}
e. Output Program dari class yang sudah dirubah
f. Deskripsi dan Kesimpulan
Pada program diatas kleas UjiBus akan memanggil kelas Bus,
kelas tersebut akan memanggil method yang diperlukan. Karena pada
kelas Bus terdapat variabel bertipe private maka untuk mengaksesnya
harus memakai method baru bertipe asesor/mutator sehingga variabel
tersebut dapat diakses. Dan nilai atributnya dapat kita rubah pada kelas
lain (UjiBus).
Jadi metode enkapsulasi, suatu attribute dalam kelas akan
disembunyikan (private) sehingga tidak dapat langsung diakses oleh kelas
lain. Untuk mengakses atau merubah nilai attribute tersebut, dibutuhkan
sebuah method baik assessor maupun mutator.
7. 3. Latihan 3
a. Tambahkan method getPenumpang pada class Bus. Tambahkan
aturan untuk mengakses data penumpang baru ke dalam method
getPenumpang. Aturan yang ditambahkan memuat kode
akses(password). Jika password benar, maka data penumpang yang
baru ditambahkan dan ditampilkan, jika password salah, maka ada
peringatan bahwa password salah.
Bus
- penumpang : int
- maxPenumpang : int
- penumpangBaru : int
+ Bus(maxPenumpang : int)
+ addPenumpang(penumpang : int)
+ getPenumpang(password : int) : int
+ cetak()
b. Script class Bus
public class Bus {
private int penumpang;
private int maxPenumpang;
private int penumpangBaru;
//konstruksi kelas Bus
public Bus(int maxPenumpang){
this.maxPenumpang = maxPenumpang;
penumpang =0;
}
//method mutator untuk menambahkan penumpang
public void addPenumpang(int penumpang){
int temp;
temp =this.penumpang+penumpang;
if(temp >= maxPenumpang){
System.out.println("Penumpang
melebihi kuota");
}else{
this.penumpang = temp;
}
}
//minta password
public void getPenumpang(int password){
if (password==123){
System.out.println("nPassword Benar");
addPenumpang(15);
}
else{
System.out.println("nPassword Salah!!!");
}
}
8. public void cetak(){
System.out.println("Penumpang Bus sekarang adalah
"+penumpang);
System.out.println("Penumpang maksimum seharusnya
adalah "+maxPenumpang);
}
}
c. Buat class UjiBus untuk menguji methot getPenumpang tersebut.
public class UjiBus {
public static void main (String[] args){
int password;
//membuat objek busBesar dari class Bus
Bus busBesar =new Bus(40);
busBesar.cetak();
//penambahan penumpang
busBesar.getPenumpang(123);
busBesar.cetak();
//penambahan penumpang
busBesar.getPenumpang(121);
busBesar.cetak();
//penambahan penumpang
busBesar.getPenumpang(123);
busBesar.cetak();
}
}
d. Output (hasil) Program
e. Deskripsi Program
Program diatas berguna untuk memproteksi penambahan penumpang pada
kelas Bus, namun dengan fitur proteksi berupa password. Jika password
yang dimasukkan benar maka akan menambahkan jumlah penumpang,
namun jika salah jumlah penumpang akan tetap sama (tanpa ada
penjumalahan). Hal ini dikarenakan pada method getPenumpang terdapat
autentikasi berupa parameter password. Jika passwordnya benar (123),
maka method tersebut akan memanggil method addPenumpang yang
9. berfungsi menambahkan nilai variabel penumpang. Sehingga jumlah
penumpang bertambah
D. TUGAS PRAKTIKUM
A. Bus
- penumpang : double
- maxPenumpang : double
- counter : double
- penumpngBaru : double
+ Bus(maxPenumpang : double)
+ addPenumpang(penumpang :
double)
+ getPenumpang(password : int) :
double
+ getAverage() : double
+ cetak()
Dari hasil program latihan 3, tambahkan method getAverage() untuk menghitung
rata-rata berat penumpang yang ditambahkan !
a. Script class Bus
public class Bus {
private double penumpang;
private double maxPenumpang;
private double penumpangBaru;
private double counter;
//konstruksi kelas Bus
public Bus(double maxPenumpang){
this.maxPenumpang = maxPenumpang;
penumpang =0;
}
//method mutator untuk menambahkan penumpang
public void addPenumpang(double penumpang){
double temp;
temp =this.penumpang+penumpang;
if(temp >= maxPenumpang){
System.out.println("Penumpang
melebihi kuota");
}else{
this.penumpang = temp;
counter++;
}
}
//mdoublea password
public void getPenumpang(double password){
if (password==123){
System.out.println("nPassword Benar");
addPenumpang(15);
10. }
else{
System.out.println("nPassword Salah!!!");
}
}
public double getAverage(){
return penumpang/counter;
}
public void cetak(){
System.out.println("Penumpang Bus sekarang adalah
"+penumpang);
System.out.println("Penumpang maksimum seharusnya
adalah "+maxPenumpang);
}
}
b. Buat class UjiBus untuk menguji methot getPenumpang tersebut.
public class UjiBus {
public static void main (String[] args){
int password;
//membuat objek busBesar dari class Bus
Bus busBesar =new Bus(40);
busBesar.cetak();
//penambahan penumpang
busBesar.getPenumpang(123);
busBesar.cetak();
//penambahan penumpang
busBesar.getPenumpang(121);
busBesar.cetak();
//penambahan penumpang
busBesar.getPenumpang(123);
busBesar.cetak();
System.out.println("Rata-rata Penumpang :
"+busBesar.getAverage());
}
}
c. Output (hasil) Program
d. Deskripsi Program
11. Pada program diatas, ialah hasil dari penambahan method getAverage()
pada kelas Bus. Dimana kelas method tersebut akan mencari nilai rata-rata
penumpang yang naik ke Bus yang didapatkan dari jumlah total
penumpang bus dibagi dengan counter (jumlah berhenti)
E. TUGAS RUMAH
1. Buatlah sebuah class Bola dengan property jari-jari dan method setjarijari(),
showDiameter(),showLuasPermukaan(), dan showVolume(). Gunakan double
untuk presisi variable jari-jari dan gunakan library math class untuk
menggunakan constanta Math.PI.
Selanjutnya buatlah file testnya dengan urutan langkah, membuat variable
Jarijari, menciptakan objek Bola, memanggil method showDiameter(),
showLuasPermukaan(), dan showVolume(). Selanjutnya memanipulasi objek
yang telah dibuat dengan memanggil method setJarijari() dengan menggunakan
variable Jarijari yang telah dibuat. Tampilkan lagi hasilnya dengan
menggunakan method showDiameter(), showLuasPermukaan(), dan
showVolume(). (Jangan lupa untuk menggunakan konsep enkapsulasi)
i. Script class Bola.java
import java.lang.Math;
public class Bola{
private double jarijari;
public Bola(double jarijari){
this.jarijari=jarijari;
}
public void setJarijari(double jarijari){
this.jarijari=jarijari;
}
public void showDiameter(){
System.out.println("Diameter Bola :
"+2*jarijari);
}
public void showLuasPermukaan(){
System.out.println("Luas Permukaan Bola :
"+(4/3*Math.PI*Math.pow(jarijari,3)));
}
public void showVolume(){
System.out.println("Volume Bola :
"+(4*Math.PI*Math.pow(jarijari,2)));
}
}
12. ii. Script class TestBola.java
public class MainBola{
public static void main(String[]args){
double Jarijari=14;
Bola objekbola=new Bola(7);
objekbola.showDiameter();
objekbola.showLuasPermukaan();
objekbola.showVolume();
System.out.println("nn");
objekbola.setJarijari(Jarijari); //manipulasi
denganvariabel jari-jari yang dibuat
objekbola.showDiameter();
objekbola.showLuasPermukaan();
objekbola.showVolume();
}
}
iii. Output (hasil) Program
iv. Deskripsi program
Program diatas ialah implementasi konsep enkapsulasi pada perhitungan luas
dan volume bola. Dimana kelas MainBola akan memanggil method
ShowDiameter untuk menampilkan nilai diameter dari bola, selanjutnya program
akan memanggil method LuasPermukaan dan ShowVolume untuk menampilkan
nilai luas permukaan dan volumenya. Setelah itu oleh kelas MainBola nilai jari-jari
diubah menjadi 14 (pada syntax objekbola.setJarijari(Jarijari);)
sehingga nilai luas dan volumenya berubah karena nilai variabelnya diganti.
Konstanta Math P.I digunakan untuk memudahkan operasi matematika seperti
pangkat (pow) pada program tersebut sehingga memudahkan programmer untuk
melakukan operasi matematik
2. Tugas Rumah 2
Buatlah program sendiri menggunakan konsep enkapsulasi dengan tema
bidang percetakan! Susunan pengerjaan kotak encapsulasi, program, hasil
output program dan berikan penjelasan singkat!
13. a. Script Percetakan.java
public class Percetakan{
private int biaya;
public Percetakan(int biaya){
this.biaya=biaya;
}
public int getBiayaFC(){
return this.biaya;
}
public int getBiayaP(){
return (this.biaya+50);
}
public int getBiayaPW(){
return (this.biaya+150);
}
public void setBiaya(int biaya,int password){
if (password==123)
{
this.biaya=biaya;
System.out.println("Penggantian harga dasar
SUKSESnnn");
System.out.println("Harga Saat Ini : Rp "+biaya);
}
else {
System.out.println("Password Salah!! Silahkan
Ulanginnn");
}
}
/*public int Fotocopy(int jumlah){
int total=jumlah*biaya*8/10;
return total;
}
public int Print(int jumlah){
int total=jumlah*biaya*9/10;
return total;
}
public int Warna(int jumlah){
int total=jumlah*biaya*29/30;
return total;*/
}
b. Script TestPercetakan.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class TestPercetakan {
public static String bacaInputan(){
String baca ="";
14. InputStreamReader input =new
InputStreamReader(System.in);
BufferedReader buf =new BufferedReader(input);
try{
baca = buf.readLine();
}catch(IOException e){
System.out.println("Error!");
}
return baca;
}
public static void main(String[]args){
int menu=0;
int banyak;
int pass;
int harga;
Percetakan cetakku =new Percetakan(100); //harga dasar
100 rupiah
while(menu!=4){
System.out.print("nn======= Percetakan Cantika
========n"+
"1. Hitung Biaya Printn"+
"2. Hitung Biaya Fotocopyn"+
"3. Ganti Harga Dasarn"+
"4. Keluarn"+
"Pilih Menu : ");
menu = Integer.parseInt(bacaInputan());
if(menu ==1){
System.out.println("Hitung Biaya Print");
System.out.print("Masukkan jumlah halaman yang
dicetak :");
banyak = Integer.parseInt(bacaInputan());
System.out.println("Harga total pencetakan
"+banyak+" halaman adalah : Rp. "+banyak*cetakku.getBiayaP());
}
else if(menu ==2){
System.out.println("Hitung Biaya Fotocopy");
System.out.print("Masukkan jumlah halaman yang
dicopy :");
banyak = Integer.parseInt(bacaInputan());
System.out.println("Harga total Foto Copy
"+banyak+" halaman adalah : Rp. "+banyak*cetakku.getBiayaFC());
}
else if(menu ==3){
System.out.println("Ganti Harga Dasar");
System.out.println("Harga Sebelumnya : Rp
"+cetakku.getBiayaFC());
System.out.print("Masukkan Password : ");
pass = Integer.parseInt(bacaInputan());
System.out.print("Masukkan Harga Baru : ");
harga = Integer.parseInt(bacaInputan());
cetakku.setBiaya(harga, pass);
}
if(menu ==4){
}
else{
System.out.println("nnMenu yang dimaksud tidak
tersedia");
}
16. d. Deskripsi
Di dalam program ini untuk menghitung harga yang harus dibayarkan oleh
konsumen dari percetakan cantika. Harga dasar dari foto copy ialah 100 rupiah
yang dilihat pada parameter method Percetakan pada inisialisasi kelas
Percetakan. Kemudian user dapat memilih menu 1-4 dimana jika memilih
menu 1 maka akan menghitung biaya print dengan harga Rp. 150,- (harga
default) dan harga 100 setiap foto copy perlembarnya karena disetting oleh
kelas Percetakan harga print ialah harga dasar (foto kopi) ditambahkan Rp.
50,-.
Pada proses penggantian harga dasar user diminta memasukkan password, jika
password benar maka dapat mengubah harga dasar sesuai keinginannya karena
pada kelas TestPercetakan memakai method mutator
(cetakku.setBiaya(harga, pass);) untuk mengubah harga dasar sehingga
ketika harga dasar berubah, harga fotokopi dan print berubah pula sesuai yang
disetting (harga print ialah harga dasar ditambahkan Rp. 50,-)
F. KESIMPULAN
Enkapsulasi merupakan metode pengkapsulan yang digunakan untuk melindungi
data pada satu class, dalam hal ini dengan cara mmenggunakan atribut private pada
variabel.
Untuk mengakses variabel private dalam suatu class, kita harus melalui method
public
Class yang mengakses class yang sudah terenkapsulasi diberikan wewenang untuk
mengakses atribut atribut bertipe public saja.
Dua hal yang mendasar dalam enkapsulasi, yakni :
Information Hiding adalah proses yang menyembunyikan informasi dari
suatu classsehingga class tersebut tidak dapat diakses dari luar.
Interface to Acces data adalah cara melalukan perubahan terhadap atribut
yang di information hiding
Accessor Methods, digunakan untuk membaca nilai variabel pada class, baik
berupa instance maupun static.
Mutator Methods, digunakan untuk mengubah atau memberi nilai variable pada
class, baik berupa instance maupun static.
17. G. DAFTAR PUSTAKA
Modul IV EncapsulationPraktikum Pemrograman Berbasis Objek. Pendidikan
Teknik Informatika Teknik Elektro Universitas Negeri Malang 2014.