Pemrograman Berorientasi Objek Class, Object, Method Pada Java Dalam pemrograman tradisional atau prosedural, seluruh data dan kode digabung menjadi satu bagian dalam satu program. Untuk membuat program-program sederhana, penggunaan jenis pemrograman procedural tidak menjadi masalah. Namun masalah akan muncul ketika program yang dibuat berkembang lebih besar dan kompleks. Hal inilah yang menjadi awal dibuatnya model pemrograman berorientasi objek. Pada pemrograman berorientasi objek, komponen-komponen penyusun program secara konseptual akan dipecah menjadi bagian-bagian tersendiri yang disebut dengan objek. Dalam pemrograman berorientasi objek, setiap objek akan memiliki data berupa variable maupun konstanta, dan memiliki method berupa fungsi. Sehingga objek dapat didefinisikan sebagai suatu entitas yang memiliki data dan method. Kelebihan Pemrograman Berorientasi Objek Objek-objeknya dapat digunakan ulang (reuseable) untuk program-program lain Programnya lebih terstruktur dan lebih mudah untuk dikembangkan Bersifat natural karena perilaku dan sifat-sifat objek didalam program akan disesuaikan dengan objek-objek nyata yang ada di alam sekitar kita. Kelas (Class) dan Objek (Object) Hewan adalah suatu objek yang memiliki data-data berupa nama jenis hewan, jenis kelamin hewan, berat badan, jenis makanan dan yang lainnya. Sedangkan untuk Pemrograman berorientasi objek – [email protected] Page 1 methodnya, hewan memiliki cara berkembangbiak, cara mencari makanan, cara bertahan hidup dan sebagainya. Contoh lainnya adalah manusia sebagai objek dengan data-data berupa nama, jenis kelamin, tinggi badan, berat badan, usia dan yang lainnya. Untuk methodnya manusia memiliki cara bicara, cara berjalan, cara tertawa dan yang lainnya. Objek dalam pemrograman berorientasi objek diabstraksikan menjadi sebuah kelas. Kelas dapat didefinisikan sebagai blueprint atau kerangka yang mendefinisikan variablevariabel dan method umum dari sebuah objek tertentu. Karena kelas bersifat abstrak, ketika membuat sebuah kelas baru maka kita telah mendefinisikan tipe data baru. Sekali didefinisikan, tipe data baru tersebut dapat digunakan untuk membuat suatu objek dari tipe tersebut. Dengan kata lain, kelas merupakan pola (template) untuk pembuatan objek, dan objek adalah wujud nyata (instance) dari sebuah kelas. Sebagai contoh, sebuah kelas manusia memiliki instance berupa nama-nama atau wujud dari manusia, seperti Udin, Kabayan, Iteung dan yang lainnya. Modifier Merupakan sifat yang dimiliki oleh setiap atribut, method maupun kelas dalam java. Modifier akses adalah modifier yang selalu digunakan. Modifier akses terdiri dari private, default, protected, public. Selain itu ada pula modifier final, static, abstract, synchronized, native, dan storage (transient, volatile). Deklarasi Kelas Dalam pemrograman java, kelas didefinisikan dengan kata kunci class. Untuk menyimpan file, simpan dengan nama yang sama seperti nama kelas yang digunakan dalam file tersebut. Kemudian didalam java ada aturan tersendiri untuk pemberian nama class, yaitu harus diawali dengan huruf besar untuk membedakan antara class dan objek. Berikut adalah bentuk umum dari pendeklarasian class pada java : [modifier] class nama_class { [deklarasi_atribut] [deklarasi_konstruktor] [deklarasi_metode] } Deklarasi Atribut Atribut merupakan karateristik yang dimiliki oleh objek. Deklarasi atribut dibutuhkan kelas untuk membentuk objek dan diletakkan didalam class body atau diluar method. Berikut adalah pendeklarasian atribut pada java : - Atribut tanpa inisialisasi : [modifier] tipedata nama_atribut ; - Atribut dengan inisialisasi : [modifier] tipedata nama_atribut = nilai; Contoh pendeklarasian atribut : private String nama; String warna = “hijau”; Pemrograman berorientasi objek – [email protected] Page 2 Deklarasi Method Merupakan tingkah laku yang dimiliki oleh objek. Method digunakan untuk memodularisasi program pemisah satu tugas menjadi satu unit tersendiri. Didalam java terdapat dua buah method, yaitu : a. Fungsi. Merupakan method yang memiliki nilai balik jika method tersebut dipanggil. Cara pembuatan sebuah fungsi adalah dengan cara menentukan nilai baliknya, kemudian nama methodnya. b. Prosedur. Merupakan method yang tidak mengembalikan nilai. Cara pembuatan prosedur sama dengan fungsi, namun bedanya adalah pada prosedur menggunakan kata kunci void. Berikut adalah pendeklarasian method pada java : - Method fungsi tanpa parameter : [modifier] tipe_nilaiKembali nama_method () { Method body; … } - Method fungsi menggunakan parameter : [modifier] tipe_nilaiKembali nama_method (parameter input) { Method body; … } - Method prosedur tanpa parameter : void nama_method () { Method body; … } - Method prosedur menggunakan parameter : void nama_method (parameter input) { Method body; … } Contoh pendeklarasian method : - Method fungsi tanpa parameter : public int LuasPersegi() { int luas = sisi * sisi; return luas; } } - Method fungsi menggunakan parameter : public int LuasPersegi(int sisi) { Pemrograman berorientasi return sisiobjek * sisi;– [email protected] } Page 3 - Method prosedur tanpa parameter : void LuasPersegi() { System.out.println(“Luas Persegi = ” + (sisi * sisi)); } - Method prosedur menggunakan parameter : void LuasPersegi(int s) { sisi = s; } Accessor Method Accessor method digunakan untuk membaca nilai variable pada class, baik berupa instance maupun static. Berikut penulisan accessor method : get namaInstanceVariabel Contoh pendeklarasian accessor method : public class Persegi{ private int sisi; public int getSisi(){ return sisi; } } Mutator Method Mutator method digunakan untuk memberi atau mengubah variable dalam class oleh object lain. Berikut penulisan mutator method : set namaInstanceVariabel Contoh pendeklarasian mutator method : public class Persegi{ private int sisi; public void setSisi(int temp){ sisi = temp; } } Pemrograman berorientasi objek – [email protected] Page 4 Object Object adalah instance atau representasi nyata dari sebuah kelas. Sebuah kelas bisa memiliki banyak object, setiap object mempunyai sifat yang sama persisi seperti yang didefinisikan dalam kelas tersebut. Untuk pemberian nama sebuah object diawali dengan huruf kecil. Berikut adalah pendeklarasian object pada java : nama_class nama_object = new nama_constructor(); nama_class nama_object; nama_object = new nama_constructor(); Contoh pendeklarasian object : Kotak k = new Kotak(); Kotak k; k = new Kotak(); Kata kunci this Java menyediakan kata kunci this yang merupakan referensi ke object yang sedang aktif. This digunakan didalam method untuk mewakili nama kelas bersangkutan. Berikut adalah pendeklarasian kata kunci this : this.namaInstanceVariabel Contoh kode java yang tidak menggunakan kata kunci this : Class PersegiPanjang{ double panjang, lebar; PersegiPanjang(double p, double l){ panjang = p; lebar = l; } } Contoh kode java yang menggunakan kata kunci this : Class PersegiPanjang{ double panjang, lebar; PersegiPanjang(double p, double l){ this.panjang = p; this.lebar = l; } } Pemrograman berorientasi objek – [email protected] Page 5 Java tidak mengizinkan pendeklarasian variable dengan nama yang sama didalam satu blok tertentu. Disisi lain, java memperbolehkan untuk mendeklarasikan nama parameter yang sama dengan nama data yang terdapat didalam kelas. Namun nama variable local secara otomatis akan menimpa nama data yang terdapat didalam kelas yang bersangkutan. Untuk menghindari penimpaan variable tersebut, maka digunakanlah kata kunci this. Akan tetapi programmer akan menghindari penggunaan kata kunci this karena lebih membingungkan, sehingga untuk kesamaan nama parameter dan data didalam kelas juga akan dihindari. Pemrograman berorientasi objek – [email protected] Page 6 Overloading Method, Constructor Dan Access Modifier Overloading Method Dalam satu class dapat mendefinisikan lebih dari satu method dengan nama yang sama tetapi parameter yang dideklarasikan harus berbeda baik itu jumlahnya ataupun tipe parameternya. Jenis-jenis method overloading: 1. Jumlah parameter beda, tipe beda 2. Jumlah parameter sama, tipe beda 3. Jumlah parameter beda, tipe sama Syarat-syarat overloading: 1. Dalam sebuah kelas diperbolehkan lebih dari satu method dengan nama yang sama dengn catatan method dapat dibedakan berdasarkan banyaknya parameter atau tipe data parameter. 2. Overloading tidak bisa dilakukan dengan membedakan nilai kembaliannya. 3. Overloading juga bisa dilakukan pada sub kelasnya. Contoh method yang mengalami overloading: Method yang di Overload : myMethod(String s, int i, float f) Method yang mengOverload (LEGAL) Jumlah arugument berbeda myMethod() Jumlah arugument berbeda myMethod(int i) myMethod(String s1, String s2, String s3) myMethod(String s, float f, int i) Jumlah arugument berbeda, tapi urut-urutan tipe data berbeda Jumlah arugument berbeda, tapi urut-urutan tipe data berbeda Method yang mengoverload (ILEGAL) myMethod(String s, int i, float f) myMethod(String x, int y, float z) Jumlah argument sama, uruturutan tipe data sama. Jumlah argument sama, uruturutan tipe data sama. Yang haru diperhatikan dari contoh ini adalah, nama variabel yang berbada tidak lantas menyebabkan argument list menjadi berbeda. Pemrograman berorientasi objek – [email protected] Page 7 Overloading method terjadi pada objek yang sama. Ketika overloading method dipanggil, Java mencari kesamaan antara argumen yang digunakan untuk memanggil method dan parameter dari method. tetapi, kesamaan ini tidak mutlak karena pada Java ada otomatisasi konversi tipe yang berbeda. Contoh overloading method secara keseluruhan pada program java : class OverloadMetode { //konversi tujuan bertipe integer void test(int a) { System.out.println("Hasil konversi byte ke integer :"+a); } } class OverloadKonversi { public static void main(String args[]) { OverloadMetode ob = new OverloadMetode(); //variabel asal yang akan dikonversi bertipe byte byte i=88; ob.test(i);//memanggil test(integer) } } Konversi otomatis pada java seperti program diatas, hanya dapat dilakukan jika kedua aturan ini dipenuhi: 1. Kedua tipe data (data asal dan tujuan) memiliki kompatibilitas(compatible). 2. Tipe tujuan mempunyai range lebih besar daripada tipe asal. Selain itu Java juga mengerjakan konversi secara otomatis ketika menyimpan konstanta integer literal menjadi variable bertipe byte, short, atau long. Deklarasi Constructor Constructor adalah method khusus yang didefinisikan didalam kelas dan akan dipanggil secara otomatis setiap kali terjadi instansiasi objek. Jika dalam suatu kelas kontruktor tidak didefinisikan, maka secara otomatis Java akan membuat sebuah constructor, yaitu null constructor. Constructor tersebut dinamakan sebagai default constructor. Namun jika kita mendefiniskan sebuah constructor baru untuk kelas yang dibuat, maka default constructor sudah tidak berfugsi atau tidak digunakan lagi. Ciri-ciri default constructor: 3. 4. 5. Dibuat secara otomatis saat class dikompilasi. Dibuat secara otomatis jika class yang dikompilasi tidak mempunyai constructor sama sekali. Tidak memiliki parameter formal. Contoh default constructor : public StudentRecord() Pemrograman berorientasi objek – [email protected] Page 8 { //area penulisan kode } Sifat-sifat constructor: 1. Nama constructor sama dengan nama class 2. Tidak memiliki tipe data termasuk void 3. Tidak memiliki return value. 4. Dieksekusi ketika terjadi instansiasi. 5. Dapat mempunyai akses modifier, biasanya public namun dapat berupa private 6. Tidak dapat dipanggil secara langsung, namun harus dipanggil dengan menggunakan operator new pada pembentukan sebuah class. Berikut cara pendeklarasian constructor : - Pendeklarasian tanpa menggunakan parameter [modifier] nama_class () { //statement } - Pendeklarasian menggunakan parameter [modifier] nama_class (parameter) { //statement } Overloading Constructor Constructor dapat melakukan overloading. overloading constructor terjadi pada objek yang berbeda-beda, nilai argument berbeda, sehingga method bisa lebih dari satu. Berikut contoh overloading pada constructor: class Kotak { double panjang; double lebar; double tinggi; // Mendefinisikan constructor dengan satu parameter Kotak(double sisi) { panjang = lebar = tinggi = sisi; } // Mendefinisikan constructor dengan tiga parameter Kotak(double p, double l, double t) { panjang = p; lebar = l; tinggi = t; } double hitungVolume() { return (panjang * lebar * tinggi); } Pemrograman berorientasi objek – [email protected] Page 9 } class Over { public static void main(String[] args) { Kotak k1, k2; k1 = new Kotak(10); k2 = new Kotak(4, 3, 2); //Menampilkan volume dari masing-masing objek Kotak System.out.println("Volume k1 = " + k1.hitungVolume()); System.out.println("Volume k2 = " + k2.hitungVolume()); } } Pada kode program diatas didefinisikan ada dua buah constructor dengan nama Kotak. Constructor pertama memiliki satu buah parameter dimana parameter sisi sama dengan nilai panjang, lebar dan tinggi. Constructor kedua memiliki tiga buah parameter dengan nilai panjang, lebar dan tinggi yang berbeda. Access Modifier Berikut adalah jenis-jenis access modifier : No . Access Modifier Pada class dan Interface 1. Default Dapat diakses oleh yang sepaket. 2. Public Dapat diakses dimanapun 3. Protected Tidak bisa diterapkan 4. private Tidak bisa diterapkan Pada Method & Variable Diwarisi oleh subkelas dipaket yang sama, dapat diakses oleh method-method yang sepaket. Diwarisi oleh subkelasnya, dapat diakses dimanapun. Diwarisi oleh subkelasnya, dapat diakses oleh methodmethod yang sepaket. Tidak dapat diakses dimanapun kecuali oleh method-method yang ada dalam kelas itu sendiri. Inheritance, Polimorfisme, Interface Pemrograman berorientasi objek – [email protected] Page 10 Inheritance Inheritance dapat menciptakan kelas umum yang mendefinisikan sifat/watak umum. Kelas ini kemudian dapat diwarisi oleh kelas-kelas lain, yang merupakan kelas-kelas yang lebih spesifik, dengan menambahkan hal-hal unik. Dalam terminologi java, sebuah kelas yang diwarisi dikenal dengan superkelas. Kelas yang mewarisi dikenal dengan subkelas. Oleh karena itu, subkelas merupakan versi terspesialisasi dari superkelas. Subkelas mewarisi semua variabel dan metode instans yang didefinisikan oleh superkelas. Pada konsep Inheritance ada beberapa istilah yang perlu diketahui, yaitu : Sub class, digunakan untuk menunjukkan class anak atau turunan secara hirarkis dari super class Super class, digunakan untuk menunjukkan class induk secara hirarkis dari sub class (class anak) Extends, digunakan untuk menunjukkan, bahwa suatu class merupakan turunan dari class lain. Misal A extends B, berarti class A adalah turunan dari class B. A merupakan subclass, sedangkan B merupakan superclass. Super, digunakan untuk memanggil konstruktor dari super class atau memanggil variable yang mengacu pada super class. Misal super(x,y,z), berarti atribut x,y,z diambil dari atribut pada class induk Cara Inheritance Kelas Pendeklarasian kelas turunan : Class KelasTurunan extends KelasDasar{ TubuhKelas } Pemanggilan Constructor Super Kelas Superkelas tidak mengandung konstruktor. Untuk itu digunakan kata kunci super. Super (nama, nim) Pemanggilan konstruktor kelas dasar harus memenuhi persyaratan berikut : Pemanggilan dengan super seperti di atas hanya bisa dilakukan pada konstruktor. Pemanggilan konstruktor superkelas harus berkedudukan sebagai pernyataan pertama dalam konstruktor. Overriding Overriding adalah suatu cara untuk mendefinisikan ulang method yang ada pada class induk apabila class anak menginginkan adanya informasi yang lain. Overriding dilakukan dengan cara menulis ulang method yang ada pada class induk dengan syarat bahwa nama dan parameter fungsi tersebut harus sama (tidak boleh diubah). Meskipun fungsi telah ditulis ulang oleh class anak, fungsi yang asli pada class induk masih dapat dipanggil di class anak dengan menggunakan class super. Overloading Overloading fungsi adalah penulisan beberapa fungsi (dua atau lebih) yang memiliki nama yang sama. Pada bahasan overloading dikenal istilah signature. Signature sebuah fungsi adalah parameter lengkap dengan tipe datanya yang terdapat dalam fungsi tersebut.Misal terdapat fungsi: public int jumlahMahasiswa (int laki2, int perempuan, String kelas); Pemrograman berorientasi objek – [email protected] Page 11 maka signature dari fungsi tersebut adalah (int, int, String). Suatu fungsi dikatakan dioverloadmanakala terdapat beberapa fungsi dengan nama yang sama namun memiliki signature yang berbeda-beda, sebagai contoh public void infoMahasiswa (int laki2, int perempuan,Stringkelas) { ... } public void infoMahasiswa (int mhsLama, int mhsBaru, int mhsCuti, int angkatan) { ... } Contoh Kasus Inheritance Menunjukkan hirarki kelas dosen., memiliki turunan berupa kelas rektor, kelas dekan dan kelas kalab. class induk (class dosen) memiliki atribut nama, nik dan jurusan. Method yang dimiliki oleh class dosen adalah view(). Class turunan dari class dosen ada tiga class. Pada class rektor, terdapat tambahan atribut berupa th_mulai dan jabatan_ke, serta method viewRektor(). Pada class dekan terdapat tambahan atribut fakultas, dan method viewDekan(). Pada class kalab terdapat tambahan atribut laboratorium, dan method viewKalab(). public Rektor } }} }} Pemrograman berorientasi objek – [email protected] Page 12 Kalab private super (namaX,nikX,jurX); public void viewkalab() { int Pemrograman berorientasi objek – [email protected] Page 13 Polimorfisme Polimorfisme adalah kemampuan mengungkap suatu hal yang berbeda melalui satu cara yang sama. Apabila mempunyai objek yang bertipe superkelas, variable objek ini bisa diisi dengan objek superkelas ataupun objek subkelas tanpa perlu melakukan perubahan tipe. Pada polimorfisme kondisi yang harus terpenuhi supaya fungsi dapat dijalankan yaitu: 1. Semua kelas diturunkan dari suatu kelas yang sama 2. Method yang dipanggil harus melalui variabel dari super class. 3. Method yang dipanggil juga harus merupakan method yang ada pada super class. 4. Signature method harus sama baik yang ada pada super class maupun di subclass. 5. Method access attribute pada subclass tidak boleh lebih terbatas daripada yang ada pada super class. Pemrograman berorientasi objek – [email protected] Page 14 Polimorfisme untuk alat-alat transportasi Pada program utama dilakukan pemanggilan terhadap ketiga class tersebut, masingmasing dengan parameter yang bersesuaian Interface Interface adalah class yang hanya mengandung deklarasi method tanpa memiliki implementasi dan semua property yang dimilikinya bersifat final. Interface mirip dengan class abstrak, tetapi interface tidak terikat dengan class hierarki. Berikut ini adalah aturan yang harus kita ingat tentang pendeklarasian interface: 1. Modifier yang digunakan hanya public atau tidak sama sekali. Jika tidak menggunakan modifier maka interface tersebut hanya dapat diakses dalam package yang sama. Pemrograman berorientasi objek – [email protected] Page 15 2. Semua variabel yang dideklarasikan dalam interface secara otomatis adalah static final. Karena itu waktu pendeklarasian harus diberikan nilai. 3. Semua method adalah abstrak. Bedanya dengan class abstrak adalah kita tidak perlu menuliskan keyword abstract pada saat mendeklarasikan method dalam interface. 4. Kita dapat mengimplementasikan lebih dari satu interface (multiple inheritance) dengan memisahkan nama dari setiap interface dengan tanda koma. 5. Dapat terjadi saat kita mengimplementasikan lebih dari satu interface ternyata interface – interface tersebut memiliki method yang sama. Dalam hal ini method yang akan diimplementasi adalah method yang berada pada posisi pertama. 6. Semua method yang diimplemetasikan harus public. 7. Jika kita tidak mengimplementasikan semua method yang ada pada interface, maka class tersebut harus dideklarasikan sebagai abstract class. Untuk lebih jelasnya kita akan mengambil contoh pada dunia nyata. Misalnya pembuat remote control dan pembuat TV. Seorang pembuat remote control tentunya tidak perlu tahu merk TV dan siapa yang membuat TV tersebut untuk dikontrol menggunakan remote control tersebut. Yang perlu diketahui adalah Interface apa yang digunakan oleh TV tersebut agar dapat dikontrol. Demikian pulu si pembuat TV tidak perlu tahu bagaimana remote control tersebut dibuat. Pembuat TV hanya perlu tahu interface apa yang akan digunakan agar Tvnya dapat dikontrol oleh remote control tersebut. Perhatikan implementasinya dalam kode berikut ini. public class TVSamsung implements Control{ String[] channel = {"RCTI","SCTV","INDOSIAR","ANTV","TV7"}; public void pindahChannel(int channel) { System.out.println("Pindah channel pada TV Samsung ke "+ this.channel[channel]); } public void perbesarVolume(int intensitas) { System.out.println("Perbesar volume pada TV Samsung sebanyak "+ intensitas); } public void perkecilVolume(int intensitas) { System.out.println("Perkecil volume pada TV Samsung sebanyak "+ intensitas); } } public class RemoteControl { public void kirimPerintahKeTv(int aksi,Control tv,int tombol){ switch(aksi){ case 1: tv.pindahChannel(tombol); break; case 2: tv.perbesarVolume(tombol); break; case 3: tv.perkecilVolume(tombol); break; } } } public class TestRemoteControl { public static void main(String[] args){ TVPolitron tvp = new TVPolitron(); TVSamsung tvs = new TVSamsung(); RemoteControl rc = new RemoteControl(); rc.kirimPerintahKeTv(1,tvp,1); } } Pemrograman berorientasi objek – [email protected] Page 16 public interface Control { public void pindahChannel(int channel); public void perbesarVolume(int intensitas); public void perkecilVolume(int intensitas); } public class TVPolitron implements Control{ String[] channel = {"RCTI","SCTV","INDOSIAR","ANTV","TV7"}; public void pindahChannel(int channel) { System.out.println("Pindah channel pada TV Politron ke "+ this.channel[channel]); } public void perbesarVolume(int intensitas) { System.out.println("Perbesar volume pada TV Politron sebanyak "+ intensitas); } public void perkecilVolume(int intensitas) { System.out.println("Perkecil volume pada TV Politron sebanyak "+ intensitas); } } Pemrograman berorientasi objek – [email protected] Page 17