Anda di halaman 1dari 37

18 Februari 2018

MODUL
Pemrograman Komputer 2

D IV TEKNIK INFORMATIKA
POLITEKNIK HARAPAN BERSAMA
MODUL
Pemrograman Komputer 2
BAB I
COLLECTION

1.1. Collection
Collection atau koleksi merupakan sebuah objek yang mewakili kumpulan dari suatu objek
(biasa disebut dengan item). Kumpulan ini bisa bersifat homogen atau heterogen. Java Collection
framework ini dapat digunakan untuk memanipulasi (menambah, menghapus, mengubah) dan
mengurutkan sekumpulan objek serta dapat digunakan untuk proses pencarian sekumpulan objek
dalam koleksi tersebut. Hirarki dari Collection memiliki beberapa sub-interfacce dan beberapa class
yang mengimplementasikannya, seperti terlihat pada Gambar berikut:

<interface>
Collection

implements implements

<Interfaces> Classes
AbstractCollection, AbstractList, AbstractQueue,
BeanContext,
AbstractSequentialList, AbstractSet, ArrayBlockingQueue,
BeanContextServices,
ArrayDeque, ArrayList, AttributeList,
BlockingDeque<E>,
BeanContextServicesSupport, BeanContextSupport,
BlockingQueue<E>,
ConcurrentHashMap.KeySetView, ConcurrentLinkedDeque,
Deque<E>, List<E>,
ConcurrentLinkedQueue, ConcurrentSkipListSet,
NavigableSet<E>,
CopyOnWriteArrayList, CopyOnWriteArraySet, DelayQueue,
Queue<E>, Set<E>,
EnumSet, HashSet, JobStateReasons, LinkedBlockingDeque,
SortedSet<E>,
LinkedBlockingQueue, LinkedHashSet, LinkedList,
TransferQueue<E>
LinkedTransferQueue, PriorityBlockingQueue, PriorityQueue,
RoleList, RoleUnresolvedList, Stack, SynchronousQueue,
TreeSet, Vector

Gambar 1.1 Hirarki interface Collection

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 1
MODUL
Pemrograman Komputer 2
Beberapa keuntungan yang didapat dari penggunaan collection diantaranya adalah sebagai
berikut:
A. Mengurangi waktu dan usaha development.
Hal ini dikarenakan framework ini (collection) sudah disediakan dan digunakan tanpa harus
membuat ulang struktur data dan algoritma.
B. Meningkatkan performa.
Framework ini dibuat dengan mengedepankan performa sehingga kita dapat memperoleh
performa ini. Terlalu banyak usaha jika development membuat ulang framework sendiri untuk
keperluan struktur data.
C. Kemudahan interoperabilitas.
Framework ini didesain untuk memudahkan penggunanya dalam mengntegrasikannya ke
dalam sistem yang sedang dibuatnya.

Framework collection ini didesain dengan sentuhan arsitektur yang sangat mumpuni.
Framework ini berisi antara lain:
A. Interface. Merupakan tipe data abstract dari collection. Interface memungkinkan sebuah
collection melakukan manipulasi secara bebas.
B. Implementasi. Merupakan implementasi konkret dari interface collection.
C. Algoritma. Merupakan metode untuk melakukan komputasi seperti pencarian dan pengurutan
pada objek yang mengimplementasi interface collection.

1.2. Mengenal dan Menggunakan Objek Collection


Pada bahasa Java, objek collection terdapat pada paket java.util.*. Pada sub-bab ini, akan
dijelaskan beberapa objek (List, Set, Map, Queue, dan Stack) dari collection.

1.2.1 List
List merupakan objek dengan model double link list, dimana kita dapat menampahkan objek
yang berbeda ke dalamnya. List merupakan kumpulan objek yang terurut (biasa disebut dengan
sequence). Pengguna interface ini (list) memiliki kontrol yang tepat terhadap setiap elemen yang telah
dimasukkan ke dalam list. Pengguna dapat mengakses elemen dengan indeks dari masing-masing
elemen (posisi dalam list), dan mencari elemen dalam list. Untuk dapat menggunakan objek List, kita
diharuskan melakukan impor paket java.util.List.

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 2
MODUL
Pemrograman Komputer 2
Contoh Instansiasi object List
List listE = new ArrayList();

Contoh instansiasi object List dengan tipe generic String


List<String> listE = new ArrayList<>();

Contoh cara memasukkan data (string) ke dalam objek List


listE.add("Elemen 1");
listE.add("Elemen 2");
listE.add("Elemen 3");

Cara menampilkan data yang ada di dalam List #1


listE.forEach((object) -> {
System.out.println(object);
});

Cara menampilkan data yang ada di dalam List #2


for (Object object : listE) {
System.out.println(object);
}

Cara menghapus objek dalam list pada indeks tertentu


listE.remove(1);

Cara mengubah data atau objek dalam List


listE.set(1, "Elemen 10");

Cara mengurutkan object dalam List


Collections.sort(listE);

Cara mendapatkan data pada indeks tertentu


listE.get(2);

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 3
MODUL
Pemrograman Komputer 2
1.2.2 Set
Set merupakan sub-interface dari collection yang digunakan untuk menyimpan dan
memanipulasi data, dimana tidak ada data atau elemen yang duplikat atau sama. Untuk dapat
menggunakan objek ini, kita diharuskan untuk mengimpor paket java.util.Set. Karena Set
merupakan sebuah interface, maka untuk dapat menggunakannya harus dilakukan instansiasi dengan
menggunakan kelas yang mengimplementasikannya (salah satunya adalah class HashSet), cara
instansiasi dan penggunaan interface Set dapat dilakukan dengan cara berikut:

Cara instansiasi objek Set


Set set = new HashSet();

Cara memasukkan objek ke dalam Set


Set set = new HashSet();
set.add("Elemen 1");
set.add("Elemen 2");
set.add("Elemen 3");
set.add("Elemen 4");
set.add("Elemen 5");

Untuk mengakses data yang ada di dalam Set, kita dapat menggunakan beberapa cara,
diantaranya adalah dengan menggunakan proses looping (perulangan) sebagai berikut:

Cara ke-1:
for (Object elemen : set) {
System.out.println(elemen);
}

Cara ke-2:
set.forEach((elemen) -> {
System.out.println(elemen);
});

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 4
MODUL
Pemrograman Komputer 2
Cara ke-3:
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
Object elemen = iterator.next();
System.out.println(elemen);
}

Cara menghapus objek atau elemen dalam Set


set.remove(“Elemen 1”);

Apabila kita memasukkan objek atau data yang sama ke dalam sebuah Set, maka data
tersebut tidak akan disimpan dalam Set. Ilustrasinya sebagai berikut:

Set set = new HashSet();


set.add("Elemen 1");
set.add("Elemen 2");
set.add("Elemen 3");
set.add("Elemen 3"); //duplikasi, data “Elemen 3” tidak akan disimpan
set.add("Elemen 4");
set.add("Elemen 5");

1.2.3 Map
Map merupakan objek dengan model seperti List, tetapi kita memerlukan key atau kunci
untuk memaasukkan atau menambahkan data ke dalam sebuah Map. Untuk dapat menggunakan objek
Map ini, kita diharuskan untuk melakukan impor paket java.util.Map. Beberapa metode atau
cara yang dapat digunakan untuk mengoperasikan Map diantaranya adalah sebagai berikut:

Cara instansiasi objek Map


Map map = new HashMap();

Cara memasukkan objek ke dalam Map


map.put(“key1”, "Elemen 1");
map.put(“key2”, "Elemen 2");

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 5
MODUL
Pemrograman Komputer 2
Untuk mengakses data yang ada di dalam Map, kita juga dapat menggunakan beberapa cara
diantaranya adalah dengan menggunakan proses looping (perulangan) sebagai berikut:

Cara ke-1: Looping dengan for


for (Object element : map) {
System.out.println(element);
}

Cara ke-2: Looping dengan forEach


map.forEach((element) -> {
System.out.println(element);
});

Cara ke-3: Looping menggunakan while


Iterator iterator = map.keySet().iterator();
while (iterator.hasNext()) {
Object elemen = iterator.next();
System.out.println(elemen);
}

Cara mendapatkan data berdasarkan kunci dalam Map


map.get("key1");

Cara menghapus data berdasarkan kunci dalam Map


map.remove("key1");

Cara menghapus seluruh data yang ada di dalam objek Map


map.clear();

Untuk mengetahui jumlah data yang telah tersimpan dalam sebuah objek Map, kita dapat
menggunakan fungsi size() yang telah tersedia pada interface Map. Lihat contoh berikut:

int size = map.size(); //mendapatkan jumlah data dalam map

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 6
MODUL
Pemrograman Komputer 2
1.2.4 Queue
Queue merupakan objek koleksi yang spesial karena menggunakan pendekatan First In First
Out (FIFO). Seperti halnya cara penggunaan List, Set, dan Map, untuk dapat menggunakan objek
Queue kita juga harus melakukan impor paket, yaitu paket java.util.Queue. Berikut
merupakan beberapa cara yang dapat digunakan untuk menggunakan objek Queue.

Cara instansiasi objek Queue


Queue queue = new LinkedList();

Cara memasukkan elemen atau data ke dalam Queue


queue.add("Antrian 1");
queue.add("Antrian 2");
queue.add("Antrian 3");

Cara mengakses data dalam objek Queue.


for (Object element : queue) {
System.out.println(element);
}
System.out.println(queue.element()); //mengambil head queue

Cara menghapus data dalam objek Queue.


Object removed = queue.remove();

Karena objek Queue ini mengadopsi pendekatan FIFO maka proses penghapusan di atas akan
menghapus data pada elemen atau data yang pertama dimasukkan ke dalam Queue. Selain
menggunalan fungsi elemen(), untuk mendapatkan elemen dari Queue juga dapat digunakan
fungsi peek(). Selain itu, dalam object Queue juga disediakan fungsi poll(), fungsi ini
digunakan untuk mengambil head queue dan juga sekaligus menghapusnya. Untuk lebih jelasnya
lihat contoh berikut:

Object peek = queue.peek(); //mengambil head queue


Object pool = queue.poll(); // mengambil dan menghapus head queue

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 7
MODUL
Pemrograman Komputer 2
1.2.5 Stack
Stack merupakan objek collection yang spesial seperti halnya Queue, tetapi
perbedaannya adalah pendekatan yang digunakan. Queue menggunakan pendekatan FIFO (First In
First Out), sedangkan Stack menggunakan pendekatan LIFO (Last In First Out). Untuk dapat
menggunakan objek Stack, perlu dilakukan impor paket java.util.Stack. Terdapat beberapa
cara dan metode yang dapat digunakan untuk mengoperasikan objek Stack sebagai berikut:

Cara Instansiasi objek Stack


Stack stack = new Stack();

Cara memasukkan data ke dalam objek Stack


stack.push(10);
stack.push(20);
stack.push(55);
stack.push(“Pemrograman Komputer 2”);
stack.push(75);

Cara untuk mengakses data dalam Stack


stack.forEach((object) -> {
System.out.println(object);
});

Untuk dapat mengakses data dalam Stack kita juga dapat menggunakan beberapa fungsi
yang telah disediakan oleh kelas Stack sebagai berikut:
A. Fungsi firstElement(). Digunakan untuk mendapatkan nilai objek pada indeks ke 0
dalam Stack (bukan tumpukan paling atas dalam Stack).
B. Fungsi peek(). Digunakan untuk mendapatkan nilai objek pada tumpukan paling atas
dalam Stack tanpa menghapus objek tersebut dari Stack.
C. Fungsi pop(). Digunakan untuk mendapatkan nilai objek pada tumpukan paling atas
dalam Stack sekaligus menghapus objek tersebut dari dalam Stack.

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 8
MODUL
Pemrograman Komputer 2
Contoh Kode:
Stack stack = new Stack();
stack.push(10);
stack.push(20);
stack.push(55);
stack.push("Pemrograman Komputer 2");
stack.push(75);
stack.push(100);

//mendapatkan objek pada indeks ke 0


Object first = stack.firstElement();

//mendapatkan objek pada head stack


Object peek = stack.peek();

//mendapatkan objek pada head stack dan menghapusnya


Object pop = stack.pop();

Untuk menghapus objek dalam Stack dapat digunakan fungsi remove(), fungsi ini
memiliki 2 (dua) parameter yaitu Object dan int (indeks). Sehingga, pengguna dapat melakukan
penghapusan data berdasarkan nilai objek atau indeks dari objek tersebut. Untuk lebih detailnya
sebagai berikut:

Cara menghapus data dalam Stack dengan parameter Object


Bentuk umum:
remove(Object o);
Penggunaan:
remove(“Pemrograman Komputer 2”);
//menghapus objek “Pemrograman Komputer 2” dalam tumpukan Stack

Cara menghapus data dalam Stack dengan parameter nilai indeks


Bentuk umum:
remove(int index);
Penggunaan:
remove(0);
//menghapus data pada indeks ke 0 dalam Stack

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 9
MODUL
Pemrograman Komputer 2
1.3. Praktik
1.3.1. Membuat Project Baru
Untuk membuat project baru di Netbeans ikuti langkah-langkah berikut:
1. Klik menu File  New Project, selanjutnya akan terbuka dialog New Project
2. Pada dialog New Project, untuk Categories pilih Java, dan untuk jenis Projects pilih
Java Application  klik Next untuk melanjutkan ke tahapan berikutnya.
3. Pada dialog New Java Application, isi field dan pilihan yang ada sebagai berikut:
A. Project Name : CollectionImpl
B. Project Location : Lokasi opsional, sesuai dengan keinginan anda
C. Project Folder : Otomatis oleh Netbeans IDE
D. Create Main Class: Hilangkan centang pada checkbox
4. Klik Finish

1.3.2. Membuat Paket Baru


Untuk membuat paket baru dalam sebuah project, ikuti langkah-langkah berikut:
1. Klik kanan pada Node Source Package  New  Java Package. Selanjutnya Netbeans
akan membuka dialog New Java Package.
2. Pada dialog New Java Package, isikan list pada kotak isian nama paket (package name)
3. Klik Finish.

Selanjutnya, dengan langkah-langkah di atas buatlah 4 paket baru dengan nama set, map,
queue, dan stack sehingga sususan project menjadi seperti terlihat pada Gambar 1.2.

Gambar 1.2 Hirarki Project Collection

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 10
MODUL
Pemrograman Komputer 2
1.3.3. List
Pada bagian ini kita akan praktik menggunakan objek List. Sebelum menggunakan objek
List, terlebih dahulu buatlah sebuah kelas/form baru (TestList) dengan mengikuti langkah-langkah
sebagai berikut:
1. Klik kanan pada package list  New  JFrame Form. Selanjutnya Netbeans akan
menampilkan dialog untuk membuat form baru (dialog New JFrame Form).
2. Pada field Class Name, isikan TestList.
3. Klik Finish.

Setelah form selesai dibuat, maka struktur project menjadi seperti pada Gambar 1.3.
Selanjutnya, desainlah form menggunakan palette sehingga antarmuka menjadi seperti terlihat pada
Gambar 1.4.

Gambar 1.3 Struktur Project dan form TestList

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 11
MODUL
Pemrograman Komputer 2
1 2 3 4 5 6

Gambar 1.4 Form TestList

Keterangan setiap komponen sesuai dengan petunjuk nomor:


1. Jenis komponen : JButton
Nama Variabel : btnTambah
2. Jenis Komponen : JButton
Nama Variabel : btnTampil
3. Jenis Komponen : JButton
Nama variabel : btnHapus
4. Jenis Komponen : JButton
Nama variabel : btnUbah
5. Jenis Komponen : JButton
Nama Variabel : btnKosongkan
6. Jenis Komponen : JTextArea
Nama Variabel : messageArea

Catatan:
Untuk mengubah nama variabel, klik kanan pada komponen yang akan diubah nama
variabelnya  isikan nama variabel  klik Ok.

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 12
MODUL
Pemrograman Komputer 2
Selanjutnya masuk ke jendela atau tab Source, kemudian ikuti langkah-langkah sebagai
berikut:
1. Impor class yang dibutuhkan dan buat objek List sehingga kode program pada scope
class menjadi seperti Gambar 1.5.

Gambar 1.5 Impor class dan membuat objek List

2. Double klik tombol/button Tambahkan Objek atau klik kanan tombol/button Tambahkan
Objek  pilih Events  pilih Action  pilih actionPerformed, kemudian ubah kode
programnya hingga menjadi seperti berikut:

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 13
MODUL
Pemrograman Komputer 2
3. Double klik tombol/button Tampilkan Isi List atau klik kanan tombol/button Tampilkan
Isi List  pilih Events  pilih Action  pilih actionPerformed, kemudian ubah kode
programnya hingga menjadi seperti berikut:

4. Double klik tombol/button Hapus Objek atau klik kanan tombol/button Hapus Objek 
pilih Events  pilih Action  pilih actionPerformed, kemudian ubah kode programnya
hingga menjadi seperti berikut:

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 14
MODUL
Pemrograman Komputer 2
5. Double klik tombol/button Ubah Objek atau klik kanan tombol/button Ubah Objek  pilih
Events  pilih Action  pilih actionPerformed, kemudian ubah kode programnya hingga
menjadi seperti berikut:

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 15
MODUL
Pemrograman Komputer 2
6. Double klik tombol/button Kosongkan List atau klik kanan tombol/button Kosongkan List
 pilih Events  pilih Action  pilih actionPerformed, kemudian ubah kode programnya
hingga menjadi seperti berikut:

1.3.4. Set
Pada bagian ini kita akan praktik menggunakan objek Set. Sebelum menggunakan objek
Set, terlebih dahulu buatlah sebuah kelas baru (TestSet) dengan mengikuti langkah-langkah sebagai
berikut:
4. Klik kanan pada package set  New  Java Class. Selanjutnya Netbeans akan
menampilkan dialog untuk membuat kelas baru (dialog New Java Class).
5. Pada field Class Name, isikan TestSet
6. Klik Finish

Setelah class selesai dibuat, selanjutnya ubah kode program sehingga menjadi seperti kode
berikut:

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 16
MODUL
Pemrograman Komputer 2
1.3.5. Map
Pada bagian ini kita akan praktik menggunakan objek Map. Sebelum menggunakan objek
Map, terlebih dahulu buatlah sebuah kelas baru (TestMap) dengan mengikuti langkah-langkah
sebagai berikut:
7. Klik kanan pada package map  New  Java Class. Selanjutnya Netbeans akan
menampilkan dialog untuk membuat kelas baru (dialog New Java Class).
8. Pada field Class Name, isikan TestMap
9. Klik Finish

Setelah class selesai dibuat, selanjutnya ubah kode program sehingga menjadi seperti kode
berikut:

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 17
MODUL
Pemrograman Komputer 2
1.3.6. Queue
Pada bagian ini kita akan praktik menggunakan objek Queue. Sebelum menggunakan objek
Queue, terlebih dahulu buatlah sebuah kelas baru (TestQueue) dengan mengikuti langkah-langkah
sebagai berikut:
10. Klik kanan pada package queue  New  Java Class. Selanjutnya Netbeans akan
menampilkan dialog untuk membuat kelas baru (dialog New Java Class).
11. Pada field Class Name, isikan TestQueue
12. Klik Finish

Setelah class selesai dibuat, selanjutnya ubah kode program sehingga menjadi seperti kode
berikut:

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 18
MODUL
Pemrograman Komputer 2
1.3.7. Stack
Pada bagian ini kita akan praktik menggunakan objek Stack. Sebelum menggunakan objek
Stack, terlebih dahulu buatlah sebuah kelas baru (TestStack) dengan mengikuti langkah-langkah
sebagai berikut:
13. Klik kanan pada package stack  New  Java Class. Selanjutnya Netbeans akan
menampilkan dialog untuk membuat kelas baru (dialog New Java Class).
14. Pada field Class Name, isikan TestStack
15. Klik Finish

Setelah class selesai dibuat, selanjutnya ubah kode program sehingga menjadi seperti kode
berikut:

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 19
MODUL
Pemrograman Komputer 2
1.4. Latihan
Buatlah sebuah antarmuka (menggunakan JFrame Form) seperti Gambar 1.6 untuk memproses
antrian dengan ketentuan sebagai berikut:
1. Buat objek antrian dengan menggunakan interface Queue, kemudian isi antrian sebanyak
140 antrian, kemudian berikan konfigurasi sebagai berikut berikut:
a. Teks pada section “Jumlah Antrian” diganti diganti dengan jumlah antrian.
b. Teks pada section “Total Antrian” diganti diganti total antrian.
2. Pada Tampilan Admin: ketika admin menekan tombol “Proses Antrian”, maka:
a. Aplikasi akan mengambil dan menghapus nomor antrian saat itu, kemudian teks pada
section “Panggilan Nomor Antrian” akan diganti dengan panggilan untuk nomor
antrian berikutnya.
b. Teks pada section “Jumlah Antrian” diganti diganti dengan jumlah antrian aktual.
3. Pada Tampilan Pengguna: ketika pengguna menekan tombol “Ambil Nomor Antrian”,
maka
a. Aplikasi akan menambahkan antrian baru ke dalam sistem antrian, kemudian teks pada
section “Total Antrian” diganti diganti total antrian aktual.
b. Teks pada section “Jumlah Antrian” diganti diganti dengan jumlah antrian aktual.
c. Teks pada section nomor antrian (------) diisi dengan nomor antrian terakhir.

Gambar 1.6 Tampilan Form Antrian

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 20
MODUL
Pemrograman Komputer 2
BAB II
PEMROGRAMAN GENERIC

2.1. Pemrograman Generic


Pemrograman Generic menrupakan suatu teknik yang digunakan untuk mengatasi
permasalahan konsistensi tipe pada collection. Pada pertemuan sebelumnya, telah dijelaskan
tentang penggunaan collection, salah satunya adalah penggunaan List. Seperti yang telah
kita ketahui, bahwa penggunaan objek List adalah sebagai berikut:
List listV = new ArrayList();
listV.add("Kota Tegal");
listV.add(85);
listV.add(86.7);

Pada penggalan kode di atas, variabel listV dapat diisi dengan berbagai tipe data
(objek). Hal ini akan berdampak buruk ketika kita hendak melakukan manipulasi data,
dikarenakan kepastian tipe data yang dimasukkan dalam collection List bersifat tidak
konsisten. Untuk mengatasi permasalahan tersebut dapat menggunakan generic sebagai
solusinya. Pada Java, kita dapat mendeklarasikan generic dengan simbol sebagai berikut:
 <E> : untuk elemen dari sebuah collection
 <T> : untuk tipe
 <K, V> : untuk key dan value
 <N> : untuk number
 S,U,V : digunakan untuk parameter ke 2, 3, 4

2.2. Kelas Generic


Salah satu cara realisasi generic dapat dilakukan pada kelas (dikenal dengan nama
kelas generic atau generic class). Umumnya, kelas generic digunakan untuk collection
dengan tanpa menentukan tipe data yang disimpannya. Contoh realisasi kelas generic dapat
dilihat pada kode program di bawah ini:

public class MyGeneric<T> {


// realisasi kelas
}

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 21
MODUL
Pemrograman Komputer 2
Untuk lebih jelasnya, akan diilustrasikan contoh dari pembuatan kelas generic dan cara
penggunaan kelas generic sebagai berikut:

Ilustrasi: Membuat kelas generic dengan nama “MyGeneric”, kemudian untuk melakukan
pengujian dibuat kelas baru dengan nama “MyGenericTest”. Pada kelas
“MyGenericTest” dilakukan pengujian dengan 2 generic tipe data, yaitu “Integer” dan
“String”.

public class MyGeneric <T> {


T ob;

//deklarasi sebuah objek dari tipe T


MyGeneric (T o){
ob = o;
}

T getob() {
return ob;
}

void showType() {
System.out.println("Tipe T adalah"+
ob.getClass().getName());
}
}

public class MyGenericTest {


public static void main(String[] args) {
MyGeneric<Integer> iOb = new MyGeneric<>(88);
iOb.showType();

int v = iOb.getob();
System.out.println("value : "+v);
System.out.println();

MyGeneric<String> strOb = new MyGeneric<>("Generic Test");


String v2 = strOb.getob();
strOb.showType();
System.out.println("value: "+ v2);
System.out.println();

//Integer i = (Integer) strOb.getob();


//Error: cannot cast from String to Integer
}
}

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 22
MODUL
Pemrograman Komputer 2
2.3. Method Generic
Selain pada class, kita juga dapat membuat generic pada sebuah method. Pada
dasarnya, class dibuat seperti class pada umumnya, tetapi pada method yang memanipulasi
tipe generic harus menerapkan method generic. Contoh method generic adalah sebagai
berikut:
public class MyGenericMethod {

public static <E> void showData(E[] data){


for (E e : data) {
System.out.println(e);
}
}

public static void main(String[] args) {


Object[] objects = {1,2,3,"Empat",5};
MyGenericMethod.showData(objects);
Integer[] numbers = {1,2,3,4,5};

MyGenericMethod.showData(numbers);
MyGenericMethod.showData(objects);

}
}
Pada kode di atas, dideklarasikan elemen generic <E> atau juga bisa menggunakan generic
<T> pada method showData(). Berikutnya, dideklarasikan sebuah array objects dan
numbers kemudian diisi dengan data sampel. Setelah itu, dilakukan pemanggilan method
showData() untuk menampilkan data pada array objects dan numbers.

2.4. Diamond Interface


Dalam pemrograman generic, terdapat sebuah fitur yang dapat digunakan untuk
menyederhanakan dalam penulisan kode program, yaitu dengan menghilangkan tipe atau
elemen pada saat instansiasi objeknya. Fitur tersebut tersedia pada Java 7 ke atas.

Contoh:
List<Object> o = new ArrayList<Object>();
List<Integer> i = new ArrayList<Integer>();

Dapat dirubah menjadi:


List<Object> o = new ArrayList<>();
List<Integer> i = new ArrayList<>();

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 23
MODUL
Pemrograman Komputer 2
2.5. Wildcard
Pada kondisi tertentu, kita menginginkan tipe data yang dimasukkan ke dalam objek
atau method generic dibatasi pada tipe tertentu untuk menjaga konsisten data yang akan
dimanipulasi. Teknik tersebut biasa disebut dengan Wildcard Generic. Sebagai ilustrasi,
dibuat method generic untuk mengurutkan data dengan metode bubble sort. Pada generic
method di elemen yang masuk dibatasi harus inheritance dari Comparable<E>.

Contoh:
public class GeneicType {
public static <E extends Comparable<E>> void
bubbleSort(E[] list){
boolean flag = true;
E temp;
while (flag) {
flag = false;
for (int j = 0; j < list.length-1; j++) {
if(list[j].compareTo(list[j+1]) > 0){
temp = list[j];
list[j] = list[j+1];
list[j+1] = temp;
flag = true;
}
}
}
}

public static <E> void showData(E[] list){


for (E e : list) {
System.out.println(e);
}
}

public static void main(String[] args) {


Integer[] numbers = {3,6,1,12,8,9,16,2,7};
GeneicType.bubbleSort(numbers);
showData(numbers);
}
}

Wildcard generic memiliki 3 (tiga) bentuk, yaitu:


1. Unbounded wildcard
2. Upper bounded wildcard
3. Lower bounded wildcard

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 24
MODUL
Pemrograman Komputer 2
2.5.1. Unbounded Wildcard
Terkadang kita memiliki situasi dimana kita menginginkan metode generik kita
untuk bekerja dengan semua tipe data, dalam hal ini wildcard tak terbatas (unbounded
wildcard) dapat digunakan. Sama seperti menggunakan <? extends Object>.

Contoh:
public class UnboundedWildcrad {

public static void printData(List<?> list){


for(Object obj : list){
System.out.println(obj);
}
}

public static void main(String[] args) {


List<Integer> numbers = new ArrayList<>();
numbers.add(7);
numbers.add(2);
numbers.add(10);
printData(numbers);

List<String> fruits = new ArrayList<>();


fruits.add("Apel");
fruits.add("Alpukat");
fruits.add("Wortel");
printData(fruits);
}
}

Pada penggalan kode di atas, kita dapat menggunakan List<String> atau


List <Integer> atau tipe lainnya dari argumen objek list ke metode
printData(). Hal ini untuk memastikan bahwa data yang dimasukkan ke dalam
list dapat dijaga konsistensinya.

2.5.2. Upper Bounded Wildcard


Upper Bounded Wildcard digunakan untuk membatasi tipe yang tidak dikenal
menjadi tipe tertentu atau sub tipenya dengan keyword extends. Misalkan kita
ingin menulis sebuah metode yang akan mengembalikan jumlah angka dalam sebuah
list, maka implementasinya dapat kita lakukan dengan cara berikut:

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 25
MODUL
Pemrograman Komputer 2
public class UpperBoundedWildcard {
static double sumOf(List<? extends Number> list){
double sum = 0;
for(Number n : list){
sum += n.doubleValue();
}
return sum;
}
public static void main(String[] args) {
List numbers = new ArrayList<>();
numbers.add(80);
numbers.add(90.65);
numbers.add(70.87);
numbers.add(0.89);
double sum = sumOf(numbers);
System.out.println(sum);
}
}

2.5.3. Lower Bounded Wildcard


Lower Bounded Wildcard digunakan untuk membatasi tipe yang tidak dikenal
menjadi tipe tertentu atau super tipenya dengan keyword super. Sintaks yang
digunakan adalah <? super T>. Misalkan kita ingin menulis sebuah metode yang
akan mencetak semua item yang ada dalam sebuah list dan dapat berfungsi dalam
List<Integer>, List<Number> dan List<Object> atau semua tipe yang
mengandung nilai tipe Integer. Normalnya kita akan menggunakan kode seperti
berikut:

public static void printItems(List<Integer> list){


for (Integer num : list){
System.out.println(num);
}
}

Tetapi, metode di atas tidak dapat berfungsi untuk List<Number> dan


List<Object>. Untuk mengatasi hal tersebut, kita dapat menggunakan lower
bounded wildcard dengan menggunakan List<? super Integer> dan juga
sesuai dengan semua super tipe dari Integer. Contoh penggunaan metode yang yang
benar adalah sebagai berikut:

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 26
MODUL
Pemrograman Komputer 2
Contoh:
public static void print(List<? super Integer> list){
for (Object num : list){
System.out.println(num);
}
}

Contoh Kode Lengkap:


public class LowerBoundedExample {
static void printItems(List<? super Integer> list){
for (Object num : list){
System.out.println(num);
}
}
public static void main(String[] args) {
List<Integer> list1 = new ArrayList<>();
list1.add(1);
list1.add(2);
list1.add(3);
List<Number> list2 = new ArrayList<>();
list2.add(1.4);
list2.add(2.3);
list2.add(3.4);
printItems(list1);
printItems(list2);
}
}

2.6. Praktik
2.6.1. Membuat Projek Baru
Untuk membuat project baru di Netbeans ikuti langkah-langkah berikut:
1. Klik menu File  New Project, selanjutnya akan terbuka dialog New Project
2. Pada dialog New Project, untuk Categories pilih Java, dan untuk jenis Projects pilih
Java Application  klik Next untuk melanjutkan ke tahapan berikutnya.
3. Pada dialog New Java Application, isi field dan pilihan yang ada sebagai berikut:
A. Project Name : GenericImpl
B. Project Location : Lokasi opsional, sesuai dengan keinginan anda
C. Project Folder : Otomatis oleh Netbeans IDE
D. Create Main Class : Hilangkan centang pada checkbox
4. Klik Finish

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 27
MODUL
Pemrograman Komputer 2
2.6.2. Membuat Paket Baru
Untuk membuat paket baru dalam sebuah project, ikuti langkah-langkah berikut:
1. Klik kanan pada Node Source Package  New  Java Package. Selanjutnya
Netbeans akan membuka dialog New Java Package.
2. Pada dialog New Java Package, isikan generic pada kotak isian nama paket
(package name)
3. Klik Finish.

2.6.3. Membuat Form Baru


Untuk membuat form baru dalam sebuah project, ikuti langkah-langkah berikut:
1. Klik kanan pada package generic  New  JFrame Form. Selanjutnya Netbeans
akan menampilkan dialog untuk membuat form baru (dialog New JFrame Form).
2. Pada field Class Name, isikan Generic.
3. Klik Finish.

2.6.4. Mendesain Form


Setelah form selesai dibuat, berikutnya desainlah form hingga menjadi seperti terlihat
pada gambar berikut:

1 2 3 4 5

Gambar 2.1 Desain form Generic

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 28
MODUL
Pemrograman Komputer 2
Keterangan:
1. Nama palette : JButton
Nama variabel : btnAddFiles
2. Nama palette : JButton
Nama variabel : btnAddFolder
3. Nama palette : JButton
Nama variabel : btnClear
4. Nama palette : JButton
Nama variabel : btnView
5. Nama palette : JTable
Nama variabel : listMusic

2.6.5. Membuat Objek Music


Objek ini digunakan untuk menyimpan informasi detail dari music, seperti nama file,
lokasi file, ukuran file, dan ekstensi file. Untuk membuat objek ini ikuti langkah-langkah
berikuut:
1. Klik kanan pada package generic  New  Java Class. Selanjutnya Netbeans
akan menampilkan dialog untuk membuat kelas baru (dialog New Java Class).
2. Pada field Class Name, isikan Music.
3. Klik Finish.

Selanjutnya, edit kode program sehinggan menjadi seperti di bawah ini:


public class Music {
String path, fileName, fileSize, extention;
public Music(String p, String fn, String fs, String e) {
this.path = p;
this.fileName = fn;
this.fileSize = fs;
this.extention = e;
}
public String getPath() {
return path;
}
public String getFileName() {
return fileName;
}

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 29
MODUL
Pemrograman Komputer 2
public String getFileSize() {
return fileSize;
}
public String getExtention() {
return extention;
}
}

2.6.6. Membuat Objek Koleksi (PlayList)


Objek ini digunakan untuk menyimpan kumpulan objek Music yang digunakan
sebagai generic dalam praktik pemrograman generic ini. Untuk membuat objek ini ikuti
langkah-langkah berikuut:
4. Klik kanan pada package generic  New  Java Class. Selanjutnya Netbeans
akan menampilkan dialog untuk membuat kelas baru (dialog New Java Class).
5. Pada field Class Name, isikan PlayList.
6. Klik Finish.

Selanjutnya, edit kode program sehinggan menjadi seperti di bawah ini:

import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;

public class PlayList extends AbstractTableModel{


List<Music> list = new ArrayList<>();

@Override
public int getRowCount() {
return list.size();
}

@Override
public int getColumnCount() {
return 2;
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
switch(columnIndex){
case 0 : return list.get(rowIndex).getFileName();
case 1 : return list.get(rowIndex).getFileSize();
default: return null;
}
}

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 30
MODUL
Pemrograman Komputer 2
@Override
public String getColumnName(int column) {
switch(column){
case 0 : return "FILE NAME";
case 1 : return "FILE SIZE";
default: return null;
}
}

public void add(Music m){


list.add(m);
fireTableRowsInserted(getRowCount(),getColumnCount());
}

public void set(int i , Music m){


list.set(i, m);
fireTableDataChanged();
}

public void clear(){


list.clear();
fireTableDataChanged();
}

public void remove(int row){


list.remove(row);
fireTableRowsDeleted(row, row);
}

public Music get(int row){


return (Music) list.get(row);
}

2.6.7. Memberikan Event pada Setiap Tombol


Objek Music dan PlayList telah selesai dibuat, untuk implementasi penggunaan
generic, ikuti langkah-langkah berikut:
1. Lakukan instansiasi objek PlayList dan pengaturan model dari tabel, sehingga
kode program akan terlihat seperti pada Gambar 2.2.
2. Buat beberapa method yang diperlukan untuk Pengaturan Lebar dan Tinggi Kolom
Pada Tabel (Gambar 2.3), pembacaan ukuran file (Gamba 2.4), pembacaan list file,
folder dan sub folder (Gambar 2.5), dan pembacaan ekstensi File (Gamba 2.6).
3. Klik kanan pada tombol Add Files  pilih Events  pilih Action
 pilih actionPerformed  tambahkan kode program, sehingga kode
program akan terlihat seperti pada gambar 2.7.

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 31
MODUL
Pemrograman Komputer 2

Gambar 2.2 Instansiasi Objek PlayList dan Model Tabel

Gambar 2.3 Pengaturan Lebar dan Tinggi Kolom Pada Tabel

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 32
MODUL
Pemrograman Komputer 2

Gambar 2.4 Method untuk Mendapatkan Ukuran File

Gambar 2.5 Method untuk Membaca List File Dan Folder

Gambar 2.6 Method untuk Mendapatkan Ekstensi File

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 33
MODUL
Pemrograman Komputer 2

Gambar 2.7 Kode untuk Menambahkan File ke Dalam Program Generic

4. Klik kanan pada tombol Add Folder  pilih Events  pilih Action
 pilih actionPerformed  tambahkan kode program, sehingga kode
program akan terlihat seperti pada gambar 2.8.
5. Klik kanan pada tombol Clear Playlist  pilih Events  pilih
Action  pilih actionPerformed  tambahkan kode program,
sehingga kode program akan terlihat seperti pada gambar 2.9.
6. Klik kanan pada Tabel  pilih Events  pilih Mouse  pilih
MouseClicked  tambahkan kode program, sehingga kode program akan
terlihat seperti pada gambar 2.10.
7. Klik kanan pada tombol View Detail  pilih Events  pilih Action
 pilih actionPerformed  tambahkan kode program, sehingga kode
program akan terlihat seperti pada gambar 2.11.

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 34
MODUL
Pemrograman Komputer 2

Gambar 2.8 Kode untuk Menambahkan Folder ke dalam PlayList

Gambar 2.9 Kode untuk mengkosongkan Playlist

Gambar 2.10 Kode pada saat Tabel diklik

Gambar 2.11 Kode untuk Melihat Detail Elemen atau Item dalam Koleksi

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 35
MODUL
Pemrograman Komputer 2
2.7. Latihan
Buatlah sebuah program berbasis GUI yang mengimplementasikan beberapa hal berikut:
a. Method Generic
b. Diamond Interface
c. Wildcard (Unbounded, Upper/Lower Bounded)
d. Objek Map

DIV TEKNIK INFORMATIKA Dosen Pengampu: M. Nishom, M.Kom


http://informatika.poltektegal.ac.id/ 36

Anda mungkin juga menyukai