Modul 3 PBO Contrusctor, Encapsulation, Inheritance, Overriding
Modul 3 PBO Contrusctor, Encapsulation, Inheritance, Overriding
0
13 Februari 2024
DISUSUN OLEH:
TAUFIQ RAMADHAN
SUTRISNO ADIT PRATAMA
DIAUDIT OLEH:
Ir. Galih Wasis Wicaksono, S.Kom, M.Cs.
TUJUAN
1. Mahasiswa mampu membangun aplikasi sederhana dengan menerapkan Constructor
2. Mahasiswa mampu membangun aplikasi sederhana dengan menerapkan Encapsulation
3. Mahasiswa mampu membangun aplikasi sederhana dengan menerapkan Overriding
4. Mahasiswa mampu membangun aplikasi sederhana dengan menerapkan Super keywords
TARGET MODUL
1. Mahasiswa mampu memahami konsep Constructor
2. Mahasiswa mampu memahami konsep Encapsulation
3. Mahasiswa mampu memahami konsep Overriding
4. Mahasiswa mampu memahami konsep Super keywords
5. Mahasiswa mampu memahami dan menerapkan Object Oriented Programming.
PERSIAPAN
1. Java Development Kit.
2. Text Editor / IDE (Visual Studio Code, Netbeans, Intellij IDEA, atau yang lainnya).
KEYWORDS
● Pemrograman Berorientasi Objek
● Encapsulation
● OOP
● Access Modifier
● Overriding
● super keywords
TEORI
● Constructor
Constructor merupakan suatu method yang akan memberikan nilai awal pada saat
suatu objek dibuat. Pada saat program dijalankan, constructor akan langsung memberikan
nilai awal pada saat membuat suatu instance objek. Pada saat kita bekerja dengan
contructor, ada beberapa hal yang perlu diperhatikan, yaitu:
1. Nama constructor harus sama dengan nama class
2. Tidak ada return type yang diberikan ke dalam constructor signature.
3. Tidak ada return statement, di dalam tubuh constructor.
Contoh ketika kita membuat sebuah class Mobil dan menggunakan constructor:
public class Mobil {
String nama;
int speed;
Mobil(){
System.out.println("Method constructor dieksekusi");
}
}
Pada contoh di atas constructor ditulis seperti ini:
Mobil(){
System.out.println("Method constructor dieksekusi");
}
Mari kita coba untuk membuat objek baru dari class Mobil di Main class:
Sehingga sekarang kode pada Main class kita menjadi seperti ini:
public class Main{
public static void main(String[] args){
Mobil mobil = new Mobil();
}
}
Ketika dijalankan akan menampilkan output berikut:
Method constructor akan dieksekusi ketika sebuah instance objek baru dibuat, bahkan
tanpa memanggil method itu. Cara penulisan ketika membuat sebuah contructor class ada
2 cara, yaitu:
1. Menulis method dengan nama yang sama pada class
class Mobil {
String nama;
int speed;
Mobil(){
System.out.println("Method constructor dieksekusi");
}
}
2. Menggunakan modifier public
class Mobil {
String nama;
int speed;
public Mobil(){
System.out.println("Method constructor dieksekusi");
}
}
● Constructor dengan Parameter
Setelah mengetahui apa itu constructor, kita akan bertanya-tanya untuk apa fungsi dari
constructor itu sendiri? Jawabannya ialah dengan sebuah contoh kasus, misalnya kita
memiliki sebuah data mobil 5 buah dengan data setiap mobil memiliki nama dan speed
yang berbeda-beda dan ingin membuat sebuah objek mobil satu-satu. Mungkin kode yang
kita buat akan seperti ini:
- pada class Mobil
class Mobil {
String nama;
int speed;
public Mobil(){
Fungsi dari access modifier pada Java adalah untuk membatasi scope dari sebuah
class, constructor, variabel, method, atau anggota data lainnya yang terdapat dalam
suatu program Java.
public Mobil(){
System.out.println("ini constructor");
}
}
Kode yang berwarna merah dan bergaris di atas adalah modifier. Modifier akan
digunakan untuk menentukan akses atribut, method, dan class.
a. Public
Memberikan hak akses kepada atribut atau method agar bisa diakses oleh
siapapun (property atau class lain diluar class yang bersangkutan), artinya method
atau atribut yang ada di class A dapat diakses oleh siapapun baik itu class A, class B
dan seterusnya. Contoh:
package com.praktikum;
class Mobil {
private String name;
}
}
Pada class Mobil di atas terdapat atribut name dan method changeName(). Kedua
hal tersebut kita berikan sebuah modifier public, artinya keduanya akan bisa diakses
dari mana saja. Namun, class Mobil tidak kita berikan sebuah modifier. Maka yang
akan terjadi adalah class tersebut tidak akan bisa diimport atau diakses dari luar
package.
Class Mobil berada di package com.praktikum, lalu kita coba untuk akses dari
package com.main, maka akan terjadi error seperti gambar di atas. Cara untuk
memperbaikinya ialah dengan menambahkan modifier public pada class Mobil. Maka
kode pada class Mobil akan menjadi seperti ini:
package com.praktikum;
dan class yang meng extends class A. Namun harus dipahami class lain yang berada
dalam satu package dengan class A mampu mengakses tipe data protected,
sedangkan yang tidak mampu mengakses adalah class - class yang berada diluar
package class A. Untuk dapat mengaksesnya, class yang berada diluar package class A
harus meng extends class A. Terkhususkan modifier protected hanya boleh digunakan
pada atribut dan method saja, tidak bisa diberikan kepada class, enum, dan interface.
Contoh class Mobil memiliki turunan yaitu class Honda:
package com.praktikum;
import com.praktikum.Mobil;
c. Private
Memberikan hak akses hanya pada class itu sendiri, artinya apa-apa saja yang
ada di dalam class A baik itu method apapun atribut hanya bisa diakses oleh class A
saja, class lain tidak bisa mengaksesnya. Modifier private juga tidak bisa diberikan
kepada class, enum, dan interface. Modifier private hanya diberikan kepada attribut
dan method class saja. Contoh:
package com.praktikum;
return maxSpeed;
}
Tidak semua properti dan metode dari class induk akan diwariskan. Properti dan
metode dengan hak akses private tidak akan diwariskan kepada class anak. Hanya
properti dan metode dengan hak akses protected dan public saja yang dapat diakses dari
class anak.
Suatu class yang memiliki turunan disebut sebagai parent class atau base class.
Sedangkan class turunan itu sendiri sering disebut sebagai subclass atau child class.
Sebuah subclass dapat mewarisi semua yang dimiliki oleh parent class.
Karena sebuah subclass dapat mewarisi semua yang dimiliki oleh parent class-nya,
maka member dari subclass terdiri dari apa yang dimilikinya sendiri dan juga apa yang
diwarisi dari class parent-nya.
Secara keseluruhan, dapat dikatakan bahwa suatu subclass hanya memperluas
(extend) parent class-nya. Alasan kenapa harus menggunakan inheritance, misalkan pada
sebuah mobil, kita akan membuat class-class mobil yang lebih spesifik. Lalu kita membuat
kode untuk masing-masing class seperti ini:
File: Honda.java
package com.praktikum;
public class Honda {
public String name;
Pada diagram di atas terlihat bahwa atribut name, method bergerakMaju() dan
berbelok() memiliki kesamaan pada class Honda, Toyota, dan Nissan. Setelah kita
menggunakan inheritance dengan menyatukan atribut dan method yang memiliki cara
kerja yang sama ke dalam satu class yaitu class Mobil, maka bentuk diagramnya akan
menjadi seperti ini:
Class Mobil adalah class induk atau parent class yang memiliki class anak atau child
class yaitu Honda, Toyota, dan Nissan. Apapun atribut yang ada di parent class akan
dimiliki juga oleh class anak. Bentuk kode class Mobil seperti ini:
package com.praktikum;
public class Mobil {
private String name;
}
File: Toyota.java
package com.praktikum;
public class Toyota extends Mobil{
}
File: Nissan.java
package com.praktikum;
public class Nissan extends Mobil{
}
Terlihat pada class Honda, Toyota, Nissan body class-nya kosong, pada child class
kita bisa membiarkan isi body kosong atau diberi isi sesuai kebutuhan. Untuk cara
membuat objek dari masing-masing class, kita bisa membuatnya seperti ini:
File: Main.java
Mobil mobil = new Mobil();
Honda honda = new Honda();
Toyota toyota = new Toyota();
Nissan nissan = new Nissan();
Contoh kasus lain ialah class Hero, misalnya class Hero yang memiliki child class
berupa Superman, Spiderman, Deadpool. Ketiga child class memiliki kesamaan nama
Hero, melindungi masyarakat. Tetapi masing-masing child class memiliki perbedaan yaitu
untuk Superman bisa terbang, Spiderman bisa memanjat di tebing, Deadpool bisa
penyembuhan diri. Diagram dari parent class dan child class bisa berbentuk seperti ini:
superman.setName("Cristopher");
deadpool.setName("Ryan Reynolds");
Child class
class childClass extends parentClass{
@Override
public void namaMethod(){
System.out.println("Ini method override");
}
}
Contoh kasus penggunaan inheritance ialah, pada class Hero di atas terdapat
method melindungi() dan kita ingin mengubah isi method-nya pada class child Superman
menjadi “melindungi masyarakat bumi dari serangan monster”. Method melindungi() di
class Hero tidak perlu diubah apa-apa dan tetap seperti ini:
public class Hero {
private String name;
@Override
public void melindungi(){
System.out.println(getName() + " melindungi masyarakat bumi dari
serangan monster");
}
}
Untuk mengetahui output dari perubahannya bisa kita panggil di Main class dengan
cara yang sama ketika memanggil method biasa.
public class Main {
public static void main(String[] args) {
// pembuatan object
Spiderman spiderman = new Spiderman();
Superman superman = new Superman();
Deadpool deadpool = new Deadpool();
Hal ini bisa terjadi karena class Superman sudah melakukan override pada method
melindungi(), jadi isi dari method sudah tidak lagi sama dengan isi method pada parent
class. Berbeda dengan class Spiderman dan Deadpool yang tidak melakukan override
maka isinya akan sama dengan method melindungi() pada parent class.
● Super Keywords
Keyword super merupakan keyword yang digunakan untuk mengakses atribut
ataupun method parentclass dari child class. Di java, keyword ini dapat digunakan untuk
melakukan beberapa hal, seperti berikut:
@Override
public void melindungi(){
System.out.println(getName() + " melindungi masyarakat bumi dari
serangan monster");
}
}
Terlihat pada child class Superman, Spiderman, dan Deadpool juga diwajibkan
untuk memiliki constructor hal ini disebabkan parent class memiliki constructor. Tetapi di
dalam constructor child class terpada super(name, umur); yang dipanggil, maksud dari
super() adalah memanggil method pada parent class yang di mana method itu adalah
constructor dari class Hero. Apakah super() hanya bisa digunakan pada method saja?
Jawabannya tidak, bisa juga digunakan untuk pemanggilan variabel yang ada di parent
class melalui child class. Contohnya pada class Deadpool.java kita ubah menjadi seperti
ini:
// coba panggil
System.out.println(superman.getName());
System.out.println(spiderman.getName());
System.out.println(deadpool.getName());
}
}
● this Keywords
Sejauh materi ini kita sudah banyak belajar materi tentang constructor, encapsulation,
inheritance, overriding, super. Mungkin di pertengahan atau di awal materi muncul sebuah
pertanyaan apa yang dimaksud dengan keywords this? Jawabannya keywords this biasanya
digunakan untuk mengisi variabel class atau mengakses variabel yang ada di class tersebut.
Contoh:
public class Hero {
private String name;
public int umur;
Kedua hal ini berbeda untuk private String name dimiliki oleh class sedangkan String name
yang ada di parameter constructor itu adalah parameter yang dimiliki oleh constructor. Pada
constructor this.name = name memiliki sebuah arti bahwa atribut name yang awalnya kosong
diisi oleh parameter name yang diisi oleh user.
Hal ini juga berlaku pada method setName(), karena method ini adalah setter atau
method yang digunakan untuk inisialisasi sebuah nilai private, maka this.name = name juga
memiliki arti atribut name pada class sekarang diisi oleh parameter name yang dimana
pengisiannya dilakukan ketika pemanggilan method setter.
CODELAB
Menghitung Volume
Silahkan pull codelab berikut: https://github.com/radan775/codelab_pbo_24.git,
perbaiki kode program ini agar bisa digunakan untuk menghitung volume dan luas permukaan
bangun ruang tabung, kubus, dan balok. Masing-masing bangun ruang memiliki parent class
yang sama yaitu class BangunRaung dan class ini memiliki sebuah constructor untuk mengisi
nama, buatlah juga setter dan getter terhadap atribut nama.
Class BangunRuang memiliki 3 method selain setter dan getter yaitu method
inputNilai(), luasPermukaan(), volume() yang masing-masing method nantinya akan dilakukan
overriding terhadap setiap child class bangun ruang dengan rumus perhitungan masing-
masing. Untuk masing-masing child class akan memiliki sebuah constructor yang di dalamnya
melakukan pemanggilan super() terhadap constructor parent class.
Berikut penjelasan mengenai 3 method di atas:
- inputNilai() digunakan untuk menginputkan atribut pada masing-masing class
- luasPermukaan() digunakan untuk menghitung luas permukaan
- volume() digunakan untuk menghitung volume
Pada main class buat semua object untuk masing-masing class, lalu panggil method
inputNilai(), luasPermukaan(), volume(). Berikut adalah diagram untuk program ini:
TUGAS
Melanjutkan tugas pada modul 2 sebelumnya, pada tugas ini tambahkan class User
yang akan menjadi parent class dari class Admin dan Student. Lalu tambahkan juga class Book
yang akan menjadi parent class dari class HistoryBook, StoryBook, dan TextBook.
Pada class User terdapat method displayBooks() yang digunakan untuk menampilkan
daftar buku yang ada di perpustakaan. Pada class Student terdapat atribut name, nim,
fakultas, prodi, array borrowedBooks. Dan untuk methodnya sebagai berikut:
- Student(name, nim, faculty, programStudi) sebuah method constructor yang
digunakan untuk melakukan awal inisialisasi terhadap name, faculty, nim dan
programStudi dengan memanfaatkan this keywords
- displayInfo() digunakan untuk menampilkan data diri mahasiswa yang login
- isAdmin() adalah method yang digunakan untuk memverifikasi apakah username dan
password yang digunakan login admin termasuk kepada kredensial admin.
- generateId() digunakan untuk men-generate sebuah unikId, lihat di contoh output
program.
Pada class Book terdapat atribut bookId, title, author, category, stock, dan duration.
Buat sebuah constructor pada class Book disertai dengan parameter bookId, title, author,
category. Setelah itu buat setter dan getter untuk setiap atribut.
Pada class HistoryBook buat extends dari Book, lalu buat sebuah constructor dengan
memanfaatkan keywords super ke class Book. Untuk class StoryBook dan TextBook isinya
sama dengan class HistoryBook.
Berikut untuk diagram pada program:
Contoh Output:
===== Library System =====
1. Login as Student
2. Login as Admin
3. Exit
Choose option (1-3): 1
5. Logout
Choose option (1-5): 1
Enter student name: susanto
Enter student NIM: 201910370311000
Enter student faculty: Fikes
Enter student program: kesehatan
Student successfully registered.
===== Admin Menu =====
1. Add Student
2. Add Book
3. Display Registered Students
4. Display Available Books
5. Logout
Choose option (1-5): 2
Select book category:
1. Story Book
2. History Book
3. Text Book
Choose category (1-3): 2
Enter book title: sebuah cerita
Enter author: manusia
Enter the stock: 6
Book successfully added to the library.
===== Admin Menu =====
1. Add Student
2. Add Book
3. Display Registered Students
4. Display Available Books
5. Logout
Choose option (1-5): 4
=================================================================================
|| No.|| Id buku || Nama Buku || Author || Category || Stock||
=================================================================================
|| 1 || 388c-e681-9152 || title || author || Sejarah || 4 ||
|| 2 || ed90-be30-5cdb || title || author || Cerita || 0 ||
|| 3 || d95e-0c4a-9523 || title || author || Novel || 1 ||
|| 4 || 3f10-2fb4-b478 || sebuah cerita || manusia || Sejarah || 6 ||
=================================================================================
===== Admin Menu =====
1. Add Student
2. Add Book
3. Display Registered Students
4. Display Available Books
5. Logout
Choose option (1-5): 3
List of Registered Students:
Name: radan
Faculty: Teknik
NIM: 202210370311208
Program: Informatika
Name: susanto
Faculty: Fikes
NIM: 201910370311000
Program: kesehatan
program yang akan dibuat. Improvisasi terhadap program tidak masalah dengan sebuah
syarat tidak jauh dari bentuk program.
RUBRIK PENILAIAN
Codelab 20
Tugas Modul 35
Pemahaman 45
Total 100