Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Class dan Object Beberapa orang pada awalnya, biasanya tidak memperhatikan perbedaan antara class dan object. Object adalah sekumpulan software yang terdiri dari variable dan method-method terkait. Class adalah blueprint, atau prototype, yang mendefinisikan variable dan method-method pada seluruh object tertentu. Object saling berinteraksi dengan saling memanggil metode dari satu object ke object lainnya, disebut message. Perhatikan kode berikut : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 /*Di sini definisikan sebuah class bernama NiceGuy Disimpan sebagai file NiceGuy.java dan compile file tersebut, maka akan didapat file bernama NiceGuy.class*/ public class NiceGuy { private String name; public NiceGuy(String name) { System.out.println("Instantiation of NiceGuy named " + name); this.name=name; } public void sayHello() { System.out.println("Hello object oriented world..."); } public void sayHelloOutLoud() { System.out.println("HELLOOO OBJECT ORIENTED WORLD...."); } public String getName( ) { return name; } } Gambar 1. Definisi class NiceGuy 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 /*Di sini, dibuat sebuah java application yang bernama OurFirstCode. Simpan source ini dalam file bernama OurFirstCode.java, di direktori yang sama dengan tempat disimpannya NiceGuy.java. Kemudian compile file tersebut, maka akan didapatkan file OurFirstCode.class. Lalu jalankan aplikasi ini dengan mengetikan java OurFirstCode pada command line*/ public class OurFirstCode { public static void main(String[ ] args) { NiceGuy ng= new NiceGuy (“Deitel”); ng.sayHello(); ng.sayHelloOutLoud(); //Mengembalikan nilai yang ada pada ng String NiceGuyName = ng.getName( ); System.out.println(“OH…!!!! HE’S “ + NiceGuyName.toUpperCase()); } } Gambar 2. Aplikasi Java Gambar 1 merupakan contoh pendefinisian sebuah class bernama NiceGuy. Gambar 2 merupakan kode dari sebuah aplikasi java yang bernama OurFirstCode. Pada aplikasi tersebut digunakan class NiceGuy untuk membuat objek bertipe NiceGuy. PENDEFINISIAN CLASS Sintaks dalam mendefinisikan class adalah sebagai berikut : [modifier-modifier] class namaclass [extends parentclass] [implements interface] { [deklarasi field-field] [definisi method-method] } PBO/Java/Ayuliana/Revisi 2009 1 Yang tertera didalam kurung siku bersifat optional. Dengan demikian, definisi minimal dari sebuah class bisa jadi seperti berikut : class Useless { //….mmm…. } Pada Gambar 1, dideklarasikan 1 field dan 3 method yaitu field yang bernama name dengan tipe string., secara umum sintaks untuk mendeklarasikan field adalah : type namafield; Tipe dari field bisa primitif (seperti int, boolean, float, dan sebagainya), dan bisa juga Object (seperti String, Vector, Hashtable, dan sebagainya). Method-method yang dimiliki class NiceGuy adalah 1. method sayHello() merupakan method void, 2. method sayHelloOutLoud( ) merupakan method void, 3. method getName() merupakan method non-void. Secara umum sintaks dalam pendefinisian sebuah method adalah : [modifier-modifier] return-type namamethod ( [parameter1, [parameter2],… , [parameter N] ) { [statement-statement]; } Tipe Return bisa void, tipe data primitif, atau tipe data object. Method dengan tipe return non-void harus mencantumkan statement return <something> pada akhir deklarasi method. Kata return juga dapat digunakan pada method void untuk keluar dari method tersebut. Bagian penting lain dari definisi class adalah constructor. Pendefinisian constructor dicontohkan pada baris 6-8 class NiceGuy. Constructor digunakan pada saat penciptaan objek dari sebuah class. Pendeklarasian constructor mirip dengan pendeklarasian method, dengan satu pengecualian bahwa constructor tidak mencantumkan tipe return. [modifier-modifier] namaconstructor ([parameter 1], [parameter 2], …, [parameter N]) { [statement-statement]; } Hal lain yang perlu dicatat tentang constructor adalah, nama constructor harus sama dengan class. Constructor tanpa parameter disebut default constructor. Jika constructor sama sekali tidak dideklarasikan, maka compiler secara otomatis akan membuatkan sebuah default constructor. Pada Gambar 2, aplikasi OurFirstCode memanfaatkan class NiceGuy untuk menciptakan sebuah objek bertipe NiceGuy dimemori. Setelah itu, reference ng dapat digunakan untuk memanggil methodmethod (mengirimkan pesan kepadanya) atau mengakses field-field dari objek yang bersangkutan. Reference adalah seperti alamat rumah sedangkan objek adalah rumahnya. dengan mengetahui alamat, maka dapat mencapai rumah yang dimaksud. INHERITANCE Salah satu topik penting dalam OOP adalah inheritance (pewarisan sifat). Dengan inheritance, pengembangan software dapat bekerja lebih efisien dan lebih cepat. Berkat inheritance dapat menggunakan definisi class yang pernah dibuat sebelumnya untuk membuat class-class lain yang menyerupai class tersebut. Perhatikan contoh berikut : 1 public class KattWorld { 2 public static void main (String args[]) { 3 Katt k = new Katt(); 4 k.speak(); 5 Anggora a = new Anggora(); 6 a.speak(); a.jump(); 7 Siam s = new Siam(); PBO/Java/Ayuliana/Revisi 2009 2 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 s.speak(); } } class Katt { public Katt() { system.out.println(“Katt Constructor”); } public void speak() { system.out.println(“Miaww…”); } } class Anggora extends Katt { public void jump() { system.out.println(“Crash…Boom…”); } } class Siam extends Katt { public Siam() { system.out.println(“Siam Constructor”); } public void speak() { system.out.println(“Mmurrrr…mmurrrr…”); } Gambar 3. Kisah kucing } Hal pertama yang harus diperhatikan dari gambar 3 adalah cara melakukan inheritance. Contoh diatas mempunyai satu class bernama Katt. Kemudian dibuat class lainnya yang mempunyai sifat seperti Katt, tetapi memiliki keunikan sendiri. Contohnya adalah class Anggora, yang merupakan subclass dari Katt. Kini dapat dikatakan bahwa Katt menjadi parentclass (baseclass atau superclass) dari class Anggora. Secara umum suatu class sebagai turunan dari baseclass dapat didefinisikan dengan cara : class namaclass extends baseclass { [statement-statement]; } METHOD OVERRIDING Misalkan dibuat varian baru lain dari Katt dengan cara mengeong Murr….Murr…Murr…. varian itu diberi nama Siam. Maka Siam didefinisikan sebagai subclass dari Katt, tapi kini dilakukan metode overriding, dengan mendefinisikan ulang method speak() didalam definisi class Siam. Jika dijalankan akan menghasilkan output : Katt constructor Miaww… Katt constructor Miaww… Crash…Boom… Katt constructor Siam constructor Mmurrr…mmurrr… Sewaktu berlangsung konstruksi/instantiasi objek bertipe Siam, default constructor Katt dijalankan terlebih dahulu. Ini menunjukkan bahwa default, kecuali diminta yang lain, dari baseclass secara otomatis dijalankan terlebih dahulu sebelum constructor dari class yang bersangkutan dijalankan. PBO/Java/Ayuliana/Revisi 2009 3 THE LAST SUPER Didefinisikan dua varian baru dari Katt, yaitu Alley dan Lucifer : 1 public class KattWorldReturn { 2 public static void main (String args[]) { 3 Alley al = new Alley(2); 4 al.speak(); 5 Lucifer lucy = new Lucifer(1, “Thou shalt be killed…!!!”); 6 lucy.speak(); } 7 } 8 9 class Alley extends Katt { 10 int illnessSeverity; 11 public Alley(int sick) { 12 illnessSeverity = sick; } 13 14 public void speak() { 15 super.speak(); 16 for (int i=0; i < illnessSeverity; i++) { 17 system.out.println(“eeerrrggghh.. …<sendawa>”); } 18 } 19 } 20 21 class Lucifer extends Alley { 22 string curse; 23 public Lucifer(int sick, string cs) { 24 super(sick); 25 curse = cs; } 26 27 public void speak() { 28 super.speak(); 29 system.out.println(curse); } 30 } Gambar 4. Kisah kucing---Return Jika dijalankan akan menghasilkan output Katt constructor Miaww… eeerrrggghh.. …<sendawa> eeerrrggghh.. …<sendawa> Katt constructor Miaww… eeerrrggghh.. …<sendawa> Thou shalt be killed… : CONTOH 1 : 1 class A { 2 int i; 3 A(){ System. out. print ("constructor A Tanpa Parameter\n");} 4 A(int a){ 5 System. out. print ("constructor A Dengan Parameter\n"); 6 System. out. print ("i in A = " + a + '\n');} } 7 8 class B extends A { 9 int i; 10 B (){ System. out. print ("constructor B Tanpa Parameter\n"); } 11 PBO/Java/Ayuliana/Revisi 2009 4 12 B (int a, int b) { 13 super(b); 14 super.i = b; i = a; 15 System. out. print ("constructor B Dengan Parameter\n");} 16 void show() { 17 System. out. println("i in superclass : "+ super.i); 18 System. out. println("i in subclass : "+ i); } } 19 20 class C extends B { 21 C(){ super(3,4); 22 System. out. print ("constructor C Tanpa Parameter\n");} } 23 24 class SuperSub { 25 public static void main (String args[ ]) { 26 C SubOb = new C(); 27 B SubOb2 = new B(1,3); 28 SubOb.show(); } 29 } OUTPUT : constructor A Dengan Parameter i in A = 4 constructor B Dengan Parameter constructor C Tanpa Parameter constructor A Dengan Parameter i in A = 3 constructor B Dengan Parameter i in superclas : 4 i in subclass : 3 CONTOH 2 : 1 class A { 2 int i; 3 A(){ System. out. print ("constructor A Tanpa Parameter\n");} 4 A(int a){ 5 System. out. print ("constructor A Dengan Parameter\n"); 6 System. out. print ("i in A = " + a + '\n');} } 7 8 class B extends A { 9 int i = 6; 10 B (){ super(5); 11 super.i= i*2; 12 System. out. print ("constructor B Tanpa Parameter\n");} 13 B (int a, int b) { 14 super.i = b; i = a; 15 System. out. print ("constructor B Dengan Parameter\n");} 16 void show() { 17 System. out. println("i in superclass : "+super.i); 18 System. out. println("i in subclass : "+ i); } } 19 20 class C extends B { 21 C(){ super(); 22 System. out. print ("constructor C Tanpa Parameter\n");} } PBO/Java/Ayuliana/Revisi 2009 5 23 class SuperSub { 24 public static void main (String args[]) { 25 C SubOb = new C(); 26 B SubOb2 = new B(2,4); 27 B SubOb3 = new B(); 28 SubOb.show(); } 29 } OUTPUT : constructor A Dengan Parameter i in A = 5 constructor B Tanpa Parameter constructor C Tanpa Parameter constructor A Tanpa Parameter constructor B Dengan Parameter constructor A Dengan Parameter i in A = 5 constructor B Tanpa Parameter i in superclas : 12 i in subclass : 6 PBO/Java/Ayuliana/Revisi 2009 6