PEMROGRAMAN LANJUT Sistem Informasi FILKOM UB Semester Genap 2016/2017
ENKAPSULASI Data Hiding
Dr. Eng. Herman Tolle, ST., MT Fakultas Ilmu Komputer, Universitas Brawijaya
Pemrograman Lanjut 1. 2. 3. 4. 5. 6. 7. 8.
Nama Matakuliah Kode/SKS Semester Kelas Program Studi Dosen Asisten Jadwal Kuliah
: Pemrograman Lanjut : CSD60022 / 5 (4-1) SKS : Genap :A : Teknologi Informasi –Universitas Brawijaya : Dr. Eng. Herman Tolle, ST., MT. : :
– Senin, 14.30 – 16.10, Ruang E1.2 (Teori) – Selasa, 07.00 – 8.40, Ruang A2.20 (Teori) – Rabu, 14.30 – 16.10, Ruang B1.8 (Praktikum)
Materi Pemrograman Lanjut 1. 2. 3. 4. 5. 6. 7. 8. 9.
Review Pemrograman Dasar Konsep OOP, Class dan object, Diagram UML Class, Fungsi Overloading dan Konstruktor, Enkapsulasi, Inheritance/pewarisan, Pemrograman Berorientasi Polymorphism Objek Interface & Abstract Class
Info Pertemuan Tanggal Ruang & Waktu Materi
: 7 Maret 2017 : A2.20, Jam 07.00 – 8.40 : Pengenalan Konsep Enkapsulasi
Tujuan Pembelajaran Setelah mengikuti materi ini, diharapkan • Mahasiswa dapat memahami konsep Abstraksi dan Enkapsulasi pada pemrograman berorientasi obyek (OOP) • Mahasiswa mampu membuat class dan instansiasi objek yang menerapkan konsep enkapsulasi
Kata Kunci / Keyword 1. 2. 3. 4. 5. 6. 7. 8.
Encapsulation | Enkapsulasi Abstraction | Abstraksi Fungsi GET dan Fungsi SET Instance Variable Access Modifier (Public dan Private) à Fields/Atribut Visibility Modifier (Public dan Private) à Methods Tipe Data (Primitive dan Reference) Immutable Object dan Class
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 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 • Tombol Ganti channel atau Volume pada Remote TV
• 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 Class Dalam Package Dalam Dalam yang Sama yang Sama SubClass Package Lain
private
ü
tanpa tanda
ü
ü
protected
ü
ü
ü
public
ü
ü
ü
ü
Encapsulation • Enkapsulasi data juga 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
BANK
private Saldo: double;
- Saldo: double;
Bank (double S); public AmbilUang(double S); public SimpanUang(double S); public cekSaldo(double S);
+Bank (double S); +AmbilUang(double S); +SimpanUang(double S); +cekSaldo(double S);
Contoh
public class Bank { private double saldo; Bank(double S) { this.saldo = S; S.o.println(“Selamat Datang di Bank ABC“); this.cekSaldo(); } public void cekSaldo() { S.o.p(“Saldo saat ini Rp “+saldo); } }
void AmbilUang(double S) { if (this.saldo-S>=0) { this.saldo -= S; S.o.p(“Ambil Uang Rp “+S); } else S.o.p(“Saldo tidak mencukupi”); this.cekSaldo(); } void SimpanUang(double S) { this.saldo += S; S.o.p(“Simpan Uang Rp “+S); this.cekSaldo(); }
Studi Kasus
public class Circle { private double radius; private String color;
Circle.java
public Circle() { // 1st Constructor radius = 10; color = “RED”; } public Circle(double radius) { // 2nd Constructor this.radius = radius; color = “RED”; } public Circle(double radius, String color) { // 3rd Constructor this.radius = radius; this.color = color; }
Circle.java // Public getter and setter for private variables public double getRadius() { return radius; } public void setRadius(double radius) { this.radius = radius; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } // toString() to provide a short description of this instance public String toString() { return "Circle with radius = " + radius + " and color of " + color; } // Public methods public double getArea() { return radius*radius*Math.PI; } }
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. 2000/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. 3500 – Karyawan yang bekerja 9 jam/hari atau lebih akan mendapat uang transport lembur sebesar Rp. 4000
• Input : NIP, Nama, Jumlah jam kerja • Output : NIP, Nama, Gaji pokok, Lembur, Uang makan, Transport lembur , Take Home Pay (total gaji diterima)
Diagram Class PEGAWAI Nama: string; NIP: string; gajiPokok, lembur, uangMakan, transport: 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
TUGAS LATIHAN • Set Setiap Atribut dari kelas tersebut adalah private • Set setiap method dari kelas tersebut adalah public • Selesaikan latihan sebelumnya, rampungkan sebagai sebuah tugas (Soal, Jawaban, Diagram Class, Source Code, Screenshot) • Buat implementasi class Pegawai untuk kasus minimal 2 orang pegawai dengan jam kerja berbeda
Referensi
Terima Kasih