Tujuan 1. Memahami konsep pemrograman berorientasi objek pada java 2. Mengetahui definisi dan karakteristik objek, kelas, dan atribut 3. Mengetahui perbedaan antara kelas, objek, dan atribut 4. Memahami penggunaan enkapsulasi pada method 5. Mengetahui cara membuat atau sebuah method serta penggunaannya 6. Mengetahui perbedaan macam-macam access modifier pada java
Dalam dunia pemrograman, biasanya kita dihadapkan pada dua jenis metode pemrograman, yaitu pemrograman prosedural (procedural) dan pemrograman berorientasi objek (object oriented). Pemrograman prosedural merupakan suatu metode menulis program yang didasarkan pada serangkaian tugas dalam bentuk fungsi atau prosedur. Cara pandang pemrograman prosedural yaitu sebuah program adalah suatu instruksi yang difokuskan pada fungsi dan prosedur, yang keduanya digunakan untuk memanipulasi data yang bersifat pasif. Programmer harus mem- break down suatu masalah menjadi masalah yang lebih sederhana. Berbeda halnya dengan pemrograman berorientasi objek (OOP), fungsi dan data bukan menjadi dua hal yang terpisah. Fungsi dan data menjadi satu kesatuan yang disebut sebagai objek aktif. Cara pandang OOP ini yaitu sebuah program merupakan serangkaian objek yang bekerjasama untuk menyelesaikan suatu masalah. Dengan kata lain, metode prosedural berfokus pada cara komputer menangani tugas, sedangkan metode OOP berfokus pada tugas yang kita kembangkan untuk dieksekusi komputer. Kedua jenis metode pemrograman tersebut dapat digunakan untuk menangai masalah yang sama, asalkan bahasa pemrograman yang digunakan mendukung metode-metode tersebut. Contoh bahasa pemrograman yang mendukung OOP diantaranya : Java, C++, Pascal, Visual Basic .NET, Ruby, Python, PHP, C#, Delphi, Perl, dsb. Walaupun banyak bahasa pemrograman yang mendukung konsep PBO tersebut, Java merupakan bahasa yang mendukung penuh PBO, di antaranya karena Java memiliki beberapa fitur penting yang berbeda dari bahasa standar. A. Pemrograman Berorientasi Objek (OOP) Pemrograman Berorientasi Objek (Object Oriented Programming/OOP) merupakan pemrograman yang berorientasikan kepada objek, dimana semua data dan fungsi dibungkus dalam class-class atau objek-objek. Setiap object dapat menerima pesan, memproses data, mengirim, menyimpan dan memanipulasi data. Beberapa object berinteraksi dengan saling memberikan informasi satu terhadap yang lainnya. Banyak orang lebih menggunakan pemrograman ini karena lebih mudah digunakan. Kelebihan dari pemrograman berorientasi objek antara lain dapat mengatur memori secara otomatis, penggunaan class cukup ditulis sekali, dapat menambahkan fitur pada class tanpa mengedit class asal, serta dalam pembuatan library sangat mudah dalam penggunaannya. Kekurangan dari pemrograman ini yaitu menghabiskan memori yang lebih besar dibandingkan pemrograman prosedural serta mudah mengembalikan kode menjadi source code sehingga algoritma yang digunakan sulit untuk disembunyikan dan mudah dibajak. B. Istilah-Istilah dalam Pemrograman Berorientasi Objek 1. Class Pemrograman berorientasi objek menggunakan class untuk menaruh program sehingga program dapat digunakan kembali dan dipadukan dengan program- program lain. Class merupakan cetak biru (blue print) atau menggambarkan ciri-ciri objek secara umum. Ketika menggunakan class, untuk dapat mengeksekusi kita harus melakukan instansiasi yaitu membuat sebuah object dari class yang telah kita buat. Class memiliki beberapa karakteristik, diantaranya anggota class terdiri dari atribut dan method. Tiap-tiap anggota class memiliki control pengaksesan tersendiri, maksudnya adalah apakah anggota class tersebut dapat diakses dengan bebas (dengan tipe public) atau hanya dapat diakses melalui sebuah interface. Sebagai contoh, dapat kita ibaratkan sebuah class adalah sebuah cetakan agar dan agar adalah sebuah object dimana proses pembuatan agarnya disebut sebagai instansiasi. Dalam hal ini sama halnya seperti cetakan agar, sebuah class juga bisa digunakan berkali kali untuk membuat sebuah object, dimana satu object dengan yang lainnya tidaklah memiliki keterkaitan meskipun berasal dari kelas yang sama. Contoh yang lain yaitu kopi, teh, dan kakao merupakan objek dari class bahan penyegar. Kopi dan objek lainnya memiliki kesamaan atribut (warna, karakteristik, kandungan kimia, fungsi) dan method untuk mengakses data pada atributnya, misalnya fungsi untuk menghitung kandungan kimia atau menginputkan fungsi-fungsinya.
Class utama dari program:
class LatihanClass { public static void main(String[]args) { BahanPenyegar kopi = new BahanPenyegar(); Kopi.setJenis(Arabica); System.out.println(Kopi berjenis +kopi.getJenis()); }} 2. Objek Pemahaman tentang pemrograman berbasis objek tentu saja kita mulai dari objek itu sendiri. Di dalam dunia nyata, semua yang kita lihat adalah objek (alat- alat laboratorium, orang tua, mesin-mesin, komputer, plastik, buah-buahan, dll). Object merupakan sesuatu yang memiliki identitas (nama), pada umumnya juga memiliki data tentang dirinya maupun object lain dan mempunyai kemampuan untuk melakukan sesuatu dan bisa bekerja sama dengan objek lainnya. Object adalah implementasi dari class. Setiap object memiliki dua karakteristik yang utama, yaitu atribut dan behavior. Atribut merupakan status object dan behavior merupakan tingkah laku dari object tersebut. Contoh sederhananya yaitu komputer, komputer memiliki atribut seperti keyboard, mouse, monitor, speaker dan memiliki tingkah laku seperti kecepatan processor, kemampuan penyimpanan, kemampuan baterai, dan sebagainya. Pada saat objek diterjemahkan ke dalam konsep pemrograman berorientasi objek, maka elemen penyusunnya dapat dibedakan menjadi dua yaitu: a. Atribut, merupakan ciri-ciri yang melekat pada suatu objek. b. Method, merupakan fungsi-fungsi yang digunakan untuk memanipulasi nilai-nilai pada atribut atau untuk melakukan hal-hal yang dapat dilakukan oleh suatu objek. Objek dalam konsep pemrograman berorientasi objek memiliki keadaan dan perilaku yang sama seperti halnya objek di dunia nyata, karena objek dalam konsep PBO merupakan representasi objek dari dunia nyata. Objek dalam PBO merepresentasikan keadaan melalui variabel-variabel (atribut), sedangkan perilakunya direpresentasikan dengan method yang merupakan suatu fungsi yang berhubungan dengan perilaku objek tersebut maupun berhubungan dengan atribut dari objek tersebut. Objek yang memiliki kesamaan atribut dan method dapat dikelompokkan menjadi sebuah class dan untuk menginstansi (membuat) objek dari class, gunakan operator new. Sintaks membuat objek dari suatu class:
3. Atribut Atribut merupakan data atau sifat yang dimiliki oleh sebuah class serta yang membedakan antara objek satu dengan objek lainnya. Pada contoh class LatihanClass, atribut dari class tersebut adalah jenis, komposisi, kandungan, merek, yang ini berarti bahwa setiap objek dari class bahan penyegar (atau dengan kata lain setiap bahan penyegar yang ada di kehidupan sehari-hari) pasti memiliki berbagai atribut tersebut.
namaClass namaObjek = new namaClass(); Atribut pada sebuah kelas memiliki izin akses jika kelas digunakan oleh kelas lain, izin akses itu public, private, dan protected. a. Atribut Private Atribut private biasanya digunakan oleh sebuah kelas untuk melindungi atribut-atributnya agar tidak dapat diakses oleh kelas lain. Sebuah atribut yang dinyatakan sebagai private hanya dapat diakses secara langsung oleh kelas yang membungkusnya, sedangkan kelas lainnya tidak dapat mengakses atribut ini secara langsung, misalkan kelas sebagai berikut:
Berdasarkan struktur tersebut maka yang dapat mengakses elmt dan next hanyalah kelas Elemen. Jadi, kelas dengan atribut private tersebut hanya dapat diakses oleh kelas lain yang berada dalam satu package . berarti atribut- atribut yang private hanya dapat diakses oleh method-method dalam kelas yang sama, kelas lain masih dapat mengakses melalui method-method tersebut asal modifier-nya public. Pertimbangan suatu atribut dideklarasikan private: i. Bila kelas lain tidak memerlukan atribut tersebut ii. Melindungi suatu atribut dari kemungkinan nilainya diubah oleh method lain dari kelas lain
b. Atribut Public Atribut public adalah atribut yang biasa digunakan oleh sebuah kelas, jika sebuah atribut diperbolehkan diakses secara langsung oleh kelas lain. Sebuah atribut yang dinyatakan sebagai public dapat diakses secara langsung oleh kelas lain di luar kelas yang membungkusnya.
c. Atribut Protected Atribut protected adalah atribut yang biasa digunakan oleh sebuah class jika sebuah atribut diperbolehkan diakses secara langsung oleh kelas lain yang merupakan kelas turunannya. Sebuah atribut yang dinyatakan sebagai protected tidak dapat diakses secara langsung oleh kelas lain di luar kelas yang membungkusnya, kecuali kelas yang mengaksesnya adalah kelas class Elemen private NilaiMatkul elmt private Elemen next Elemen()
class Elemen public NilaiMatkul elmt Elemen next Elemen()
turunan dari kelas yang membungkusnya. Akses protected ini dimaksudkan untuk melindungi atribut agar tidak dapat diakses secara langsung oleh sembarang kelas lain, namun diizinkan diakses secara langsung oleh kelas turunannya.
4. Enkapsulasi Enkapsulasi dapat dianggap sebagai bungkusan. Enkapsulasi inilah yang diimplementasikan dalam sebuah class bahwa di dalam sebuah class terdiri dari atribut dan metode yang dibungkus dalam suatu class. Enkapsulasi bertujuan untuk melindungi atribut dan metode-metode yang ada di dalam class agar tidak sembarangan diakses oleh class lain. Setelah variabel dan method dibungkus, hak akses terhadapnya dapat ditentukan. Enkapsulasi memiliki 2 manfaat, yaitu: a. Penyembunyian informasi Penyembunyian ini mengacu kepada perlindungan internal objek, bagian internal objek dapat berubah tanpa mempengaruhi bagian-bagian program yang lain. b. Modularitas Modularitas berarti objek dapat dikelola secara independen sehingga kita dapat dengan bebas melakukan modifikasi yang tidak menyebabkan masalah pada bagian-bagian lain dari sistem. Pada pemrograman java ini enkapsulasi dilambangkan dengan simbol kurung kurawal ({ }). Konsep pembungkusan ini pada dasarnya merupakan perluasan dari tipe data struktur. Dalam kehidupan sehari hari enkapsulasi dapat dimisalkan sebagai arus listrik pada generator, dan sistem perputaran generator untuk menghasilkan arus listrik. Kerja arus listrik tidak mempengaruhi kerja dari sistem perputaran generator, begitu pula sebaliknya. Karena didalam arus listrik tersebut, kita tidak perlu mengetahui bagaimana kinerja sistem perputaran generator, apakah generator berputar kebelakang atau ke depan atau bahkan serong. Begitu pula dalam sistem perputaran generator, kita tidak perlu tahu bagaimana arus listrik, apakah menyala atau tidak.
5. Method Pada dasarnya method merupakan fungsi-fungsi yang dikerjakan oleh objek yang dibuat oleh seorang programmer di dalam suatu class. Method didefinisikan pada class akan tetapi dipanggil melalui objek. Method memiliki beberapa peranan, antara lain: a. Mengubah nilai atribut dari suatu objek b. Menerima informasi dari objek lain class Elemen protected NilaiMatkul elmt protected Elemen next Elemen()
c. Mengirim informasi ke objek lain untuk melakukan suatu task 5.1Bagian-Bagian Method Definisi method terdiri dari method header dan method body. Berikut beberapa bagian-bagian dari method: a. Modifier : Untuk memberitahu kompiler bagaimana memanggil method dan mendefinisikan tipe method b. Return Type : Sebuah method yang dapat mengembalikan nilai. returnValueType adalah tipe data dari nilai return method. Beberapa method melakukan operasi yang diinginkan tanpa kembalinya sebuah nilai. Dalam hal ini, returnValueType menggunakan kata kunci void. c. Parameter : Parameter dapat dikatakan seperti penampung. Ketika sebuah method dipanggil, anda harus menempatkan nilai parameter. Nilai ini disebut sebagai parameter. Parameter dapat mengacu pada jenis, order, dan jumlah parameter method. Parameter ini optional, yaitu suatu method mungkin untuk tidak mengandung method. d. Method Body : Method body berisi kumpulan pernyataan yang menentukan method. Secara garis besar, method memiliki beberapa manfaat, yaitu: a. Pendekatan reusability. Contohnya yaitu kita tidak perlu lagi membuat sendiri perhitungan-perhitungan matematika karena dapat langsung menggunakan method yang termuat dalam kelas Math. b. Menghindari penulisan bagian kode program yang berulang-ulang Contoh method dari class LatihanClass, adalah setJenis(String jenis) dan getJenis() yang berfungsi untuk mengambil nilai atribut jenis. Secara umum method terdapat 2 macam, yaitu method yang mengembalikan nilai dan method yang tidak mengembalikan nilai. Contoh method yang mengembalikan nilai adalah method getJenis(), dimana hasil dari method ini adalah mengembalikan nilai string dari atribut jenis. Sedangkan contoh method yang tidak mengembalikan nilai adalah method setJenis(String jenis) , yaitu dengan ciri tipe data dari method tersebut adalah void. Bentuk umum dari pembuatan method di dalam kelas:
Pada bentuk umum diatas, tipe adalah tipe data yang akan dikembalikan oleh method. Sebagai catatan, dalam Java method terbagi menjadi dua: void dan non- tipe namaMethod(daftar-parameter) { //kode yang akan dituliskan }
void. Method void adalah method yang tidak mengembalikan nilai, sedangkan method non-void adalah method yang mengembalikan nilai. Untuk method void, tipe data kembalian harus diisi dengan kata kunci void. Apabila method yang kita buat ditunjukkan untuk mengembalikan seuatu nilai tertentu, maka di dalam method tersebut harus terdapat statement return, yang diikuti dengan nilai yang akan dikembalikan, nilai dapat berupa konstanta maupun variabel, yang digunakan untuk menandakan nilai yang akan dikembalikan oleh method. 5.2Mendefinisikan Method Setelah mengetahui bentuk umum yang digunakan, disini kita akan langsung mendefinisikan sebuah contoh method ke dalam kelas yang sebelumnya kita buat, yaitu kelas Kotak. Kita akan menambahkan method hasilVolume() untuk menampilkan nilai volume dari objek Kotak. Method ini merupakan method yang tidak mengembalikan nilai. Maka dari itu, kita harus mengganti tipe kembalian dengan kata kunci void. Berikut kode program yang dimaksud.
class Method1 { public static void main(String[] args) { Kotak k1, k2, k3;
Pemanggilan method dalam suatu kelas dilakukan dengan menuliskan objek pemiliknya, dan diikuti oleh operator titik (.) beserta nama method yang akan dieksekusi. Hasil yang diberikan oleh method hasilVolume() tentu akan berbeda- beda tergantung dari nilai data yang terkandung dalam masing-masing objek bersangkutan. 5.3Method Berparameter Meskipun java mengizinkan method tanpa parameter, namun pada kenyataannya sebagian besar method yang ditulis dalam program memiliki satu atau beberapa parameter. Dengan adanya parameter, sebuah method dapat bersifat dinamis dan general. Artinya, method tersebut dapat mengembalikan nilai yang beragam sesuai dengan nilai parameter yang dilewatkannya. Untuk lebih memperjelas pembahasan, berikut pendefinisian method tanpa parameter.
Secara sintaks, method diatas benar dan akan mengembalikan nilai 50. Namun, dilihat dari sisi desain program, method diatas dikatakan tidak fleksibel atau tidak bersifat general. Pasalnya, method tersebut hanya dapat digunakan untuk persegi panjang yang memiliki ukuran 10x5 saja. Untuk mengatasi hal semacam ini, maka Java mengizinkan kita untuk menempatkan parameter di dalam sebuah method agar method diatas dapat digunakan untuk segala ukuran persegi panjang. Berikut ini kode yang seharusnya dituliskan untuk mendefinisikan method di atas.
Melalui cara seperti ini, kita dapat melewatkan nilai berapapun ke dalam method tersebut. Sebagai contoh, perhatikan kode berikut:
Luas1 merupakan variabel penampung untuk perhitungan luas persegi panjang dengan ukuran 10x5, luas2 dengan ukuran 4x3, padahal method yang didefinisikan hanya satu, bukan tiga buah method. Terdapat dua istilah yang perlu diketahui dalam bekerja dengan method, yaitu parameter dan argumen. Parameter adalah variabel yang didefinisikan pada saat method dibuat, sedangkan argumen adalah nilai yang digunakan pada saat pemanggilan method. Disini, variabel panjang dan lebar disebut parameter dan nilai 10 dan 5 disebut argumen. int luasPersegiPanjang() { return 10*5; }
int luasPersegiPanjang(int panjang, int lebar) { return panjang*lebar; }
int luas1, luas2; luas1=luasPersegiPanjang(10,5); //menghasilkan nilai 50 luas2=luasPersegiPanjang(4,3); //menghasilkan nilai 12 Sekarang kita akan mengimplementasikan konsep diatas ke dalam kelas PersegiPanjang. Disini data panjang, lebar, dan tinggi akan kita isikan melalui sebuah method. Berikut ini kode program yang dapat digunakan untuk melakukan hal tersebut.
Pada kode program diatas kita mendefinisikan method yang tidak mengembalikan nilai dan memiliki tiga buah parameter, yaitu p, l, dan t. Parameter ini selanjutnya dapat diisi dengan nilai yang dikehendaki pada saat proses pemanggilan method tersebut. Dalam contoh diatas, kita melewatkan nilai 4, 3, dan 2 sebagai argumen dari method isiData() untuk mengisikan data panjang, lebar, dan tinggi dari objek pp.
class PersegiPanjang { double panjang; double lebar; double tinggi;
//mendefinisikan method dengan parameter Void isiData(double p, double l, double t) { panjang = p; lebar = l; tinggi = t; } Double hitungVolume() { Return (panjang*lebar*tinggi); } }
class Method2 { Public static void main(String[] args) { PersegiPanjang pp;
//instansiasi objek pp = new PersegiPanjang();
//memanggil method isiData() pp.isiData(4,3,2);
System.out.println(Volume persegi panjang : +pp.hitungVolume()); } } Contoh method yang memanggil dari dua class yang berbeda:
5.4Method Getter dan Method Setter Bila membuat kelas Java, biasakan attributnya diset dengan access level selain public, misalnya private atau protected. Salah satu alasannya adalah untuk security. Nah, untuk mengakses atribut ini dibuatlah method getter() dan setter(). Method jenis getter() merupakan method-method yang berfungsi untuk mendapatkan informasi dari class, sedangkan jenis setter() berfungsi untuk menentukan isi atribut dalam class. Kedua method ini (Getter dan Setter) diset dengan acces level public.
Berikut contoh method setter getter:
Pada class 1:
public class Method1 { int a=20/5; }
Pada class 2:
public class Method2 { public static void main(String[]args) { Method 1 main=new Method1(); System.out.println(Hasilnya adalah +main.a); }} Pada class GetterSetter:
public class GetterSetter { private String nim; private String nama; protected String alamat; protected String jurusan;
public String getNim(){ return nim; }
public void setNim(String nim) { this.nim=nim; } public String getNama(){ return nama; }
public void setNama(String nama) { this.nama=nama; }
public String getAlamat(){ return alamat; }
public void setAlamat(String alamat) { this.alamat=alamat; } public String getJurusan(){ return jurusan; }
public void setJurusan(String jurusan) { this.jurusan=jurusan; } } Pada class PemanggilanGetterSetter:
public class PemanggilanGetterSetter { public static void main(String[] args){ //mengeset nilai atribut objek-objek instance kelas
System.out.println(NIM: +nim1+ \tNama: +nama1+ \tAlamat: +alamat1+ \tJurusan: +jurusan1); System.out.println(NIM: +nim2+ \tNama: +nama2+ \tAlamat: +alamat2+ \tJurusan: +jurusan2); } Dalam kelas ini terdapat empat buah atribut yaitu: nim akses level: private nama akses level: private alamat akses level: protected Jurusan akses level: protected Kemudian terdapat method getter dan setter yang akses levelnya diset public. public String getNim() mengambil nilai atribut nim public String getNama() mengambil nilai atribut nama public String getAlamat() mengambil nilai atribut alamat public String getJurusan() mengambil nilai atribut Jurusan public void setNim(String nim) mengeset nilai atribut nim public void setNama(String nama) mengeset nilai atribut nama public void setAlamat(String alamat) mengeset nilai atribut alamat public void setJurusan(String jurusan) mengeset nilai atribut Jurusan Sekarang kita perhatikan kelas PemanggilanGetterSetter. Kelas ini tidak secara langsung mengakses atribut pada kelas GetterSetter. Untuk mengaksesnya digunakan method getter dan setter yang sudah disediakan di kelas GetterSetter. 6. Access Modifier Yang dimaksud dengan access modifier adalah pengaturan hak akses class maupun method. Akses ini digunakan untuk menentukan hubungan suatu unsur kelas dengan unsur kelas lainnya, menunjukkan sifat tertentu dari class, method, atau atributnya. Terdapat 4 akses yang tersedia yaitu default, public, protected, dan private. Untuk lebih jelasnya dapat dilihat dari kedua tabel berikut: No Modifier Pada Class dan Interface Pada Method dan Variabel 1 Default Dapat diakses oleh yang sepaket Diwarisi oleh subkelas di paket yang sama, dapat diakses oleh method-method yang sepaket 2 Public Dapat diakses dimanapun Diwarisi oleh subkelasnya, dapat diakses dimanapun 3 Protected Hanya dapat diakses di kelas itu Diwarisi oleh subkelasnya, dapat diakses oleh method-method yang sepaket 4 Private Tidak dapat diakses sama sekali oleh kelas lain Tidak dapat diakses dimanapun kecuali oleh method-method yang ada dalam kelas itu sendiri.
Aksesabilitas Default Public Protected Privat Dari kelas yang sama Ya Ya Ya Ya Dari sembarang kelas dalam Ya Ya Ya Tidak paket yang sama Dari sembarang kelas di luar paket Tidak Ya Tidak Tidak Dari subkelas dalam paket yang sama Ya Ya Ya Tidak Dari subkelas di luar paket Tidak Ya Ya Tidak