112
Bahasa Pemrograman Java Pengenalan IF-ITB/2009 IF2032– Pemrograman Berorientasi Objek Page 1 by: Yohanes Nugroho rev: Achmad Imam Kistijantoro, Saiful Akbar, Yani Widyani.

w8 IF2032-Intro Java

Embed Size (px)

DESCRIPTION

Pengantar pemrograman Java

Citation preview

Page 1: w8 IF2032-Intro Java

Bahasa Pemrograman JavaPengenalan

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 1

by: Yohanes Nugroho

rev: Achmad Imam Kistijantoro,

Saiful Akbar,

Yani Widyani.

Page 2: w8 IF2032-Intro Java

Disclaimer

• Materi ini diberikan untuk mahasiswa IF2032 yang telah mendapatkan pelajaran Objek dan C++,

• Materi tidak dimaksudkan untuk digunakan untuk penggunaan lain

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 2

digunakan untuk penggunaan lain selain untuk kuliah IF2032 (di mana mahasiswa sudah belajar konsep dan implementasi dalam C++)

Page 3: w8 IF2032-Intro Java

Mengenal Java

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 3

Nama Java, Bahasa Pemrograman Java, API

Page 4: w8 IF2032-Intro Java

Perkenalan Java

• Nama Java

• Java Virtual Machine

• Application Programming Interface

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 4

Page 5: w8 IF2032-Intro Java

Java adalah...

• Nama bahasa pemrograman

• Nama platform tempat menjalankan program Java, meliputi

• Virtual Machine

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 5

• API (Application Programming Interface)

• Nama Java sendiri diambil dari Kopi Jawa yang sangat terkenal di kalangan pegawai Sun Microsystem

Page 6: w8 IF2032-Intro Java

Sejarah singkat Java ...

• Dulu nama bahasa Java adalah Oak

• Ternyata namanya sudah ada yang memakai (menurut kantor merk dagang Amerika Serikat)

• Nama berubah menjadi Java

• Beberapa fakta:

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 6

• Beberapa fakta:

• Oak sudah mulai dibuat sejak tahun 1991

• Oak tadinya ditujukan untuk consumer device (television set-top box, mesin cuci, ponsel, dll)

• Kemudian Web/WWW menjadi populer, yang mempopulerkan Java dan Applet

Page 7: w8 IF2032-Intro Java

Five primary goals in the creation of

the Java language

• It should be "simple, object oriented, and

familiar".

• It should be "robust and secure".

• It should be "architecture neutral and

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 7

• It should be "architecture neutral and

portable".

• It should execute with "high performance".

• It should be "interpreted, threaded, and

dynamic".

Page 8: w8 IF2032-Intro Java

Bahasa Pemrograman Java

• Bahasa pemrograman Java (untuk selanjutnya disebut bahasa Java) merupakan bahasa dengan sintaks yang mirip C++ tanpa fitur yang kompleks

• Umumnya program dalam bahasa Java dikompilasi menjadi bentuk yang dinamakan bytecode (tidak dalam bahasa mesin native)

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 8

bytecode (tidak dalam bahasa mesin native)

• Seperti bahasa assembly, tapi untuk suatu virtual machine

• bytecode ini dijalankan di Java Virtual Machine

• Bahasa Java dirancang sebagai bahasa yang mendukung OOP

Page 9: w8 IF2032-Intro Java

Java Virtual Machine (JVM)

• JVM adalah suatu program yang menjalankan program Java

• Tepatnya, JVM menjalankan bytecode dengan menginterpretasi bytecode

• Jika tersedia JVM untuk suatu sistem operasi atau device tertentu, maka Java bisa berjalan

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 9

atau device tertentu, maka Java bisa berjalan di sistem komputer tersebut

• Semboyan Java: “Write Once Run Anywhere”

Page 10: w8 IF2032-Intro Java

Application Programming Interface

∉ Suatu bahasa pemrograman hanya mendefinisikan sintaks dan semantik bahasa tersebut

� Fungsi-fungsi dasar di suatu bahasa pemrograman disediakan oleh library, misal printf di C

disediakan oleh library C (bukan oleh bahasa C)

∉ Di Java sudah tersedia kumpulan fungsi (dalam Kelas

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 10

∉ Di Java sudah tersedia kumpulan fungsi (dalam Kelas tentunya, karena Java berparadigma OO) yang disebut sebagai Java API

� Fungsi ini dijamin ada pada setiap implementasi platform Java

Page 11: w8 IF2032-Intro Java

Total Platform Independence

JAVA COMPILERJAVA COMPILER

JAVA BYTE CODEJAVA BYTE CODE

(translator)

(same for all platforms)

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 11

JAVA INTERPRETERJAVA INTERPRETER

Windows 95 Macintosh Solaris Windows NT

(same for all platforms)

(one for each different system)

Page 12: w8 IF2032-Intro Java

Compiler

Java program

Java byte-code

Sistem Komputer

Java Virtual Machine

Java API

Program Java

Platform Java

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 12

Interpreter

Page 13: w8 IF2032-Intro Java

Yang akan dibahas dalam kuliah IF2032

• Meliputi:

• Bahasa Pemrograman Java

• Pembahasan didasarkan pada C++

• Sedikit API Java

• Sedangkan yang tidak diajarkan

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 13

• Sedangkan yang tidak diajarkan

• Internal JVM

• API Java yang kompleks

• Pemrograman Java untuk server

Page 14: w8 IF2032-Intro Java

Bahan Bacaan

• Spesifikasi Bahasa Java (The Java Language Specification)

• Java Tutorial

• Dokumentasi API Java

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 14

• Semua bisa dilihat di: http://java.sun.com

Page 15: w8 IF2032-Intro Java

Hello World

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 15

Mengenal Lingkungan Pemrograman Java

Page 16: w8 IF2032-Intro Java

Overview Hello World

• Mengerti program hello world

• Entry point program Java

• Mengkompilasi dan menjalankan program Java

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 16

Page 17: w8 IF2032-Intro Java

Hello World dalam Java

• Contoh program Hello World/*program hello world*/

class HelloWorld {

public static void main(String argv[]){

System.out.println(“Hello World”);

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 17

System.out.println(“Hello World”);

}

}

• Nama file harus sama dengan nama kelas

• Sintaks komentar sama dengan C++ (memakai // atau /* */)

Page 18: w8 IF2032-Intro Java

Mengkompilasi dan Menjalankan

• Kompilasijavac HelloWorld.java

• Perhatikan suffiks .java

• Jika berhasil, akan terbentuk file

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 18

• Jika berhasil, akan terbentuk file HelloWorld.class

• Menjalankanjava HelloWorld

• Perhatikan, tanpa suffiks .class

Page 19: w8 IF2032-Intro Java

Gambaran Proses Kompilasi dan Run

• Source code diproses oleh kompilator Java

– Menghasilkan .class

• File .class diproses oleh JVM

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 19

JVM

– Dijalankan

Page 20: w8 IF2032-Intro Java

Penjelasan Hello World

• Semua program Java merupakan kumpulan kelas

• Tidak boleh lagi ada fungsi di luar kelas, seperti di C++

• Program “hello world” juga merupakan sebuah kelas

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 20

kelas

• Pada C/C++ entry point adalah main, di Java entry point adalah: method main di sebuah kelas

• Karena di setiap kelas boleh memiliki main, maka pada sebuah aplikasi (yang punya banyak kelas) boleh ada banyak main (kita/user memilih main yang mana yang dijalankan)

Page 21: w8 IF2032-Intro Java

Definisi Main

• Main harus didefinisikan sebagai

• Method yang publik (bisa diakses dari luar kelas)

• Method yang statik (bisa dijalankan tanpa instan kelas)

• Mengembalikan void (bukan int seperti di C/C++)

• Memiliki parameter (String arg[]) yang merupakan

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 21

• Memiliki parameter (String arg[]) yang merupakan

parameter dari user

• Di C/C++: int main(int argc, char *argv[]);

• Array di Java punya informasi panjang: arg.length seperti argc di C/C++

• Elemen dari arg sama seperti char *argv[ ] di C/C++

Page 22: w8 IF2032-Intro Java

Output hello world

• Baris utama:

System.out.println(“Hello World”);

• System merupakan nama kelas di Java (kelas

standar/default)

• out merupakan objek dari kelas PrintWriter

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 22

• out merupakan objek dari kelas PrintWriter

• kelas PrintWriter akan dijelaskan kemudian pada konsep I/O Java)

• out memiliki method println() yang

mengambil parameter String

Page 23: w8 IF2032-Intro Java

Dasar Bahasa Java

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 23

Tipe Dasar, Loop, Kondisional

Page 24: w8 IF2032-Intro Java

Dasar Bahasa Java

• Tipe Primitif dan Operator terhadap tipe

• Tipe String

• Kondisional

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 24

• Loop

• Reference

Page 25: w8 IF2032-Intro Java

Tipe dasar/primitif

• Tipe dasar/primitif adalah tipe bawaan bahasa Java yang bukan merupakan sebuah kelas

• Java memiliki beberapa tipe dasar seperti di C/C++

• int (32 bit)

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 25

• int (32 bit)

• long (64 bit)

• byte (signed 8 bit)

• char (16 bit UNICODE, tidak seperti C/C++ yang merupakan 8 bit ASCII)

• float, double

Page 26: w8 IF2032-Intro Java

Range tipe primitif

-2,147,483,648 .. 2,147,483,647 (32 bits)int

-32,768 .. 32,767 (16 bits)short

-128 .. 127 (8 bits)byte

Range of valuesData type

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 26

True or falseboolean

Unicode characters (generally 16 bits per char)char

+/-10-308 to +/-10+308 and 0, about 15 digits precisiondouble

+/-10-38 to +/-10+38 and 0, about 6 digits precisionfloat

-9,223,372,036,854,775,808 .. ... (64 bits)long

Page 27: w8 IF2032-Intro Java

Object Wrapper// Create wrapper object for each primitive type Boolean

refBoolean = new Boolean(true);

Byte refByte = new Byte((byte)123);

Character refChar = new Character('x');

Short refShort = new Short((short)123);

Integer refInt = new Integer(123);

Long refLong = new Long(123L);

Float refFloat = new Float(12.3F);

Double refDouble = new Double(12.3D);

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 27

// Retrieving the value in a wrapper object

boolean bool = refBoolean.booleanValue();

byte b = refByte.byteValue();

char c = refChar.charValue();

short s = refShort.shortValue();

int i = refInt.intValue();

long l = refLong.longValue();

float f = refFloat.floatValue();

double d = refDouble.doubleValue();

Page 28: w8 IF2032-Intro Java

Operator dalam Bahasa Java

• Sifat operator Java sebagian besar sama dengan C/C++:

• Lihat slide berikut

• Operator berikut ini hanya ada di Java (tambahan):

• Perbandingan: instanceof

• Bit: >>> (unsigned shift)

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 28

• Bit: >>> (unsigned shift)

• Asignment: >>>=

• String: + penggabungan string

• Operator baru yang ada di Java hanya sedikit dan jarang dipakai (kecuali penggabungan string dengan +), sehingga tidak perlu khawatir akan lupa

Page 29: w8 IF2032-Intro Java

Operator Java yang sama dengan C/C++

• Matematik: +, -, *,/,% (modulus), unary + -

• Perbandingan: ==, !=, <, >, <=, >=,

• Boolean: &&, ||, !

• Bit: &, |, ~, <<, >>

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 29

• Bit: &, |, ~, <<, >>

• Ternary: cond?true-expr:false-expr

• Asignment: =, += -= *= /= <<= >>= &= |=

Page 30: w8 IF2032-Intro Java

Operator baru (dibanding C++)

• Ada dua operator yang baru (jika dibandingkan dengan C++) yaitu >>>dan instanceof

•>>>

• unsigned shift right, sign bilangan (bit

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 30

• unsigned shift right, sign bilangan (bit terkiri) juga di-shift ke kanan

•x instanceof b

true jika x (objek) adalah instans dari kelas b

Page 31: w8 IF2032-Intro Java

String

• String merupakan kelas khusus di Java

• Java memperlakukan String tidak seperti objek lain

• Bukan tipe dasar, tapi bagian dari bahasa Java

• String dibahas karena akan banyak dipakai (misalnya untuk menuliskan output)String s = “Hello World”;

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 31

String s = “Hello World”;

• String merupakan sebuah kelas, dan di dalamnya ada beberapa method, misalnya:

• s.length() --> panjang string

• s.substr(0, 2) --> mengembalikan “He”

(karakter ke 0 sampai ke-2 [bukan sampai dengan])

Page 32: w8 IF2032-Intro Java

Operator String

• Selain memiliki method, string juga memiliki operator “+”

• Operator + akan mengkonversi float/integer secara otomatis jika digabung dengan string

/*konversi otomatis 2 ke string*/

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 32

/*konversi otomatis 2 ke string*/

String s = “Banyaknya “+ 2;

int z = 4;

String s = “Ada “ + z + “ buah “;

String s = 5; /*tidak boleh */

Page 33: w8 IF2032-Intro Java

Literal String

• Literal string merupakan instans dari objek

string

• Method boleh dipanggil langsung dari Literal:

• “Hello”.length() menghasilkan 5

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 33

Page 34: w8 IF2032-Intro Java

Sequence Escape String

• Serangkaian karakter diawali \ (backslash) untuk mengetikkan karakter khusus, escape berikut sama dengan C/C++

•\n : newline

•\t : karakter tab

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 34

•\t

•\\ : backslash

•\” : double quote

•\' : apostrophe

• Escape khusus Java: \udddd: karakter dalam

unicode dddd adalah digit heksadesimal (0-9, A-F)

Page 35: w8 IF2032-Intro Java

Sifat Immutable String

• String sebenarnya immutable (tidak bisa diubah)

• Dalam instruksi sbb:String a = “hello”;

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 35

a = a + “ world”;

• Sebuah objek baru diciptakan, objek lama dibuang (untuk dipungut oleh garbage collector). a menunjuk ke objek yang baru

Page 36: w8 IF2032-Intro Java

Operasi perbandingan pada primitif

• Operator perbandingan (==, <, >, dll) nilai

primitif membandingkan nilai primitif tersebut

• Sifatnya sama dengan C/C++

• Contoh:

int a = 5;

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 36

int a = 5;

int b = 5;

if (a==b) { /*Sama*/}

Page 37: w8 IF2032-Intro Java

Operasi perbandingan pada objek

• Operator == terhadap reference membandingkan reference (bukan isi objek)

• Method .equals() digunakan untuk membandingkan kesamaan isi objek (termasuk juga objek String)

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 37

String a = “Hello”;

String b = “World”;

if (a.equals(b)) { /*String sama*/}

• Jangan membandingkan string dengan operator ==

Page 38: w8 IF2032-Intro Java

Perbandingan String

• Untuk membandingkan string tanpa membedakan case,

gunakan equalsIgnoreCase

• Untuk membandingkan urutan String menurut kamus

(lexicographicaly), gunakan method compareTo,

• Contoh:

str1.compareTo(str2)

– Nilai kembalian:

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 38

– Nilai kembalian:

• 0 jika string sama

• Suatu nilai negatif jika str1 < str2

• Suatu nilai positif jika str1 > str2

Page 39: w8 IF2032-Intro Java

Kondisional

• Java memiliki sintaks if dan switch yang

sama dengan C/C++

• Di Java integer tidak sama dengan boolean

• Perhatikan bahwa hal berikut tidak boleh

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 39

• Perhatikan bahwa hal berikut tidak boleh

int a = 1;

if (a) return;

//integer tdk bisa dikonversi ke boolean

• Di Java seharusnya:

if (a!=0) return;

Page 40: w8 IF2032-Intro Java

Loop

• Java memiliki sintaks loop while, for, do while yang sama dengan

C/C++

• Perlu diingat bahwa boolean tidak sama dengan integer di Java

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 40

sama dengan integer di Java

• Di Java 5 ada sintaks loop baru (akan dijelaskan pada materi lain)

Page 41: w8 IF2032-Intro Java

Semua di Java adalah Reference

• Java tidak mengenal pointer

• Semua operasi dan operator pointer yang ada di C/C++ tidak bisa dilakukan di Java (&, *, aritmatika pointer)

• Semua objek di Java berlaku sebagai

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 41

• Semua objek di Java berlaku sebagai reference (sifatnya mirip pointer, tapi tanpa * dan &)

• Objek tidak bisa dipertukarkan dengan tipe

dasar. Tapi di JDK 1.5 ada autoboxing/unboxing

Page 42: w8 IF2032-Intro Java

OOP di Java

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 42

Kelas, Objek, Penurunan

Page 43: w8 IF2032-Intro Java

OOP Dengan Java

• Kelas

• Instansiasi Objek

• Penurunan

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 43

Page 44: w8 IF2032-Intro Java

Kelas di Java

• Kelas dituliskan dengan keyword class, dengan isi kelas menyatu

dengan deklarasinya

• Di C++ deklarasi dan definisi boleh dipisah boleh disatukan

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 44

dipisah boleh disatukan

• Access modifier harus ditulis untuk setiap member (baik data maupun method)

Page 45: w8 IF2032-Intro Java

Kelas Point

• Perhatikan kelas berikut

class Point {

int x, y;

int getX() { return x;}

int getY() { return y;}

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 45

int getY() { return y;}

};

• Kelas di atas dapat dicompile sebagai C++ ataupun Java

• Namun sebenarnya tidak sama (access modifiernya berbeda)

Page 46: w8 IF2032-Intro Java

Instansiasi Objek

∉ Deklarasi

Point p;

Perhatikan, ini sama dengan: Point *p di C++

(konstruktor belum dipanggil)

∉ Alokasi

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 46

∉ Alokasi

p = new Point(); //konstruktor

dipanggil

∉ Akses field dan method dengan titik (bukan ->)

p.x = 5;

int x = p.getX();

Page 47: w8 IF2032-Intro Java

Access Modifer

∉ Default Access Modifier di Java adalah “default” (di C++ adalah private)

� Ini akan dijelaskan lebih lanjut pada konsep “Package”

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 47

� Secara sederhana: kelas pada direktori yang sama bisa mengakses field default

∉ Java juga mengenal akses modifier private, public, dan protected, dengan sifat sama seperti di C++

Page 48: w8 IF2032-Intro Java

Penempatan Access Modifier

∉ akses modifier dilakukan dengan menempatkannya langsung di depan nama setiap property atau method

– di C++ ada tanda ':' setelah access modifier dan akses method berlaku untuk semua

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 48

dan akses method berlaku untuk semua method/property sampai akses modifier berikutnya

class Point3D {

private int x, y;

public int z;

}

Page 49: w8 IF2032-Intro Java

Garbage Collector

• Java memiliki garbage collector

• Thread yang otomatis mendealokasi memori yang tidak diperlukan

• Meskipun ada “new”, tapi tidak ada “delete”

• Java secara otomatis melacak penggunaan variabel dan

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 49

• Java secara otomatis melacak penggunaan variabel dan objek

• Memori otomatis dibereskan jika sudah tidak dipakai

• Pemberesan dilakukan jika sudah dirasa perlu oleh JVM (ketika load sedang rendah dan memori mulai penuh)

• Pemberesan paksa bisa dilakukan

Page 50: w8 IF2032-Intro Java

Menjalankan Paksa Garbage Collector

• Dalam keadaan tertentu sampah perlu dibereskan dengan segera (tidak menunggu sistem yang melakukannya)

– Operasi akan lebih cepat jika memori dalam keadaan “kosong”, jadi kadang memori perlu dibereskan sebelum operasi kompleks

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 50

perlu dibereskan sebelum operasi kompleks dilakukan

• Dilakukan dengan instruksi:System.gc();

Page 51: w8 IF2032-Intro Java

Method di Java

• Hanya ada sedikit perbedaan antara method di C++ dengan Java

• Java tidak memiliki parameter default

• method tidak bisa ditandai const

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 51

• method tidak bisa ditandai const

• Tidak ada pointer/reference untuk tipe dasar

• Konsekuensi paling sederhana: tidak bisa membuat method untuk menukar dua tipe dasar

Page 52: w8 IF2032-Intro Java

Passing parameter

• Passing parameter Selalu by value• Tipe primitif

• Dibuat salinannya• Variabel parameter boleh diubah/dipakai, tapi tidak mengubah nilai/variabel

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 52

tapi tidak mengubah nilai/variabel pemanggil

• Tipe reference (objek)• Pass by reference, method yang dipanggil mempengaruhi objek pada parameter

• Jika diassign nilai baru, maka tidak akan terlihat efeknya oleh pemanggil

Page 53: w8 IF2032-Intro Java

Bandingkan kedua potongan kode

class A {

int v = 0;

void incA(){v++;}

void hello(A

objekA, int z) {

objekA.incA();

class A {

int v = 0;

void incA(){v++;}

void hello(A

objekA, int z){

objekA = new A();

objekA.incA();

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 53

z = 9; }

}

A x = new A();

int m = 2;

hello(x, m);

//x.v = 1, m tetap 2

objekA.incA();

z = 9;}

}

A x = new A();

int m = 2;

hello(x, m);

//x.v = 0, m tetap 2

Page 54: w8 IF2032-Intro Java

Konstruktor

• Di Java hanya ada konstruktor

• Tidak ada Copy Constructor

• Tidak ada destruktor

• Otomatis ada garbage collection (pemberesan

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 54

• Otomatis ada garbage collection (pemberesan memori secara otomatis)

• Ada finalizer finalize()

• Tidak ada operator =, tapi ada method clone()

• Baca dokumentasi clone di API Java

Page 55: w8 IF2032-Intro Java

Deklarasi Konstruktor

• Nama konstruktor sama dengan nama kelas dan tidak memiliki nilai kembalian (sama seperti C++)

• Boleh ada banyak konstruktor (sama seperti C++)

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 55

C++)

• Contoh konstruktor

Point(int x, int y) {

this.x = x;

this.y = y;

}

Page 56: w8 IF2032-Intro Java

Copy Constructor

• Tidak ada copy constructor yang otomatis dijalankan di Java

• Untuk membuat sesuatu yang mirip dengan copy constructor C++:

– buat konstruktor yang parameternya adalah

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 56

– buat konstruktor yang parameternya adalah objek yang merupakan instans kelas tersebutclass A { A(A x) { } }

– Isi method adalah menyalin x ke objek saat ini

Page 57: w8 IF2032-Intro Java

Perbedaan dengan C++

• Copy constructor yang dibuat di Java harus dipanggil manual:A x = new A();

A y = new A(x); /* memanggil copy

constructor x disalin menjadi y*/

• Copy constructor di C++ otomatis

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 57

• Copy constructor di C++ otomatis dijalankan pada:

– Saat deklarasi sambil inisialisasi

– Pemanggilan fungsi tanpa reference

Page 58: w8 IF2032-Intro Java

Operator assignment

• Di Java, tidak ada keyword “operator” seperti di C++

– Tidak bisa membuat operator =

• Untuk membuat salinan objek (deep clone), override method clone() di kelas objek:

Object clone() { }

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 58

Object clone() { }

• Buat salinan objek, lalu return-kan salinan tersebut

• Jika ada copy constructor, clone bisa ditulis:

Object clone() { return new A(this);

}

Page 59: w8 IF2032-Intro Java

Inheritance

• Di Java hanya ada single inheritance

• Penurunan selalu bersifat “public” (tidak ada penurunan private dan protected

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 59

ada penurunan private dan protected seperti di C++)

• Kata kunci yang dipakai adalah extends

class Line3D extends Line2D {

}

Page 60: w8 IF2032-Intro Java

Kelas Abstrak

• Di C++ boleh ada method virtual murni dalam sebuah kelas, di Java juga boleh ada method semacam itu

• method virtual murni: method yang belum ada isinya

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 60

ada isinya

• Method virtual murni dalam Java ditandai dengan kata kunci abstract

• Kelas yang mengandung method virtual murni harus dideklarasikan dengan kata kunci abstract

Page 61: w8 IF2032-Intro Java

Contoh kelas Abstrak dan Turunannya

abstract class Bangun {

void test() {

System.out.println(“Luas”+getLu

as()); }

abstract int getLuas();

}

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 61

}

class Lingkaran extends Bangun {

int getLuas() { return pi*r*r;}

}

Page 62: w8 IF2032-Intro Java

Keyword super

• Memanggil konstruktor superclass

• Dengan parameter yang sesuai tentunya

• Parameter boleh kosong, seperti ini: super()

• Harus merupakan statement pertama

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 62

• Harus merupakan statement pertama dalam konstruktor anak

• Harus mengaktifkan super sebelum

melakukan operasi yang lain

Page 63: w8 IF2032-Intro Java

Memanggil konstruktor parent

class Ortu {

Ortu(String namaKeluarga) {

family=namaKeluarga; }

}

class Anak {

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 63

class Anak {

Anak(String nama, String

namaKeluarga) {

super(namaKeluarga);

}

}

Page 64: w8 IF2032-Intro Java

Pemanggilan Method pada Parent

• Jika suatu method meng-override method parent dan ingin memanggil implementasi parent, gunakan syntax:super.namamethod(parameter)

• Sifat super pada konstruktor

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 64

• Sifat super pada konstruktor

– konstruktor default (nullary constructor) parent akan selalu dipanggil jika super() tidak dipanggil

Page 65: w8 IF2032-Intro Java

Interface

• Java memiliki konsep interface yang tidak dimiliki C++

• Konsep ini memungkinkan sebagian fitur multiple inheritance diimplementasikan

• Interface adalah kelas yang semua

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 65

• Interface adalah kelas yang semua methodnya belum didefinisikan

• Semua method kosong

Page 66: w8 IF2032-Intro Java

Contoh interface

interface Draw {

void draw();

void draw3D();

}

Interface tidak punya konstruktor,

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 66

• Interface tidak punya konstruktor, destruktor (finalizer), dan apapun, hanya punya member variabel dan deklarasi method

Page 67: w8 IF2032-Intro Java

Implementasi interface

• Isi interface diimplementasikan oleh kelas dengan keyword implements

• Sebuah kelas boleh mengimplementasikan banyak interface

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 67

mengimplementasikan banyak interface

• Contoh:class Lingkaran implements Draw {

void draw() { /*implementasi draw*/ }

void draw3D() { /*implementasi

draw3D*/ }

}

Page 68: w8 IF2032-Intro Java

Implementasi banyak interface

interface Color {

void setColor(int color);

int getColor();

}

class Lingkaran implements Draw, Color

{

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 68

{

void draw() { /*implementasi draw*/

}

void draw3D() { /*implementasi

draw3D*/ }

void setColor(int color);

int getColor();

}

Page 69: w8 IF2032-Intro Java

Beda kelas abstrak dengan interface

• Kelas abstrak boleh memiliki method yang sudah diimplementasikan

• Interface harus “kosong” (tidak ada method yang terdefinisi pada interface)

• Kelas hanya boleh meng-extend

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 69

• Kelas hanya boleh meng-extend (diturunkan dari) satu kelas

• Kelas boleh mengimplementasikan banyak interface

Page 70: w8 IF2032-Intro Java

Kapan memakai kelas abstrak dan interface

• Kelas abstrak

• Jika sudah ada algoritma yang bisa diimplementasikan di kelas tersebut

• Interface

• Hanya memberi kontrak, misalnya

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 70

• Hanya memberi kontrak, misalnya Interface Measureable untuk menyatakan objek yang bisa diukur keliling dan luasnya

Page 71: w8 IF2032-Intro Java

Contoh Pemanfaatan Interface (1)

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 71

Page 72: w8 IF2032-Intro Java

Contoh Pemanfaatan Interface (2)

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 72

Page 73: w8 IF2032-Intro Java

Inner Class

• Kelas di dalam kelas:

class A {

class B {

}

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 73

}

}

• Kelas B hanya boleh dipakai di A

– Tidak bisa: A.B x = new A.B()

– Salah satu tujuan kelas internal agar B tidak terlihat dari luar

Page 74: w8 IF2032-Intro Java

static inner class

• Kelas internal bisa didefinisikan agar dapat diakses dari luarclass A {

static class B { }

}

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 74

A.B x = new A.B(); /*bisa/boleh*/

Page 75: w8 IF2032-Intro Java

Package

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 75

Konsep Package dalam Java

Page 76: w8 IF2032-Intro Java

Package

• Sekumpulan kelas Java bisa dikelompokkan dalam package

– Seperti namespace di C++

– Umumnya pengelompokkan dilakukan berdasarkan fungsionalitas

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 76

berdasarkan fungsionalitas

• Kelas yang berada di direktori yang sama otomatis berada dalam package yang sama

– Package berhubungan langsung dengan filesystem

Page 77: w8 IF2032-Intro Java

Contoh Penggunaan Package

• Kita ingin mengelompokkan kelas yang berhubungan dengan image, misalnya:

– ImageGIF, ImageJPEG

– kedua file kelas tersebut ada di direktori c:\source\image

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 77

c:\source\image

• nama package diberikan di file ImageGIF.java (dan ImageJPEG.java) dengan keyword package, seperti ini:

package image;

class ImageGIF {

}

Page 78: w8 IF2032-Intro Java

Mengkompilasi kelas dalam Package

• Dari direktori di c:\source

javac image\ImageGIF.java

javac image\ImageJPEG.java

• Lalu bagaimana memakai kelas dalam package tertentu?

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 78

tertentu?

– Kita perlu menyebutkan dengan lengkap nama package dan kelas atau

– Kita perlu mengimpor package atau kelas tersebut

Page 79: w8 IF2032-Intro Java

Memakai ImageGIF

• Gunakan nama lengkap (nama package + nama Kelas) dengan titik untuk memakai kelas dalam Package

– Cara ini merepotkan (harus selalu mengetik nama lengkap)

– Misalkan file TestImage.java yang memakai ImageGIF ada di c:\source

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 79

class TestImage {

void hello() {

image.ImageGIF a = new

image.ImageGIF();

}

}

Page 80: w8 IF2032-Intro Java

Memakai ImageGIF dengan Import

• Instruksi import digunakan agar nama kelas pada suatu package dikenali tanpa nama lengkapnya (cukup nama kelasnya), contoh:import image.ImageGIF;

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 80

import image.ImageGIF;

class TestImage {

void hello() {

ImageGIF a = new ImageGIF();

}

}

Page 81: w8 IF2032-Intro Java

Instruksi import

• import namapackage.NamaKelas;

– harus satu per satu nama kelas disebutkan

• atau import namapackage.*;

– semua Kelas dalam package tersebut diimport

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 81

diimport

– lebih singkat menuliskannya

– kompilasi lebih lama (semua nama kelas dicek)

Page 82: w8 IF2032-Intro Java

Mengkompilasi TestImage

• Pindah ke drive C

– ketik c:

• Pindah ke direktori source

– ketik: cd \source

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 82

• Kompilasi seperti biasa

– ketik: javac TestImage.java

Page 83: w8 IF2032-Intro Java

Hierarki Package

• Package bisa bertingkat

– misalnya kita ingin membuat package SMSserver

– di dalam package smsserver ada package gsm dan cdma, masing-masing memiliki kelas SMS

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 83

– boleh ada 2 kelas bernama sama di package berbeda

• cara membuat direktori:

mkdir c:\SMSserver

mkdir c:\SMSserver\gsm

mkdir c:\SMSserver\cdma

Page 84: w8 IF2032-Intro Java

Menempatkan file

• File SMS.java untuk package cdma diletakkan di direktori c:\SMSserver\cdma

– header file SMS.java berisi:

package SMSserver.cdma;

• File SMS.java untuk package gsm diletakkan di

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 84

• File SMS.java untuk package gsm diletakkan di direktori c:\SMSserver\gsm

– header file SMS.java berisi:

package SMSserver.gsm;

Page 85: w8 IF2032-Intro Java

Mengkompilasi Isi Package

• Kompilasi dilakukan seperti biasa (dari c:\)

javac c:\smsserver\cdma\*.java

javac c:\smsserver\gsm\*.java

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 85

Page 86: w8 IF2032-Intro Java

Mengimpor package dalam hierarki

• Import dengan nama package (yang hierarkinya nama packagenya dipisah dengan titik)

import smsserver.gsm.SMS;

• Hirerarki bisa bertingkat sebanyak mungkin

• Jika dalam package smsserver ada file MainServer.java, maka

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 86

MainServer.java, maka

– import smsserver.*;

– hanya akan mengimpor semua kelas dalam package smsserver tapi tidak mengimpor kelas dalam subpackage gsm dan cdma

Page 87: w8 IF2032-Intro Java

Penamaan Package

• Semua karakternya memakai huruf kecil

• Sesuai penamaan domain, tapi terbalik, misalnya package XML milik lab programming ITB:

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 87

programming ITB:id.ac.itb.informatika.programming.

xml

• nama id.ac.itb.if.programming tidak bisa dipakai, karena if adalah keyword di Java

Page 88: w8 IF2032-Intro Java

Pemaketan package dalam file JAR

• Selain diletakkan dalam direktori, file kelas bisa dimasukkan dalam file JAR

• Contoh pembuatan file JAR:

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 88

jar -cf smsserver.jar c:\

• File JAR harus dimasukkan ke classpath agar dapat dipakai

Page 89: w8 IF2032-Intro Java

Class path

• Classpath adalah lokasi (path) di mana Java akan mencari file class

• Default classpath java adalah . (titik) yang berarti direktori saat ini, dan file JAR milik sistem (bawaan Java)

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 89

JAR milik sistem (bawaan Java)

• Classpath bisa diubah export CLASSPATH=/usr/test.jar:. (Linux)

set CLASSPATH=c:\test.jar;. (Windows)

Page 90: w8 IF2032-Intro Java

Contoh Pemakaian Classpath

• Masukkan seluruh direktori smsserver atau direktori image dalam contoh sebelumnya ke c:\library

• set classpath menjadi c:\library dan direktori saat ini:

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 90

direktori saat ini:set CLASSPATH=c:\library;.

• Setelah classpath diset, maka file yang memakai kelas dalam package boleh berada di mana saja

Page 91: w8 IF2032-Intro Java

Contoh: isi kelas dalam JAR

• Masukkan file jar ke c:\library

• set classpath menjadi:set

CLASSPATH=c:\library\smsserve

r.jar;c:\library\image.jar;.

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 91

r.jar;c:\library\image.jar;.

• File yang memakai kelas dalam package boleh berada di mana saja

Page 92: w8 IF2032-Intro Java

Menjalankan Program dalam Package

• Set classpath, lalu:java

namapackage.subpackage.KelasX

• Atau set classpath untuk saat ini saja:

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 92

saja:java -cp test.jar;.

namapackage.subpackage.KelasX

Page 93: w8 IF2032-Intro Java

Polymorphism

• Sebuah kelas “tahu” konteksnya berdasarkan

reference yang ditunjuknya

• Contoh:

– Lingkaran dan Segitiga diturunkan dari Bangun.

Bangun memiliki method luas yang mengembalikan

integer yang masih abastrak (diimplementaskan

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 93

integer yang masih abastrak (diimplementaskan

oleh Lingkaran dan Segitiga)

– Jika sebuah variabel (reference) bertipe Bangun

menunjuk ke Lingkaran, maka “sifatnya” akan

seperti Lingkaran, jika menunjuk ke Segitiga, maka

“sifatnya” seperti Segitiga.

Page 94: w8 IF2032-Intro Java

Contoh - Polymorphism

Lingkaran l = new Lingkaran(10);

Segitiga s = new Segitiga(1,2,3);

Bangun b = l;

/* mencetak lingkaran */

System.out.println(b.getLuas());

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 94

System.out.println(b.getLuas());

/* mencetak segitiga */

b = s;

System.out.println(b.getLuas());

Page 95: w8 IF2032-Intro Java

Method/Algoritma Generik dengan Polymorphism

• Dari contoh sebelumnya bisa dibuat

method printLuas:

void printLuas(Bangun b) {

System.out.println(b.getLuas());

}

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 95

}

printLuas(s);

printLuas(l);

Page 96: w8 IF2032-Intro Java

Array

Objek Array

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 96

Objek Array

Page 97: w8 IF2032-Intro Java

Array adalah objek

• Di Java, array adalah Objek

• Contoh array:char ac[] = { 'n', 'o', 't', ' ',

'a', ' ', 'S', 't', 'r', 'i', 'n',

'g' };

• member yang ada: length dan semua

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 97

• member yang ada: length dan semua method yang ada di kelas Objek

• dalam array di atas:ac.length == 12

Page 98: w8 IF2032-Intro Java

Array dinamis

• Array diciptakan dengan new

• Contoh array of Integer:int a[] = new int[5];

• Array tidak bisa diresize

– untuk mengubah ukuran array, buat array

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 98

– untuk mengubah ukuran array, buat array baru, salin isi array lama ke yang baru

Page 99: w8 IF2032-Intro Java

Array of Objects

• new pada array hanya mengalokasikan

array, kode:Lingkaran ling = new Lingkaran[5];

– Hanya menciptakan array of lingkaran (lingkarannya sendiri belum diciptakan, perhatikan bahwa ini berbeda dengan C++)

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 99

perhatikan bahwa ini berbeda dengan C++)

• Untuk membuat 5 Objek Lingkaran dalam array ling:

for(int i = 0; i<5; i++)

ling[i] = new Lingkaran();

Page 100: w8 IF2032-Intro Java

Array Multidimensi

• Array multidimensi diakses dengan operator [] sebanyak dimensinya

• Contoh:int matriks[][] = new int[5][6];

• Untuk array yang ukuran tiap barisnya

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 100

• Untuk array yang ukuran tiap barisnya tidak sama:int matrix[][] = new int[5][];

matrix[0] = new int[5];

matrix[1] = new int[3];

Page 101: w8 IF2032-Intro Java

OOP Spesifik Java

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 101

Konsep OOP Spesifik Java

Page 102: w8 IF2032-Intro Java

Kelas Akar

• Kelas akar (root class) adalah kelas yang menjadi nenek moyang (ancestor) semua objek

• Di Java, kelas akar adalah Object (java.lang.Object)

• Kelas yang tidak diturunkan dari apapun berarti

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 102

• Kelas yang tidak diturunkan dari apapun berarti diturunkan dari kelas yang bernama Object

– Implikasinya: semua kelas adalah turunan dari Object

• Object memiliki beberapa method dasar seperti: toString(), clone(), dan method untuk

sinkronisasi

Page 103: w8 IF2032-Intro Java

Method String toString()

• Override method toString() untuk mencetak objek dengan lebih baik

• Misal, untuk kelas Point, isi methodnya:

String toString() {

return “[“ + x + “, “ + y + “]”;

}

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 103

}

• Dengan method di atas, Point bisa dicetak dengan mudah:

Point p = new Point(1,2);

System.out.println(p); /*mencetak point*/

• output potongan kode di atas: [1, 2]

Page 104: w8 IF2032-Intro Java

final

• Sesuatu yang final tidak bisa diubah

– Pada member variable berarti konstanta

– Pada member function berarti tidak bisa diubah di turunannya

• Final member

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 104

• Final memberfinal int pi=3.14;

• Final functionfinal void hello() {

}

– Error jika di-redefinisi di turunannya

Page 105: w8 IF2032-Intro Java

finalize

• Dalam kondisi tertentu ada resource yang tidak bisa direlease oleh Java

–misal: kode yang memanggil kode native

– resource ini harus direlease secara manual

• Kita bisa membuat Method finalize

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 105

• Kita bisa membuat Method finalize

yang akan dieksekusi sebelum garbage collector menghancurkan Objek tersebut

– biasanya yang dilakukan adalah membebaskan resource

Page 106: w8 IF2032-Intro Java

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 106

Page 107: w8 IF2032-Intro Java

Exception

Exception di Java

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 107

Exception di Java

Page 108: w8 IF2032-Intro Java

Exception

• Sebagai bahasa yang mendukung OOP, Java mendukung Exception

– Sintaks dan sifatnya mirip sekali dengan C++

• sintaks dasar:

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 108

• sintaks dasar:try {

} catch (Exception e) {

}

Page 109: w8 IF2032-Intro Java

Perbedaan dengan C++

• Dalam klausa catch tidak perlu & (reference), karena semua di Java adalah reference

• Kelas Exception harus diturunkan dari kelas Throwable

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 109

kelas Throwable

– Di C++ kelas apa saja bisa menjadi kelas Exception

– Kelas eksepsi yang paling standar di Java adalah: Exception

Page 110: w8 IF2032-Intro Java

Klausa finally

• Klausa finally: dieksekusi apapun yang terjadi (baik eksepsi dilempar atau tidak)try {

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 110

} catch (Exception e) {

} finally {

//kode

}

Page 111: w8 IF2032-Intro Java

Contoh Exception dengan Finally

• Dalam potongan kode berikut:

try {

System.out.println(“Hello”);

//kode lain

} catch (Exception e) {

System.out.println(“World”);

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 111

System.out.println(“World”);

} finally {

System.out.println(“Selesai”);

}

• Apapun yang terjadi “Selesai” akan diprint

Page 112: w8 IF2032-Intro Java

Perhatikan bahwa

• Pada potongan kode berikut:

public class Test {

int testMethod() {

try {

return 5;

} catch (Exception e) {

IF-ITB/2009IF2032– Pemrograman Berorientasi Objek

Page 112

} finally {

return 10;

}

}

}

• testMethod akan mengembalikan 10 (dan bukan 5)