0% menganggap dokumen ini bermanfaat (0 suara)
21 tayangan

Modul Oop

Modul 3 membahas pendekatan berorientasi objek dalam pemrograman. Class Orang digunakan sebagai contoh untuk mendemonstrasikan konsep-konsep seperti encapsulation, inheritance dan polymorphism. Class Orang memiliki field-field untuk menyimpan informasi seperti nama, umur, alamat dan nomor telepon, serta method-method untuk mengakses dan memanipulasi informasi tersebut.

Diunggah oleh

Ahmad Rifai
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
21 tayangan

Modul Oop

Modul 3 membahas pendekatan berorientasi objek dalam pemrograman. Class Orang digunakan sebagai contoh untuk mendemonstrasikan konsep-konsep seperti encapsulation, inheritance dan polymorphism. Class Orang memiliki field-field untuk menyimpan informasi seperti nama, umur, alamat dan nomor telepon, serta method-method untuk mengakses dan memanipulasi informasi tersebut.

Diunggah oleh

Ahmad Rifai
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 10

MODUL 3

PENDEKATAN BERORIENTASI OBJEK

3.1. Konsep-konsep Penting Pendekatan Berorientasi Objek

Pemrograman berorientasi objek muncul sebagai paradigma dominan pada


pertengahan 1990-an. Inti dari pemrograman berorientasi objek adalah objek. Objek
adalah tipe data yang memiliki struktur dan status. Setiap objek mendefinisikan
operasi yang dapat mengakses atau memanipulasi keadaan itu. Di dalam java sebuah
file objek dibedakan dari tipe primitif, tetapi ini adalah fitur khusus Java bukan
paradigma berorientasi objek. Selain melakukan operasi umum, di dalam java kita
juga dapat melakukan hal berikut:

a. Membuat objek baru, mungkin dengan inisialisasi


b. Menyalin atau menguji equalitas (kesamaan/ kesetaraan)
c. Melakukan I / O pada objek tersebut

Tujuan penting dari pemrograman berorientasi objek adalah untuk mendukung


penggunaan kembali script code. Sama seperti seorang designer yang menggunakan
komponen berulang kali dalam desain mereka, programmer harus dapat
menggunakan kembali objek dibanding menuliskannya kembali secara berulang-
ulang.

Bahasa pemrograman berorientasi objek menyediakan beberapa mekanisme untuk


mendukung tujuan ini. Salah satunya adalah penggunaan kode generik. Jika
implementasinya identik kecuali untuk tipe dasar objek, tidak perlu menulis ulang kode
sepenuhnya: Sebagai gantinya dengan menuliskan kode secara umum sehingga
berfungsi untuk semua tipe. Misalnya, logika yang digunakan untuk mengurutkan
objek array tidak bergantung pada jenis objek yang diurutkan, sehingga algoritma
umum dapat digunakan.
3.1.1. Pewarisan (Inheritance)

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.

Dengan menggunakan inheritance, dimungkinkan penciptaan klasifikasi yang


berjenjang (hierarki). Dan dengan menggunakan inheritance kita dapat menciptakan
class umum yang mendefinisikan perilaku umum item-item yang saling berhubungan.
Class ini kemudian dapat diwarisi class-class lain. Class yang lebih spesifik
menambahkan hal-hal yang unik di classnya 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 konsep pokok orientasi objek. Polimorphism berarti


mempunyai banyak bentuk. Dua objek atau lebih dikatakan sebagai polimorphic bila
objek-objek itu mempunyai interface yang identik namun mempunyai perilaku yang
berbeda-beda. Polimorphism berupa satu nama tunggal dan dapat menyatakan objek
class-class berbeda yang terhubung dengan superclass yang umum di antara class-
class itu. Sembarang objek yang ditandai dengan nama ini dapat menanggapi
sekumpulan operasi yang sama.

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.

3.1.3. Pengkapsulan (Encapsulation)

Encapsulation adalan proses pemaketan data bersama method-methodnya. Manfaat


utama pengkapsulan adalah menyembunyikan rincian-rincian implementasi dari
pemakai. Bagian internal objek mempunyai penampakan yang terbatas dibanding
dengan bagian eksternal objek. Penyusunan seperti ini dimaksudkan untuk menjaga
bagian internal dari pengaksesan eksternal yang tidak diinginkan.

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.

Encapsulation mmiliki dua manfaat utama bagi pemrograman yaitu:

1. Penyembunyian informasi: hal ini mengacu pada perlindungan implementasi


internal objek. Objek disusun dari public interface dan bagian private yang
merupakan kombinasi data dan metode internal. Manfaat utama ialah bagian
internall dapat berubah tanpa mempengaruhi bagian-bagian program yang lain.
2. Modularitas: berarti objek dapat dikelola secara independen. Karena kode
sumber bagian bagian internal objek dikelola secara terpisah dari interface,
maka kita dapat secara bebas melakukan modifikasi yang tidak menyebabkan
masalah pada bagian-bagian lain dari sistem. Manfaat ini mempermudah
mendistribusikan objek-objek di dalam sistem.

Encapsulation pada java dilakuka dengan pembentukan class-class, yaitu keyword


class. Sedangkan penyembunyian informasi dilakukan dengan penyembunyian
dilakukan dengan pengendalian terhadap pengaksesan pembentuk class dengan
keyword-keyword untuk kendali pengaksesan default, private, protected dan public.
Penyembunyian informasi dilakukan dengan menerapkan kendali pengakses private
atau protected pada elemen data.

3.2. Contoh Program

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. Dapat menambahkan universitas tempat ia belajar dan informasi lainnya


b. Dapat menambahkan method baru, seperti getUniversitas,
setUniversitas dan lainnya
c. Juga dapat menimpa method yang berada pada superclass untuk disesuaikan
dengan informasi field pada classnya, misalnya method cetakdata()
Sedangkan sub-class mahasiswa ini tidak dapat:

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 }

3.2.1. Method Override (Overriding Method)

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:

Potongan script - Orang.java


47 //...
48 public String cetakdata(){
49 return getNama()+ " "+getUmur()+ " "+ getAlamat() + " "+getTelp();
50 }
51 //...

Dan pada class mahasiswa adalah sebagai berikut:

Potongan script - Mahasiswa.java


51 //...
52 @Override
53 public String cetakdata(){
54 return super.getNama() + getUniv() + " " + getFak() + " - "+getProdi() + ", "
+ getIpk();
55 }
56 //...

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.

Misalnya pada class orang method cetakdata() melakukan

return getNama()+ " "+getUmur()+ " "+ getAlamat() + " "+getTelp();,

Maka pada class mahasiswa diperbolehkan menggunakan method pada class Orang
dengan cara menambahkan super pada potongan script codenya seperti ini

return super.getNama() + getUniv() + " " + getFak() + " - "+getProdi()


+ ", " + getIpk();

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.

3.2.2. Main Method

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.

Kemudian pada baris ke 13 terdapat perintah pemanggilan method


cetakDaftarOrang() yang mengirimkan nilai-nilai dari variabel o (passing
parameter).

Selanjutnya pada method cetakDaftarOrang() dilakukan looping untuk mencetak


semua data yang dikirimkan sebelumnya. Kita dapat melihat potongan perintah
arr[i].cetakdata() adalah sebuah perintah untuk mencetak data arr ke-i dengan
method cetakdata() pada class-class tertentu yang telah diatur saat pembentukan
objek (lihat ke 10 dan ke 11). Sehingga, walaupun nilai dari masing-masing index o
memiliki sedikit perbedaan, dengan method override hal tersebut dapat disesuaikan.
DAFTAR REFERENSI

1. Weiss, Mark Allen.”Data Structures & Problem Solving Using Java: Fourth
Edition”. Pearson: 2010

Anda mungkin juga menyukai