KELAS GENERIK.

Slides:



Advertisements
Presentasi serupa
EXCEPTION HANDLING.
Advertisements

Fungsi Konsep Pemrograman.
Pemrograman Berorientasi Objek (Project)
Pemrograman JAVA (TIB09)
OOP berputar pada konsep dari obyek yang merupakan elemen dasar dari program Anda. Ketika kita membandingkan dengan dunia nyata, kita dapat menemukan.
Pemrograman Berorientasi Objek
Abstract Class & Interface
Struktur Data & Algoritma Suryana Setiawan, Ruli Manurung & Ade Azurat (acknowledgments: Denny) ‏ 1 Fasilkom UI SUR – HMM – AAFasilkom UI - IKI20100/ IKI80110P.
Pemrograman Berorientasi Objek
di OBJECT ORIENTED PROGRAMMING [OOP] Oleh H. SUMIJAN, Ir, M.Sc
Modul 1- Review Java.
Pemrograman Terstruktur
Overriding, Overloading, Polymorphism
Overriding, Overloading, Polymorphism
POLIMORFISME 2 Imam Fahrur Rozi 01.
Pemrograman Berbasis Obyek Oleh Tita Karlita
Variabel, Method & Constructor Oleh : Nur Hayatin, S.ST Teknik Informatika – UMM 2011.
Pemrograman Berorientasi Obyek Oleh Tita Karlita
Object Oriented Programming with JAVA 2011/2012
Bekerja dengan Java class library
FUNGSI Teknik Informatika Universitas Muhammadiyah Malang 2011 Pemrogramman Terstruktur.
Polymorphism (bag. 2).
Abstract Data Types dan Java Collections API
Method, Array dan String
Array.
OOP Java 06 Polymorphism.
Pemrograman Berorientasi Obyek Lanjut (IT251)
Inheritance, polymorphism, dan interface
IKI 20100: Struktur Data & Algoritma Ruli Manurung & Ade Azurat (acknowledgments: Denny, Suryana Setiawan) ‏ 1 Fasilkom UI Ruli Manurung & Ade AzuratFasilkom.
Algoritma & Pemrograman 1
Try, Catch, Finally Throws
Pertemuan 6 PEWARISAN AND POLYMORPHISM
Java Generics.
Java array.
Kelas A dapat memiliki referensi ke obyek dari kelas- kelas lain sebagai anggota. Kadang-kadang disebut sebagai hubungan “has-a”. Sebagai contoh, sebuah.
Pengenalan Pemrograman Java
JAVA ARRAY.
Pemrograman Visual I Outline: ARRAY Array multidimensi
Inheritance dan Kata Kunci static
POLYMORPHISM (KEBANYAKRUPAAN)
Objek-Oriented Programming (OOP)
Pemrograman Berorientasi Object
Pemprograman Berorientasi Objek
Java array.
Pertemuan 5 Tipe Data, Operator, Tata Bahasa
Pewarisan Disusun Oleh: Reza Budiawan Untuk:
Java array.
Pengenalan dan Struktur Java (Statement Output)
Kelas-kelas Dasar di Java
MODIFIER JAVA.
POLYMORPHISM.
Pemrograman berorientasi Objek
Java array.
Constructor overloading
MEMBUAT CLASS SENDIRI 2.
Pemrograman Terstruktur
Java array.
Array.
Pemrograman Berorientasi Object
Polymorphism (bag. 2).
Dasar-dasar Pemrograman Objek dg Java
Pemrograman Berorientasi Objek <PBO>
Java array.
Array, Class, Obyek, Method danConstructor.
Mengulang Kembali Type Data Input Output Struktur Kontrol
Java array.
Pemrograman Berorientasi Objek
- PERTEMUAN 2- CONSTRUCTOR
Pada Bab sebelumnya, kita telah mendiskusikan bagaimana cara pendeklarasian berbagai macam variabel dengan menggunakan tipe data primitif. Dalam pendeklarasian.
Bahasa Pemrograman (Pemrograman Visual)
Transcript presentasi:

KELAS GENERIK

Sasaran Diakhir perkuliahan diharapkan mahasiswa dapat mampu: Memahami konsep generik (generic) Menggunakan beberapa kelas generik dalam bahasa pemrograman Java (Collection API) Membuat implementasi kelas generik

Pengertian Generic programming adalah salah satu cara pembuatan class dan method yang dapat digunakan untuk semua jenis tipe data, sehingga penggunaannya lebih fleksibel dan tidak kaku terhadap satu jenis tipe data saja, dimana dalam hal ini java adalah salah satu bahasa pemrograman yang sudah mensupportnya. Contoh apabila terdapat metode void print(int a), hanya akan bekerja pada tipe data integer. Bila dibutuhkan metode tersebut untuk tipe data String, float, char atau bahkan references type, maka apakah perlu membuat metode serupa untuk beberapa tipe data berbeda. Tentu saja tidak diperlukan, karena dengan generic programming hanaya dengan menggunakan sebuah metode dapat dipergunakan untuk berbagai macam tipe data.

Pengertian (lanjutan) Perhatikan Contoh Program berikut:

Pengertian (lanjutan) Singkatnya, pemrograman generik memungkinkan tipe data (kelas dan interface) menjadi parameter ketika mendefinisikan kelas, interface dan metode. Sama seperti parameter formal yang digunakan dalam deklarasi metode, tipe parameter menyediakan cara untuk kembali menggunakan metode yang sama dengan input yang berbeda. Perbedaannya adalah bahwa masukan untuk parameter formal adalah nilai data, sedangkan input untuk tipe parameter adalah tipe data.

Manfaat Pemrograman Generik Pemeriksaan tipe data lebih kuat/baik di saat kompilasi. Kompiler Java melakukan pemeriksaan tipe data lebih ketat pada kode program generik. Memperbaiki kesalahan saat kompilasi lebih mudah daripada memperbaiki kesalahan saat runtime, karena lebih sulit menemukan kesalahan. Dapat menghilangkan penulisan casting. Potongan kode berikut berikut tanpa menggunakan pemrograman generik memerlukan casting: Ditulis ulang menggunakan pemrograman generik, kode tidak memerlukan casting sbb.: List list = new ArrayList(); list.add("hello"); String s = (String) list.get(0); List<String> list = new ArrayList<String>(); list.add("hello"); String s = list.get(0); // no cast

Manfaat Pemrograman Generik Memungkinkan programmer untuk mengimplementasikan algoritma generik. Dengan algoritma generik yang bekerja pada koleksi berbagai tipe data, dapat disesuaikan, dan merupakan tipe yang aman dan lebih mudah dibaca. Dapat menghilangkan penulisan casting.

Tipe Generik Sebuah tipe generik adalah kelas atau interface generik yang dipergunakan sebagai parameter untuk berbagai tipe data. Kelas Box berikut akan dimodifikasi untuk memperlihatkan konsep tentang tipe generik. public class Box { private Object object; public void set(Object object) { this.object = object; } public Object get() { return object; public class Box<T> { // T stands for "Type" private T t; public void set(T t) { this.t = t; } public T get() { return t;

Deklarasi Kelas Generik Sebuah kelas generik didefinisikan dengan format sebagai berikut: class nama<T1, T2, ..., Tn> { /* ... */ } Bagian tipe parameter dibatasi oleh kurung sudut (<>), mengikuti nama kelas. Ini menentukan jenis parameter (juga disebut tipe variabel) T1, T2, ..., dan Tn. Semua Obyek digantikan oleh T. Tipe variabel dapat berupa tipe data non-primitif, seperti: kelas, interface, array, atau bahkan tipe variabel lain. Teknik yang sama dapat diterapkan pada interface generik.

Konvensi Penamaan Tipe Parameter Konvensi penamaan tipe parameter generik adalah menggunakan huruf besar tunggal. Bertolak belakang dengan konvensi penamaan variabel. Tanpa penggunaan konvensi ini, akan sulit untuk membedakan antara tipe generik dan non-generik. Penamaan tipe parameter yang paling sering digunakan adalah: E - Element (digunakan secara luas oleh framework Collections dari Java) K - Key N - Number T - Type V - Value S,U,V etc. - 2nd, 3rd, 4th types Penamaan di atas digunakan di seluruh API Java SE.

Pemanggilan dan Instansiasi Tipe Generik Mengacu pada kelas Box generik di atas, pemanggilan tipe generik, dapat dilakukan dengan cara menggantikan T dengan beberapa tipe yang konkret, seperti Integer, dsb. Box<Integer> integerBox; pemanggilan tipe generik tampak mirip dengan pemanggilan metode biasa, tapi bukan melalui pengiriman argumen pada sebuah metode, melainkan mengirimkan tipe argumen. Pada kelas Box di atas berupa tipe kelas Integer. Terminologi Tipe Parameter dan Tipe Argumen: “tipe parameter" dan "tipe argumen" seringkali dianggap sama, padahal sebenarnya tidak sama. T di Foo <T> adalah tipe parameter String di Foo <String> f adalah tipe argumen.

Pemanggilan dan Instansiasi Tipe Generik Seperti pada deklarasi variabel lain, kode program di atas tidak benar-benar membuat objek Box baru. Ini hanya menyatakan bahwa integerBox akan memegang referensi ke sebuah "Box of Integer", yang menyatakan bagaimana Box <Integer> dibaca. Pemanggilan sebuah tipe generik umumnya disebut sebagai tipe parameter. Untuk instantiasi kelas ini, gunakan kata kunci new, kemudian tempatkan <Integer> antara nama kelas dan tanda kurung: Box<Integer> integerBox = new Box<Integer>();

Multiple Type Parameters Kelas generik dapat memiliki beberapa tipe parameter. Sebagai contoh, kelas OrderedPair generik berikut, yang meng implementasikan interface Pair generik: public interface Pair<K, V> { public K getKey(); public V getValue(); } public class OrderedPair<K, V> implements Pair<K, V> { private K key; private V value; public OrderedPair(K key, V value) { this.key = key; this.value = value; public K getKey() { return key; } public V getValue() { return value; }

Multiple Type Parameters Pernyataan berikut membuat dua instansiasi dari kelas OrderedPair: Pernyataan new OrderedPair<String, Integer>, menginstansiasi K sebagai sebuah String and V sebagai sebuah Integer. Karena itu, tipe parameter dari konstruktor OrderedPair adalah String dan Integer. Pembuatan interface generik, mengikuti konvensi yang sama seperti pada pembuatan kelas generik. Pair<String, Integer> p1 = new OrderedPair<String, Integer>("Even", 8); Pair<String, String> p2 = new OrderedPair<String, String>("hello", "world");

Multiple Type Parameters OrderedPair<String, Box<Integer>> p = new OrderedPair<>("primes", new Box<Integer>(...)); OrderedPair<String, Box<Integer>> p = new OrderedPair<>("primes", new Box<Integer>(...)); OrderedPair<String, Box<Integer>> p = new OrderedPair<>("primes", new Box<Integer>(...)); Multiple Type Parameters Tipe parameter (seperti, K atau V) dapat disubsitusi dengan tipe parameter (seperti, List<String>). Misalnya, dengan menggunakan contoh pada OrderedPair <K, V>: OrderedPair<String, Box<Integer>> p = new OrderedPair<>("primes", new Box<Integer>(...))

OrderedPair<String, Box<Integer>> p = new OrderedPair<>("primes", new Box<Integer>(...)); OrderedPair<String, Box<Integer>> p = new OrderedPair<>("primes", new Box<Integer>(...)); OrderedPair<String, Box<Integer>> p = new OrderedPair<>("primes", new Box<Integer>(...)); Raw Types Raw types banyak muncul dalam kode pewarisan karena banyak kelas API (seperti kelas Collection) bukan kelas generik sebelum JDK 5.0. Bila menggunakan raw types, pada dasarnya akan mendapatkan perilaku pra-generik – Box memberikan banyak Objek. Untuk kompatibilitas, menetapkan tipe parameter untuk raw type diperbolehkan. Box<String> stringBox = new Box<>(); Box rawBox = stringBox; // OK Tetapi jika anda menetapkan raw type pada tipe parameter, maka akan mendapatkan peringatan: Box rawBox = new Box(); // rawBox is a raw type of Box<T> Box<Integer> intBox = rawBox; // warning: unchecked conversion

OrderedPair<String, Box<Integer>> p = new OrderedPair<>("primes", new Box<Integer>(...)); OrderedPair<String, Box<Integer>> p = new OrderedPair<>("primes", new Box<Integer>(...)); OrderedPair<String, Box<Integer>> p = new OrderedPair<>("primes", new Box<Integer>(...)); Raw Types Peringatan juga akan diberikan jika menggunakan raw type untuk memanggil metode generik yang didefinisikan dalam tipe generik yang sesuai: Box<String> stringBox = new Box<>(); Box rawBox = stringBox; rawBox.set(8); // warning: unchecked invocation // to set(T) Peringatan tersebut menunjukkan bahwa raw type mengabaikan pemeriksaan tipe generik, akan terjadi penundaaan penangkapan kesalahan kode saat runtime. Oleh karena itu, harus dihindari menggunakan raw types.