15
Java Object Oriented Programming HADDAD SAMMIR 22 Oktober 2012 Object Oriented Programming Object Oriented Programming atau yang disingkat sebagai OOP merupakan suatu metode pemprograman yang melihat masalah sebagai sebuah “object ”. Objek merupakan suatu entitas yang memiliki attribute dan method. Attribute adalah informasi yang menggambarkan karakteristik sebuah objek, sedangkan method adalah serangkaian aksi yang ditempuh untuk mendapatkan informasi dari objek tersebut. Sebagai contoh kita bisa melihat persegi sebagai sebuah objek. Persegi da- pat dicirikan dengan memiliki attribute sisi, berjumlah empat buah sama pan- jang. Dari informasi sisi tersebut kita dapat menarik informasi berupa luas dan keliling dengan melakukan serangkaian aksi / metoda tertentu. Luas bisa kita dapatkan dengan mengkuadratkan sisi persegi, sedangkan keliling didapat dengan menjumlahkan keempat sisi persegi. Sisi, luas dan keliling dari sudut pandang OOP dapat kita sebut sebagai attribute, sedangkan aksi atau metoda dapat kita pandang sebagai method. Figure 1: Objek Persegi Attribute dan method merupakan pendekatan yang berbasis OOP untuk mendefinisikan masalah. Pada kasus persegi, kita dapat mendefinisikan objek persegi sebagai berikut: 1. Attribute (a) Sisi (b) Luas 1

Java Object Oriented Programming

Embed Size (px)

DESCRIPTION

Fitur-fitur berorientasi objek dalam bahasa pemprograman Java.

Citation preview

Page 1: Java Object Oriented Programming

Java Object Oriented Programming

HADDAD SAMMIR

22 Oktober 2012

Object Oriented ProgrammingObject Oriented Programming atau yang disingkat sebagai OOP merupakansuatu metode pemprograman yang melihat masalah sebagai sebuah “object”.Objek merupakan suatu entitas yang memiliki attribute dan method. Attributeadalah informasi yang menggambarkan karakteristik sebuah objek, sedangkanmethod adalah serangkaian aksi yang ditempuh untuk mendapatkan informasidari objek tersebut.

Sebagai contoh kita bisa melihat persegi sebagai sebuah objek. Persegi da-pat dicirikan dengan memiliki attribute sisi, berjumlah empat buah sama pan-jang. Dari informasi sisi tersebut kita dapat menarik informasi berupa luasdan keliling dengan melakukan serangkaian aksi / metoda tertentu. Luas bisakita dapatkan dengan mengkuadratkan sisi persegi, sedangkan keliling didapatdengan menjumlahkan keempat sisi persegi. Sisi, luas dan keliling dari sudutpandang OOP dapat kita sebut sebagai attribute, sedangkan aksi atau metodadapat kita pandang sebagai method.

Figure 1: Objek Persegi

Attribute dan method merupakan pendekatan yang berbasis OOP untukmendefinisikan masalah. Pada kasus persegi, kita dapat mendefinisikan objekpersegi sebagai berikut:

1. Attribute

(a) Sisi

(b) Luas

1

Page 2: Java Object Oriented Programming

(c) Keliling

2. Method

(a) Mencari luas

(b) Mencari keliling

Kita bisa menambahkan lebih banyak attribute dan method tergantung kepadamasalah yang ingin diselesaikan. Pemberian attribute dan method sepenuhnyamerupakan hasil analisa kita terhadap masalah.

ClassClass dalam terminologi OOP adalah cetak biru sebuah objek. Class menghim-pun attribute (dalam konteks ini dapat disebut sebagai data field) dan methodsebagai sebuah spesifikasi untuk menentukan bagaimana sebuah objek akandibuat. Proses pembuatan objek dari sebuah class disebut sebagai instantia-tion, sedangkan objek hasil instantiation disebut instance.

Kita dapat menganalogikan mekanisme class dengan mekanisme pembuatanmobil. Cetak biru sebuah mobil dapat dianalogikan sebagai class, sedangkanmobil yang dibuat berdasarkan cetak biru tadi dianalogikan sebagai instance.Jadi instance adalah objek aktual yang dibangun berdasarkan spesifikasi sebuahclass.

Dalam Java, class didefinisikan seperti listing kode berikut:

1 public class persegi {2 // attribute3 public int sisi;4 public int luas;5 public int keliling;6 // method7 public int mencariLuas() {8 luas = sisi*sisi;9 return luas;

10 }11 public int mencariKeliling() {12 keliling = sisi+sisi+sisi+sisi;13 return keliling;14 }15 }

Listing 1: persegi.java

Kode Java diatas menggambarkan spesifikasi class persegi yang memiliki at-tribute sisi, luas dan keliling serta method mencariLuas() dan mencariKeliling()

2

Page 3: Java Object Oriented Programming

yang berisi langkah-langkah untuk mendapatkan nilai luas dan keliling tersebut.Spesifikasi inilah yang akan digunakan untuk membentuk instance persegi atauobjek aktual dari persegi dalam proses instantiation.

InstanceProses instantiation dilakukan dengan menggunakan kata kunci “new ” yang se-cara literal berarti “baru”. Penggunaan kata kunci new bertujuan menciptakanobjek baru berdasarkan spesifikasi class yang digunakan. Perhatikan listing kodeberikut:

1 public static void main(String[] args){2 // instantiation3 // Ciptakan objek baru "p", dgn spesifikasi class persegi4 persegi p = new persegi();5 // set attribute "sisi" dengan nilai 56 p.sisi = 5;7 // Panggil method mencariLuas(), Output = 5^2 = 258 System.out.println("Luas persegi: "+p.mencariLuas());9 }

Listing 2: Proses instantiation

Kode di atas menggambarkan pembuatan object yang diidentifikasikan se-bagai “p” menggunakan spesifikasi dari class persegi sehingga objek “p” memilikiattribute dan method yang dihimpun dalam class persegi seperti attribute sisi,luas dan keliling serta method mencariLuas() dan method mencariKeliling().Untuk mengakses attribute dan method kita menggunakan separator “.”. 1

ConstructorConstructor adalah sebuah method spesial yang berfungsi untuk menginisial-isasi sebuah objek yang baru saja dibuat. Constructor dapat digunakan untukmemberikan nilai kepada attribute pada saat objek baru dibuat. Membuat con-structor tidaklah bersifat wajib dalam pemprograman Java, sebuah class bolehmemiliki atau tidak memiliki constructor. Constructor dibuat dengan mengikutiaturan berikut:

1. Constructor memiliki nama yang sama dengan nama class

2. Constructor tidak memiliki return value, tidak pula void1Akses http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.11 untuk infor-

masi lebih lanjut tentang separator dan operator.

3

Page 4: Java Object Oriented Programming

1 public class demo {2 int data1;3 int data2;4 // constructor5 demo(int a){6 // inisialisasi attribute data17 this.data1 = a;8 }9 public static void main(String[] args){

10 // memberikan argumen bernilai 10 pd constructor11 demo d = new demo(10);12 System.out.println("data1: "+d.data1);13 System.out.println("data2: "+d.data2);14 }15 }

Listing 3: demo.java

Constructor OverloadingConstructor overloading adalah suatu teknik dalam pemprograman Java dimanasebuah class dapat memiliki lebih dari satu constructor. Tiap-tiap constructordibedakan dari jumlah parameternya. Hal tersebut memungkinkan sebuah classdiinisialisasi dengan lebih dari satu cara. Perhatikan contoh kode berikut:

4

Page 5: Java Object Oriented Programming

1 public class demo {2 int data1;3 int data2;4 // constructor5 demo(int a){6 // inisialisasi attribute data17 this.data1 = a;8 }9 // constructor overloading

10 demo(int a, int b){11 // inisialisasi attribute data112 this.data1 = a;13 // inisialisasi attribute data214 his.data2 = b;15 }16 public static void main(String[] args){17 // memberikan argumen bernilai 10 pd constructor18 demo d = new demo(10);19 System.out.println("data1: "+d.data1); // 1020 System.out.println("data2: "+d.data2); // 021 // gunakan constructor dengan dua parameter22 demo d2 = new demo(5, 10);23 System.out.println("data1: "+d2.data1); // 524 System.out.println("data2: "+d2.data2); // 1025 }26 }

Listing 4: demo.java

Main MethodMain method adalah method yang pertama sekali diakses oleh Java Runtimejika kita menjalankan aplikasi Java. Melalui method inilah method-method laindipanggil. Tidak setiap class Java harus memiliki main method, hanya class Umumnya Ap-

likasi Java ter-susun dalamsekumpulan li-brary / modulsehingga tidakmemerlukanmain method.

utama / program utama yang harus memiliki method ini. Jika kita mencobamenjalankan aplikasi Java yang tidak memiliki main method, maka Java akanmemberikan laporan kesalahan “Main method not found”. Konstruksi formalmain method adalah seperti listing kode di bawah:

1 public static void main(String[] args){2

3 }

Listing 5: Main method

5

Page 6: Java Object Oriented Programming

Static KeywordKeyword “static” (seperti yang digunakan pada deklarasi main method di atas 5)adalah keyword yang menandakan bahwa attribute atau method bersangkutanadalah milik class sehingga attribute dan method tersebut dapat diakses tanpaperlu melakukan instantiation. Perhatikan listing kode berikut:

1 public class defstatic{2 // static attribute3 public static int angka = 10;4 // static method5 public static void methodStatic(){6 System.out.println("Method Static");7 }8 public static void main(String[] args) {9 // Attribute angka, dipanggil tanpa instantiation

10 System.out.println(defstatic.angka);11 // Method static tanpa instantiation12 defstatic.methodStatic();13 }14 }

Listing 6: defstatic.java

Static keyword juga sering digabungkan dengan keyword “final” pada at-tribute untuk menjadikan attribute tersebut sebagai konstanta.

1 public static final int angka = 10;

Listing 7: Keyword static dan final

InheritanceInheritance dapat diartikan sebagai pewarisan sifat. Dalam konteks OOP, in-heritance berarti sebuah cara untuk memanfaatkan kode dari sebuah class yangsudah ada. Dengan inheritance kita dapat mengurangi pengulangan pengetikankode dengan memanfaatkan kode-kode yang sudah ada. Inheritance dilakukandengan menciptakan class (yang disebut sebagai child class) berdasarkan classyang sudah ada (parent class). Child class akan mewarisi attribute dan methodyang dimiliki parent class sehingga kodenya tidak perlu ditulis ulang. Keuntun- Attribute

dan methodyang memilikiaccess mod-ifier privateatau tanpamodifier tidakdiwariskan.

gan inheritance adalah sebagai berikut:

1. Reusability: Fasilitas untuk memanfaatkan kode yang sudah ada, tanpaharus membuatnya kembali.

6

Page 7: Java Object Oriented Programming

2. Extensibility: Fasilitas untuk memperluas / mengembangkan sifat parentclass berdasarkan kebutuhan baru yang didefinisikan pada child class.

3. Data hiding: Parent class dapat menjaga beberapa data menjadi privatesehingga tidak diwariskan kepada child class.

Asumsikan kita hendak menciptakan class kubus. Class kubus berbagi ke-samaan dengan class persegi (Lihat class persegi diatas 1) yaitu sama-samamemiliki karakteristik sisi (rusuk), luas dan keliling namun kubus memiliki cirilagi yang membedakankannya dengan persegi yaitu volume. Selain itu metodadalam mendapatkan luas dan keliling pun berbeda tapi tetap dalam kerangkaspesifikasi yang sama.

Class kubus kita rumuskan memiliki spesifikasi sebagai berikut:

1. Attribute

(a) Sisi

(b) Luas

(c) Keliling

(d) Volume

2. Method

(a) Mencari luas

(b) Mencari keliling

(c) Mencari volume

Karena class kubus yang hendak kita buat berbagi karakteristik yang sama den-gan class persegi, maka kita bisa memanfaatkan kode-kode yang ada pada classpersegi dengan melakukan inheritance. Perhatikan kode class kubus berikut:

7

Page 8: Java Object Oriented Programming

1 public class kubus extends persegi {2 // menambahkan attribute3 public int volume;4 // method overriding5 public int mencariLuas() {6 luas = 6*sisi*sisi;7 return luas;8 }9 // method overriding

10 public int mencariKeliling() {11 keliling = 12*sisi;12 return keliling;13 }14 // menambahkan method15 public int mencariVolume() {16 volume = sisi*sisi*sisi;17 return volume;18 }19 }

Listing 8: kubus.java

Pada kode class kubus di atas kita bisa melihat bahwa attribute sisi, luasdan keliling tidak didefinisikan karena sudah didefinisikan pada parent class-nya yaitu class persegi (perhatikan class persegi 1) sehingga class kubus jugamewarisi attribute yang sama. Method yang dimiliki oleh class persegi jugaditurunkan kepada class kubus, namun karena langkah yang diperlukan un-tuk mencari luas dan keliling pada kubus berbeda dengan persegi, maka kitamelakukan overriding method mencariLuas() dan mencariKeliling(). Methodoverriding adalah fitur yang memungkinkan child class melakukan implementasiberbeda dari method yang diwariskan kepadanya. Class kubus juga memper-luas spesifikasi class persegi dengan menambahkan attribute volume dan methodmencariVolume().

PolymorphismPolymorph adalah kemampuan sebuah objek untuk mengambil banyak ben-tuk. Dalam konteks Java, polymorph adalah kemampuan sebuah method untukmelakukan aksi berbeda-beda sesuai dengan objek yang sedang diperankannya.Contohnya sebuah method mencariLuas() yang berfungsi untuk mencari luassebuah bangun datar dapat melakukan aksi s2jika persegi atau p× l jika persegipanjang atau (a× t)÷ 2 jika segi tiga.

Polymorph dibuat dengan memanfaatkan inheritance dari class, abstractclass atau dengan mengimplementasikan interface. Class, abstract class dan in-terface harus menyediakan serangkaian method yang nantinya akan di-override

8

Page 9: Java Object Oriented Programming

oleh child class atau didefinisikan oleh class yang mengimplementasikan inter-face, sehingga method mencariLuas() akan memiliki aksi berbeda untuk tiap-tiap child class. Perhatikan kode berikut:

1 public class Br {2 // metohd tanpa implementasi3 // method ini yang menyediakan polymorph4 public void mencariLuas(){};5 }

Listing 9: Br.java

1 public class persegi extends Br {2 public int sisi;3 // constructor4 persegi(int sisi){5 this.sisi = sisi;6 }7 // implementasi secara "persegi"8 public void mencariLuas() {9 System.out.println("Luas persegi: "+sisi*sisi);

10 }11 }

Listing 10: persegi.java

1 public class persegiPanjang extends Br {2 public int p;3 public int l;4 persegiPanjang(int panjang, int lebar) {5 this.p = panjang;6 this.l = lebar;7 }8 // implementasi secara "persegi panjang"9 public void mencariLuas() {

10 System.out.println("Luas Persegi Panjang: "+p*l);11 }12 }

Listing 11: persegiPanjang.java

9

Page 10: Java Object Oriented Programming

1 public class obj {2 public static void main(String[] args){3 System.out.println("Persegi:");4 Br p = new persegi(5);5 getLuas(p);6 System.out.println();7 System.out.println("Persegi panjang:");8 Br pp = new persegiPanjang(4,5);9 getLuas(pp);

10 }11 public static void getLuas(Br b){12 // polymorph, jika objek b adalah persegi,13 // maka method mencariLuas() milik persegi14 // yang dipanggil, begitu pula jika persegi15 // panjang16 b.mencariLuas();17 }18 }

Listing 12: obj.java

Empat kode diatas menggambarkan bagaimana polymorphism dilakukan.Class Br 9 merupakan parent class yang berisi method mencariLuas() tanpaimplementasi untuk nantinya akan di-override pada class turunannya yaitu classpersegi 10 dan class persegiPanjang 11. Masing-masing child class dari parentclass Br mengimplementasikan method mencariLuas() sesuai dengan metodamencari luas untuk objek yang diperankannya.

Class obj 12 adalah class utama yang memiliki main method. Pada class inijuga terdapat method getLuas() yang membutuhkan parameter berupa objectbertipe Br. Method getLuas() ini hanya memanggil method mencariLuas() dariobject yang di-input-kan kepadanya sehingga akan memberikan output sesuaidengan objek tersebut. Dari sini kita bisa melihat bahwa method mencariLuas()menyediakan antarmuka seragam, sehingga kita dapat dengan mudah mengikutigaya sebuah pemprograman dan sangat membantu dalam menciptakan aplikasimodular.

Abstract ClassClass yang kita buat sebelum ini adalah class yang bersifat kongkrit, yaituclass yang dapat di-instantiation-kan. Ada kalanya kita tidak menginginkansebuah class dapat di-instantiation-kan misalnya dalam kasus polymorphism,maka abstract class adalah solusinya. Abstract class dibuat dengan keywordabstract. Abstract class juga boleh memiliki abstract method. Abstract methodadalah method yang tidak memiliki bagian spesifikasi / implementasi (tidakmemiliki bagian {}). Tiap child class diharuskan mendefinisikan spesifikasinya

10

Page 11: Java Object Oriented Programming

sendiri.

1 public abstract class abstractBr {2 // abstract method3 public abstract void mencariLuas();4 }

Listing 13: abstractBr.java

InterfaceInterface adalah tipe abstract (mirip dengan abstract class yang tidak dapat di-instantiation-kan) bertujuan menyediakan sekumpulan antar muka yang harusdiimplementasikan oleh class. Interface dapat berisi method tanpa spesifikasidan konstanta (variabel dideklarasikan dengan static dan final). Perhatikankode berikut:

1 public interface interfaceBr{2 // method mencariLuas() tanpa spesifikasi3 public void mencariLuas(int a, int t);4 }

Listing 14: interfaceBr.java

1 public class segitiga implements interfaceBr{2 // implementasikan method mencariLuas()3 public void mencariLuas(int a, int t){4 System.out.println("Luas segitiga: "+(a*t)/2);5 }6 public static void main(String[] args){7 segitiga st = new segitiga();8 st.mencariLuas(4,5);9 }

10 }

Listing 15: segitiga.java

PackageJava package adalah mekanisme pengelompokan class-class kedalam sebuahnamespace (sebuah pengenal untuk sekumpulan class). Java package dapatdikompres menjadi sebuah Jar file (Java archive). Package dibuat dengan meng-gunakan kata kunci “package” seperti yang terlihat pada kode berikut:

11

Page 12: Java Object Oriented Programming

1 package org.haddad.twod;

Listing 16: Penggunaan statement package

Perhatikan namespace pada kode di atas, titik “.” yang berada pada names-pace org.haddad.twod adalah penanda pemisah direktori sehingga setiap classyang dikelompokkan pada package ini harus berada di dalam direktori org\had-dad\twod. Konvensi peletakkan direktori ini harus diikuti, jika tidak Java tidakakan menemukan class kita. Buat direk-

tori org, didalamnya buatlagi direktorihaddad, laludi dalam di-rektori haddadbuat lagi di-rektori twod.Didalam di-rektori twodinilah classJava yangberada dalampackage inidiletakkan.

Untuk menggunakan package dalam aplikasi Java maka kita harus meng-import class yang kita butuhkan dengan mencantumkan nama package-nyaseperti pada contoh berikut:

1 import org.haddad.twod.persegi;

Listing 17: Penggunaan statement import

Statement di atas berarti kita akan meng-import class persegi yang beradadi dalam package org.haddad.twod.

Mengkompress package menjadi Java Archive (Jar) dapat dilakukan dengancara berikut:

jar -cf mylib.jar *.class

Listing 18: Menciptakan file Jar

Listing diatas menggambarkan cara mengumpulkan dan mengkompres se-mua file class yang berada pada direktori lib\ dengan nama lib.jar.

Access ModifierAccess modifier berisi sekumpulan modifier (penanda yang dapat mengubahsifat) akses terhadap sebuah method atau attribute. Metoda ini disebut jugaencapsulation. Pada listing kode sebelumnya kita juga sudah menemukan accessmodifier “public” yang berada pada deklarasi method dan attribute yang berartibahwa method beserta attribute tersebut dapat diakses secara global. Dalamkonteks Java, access modifier adalah sebagai berikut:

Modifier Class Package Subclass Worldpublic Y Y Y Y

protected Y Y Y Ttanpa modifier Y Y T T

private Y T T T

Table 1: Tabel Access Modifier (Y = Ya, T = Tidak)

12

Page 13: Java Object Oriented Programming

Tabel di atas memperlihatkan bagaimana access modifier mempengaruhiaksessibilitas method atau attribute dari class tempatnya berada, dalam sebuahpackage, pada sub class dan terakhir dari dunia (dapat diakses global).

ClasspathClassspath adalah parameter yang digunakan baik melalui commandline ataupunenvironment variable yang memberitahu Java Vitual Machine atau Java Com-piler untuk menemukan class-class / package yang kita definisikan.

Asumsikan kita mempuanya sebuah class utama dan sekumpulan librarypada direktori lib\. Maka untuk menjalankan aplikasi tersebut kita perlu mem-beritahu Java Virtual Machine lokasi direktori lib\. Untuk melakukan hal terse-but kita menggunakan parameter -cp saat memanggil Java Virtual Machine atauJava Compiler.

1 public class app1 {2 public static void main(String[] args){3 // lokasi class lib1 berada pada4 // direktori lib\5 // ~> lib\lib1.class6 lib1 l = new lib1();7 l.my_function();8 }9 }

Listing 19: app1.java

java -cp lib; app1

Listing 20: Menggunakan parameter -cp (classpath)

Listing 20 diatas memberi tahu Java Virtual Machine untuk mengakses classlib1 yang dipanggil pada listing kode 19 pada direktori lib\. Jika class kitatersimpan dalam file Jar, maka classpath harus diset dengan memasukkan pathlengkap ke file Jar tersebut seperti contoh berikut:

java -cp mylib.jar; app2

Listing 21: Menggunakan parameter -cp (classpath) terhadap file Jar

Quo Vadis?Pemprograman Java pada dasarnya cukup kompleks. Apa yang kita bahasdalam artikel ini hanyalah pengantar untuk menggugah kita akan aspek yang

13

Page 14: Java Object Oriented Programming

sering terlupakan dari pemprograman Java. Saya pikir hal berikutnya yangharus kita latih adalah kemampuan untuk membaca Javadoc karena gaya pem-programan Java adalah berbasis library. Pengetahuan terhadap sebuah librarysangat vital dalam pemprograman Java. []

14

Page 15: Java Object Oriented Programming

Haddad Sammir lahir di Padang, 24 Maret 1987, seorang entusias teknologi.Menyukai pemprograman komputer dan perekayasaan perangkat lunak.

15