PEMROGRAMAN LANJUT Teknik Informatika PTIIK UB Semester Genap 2015/2016
ENKAPSULASI
Dr. Eng. Herman Tolle Program Teknologi Informasi & Ilmu Komputer, Universitas Brawijaya
MATERI • • • • • • • •
Abstraksi Variabel Class (Instance Variabel, Local Variabel) Methods (set Method dan get Method) Encapsulation Access Modifier (Public dan Private) Fields Visibility Modifier (Public dan Private) Methods Tipe Data (Primitive dan Reference) Immutable Object dan Class
2. Konsep Dasar Pemrograman Berorientasi Objek
Konstruktor, Overloading, Abstraksi, Enkapsulasi
KONSTRUKTOR
ABSTRAKSI & ENKAPSULASI
Abstraction Cara kita melihat suatu sistem dalam bentuk yang lebih sederhana, yaitu sebagai suatu kumpulan subsistem (object) yang saling berinteraksi. • Mobil adalah kumpulan sistem pengapian, sistem kemudi, sistem pengereman
Alat untuk meng-abstraksikan sesuatu adalah class
Object bersifat modularity. Object dapat ditulis dan dimaintain terpisah (independen) dari object lain
Encapsulation Mekanisme menyembunyikan suatu proses dan data dalam sistem untuk menghindari interferensi, dan menyederhanakan penggunaan proses itu sendiri • Tongkat transmisi (gigi) pada mobil • Tombol on/off/pengaturan suhu pada AC
Class access level (public, protected, private) adalah implementasi dari konsep encapsulation Enkapsulasi data dapat dilakukan dengan cara: 1. mendeklarasikan instance variable sebagai private 2. mendeklarasikan method yang sifatnya public untuk mengakses variable tersebut
Encapsulation dan Access Modifier Modifier
Dalam Dalam Class Package yang yang Sama Sama
Dalam Dalam SubClass Package Lain
private
tanpa tanda
protected
public
Encapsulation Enkapsulasi data dapat dilakukan dengan cara: 1. mendeklarasikan instance variable sebagai private 2. mendeklarasikan method yang sifatnya public untuk mengakses variable tersebut
Method Set dan Get Semua atribut dibuat private
Membuat method SET untuk menginput nilai pada atribut tersebut Membuat method GET untuk menampilkan nilai dari atribut tersebut Method Set dan Get bukan method bawaan Java tetapi method yang didefiniskan sendiri oleh programmer (User defined function) Tujuannya agar setiap atribut menjadi imun terhadap akses secara langsung (immutable class)
Contoh Method SET & GET public Cubes { private int Panjang; private int Lebar; ...
public KubusBeraksi { Cubes myBox1 = new Cubes(); myBox1.setPanjang(10);
public void setPanjang(int P) { Panjang = P; } public int getPanjang() { return Panjang; } ... }
int H = myBox1.getPanjang(); // akses lewat variabel S.o.p(“Panjang = “ + H); // akses lsg dari fungsi get S.o.p(“Panjang = “ + myBox1.getPanjang()); }
Diagram Class BANK
private Saldo: double; Bank (double S); public AmbilUang(double S); public SimpanUang(double S); public cekSaldo(double S);
Contoh public class Bank { private double saldo; Bank(double S) { this.saldo = S; System.out.println(“Selamat Datang di Bank ABC“); this.cekSaldo(); } public void cekSaldo() { System.out.println(“Saldo saat ini Rp “+saldo); }
void AmbilUang(double S) { if (this.saldo-S>=0) { this.saldo -= S; System.out.println(“Ambil Uang Rp “+S); } else System.out.println(“Saldo tidak mencukupi”); this.cekSaldo(); } void SimpanUang(double S) { this.saldo += S; System.out.println(“Simpan Uang Rp “+S); this.cekSaldo(); }
Latihan Buat Diagram Class dan implementasi Program dalam bentuk Class dan penggunaan Kelas tersebut. Studi Kasus: Menghitung gaji harian PT. XYZ dengan ketentuan : • Gaji pokok karyawan Rp. 5000/jam • Bila karyawan bekerja lebih dari 7 jam/hari maka kelebihannya dihitung lembur yang besarnya 1.5 dari gaji pokok • Untuk karyawan yang bekerja 8 jam/hari atau lebih akan mendapat tambahan uang makan sebesar Rp. 7500 • Karyawan yang bekerja 9 jam/hari atau lebih akan mendapat uang transport lembur sebesar Rp. 10000
Input : NIP, Nama, Jumlah jam kerja Output : NIP, Nama, Gaji pokok, Lembur, Uang makan, Transport lembur , Take Home Pay (total gaji diterima)
Jumlah Total Pegawai dan Gaji Total Semua Pegawai
Diagram Class PEGAWAI
KELAS PEGAWAI
-Nama: string; -NIP: string; -gajiPokok, lembur, uangMakan, transport, totalGaji: double; -jumlahJamKerja: integer;
• fungsi setJamKerja() untuk mengakses (memberi nilai) atribut jumlahJamKerja;
+pegawai(Nama, NIP); +pegawai(Nama, NIP, jamKerja); +void setJamKerja(); +void hitungGajiHarian(); +void cetakPenghasilan();
• Business process perhitungan gaji dilakukan dalam fungsi hitungGajiHarian(), sekaligus untuk mengakses atribut lain. • Fungsi cetakPenghasilan() untuk menampilkan isi dari atribut-atribut yang ada. Ditampilkan dalam bentuk semacam tabel
public class Pegawai { private String Nama, NIP; private double gajiPokok, uangLembur, uangMakan, totalGaji;
uangTransport,
private jamKerja; private static double totalGajiPegawai = 0; public Pegawai(String No, String Nm, int J) { this.Nama = Nm; this.NIP = No; this.jamKerja = J; gajiPokok = uangLembur = … = totalGaji = 0; } public hitungGaji() { if (jamKerja <= 7) gajiPokok = jamKerja*5000;
else { gajiPokok = 7*5000; uangLembur = (jamKerja-7)*7500; } …
totalGaji = gajiPokok + uangLembur + uangMakan + uangTransport;
totalGajiPegawai += totalGaji;
QUIZ Apa yang dimaksud dengan KONSTRUKTOR? Apa yang dimaksud dengan OVERLOADING KONSTRUKTOR?
Apa yang dimaksud dengan ABSTRAKSI? Apa yang dimaksud dengan ENKAPSULASI
TUGAS Set Setiap Atribut dari kelas tersebut adalah private
Set setiap method dari kelas tersebut adalah public Selesaikan latihan sebelumnya, rampungkan sebagai sebuah tugas (Soal, Narasi Jawaban, Diagram Class, Source Code, Screenshot) Buat implementasi kelas Pegawai untuk kasus minimal 2 orang pegawai dengan jam kerja berbeda, masingmasing menggunakan konstruktor yang berbeda Deadline Tugas: Senin 7 Maret 2016
Referensi 1.
Sharon Zakhour et al, The Java Tutorial Fourth Edition, http://java.sun.com/docs/books/tutorial
2.
Cay Horstmann, Big Java: Earl Objects 5th Edition, John Wiley & Sons, 2013
3.
Deitel & Deitel, Java Howto Program 9th Edition, Prentice Hall, 2012
4.
Richard M. Reese, Oracle Certified Associate Java SE 7 Programmer Study Guide, Packt Publishing, 2012
5.
Walter Savitch, Absolute Java 5th Edition, Pearson Education, 2013
6.
Mark Allen Weiss, Data Structures and Algorithm Analysis in Java 3rd Edition, Pearson Education, 2012
7.
Anany Levitin, Introduction to the Design and Analysis of Algorithms 3rd Edition, Pearson Education, 2012
8.
Ying Bai, Practical Database Programming with Java, John Wiley & Sons, 2011 Slide presentasi ini dimodifikasi dari slide yang diperoleh dari website: romisatriowahono.net karya Bapak Romi Satrio Wahono
Diagram Class PEGAWAI -Nama: string; -NIP: string; -gajiPokok, lembur, uangMakan, transport, totalGaji: double; -jumlahJamKerja: integer; -jumlahPegawai: integer static; -totalGajiPegawai: double static; +pegawai(Nama, NIP); +pegawai(Nama, NIP, jamKerja); +void setJamKerja(); +void hitungGajiHarian(); +void cetakPenghasilan(); +getJumlahPegawai(); +getGajiTotalPegawai();
KELAS PEGAWAI
• fungsi setJamKerja() untuk mengakses (memberi nilai) atribut jumlahJamKerja; • Business process perhitungan gaji dilakukan dalam fungsi hitungGajiHarian(), sekaligus untuk mengakses atribut lain. • Fungsi cetakPenghasilan() untuk menampilkan isi dari atribut-atribut yang ada. Ditampilkan dalam bentuk semacam tabel
public class Pegawai { private String Nama, NIP; private double gajiPokok, uangLembur, uangMakan, totalGaji;
uangTransport,
private jamKerja; private static int JumlahPegawai = 0; private static double totalGajiPegawai = 0; public Pegawai(String No, String Nm, int J) { this.Nama = Nm; this.NIP = No; this.jamKerja = J; gajiPokok = uangLembur = … = totalGaji = 0; JumlahPegawai++; }
public hitungGaji() { if (jamKerja <= 7) gajiPokok = jamKerja*5000; else { gajiPokok = 7*5000; uangLembur = (jamKerja-7)*7500; } …
totalGaji = gajiPokok + uangLembur + uangMakan + uangTransport;
totalGajiPegawai += totalGaji;