Modul Oop
Modul Oop
Pewarisan/ Inherintance adalah salah satu konsep penting orientasi objek dan
mempunyai dampak langsung pada cara merancang dan menulis class. Inheritance
adalah proses penciptaan class baru dengan mewarisi karakteristik class yang telah
ada, ditambah karakteristik unik class baru tersebut. Inheritance adalah mekanisme
ampuh yang memungkinkan sebuah class untuk mewarisi fungsionalitas class yang
telah ada. Untuk menciptakan class baru, kita hanya perlu menspesifikasikan cara
class baru itu berbeda dengan class yang sudah ada sebelumnya. Inheritance
merupakan mekanisme yang ampuh dan alami untuk mengorganisasikan sebuah
program.
Subclass mewarisi semua method dan variable dari superclassnya. Secara praktis
berarti jika superclass telah mendefinisikan perilaku yang diperlukan maka di dalam
class yang baru tidak perlu mendifinisikan kembali perilaku tersebut, cukup dengan
membuat subclass dari superclass yang dimaksud tersebut. Dan secara otomatis
superclass akan memberikan perilakunya kepada subclass pewarisnya. Dengan
begitu subclass akan menjadi gabungan dari seluruh fitur class-class di atasnya pada
hierarki pewarisan, ditambah dengan fitur unik yang dimilikinya sendiri.
Java hanya memungkinkan single inheritance (pewarisan tunggal). Dan hal tersebut
dilakukan dengan membuat class baru dengan keyword extends, dan bila class tidak
dimaksudkan untuk diwarisi maka dapat menggunakan keyword final.
3.1.2. Polimorphism
Polimorphism merupakan fitur yang ada karena interaksi antara konsep pewarisan
dan dynamic binding, polimorphism merupakan fitur penting dan ampuh dalam
menerapkan pemrograman berorientasi objek. Fitur polimorphism meruapkaan
pembeda dari pemrograman berorientasi objek dan primitive. Polimorphism
memungkinkan kita mengenali dan mengeksploitasi kesamaan-kesamaan di antara
class-class objek berbeda. Ketika kita mengenali bahwa beberapa jenis objek dapat
menanggapi pesan yang sama, maka kita mengenali bahwa tidak ada pembeda
antara nama pesan dan method.
Bagian eksternal objek sering disebut dengan antarmuka objek (object interface)
karena berlaku sebagai antarmuka objek terhadap objek lain. Karena objek lain harus
berkomunikasi dengan objek itu hanya melalui antarmuka maka bagian internal objek
dapat dilindungi dari gangguan luar.
Berikut ini kita akan membahas contoh program yang menggambarkan class Orang.
Orang.java
1 package orang;
2
3 public class Orang {
4 //fields
5 private String nama;
Class orang merupakan super-class, atau class yang berada di
6 private int umur; hierarki tertinggi dari rangkaian class-class yang dicontohkan pada
7 private String alamat; BAB ini. Sehingga, class orang memiliki field-field yang
8 private String telp; mendefinisikan kondisi global yang dimiliki, seperti orang pasti
9 memiliki nama, umur, alamat dan nomor telp.
10 //constructor
11 public Orang (String n, int u, String a, String t){
12 nama = n;
Baris 11-16 merupakan sebuah constructor
13 umur = u;
atau pembentuk, digunakan untuk
14 alamat = a;
inisialisasi atau persiapan pembentukan
15 telp = t; objek. Constructor umumnya ditulis dengan
16 } nama sesuai classnya
17
18 //methods - accessor
19 public String getNama(){
20 return nama; Baris 19-31 merupakan sebuah method (accessor) yang
21 } digunakan untuk mengakses objek. Karena sifatnya
22
mengembalikan/me-return data, maka deklarasi methodnya
menggunakan tipe data yang sesuai dengan data yang akan
23 public int getUmur(){
di-return
24 return umur;
25 }
26 public String getAlamat(){
25 return alamat;
28 }
29 public String getTelp(){
30 return telp;
31 }
32
33 //void method - manipulator
34 public void setNama(String namabaru){
Baris 34-45 merupakan method untuk
35 nama = namabaru;
memanipulasi objek. Karena sifatnya yang
36 } memanipulasi, maka kita gunakan voidpada
37 public void setUmur(int umurbaru){ deklarasinya (void tidak mereturn
38 umur = umurbaru; nilai/data). Dan pada method ini kita dapat
39 } merubah atau memodifikasi nilai dari suatu
40 public void setAlamat(String alamatbaru){ objek
41 alamat = alamatbaru;
42 }
43 public void setTelp(String no_telp){ Baris 48-51 merupakan method accessor.
44 telp = no_telp; Pada method ini kita dapat menuliskan
45 } perintah untuk mereturn semua data objek
yang berada di class orang. Disini kita dapat
46
memanggil method yang berhubungan
47 //
dengan objek tersebut.
48 public String cetakdata(){
49 return getNama()+ " "+getUmur()+ " "+ getAlamat() + " "+getTelp();
50 }
51 }
Setelah melihat script code dari class Orang di atas, kita mengetahui bahwa orang
secara global memiliki nama, umur, alamat tinggal dan nomor telp. Pada kondisi
nyata, orang ini dapat memiliki kondisi lainnya, seperti ia memiliki keluarga, bekerja
pada sebuah perusahaan atau ia sekolah (belajar), memiliki hobi, memiliki kendaraan
dan lainnya. Dengan adanya kondisi yang berbeda-beda, maka kita dapat membuat
class-class baru yang dapat mendefinisikan perbedaan keadaan tersebut, akan tetapi
tetap memiliki keadaan yang telah didefinisikan pada class orang. Disitulah prinsip
inheritance kemudian digunakan, yaitu membuat class baru yang merupakan sub-
class dari super-class, memiliki (mewarisi) keadaan yang sama, tetapi memiliki
keunikan yang menjadi pembeda dari super-classnya.
Sebagai contoh kita memiliki class Mahasiswa, dimana mahasiswa ini merupakan
Orang. Dengan melihat kasus ini, dari kondisi yang telah dipaparkan pada class
Orang, kita akan membentuk class Mahasiswa, dimana class mahasiswa ini:
a. Menghapus field
b. Menghapus method.
Sehingga, dengan adanya ketentuan ini kita dapat membuat constructor khusus pada
class Mahasiswa sekaligus menetapkan fieldnya. Perhatikan scriptcode berikut ini:
Mahasiswa.java
1 package orang;
Karena class Mahasiswa ini akan membawa atau mewarisi
2 class Mahasiswa extends Orang{
keadaan maka kita gunakan extends pada deklarasi class
3 //field yang berhubungan
4 //dengan mahasiswa
5 private String universitas;
Baris ke 5-8 merupakan field yang membedakan kondisi
6 private String fakultas;
pada class orang dan mahasiswa. Keempat field ini adalah
7 private String prodi; field yang hanya dimiliki oleh class mahasiswa (keunikan)
8 private double ipk;
9
10 //constructor
11 //disini anda dapat melihat bahwa beberapa
12 // parameter telah dimiliki oleh class Orang
13 public Mahasiswa(String n, int u, String a, String t, String univ, String f,
String p, double i){
14 //deklarasikan bahwa variabel n,u,a dan t Baris ke 16 adalah pernyataan
15 //adalah turunan dari super class (class Orang) bahwa variabel n, u, a, dan t
16 super(n, u, a, t); merupakan variabel yang
diturunkan/ diwarisi dari class
17 //dan ini adalah pembeda yang dimiliki
orang (seper-class)
18 //oleh class Mahasiswa ini
19 universitas = univ;
20 fakultas = f;
21 prodi = p;
22 ipk = i;
23 }
24 //method
25 public String getUniv(){
Baris 25-36 merupakan method accessor
26 return universitas;
untuk mengakses objek-objek yang dimiliki
25 } oleh class mahasiswa
28 public String getFak(){
29 return fakultas;
30 }
31 public String getProdi(){
32 return prodi;
33 }
34 public double getIpk(){
35 return ipk;
36 }
37 //method
38 public void setUniv(String namaUniversitas){
39 universitas = namaUniversitas;
40 } Baris 38-49 merupakan method-
41 public void setFak(String namafak){ mutator yang digunakan untuk
memperbaharui nilai dari objek yang
42 fakultas = namafak;
dimiliki oleh class mahasiswa
43 }
44 public void setProdi(String namaprodi){
45 prodi = namaprodi;
46 }
47 public void setIPK(double ipkmahasiswa){
48 ipk = ipkmahasiswa;
@Override berarti menimpa. Baris ke 51-
49 }
55 merupakan method yang digunakan
50 //----------------------------------------- untuk menimpa method cetakdata() pada
51 @Override class orang
52 public String cetakdata(){
53 return super.getNama() + getUniv() + " " + getFak() + " - "+getProdi() + ", "
54 + getIpk();
}
55 }
Dari 2 script code pada class Orang dan class Mahasiswa kita memiliki method yang
sama, yaitu cetakdata(), berikut adalah potongan script code dari class Orang:
Method override (@override boleh dituliskan boleh tidak) digunakan untuk mengganti
atau menimpa method yang berada pada super-class. Dimana, method yang berada
pada sub-class atau class turunan/warisan harus memiliki tipe return yang sama dan
tidak boleh menambahkan pengecualian ke dalam daftar return. Class turunan juga
tidak boleh mengurangi visibilitas, karena itu akan melanggar hubungan Mahasiswa
adalah Orang. Akan tetapi, class turunan diperbolehkan untuk mengganti perintah di
dalam method secara keseluruhan maupun partial.
Maka pada class mahasiswa diperbolehkan menggunakan method pada class Orang
dengan cara menambahkan super pada potongan script codenya seperti ini
Dimana dengan menggunakan super menyatakan bahwa method ini akan mereturn
method getnama() dari super class dan ditambahkan dengan return dari method-
method di dalam class mahasiswa itu sendiri.
Dari 2 script code yang telah dipaparkan sebelumnya, tidak ada satu classpun yang
memiliki main method. Dimana seperti yang telah kita pelajari sebelumnya bahwa
main method adalah method utama yang akan dijalankan pertama kali saat program
dicompile.
Sehingga agar kedua class dapat dijalankan, maka kita perlu membentuk class yang
baru, sebut saja class DemoOrang. Berikut adalah script codenya.
DemoOrang.java
1 package orang;
2
3 public class DemoOrang {
4 public static void main(String[] args) {
5
6 //membuat/mendeklarasikan object
7 Orang[] o = new Orang[2];
8
9 //mendefinisikan object
10 o[0] = new Orang("Ario", 54, "Cibinong", "087912345678");
11 o[1] = new Mahasiswa("Paijo", 38, "Cariu", "085912345678", "Institut Digital
Bisnis Indonesia", "Fakultas Komputer", "Teknik Informatika", 4.0);
12
13 cetakDaftarOrang(o);
14 }
15
16 public static void cetakDaftarOrang(Orang[] arr){
17 for (int i = 0; i < arr.length; i++){
18 System.out.println(i +". "+ arr[i].cetakdata());
19 }
20 }
21
22 }
Dari script code class DemoOrang anda dapat melihat bahwa pada baris ke 7 telah
dibentuk variabel o yang menyatakan objek Orang. Dimana o merupakan sebuah
array yang dapat menyimpan sebanyak 2 data. Data yang akan disimpan pada o diisi
melalui perintah pada baris 10 dan 11, data pertama o (index ke-0) merupakan data
objek Orang, dan data kedua o (index ke-1) merupakan data objek mahasiswa. Dari
sini, kita dapat melihat bahwa 4 nilai pertama pada data objek mahasiswa memiliki
keadaan yang sama dengan data objek Orang, yaitu berisi nilai nama, umur, alamat
dan nomor telp. Sedangkan nilai sisanya berisi nilai objek yang dimiliki secara khusus
oleh Mahasiswa.
1. Weiss, Mark Allen.”Data Structures & Problem Solving Using Java: Fourth
Edition”. Pearson: 2010