|
Tentang class Abstract
|
| Author |
Message |
[J2D-GOLDEN] newuser
Moderator
    
Posts: 276
Group: Moderators
Joined: Jul 2005
Status:
Offline
Reputation: 0
Last seen online: 03-03-2009, 12:22 AM
|
Tentang class Abstract
hi guys !!! mo nanya2 nih tentang abstract class.
Sebenarnya apa sich manfaat yang sebenarnya di dapat bila kita membuat sebuah Abstract class dilihat bahwa dia class yang gak dapat dipakai secara langsung dan mesti dibuatkan class turunan bila ingin dipakai.
Maksud saya kapan kita tepatnya membuat class seperti ini di dalam aplikasi yang kita buat???
Thanks b4 untuk perhatiannya.
Enjoy Your Open Source Please...
http://dany.web.id
|
|
| 25-05-2006 03:16 AM |
|
|
Thanks given by |
|
|
[J2D-GOLDEN] Paupau
Administrator
      
Posts: 3,103
Group: Administrators
Joined: Jun 2004
Status:
Offline
Reputation: 5
Last seen online: Yesterday, 04:10 PM
|
RE: Tentang class Abstract
Oh class abstract ya, ini tergantung desain program kita juga sih, lebih ke sistemnya, contohnya kita mau buat class yang generic.
Contoh gampangnya kita mau buat class-class bangun 2 dimensi seperti persegi panjang, bujur sangkar, lingkaran, dll, nah disini kan kita bisa langsung buat class persegi panjang, bujur sangkar tersebut tanpa abstract, tapi gimana misalnya kita mau buat class generic untuk kita tidak mau tau itu bangun 2 dimensi apa, tapi kita tau bahwa bangun 2 dimensi itu bisa mencetak luas dan keliling, kita bisa buat class Bangun2D yang abstract seperti ini:
public abstract class Bangun2D {
public abstract void cetakLuas();
public abstract void cetakKeliling();
}
Nah setiap bangun 2 dimensi memiliki cetak luas dan keliling, kemudian kita bentuk class-class bangun 2 dimensi implementasinya, seperti persegi panjang dan bujur sangkar :
public class PersegiPanjang extends Bangun2D {
private int panjang, lebar;
public PersegiPanjang(int p, int l) { panjang = p; lebar = l; }
public void cetakLuas() {
int luas = panjang * lebar;
System.out.println(luas);
}
public void cetakKeliling() {
int keliling = 2 * (panjang + lebar);
System.out.println(keliling);
}
}
Kemudian class BujurSangkar :
public class BujurSangkar extends Bangun2D {
private int sisi;
public BujurSangkar(int sisi) {
this.sisi = sisi;
}
public void cetakLuas() {
int luas = sisi * sisi;
System.out.println(luas);
}
public void cetakKeliling() {
int keliling = 4 * sisi;
System.out.println(keliling);
}
}
Nah disini uda ada class generic Bangun2D, kita bisa bentuk objek2 bangun 2 dimensi tersebut dan digunakan dalam program kita tidak peduli bangun 2 dimensi itu berupa persegi, bujur, lingkaran, ato yang lainnya:
public class PemakaiBangun2D {
public void terimaBangun2D(Bangun2D bangun) {
bangun.cetakLuas();
bangun.cetakKeliling();
}
public static void main(String[] args) {
Bangun2D[] bgn2d = new Bangun2D[2];
bgn2d[0] = new PersegiPanjang(10, 20);
bgn2d[1] = new BujurSangkar(5);
for (int i=0;i < bgn2d.length;i++) {
bgn2d[i].cetakLuas();
bgn2d[i].cetakKeliling();
}
// kita bisa gunakan untuk
// mempassing parameter yang berupa Bangun2D
PemakaiBangun2D pemakai = new PemakaiBangun2D();
pemakai.terimaBangun2D(bgn2d[0]);
pemakai.terimaBangun2D(new BujurSangkar(20));
}
}
Nah tergantung desain sistem loh.
Mungkin ada pertanyaan, kenapa dibuat abstract kan Bangun2D bisa aja ga abstract dan method cetakLuas() dan cetakKeliling() nya dibuat kosong, bisa kan.
Bisa aja, tapi Bangun2D kan sebenarnya class yang abstract karena belum ada implementasinya, tidak ada gunanya kalau class tersebut dibentuk, masi kosong, jadi dengan dideklarasikan abstract dan method-method tersebut abstract gunanya, untuk meyakinkan bahwa class tersebut tidak ada gunanya dibentuk harus diturunkan, dan method-method tersebut harus diimplementasikan, jadi tahu dengan pasti method apa yang harus diimplementasikan dan harus diturunkan.
Mungkin ada pertanyaan lain, kenapa tidak dibuat interface saja.
Ya jawabannya bisa juga, tapi interface dan abstract itu serupa tapi tak sama, kalau class abstract dia mempunyai sifat sama seperti class lainnya, dia bisa punya properti variabel, method-method yang ada implementasinya, dan sebagainya sama seperti class, sedangkan interface tidak, hanya method-method kosong yang mesti diimplementasikan.
Kalau contoh di GTGE, class Game itu merupakan class abstract karena tidak ada gunanya kalau class Game langsung dibentuk, harus diturunkan dan mengimplementasikan 3 hal :
public abstract class Game {
// menginisialisasi resource game
public abstract void initResources();
// mengupdate game
public abstract void update(long elapsedTime);
// menampilkan ke layar
public abstract void render(Graphics2D g);
}
Apakah class Game ini bisa dibuat interface?
Tidak, karena class Game memiliki properti dan method seperti halnya class biasa.
public abstract class Game {
// variabel
public BaseGraphics bsGraphics;
public BaseInput bsInput;
// method
public BufferedImage getImage(String imagefile) { ... }
public int playSound(String audiofile) { ... }
// abstract method
public abstract void initResources();
public abstract void update(long elapsedTime);
public abstract void render(Graphics2D g);
}
Jadi dengan mendeklarasikan class Game sebagai abstract, kita langsung tahu bahwa class Game harus diturunkan dan langsung tahu method-method apa saja yang harus diimplementasikan, dan juga tahu kalau class Game itu tidak bisa dibentuk kalau belum diturunkan.
Contoh lain, dalam Java, class Graphics merupakan class abstract, kenapa dibuat abstract?
Karena sebenarnya implementasi dari setiap method belum diketahui tergantung sistem operasi dan lain-lainnya, misalnya method Graphics untuk menggambar image:
public abstract class Graphics {
public abstract boolean drawImage(Image img, int x, int y, ImageObserver observer);
}
Disini Java belum tahu apa sistem operasi kita bagaimana menggambar image disistem kita, jadi Java membuat class Graphics sebagai abstract, kita hanya perlu tahu menggunakan drawImage untuk menggambar, implementasinya akan dibuat Java sendiri dengan membuat class turunan Graphics sesuai dengan sistem operasi dll kita.
Mengapa tidak dibuat interface, karena class Graphics juga memiliki fungsi-fungsi yang tidak abstract, seperti drawRect yang menggunakan method drawLine :
public abstract class Graphics {
public abstract void drawLine(int x1, int y1, int x2, int y2);
public void drawRect(int x, int y, int width, int height) {
// menggambar garis kotak atas
drawLine(x, y, x+width, y);
....
}
}
Jadi abstract class itu tergantung desain kita saja.
Semoga membantu
"nothing is impossible! it's just not possible yet"
|
|
| 25-05-2006 12:35 PM |
|
|
Thanks given by |
|
 |
[J2D-GOLDEN] newuser
Moderator
    
Posts: 276
Group: Moderators
Joined: Jul 2005
Status:
Offline
Reputation: 0
Last seen online: 03-03-2009, 12:22 AM
|
RE: Tentang class Abstract
Oooo begitu toch. Jadi Abstract class itu ibaratnya sebuah senjata yang telah disiapkan tapi belum tau siapa yang akan menggunakan senjata tersebut(apa anak kecil atau orang dewasa) hehehe.. just kidding mas Paupau 
Penjelasannya lengkap, buku2 yang saya baca aja kalah lengkap penjelasannya. Sekarang paham dech kenapa mesti buat class Abstract dan kapan mesti buat class Abstract tersebut. Emang lagi pengen back to basic nich mas. Biar tambah kuat akar Java-nya.
Thanks buangeett mas, nanti saya bakalan lebih banyak nanya lagi nich masalah Java fundamental. See U
Enjoy Your Open Source Please...
http://dany.web.id
|
|
| 26-05-2006 04:20 AM |
|
|
Thanks given by |
|
 |
[J2D-GOLDEN] newuser
Moderator
    
Posts: 276
Group: Moderators
Joined: Jul 2005
Status:
Offline
Reputation: 0
Last seen online: 03-03-2009, 12:22 AM
|
RE: Tentang class Abstract
pengen ralat dikit nich :
PemakaiBangun2D pemakai = new PemakaiBangun2D();
pemakai.terimaBangun2D(bangun[0]);
pemakai.terimaBangun2D(new BujurSangkar(20));
Seharusnya yang dipassing bukan >> bangun[0] <<
tapi >> bgn2d[0] <<
Keliatan bgt kalo dia array 
Sekalian mo nanya lagi nich mas, kalo memang abstract class seperti itu trus biasanya class abstract ini penggunaannya digabung dengan teknik polimorphisme. Tolong kasih pencerahan dunk mas, hubungan antara class abstract ini dengan polimorphisme???
Thanks, GBU
Enjoy Your Open Source Please...
http://dany.web.id
|
|
| 26-05-2006 05:16 PM |
|
|
Thanks given by |
|
 |
[J2D-GOLDEN] Paupau
Administrator
      
Posts: 3,103
Group: Administrators
Joined: Jun 2004
Status:
Offline
Reputation: 5
Last seen online: Yesterday, 04:10 PM
|
RE: Tentang class Abstract
Hehe no problem, kalo ada yang mau tanya2 bole aja, belum tentu saya bisa jawab loh, tapi kalo mau sharing2 ilmu tentu dipersilahkan 
Oh iya itu silap dikit, ga jadi ponten 100 deh 
Polymorphism ya, oke oke, polymorphism itu kan konsep OOP tentang banyak bentuk (poly = banyak, morphism = bentuk).
Disini banyak bentuk maksudnya bahwa objek2 yang dasarnya sama tapi bertindak/bertingkah laku berbeda-beda.
Kalo dalam dunia nyata misalnya, ada class abstract mahkluk hidup, disebut abstract karena belum tau wujudnya, nah mahkluk hidup punya method untuk bergerak yang masih abstract belum tau gimana geraknya.
Kemudian ada class manusia turunan mahkluk hidup, dan ada juga class burung turunan mahkluk hidup, manusia disuruh bergerak sudah barang tentu jalan, sedangkan burung disuruh bergerak terbang deh dia.
Jadi walaupun dasarnya sama2 class abstract mahkluk hidup tapi manusia disuruh bergerak akan berjalan dan burung disuruh bergerak akan terbang, kecuali manusianya superman bisa terbang juga hehe.
Itu dia disebut dengan polymorphism, objek yang sama2 mahkluk hidup tapi method bergeraknya beda gitu loh.
Sekarang kembali ke class diatas, Bangun2D dan class turunannya PersegiPanjang dan BujurSangkar.
Bangun2D mempunyai method abstract cetakLuas, di persegi cetak luas diimplementasikan dengan panjang * lebar, sedangkan di bujur sangkar diimplementasikan sisi * sisi, ini disebut dengan polymorphism :
Bangun2D[] bgn2d = new Bangun2D[2];
bgn2d[0] = new PersegiPanjang(10, 20);
bgn2d[1] = new BujurSangkar(5);
for (int i=0;i < bgn2d.length;i++) {
bgn2d[i].cetakLuas(); // sama2 bangun 2d tapi persegi p x l, bujur s x s
bgn2d[i].cetakKeliling();
}
Oke itu aja, semoga membantu
"nothing is impossible! it's just not possible yet"
|
|
| 26-05-2006 11:01 PM |
|
|
Thanks given by |
|
 |
[J2D-GOLDEN] newuser
Moderator
    
Posts: 276
Group: Moderators
Joined: Jul 2005
Status:
Offline
Reputation: 0
Last seen online: 03-03-2009, 12:22 AM
|
RE: Tentang class Abstract
ok dech seep, bisa jadi acuan juga kan nich thread buat yang baru belajar java dengan segala konsep OOP-nya 
Berarti objek bgn2d[] di atas telah menerapkan konsep Polymorphism yach. Dengan memanggil method2 override di atas.Mmm... tapi saya juga sering kali melihat bentuk yang seperti ini misalnya :
Bangun1 bgn2d = new Bangun1();
Bangun2 bgn3d; = new Bangun2();
bgn2d.cetakKeliling();
bgn2d = bgn3d;
bgn2d.tampilkanRumus(); //method dari class Bangun2
Yang di atas ini cuma contoh aja.
Nach saya kira yang seperti ini yang Polymorphism, maksud saya objek bgn2d akan mengacu pada sifat2 yang dipunyai oleh objek bgn3d. Mas Paupau perbedaannya apa dunk dengan contoh yang mas Paupau kasih?
thanks...
Enjoy Your Open Source Please...
http://dany.web.id
|
|
| 27-05-2006 04:42 AM |
|
|
Thanks given by |
|
 |
cimot
Super Moderator
     
Posts: 813
Group: Super Moderators
Joined: Apr 2005
Status:
Offline
Reputation: 0
Last seen online: 13-05-2009, 12:38 AM
|
RE: Tentang class Abstract
waduh bagus sekali ini pertanyaan2 om newuser
ayo siksa trus om paupau dgn pertanyaan2 basic fundamental
boro-boro polymorphism.. abstract aja gua baru tau pas baca thread ini hahahha...
*create creativity from incapability*
|
|
| 27-05-2006 04:24 PM |
|
|
Thanks given by |
|
 |
[J2D-GOLDEN] Paupau
Administrator
      
Posts: 3,103
Group: Administrators
Joined: Jun 2004
Status:
Offline
Reputation: 5
Last seen online: Yesterday, 04:10 PM
|
RE: Tentang class Abstract
Itu maksud kode programnya apa ya mas?
Kurang ngertos gw :
Bangun1 bgn2d = new Bangun1(); // ini class Bangun1
Bangun2 bgn3d = new Bangun2(); // ini class Bangun2
// hubungannya gimana? apakah Bangun2 extends Bangun1?
// apakah Bangun1 extends BangunA, Bangun2 extends BangunA?
bgn2d.cetakKeliling();
bgn2d = bgn3d; // ini opo mene? Bangun1 koq bisa jadi Bangun2?
// ini lebih ga ngerti, apakah Bangun1 tidak punya tampilkanRumus()?
// kalo tidak, tampilkanRumus() itu dapat darimana??
// kalo ada, apa anehnya??
bgn2d.tampilkanRumus(); // method dari class Bangun2
Yang jelas polymorphism itu menyatakan bahwa objek2 yang dasarnya sama tapi methodnya bekerja berbeda, ini konsep dari method overriding punya, contoh gampangnya:
public class Dasar {
public void cetak() {
System.out.println("Dasar");
}
}
public class Turunan extends Dasar {
public void cetak() { // overriding method
System.out.println("Turunan");
}
}
public class ContohPolymorphism {
public static void main(String[] args) {
Dasar a = new Dasar();
Dasar b = new Turunan();
a.cetak(); // menghasilkan "Dasar"
b.cetak(); // menghasilkan "Turunan"
// wujud polymorphism
// sama2 class Dasar, tapi method cetak() bertindak berbeda
}
}
"nothing is impossible! it's just not possible yet"
|
|
| 29-05-2006 12:23 AM |
|
|
Thanks given by |
|
 |
[J2D-GOLDEN] newuser
Moderator
    
Posts: 276
Group: Moderators
Joined: Jul 2005
Status:
Offline
Reputation: 0
Last seen online: 03-03-2009, 12:22 AM
|
RE: Tentang class Abstract
Sorry baru bisa online lagi, Dengan mengucap syukur kepada Tuhan karena sampai sekarang masih diselamatkan dari bencana gempa. Tidak lupa juga turut berbela sungkawa pada saudara2ku yang menjadi korban jiwa dalam bencana tersebut.
Ok dech back to topic, codenya mas paupau dipermak dikit nich :
public class Dasar {
public void cetak() {
System.out.println("Dasar");
}
}
public class Turunan extends Dasar {
public void cetak() { // overriding method
System.out.println("Turunan");
}
}
public class ContohPolymorphism {
public static void main(String[] args) {
Dasar a = new Dasar();
Turunan b = new Turunan();
a = b;
a.cetak(); // menghasilkan "Turunan"
b.cetak(); // menghasilkan "Turunan"
}
}
Kenapa a.cetak() ==> menghasilkan ==> "Turunan" ???
Kalo yang saya baca2 di buku sich karena pada saat kondisi tersebut, Java tidak lagi dapat mengenali referensi tiap2 objek dari class asalnya dan pemberian nilai bukan lagi pada saat kompilasi tapi pemberian nilai diberikan pada saat program berjalan. Nach ini kan bahasa buku, bikin kepala mumet ..hehehe...
Hal ini bisa terjadi karena Java mendukung polymorphism, saya sendiri masih binun nich(lebih ngerti ke abstract class-nya).
@om Cimot
om Cimot dach sembuh nich, ayo2 kita ramaikan forum diskusi Indonesia, kenapa berdiskusi??? kalo gw alasannya karena gw gak ngerti baca tutorial java yang bahasa inggris..wuakkakakakak
Enjoy Your Open Source Please...
http://dany.web.id
|
|
| 30-05-2006 10:26 PM |
|
|
Thanks given by |
|
 |
[J2D-GOLDEN] Paupau
Administrator
      
Posts: 3,103
Group: Administrators
Joined: Jun 2004
Status:
Offline
Reputation: 5
Last seen online: Yesterday, 04:10 PM
|
RE: Tentang class Abstract
Wah mas newuser lagi dilanda gempa koq bisa online lagi nih, bukannya lagi siaga 1 tu jogja n sekitarnya?
Oke lanjut lagi:
Kenapa a.cetak() ==> menghasilkan ==> "Turunan" ???
Ya karena:
Dasar a = new Dasar();
Turunan b = new Turunan();
a = b; // --> this one!
a.cetak(); // menghasilkan "Turunan"
a disitu merupakan objek dari class Turunan karena b adalah class turunan.
a ato b itu hanyalah penamaan untuk alamat di memori (identifier), objek sebenarnya dibuat dimemori ketika dipanggil kata new, begitu di new kan, ada objek dimemori, nah mau ditampung dinama apa, diatas dibuat a = b, b mengacu pada referensi objek class Turunan (b = new Turunan()), jadi begitu a = b, ya a mengacu pada objek yang sama dengan objek b, sama-sama objek turunan, a.cetak() tentu saja menghasilkan turunan.
Sip sip, ramaikan forum Indo!
"nothing is impossible! it's just not possible yet"
|
|
| 01-06-2006 11:56 PM |
|
|
Thanks given by |
|
 |
[J2D-GOLDEN] newuser
Moderator
    
Posts: 276
Group: Moderators
Joined: Jul 2005
Status:
Offline
Reputation: 0
Last seen online: 03-03-2009, 12:22 AM
|
RE: Tentang class Abstract
seep2 dech sekarang jadi nyambung lagi nich. Udach gak penasaran lagi dech ama polymorphism dan kaitannya ama class abstract.
Berarti ibaratnya objek2 itu ibarat kopi, udach dibikin kopinya, tinggal mau dikasih siapa tuch kopi, hehehe...
penasaran solved.
Besok2 kita lanjut lagi dech dengan pertanyaan2 yang lainnya
Enjoy Your Open Source Please...
http://dany.web.id
|
|
| 02-06-2006 01:28 AM |
|
|
Thanks given by |
|
 |
cimot
Super Moderator
     
Posts: 813
Group: Super Moderators
Joined: Apr 2005
Status:
Offline
Reputation: 0
Last seen online: 13-05-2009, 12:38 AM
|
RE: Tentang class Abstract
*create creativity from incapability*
|
|
| 02-06-2006 08:26 AM |
|
|
Thanks given by |
|
 |
[J2D-GOLDEN] newuser
Moderator
    
Posts: 276
Group: Moderators
Joined: Jul 2005
Status:
Offline
Reputation: 0
Last seen online: 03-03-2009, 12:22 AM
|
RE: Tentang class Abstract
yup newuser udach bisa coding lagi nich, meski masih was2 karena masih ada gempa2 susulan.
wew good idea om Cimot, banyak sekali pemula yang mengeluhkan penjelasan dari buku lokal sedangkan buku2 dgn bhs inggris kadang mereka kesulitan karena keterbatasan bahasa. Buku2 lokal kekurangannya juga tidak lengkapnya contoh soal J2SE(full package), tidak seperti buku2 luar yang gak tanggung2 kalo buat buku 
ps : om Cimot nanti malam gw kirim email yach, ada bug yang sangat mengganggu di MySQLNewUser nich.
Enjoy Your Open Source Please...
http://dany.web.id
|
|
| 02-06-2006 02:08 PM |
|
|
Thanks given by |
|
 |