Polymorphism adalah salah satu dari tiga kemampuan yang mendasar yang dimiliki oleh OOP, setelah data abstraction dan inheritance.
Polymorphism
Melalui inheritance, kita bisa menciptakan sebuah hirarki obyek, baik simple atau kompleks sekali pun. Bayangkan hirarki kompleks seperti hirarki dunia hewan. Hirarkinya pasti berlapis-lapis, tetapi turunan sedalam apapun tetaplah seekor hewan. Polymorphism memungkinkan untuk menukar obyek dari turunan ke obyek superclass-nya. Katakan:
Animal ani = new Animal(); // variable bertipe Animal
ani = new Lion(); // sekarang bertipe Lion
Setelah baris kedua, memanggil method yang didefenisikan di Animal, akan memanggil implementasi method yang ada di Lion. Konsep OOP ini memungkinkan hasil pemanggilan method berubah/berbeda tergantung ke instance obyek mana dia direferensikan. Deklarasi di atas tidak tidak berlaku sebaliknya :
Lion lion = new Animal(); // tidak valid
Polymorphism menyediakan cara yang berbeda pada pemisahan interface dari implementasinya, untuk memasangkan ulang apa dari bagaimana. Polymorphism memberikan organisasi kode yang lebih baik dan kode menjadi lebih mudah dibaca, juga memberikan suatu kemampuan pada program untuk berkembang secara terus menerus baik pada tahap pengembangan awal ataupun pada saat ingin menambahkan kemampuan-kemampuan yang baru.
Program berikut ini mungkin akan tampak aneh. Mengapa kita secara sengaja melupakan tipe dari sebuah object ? Ini semua dapat terjadi bila kita melakukan upcast, dan menjadikannya kelihatan seperti kalau tune() secara langsung mengambil handle dari Wind sebagai sebuah argumen. Ini semua membuat sesuatu yang mendasar : Kalau kita melakukannya, kita harus menuliskan tune() yang baru untuk setiap Instrument didalam system kita. Anggap saja kita mengikuti alasan ini dan menambahkan instrument Stringed dan Brass :
//: Music2.java
// Overloading instead of upcasting
class Note2 {
private int value;
private Note2(int val) { value = val; }
public static final Note2
middleC = new Note2(0),
cSharp = new Note2(1),
cFlat = new Note2(2);
} // Etc.
class Instrument2 {
public void play(Note2 n) {
System.out.println(\"Instrument2.play()\");
}
}
class Wind2 extends Instrument2 {
public void play(Note2 n) {
System.out.println(\"Wind2.play()\");
}
}
class Stringed2 extends Instrument2 {
public void play(Note2 n) {
System.out.println(\"Stringed2.play()\");
}
}
class Brass2 extends Instrument2 {
public void play(Note2 n) {
System.out.println(\"Brass2.play()\");
}
}
public class Music2 {
public static void tune(Wind2 i) {
i.play(Note2.middleC);
}
public static void tune(Stringed2 i) {
i.play(Note2.middleC);
}
public static void tune(Brass2 i) {
i.play(Note2.middleC);
}
public static void main(String[] args) {
Wind2 flute = new Wind2();
Stringed2 violin = new Stringed2();
Brass2 frenchHorn = new Brass2();
tune(flute); // No upcasting
tune(violin);
tune(frenchHorn);
}
} ///:~
Kode diatas dapat dijalankan, tetapi disana ada kekurangan terbesar. Kita harus menuliskan metoda tipe yang spesifik untuk setiap class Instrument2 yang baru kita tambahkan. Ini semua berarti makin banyak kode yang akan kita tulis, tetapi juga berarti kalau kita ingin menambahkan sebuah metoda baru seperti tune() atau sebuah tipe baru dari Instrument, kita mendapatkan kalau perkerjaan kita makin banyak. Dengan menambahkan fakta bahwa kompiler tidak akan memberikan pesan-pesan kesalahan kalau kita lupa meng overload salah satu dari metoda-metoda kita dan seluruh proses pekerjaan dengan tipe menjadi tidak dapat ditangani.
Bukankah dapat menjadi lebih menyenangkan kalau kita hanya menuliskan satu metoda saja yang dapat mengambil class asal sebagai argumennya, dan bukan dari semua class-class turunannya. Itulah memang lebih memudahkan bila kita melupakan adanya class-class turunan, dan menuliskan kode yang hanya berkomunikasi dengan class asal?
Itulah apa yang disediakan oleh polymorphism. Walau bagaimanapun kebanyakan programmer (yang berasal dari latar belakang prosedural) mempunyai sedikit kesulitan untuk beradaptasi dengan polymorphism.
Kesimpulan
Dengan polymorphism pekerjaan seorang programmer dapat dimudahkan dengan menuliskan kode yang lebih sedikit. Untuk mengakses class-class turunan tidak dibutuhkan penulisan kode yang berlainan.
Jumat, 08 Januari 2010
Permasalahan Pada Polymorphisme
Diposting oleh H4di di 18.33 0 komentar
Program Class Animal
// class Animal
public class Animal {
private int weight;
public Animal(int w) { weight=w; }
public void setWeight(int w) { weight = w; }
public int getWeight() { return weight; }
public void talk() {
System.out.println("An animal can't talk");
}
}
// class Cow
public class Cow extends Animal {
public Cow() { super(100); }
public void talk() {
System.out.println("Moo!");
}
}
// class Pig
public class Pig extends Animal {
public Pig() { super(40); }
public void talk() {
System.out.println("Grunt!");
}
}
// class Sheep
public class Sheep extends Animal {
public Sheep() { super(65); }
public void talk() {
System.out.println("Baa!");
}
}
// class Bebek
public class Bebek extends Animal {
public Bebek() { super(35); }
public int jumlahTelur=3;
public void talk() {
System.out.println("Kweek!");
}
}
// class Main
public class FarmExample{
public static void main(String[] args) {
Animal[] farm = {new Cow(), new Pig(), new Sheep(), new Bebek()};
Bebek b = new Bebek();
int totalWeight = 0;
for (int i=0; i
totalWeight += farm[i].getWeight();
System.out.println("The total weight of the " + "animals is " + totalWeight);
System.out.println("The animals say:");
for (int i=0; i
farm[i].talk();
System.out.println("Jumlah Telur Bebek adalah "+b.jumlahTelur);
}
}
Output program :
The total weight of the animals is 240
The animals say:
Moo!
Grunt!
Baa!
Kweek!
Jumlah Telur Bebek adalah 3
Diposting oleh H4di di 18.32 0 komentar
Selasa, 05 Januari 2010
polymorphisme
Polimorphisme adalah kemampuan dari sebuah ojectuntuk memperbolehkan mengambil beberapa bentuk yang berbeda.Secara harafiah,"poli" berarti banyak sementara "morph" berarti bentuk.Menunjuk pada contoh sebelumnya pada pewarisan,kita lihat bahwa object SuperHero dapat juga menjadi object flayingSuperHero atau object UnderwaterSuperHero.
• Inheritance dan overriding menyebabkan munculnya polymorphism (literally ‘banyak bentuk’) – salah satu ciri dan kelebihan dari object-oriented programming.
• Cow adalah subclass dari Animal, maka pemrogram dapat merujuk ke obyek Cow sebagai Animal atau Cow. Kedua pernyataan berikut benar:
– Cow daisy = new Cow();
– Animal daisy = new Cow();
• Mengapa? Karena Cow adalah subclass dari Animal (Cow adalah a kind of Animal), maka Cow mempunyai fungsionalitas dari superclassnya.
• Baris berikut salah:
– Cow daisy = new Animal(); // SALAH
• Mengapa? Cow mungkin mempunyai fungionalitas tambahan yang tidak diimplementasikan dalam superclass Animal (Animal bukan a kind of Cow).
– public class FarmExample {
• public static void main(String[] args) {
– Animal[] farm = {new Cow(), new Pig(),
new Sheep()};
– System.out.println("The animals say:");
– for (int i=0; i
– farm[i].talk();
• }
– }
• Keluaran dari program ini adalah
– The animals say:
– Moo!
– Grunt!
– Baa!
• Ada dua prinsip yang mendasari polymorphism:
– An object always retains the identity of the class from which it was created.
– When a method is invoked on an object, the method associated with the class of the object is always used.
• Keputusan mengenai metode mana yang akan dipanggil tidak dapat ditentukan oleh compiler; tetapi ditentukan saat run time. Java menggunakan dynamic binding bukan static binding.
• Contoh, Menghitung total berat semua hewan pada lahan peternakan:
• Konstruksi suatu obyek diawali oleh konstruksi obyek superclass (melalui constructor); perilaku contructor superclass dapat dipanggil dan dilengkapi fungsinya dengan perintah super() di dalam constructor subclass.
• Polymorphism mengacu kepada kemampuan untuk menjalankan suatu metode bergantung pada class obyek.
• Java menerapkan dynamic binding untuk memutuskan metode mana yang dijalankan saat runtime.
• Polymorphism memungkinkan koleksi heterogen diperlakukan secara seragam.
• Casting kadang diperlukan untuk memastikan bahwa metode yang tepat akan dijalankan saat run time.
Diposting oleh H4di di 20.48 0 komentar
sorting and searching
Sorting
Sorting adalah proses menyusun elemen – elemen dengan tata urut tertentu dan proses tersebut terimplementasi dalam bermacam aplikasi. Kita ambil contoh pada aplikasi perbankan. Aplikasi tersebut mampu menampilkan daftar account yang aktif. Hampir seluruh pengguna pada sistem akan memilih tampilan daftar berurutan secara ascending demi kenyamanan dalam penelusuran data. Sorting adalah algoritma untuk mengurutkan kumpulan nilai
Salah satu algoritma sorting adalah Buble sort
Bubble Sort
Merupakan pengurutan data dengan cara membandingkan elemen sekarang dengan elemen berikutnya. Dimana cara kerjanya adalah dengan berulang – ulang melekukan proses looping (perulangan) terhadap elemen – elemen struktur data yang belum diurutkan. Nilai – nilai dari masing – masing elemen akan dibandingkan selama proses looping tersebut. Jika selama proses looping tersebut ditemukan ada urutan yang tidak sesuai dengan permintaaan, maka akan dilakukan proses pemukaran (swap).
Perlu diketahui, jenis pengurutan sorting ada 2 yaitu asscending dan descending. Dimana asscending itu mengurut data dari kecil ke besar dan descending itu mengurut data dari besar ke kecil. Jika semua elemen sudah diperiksa oleh fungsi bubble sort, dan tidak ada pertukaran lagi atau semua nilai sudah sesuai, maka saat itu program bubble sort akan berhenti bekerja.
SORTING
Dalam Bahasa pemograman C++ pengurutan disebut juga dengan “Sorting“. Pengurutan atau “Sorting“ adalah suatu proses menyusun kembali data yang sebelumnya telah disusun dengan suatu pola tertentu, sehingga tersusun secara teratur menurut aturan tertentu ( untuk data yang bertipe numerik atau karakter).Misalkan dalam kehidupan sehari-hari qta dihadapkan dalam memilih pakaian dalam lemari lebih sulit kalau pakaian tersebut berantakan tempatnya tentunya pakaian yang sudah terurut akan lebih cepat untuk dicari.Berdasarkan atas pemilahan warna/jenis pakaian.
Pengurutan data dalam pemograman biasanya dan pada umumnya untuk data yang bertipe data numerik ataupun karakter. Pada bahasa pemograman terdapat 2 macam pengurutan yaitu, ascending (urut naik) dan descending urut turun. Ascending (urut naik) merupakan pengurutan dari angka yang nilainya lebih kecil kemudian menuju ke nilainya yang lebih besar. Sedangkan descending (urut turun) adalah sebaliknya, yaitu pengurutan dari nilainya yang lebih besar kemudian menuju ke nilainya yang lebih kecil.Sebagai contoh misalkan diberikan data berupa bilangan berikut ini:
3 9 1 4 0 2
Hasil sorting ascending adalah 0 1 2 3 4 9, dan hasil secara descending adalah 9 4 3 2 1 0.
Berikut ini merupakan Metode Pengurutan Data (Sorting) :
1. Bubble Sort
Nah, penjelasan awal adalah Metode bubble sort. Buble Sort merupakan metode yang sangat simpel dan mudah untuk melakukan pengurutan data , namun setiap metode tersebut pasti memiliki kelemahan dan keunggulan. Walaupun sangat sederhana namun, Metode ini mempunyai kelemahan yaitu, pada saat mengurutkan data yang sangat besar akan mengalami kekacuan, atau kinerja nya kurang baik. Mungkin kalian bingung ya, knapa sih namanya Buble, knapa nggak Circle Sort atau Soda sort aja (maav ney bukannya ngubah-ngubah metode). Berikut ini penjelasannya, “Bubble” karena proses pengurutan data nya tersebut secara bertahap bergerak/berpindah ke posisinya sesuai urutannya, misalkan saja anda meniup segelas air dengan menggunakan sedotan , tentunya akan mengeluarkan gelembung yang saling berurutan keluar dalam pipet. Pengurutan data Buble Sort dilakukan dengan cara membandingkan elemen sekarang dengan elemen berikutnya. Penukaran tersebut baru dilakukan kalau kriterianya tersebut sudah terpenuhi.
Pengurutan Ascending (urut naik) : Jika elemen sekarang lebih besar dari elemen berikutnya maka kedua elemen tersebut ditukar. Pengurutan Descending ( urut turun): Jika elemen sekarang lebih kecil dari elemen berikutnya, maka kedua elemen tersebut ditukar. Nah, Algoritma ini seolah-olah menggeser satu per satu elemen dari kanan ke kiri atau kiri ke kanan, Sekarang tergantung jenis pengurutannya, ascending (urut naik) atau descending (urut turun). Ketika satu proses telah selesai, maka bubble sort akan mengulangi proses, demikian seterusnya sampai dengan iterasi sebanyak n-1. Bubble Sort berhenti jika seluruh array telah diperiksa dan tidak ada pertukaran lagi yang bisa dilakukan, serta tercapai perurutan yang telah diinginkan.
2. Exchange Sort
Pembahasan yang kedua mengenai Metode Exchange Sort. Metode ini merupakan metode pengurutan data yang hampir mirip dengan Bubble Sort ( Mirorr-Nya buble sort), bahkan mungkin juga metode Bubble Sort sama dengan Exchange Sort. Namun setiap metode pasti memiliki perbedaan, perbedaan antara Exchange Sort dan Bubble Sort terletak dalam hal bagaimana membandingkan antar elemen-elemennya.
Exchange sort membandingkan suatu elemen dengan elemen-elemen lainnya dalam array tersebut, dan melakukan pertukaran elemen jika perlu. Jadi ada elemen yang selalu menjadi elemen pusat (pivot). Sedangkan Bubble sort akan membandingkan elemen pertama/terakhir dengan elemen sebelumnya/sesudahnya, kemudian elemen tersebut itu akan menjadi pusat (pivot) untuk dibandingkan dengan elemen sebelumnya/sesudahnya lagi,dan begitu seterusnya.
3. Selection Sort
Metode yang ketiga adalah Selection Sort merupakan metode pengurutan data kombinasi antara sorting dan searching. Kinerja metode ini sebagai berikut ini : Mula – mula suatu petunjuk (diberi nama posAwal ) yang menunjuk lokasi awal pengurutan data diatur agar berisi indeks pertama dalam larik. Selanjutnya dicari bilangan terkecil yang terletak antara posisi sesudah yang ditunjuk oleh penunjuk tersebut element yang terakhir dalam larik. Lokasi bilangan ini di tunjuk oleh posMin. Lalu tukarkan nilai bilangan terkecil tersebut dengan nilai yang di tunjukkan posAwal. Proses seperti ini di ulang dari posAwal bernilai 0 hingga n-2 , dengan n menyatakan jumlah element larik
4. Insertion Sort
Kamu pernah bermain kartu gak?? pastilah kamu tau kartu remi kan, pastinya kamu-kamu pernah mengkocok kartunya atau sebagai Bandarnya. Metode insertion sort ini merupakan metode pengurutan data yang mirip dengan cara orang mengurutkan kartu, selembar demi selembar kartu diambil dan disisipkan (insert) ke tempat yang seharusnya sehinggan penambahan kartu tersebut akan membuat semua kartu tetap terurutkan.
Pengurutan dimulai dari data ke-2 sampai dengan data terakhir, jika ditemukan data yang lebih kecil, maka akan ditempatkan (diinsert) diposisi yang seharusnya. Pada penyisipan elemen, maka elemen-elemen lain akan bergeser ke belakang
5. Quick Sort
Pada tahun 1962, C. AR Hoare merupakan orang yang mengemukakan pertama kali Metode Quick sort. Metode ini merupakan metode pengurutan data yang agak rumit namun, sangat mudah jika ada data yang nilainya sangat besar, seperti yang saya katakan sebelumnya, jika metode tersebut simpel pastilah ada juga kekurangannya, begitu juga sebaliknya jika metode ini rumit maka kelebihannya juga ada, kira-kira seperti itu. Metode ini menggunakan strategi “pecah-belah” dengan mekanisme seperti berikut : Larik L[p..r] dengan indeks terkecil adalah p dan indeks terbesar adalah r disusun ulang (dipartisi) menjadi dua buah larik A[p..p] dan A[q+1…r] sehingga setiap elemen dalam A[p..q] selalu bernilai lebih kecil daripada A[q+1…r]. Selanjutnya kedua larik tersebut di urut secara rekursif. Dengan sendirnya kombinasi kedua larik tersebut membentuk larik dengan data yang telah di urut.
SEARCHING
Searching adalah metode pencarian informasi dalam suatu aplikasi, dengan suatu kunci( key ). Pencarian diperlukan untuk mencari informasi khusus dari table pada saat lokasi yang pasti dari informasi tersebut sebelumnya tidak diketahui. Pencarian selalu dinyatakan dengan referensi pada adanya sekelompok data yang tersimpan secara terorganisasi, kelompok data tersebut kita sebut table.
Pada metode searching (pencarian) ada 2 teknik yang digunakan yaitu : Pencarian sekuensial (sequential search) dan Pencarian biner (Binary search).
1. Pencarian sekuensial (sequential search)
Pencarian sekuensial (sequential search) atau sering disebut pencarian linier menggunakan prinsip sebagai berikut : data yang ada di bandingkan satu persatu secara berurutan dengan yang dicari.Pada dasarnya, pencarian ini hanya melakukan pengulangan dari 1 sampai dengan jumlah data. Pada setiap perulangan , di bandingkan data ke-i dengan yang dicari. Apabila sama , berarti data telah ditemukan . Sebaliknya apabila sampai akhir pengulangan , tidak ada yang sama berarti data tidak ada.
2. Pencarian Biner (Binary Search)
Salah satu syarat pencarian biner (binary search) dapat dilakukan adalah data sudah dalam keadaan terurut. Dengan kata lain, apabila data belum dalam keadaan terurut , pencarian biner tidak dapat dilakukan . Dalam kehidupan sehari-hari, sebenarnya kita juga serig menggunakan pencarian biner. Misalnya saat kita ingin mencari suatu kata dalam kamus.
Langkah dalam pencarian biner adalah :
1. Mula-mula diambil dari posisi awal=1 dan posisi akhir = n
2. Kemudian kita cari posisi data tengah dengan rumus posisi tengah = (posisi awal + posisi akhir ) div 2
3. Kemudian data yang di cari dibandingkan dengan data tengah
a. Jika sama, data ditemukan, Proses selesai
b. Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap sama dengan posisi tengah -1,
c. Jika lebih besar , proses dilakukan kembali tetapi posisi awal dianggap sama dengan posisi tengah +1.
4. Ulangi langkah kedua hingga data ditemukan , atau tidak ditemukan.
5. Pencarian biner ini akan berakhir jika data ditemukan posisi awal lebih besar dari pada posisi akhir. Jika posisi awal sudah lebih besar dari posisis akhir berarti data tidak diketemukan.
· Pencarian Sekuensial :
a. Kelebihannya :
- Relatif lebih cepat dan efisien untuk data yang terbatas
- Algoritma sederhana
b. Kekuranganya :
- Kurang cepat untuk data dalam jumlah besar
- Beban komputasi cenderung lebih besar
· Pencarian Biner :
a. Kelebihannya :
- Untuk data dalam jumlah besar, waktu searching lebih cepat
- Beban komputasi lebih kecil
b. Kekuranganya :
- Data harus sudah di-sorting lebih dulu ( dalam keadaan terurut )
- Algoritma lebih rumit, tidak baik untuk data berangka
Diposting oleh H4di di 20.47 0 komentar

