Anda di halaman 1dari 17

LAPORAN IV

PRAKTIKUM PEMROGRAMAN BERBASIS OBJEK




Disusun untuk Memenuhi Matakuliah Praktikum Pemrograman Berbasis Objek Yang
Dibimbing oleh Heru Wahyu Herwanto, S.T., M.KOM

Asisten Praktikum:
Mukh. Angga Gumilang
Erma Widayanti
Wildan Setyo











Oleh:
Amadeuz Ezrafel
120533430965
S1 PTI 2013 offering D


UNIVERSITAS NEGERI MALANG
FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
S1 PENDIDIKAN TEKNIK INFORMATIKA
Oktober 2014


Modul Praktikum IV
Encapsulation

A. TUJUAN
1. Mahasiswa mampu memahami Encapsulation dalam pemromgraman java.
2. Mahasiswa mampu menggunakan konsep Encapsulation dalam pemromgraman java.

B. DASAR TEORI
Pembungkusan variable dan method dalam sebuah objek dalam bagian yang terlindungi inilah
yang disebut dengan enkapsulasi. Jadi, enkapsulasi dapat diartikan sebagai bungkusan (wrapper)
pelindung program dan data yang sedang diolah. Pembungkusan ini mendefinisikan perilaku dan
melindungi program dan data yang sedang diolah agar tidak diakses sembarangan oleh program
lain.
Manfaat dari proses enkapsulasi adalah:
1. Modularitas
Kode sumber dari sebuah objek dapat dikelola secara independen dari kode sumber objek
yang lain.
2. Information Hiding
Karena ketika dapat menentukan hak akses sebuah variable/method dari objek, dengan
demikian kita bisa menyembunyikan informasi yang tidak perlu diketahui objek lain.

Dalam melakukan pembungkusan kode dan data di dalam java terdapat penentu hak akses
yang harus diperhatikan.
Penentu akses
- public
Public berarti pengaksesan suatu variable instan atau metode dapat dilakukan dari luar kelas.
- private
private berarti pengaksesan suatu variable instan atau metode hanya dapat dilakukan di dalam
kelas, tidak bisa dari luar kelas.
- protected
protected berguna untuk mengatur agar suatu variable instan atau metode yang terdapat pada
sebuah kelas dapat diakses pada kelas itu sendiri dan sub kelas.




Berikut merupakan keuntungan menerapkan prinsip enkapsulasi:
a. Bersifat independen. Suatu modul yang terenkapsulasi dengan baik akan bersifat
independen dari modul lainnya sehingga dapat digunakan pada bagian manapun dari
program. Ia tidak akan terikat bada bagian tertentu dari program.
b. Bersifat transparan. Bila melakukan modifikasi pada suatu modul, maka perubahan
tersebut akan dirasakan juga oleh bagian pogram yang menggunakan modul tersebut.
c. Menghindari efek yang diluar perencanaan. Modul yang terenkapsulasi dengan baik
hanya akan berinteraksi dengan bagian program lainnya melalui variable-variabel
input/output yang telah didefinisikan sebelumnya. Dengan demikian akan merduksi
kemungkinan adanya hasil imbas pemrosesan yang di luar perencanaan semula.

Mutator dan Accesor Method
1. Accesor Method
Accessor Method di gunakan untuk membaca nilai variable pada class, baik berupa
instance maupun static. Method ini mempunyai return value, biasanya accessor method di
mulai dengan penulisan get<nama instance Variable>.Sebagai contoh untuk
membaca nama;
public class AccessorMethod
{
private String nama;
public String getNama ()
{
return nama;
}}
Dimana :
public : Sebagai access modifier nya, berarti bisa di akses dari luar object class.
String : Tipe data return value dari method tersebut bertipe String
getNama : Nama dari method tersebut.
() : Method tidak memiliki parameter.
return nama : Artinya akan ada pengembalian nilai dari nama instance variable ke
pemanggilan method.
return juga tidak hanya mengembalikan nilai dari nama instance variable saja, akan tetapi
jika kita melalukan proses di dalam method tersebut kita bisa return hasil proses tersubut,
sebagai contoh :
public int getHasil(){
int result=0;
result = 10+10;
return result;
}
Get Accessor
Penggunakan get{} pada property mirip dengan jika anda menggunaan method
getValue() atau getter method pada java, get pasti mengembalikan nilai jadi dalam
kalang get harus ada return valuenya.
Set Accessor
Penggunaan set{} pada property mirip dengan jika anda menggunakan setValue()
atau setter method pada java, set digunakan untuk memberi nilai kedalam class
variable. Pada C# jika anda memberi nilai pada property maka set{} otomatis
dijalankan.

2. Mutator Method
Mutator Method di gunakan untuk mengubah nilai variable pada class, baik berupa
instance maupun static. Dan variabel tersebut biasanya berupa private. Biasanya mutator
method di mulai dengan penulisan set<nama instance Variable>.
Contoh pada mutator method :
class Vehicle
{
static final boolean RUN = true;
static final boolean STOP = false;
...
private String vehicleName;
...
public void setVehicleName(String pVehicleName)
{
vehicleName=pVehicleName;
}
}











C. LATIHAN
Latihan 1

a. Source code I
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 adalah "+maxPenumpang);
}
}

b. Source code II
public class UjiBus{
public static void main(String[] arg){
//membuat objek busMini dari kelas Bus
Bus busMini= new Bus();
//memasukan 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

d. Perhatikan jumlah penumpang Bus terakhir dengan jumlah penumpang maksimum.
Mengapa bisa demikian?
Pada penumpang Bus terakhir jumlah penumpang 16 penumpang, hal ini melebihi jumlah
maksimum dari penumpang yang berjumlah 15. Mengapa bisa demikian? Karena tidak
adanya encapsulasi dalam program, sehingga nilai pada penjumlahan dari 8 + 8 tetap
dihitung dan hasilnya menjadi melebihi batas maksimum penumpang yang seharusnya
berjumlah 15 penumpang menjadi 16 penumpang.

Latihan 2

a. Source code I
public class Bus2{
private int penumpang;
private int maxPenumpang;

public Bus2(int maxPenumpang){
this.maxPenumpang=maxPenumpang;
penumpang=0;
}

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: "+penumpang);
System.out.println("Penumpang max seharusnya: "+maxPenumpang);
}
}


b. Source Code II
public class UjiBus2{
public static void main(String[] args){
Bus2 busBesar = new Bus2(40);
busBesar.cetak();

busBesar.addPenumpang(15);
busBesar.cetak();

busBesar.addPenumpang(5);
busBesar.cetak();

busBesar.addPenumpang(26);
busBesar.cetak();
}
}

c. Output dari UjiBus2

d. Penjelasan
Pada program diatas menampilkan isi penumpang bus dengan terlebih dahulu
menambahkan isi penumpang melalui pemberian parameter bertipe integer terhadap
busBesar.addPenumpang(parameter); sehingga akan ditampilkan penumpang sekarang
dan seharusnya. Pada saat penumpang yang ditambahkan hasilnya melebihi kuota maka
parameter yang diisikan tadi langsung ditolak aksesnya alias tidak dihitung masuk
sehingga tampilan isinya default dari isi penumpang sebelumnya.

e. Analisis
Pada latihan 1 tipe dari variable penumpang dan maxPenumpang bersifat public sehingga
dapat diakses oleh siapa saja, sedangkan pada latihan 2 akses berupa private yang dimana
hanya akses tertentu yang boleh memanipulasi data nya. Pada konsep latihan 1 belum
menerapkan Encapsulasi, sedangkan pada latihan 2 sudah menerapkan konsep
Encapsulasi / pengkapsulan. Pengkapsulan berguna untuk pembungkusan variable dan
method dalam sebuah objek agar terlindungi dan tidak dapat diakses oleh sembarang
program lain. Dalam program ini jumlah maksimum penumpang yaitu 40. Jika jumlah
penumpang melebihi jumlah maksimum maka dinyatakan penumpang melebihi kuota.


Latihan 3
a. Source Code 1
import java.io.*;

class Bus3
{
public static String bacaInputan()
{
String baca = " ";
InputStreamReader input = new InputStreamReader(System.in);
BufferedReader buf = new BufferedReader(input);
try
{
baca=buf.readLine();
}
catch(IOException e)
{
System.out.println(" Error!");
}
return baca;
}

int password;
int masuk = 1234;

private int penumpang;
private int maxPenumpang = 40;

private int penumpangBaru;

//Konstruktor class Bus
public void Bus3 (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 getPenumpang (int password)
{
System.out.println ("============================");
System.out.print ("Masukkan password : ");
password = Integer.parseInt(bacaInputan());

if (password == masuk)
{
System.out.println ("Penumpang yang di tambah adalah : "+penumpang);
}
else
{
System.out.println ("Error Password :P ");
}
}

}

b. Source Code 2
class UjiBus3
{
public static void main (String[] args)
{
Bus3 baru = new Bus3();
baru.addPenumpang (15);
baru.addPenumpang (5);
baru.getPenumpang(20);
}
}

c. Output Program

Pada program diatas ditambahkan method getPenumpang unntuk menampilkan
pengaksesan penambahan dari addPenumpang. Sehingga pada awal dijalankan
ditampilkan pengisian password, jika password yang dimasukan benar maka eksekusi dari
addPenumpang baru ditambahkan atau dijalankan, jika password yang dimasukan salah
maka error dengan menggunakan pengkondisian if else.

D. TUGAS PRAKTIKUM
Source Code

a. Source Code I
import java.io.*;
class Bus4
{
public static String bacaInputan()
{
String baca = " ";
InputStreamReader input = new InputStreamReader(System.in);
BufferedReader buf = new BufferedReader(input);
try
{
baca=buf.readLine();
}
catch(IOException e)
{
System.out.println(" Error!");
}
return baca;
}

int pass;
private double penumpang;
private double maxPenumpang = 125;
private double penumpangBaru;
private double counter;
private double berat;

//konstruktor kelas Bus
public void bus (int maxPenumpang)
{
this.maxPenumpang = maxPenumpang;
penumpang = 0;
}

public void addPenumpang (int penumpang)
{
double temp;
temp = this.penumpang+penumpang;
if (temp > maxPenumpang)
{
System.out.println("==============================================");
System.out.println (" Penumpang melebihi kuota");
}
else
{
this.penumpang = temp;
counter = counter+1;
}
}

public void getPenumpang (int password){

System.out.println("Masukkan password ");
System.out.print(" Masukkan password : ");
pass=Integer.parseInt(bacaInputan());

if (pass == 1234)
{
System.out.println("Penumpang yang di tambah adalah : "+penumpang);
} else
{
System.out.println (" Password yang anda masukkan salah");
}
}

public void getAverage(double berat)
{
double average;
average=this.berat+berat;
this.berat=average;
System.out.println("==============================================");
System.out.println(" Berat penumpang : "+average);
System.out.println(" Berat rata-rata penumpang : "+average/3);
}

public void cetak (){
System.out.println (" Penumpang sekarang adalah : "+penumpang);
System.out.println("Maksimum berat penumpang seharusnya : "+maxPenumpang);
System.out.println(" ==============================================");
}
}

b. Source Code II
class UjiBus4
{
public static void main (String [] args)
{
Bus4 baru = new Bus4();
baru.cetak ();
System.out.println (" Penambahan penumpang");
baru.addPenumpang (3);
baru.cetak ();
baru.getPenumpang(1);
baru.getAverage(40);
baru.getAverage(24);
baru.getAverage(11);
System.out.println("==============================================");
}
}

c. Hasil Compilasi

Pada program di atas merupakan modifikasi dari latihan 3 yang ditambahkan method
getAverage . Program ini untuk menghitung jumlah penambahan penumpang dan juga
menghitung nilai rata-rata penumpang (average) dengan jumlah maksimal penumpang
sebesar 125 penumpang. Berat rata-rata ini dibagi 3 karena jumlah penambahan selama 3
kali. Selain itu program ini menggunakan import java.io.*; yang digunakan untuk fungsi
input ouput.


E. TUGAS RUMAH
1. Tugas Rumah 1
a. Source Code
Kelas Tabung
import java.io.*;
import java.math.*; //fungsi matematika
class Tabung
{
public static String bacaInputan()
{
String baca = " ";
InputStreamReader input = new InputStreamReader(System.in);
BufferedReader buf = new BufferedReader(input);
try
{
baca=buf.readLine();
}
catch(IOException e)
{
System.out.println(" Error!");
}
return baca;
}

private double jarijari;
private double tinggi;

Tabung()
{
this.jarijari=7;
this.tinggi=14;
}
void settinggi(double tinggi)
{
this.tinggi=tinggi;
}
void setjarijari(double jarijari)
{
this.jarijari=jarijari;
}

void showdiameter()
{
System.out.println("_____________________________");
System.out.println("Diameter Tabung : "+this.jarijari*2);
}

void showluaspermukaan()
{
System.out.println("Luas permukaan: "+((2*(Math.PI*jarijari*(jarijari+tinggi)))));
}

void showvolume(
{
System.out.println("Volume tabung : "+((Math.PI*jarijari*jarijari*tinggi)));
System.out.println("_____________________________");
}
}

Kelas UjiTabung
public class UjiTabung //nama class
{
public static void main(String[] args) //method utama
{
Tabung Gas = new Tabung(); //membuat objek baru
System.out.println("_____________________________");
System.out.println("Tabung Kecil");
Gas .showdiameter(); //memanggil method showdiameter
Gas .showluaspermukaan(); //memanggil method showluaspermukaan
Gas .showvolume(); //memanggil method showvolume
System.out.println("_____________________________");
System.out.println("Tabung Besar");
Gas .setjarijari(24);
Gas .settinggi(48);
Gas .showdiameter(); //memanggil method showdiameter
Gas .showluaspermukaan();//memanggil method showluaspermukaan
Gas .showvolume();//memanggil method showvolume
}
}


b. Output Program


Deskripsi Program
Program di atas meupakan program menghitung diameter, luas permukaan, volume
tabung. Pada program ini juga menggunakan import java.math.*; yang merupakan fungsi
untuk perhitungan matematika. Program dibuat dengan properti jarijari dan tinggi yang
bertipe double dan bersifat private, lalu method setjarijari, settinggi, showdiameter,
showluaspermukaan dan showvolume. Pada saat program dijalankan akan menghitung
dengan rumusan dari inisialisasi constructor sehingga didapat tampilan hasil tabung yang
kecil, lalu kemudian jari-jari dan tinggi dilakukan set terhadap jari jari dan tinggi yang
ubah melalui parameter dalam class UjiTabung sehingga didapatkan hasil yang berbeda
dari sebelumnya.


2. Tugas Rumah 2
a. Source Code
Kelas PilihanBuku
import java.io.*;
class PilihanBuku
{
private String jenis;
public static String bacaInputan()
{
String baca = " ";
InputStreamReader input = new InputStreamReader(System.in);
BufferedReader buf = new BufferedReader(input);
try //Blok yang dijalankan kalau terjadi eksepsi
{
baca=buf.readLine();//membaca data dari objek stream
}
catch(IOException e)
//Blok yang ditangkap sekiranya terjadi eksepsi
{
System.out.println(" Error!");
}
return baca;
}

public void setJenis (String jenis)
{
this.jenis = jenis;
}

public int getJenis()
{
int harga = 0;

if (this.jenis == "MAPEL")
{
harga = 200;
}
else if(this.jenis == "KOMIK")
{
harga = 300;
}
else if(this.jenis == "ENSIKLOPEDI")
{
harga = 500;
}
return harga;
}
}


Kelas Bayar
class Bayar extends PilihanBuku

{
private int jml_Buku;
public void setjml_Buku(String Jenis, int jumlah)
{
this.jml_Buku = jumlah;
this.setJenis(Jenis);
}
public int getjml_Buku()
{
return this.getJenis() * this.jml_Buku;
}
}


Kelas Persewaan
import java.io.*;

class Persewaan extends Bayar
{
public static void main (String[] arg)
{
BufferedReader data = new BufferedReader (new InputStreamReader(System.in));
int pil = 0;
int jumlah = 0;
Bayar hitung = new Bayar();
try
{
System.out.println("\n\t ________________________");
System.out.println("\t | RENTAL BUKU 7x24Jam |");
System.out.println("\t | RAJIN BACA JAYA |");
System.out.println("\t ________________________");
System.out.println("\t | PILIHAN BUKU |");
System.out.println("\t | [1]. PELAJARAN |");
System.out.println("\t | Rp. 200 |");
System.out.println("\t | [2]. KOMIK |");
System.out.println("\t | Rp. 300 |");
System.out.println("\t | [3]. ENSIKLOPEDI |");
System.out.println("\t | Rp. 500 |");
System.out.println("\t ========================");
System.out.println("________________________________________");
System.out.print("Masukan pilihan buku: ");
pil = Integer.parseInt( data.readLine() );
System.out.println(" ________________________________________");
System.out.print("Masukan jumlah buku: ");
jumlah= Integer.parseInt( data.readLine() );
if (pil == 1)
{
hitung.setjml_Buku("MAPEL", jumlah);
}
else if(pil == 2)
{
hitung.setjml_Buku("KOMIK", jumlah);
}
else if(pil == 3)
{
hitung.setjml_Buku("ENSIKLOPEDI", jumlah);
}

}
catch (Exception e)
{
System.out.println(" Error");
}
System.out.println(" ________________________________________");
System.out.println(" Jumlah Sewa Buku yang harus Anda bayar : " +hitung.getjml_Buku() );
System.out.println(" ________________________________________");
System.out.println(" Terimakasih,kembalikan tepat waktu!");
System.out.println(" ________________________________________");
}
}












b. Output Program


Pada program di atas merupakan program persewaan. Mempunyai 3 class, yaitu class
pertama sebagai parent class yaitu class PilihanBuku, class kedua class Bayar turunan
dari class PilihanBuku, class 3 class turunan dari class Bayar yaitu class Persewaan.
Setiap Buku pelajaran dihargai dengan 200 tiap sewa 1 buku, buku komik dihargai
300 dan ensiklopedi 500. Jumlah bayar sewa diperoleh dari jumlah buku di kali
dengan harga jenis buku. Selain itu program di atas juga menggunakan Accesor dan
Mutator method dengan get dan set yang terdapat pada kelas Bayar sebagai proses
penghitungan pembayaran nantinya.



F. KESIMPULAN
private, Tidak dapat diakses oleh kelas lain
protected, hanya dapat diakes oleh kelas turunan
public, dapat diakses oleh sembarang kelas.
Encapsulation berguna untuk membungkusan variable dan method dalam sebuah objek
agar terlindungi dan tidak dapat diakses oleh sembarang program lain.
java.math.*; merupakan fungsi untuk perhitungan matematika.
Stream adalah aliran data yang berupa aliran byte atau karakter, dari device input ke
divice output pada saat program di eksekusi
Accessor Methods digunakan untuk membaca nilai variabel pada class, baik berupa
instance maupun static. Sebuah accessor method umumnya dimulai dengan penulisan
get<namaInstanceVariable>.
Mutator Method di gunakan untuk mengubah nilai variable pada class, baik berupa
instance maupun static. Dan variabel tersebut biasanya berupa private. Biasanya mutator
method di mulai dengan penulisan set<nama instance Variable>.



DAFTAR RUJUKAN
_____.2014. Modul Praktikum 4 Encapsulation. Pendidikan Teknik Informatika.UM.
Fikri, Rijalul, dkk.2005. Pemrograman Java. Yogyakarta: Andi Offset
Raharjo, Budi, dkk. 2010. Mudah Belajar Java edisi Revisi. Bandung: Informatika