Upload
duongthuan
View
231
Download
1
Embed Size (px)
Citation preview
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page1
Perkembangan Fitur Java(JDK 1.1 s/d JDK 1.5)
Yohanes Nugroho
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page2
Overview
• Java adalah bahasa yang masih berkembang– Fitur bahasa masih mungkin bertambah atau bahkan
berubah
• Versi JDK pertama adalah 1.0, dan yangterbaru adalah 1.5 (disebut juga Java 5)– Versi JDK :1.1, 1.2, 1.3, 1.4, 1.5
• Umumnya yang masih dianggap standaradalah versi 1.4– Banyak tools (misalnya untuk membuat diagram
UML) hanya mendukung JDK 1.4
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page3
Ikhtisar
• Penjelasan singkat perkembangan fiturJDK 1.0 s/d 1.4
• Fitur baru JDK 1.5– Generik– Enum– Varargs– Sintaks for– Metadata– Autoboxing/unboxing
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page4
Penomoran Versi
• Versi JDK adalah versi internal sun– Versi ini yang lebih dikenal secara de fakto
• Versi Eksternal adalah Java 1, 2 dan 5:– JDK 1.0 = Java: Java yang pertama– JDK 1.3 = Java 2– Tidak ada Java 3 dan 4– JDK 1.5 = Java 5
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page5
Penambahan API
• Setiap versi JDK selalu menambahkan APIbaru.
• API baru mungkin melibatkan perubahan padabahasa (misal: API Reflection), namunbiasanya tidak.
• API yang tidak berhubungan denganperubahan bahasa (secara sintaks/semantik)bisa diimplementasikan ulang di JDK versi yanglama (misal di JDK 1.5 ada Regex, di JDKsebelumnya kita bisa menggunakan libraryregex dari pihak ketiga)
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page6
JDK 1.1
• Penambahan fitur inner Class(perubahan bahasa)– Versi Java sebelumnya hanya mendukung
Top Level Class
• Penambahan Reflection API– Reflection API melibatkan perubahan
bahasa (setiap kelas dapat diaksesrefleksinya)
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page7
JDK1.1
• Perkenalan Format file JAR– File Jar merupakan file yang berisi kelas
Java dan resource yang dibutuhkan untukmenjalankan kumpulan kelas tersebut(gambar, suara, dll)
– menjadi bagian integral Java karenamenjadi bagian dari classpath Java
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page8
JDK 1.2
• Penambahan Weak Reference dan tipereference lain– Referensi yang “lemah”, sehingga bisa
dibersihkan oleh garbage collector jikadiperlukan
• Perubahan pada penanganan Thread– Sebelum JDK1.2 ada method untuk men-
suspend (menghentikan sementara) danme-resume (meneruskan) thread, tapiternyata ini rawan deadlock
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page9
JDK 1.3
• Tidak ada perubahan bahasa• Penambahan dan perbaikan API untuk
distributed programming (RMI, CORBA)• Sampai dengan versi terakhir (1.3.1_14)
Sangat banyak bug yang diperbaiki(lebih dari 100)– Informasi lengkap dapat dilihat di:
http://java.sun.com/j2se/1.3/ReleaseNotes.html
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page10
JDK 1.4
• Perubahan bahasa: asersi (seperti padaC/C++)
• Pada versi ini banyak penambahan APIbaru– NIO:
• API baru untuk I/O yang berguna untuk I/Okinerja tinggi
– Logging:• Fitur untuk melakukan pencatatan aktivitas
program ke media tertentu (disk, jaringan, dll)
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page11
Asersi
• Perubahan bahasa di JDK 1.4 adalahpenambahan asersi
• Asersi adalah pernyataan boolean bahwasesuatu pasti benar di satu titik program– Jika salah, maka exception akan dilempar
• Contoh: pada algoritma yangmenghitung kecepatan benda (dalamm/s) , hasilnya pasti kurang darikecepatan cahaya, kita bisa memberiassersi bahwa hasil kecepatan <299792458
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page12
Contoh pemakaian asersi
• Asersi bahwa speed pasti < 299792458 :assert (speed<299792458);
• Asersi juga bisa diberi pesan yang lebihinformatif:assert(speed<299792458):”kecepatanmelebihi kecepatan cahaya”;
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page13
Pengaktifan asersi
• Defaultnya assersi tidak akan diperiksaoleh JVM (program dengan atau tanpaasersi tetap sama)
• Asersi diaktifkan (diperiksa) jikaprogram dijalankan dengan -ea(enable assertion)
java -ea Speed
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page14
JDK 1.5
• Paling banyak terjadi perubahan bahasa– kelas generik– syntax loop untuk enumerasi– automatic boxing/unboxing– enumerasi– static import– metadata– variable arguments
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page15
Kelas Generik
• Kelas generik memungkinkan suatuabstraksi terhadap tipe
• Konsep yang bersesuaian adalahTemplate di C++– Tapi konsep template C++ tidak 100%
kompatibel dengan Java– Java memproses generic pada compile time
dan runtime, sedangkan C++ hanya padacompile time
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page16
Mendefinisikan Kelas Generik
• Kelas Generik:public class MyList<E>{
void add(E x) { /*kode add*/}
}• Untuk generik dengan lebih dari 1 tipe:public class MyList<E, T>{
void add(E x) { /*kode add*/}
void set(T x) {/* kode set*/}
}
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page17
Nama tipe untuk generik
• Untuk satu tipe generik dalam contohakan selalu digunakan E, dan disarankanuntuk menggunakan E– E singkatan dari Element
• Boleh nama lain, tapi disarankan yangsingkat dan terdiri atas huruf besar
• Untuk lebih dari satu tipe generik,gunakan nama yang cukup representatif
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page18
Memakai Kelas Generik
• Gunakan sintaks:– NamaKelas<NamaTipe>
• Contoh:– List<Integer> lst = new List<Integer>();
• Operasi selanjutnya dilakukan seolah-olah Tipe pada deklarasi telahmenggantikan nama tipe E:– lst.add(new Integer(5))
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page19
Interface Generik
• Interface Generik dideklarasikan sepertikelas Generik:
public interface List<E> {
void add(E x);
Iterator<E> iterator();
}
• Dan diimplementasikan seperti ini:public class MyList<E> implements List<E> {
void add(E x) { /*implementasi Add*/}
}
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page20
Autoboxing/Unboxing
• Pada JDK sebelum 1.5, tipe dasar dan tipe Kelas yangmewakili tipe dasar tidak bisa dipertukarkan
– int tidak kompatibel dengan Integer, char tidakkompatibel dengan Char, dst
• Diperlukan konversi eksplisit
– Contoh (int -> Integer):Integer v = new Integer(5);
– Sebaliknya (Integer->int):int i = v.intValue();
• Di JDK 1.5 konversi ini sudah otomatisi = v; v = 5;
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page21
Contoh Autoboxing/unboxing
• Di JDK sebelum 1.5, kode semacam iniharus digunakan karena Vector hanyamenerima tipe turunan kelas Objek:
Vector v = new Vector();
v.add(new Integer(42));int n=((Integer)(v.elementAt(0))).intValue();
• Di JDK 1.5 Menjadiv.add(0, 59);
int n= (Integer)v.elementAt(0);
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page22
Autoboxing dan kelas Generik
• Baris terakhir pada contoh sebelumnya terasa janggal:
– Konversi dari Objek -->Integer --> intmenggunakan casting, karena kelas Vectormenyimpan sebagai kelas Object perlu casting keInteger
• Vector juga merupakan kelas generik, sehinggacontoh sebelumnya bisa diubah menjadi:Vector<Integer> v = newVector<Integer>();
v.add(42);
int n = v.elementAt(0); /*otomatis*/
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page23
Sintaks loop baru
• Sintaks:for (parameterFormal: Ekspresi)
statement
• Parameter formal adalah variabel (ataudeklarasi variabel)
• Ekspresi haruslah array, atau kelasturunan java.lang.Iterable
• Pada saat loop, parameter formal berisienumerasi isi ekspresi
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page24
Contoh Penggunaan Sintaks Loop untuk array
public int sumArray(intarray[]) {
int sum = 0;
for(int i : array) {
sum += i;
}
return sum;
}
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page25
interface java.lang.iterable
• Hanya mengembalikan suatu iteratorterhadap suatu tipe tertentu:
interface Iterable<T> {Iterator<T> iterator()
}
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page26
Interface java.lang.iterator
• Interface sederhana untuk mengembalikan elemensecara terurut
interface Iterator<E> {
boolean hasNext();
E next();
remove();
}
• hasNext() untuk memeriksa apakah masih adaelemen berikut, next() mengembalikan elemenselanjutnya, dan remove() menghapus elementerakhir yang dikembalikan next
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page27
Kelas standar yang mengimplementasikan Iterable
• Banyak kelas standar Java yangmengimplementasikan Iterable:– Vector, Collection, List, Stack, ...
• Semua instans kelas ini bisa diloop dengansintaks for baru:Vector v<String> = new Vector<String>();
v.add(“Hello”);
for(String e: v) {
System.out.println(e);
}
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page28
Enum
• Tipe enumerasi adalah tipe yang terdiriatas nilai-nilai yang sudah terdefinisi
• Konsep ini ada pada C, C++, dan bahkanPascal
• Contoh :public enum Direction {LEFT,RIGHT, UP, DOWN};
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page29
Mengapa perlu fitur baru enum?
• Sebelumnya, di Java sebelum 1.5, kode di atas harusdituliskan sebagai:
class Direction {
public final static int LEFT = 1;
public final static int RIGHT = 2;
public final static int UP = 3;
public final static int DOWN = 4;
}
• Kode tidak type safe: LEFT dan RIGHT bisadijumlah, dan mungkin ada yang akan mengisi arahdengan nilai di luar 1..4
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page30
Perbandingan enum dengankonstanta
• ENUM• Dianggap sebagai
tipe baru (typesafe)
• Bisa dienumerasi• Jika dicetak (print)
menghasilkan teksnama enumerasi
• KONSTANTA• Dianggap integer
biasa (tidak typesafe)
• Tidak bisadienumerasi
• Jika dicetak (print)menghasilkan nilai
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page31
Perbedaan enum dan konstantawaktu kompilasi
• Konstanta dikompilasi ke dalam client(kelas) yang memakai konstantatersebut– Jika nilai konstanta berubah, maka client
harus dikompilasi ulang• Enum tidak dikompilasi ke dalam client
– Jika nilai konstanta berubah maka clienttidak perlu dikompilasi ulang
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page32
Variable arguments (varargs) pada method
• Variable arguments memungkinkanmethod memiliki argumen yangjumlahnya tidak tetap– seperti fungsi printf atau scanf di C
• Variable arguments diimplementasikansebagai array
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page33
Deklarasi method dengan varargs
• Parameter variabel dideklarasikandengan tanda tiga titik (...) antara namatipe dan nama variabel:– Contoh: void cetak(String ... nama);
• Parameter yang variabel harus di posisiterakhir– Boleh: void cetak(int nomor, String ...nama);
– Tidak boleh: void cetak(String ... nama,int nomor);
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page34
Pemanggilan varargs
• Contoh deklarasi:void cetak(String ... nama) {/*...*/ }
• Contoh pemanggilan:cetak(“Java”, “C++”, “Python”);
• Karena varargs adalah array, maka kodeini sama dengan di atas:String sx[] = {“Java”, “C++”,“Python”};
cetak(sx);
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page35
Contoh variable arguments
• Perhatikan method test dalam kelasTest:
class Test {
public static void cetak(String ... arg){
for (int i = 0; i<arg.length; i++){
System.out.println(arg[i]);
}
}
}
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page36
Printf
• Dengan adanya argumen (parameter)variabel, Java sekarang mendukungfungsi seperti printf C:– System.out.printf(“%d ditambah %dhasilnya %d\n”, a, b, a + b);
• Fitur ini mempermudah porting kodeyang ditulis dalam C/C++
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page37
Import Statik
• Memungkinkan programmer mengakses variabel, method,atau konstanta statik tanpa menyebut nama kelasnya
• Contoh:import static java.lang.Math.*;class Test {
public static void main(String argv[]) {System.out.println(sin(0));/*biasanya harus Math.sin(0)*/
}
}
IF-ITB/YN_RevIL/2005IF2281–Pemrograman Berorientasi Objek
Page38
Materi ekstra: Membaca Input dari keyboard di JDK1.5
• JDK sebelum 1.5 mengharuskan kitamenggunakan BufferredReader,InputStreamReader, danInteger.parseInt hanya untuk membacasebuah integer dari keyboard
• Di JDK 1.5 untuk melakukan hal yangsama:Scanner reader = new Scanner(System.in);
int n = reader.nextInt();