OBJECT ORIENTED PROGRAMMING
(OOP)
1.1 Objek
Objek adalah benda, baik yang berwujud nyata seperti yang dijumpai dalam kehidupan kita,
maupun yang tidak nyata, seperti halnya yang berupa sistem atau konsep. Dalam Object Oriented
Programming (OOP), objek adalah unit terkecil pemrograman yang memiliki data (sifat
karakteristik) dan fungsi.
Pena yang kita pegang untuk menulis, mobil/motor yang kita kendarai saat bepergian, kue yang
kita makan, kucing yang kita pelihara, telefon yang kita gunakan untuk berkomunikasi, kesemuanya
adalah benda nyata dan merupakan objek. Pembayaran tagihan melalui internet, sistem antrian tiket
di bioskop, penyimpanan uang di bank, atau pengendalian komunikasi data pada port I/O komputer,
meskipun bukan benda nyata, namun kesemuanya juga merupakan objek.
Bagi anda yang pernah mempelajari bahasa pemrograman lain seperti Delphi, Visual Basic atau
Visual C, pada saat mendesain layout grafis user interface tentulah tidak asing lagi dengan
komponen CommandButton, EditText, Label, MessageBox, ProgressBar dan lain
sebagainya. Ini semua juga merupakan objek. Masing-masing komponen memiliki data atau yang
biasa dikenal sebagai properties, dan juga fungsi (method).
Objek adalah
Kesatuan entitas (benda), baik yang berwujud nyata atau pun
hanya suatu sistem atau konsep yang memiliki sifat karakteristik
dan fungsi.
http://subari.blogspot.com – PBO
2
1.2 Kelas
Kelas adalah wadah yang berisi abstraksi (pemodelan) dari suatu objek (benda), yang
mendeskripsikan data (sifat karakteristik) dan fungsi yang dimiliki oleh objek tersebut. Karena
kelas merupakan wadah yang akan digunakan untuk menciptakan objek, jelaslah bahwa kita harus
membuat kelas terlebih dahulu sebelum membuat objek.
Kelas adalah
Pemodelan dari objek yang berisi informasi (aturan) tentang sifat
karakteristik (data) dan tingkah laku (method) yang dimiliki oleh
objek tersebut.
Hubungan antara kelas dan objek dapat diilustrasikan sebagai resep kue dengan kue-nya, di
mana resep kue adalah kelas dan kue adalah objeknya. Sebelum membuat kue, kita harus membaca
dan mempelajari resep kue tersebut terlebih dahulu. Di dalam resep disebutkan data mengenai kue,
yaitu bahan-bahan yang diperlukan serta fungsi-fungsi yaitu bagaimana cara mengolah bahan
tersebut hingga menjadi kue yang siap disajikan. Pada OOP, kita tidak hanya menggunakan resep
kue yang sudah ada untuk membuat kue, namun juga menciptakan resep-resep kue yang baru sesuai
selera kita. Oleh sebab itu, yang menjadi fokus dalam OOP adalah bagaimana menciptakan dan
mendefinisikan kelas yang kelak menjadi wadah untuk membuat objek-objek.
1.3 Instance (Instans)
Objek dapat dikatakan juga sebagai instans (instance) dari suatu kelas. Maksudnya, objek
merupakan perwujudan dalam bentuk benda; baik berupa benda nyata, maupun konsep, sesuai
dengan deskripsi yang telah didefinisikan oleh kelas. Proses pembentukan objek dari suatu kelas
disebut instansiasi (instantiation).
Instans adalah Perwujudan.
Dalam istilah pemrograman, objek merupakan instans (perwujudan)
dari suatu kelas. Instansiasi adalah : Proses perwujudan kelas
menjadi objek.
Dari ilustrasi sebelumnya, pena merupakan instans dari kelas Alat Tulis yang memiliki data
(sifat karakteristik) berbentuk batang, mudah digerakkan, runcing di bagian ujungnya serta
memiliki fungsi mengeluarkan tinta saat dipakai menulis. Mobil merupakan instans dari Kendaraan
Transportasi Darat , yang memiliki data beroda 4, berkapasitas 4-9 penumpang, dan memiliki fungsi
percepatan, pengereman, transmisi gigi. Kue merupakan instans dari resep kue, dan seterusnya.
Resep Kue
http://subari.blogspot.com – PBO
3
2 Data ó Variabel ó Property
Data adalah sifat karakteristik atau kondisi yang dimiliki oleh suatu objek. Ketiga istilah tersebut
(data, variabel , property) memiliki pengertian yang sama, dan dapat digunakan/dianalogikan
secara bergantian untuk lebih memperjelas suatu konsep. Ada juga buku yang menggunakan istilah
atribut (attribute). Dalam OOP, istilah data lebih cenderung diartikan sebagai variabel yang
membentuk sifat karakteristik dari suatu kelas. Sebagian besar buku referensi OOP menggunakan
istilah data, namun di dalam buku ini kita akan memakai istilah data dan variabel secara bergantian
agar lebih jelas.
Data adalah : Sifat karakteristik yang dimiliki oleh objek.
Dalam beberapa referensi, data dianalogikan juga sebagai
variabel, property, atau atribut.
Sebagai ilustrasi, kita ingin membuat kelas BolaSport, yang memiliki objek diantaranya; bola
pingpong, bola sepakbola, bola basket, bola volley, bola bowling dan sebagainya. Karena kelas
merupakan abstraksi dari objek, maka pemilihan data haruslah yang dapat merepresentasikan objek
secara umum. Beberapa data yang dapat digunakan yakni diameter, berat, bahan pembuat bola
(plastik, karet, nilon sintetis), tekstur permukaan dan warna.
Dari kelas HewanDaratBerkakiEmpat, dapat diinstans objek-objek kucing, anjing, kuda,
harimau, sapi, serigala dan lain sebagainya. Data dari kelas ini adalah: jumlah kaki, bulu, ekor, jenis
makanan dan sebagainya.
1.4 Method ó Prosedur/Fungsi ó Behaviour
Method adalah prosedur/fungsi yang dimiliki oleh sebuah objek. Karena pada hakikatnya
merupakan prosedur/fungsi, maka method ini akan mengolah atau mengubah data/variabel yang ada
di dalam objek sesuai dengan operasi yang telah ditentukan. Dari proses tersebut akan terjadi tiga
kemungkinan;
1. Mengembalikan suatu nilai akhir.
2. Mengembalikan nilai yang bersifat sementara untuk kemudian
diumpankan ke method lain.
3. Tidak mengembalikan nilai sama sekali.
Seperti halnya data, keempat istilah method/prosedur/fungsi/behaviour memiliki pengertian yang
sama, namun kita akan lebih banyak menggunakan istilah method.
Method adalah : Prosedur atau fungsi yang dimiliki
oleh suatu objek. Dalam beberapa referensi, method
dianalogikan juga dengan istilah prosedur, fungsi
dan behaviour.
Dari kelas Hewan Darat Berkaki Empat, selain data yang telah didefinisikan sebelumnya, kita
juga dapat menentukan method yang dimiliki oleh kelas tersebut. Untuk mudahnya, ambilah
method cara hewan-hewan tersebut bersuara, sehingga untuk kucing akan bernilai “mengeong”,
anjing “menggonggong”, kuda “meringkik”, sapi “melenguh”, harimau “mengaum”. Data dan
method ini harus dideklarasikan dan didefinisikan di dalam ClassBody.
http://subari.blogspot.com – PBO
4
1.5 Hierarki Kelas
Suatu kelas dapat dibuat sebagai kelas yang benar-benar baru, atau dapat juga dibentuk dari
kelas yang sudah ada. Baru di sini dalam pengertian, semua data dan method yang dimiliki oleh
kelas tersebut kita deskripsikan dan buat sendiri. Sedangkan bila membentuk dari kelas yang sudah
ada, bermakna kita menggunakan data dan method yang telah dideskripsikan dalam suatu kelas
acuan (fundamen). Proses pembentukan kelas baru dari kelas yang sudah ada disebut sebagai
pewarisan (inheritance). Kelas yang menjadi basis bagi pembentukan kelas lainnya disebut
sebagai Kelas Super, sedangkan kelas yang terbentuk dinamakan Kelas Sub.
Proses pewarisan ini akan menghasilkan suatu hierarki kelas. Kelas yang terletak pada
puncak hierarki disebut sebagai Kelas Abstrak. Sifat dari kelas abstrak adalah, ia hanya berisi
deskripsi data dan method yang sangat umum, sehingga tidak mungkin diimplementasikan secara
terperinci. Oleh sebab itu, kelas abstrak ini tidak dapat langsung diinstansiasi menjadi objek.
Sebagai ilustrasi, tinjaulah hierarki kelas dari Kelas Hewan Darat Berkaki Empat yang
memiliki objek (instans) berupa sapi, anjing, harimau, kuda, dan kucing. Kelas tersebut dihasilkan
dari pewarisan kelas Hewan Darat, yang merupakan kelas sub dari Kelas Hewan, dan seterusnya
sampai ke puncak kelas, yakni Kelas Mahluk Hidup. Dalam ilustrasi ini, Kelas Mahluk Hidup
adalah kelas abstrak. Kita tidak mungkin menginstans objek-objek tersebut langsung dari Kelas
Mahluk Hidup, karena ia hanya mengandung deskripsi data dan method yang sangat umum. Data
bisa berupa organ-organ tubuh, sedangkan method berupa bernafas, makan, menghasilkan
keturunan, dan sebagainya.
Kelas Hewan Darat
Berkaki Empat
Kelas Hewan
Hidup di Darat
Kelas Hewan
Hidup di Air
Kelas Hewan
Bisa Terbang
Kelas Hewan Kelas Tumbuhan
Kelas Mahluk Hidup
Kelas Manusia
http://subari.blogspot.com – PBO
5
1.6 Object Oriented Programming
Object Oriented Programming atau Pemrograman Berorientasi Objek adalah konsep
pemrograman yang difokuskan pada penciptaan kelas yang merupakan
abstraksi/blueprint/prototype dari suatu objek. Kelas ini harus mengandung sifat (data) dan
tingkah laku (method) umum yang dimiliki oleh objek-objek yang kelak akan dibuat (diinstansiasi).
Data dan method merupakan anggota (member) dari suatu kelas
Untuk lebih memperjelas pemahaman tentang definisi di atas, marilah kita tinjau contoh
program kalkulator sederhana yang akan menampilkan operasi dasar matematika penjumlahan,
pengurangan, perkalian, pembagian. Kalkulator merupakan objek yang dibentuk dari kelas Alat
Bantu Hitung Elektronik. Objek-objek lainnya yang dapat diinstansiasi dari kelas tersebut
diantaranya : komputer, Personal Data Assitance (Palm), mesin Cash Register dan sebagainya.
2 Hubungan antara Kelas, Objek, Data dan Method
Dalam konsep OOP, objek diciptakan atau diinstansiasi dari kelas dengan mengisikan nilai
parameter data dan memanfaatkan method yang telah dideskripsikan oleh kelas tersebut. Dengan
demikian kelas juga merupakan template/prototipe dari suatu objek. Sama seperti kita hendak
membuat lingkaran, kotak, atau flow diagram dengan menggunakan drawing tools seperti Visio.
Kita hanya perlu mengakses suatu template gambar, klik dan drag objek yang diinginkan, dan
kemudian melakukan adjustment (penyesuaian) ukuran.
Objek-objek yang berasal dari kelas yang sama akan memiliki tipe data yang sama (meskipun
dengan nilai yang berbeda) dan fungsi yang sama. Objek dikatakan juga sebagai instance dari suatu
kelas.
Dari kacamata seorang arsitek, gambar rancang bangun (desain cetak biru) merupakan suatu
kelas, sedangkan objeknya adalah rumah/gedung itu sendiri. Di dalam cetak biru, setiap bagian
rumah memiliki skala, dimensi dan susunan keterkaitan dengan bagian lainnya Bagi seorang
koki/pembuat kue, resep adalah suatu kelas, sedangkan masakan/kue merupakan objek.
3 Kerangka Program OOP
Pada bagian ini kita akan mengaktualisasikan konsep-konsep OOP ke dalam bentuk program Java.
Di sini akan diperkenalkan banyak istilah-istilah baru yang sering digunakan dalam membuat
program. Anda tidak perlu khawatir bila pada bagian akhir dari bab ini masih terdapat bagian/istilah
yang belum anda pahami atau kuasai. Ibarat seorang peserta rally mobil Off Road, bab ini memang
dirancang sebagai peta jalan atau road map, sehingga anda tahu medan yang akan ditempuh, dan
bagaimana untuk sampai ke sana.
http://subari.blogspot.com – PBO
6
***Gambar Kerangka ProgramOOP***
Suatu file source *.java dapat terdiri dari hanya satu kelas, namun bisa juga memiliki lebih
dari satu kelas. Pada dasarnya, tidak ada perbedaan, apakah suatu kelas akan digabungkan dengan
kelas lain pada suatu file, atau dipisahkan dalam suatu file *.java tersendiri. Pada saat kompilasi,
kompiler akan membentuk file-file *.class yang berasal dari kelas-kelas tersebut. Jadi, meskipun
suatu kelas dituliskan dalam suatu file bersama dengan kelas lainnya, kelas tersebut akan dikompile
menjadi file *.class, sama seperti bila ia dituliskan dalam file tersendiri.
Secara umum, kerangka program OOP dapat ditinjau ke dalam 7 bagian penting:
a. Komentar
b. Paket (package) dan Import
c. Kelas
d. Badan Kelas (Class Body)
e. Data
f. Method
g. Main Method
http://subari.blogspot.com – PBO
7
Ket. Tambahan:
Di dalam Java, modul program dimodelkan, dirancang dan ditulis sebagai obyek. Kerangka
berpikirnya berbeda dengan pemrograman tradisional. Pemrograman tradisional memisahkan antara
data, dan prosedur yang mengolah data tersebut. Sedangkan di dalam Java, data dan prosedur ini
dipadukan sebagai sebuah obyek.
Ini lebih alami. Di alam, berbagai benda, baik yang real maupun abstrak, mempunyai dua
hal yang terpadu yaitu ukuran dan tingkah laku. Sebuah perusahaan mempunyai ukuran seperti
jumlah karyawan, dan mempunyai tingkah laku seperti mengangkat karyawan. Seekor burung yang
sedang terbang mempunyai ukuran seperti ketinggian, dan bisa menukik sebagai tingkah laku.
Sebagaimana obyek di alam yang mempunyai ukuran dan tingkah laku, sebuah obyek di dalam
program juga bisa mempunyai data dan prosedur. Di dalam Java, rancangan sebuah obyek ditulis
dalam sebuah class. Di dalam class data diimplementasikan sebagai member variable, sedangkan
prosedur yang mengolah data tersebut diimplementasikan dalam method.
Class ini bisa di-instantiate, dengan memanggil constructor-nya. Instance dari sebuah class disebut
sebagai obyek.
Dalam perkembangannya, pemrograman berorientasi obyek, terdapat 3 ciri utama, yaitu
encapsulation, inheritance dan polymorphism.
Encapsulation adalah sebuah teknik untuk menyembunyikan detail dari client.
Inheritance adalah sebuah teknik untuk membuat sebuah obyek yang menurunkan data dan
prosedur yang dimiliki oleh obyek lain. Obyek yang ada terlebih dahulu disebut super class.
Sedangkan obyek yang diturunkan darinya disebut sub class.
Polymorphism adalah sebuah teknik yang membolehkan sebuah obyek mempunyai beragam
implementasi.
http://subari.blogspot.com – PBO
8
A. Komentar
Komentar adalah bagian dari program yang bersifat sisipan; hanya untuk menjelaskan, dan bukan
merupakan bagian instruksi/melibatkan operasi. Komentar dibutuhkan agar source code menjadi
lebih jelas (well documented). Karena sifatnya hanya pelengkap, ia bisa dihilangkan/dihapus dari
source code tanpa mengakibatkan perubahan program.
Ada tiga cara menuliskan komentar :
1. // komentar sebanyak satu baris
2. /*komentar lebih dari satu baris*/
3. /**komentar lebih dari satu baris dan bersifat sebagai official document yang menjelaskan
bagaimana kelas dan method public bekerja*/
B. Package (Paket) dan Import
Untuk program berukuran kecil yang hanya melibatkan beberapa kelas dan referensi library Java
sederhana, serta hanya memiliki satu file .java untuk dikompile, bagian ini tidak perlu dinyatakan
secara eksplisit.
Namun bila program yang hendak dibuat melibatkan puluhan bahkan ratusan file kelas, serta
membutuhkan feature yang spesifik yang harus diimport dari suatu library Java, maka bagian ini
harus dinyatakan secara eksplisit.
Dari penjelasan di atas terlihat bahwa package dan import berguna dalam pengorganisasian kelas.
Package (paket) :
Package akan memberitahu Kompiler ke library mana suatu file kelas akan dikompile.
Syntax : package library_tujuan_kompilasi;
Import :
Import akan memberitahu Kompiler untuk meng-import suatu komponen yang terletak dalam suatu
library.
Syntax : import library_referensi;
Bila import tidak dinyatakan eksplisit, secara default, Kompiler akan meng-import komponenkomponen
dari library java.lang.object. Import memiliki analogi dengan #include pada
bahasa C/C++.
C. Kelas
Deklarasi Kelas
Bentuk deklarasi kelas yang paling sederhana adalah :
Class NamaKelas
{
Class Body
}
Namun untuk memaksimalkan konsep OOP, terutama pada saat mendesain program yang besar dan
kompleks, dibutuhkan beberapa modifier dan keyword pelengkap yang menyertai bentuk dasar
tersebut.
http://subari.blogspot.com – PBO
9
Secara umum, kelas memiliki struktur anatomi sebagai berikut :
(Modifier) Class NamaKelas (keyword tambahan)
{
Class Body
}
Java memiliki beberapa keyword yang digunakan sebagai modifier, yaitu kata pelengkap yang
berfungsi untuk menerangkan sifat suatu unsur (kelas/data/method). Modifier ini terletak di depan
nama unsur yang akan diterangkan. Beberapa modifier yang digunakan dalam deklarasi kelas yakni
abstract, final, multiple, static, serta tiga jenis lainnya yakni public, private, protected. Ketiga
modifier terakhir digunakan untuk menentukan tingkat aksesabilitas dari suatu kelas/data/method
terhadap kelas/data/method lainnya.
Kita akan membahas modifier secara lengkap dan lebih mendalam lagi pada bab 9.
Modifier
Adalah keyword dalam Java yang befungsi untuk menerangkan sifat dari
suatu unsur; kelas/method/data, dan dituliskan di depan unsur tersebut.
Modifier tersebut adalah abstract, final, multiple, static, (default),
public, private, protected
Keyword tambahan terdiri dari extends dan implements. Extends digunakan dalam prinsip
pewarisan (inheritance), untuk menyatakan bahwa kelas tersebut merupakan perluasan dari super
kelas. Implements digunakan bila kita ingin menggunakan interface, yakni kumpulan method yang
dapat disisipkan ke dalam suatu kelas untuk aplikasi yang spesifik.
D. Class Body (Badan Kelas)
Class body adalah bagian program yang merupakan isi dari kelas, yang mendefinisikan segala
aspek tentang objek, baik sifat (data) maupun kelakuan (method), yang akan digunakan sebagai
blueprint atau prototype untuk menciptakan objek tersebut. Jelas bahwa data dan method dari kelas
harus dituliskan di dalam class body ini. Class body ini dituliskan sebagai satu blok setelah
deklarasi kelas. Blok dalam Java adalah sejumlah statement/instruksi yang ditulis diantara dua tanda
kurung kurawal { }.
Sebagai tambahan, terkadang dibutuhkan proses inisialisasi yang akan memberi nilai default
saat objek tercipta pertama kali. Masih ingat saat kita membuat lingkaran dengan drawing tool pada
MS Word atau Visio. Pada saat kita meng-click dan drag lingkaran tersebut ke dokumen kerja kita,
ukuran lingkaran yang kita peroleh untuk pertama kali selalu dengan radius (jari-jari) sama. Untuk
memberi nilai default kepada objek ini, dibutuhkan suatu bagian program yang disebut
Konstruktor (Constructor) dan harus dideklarasikan di dalam class body ini. Konstruktor ini
merupakan method juga dan akan dibahas lebih lanjut pada saat kita mulai membuat program.
Blok
Blok adalah grup yang menghimpun bagian tertentu program. Dalam Java, blok dimulai dengan
tanda kurung kurawal buka ( { ) dan diakhiri dengan kurung kurawal tutup ( } ). Setiap kelas
memiliki sebuah blok kelas yang menghimpun bagian data dan method. Setiap Method memiliki
blok method yang menghimpun perintah-perintah fungsi. Blok ini dapat disarangkan (nested),
maksudnya suatu blok dapat mengandung blok yang lebih kecil lagi.
http://subari.blogspot.com – PBO
10
E. Data/Variabel
Variabel adalah bagian memory yang berfungsi untuk menyimpan data. Setiap variabel harus
memiliki tipe data dan diberi nama yang unik, sehingga berbeda satu dengan lainnya. Variabel ini
dapat diinisialisasi dengan nilai awal dan nilai ini selanjutnya dapat berubah, sesuai dengan proses
yang dilakukan padanya. Berdasarkan cara mengakses data, terdapat dua kategori tipe data dalam
Java, yakni Tipe Data Primitif dan Tipe Data Referensi.
Aturan Penamaan Variabel
Untuk menamakan variabel, aturan yang dipakai sama seperti aturan penamaan kelas, namun pada
bagian anjuran konvensi terdapat modifikasi sebagai berikut :
a. Bila nama variabel hanya terdiri dari satu abjad atau satu kata, semua abjad dituliskan sebagai
huruf kecil. Contoh : “warna”, “nama”
b. Bila nama variabel terdiri dari dua kata atau lebih, kedua kata itu digabungkan. Huruf pertama
dari kata pertama sebaiknya huruf kecil, sedangkan huruf pertama kata kedua dan kata
berikutnya sebaiknya huruf kapital. Contoh : “radiusLingkaran”
Tipe data primitif
Pada saat kita mendeklarasikan variabel, sesungguhnya kita “memesan” sejumlah alamat memory
sesuai dengan tipe data yang diinginkan. Bagian memory yang telah dipesan ini selanjutnya akan
digunakan untuk menyimpan nilai data. Prinsip ini dinamakan tipe data primitif, yakni variabel
(yang pada hakikatnya merupakan alamat memory) mengandung nilai data yang dimaksud.
Ada 8 tipe data primitif :
· 4 untuk merepresentasikan nilai bilangan bulat (integer), yaitu
byte, short, int, long
· 2 untuk bilangan nyata (koma desimal), yaitu float dan double
· 2 untuk tipe data yang lain; char dan boolean
Mendeklarasikan dan Menugaskan (Meng-assign) Variable bertipe
Data Primitif
Bentuk umum :
tipedata namaVariabel = nilaiAwal
Statement di atas merupakan bentuk singkat dari proses-proses :
1. Mendeklarasikan variabel dengan tipe tertentu
typedata namaVariabel
int radius;
2. Menugaskan variabel (meng-assign) untuk suatu nilai
radius = 2;
3. Menggabungkan deklarasi dan penugasan:
http://subari.blogspot.com – PBO
11
int radius = 2;
Tipe data referensi
Pada tipe data referensi, deklarasi variabel juga dimaksudkan untuk “memesan” sejumlah alamat
memory. Namun bagian memory ini bukan untuk menyimpan nilai data seperti pada tipe data
primitif, melainkan untuk menyimpan pointer yang menunjuk ke alamat memory berikutnya yang
berisi nilai data yang dimaksud. Pointer ini adalah bilangan yang menunjukkan alamat memory
“sebenarnya”.
Konsep pointer di sini hanya digunakan untuk menunjukkan perbedaan data internal antara
tipe data primitif dan referensi. Java menghapuskan akses dan manipulasi pointer yang selama ini
sering membingungkan programmer, seperti dalam bahasa C++.
Mekanisme penyimpanan objek di dalam memory juga menggunakan tipe data referensi.
Variabel yang menyimpan objek ini disebut sebagai variabel referensi objek.
Contoh :
NamaKelas variabelReferensiObjek = new NamaKelas();
Lingkaran lingkaransatu = new Lingkaran();
Konstanta (Constant)
Konstanta (Constant) adalah variabel yang diberi suatu nilai awal (inisialisasi), dan nilai ini
selanjutnya bersifat tetap, tidak dapat diubah oleh kelas maupun method manapun. Untuk
mendeklarasikan sebuah Konstanta, digunakan modifier final di depan deklarasi variabel.
F. Method
Deklarasi Method
Deklarasi Method memiliki struktur sebagai berikut :
Modifier tipeNilaiKembalian namaMethod (parameter input) throws
exception
{
body dari Method;
}
Method dapat kita ilustrasikan sebagai kotak hitam (black box) yang berfungsi untuk
menerima data masukan, memprosesnya sesuai dengan operasi yang telah ditentukan, dan
mengembalikan data hasil kepada bagian yang memanggilnya.
Beberapa hal yang harus diperhatikan dalam deklarasi method :
Modifier (Optional)
Jenis modifier yang digunakan di sini sama seperti pada deklarasi kelas. Namun selain dari ketujuh
modifier yang telah dijelaskan di bagian kelas sebelumnya (public, private, protected, abstract,
final, multiple, static), terdapat dua modifier lagi untuk mendeklarasikan method, yakni native
dan synchronized.
http://subari.blogspot.com – PBO
12
Tipe Nilai Kembalian (ReturnValueType)
Dilihat dari nilai yang dikembalikannya, method memiliki dua kemungkinan, yaitu mengembalikan
suatu nilai, atau tidak. Bila method mengembalikan nilai, tipe nilai kembaliannya
(returnValueType) harus dituliskan sesuai tipe datanya, sedangkan bila tidak mengembalikan nilai,
returnValueType kita beri atribut void.
Parameter input
Dilihat dari parameter input, method dapat dibagi menjadi dua, yakni membutuhkan input dan tidak.
Input dalam Java bisa berupa input bertipe data primitif ataupun objek. Bila method membutuhkan
input, maka tipe data parameter dari input tersebut harus dituliskan. Sedangkan bila tidak
membutuhkan input, bagian di dalam tanda kurung setelah deklarasi method harus dikosongkan.
Jumlah parameter yang dapat diinputkan ke suatu method bisa tunggal atau banyak
(multiple input). Bila bersifat multiple input, maka dalam penulisan parameter tersebut, masingmasing
parameter harus dipisahkan dengan koma. Pada saat memanggil/mengakses method ini,
harus pula diperhatikan urutan parameter yang dibutuhkan, sehingga method dapat memroses data
dengan benar.
G. Main Method
Pada saat mengkompile file source (.java), Java Kompiler akan memeriksa syntax dan logika yang
berlaku untuk kelas. Bila tidak terdapat error, akan terbentuklah satu file .class. Selanjutnya Java
Interpreter akan mengeksekusi file .class ini, dan menjalankan aplikasi tersebut.
Pada saat Java Interpreter akan mengeksekusi file .class, yang pertama dilakukan adalah
mencari main method dan kemudian menjalankan baris demi baris statement yang terdapat di
dalamnya. Prinsip ini sama dengan fungsi main pada bahasa C/C++.
Main method ini harus dituliskan dalam bentuk baku seperti di bawah ini, bila tidak, Java
Interpreter tidak akan mengeksekusi aplikasi tersebut :
public static void main( String args[] ) {
body dari Main Method
}
4 Membuat Objek dari suatu Kelas
Untuk membuat objek dari suatu kelas, dibutuhkan operator new.
Bentuk umum :
NamaKelas variabelReferensiObjek = new NamaKelas();
http://subari.blogspot.com – PBO
13
Ungkapan di atas merupakan bentuk singkat dari serangkaian proses berikut :
1. Mendeklarasikan variabel referensi objek :
NamaKelas objekReferensi;
Lingkaran lingkaransatu;
2. Menciptakan objek dari kelas, dengan operator new.
new NamaKelas( );
new Lingkaran( );
3. Menugaskan (meng-assign) variabel kepada objek yang telah dibuat.
lingkaransatu = new Lingkaran( );
Proses di atas dapat digabungkan menjadi :
NamaKelas variabelReferensiObjek = new NamaKelas( );
Lingkaran lingkaransatu = new Lingkaran( );
Bila kita cermati langkah-langkah instansiasi objek dari kelas di atas, terlihat analogi saat kita
mendeklarasikan suatu variabel dan meng-assign-nya ke tipe data primitif.
Int radius;
radius = 3;
atau bila digabungkan menjadi satu statement :
int radius = 3;
5 Mengakses Data dan Method dari Suatu Kelas
Untuk mengakses data dan method dari suatu kelas, digunakan bentuk berikut :
NamaKelas.namaVariabel;
NamaKelas.namaMethod();
Yang perlu diperhatikan dalam mengakses data dan method adalah bagaimana mengatur tingkat
aksesibilitas (accesibility level) kedua unsur tersebut terhadap kelas yang mengakses, apakah
bersifat default, public, private, atau protected.
6 Menampilkan Hasil di Layar Monitor
Seperti halnya pembacaan input dari keyboard, proses menampilkan suatu variabel atau hasil
perhitungan di layar monitor juga dapat dibagi menjadi dua :
1. Dalam lingkungan Console.
Mencetak variabel atau suatu hasil perhitungan sangatlah mudah. Kita dapat menggunakan
method print() atau println() pada kelas System dalam struktur package java.lang. Package ini
merupakan default package bagi semua aplikasi java, sehingga kita tidak perlu mengimport
kelas System tersebut.
System.out.print();
System.out.println();
http://subari.blogspot.com – PBO
14
2. Menggunakan komponen GUI, seperti kelas JOptionPane.
Kita tinggal memanggil method untuk mencetak ke layar yang telah disediakan oleh kelas
tersebut. Sebagai contoh, Kelas JOptionPane merupakan komponen dari package javax.swing
yang dapat digunakan baik sebagai output maupun input. Untuk menampilkan tulisan di layar
digunakan method showMessageDialog(), sedangkan untuk membaca input digunakan method
showInputDialog().
Sebagai catatan, pada proses mencetak hasil perhitungan dari suatu method, kita bisa
menampungnya dalam suatu variabel terlebih dahulu. Selain itu kita juga bisa langsung menuliskan
method tersebut lengkap dengan argumennya pada statement System.out.println();
Contoh :
System.out.println(“Hasil Sinus sudut adalah : “ + Math.sin(sudut));
7 Membaca Data Input dari keyboard
Proses pembacaan data input yang diketikkan oleh user melalui keyboard dapat ditinjau menjadi
dua :
1. Dalam lingkungan Console (DOS).
Proses pembacaan data pada console tidaklah semudah ketika mencetak hasil ke monitor. Java
tidak memiliki method khusus untuk membaca data input dalam lingkungan console. Untuk itu
kita harus menderinisikan sendiri kelas / method pembacaan data tersebut. Pembahasan yang
lengkap dan lebih terperinci akan diberikan pada bab 14 File dan Stream. Pada bagian ini kita
cukup mengetahui bagaimana menggunakan kelas pembacaan tersebut dalam program.
2. Menggunakan komponen GUI, seperti kelas JOptionPane.
Komponen GUI memiliki method standard untuk menampilkan variabel/hasil ke layar, seperti
method showInputDialog pada Kelas JOptionPane.
8 Bagaimana Mempelajari Java ?
Java merupakan bahasa pemrograman yang didesain dengan basis OOP, bersifat multiplatform, dan
diperuntukkan untuk aplikasi yang sangat luas; mulai dari aplikasi biasa, internet, wireless,
telekomunikasi, bahkan game. Oleh sebab itu Java memiliki begitu banyak keyword, kelas dan API
(interface) standard.
Bila pada tahap ini anda merasa begitu banyak istilah baru yang belum anda pahami,
wajarlah kiranya. Namun setelah membaca beberapa bab dan mempraktekkan contoh-contoh
program, lambat laun anda akan terbiasa dengan istilah tersebut.
Beberapa tips untuk belajar Java :
1. Mempelajari dasar-dasar pemrograman, sambil memahami beberapa istilah / keyword yang
sering digunakan.
2. Mulai dengan membuat aplikasi sederhana berbasis teks I/O (Command Console), bila sudah
mahir, dapat beranjak ke pemrograman berbasis GUI (Graphical User Interface).
3. Sesekali luangkan waktu untuk membaca referensi kelas dan API (interface) standard, karena
Java memiliki begitu banyak library standard yang siap digunakan. Dokumen ini tersedia gratis
dan dapat didownload dalam bentuk help document di alamat web site Sun :
http://java.sun.com/downloads/index.html
http://subari.blogspot.com – PBO
15
4. Mengikuti perkembangan Java dari berbagai resource, internet, mailing list, majalah.
Mendownload free sample source code dari beberapa site, dan mencoba memodifikasinya.
5. Bila sudah menguasai Java2, cobalah untuk meningkatkan skill anda dengan mempelajari topiktopik
spesifik aplikasi Java, seperti Beans, RMI (Remote Method Invocation), J2EE (Java 2
Enterprise Edition) serta J2ME (Java 2 Micro Edition).
2.17.Menulis dan Mengedit Program
Untuk menulis program Java, kita hanya membutuhkan sebuah text editor sederhana, misalnya
notepad, yang merupakan aplikasi built-in dari Windows. Sekedar sebagai tips, untuk program yang
berukuran besar hingga ratusan atau ribuan baris, disarankan untuk menggunakan editor yang
memiliki informasi tentang nomor baris seperti UltraEdit. Ini dimaksudkan agar kita mudah mentrace
dan mengoreksi source file bila terjadi syntax error saat mengkompile program. File ini
kemudian kita simpan (save) dengan ekstension .java, namun perlu diingat aturan penamaan file
sebagai berikut :
1. Nama file .java haruslah sama dengan nama kelasnya (perhatikan huruf kecil dan huruf kapital),
jika tidak, maka akan terjadi error pada saat kompilasi.
2. Bila dalam satu file .java terdapat lebih dari satu kelas, di mana salah satu kelasnya
mengandung method main(), dan kita ingin mengeksekusi kelas tersebut (dengan Interpreter),
maka nama file .java harus sama dengan nama kelas itu.
3. Bila dalam satu file .java terdapat lebih dari satu kelas dan salah satu kelas dideklarasikan
sebagai public, maka nama file .java harus sama dengan kelas public tersebut.
http://subari.blogspot.com – PBO
16
Session: Pengenalan Java
Teknologi Java merupakan sebuah teknologi yang berkembang
sangat pesat akhir-akhir ini. Bahkan belakangan ini dikabarkan
berusaha mengalahkan Microsoft yang terkenal sebagai kampiun
dari produsen operating system dimuka bumi ini.
Java pertama kali diluncurkan pada tahun 1995 sebagai
bahasa pemrograman umum (general purpose programming
language) dengan kelebihan dia bisa dijalankan di web browser
sebagai applet. Langkah pertama yang diambil oleh Sun
Microsystem adalah dengan membuat JVM (Java Virtual Machine)
yang kemudian diimplementasikan dalam bentuk JRE (Java
Runtime Environment). JVM adalah lingkungan tempat eksekusi
program Java berlangsung dimana para objek saling berinteraksi
satu dengan yang lainnya. Virtual Machine inilah yang
menyebabkan Java mempunyai kemampuan penanganan memori
yang lebih baik, keamanan yang lebih tinggi serta portabilitas yang
besar.
Contoh letak penulisan script java pada HTML :
Java adalah teknologi dan bahasa pemrograman yang berjalan
pada multiflatform sesuai dengan semboyannya yaitu “Write Once,
http://subari.blogspot.com – PBO
17
Run Anywhere”. Pada site official Java dari Sun yaitu
http://java.sun.com bisa ditemui tiga pembagian paket Java yaitu:
Java 2 Enterprise Edition (J2EE), Java 2 Standart Editon (J2SE),
dan Java 2 Micro Edition (J2ME)
Penjelasan paling simple atas pembagian tersebut berdasarkan atas
perangkat keras yang digunakan.
1. Paket J2EE digunakan pada perangkat keras yang mempunyai
spesifikasi dan memory yang besar seperti pada komputer
server.
2. Paket J2SE digunakan pada perangkat keras seperti komputer
desktop.
3. Paket J2ME digunakan pada perangkat yang memiliki memory
kecil seperti ponsel, pager atau PDA.
Teknologi Java kini hadir dengan teknologi terbarunya, J2ME?
Platform, untuk pembangunan aplikasi pada mobile device seperti
mobile phone dan PDA.
Selain J2ME? Platform yang termasuk baru, terdapat pula satu buah
platform teknologi Java yang termasuk baru pula yaitu Java Card.
Java Card merupakan seperangkat kakas untuk membangun
aplikasi pada sebuah card electronic seperti SIM Card pada ponsel
kita. SIM Card yang dipergunakan oleh Mobile Banking BCA
(layanan operator selular Excelcomindo) menjadi salah satu contoh
dari teknologi Java Card.
http://subari.blogspot.com – PBO
18
Lain:
Java Server Pages (JSP) adalah bahasa scripting untuk web programming yang
bersifat server side seperti halnya PHP dan ASP. JSP dapat berupa gabungan
antara baris HTML dan fungsi-fungsi dari JSP itu sendiri. Berbeda dengan
Servlet yang harus dikompilasi oleh USER menjadi class sebelum dijalankan,
JSP tidak perlu dikompilasi oleh USER tapi SERVER yang akan melakukan
tugas tersebut. Makanya pada saat user membuat pertama kali atau
melakukan modifikasi halaman dan mengeksekusinya pada web browser akan
memakan sedikit waktu sebelum ditampilkan.
http://subari.blogspot.com – PBO
19
JavaTM 2 Platform, Standard Edition (J2SETM)
J2SE Technologies J2SE Downloads J2SE Documentation
Documentation Installation Instructions
for JavaTM 2 Platform, Standard Edition,
version 1.4.1
You should have approximately 165 MB of free disk space before installating the documentation.
Install the JavaTM 2 Platform, Standard Edition, v1.4.1 documentation by following these steps:
1. Where to unbundle your documentation
Unbundling the Java 2 SDK documentation creates a docs directory (folder) in
the current directory, putting all the documentation inside that directory as
shown here.
docs
___________________|_____________________
| | | | | |
index.html guide api tooldocs relnotes images
| | | | |
You can install the documentation inside your Java 2 SDK installation or in any
other location you prefer.
2. Unbundle your documentation
Unbundle the documentation using the a zip-compatible utility such as winzip,
unzip, gunzip, or pkunzip. Your utility must support long file names.
· To install the documentation bundle using the zip utility:
C:> unzip j2sdk-1_4_1-doc.zip
You can also install the .zip file using the Java 2 SDK’s jar utility:
C:> jar xvf j2sdk-1_4_1-doc.zip
Note: If you are using another tool that doesn’t preserve path names by default, be sure to specify that path names be
preserved. For example, if you are using pkunzip, specify -d:
C:> pkunzip -d j2sdk-1_4_1-doc.zip
Unzipping the documentation bundle creates a docs/ directory containing your
Java 2 Platform documentation.
3. View the documentation
Open the docs/index.html page in a browser. This is the front page and table of
contents of the Java 2 SDK documentation.
Java Development Kit
http://subari.blogspot.com – PBO
20
Java Development Kit (JDK) memuat program-program dan library
yang Anda butuhkan untuk meng-compile dan me-launch program Java. Dua
program utama yang ada di JDK adalah javac dan java.
Untuk meng-install JDK, Anda terlebih dahulu men-download installation file
dari http://java.sun.com. Anda perlu men-download JDK yang sesuai dengan
platform di mana Anda bekerja. Tersedia JDK untuk Linux, Solaris dan
Windows.
Installation file untuk Windows dari JDK versi 1.4 adalah j2sdk-1_4_1-
rc-windows-i586.exe. Yang perlu Anda lakukan hanyalah meng-execute file
ini. File ini akan mengalami de-compression.
Anda akan mendapatkan sebuah directory j2sdk1.4.1 (Anda modifikasi
menjadi j2sdk141) yang memuat JDK Anda. Directory ini dikenal sebagai
JAVA_HOME. Banyak aplikasi Java, seperti Tomcat dan JBoss
membutuhkan variable JAVA_HOME sebagai environment variable.
Program java dan javac berada di sub-directory bin/ di bawah JAVA_HOME.
Agar Anda bisa meng-compile dan me-launch program Java dari directory
mana saja, Anda bisa menambahkan JAVA_HOME/bin ke dalam
environment variable bernama PATH.
Untuk mengetahui cara penggunaan dari javac, yaitu Java compiler, Anda
bisa menjalankan perintah javac -help melalui terminal.
Untuk mengetahui cara penggunaan dari java, yaitu Java application
launcher, Anda bisa menjalankan perintah java -help melalui terminal.
Instalasi J2SDK 1.4.1
http://subari.blogspot.com – PBO
21
1. Pada hasil download atau CD instalasi java, double-click icon aplikasi Java 2
Standart Edition (J2SE) seperti dibawah ini.
2. Beberapa saat kemudian muncul dialog proses sbb….
http://subari.blogspot.com – PBO
22
http://subari.blogspot.com – PBO
23
3. maka pada start menu program terdapat link untuk aplikasi “Java Web Start”
(menu aplikasi untuk kondisi komputer online internet) seperti dibawah ini…
4. tampilan Java Web Start (kondisi menu aplikasi kosong, jika PC tdk online)…
http://subari.blogspot.com – PBO
24
5. Lakukan setting untuk variabel PATH & CLASSPATH. Contoh cara termudah,
Anda jalankan NotePad dan buka file c:\Autoexec.bat, rubah PATH untuk
JAVA_HOME/bin dengan menambahkan path c:\j2sdk141\bin, sbb:
6. Lakukan Restart Windows, untuk mendapatkan effect path tersebut. Atau jika
tanpa restart dan sudah berada di “prompt dos” jalankan file autoexec.bat tsb.
7. sekarang cek konfigurasi file hasil instalasi tersebut, buka Explorer.
8. Folder Java 2 SDK 1.4.1, dari hasil instalasi diatas nampak sbb:
http://subari.blogspot.com – PBO
25
- javac : kompiler, sumber java ke kode byte
- java : intepreter, menjalankan kode byte
- jdb : pelacak kesalahan
- appletviewer : memungkinkanprogram java dalam halaman-halaman web
dijalankan tanpa menggunakan browser web.
- javadoc : pembentuk file-file dokumentasi (html) dari petunjuk yang
disertakan pada sumber java.
- javah : pembentuk file header C yang berhubungan dengan objek-objek
java. Ini terutama berguna saat membuat program yang
mencampurkan bahasa-bahasa.
- javap : sebuah piranti untuk mencetak kode byte
- javaprof : sebuah piranti untuk memberi gambaran tentang pernyataan yang
paling sering dieksekusi dalam program anda.
9. Sekarang masuklah pada lingkungan dos prompt (pilih menu dos prompt atau
gunakan START menu untuk menu RUN), sbb: ketik CMD pd dialog Run.
http://subari.blogspot.com – PBO
26
Pada sembarang drive anda sekarang sudah bisa mengeksekusi compiler
dan intepreter java. Ketikkan javac untuk melihat parameter option yang
dimiliki compiler, dan java untuk melihat parameter yang dimiliki javalaunch.
Seperti tampak dibawah ini :
http://subari.blogspot.com – PBO
27
KODE ASCII
K O L O M
Desimal 0 1 2 3 4 5 6 7 8 9
0 NUL SOH STX ETX EOT ENQ ACK BEL BS HT
1 LF VT FF CR SO SI DLE DC1 DC2 DC3
2 DC4 NAK SYN ETB CAN EM SUB ESC FS GS
3 RS US SP ! “ # $ % & `
4 ( ) * + , – . / 0 1
5 2 3 4 5 6 7 8 9 : ;
6 < = > ? @ A B C D E
7 F G H I J K L M N O
8 P Q R S T U V W X Y
9 Z [ \ ] ^ _ ‘ a b c
10 d e f g h i j k l m
11 n o p q r s t u v w
B A R I S
12 x y z { | } ~ DEL
Arti dari beberapa akronim kode :
NULL : Kosong
SOH : Start Of Header
STX : Start of Text
ETX : End of Text
EOT : End Of Transmission
ENQ : Enquiry
ACK : Acknowledge
BEL : Bel
BS : Back Space
HT : Horizontal Tabulation
LF : Line Feed
VT : Vertical Tabulation
FF : Form Feed
CR : Carriage Return
SO : Shift Out
SI : Shift In
DLE : Delete
DC1 : Device Control 1
DC2 : Device Control 2
DC3 : Device Control 3
DC4 : Device Control 4
NAK : Negative Acknowledgement
SYN : Synchronous Idle
ETB : End of Transmission
CAN : CANcel
EM : End of Medium
SUB : Start of Special Sequence
ESC : Escape
FS : File Separator
GS : Group Separator
RS : Record Separator
US : Unit Separator
SP : Space
DEL : DELete
http://subari.blogspot.com – PBO
28
KEYWORD JAVA
Kata kunci adalah kata-kata tercadang, yang tidak boleh dipakai
sebagai pengenal. ANSI hanya memiliki 32 kata-kunci. Java memiliki hampir
60 kata kunci, termasuk setengah lusin yang dicadangkan untuk penggunaan
dimasa yang akan datang.
abstract
boolean
break
byte
case
catch
char
class
const
continue
default
do
double
else
extends
final
finally
float
for
goto
if
implements
import
instanceof
int
interface
long
native
new
abstract
boolean
break
byte
case
catch
char
class
const
continue
default
do
double
else
extends
final
finally
float
for
goto
if
implements
import
instanceof
int
interface
long
native
new
package
private
protected
public
return
short
static
super
switch
synchronized
this
throw
throws
transient
try
void
volatile
while
http://subari.blogspot.com – PBO
29
Komentar dalam listing java dibagi menjadi 3 jenis remark:
X = 0 // komentar “to end-of-line”
/* komentar “reguler multiline”
*/
/** komentar API untuk dokumentasi HTML
*/
LATIHAN
Sekarang gunakan notepad atau Edit (dos), untuk menuliskan contoh bahasa
java dibawah ini :
PERHATIKAN!, menuliskan perintah dan nama file Anda harus
memperhatikan besar kecilnya huruf (case sensitive).
Begitu juga pada saat melakuka kompilasi.
1. Simpan listing java ini dengan nama file: Hebat.java
/**
* Judul : Hebat
* Catatan: Menampilkan tulisan/pesan ke console
*/
class Hebat
{
/**Main Method*/
public static void main(String[] args)
{
System.out.println(“Waduhhh…Java, ternyata hueeebaaatttt….!!!”);
}
}
Catatan:
- void : Menunjukkan bahwa method tidak mengembalikan nilai atau
objek.
- main : nama method utama dari program java.
- string : tipe argument yang diterima untuk parameter dari command java.
- args : array argument yang bisa ditambahkan pada saat menggunakan
command java untuk menjalankan program java.
http://subari.blogspot.com – PBO
30
misal file tersebut disimpan pada drive D:\PRAKTIKUM
kemudian lakukan kompilasi pada file java tersebut, menggunakan javac.
D:\Praktikum> javac Hebat.java
D:\Praktikum>_
Sekarang, jika kompilasi diatas berhasil, maka akan muncul file hasil
kompilasi dalam bentuk .class.
Sehinga jika Anda lihat isi folder D:\PRAKTIKUM, setelah kompilasi tsb.
akan nampak 2 file sbb:
D:\Praktikum> DIR
Hebat.java
Hebat.class
Kemudian jalankan/lakukan launch hasil dari kompilasi tersebut
(Hebat.class), dengan menggunakan perintah java.
D:\Praktikum> java Hebat
Waduhhh…Java, ternyata hueeebaaatttt….!!!
2. Simpan listing java ini dengan nama file: HebatGrafis.java
/**
* Judul : HebatGrafis (GUI)
* Catatan : Modifikasi Listing Program 1 untuk menjadi mode grafis
*/
// Mengimport kelas JOptionPane dari package javax.swing
import javax.swing.JOptionPane;
public class HebatGrafis {
/**Main Method*/
public static void main( String args[] )
{
// Menampilkan pesan dengan Message Dialog dari
// kelas JOptionPane
JOptionPane.showMessageDialog(
null, “Hari gini…..gak kenal JAVA !!”,”Iklan”, 1);
System.exit( 0 ); // Keluar dari program
}
Jika tdk. Terjadi
kesalahan, maka
langsung tampil prompt
dos seperti ini.
http://subari.blogspot.com – PBO
31
}
simpan pada drive D:\PRAKTIKUM
kemudian lakukan kompilasi pada file java tersebut, menggunakan javac.
D:\Praktikum> javac HebatGrafis.java
D:\Praktikum>_
Sekarang, jika kompilasi diatas berhasil, maka akan muncul file hasil
kompilasi dalam bentuk .class.
Sehinga jika Anda lihat isi folder D:\PRAKTIKUM, setelah kompilasi tsb.
akan nampak file-file sbb:
D:\Praktikum> DIR
Hebat.java
Hebat.class
HebatGrafis.java
HebatGrafis.class
Kemudian jalankan/lakukan launch hasil dari kompilasi tersebut
(HebatGrafis.class), dengan menggunakan perintah java.
D:\Praktikum> java HebatGrafis
Jika tdk. Terjadi
kesalahan, maka
langsung tampil prompt
dos seperti ini.
http://subari.blogspot.com – PBO
32
Referensi
Bagaimana cara kita menggunakan dan memanipulasi suatu objek? Pertama adalah kita
harus memperoleh referensi dari objek yang ingin kita manipulasi.
Contoh:
boolean isOn; //pembuatan referensi isOn bertipe data boolean (deklarasi variabel)
isOn = false; //pemberian nilai false pada variabel isOn
Switch bedroomSwitch; //pembuatan referensi bedroomSwitch bertipe objek Switch
bedroomSwitch = new Switch(); //penciptaan objek baru dan variabel bedroomSwitch dijadikan
referensi
Dari sini kita bisa menyimpulkan bahwa secara umum variabel referensi ada dua jenis,
yaitu tipe primitif dan tipe bentukan/objek.
Tabel kata kunci untuk tipe data primitif
contoh penggunaan untuk tipe primitif:
http://subari.blogspot.com – PBO
33
dilanjutkan dengan ArithmeticException pada pembagian dengan l – i, karena l – i adalah nol.
Tipe-tipe primitif mempunyai portabilitas yang sangat tinggi karena semua bahasa memiliki
tipe-tipe data seperti ini. Masing-masing tipe mempunyai objek pembungkus yang immutable,
yaitu: Byte, Short, Integer, Long, Float, Double, Boolean, Character
contoh penggunaan tipe referensi Class dan Array
http://subari.blogspot.com – PBO
34
Class sebagai cetak biru dari objek
Class mendefinisikan sebuah tipe dari objek. Di dalam class kita dapat mendeklarasikan
variabel dan menciptakan objek (instansiasi). Sebuah class mempuyai anggota (member) yang
terdiri atas field dan method. Contoh:
Keyword Penggunaan Keyword Penggunaan
a) Konvensi penamaan Class:
ð Seluruh kata ditulis bersambung kecuali untuk konstanta
ð Nama Class – gunakan kata benda dan huruf pertama dari tiap kata ditulis dengan
huruf besar: String, ArrayIndexOutOfBoundsException
ð Nama Method – gunakan kata kerja dan keculi huruf yang pertama, huruf awal tiap
kata ditulis kapital: replace(), equalsIgnoreCase()
ð Konstanta – Semuanya ditulis dengan huruf besar; pemisah antar kata menggunakan
garis bawah: MAX_VALUE, DECIMAL_DIGIT_NUMBER
1. Field
Field adalah variabel data dan biasanya mempunyai nilai default dimana setiap objek
mempunyai himpunan fieldnya (instance variable) sendiri
class Account {
private long balance;
// the methods…
}
2. Method
Method adalah fungsi yang mempunyai masukan dalam bentuk parameter dan mungkin
menghasilkan nilai kembalian. Method hanya dapat didefinisikan di dalam class. Method terdiri
atas dua bagian, yaitu operation dan method body.
public class Account {
private long balance;
public boolean okToWithdraw(long amount) {
http://subari.blogspot.com – PBO
35
return (amount <= balance);
}
public long withdraw(long amount)
throws InsufficientFundsException {
if (amount > balance) {
throw new InsufficientFundsException(
amount – balance);
}
balance -= amount;
return amount;
}
public void deposit(long amount) {
balance += amount;
}
}
Account acct = new Account();
acct.deposit(15000L);
long cash = acct.withdraw(4000L);
3. Parameter
Parameter atau argumen adalah daftar tipe primitif dan referensi objek yang dipisahkan
oleh tanda koma. Masing-masingnya harus mempunyai nama variabel. Semua parameter
termasuk referensi objek di pass by value
public int lastIndexOf(String str, int fromIndex) {
//…
}
Contoh pass by value
class Value { int val; }
class Test {
public static void main(String[] args) {
int i1 = 3;
int i2 = i1;
i2 = 4;
System.out.print(“i1==” + i1);
System.out.println(” but i2==” + i2);
Value v1 = new Value();
v1.val = 5;
Value v2 = v1;
v2.val = 6;
System.out.print(“v1.val==” + v1.val);
System.out.println(” and v2.val==” + v2.val);
}
}
output yang dihasilkan silahkan direnungkan baik-baik:
i1==3 but i2==4
v1.val==6 and v2.val==6
4. Letak data dalam memori.
Untuk tipe data primitif, referensi dan nilainya berada di dalam stack. Sedangkan untuk
objek, referensinya berada di dalam stack yang menunjukkan alamat objek di dalam Heap
int i = 2001;
Integer i1 = new Integer(2001);
Integer i2 = i1;
http://subari.blogspot.com – PBO
36
5. Array
Array dalam Java juga diimplementasikan sebagai objek. JVM melakukan bounds
checking pada saat run-time
6. Lingkup dari deklarasi variabel
{
int i = 10;
// hanya i yang bisa di akses di sini
{
int j = 20;
// i dan j bisa diakses di sini
// tapi i tidak dapat didefinisikan ulang
// i = 23; illegal
}
// i masih bisa diakses, j tidak dapat diakses
}
{
Integer i = new Integer(10);
{
Character c = new Character(‘q’);
}
// c berada di luar lingkupnya
// objek Character tidak mempunyai referensi
}
// i di luar lingkupnya
// objek Integer tidak mempunyai referensi
7. Kata kunci Static
digunakan untuk membuat class variable dan class method class variable atau private
static field bisa diakses oleh semua instan dari class tersebut dan juga oleh class method. Ia
menjadi atribut yang umum bagi semua instan.
http://subari.blogspot.com – PBO
37
Contoh:
class Point {
int x, y, useCount;
Point(int x, int y) { this.x = x; this.y = y; }
final static Point origin = new Point(0, 0);
}
class Test {
public static void main(String[] args) {
Point p = new Point(1,1);
Point q = new Point(2,2);
p.x = 3; p.y = 3; p.useCount++; p.origin.useCount++;
System.out.println(“(” + q.x + “,” + q.y + “)”);
System.out.println(q.useCount);
System.out.println(q.origin == Point.origin);
System.out.println(q.origin.useCount);
}
}
Menghasilkan:
(2,2)
0
true
1
class method dapat dipanggil tanpa melalui referensi dari objek.
Contoh: main(String[] args), System.out, java.lang.Math, Collections, Arrays. Silahkan lihat
dokumentasi API dari class-class tersebut.
http://subari.blogspot.com – PBO
38
Inisialisasi dan CleanUp
Apa itu constructor?
diskusi tentang method dan constructor overloading constructor default, this, inisialisasi
variable serta array urutan inisialisasi class dan object diskusi tentang finalization dan cleanup
Mengapa kita membutuhkan constructor? Sebelum kita bekerja dengan suatu objek, maka kita
harus yakin bahwa objek itu berada pada satu keadaan tertentu atau ia tidak berada dalam
kondisi yang tidak pasti (indeterminate). Artinya objek itu harus siap untuk bekerja terlebih
dahulu dengan menentukan statenya. Caranya adalah dengan melakukan inisialiasi. Jika tidak
ada constructor maka biasanya programmer dahulu menyiapkan fungsi init() atau setup().
Dengan adanya constructor maka fungsi inisialisasi ini secara otomatis akan dipanggil pada
saat sebuah objek diciptakan
A.Constructor
public class Account {
private long balance;
public Account() {
balance = 0;
}
//…
}
public class Example1 {
public static void main(String[] args) {
// Create an empty account
Account acct = new Account();
}
}
B.Method Overloading
Overloaded method mempunyai nama yang sama tetapi berbeda jumlah dan jenis
parameternya:
public int indexOf(int ch) {
//…
}
public int indexOf(String str) {
//…
}
C.Overloading and Return Value
Tidak dapat overload pada nilai kembalian…
public char[] substring(int beginIndex) {
//…
}
public String substring(int beginIndex) {
//…
}
supaya tidak menimbulkan kebingungan seperti ini:
s.substring(5);
D.Overloading Constructors
public class Account {
private long balance;
public Account() {
balance = 0;
}
public Account(long initDeposit) {
balance = initDeposit;
}
//…
}
public class Example2 {
public static void main(String[] args) {
// Create an empty account
http://subari.blogspot.com – PBO
39
Account acct1 = new Account();
// Create an account with $ 1 Billion
Account acct2 = new Account(100000000000L);
}
}
E.Constructor Default
Jika kita tidak mendefinisikan constructor…
public class Account {
private long balance;
// No constructor declared
public boolean okToWithdraw(long amount) {
return (amount <= balance);
}
// …
}
maka compiler akan membuat default constructor:
public class Account {
private long balance;
public Account() {
}
public boolean okToWithdraw(long amount) {
return (amount <= balance);
}
// …
}
F.Referensi this
this adalah referensi terhadap diri sendiri (self):
public class Account {
private long balance;
public Account() {
balance = 0;
}
public Account(long balance) {
this.balance = balance;
}
public boolean okToWithdraw(long amount) {
return (amount <= this.balance);
}
//…
}
G.Pemanggilan this dalam Constructor
this() memanggil constructor yang lain dari dalam sebuah constructor. Ia harus berada pada
baris pertama pada constructor dan hanya boleh ada satu untuk setiap constructor
Can’t call this() from methods
public class Account {
private long balance;
private long minBal;
public Account() {
this(0, 200000);
}
public Account(long initDeposit) {
this(initDeposit, 200000);
}
public Account(long initDeposit, long minBal) {
balance = initDeposit;
this.minBal = minBal;
}
//…
}
http://subari.blogspot.com – PBO
40
H.Inisialisasi Variabel
Instance (dan class) variabels mempunyai default value:
public class Account {
private long balance;
public void deposit(long amount) {
balance += amount;
}
// …
}
variabel local harus secara explicit diinisialisasi:
// THIS WON’T COMPILE
public class Example7 {
public static void main(String[] args) {
Account acct;
// acct = new Account();
acct.deposit(15000);
}
}
I.Urutan Inisialisasi Object
Constructor dikompilasi menjadi <init>() method
Pertama <init>() memanggil <init>() yang lain
Kedua, initializer dan instance initialization block dieksekusi secara berurutan Ketiga, tubuh
constructor dijalankan
public class Account {
private long balance = 200;
private long minBal = 100;
{
balance = 400;
minBal = 200;
}
public Account(long initDeposit, long minBal) {
balance = initDeposit;
this.minBal = minBal;
}
// …
}
public class Example8 {
public static void main(String[] args) {
Account acct = new Account(800, 400);
}
}
J.Urutan Inisialisasi Class
Static initialization code dikompilasi menjadi method <clinit>()
Static initializers dan static initialization blocks dieksekusi secara berurutan
class CoffeeCup {
private static int cupCount = 355;
static {
cupCount =
PersistentStorage.getLastCupCount();
}
//…
}
Class diinisialisasi pada penggunaannya pertama kali.
K.Insialisasi Array
Dua cara untuk mendeklarasikan array:
int[] value;
int value[];
http://subari.blogspot.com – PBO
41
Untuk memperoleh object array, harus secara eksplisit:
private int[] value = new int[10];
{
for (int i = 0; i < value.length; ++i) {
value[i] = i;
}
}
Dapat juga menggunakan tanda kurung kriting (curly braces):
private int[] value1 = { 0, 1, 2, 3, 4 };
private Integer[] value2 = {
new Integer(0),
new Integer(1)
};
arrayVar.length memberikan panjang dari sebuah array
Multi-dimensional array diimplementasikan sebagai arrays of arrays
L.Finalization dan Cleanup
ð Memori untuk object yang tak terpakai lagi secara otomatis dibebaskan oleh garbage
collector
ð finalize() secara otomatis dipanggil oleh garbage collector sebelum memori dibebaskan
ð Object mungkin saja tidak di garbage collected
ð Tidak boleh bergantung pada finalize() untuk melepaskan sumber daya yang terbatas.
http://subari.blogspot.com – PBO
42
Reusing Classes
Actually we don’t “reuse”, we simply “use”
Ada dua cara untuk menggunakan suatu class yang sudah ada, yaitu:
1. dengan komposisi
2. dengan pewarisan atau inheritansi
Kemudian kita akan belajar apa itu polymorphism dan bagaimana menggunakannya secara
tepat.
A.Komposisi objek.
Secara sederhana adalah suatu objek menggunakan (use) objek lain atau objek
mengandung/memiliki objek lain.
Contoh:
package learn.reuse.composition;
class WaterSource {
private String s;
WaterSource() {
System.out.println(“WaterSource()”);
s = new String(“Constructed”);
}
public String toString() { return s; }
}
public class SprinklerSystem {
private String valve1, valve2, valve3, valve4;
WaterSource source;
int i;
float f;
void print() {
System.out.println(“valve1 = ” + valve1);
System.out.println(“valve2 = ” + valve2);
System.out.println(“valve3 = ” + valve3);
System.out.println(“valve4 = ” + valve4);
System.out.println(“i = ” + i);
System.out.println(“f = ” + f);
System.out.println(“source = ” + source);
}
public static void main(String[] args) {
SprinklerSystem x = new SprinklerSystem();
x.print();
}
}
Keluarannya:
valve1 = null
valve2 = null
valve3 = null
valve4 = null
i = 0
f = 0.0
source = null
http://subari.blogspot.com – PBO
43
B.Composition with forwarding
Ini adalah kasus khusus dari komposisi objek di mana kompositor memanggil method
dari objek yang dikandungnya.
Contoh:
public class Account {
private long balance;
public long withdraw(long amount)
throws InsufficientFundsException {
if (amount <= 0) {
throw new IllegalArgumentException();
}
if (amount > balance) {
throw new InsufficientFundsException(amount – balance);
}
balance -= amount;
return amount;
}
public void deposit(long amount) {
if (amount <= 0) {
throw new IllegalArgumentException();
}
long newBal = balance + amount;
if (newBal < 0) {
throw new ArithmeticException();
}
balance = newBal;
}
public long getBalance() {
return balance;
}
}
Apabila kita ingin menciptakan jenis Account yang lain kita bisa menggunakan class Account
yang sudah tersedia.
Contoh:
http://subari.blogspot.com – PBO
44
public class OverdraftAccount {
private Account account = new Account();
private long overdraft;
public OverdraftAccount(long overdraftMax) {
this.overdraftMax = overdraftMax;
}
public long getOverdraft() {
return overdraft;
}
public long getOverdraftMax() {
return overdraftMax;
}
public long getBalance() {
return account.getBalance();
}
public long withdraw(long amount)
throws InsufficientFundsException {
if (amount <= 0) {
throw new IllegalArgumentException();
}
long bal = account.getBalance();
if (bal >= amount) {
return account.withdraw(amount);
}
long shortfall = amount – bal;
long extraAvailable = overdraftMax – overdraft;
if (shortfall > extraAvailable) {
throw new InsufficientFundsException(shortfall
- extraAvailable);
}
overdraft += shortfall;
account.withdraw(amount – shortfall);
return amount;
}
public void deposit(long amount) {
if (amount <= 0) {
throw new IllegalArgumentException();
}
if (overdraft > 0) {
if (amount < overdraft) {
overdraft -= amount;
}
else {
long diff = amount – overdraft;
overdraft = 0;
account.deposit(diff);
}
}
else {
account.deposit(amount);
}
}
}
C.Inheritansi atau pewarisan
Bagian ini adalah bagian yang paling banyak diberikan contohnya jadi selamat menarik
kesimpulan.
Contoh:
package learn.reuse.inheritance;
public class A {
private int i = 0; // hidden from all other objects, except instances of A
protected double d1 = 0.0D; // subclasses of A will inherit this
protected double d2 = 0.0D; // subclasses of A will inherit this
public void setI(int in) {
i = in;
}
public void setd1(double din) {
d1 = din;
}
public void setd2(double din) {
d2 = din;
}
public void print() {
System.out.println(“A’s print() called”);
System.out.println(“d1: “+d1+”, d2:”+d2);
http://subari.blogspot.com – PBO
45
}
public double acc(double d1) {
System.out.println(“A’s acc(double) called”);
return this.d1+this.d2+d1;
}
}
package learn.reuse.inheritance;
Public class B extends A {
protected double d3 = 0.0D;
public void setd3(double din) {
d3 = din;
}
// print() overrides print() in class A
public void print() {
System.out.println(” B’s print() called”);
//System.out.println(“i1: “+i); i is a private data member of A,
// compile time error
System.out.println(“d1: “+d1+”, d2: “+d2+”, d3: “+d3);
// d1, d2, are protected data members of A, and are inherited by B
}
// acc(double) overrides acc(double) in class A
public double acc(double x1) {
System.out.println(” B’s acc(double) called”);
return super.acc(x1)+d3;
}
// acc(double, double) overloads acc(double) in A
public double acc(double x1, double x2) {
System.out.println(” B’s acc(double, double) called”);
return d1+d2+d3+x1+x2;
}
}
package learn.reuse.inheritance;
public class MainClass {
public static void main(String[] args) {
B myB = new B();
myB.setd1(3.4D); // invoking setd1(double) inherited from A
myB.setd2(4.4D); // invoking setd2(double) inherited from A
myB.setd3(5.5D);
myB.print();
System.out.println(myB.acc(5.5D));
System.out.println(myB.acc(5.5D, 6.5D));
A myA = new B(); // myA is declared as a reference to an object of
// type A, but is actually “pointing” to an object of type B
myA.setd1(2.3D);
myA.setd2(2.6D);
// myA.setd3(6.6D); setd3 not defined in A. Compile time error!
myA.print(); // polymorphic B’s print() called
myA.acc(5.6D); // polymorphic B’s acc(double) called
// myA.acc(3.4D, 5.6D); acc(double, double) not defined in A
// compile time error!
}
}
Outputnya sebagai berikut:
B’s print() called
d1: 3.4, d2: 4.4, d3: 5.5
B’s acc(double) called
A’s acc(double) called
18.8
B’s acc(double, double) called
25.3
B’s print() called
d1: 2.3, d2: 2.6, d3: 0.0
B’s acc(double) called
A’s acc(double) called
http://subari.blogspot.com – PBO
46
Lima contoh selanjutnya adalah tentang instrumen musik
package learn.reuse.inheritance.music1;
class Note {
private int value;
private Note(int val) { value = val; }
public static final Note
MIDDLE_C = new Note(0),
C_SHARP = new Note(1),
B_FLAT = new Note(2);
} // Etc.
class Instrument {
public void play(Note n) {
System.out.println(“Instrument.play()”);
}
}
// Wind objects are instruments
// because they have the same interface:
class Wind extends Instrument {
// Redefine interface method:
public void play(Note n) {
System.out.println(“Wind.play()”);
}
}
public class Music1 {
public static void tune(Instrument i) {
// …
i.play(Note.MIDDLE_C);
}
public static void main(String[] args) {
Instrument flute = new Wind();
tune(flute); // Upcasting
}
}
Outputnya sederhana saja:
Wind.play()
Contoh kedua dari alat-alat musik.
package learn.reuse.inheritance.music2;
class Note {
private int value;
private Note(int val) { value = val; }
public static final Note
MIDDLE_C = new Note(0),
C_SHARP = new Note(1),
B_FLAT = new Note(2);
} // Etc.
class Instrument {
public void play(Note n) {
System.out.println(“Instrument.play()”);
}
}
class Wind extends Instrument {
public void play(Note n) {
System.out.println(“Wind.play()”);
}
}
class Stringed extends Instrument {
public void play(Note n) {
System.out.println(“Stringed.play()”);
}
}
class Brass extends Instrument {
public void play(Note n) {
System.out.println(“Brass.play()”);
}
}
public class Music2 {
http://subari.blogspot.com – PBO
47
public static void tune(Wind i) {
i.play(Note.MIDDLE_C);
}
public static void tune(Stringed i) {
i.play(Note.MIDDLE_C);
}
public static void tune(Brass i) {
i.play(Note.MIDDLE_C);
}
public static void main(String[] args) {
Wind flute = new Wind();
Stringed violin = new Stringed();
Brass frenchHorn = new Brass();
tune(flute); // No upcasting
tune(violin);
tune(frenchHorn);
}
}
Keluarannya adalah:
Wind.play()
Stringed.play()
Brass.play()
Versi ketiganya mulai mengenalkan upcasting
package learn.reuse.inheritance.music3;
import java.util.*;
class Instrument {
public void play() {
System.out.println(“Instrument.play()”);
}
public String what() {
return “Instrument”;
}
public void adjust() {}
}
class Wind extends Instrument {
public void play() {
System.out.println(“Wind.play()”);
}
public String what() { return “Wind”; }
public void adjust() {}
}
class Percussion extends Instrument {
public void play() {
System.out.println(“Percussion.play()”);
}
public String what() { return “Percussion”; }
public void adjust() {}
}
class Stringed extends Instrument {
public void play() {
System.out.println(“Stringed.play()”);
}
public String what() { return “Stringed”; }
public void adjust() {}
}
class Brass extends Wind {
public void play() {
System.out.println(“Brass.play()”);
}
public void adjust() {
System.out.println(“Brass.adjust()”);
}
}
class Woodwind extends Wind {
public void play() {
System.out.println(“Woodwind.play()”);
}
public String what() { return “Woodwind”; }
}
public class Music3 {
http://subari.blogspot.com – PBO
48
// Doesn’t care about type, so new types
// added to the system still work right:
static void tune(Instrument i) {
// …
i.play();
}
static void tuneAll(Instrument[] e) {
for(int i = 0; i < e.length; i++)
tune(e[i]);
}
public static void main(String[] args) {
Instrument[] orchestra = new Instrument[5];
int i = 0;
// Upcasting during addition to the array:
orchestra[i++] = new Wind();
orchestra[i++] = new Percussion();
orchestra[i++] = new Stringed();
orchestra[i++] = new Brass();
orchestra[i++] = new Woodwind();
tuneAll(orchestra);
}
}
Hasilnya:
Wind.play()
Percussion.play()
Stringed.play()
Brass.play()
Woodwind.play()
Edisi ke 4 mulai menggunakan ABC (Abstract Base Class) dari Instrument
package learn.reuse.inheritance.music4;
import java.util.*;
abstract class Instrument {
int i; // storage allocated for each
public abstract void play();
public String what() {
return “Instrument”;
}
public abstract void adjust();
}
class Wind extends Instrument {
public void play() {
System.out.println(“Wind.play()”);
}
public String what() { return “Wind”; }
public void adjust() {}
}
class Percussion extends Instrument {
public void play() {
System.out.println(“Percussion.play()”);
}
public String what() { return “Percussion”; }
public void adjust() {}
}
class Stringed extends Instrument {
public void play() {
System.out.println(“Stringed.play()”);
}
public String what() { return “Stringed”; }
public void adjust() {}
}
class Brass extends Wind {
public void play() {
System.out.println(“Brass.play()”);
}
public void adjust() {
System.out.println(“Brass.adjust()”);
}
}
class Woodwind extends Wind {
public void play() {
System.out.println(“Woodwind.play()”);
}
public String what() { return “Woodwind”; }
}
http://subari.blogspot.com – PBO
49
public class Music4 {
// Doesn’t care about type, so new types
// added to the system still work right:
static void tune(Instrument i) {
// …
i.play();
}
static void tuneAll(Instrument[] e) {
for(int i = 0; i < e.length; i++)
tune(e[i]);
}
public static void main(String[] args) {
Instrument[] orchestra = new Instrument[5];
int i = 0;
// Upcasting during addition to the array:
orchestra[i++] = new Wind();
orchestra[i++] = new Percussion();
orchestra[i++] = new Stringed();
orchestra[i++] = new Brass();
orchestra[i++] = new Woodwind();
tuneAll(orchestra);
}
}
Keluarannya:
Wind.play()
Percussion.play()
Stringed.play()
Brass.play()
Woodwind.play()
Contoh terakhir dari alat-alat musik dengan diperkenalkannya interface sebagai pure
abstract class.
package learn.reuse.inheritance.music5;
import java.util.*;
interface Instrument {
// Compile-time constant:
int i = 5; // static & final
// Cannot have method definitions:
void play(); // Automatically public
String what();
void adjust();
}
class Wind implements Instrument {
public void play() {
System.out.println(“Wind.play()”);
}
public String what() { return “Wind”; }
public void adjust() {}
}
class Percussion implements Instrument {
public void play() {
System.out.println(“Percussion.play()”);
}
public String what() { return “Percussion”; }
public void adjust() {}
}
class Stringed implements Instrument {
public void play() {
System.out.println(“Stringed.play()”);
}
public String what() { return “Stringed”; }
public void adjust() {}
}
class Brass extends Wind {
public void play() {
System.out.println(“Brass.play()”);
}
public void adjust() {
System.out.println(“Brass.adjust()”);
}
}
class Woodwind extends Wind {
public void play() {
System.out.println(“Woodwind.play()”);
http://subari.blogspot.com – PBO
50
}
public String what() { return “Woodwind”; }
}
public class Music5 {
// Doesn’t care about type, so new types
// added to the system still work right:
static void tune(Instrument i) {
// …
i.play();
}
static void tuneAll(Instrument[] e) {
for(int i = 0; i < e.length; i++)
tune(e[i]);
}
public static void main(String[] args) {
Instrument[] orchestra = new Instrument[5];
int i = 0;
// Upcasting during addition to the array:
orchestra[i++] = new Wind();
orchestra[i++] = new Percussion();
orchestra[i++] = new Stringed();
orchestra[i++] = new Brass();
orchestra[i++] = new Woodwind();
tuneAll(orchestra);
}
}
Keluarannya juga sama:
Wind.play()
Percussion.play()
Stringed.play()
Brass.play()
Woodwind.play()
D. Kapan menggunakan composititon atau inheritance
Prinsip kedua dari pemrograman OOP yang baik adalah “favour composition over
inheritance”.
Composition mempunyai keuntungan-keuntungan: low coupling, menjaga encapsulation
kerugiannya perlu kerja yang lebih banyak untuk membungkus method-method yang sudah
standar dan tidak dapat polymporphism.
Sedang inheritance keuntungannya adalah polymorphism dan mudah untuk menambah data
apabila behaviour nya tidak jauh beda. Kerugiannya adalah tight coupling dan encapsulation
yang mulai terbuka.
Tentu saja kedua kekuatan ini bisa digabungkan dengan menggunakan interface ![]()
1.1 Objek
Objek adalah benda, baik yang berwujud nyata seperti yang dijumpai dalam kehidupan kita,
maupun yang tidak nyata, seperti halnya yang berupa sistem atau konsep. Dalam Object Oriented
Programming (OOP), objek adalah unit terkecil pemrograman yang memiliki data (sifat
karakteristik) dan fungsi.
Pena yang kita pegang untuk menulis, mobil/motor yang kita kendarai saat bepergian, kue yang
kita makan, kucing yang kita pelihara, telefon yang kita gunakan untuk berkomunikasi, kesemuanya
adalah benda nyata dan merupakan objek. Pembayaran tagihan melalui internet, sistem antrian tiket
di bioskop, penyimpanan uang di bank, atau pengendalian komunikasi data pada port I/O komputer,
meskipun bukan benda nyata, namun kesemuanya juga merupakan objek.
Bagi anda yang pernah mempelajari bahasa pemrograman lain seperti Delphi, Visual Basic atau
Visual C, pada saat mendesain layout grafis user interface tentulah tidak asing lagi dengan
komponen CommandButton, EditText, Label, MessageBox, ProgressBar dan lain
sebagainya. Ini semua juga merupakan objek. Masing-masing komponen memiliki data atau yang
biasa dikenal sebagai properties, dan juga fungsi (method).
Objek adalah
Kesatuan entitas (benda), baik yang berwujud nyata atau pun
hanya suatu sistem atau konsep yang memiliki sifat karakteristik
dan fungsi.
http://subari.blogspot.com – PBO
2
1.2 Kelas
Kelas adalah wadah yang berisi abstraksi (pemodelan) dari suatu objek (benda), yang
mendeskripsikan data (sifat karakteristik) dan fungsi yang dimiliki oleh objek tersebut. Karena
kelas merupakan wadah yang akan digunakan untuk menciptakan objek, jelaslah bahwa kita harus
membuat kelas terlebih dahulu sebelum membuat objek.
Kelas adalah
Pemodelan dari objek yang berisi informasi (aturan) tentang sifat
karakteristik (data) dan tingkah laku (method) yang dimiliki oleh
objek tersebut.
Hubungan antara kelas dan objek dapat diilustrasikan sebagai resep kue dengan kue-nya, di
mana resep kue adalah kelas dan kue adalah objeknya. Sebelum membuat kue, kita harus membaca
dan mempelajari resep kue tersebut terlebih dahulu. Di dalam resep disebutkan data mengenai kue,
yaitu bahan-bahan yang diperlukan serta fungsi-fungsi yaitu bagaimana cara mengolah bahan
tersebut hingga menjadi kue yang siap disajikan. Pada OOP, kita tidak hanya menggunakan resep
kue yang sudah ada untuk membuat kue, namun juga menciptakan resep-resep kue yang baru sesuai
selera kita. Oleh sebab itu, yang menjadi fokus dalam OOP adalah bagaimana menciptakan dan
mendefinisikan kelas yang kelak menjadi wadah untuk membuat objek-objek.
1.3 Instance (Instans)
Objek dapat dikatakan juga sebagai instans (instance) dari suatu kelas. Maksudnya, objek
merupakan perwujudan dalam bentuk benda; baik berupa benda nyata, maupun konsep, sesuai
dengan deskripsi yang telah didefinisikan oleh kelas. Proses pembentukan objek dari suatu kelas
disebut instansiasi (instantiation).
Instans adalah Perwujudan.
Dalam istilah pemrograman, objek merupakan instans (perwujudan)
dari suatu kelas. Instansiasi adalah : Proses perwujudan kelas
menjadi objek.
Dari ilustrasi sebelumnya, pena merupakan instans dari kelas Alat Tulis yang memiliki data
(sifat karakteristik) berbentuk batang, mudah digerakkan, runcing di bagian ujungnya serta
memiliki fungsi mengeluarkan tinta saat dipakai menulis. Mobil merupakan instans dari Kendaraan
Transportasi Darat , yang memiliki data beroda 4, berkapasitas 4-9 penumpang, dan memiliki fungsi
percepatan, pengereman, transmisi gigi. Kue merupakan instans dari resep kue, dan seterusnya.
Resep Kue
http://subari.blogspot.com – PBO
3
2 Data ó Variabel ó Property
Data adalah sifat karakteristik atau kondisi yang dimiliki oleh suatu objek. Ketiga istilah tersebut
(data, variabel , property) memiliki pengertian yang sama, dan dapat digunakan/dianalogikan
secara bergantian untuk lebih memperjelas suatu konsep. Ada juga buku yang menggunakan istilah
atribut (attribute). Dalam OOP, istilah data lebih cenderung diartikan sebagai variabel yang
membentuk sifat karakteristik dari suatu kelas. Sebagian besar buku referensi OOP menggunakan
istilah data, namun di dalam buku ini kita akan memakai istilah data dan variabel secara bergantian
agar lebih jelas.
Data adalah : Sifat karakteristik yang dimiliki oleh objek.
Dalam beberapa referensi, data dianalogikan juga sebagai
variabel, property, atau atribut.
Sebagai ilustrasi, kita ingin membuat kelas BolaSport, yang memiliki objek diantaranya; bola
pingpong, bola sepakbola, bola basket, bola volley, bola bowling dan sebagainya. Karena kelas
merupakan abstraksi dari objek, maka pemilihan data haruslah yang dapat merepresentasikan objek
secara umum. Beberapa data yang dapat digunakan yakni diameter, berat, bahan pembuat bola
(plastik, karet, nilon sintetis), tekstur permukaan dan warna.
Dari kelas HewanDaratBerkakiEmpat, dapat diinstans objek-objek kucing, anjing, kuda,
harimau, sapi, serigala dan lain sebagainya. Data dari kelas ini adalah: jumlah kaki, bulu, ekor, jenis
makanan dan sebagainya.
1.4 Method ó Prosedur/Fungsi ó Behaviour
Method adalah prosedur/fungsi yang dimiliki oleh sebuah objek. Karena pada hakikatnya
merupakan prosedur/fungsi, maka method ini akan mengolah atau mengubah data/variabel yang ada
di dalam objek sesuai dengan operasi yang telah ditentukan. Dari proses tersebut akan terjadi tiga
kemungkinan;
1. Mengembalikan suatu nilai akhir.
2. Mengembalikan nilai yang bersifat sementara untuk kemudian
diumpankan ke method lain.
3. Tidak mengembalikan nilai sama sekali.
Seperti halnya data, keempat istilah method/prosedur/fungsi/behaviour memiliki pengertian yang
sama, namun kita akan lebih banyak menggunakan istilah method.
Method adalah : Prosedur atau fungsi yang dimiliki
oleh suatu objek. Dalam beberapa referensi, method
dianalogikan juga dengan istilah prosedur, fungsi
dan behaviour.
Dari kelas Hewan Darat Berkaki Empat, selain data yang telah didefinisikan sebelumnya, kita
juga dapat menentukan method yang dimiliki oleh kelas tersebut. Untuk mudahnya, ambilah
method cara hewan-hewan tersebut bersuara, sehingga untuk kucing akan bernilai “mengeong”,
anjing “menggonggong”, kuda “meringkik”, sapi “melenguh”, harimau “mengaum”. Data dan
method ini harus dideklarasikan dan didefinisikan di dalam ClassBody.
http://subari.blogspot.com – PBO
4
1.5 Hierarki Kelas
Suatu kelas dapat dibuat sebagai kelas yang benar-benar baru, atau dapat juga dibentuk dari
kelas yang sudah ada. Baru di sini dalam pengertian, semua data dan method yang dimiliki oleh
kelas tersebut kita deskripsikan dan buat sendiri. Sedangkan bila membentuk dari kelas yang sudah
ada, bermakna kita menggunakan data dan method yang telah dideskripsikan dalam suatu kelas
acuan (fundamen). Proses pembentukan kelas baru dari kelas yang sudah ada disebut sebagai
pewarisan (inheritance). Kelas yang menjadi basis bagi pembentukan kelas lainnya disebut
sebagai Kelas Super, sedangkan kelas yang terbentuk dinamakan Kelas Sub.
Proses pewarisan ini akan menghasilkan suatu hierarki kelas. Kelas yang terletak pada
puncak hierarki disebut sebagai Kelas Abstrak. Sifat dari kelas abstrak adalah, ia hanya berisi
deskripsi data dan method yang sangat umum, sehingga tidak mungkin diimplementasikan secara
terperinci. Oleh sebab itu, kelas abstrak ini tidak dapat langsung diinstansiasi menjadi objek.
Sebagai ilustrasi, tinjaulah hierarki kelas dari Kelas Hewan Darat Berkaki Empat yang
memiliki objek (instans) berupa sapi, anjing, harimau, kuda, dan kucing. Kelas tersebut dihasilkan
dari pewarisan kelas Hewan Darat, yang merupakan kelas sub dari Kelas Hewan, dan seterusnya
sampai ke puncak kelas, yakni Kelas Mahluk Hidup. Dalam ilustrasi ini, Kelas Mahluk Hidup
adalah kelas abstrak. Kita tidak mungkin menginstans objek-objek tersebut langsung dari Kelas
Mahluk Hidup, karena ia hanya mengandung deskripsi data dan method yang sangat umum. Data
bisa berupa organ-organ tubuh, sedangkan method berupa bernafas, makan, menghasilkan
keturunan, dan sebagainya.
Kelas Hewan Darat
Berkaki Empat
Kelas Hewan
Hidup di Darat
Kelas Hewan
Hidup di Air
Kelas Hewan
Bisa Terbang
Kelas Hewan Kelas Tumbuhan
Kelas Mahluk Hidup
Kelas Manusia
http://subari.blogspot.com – PBO
5
1.6 Object Oriented Programming
Object Oriented Programming atau Pemrograman Berorientasi Objek adalah konsep
pemrograman yang difokuskan pada penciptaan kelas yang merupakan
abstraksi/blueprint/prototype dari suatu objek. Kelas ini harus mengandung sifat (data) dan
tingkah laku (method) umum yang dimiliki oleh objek-objek yang kelak akan dibuat (diinstansiasi).
Data dan method merupakan anggota (member) dari suatu kelas
Untuk lebih memperjelas pemahaman tentang definisi di atas, marilah kita tinjau contoh
program kalkulator sederhana yang akan menampilkan operasi dasar matematika penjumlahan,
pengurangan, perkalian, pembagian. Kalkulator merupakan objek yang dibentuk dari kelas Alat
Bantu Hitung Elektronik. Objek-objek lainnya yang dapat diinstansiasi dari kelas tersebut
diantaranya : komputer, Personal Data Assitance (Palm), mesin Cash Register dan sebagainya.
2 Hubungan antara Kelas, Objek, Data dan Method
Dalam konsep OOP, objek diciptakan atau diinstansiasi dari kelas dengan mengisikan nilai
parameter data dan memanfaatkan method yang telah dideskripsikan oleh kelas tersebut. Dengan
demikian kelas juga merupakan template/prototipe dari suatu objek. Sama seperti kita hendak
membuat lingkaran, kotak, atau flow diagram dengan menggunakan drawing tools seperti Visio.
Kita hanya perlu mengakses suatu template gambar, klik dan drag objek yang diinginkan, dan
kemudian melakukan adjustment (penyesuaian) ukuran.
Objek-objek yang berasal dari kelas yang sama akan memiliki tipe data yang sama (meskipun
dengan nilai yang berbeda) dan fungsi yang sama. Objek dikatakan juga sebagai instance dari suatu
kelas.
Dari kacamata seorang arsitek, gambar rancang bangun (desain cetak biru) merupakan suatu
kelas, sedangkan objeknya adalah rumah/gedung itu sendiri. Di dalam cetak biru, setiap bagian
rumah memiliki skala, dimensi dan susunan keterkaitan dengan bagian lainnya Bagi seorang
koki/pembuat kue, resep adalah suatu kelas, sedangkan masakan/kue merupakan objek.
3 Kerangka Program OOP
Pada bagian ini kita akan mengaktualisasikan konsep-konsep OOP ke dalam bentuk program Java.
Di sini akan diperkenalkan banyak istilah-istilah baru yang sering digunakan dalam membuat
program. Anda tidak perlu khawatir bila pada bagian akhir dari bab ini masih terdapat bagian/istilah
yang belum anda pahami atau kuasai. Ibarat seorang peserta rally mobil Off Road, bab ini memang
dirancang sebagai peta jalan atau road map, sehingga anda tahu medan yang akan ditempuh, dan
bagaimana untuk sampai ke sana.
http://subari.blogspot.com – PBO
6
***Gambar Kerangka ProgramOOP***
Suatu file source *.java dapat terdiri dari hanya satu kelas, namun bisa juga memiliki lebih
dari satu kelas. Pada dasarnya, tidak ada perbedaan, apakah suatu kelas akan digabungkan dengan
kelas lain pada suatu file, atau dipisahkan dalam suatu file *.java tersendiri. Pada saat kompilasi,
kompiler akan membentuk file-file *.class yang berasal dari kelas-kelas tersebut. Jadi, meskipun
suatu kelas dituliskan dalam suatu file bersama dengan kelas lainnya, kelas tersebut akan dikompile
menjadi file *.class, sama seperti bila ia dituliskan dalam file tersendiri.
Secara umum, kerangka program OOP dapat ditinjau ke dalam 7 bagian penting:
a. Komentar
b. Paket (package) dan Import
c. Kelas
d. Badan Kelas (Class Body)
e. Data
f. Method
g. Main Method
http://subari.blogspot.com – PBO
7
Ket. Tambahan:
Di dalam Java, modul program dimodelkan, dirancang dan ditulis sebagai obyek. Kerangka
berpikirnya berbeda dengan pemrograman tradisional. Pemrograman tradisional memisahkan antara
data, dan prosedur yang mengolah data tersebut. Sedangkan di dalam Java, data dan prosedur ini
dipadukan sebagai sebuah obyek.
Ini lebih alami. Di alam, berbagai benda, baik yang real maupun abstrak, mempunyai dua
hal yang terpadu yaitu ukuran dan tingkah laku. Sebuah perusahaan mempunyai ukuran seperti
jumlah karyawan, dan mempunyai tingkah laku seperti mengangkat karyawan. Seekor burung yang
sedang terbang mempunyai ukuran seperti ketinggian, dan bisa menukik sebagai tingkah laku.
Sebagaimana obyek di alam yang mempunyai ukuran dan tingkah laku, sebuah obyek di dalam
program juga bisa mempunyai data dan prosedur. Di dalam Java, rancangan sebuah obyek ditulis
dalam sebuah class. Di dalam class data diimplementasikan sebagai member variable, sedangkan
prosedur yang mengolah data tersebut diimplementasikan dalam method.
Class ini bisa di-instantiate, dengan memanggil constructor-nya. Instance dari sebuah class disebut
sebagai obyek.
Dalam perkembangannya, pemrograman berorientasi obyek, terdapat 3 ciri utama, yaitu
encapsulation, inheritance dan polymorphism.
Encapsulation adalah sebuah teknik untuk menyembunyikan detail dari client.
Inheritance adalah sebuah teknik untuk membuat sebuah obyek yang menurunkan data dan
prosedur yang dimiliki oleh obyek lain. Obyek yang ada terlebih dahulu disebut super class.
Sedangkan obyek yang diturunkan darinya disebut sub class.
Polymorphism adalah sebuah teknik yang membolehkan sebuah obyek mempunyai beragam
implementasi.
http://subari.blogspot.com – PBO
8
A. Komentar
Komentar adalah bagian dari program yang bersifat sisipan; hanya untuk menjelaskan, dan bukan
merupakan bagian instruksi/melibatkan operasi. Komentar dibutuhkan agar source code menjadi
lebih jelas (well documented). Karena sifatnya hanya pelengkap, ia bisa dihilangkan/dihapus dari
source code tanpa mengakibatkan perubahan program.
Ada tiga cara menuliskan komentar :
1. // komentar sebanyak satu baris
2. /*komentar lebih dari satu baris*/
3. /**komentar lebih dari satu baris dan bersifat sebagai official document yang menjelaskan
bagaimana kelas dan method public bekerja*/
B. Package (Paket) dan Import
Untuk program berukuran kecil yang hanya melibatkan beberapa kelas dan referensi library Java
sederhana, serta hanya memiliki satu file .java untuk dikompile, bagian ini tidak perlu dinyatakan
secara eksplisit.
Namun bila program yang hendak dibuat melibatkan puluhan bahkan ratusan file kelas, serta
membutuhkan feature yang spesifik yang harus diimport dari suatu library Java, maka bagian ini
harus dinyatakan secara eksplisit.
Dari penjelasan di atas terlihat bahwa package dan import berguna dalam pengorganisasian kelas.
Package (paket) :
Package akan memberitahu Kompiler ke library mana suatu file kelas akan dikompile.
Syntax : package library_tujuan_kompilasi;
Import :
Import akan memberitahu Kompiler untuk meng-import suatu komponen yang terletak dalam suatu
library.
Syntax : import library_referensi;
Bila import tidak dinyatakan eksplisit, secara default, Kompiler akan meng-import komponenkomponen
dari library java.lang.object. Import memiliki analogi dengan #include pada
bahasa C/C++.
C. Kelas
Deklarasi Kelas
Bentuk deklarasi kelas yang paling sederhana adalah :
Class NamaKelas
{
Class Body
}
Namun untuk memaksimalkan konsep OOP, terutama pada saat mendesain program yang besar dan
kompleks, dibutuhkan beberapa modifier dan keyword pelengkap yang menyertai bentuk dasar
tersebut.
http://subari.blogspot.com – PBO
9
Secara umum, kelas memiliki struktur anatomi sebagai berikut :
(Modifier) Class NamaKelas (keyword tambahan)
{
Class Body
}
Java memiliki beberapa keyword yang digunakan sebagai modifier, yaitu kata pelengkap yang
berfungsi untuk menerangkan sifat suatu unsur (kelas/data/method). Modifier ini terletak di depan
nama unsur yang akan diterangkan. Beberapa modifier yang digunakan dalam deklarasi kelas yakni
abstract, final, multiple, static, serta tiga jenis lainnya yakni public, private, protected. Ketiga
modifier terakhir digunakan untuk menentukan tingkat aksesabilitas dari suatu kelas/data/method
terhadap kelas/data/method lainnya.
Kita akan membahas modifier secara lengkap dan lebih mendalam lagi pada bab 9.
Modifier
Adalah keyword dalam Java yang befungsi untuk menerangkan sifat dari
suatu unsur; kelas/method/data, dan dituliskan di depan unsur tersebut.
Modifier tersebut adalah abstract, final, multiple, static, (default),
public, private, protected
Keyword tambahan terdiri dari extends dan implements. Extends digunakan dalam prinsip
pewarisan (inheritance), untuk menyatakan bahwa kelas tersebut merupakan perluasan dari super
kelas. Implements digunakan bila kita ingin menggunakan interface, yakni kumpulan method yang
dapat disisipkan ke dalam suatu kelas untuk aplikasi yang spesifik.
D. Class Body (Badan Kelas)
Class body adalah bagian program yang merupakan isi dari kelas, yang mendefinisikan segala
aspek tentang objek, baik sifat (data) maupun kelakuan (method), yang akan digunakan sebagai
blueprint atau prototype untuk menciptakan objek tersebut. Jelas bahwa data dan method dari kelas
harus dituliskan di dalam class body ini. Class body ini dituliskan sebagai satu blok setelah
deklarasi kelas. Blok dalam Java adalah sejumlah statement/instruksi yang ditulis diantara dua tanda
kurung kurawal { }.
Sebagai tambahan, terkadang dibutuhkan proses inisialisasi yang akan memberi nilai default
saat objek tercipta pertama kali. Masih ingat saat kita membuat lingkaran dengan drawing tool pada
MS Word atau Visio. Pada saat kita meng-click dan drag lingkaran tersebut ke dokumen kerja kita,
ukuran lingkaran yang kita peroleh untuk pertama kali selalu dengan radius (jari-jari) sama. Untuk
memberi nilai default kepada objek ini, dibutuhkan suatu bagian program yang disebut
Konstruktor (Constructor) dan harus dideklarasikan di dalam class body ini. Konstruktor ini
merupakan method juga dan akan dibahas lebih lanjut pada saat kita mulai membuat program.
Blok
Blok adalah grup yang menghimpun bagian tertentu program. Dalam Java, blok dimulai dengan
tanda kurung kurawal buka ( { ) dan diakhiri dengan kurung kurawal tutup ( } ). Setiap kelas
memiliki sebuah blok kelas yang menghimpun bagian data dan method. Setiap Method memiliki
blok method yang menghimpun perintah-perintah fungsi. Blok ini dapat disarangkan (nested),
maksudnya suatu blok dapat mengandung blok yang lebih kecil lagi.
http://subari.blogspot.com – PBO
10
E. Data/Variabel
Variabel adalah bagian memory yang berfungsi untuk menyimpan data. Setiap variabel harus
memiliki tipe data dan diberi nama yang unik, sehingga berbeda satu dengan lainnya. Variabel ini
dapat diinisialisasi dengan nilai awal dan nilai ini selanjutnya dapat berubah, sesuai dengan proses
yang dilakukan padanya. Berdasarkan cara mengakses data, terdapat dua kategori tipe data dalam
Java, yakni Tipe Data Primitif dan Tipe Data Referensi.
Aturan Penamaan Variabel
Untuk menamakan variabel, aturan yang dipakai sama seperti aturan penamaan kelas, namun pada
bagian anjuran konvensi terdapat modifikasi sebagai berikut :
a. Bila nama variabel hanya terdiri dari satu abjad atau satu kata, semua abjad dituliskan sebagai
huruf kecil. Contoh : “warna”, “nama”
b. Bila nama variabel terdiri dari dua kata atau lebih, kedua kata itu digabungkan. Huruf pertama
dari kata pertama sebaiknya huruf kecil, sedangkan huruf pertama kata kedua dan kata
berikutnya sebaiknya huruf kapital. Contoh : “radiusLingkaran”
Tipe data primitif
Pada saat kita mendeklarasikan variabel, sesungguhnya kita “memesan” sejumlah alamat memory
sesuai dengan tipe data yang diinginkan. Bagian memory yang telah dipesan ini selanjutnya akan
digunakan untuk menyimpan nilai data. Prinsip ini dinamakan tipe data primitif, yakni variabel
(yang pada hakikatnya merupakan alamat memory) mengandung nilai data yang dimaksud.
Ada 8 tipe data primitif :
· 4 untuk merepresentasikan nilai bilangan bulat (integer), yaitu
byte, short, int, long
· 2 untuk bilangan nyata (koma desimal), yaitu float dan double
· 2 untuk tipe data yang lain; char dan boolean
Mendeklarasikan dan Menugaskan (Meng-assign) Variable bertipe
Data Primitif
Bentuk umum :
tipedata namaVariabel = nilaiAwal
Statement di atas merupakan bentuk singkat dari proses-proses :
1. Mendeklarasikan variabel dengan tipe tertentu
typedata namaVariabel
int radius;
2. Menugaskan variabel (meng-assign) untuk suatu nilai
radius = 2;
3. Menggabungkan deklarasi dan penugasan:
http://subari.blogspot.com – PBO
11
int radius = 2;
Tipe data referensi
Pada tipe data referensi, deklarasi variabel juga dimaksudkan untuk “memesan” sejumlah alamat
memory. Namun bagian memory ini bukan untuk menyimpan nilai data seperti pada tipe data
primitif, melainkan untuk menyimpan pointer yang menunjuk ke alamat memory berikutnya yang
berisi nilai data yang dimaksud. Pointer ini adalah bilangan yang menunjukkan alamat memory
“sebenarnya”.
Konsep pointer di sini hanya digunakan untuk menunjukkan perbedaan data internal antara
tipe data primitif dan referensi. Java menghapuskan akses dan manipulasi pointer yang selama ini
sering membingungkan programmer, seperti dalam bahasa C++.
Mekanisme penyimpanan objek di dalam memory juga menggunakan tipe data referensi.
Variabel yang menyimpan objek ini disebut sebagai variabel referensi objek.
Contoh :
NamaKelas variabelReferensiObjek = new NamaKelas();
Lingkaran lingkaransatu = new Lingkaran();
Konstanta (Constant)
Konstanta (Constant) adalah variabel yang diberi suatu nilai awal (inisialisasi), dan nilai ini
selanjutnya bersifat tetap, tidak dapat diubah oleh kelas maupun method manapun. Untuk
mendeklarasikan sebuah Konstanta, digunakan modifier final di depan deklarasi variabel.
F. Method
Deklarasi Method
Deklarasi Method memiliki struktur sebagai berikut :
Modifier tipeNilaiKembalian namaMethod (parameter input) throws
exception
{
body dari Method;
}
Method dapat kita ilustrasikan sebagai kotak hitam (black box) yang berfungsi untuk
menerima data masukan, memprosesnya sesuai dengan operasi yang telah ditentukan, dan
mengembalikan data hasil kepada bagian yang memanggilnya.
Beberapa hal yang harus diperhatikan dalam deklarasi method :
Modifier (Optional)
Jenis modifier yang digunakan di sini sama seperti pada deklarasi kelas. Namun selain dari ketujuh
modifier yang telah dijelaskan di bagian kelas sebelumnya (public, private, protected, abstract,
final, multiple, static), terdapat dua modifier lagi untuk mendeklarasikan method, yakni native
dan synchronized.
http://subari.blogspot.com – PBO
12
Tipe Nilai Kembalian (ReturnValueType)
Dilihat dari nilai yang dikembalikannya, method memiliki dua kemungkinan, yaitu mengembalikan
suatu nilai, atau tidak. Bila method mengembalikan nilai, tipe nilai kembaliannya
(returnValueType) harus dituliskan sesuai tipe datanya, sedangkan bila tidak mengembalikan nilai,
returnValueType kita beri atribut void.
Parameter input
Dilihat dari parameter input, method dapat dibagi menjadi dua, yakni membutuhkan input dan tidak.
Input dalam Java bisa berupa input bertipe data primitif ataupun objek. Bila method membutuhkan
input, maka tipe data parameter dari input tersebut harus dituliskan. Sedangkan bila tidak
membutuhkan input, bagian di dalam tanda kurung setelah deklarasi method harus dikosongkan.
Jumlah parameter yang dapat diinputkan ke suatu method bisa tunggal atau banyak
(multiple input). Bila bersifat multiple input, maka dalam penulisan parameter tersebut, masingmasing
parameter harus dipisahkan dengan koma. Pada saat memanggil/mengakses method ini,
harus pula diperhatikan urutan parameter yang dibutuhkan, sehingga method dapat memroses data
dengan benar.
G. Main Method
Pada saat mengkompile file source (.java), Java Kompiler akan memeriksa syntax dan logika yang
berlaku untuk kelas. Bila tidak terdapat error, akan terbentuklah satu file .class. Selanjutnya Java
Interpreter akan mengeksekusi file .class ini, dan menjalankan aplikasi tersebut.
Pada saat Java Interpreter akan mengeksekusi file .class, yang pertama dilakukan adalah
mencari main method dan kemudian menjalankan baris demi baris statement yang terdapat di
dalamnya. Prinsip ini sama dengan fungsi main pada bahasa C/C++.
Main method ini harus dituliskan dalam bentuk baku seperti di bawah ini, bila tidak, Java
Interpreter tidak akan mengeksekusi aplikasi tersebut :
public static void main( String args[] ) {
body dari Main Method
}
4 Membuat Objek dari suatu Kelas
Untuk membuat objek dari suatu kelas, dibutuhkan operator new.
Bentuk umum :
NamaKelas variabelReferensiObjek = new NamaKelas();
http://subari.blogspot.com – PBO
13
Ungkapan di atas merupakan bentuk singkat dari serangkaian proses berikut :
1. Mendeklarasikan variabel referensi objek :
NamaKelas objekReferensi;
Lingkaran lingkaransatu;
2. Menciptakan objek dari kelas, dengan operator new.
new NamaKelas( );
new Lingkaran( );
3. Menugaskan (meng-assign) variabel kepada objek yang telah dibuat.
lingkaransatu = new Lingkaran( );
Proses di atas dapat digabungkan menjadi :
NamaKelas variabelReferensiObjek = new NamaKelas( );
Lingkaran lingkaransatu = new Lingkaran( );
Bila kita cermati langkah-langkah instansiasi objek dari kelas di atas, terlihat analogi saat kita
mendeklarasikan suatu variabel dan meng-assign-nya ke tipe data primitif.
Int radius;
radius = 3;
atau bila digabungkan menjadi satu statement :
int radius = 3;
5 Mengakses Data dan Method dari Suatu Kelas
Untuk mengakses data dan method dari suatu kelas, digunakan bentuk berikut :
NamaKelas.namaVariabel;
NamaKelas.namaMethod();
Yang perlu diperhatikan dalam mengakses data dan method adalah bagaimana mengatur tingkat
aksesibilitas (accesibility level) kedua unsur tersebut terhadap kelas yang mengakses, apakah
bersifat default, public, private, atau protected.
6 Menampilkan Hasil di Layar Monitor
Seperti halnya pembacaan input dari keyboard, proses menampilkan suatu variabel atau hasil
perhitungan di layar monitor juga dapat dibagi menjadi dua :
1. Dalam lingkungan Console.
Mencetak variabel atau suatu hasil perhitungan sangatlah mudah. Kita dapat menggunakan
method print() atau println() pada kelas System dalam struktur package java.lang. Package ini
merupakan default package bagi semua aplikasi java, sehingga kita tidak perlu mengimport
kelas System tersebut.
System.out.print();
System.out.println();
http://subari.blogspot.com – PBO
14
2. Menggunakan komponen GUI, seperti kelas JOptionPane.
Kita tinggal memanggil method untuk mencetak ke layar yang telah disediakan oleh kelas
tersebut. Sebagai contoh, Kelas JOptionPane merupakan komponen dari package javax.swing
yang dapat digunakan baik sebagai output maupun input. Untuk menampilkan tulisan di layar
digunakan method showMessageDialog(), sedangkan untuk membaca input digunakan method
showInputDialog().
Sebagai catatan, pada proses mencetak hasil perhitungan dari suatu method, kita bisa
menampungnya dalam suatu variabel terlebih dahulu. Selain itu kita juga bisa langsung menuliskan
method tersebut lengkap dengan argumennya pada statement System.out.println();
Contoh :
System.out.println(“Hasil Sinus sudut adalah : “ + Math.sin(sudut));
7 Membaca Data Input dari keyboard
Proses pembacaan data input yang diketikkan oleh user melalui keyboard dapat ditinjau menjadi
dua :
1. Dalam lingkungan Console (DOS).
Proses pembacaan data pada console tidaklah semudah ketika mencetak hasil ke monitor. Java
tidak memiliki method khusus untuk membaca data input dalam lingkungan console. Untuk itu
kita harus menderinisikan sendiri kelas / method pembacaan data tersebut. Pembahasan yang
lengkap dan lebih terperinci akan diberikan pada bab 14 File dan Stream. Pada bagian ini kita
cukup mengetahui bagaimana menggunakan kelas pembacaan tersebut dalam program.
2. Menggunakan komponen GUI, seperti kelas JOptionPane.
Komponen GUI memiliki method standard untuk menampilkan variabel/hasil ke layar, seperti
method showInputDialog pada Kelas JOptionPane.
8 Bagaimana Mempelajari Java ?
Java merupakan bahasa pemrograman yang didesain dengan basis OOP, bersifat multiplatform, dan
diperuntukkan untuk aplikasi yang sangat luas; mulai dari aplikasi biasa, internet, wireless,
telekomunikasi, bahkan game. Oleh sebab itu Java memiliki begitu banyak keyword, kelas dan API
(interface) standard.
Bila pada tahap ini anda merasa begitu banyak istilah baru yang belum anda pahami,
wajarlah kiranya. Namun setelah membaca beberapa bab dan mempraktekkan contoh-contoh
program, lambat laun anda akan terbiasa dengan istilah tersebut.
Beberapa tips untuk belajar Java :
1. Mempelajari dasar-dasar pemrograman, sambil memahami beberapa istilah / keyword yang
sering digunakan.
2. Mulai dengan membuat aplikasi sederhana berbasis teks I/O (Command Console), bila sudah
mahir, dapat beranjak ke pemrograman berbasis GUI (Graphical User Interface).
3. Sesekali luangkan waktu untuk membaca referensi kelas dan API (interface) standard, karena
Java memiliki begitu banyak library standard yang siap digunakan. Dokumen ini tersedia gratis
dan dapat didownload dalam bentuk help document di alamat web site Sun :
http://java.sun.com/downloads/index.html
http://subari.blogspot.com – PBO
15
4. Mengikuti perkembangan Java dari berbagai resource, internet, mailing list, majalah.
Mendownload free sample source code dari beberapa site, dan mencoba memodifikasinya.
5. Bila sudah menguasai Java2, cobalah untuk meningkatkan skill anda dengan mempelajari topiktopik
spesifik aplikasi Java, seperti Beans, RMI (Remote Method Invocation), J2EE (Java 2
Enterprise Edition) serta J2ME (Java 2 Micro Edition).
2.17.Menulis dan Mengedit Program
Untuk menulis program Java, kita hanya membutuhkan sebuah text editor sederhana, misalnya
notepad, yang merupakan aplikasi built-in dari Windows. Sekedar sebagai tips, untuk program yang
berukuran besar hingga ratusan atau ribuan baris, disarankan untuk menggunakan editor yang
memiliki informasi tentang nomor baris seperti UltraEdit. Ini dimaksudkan agar kita mudah mentrace
dan mengoreksi source file bila terjadi syntax error saat mengkompile program. File ini
kemudian kita simpan (save) dengan ekstension .java, namun perlu diingat aturan penamaan file
sebagai berikut :
1. Nama file .java haruslah sama dengan nama kelasnya (perhatikan huruf kecil dan huruf kapital),
jika tidak, maka akan terjadi error pada saat kompilasi.
2. Bila dalam satu file .java terdapat lebih dari satu kelas, di mana salah satu kelasnya
mengandung method main(), dan kita ingin mengeksekusi kelas tersebut (dengan Interpreter),
maka nama file .java harus sama dengan nama kelas itu.
3. Bila dalam satu file .java terdapat lebih dari satu kelas dan salah satu kelas dideklarasikan
sebagai public, maka nama file .java harus sama dengan kelas public tersebut.
http://subari.blogspot.com – PBO
16
Session: Pengenalan Java
Teknologi Java merupakan sebuah teknologi yang berkembang
sangat pesat akhir-akhir ini. Bahkan belakangan ini dikabarkan
berusaha mengalahkan Microsoft yang terkenal sebagai kampiun
dari produsen operating system dimuka bumi ini.
Java pertama kali diluncurkan pada tahun 1995 sebagai
bahasa pemrograman umum (general purpose programming
language) dengan kelebihan dia bisa dijalankan di web browser
sebagai applet. Langkah pertama yang diambil oleh Sun
Microsystem adalah dengan membuat JVM (Java Virtual Machine)
yang kemudian diimplementasikan dalam bentuk JRE (Java
Runtime Environment). JVM adalah lingkungan tempat eksekusi
program Java berlangsung dimana para objek saling berinteraksi
satu dengan yang lainnya. Virtual Machine inilah yang
menyebabkan Java mempunyai kemampuan penanganan memori
yang lebih baik, keamanan yang lebih tinggi serta portabilitas yang
besar.
Contoh letak penulisan script java pada HTML :
Java adalah teknologi dan bahasa pemrograman yang berjalan
pada multiflatform sesuai dengan semboyannya yaitu “Write Once,
http://subari.blogspot.com – PBO
17
Run Anywhere”. Pada site official Java dari Sun yaitu
http://java.sun.com bisa ditemui tiga pembagian paket Java yaitu:
Java 2 Enterprise Edition (J2EE), Java 2 Standart Editon (J2SE),
dan Java 2 Micro Edition (J2ME)
Penjelasan paling simple atas pembagian tersebut berdasarkan atas
perangkat keras yang digunakan.
1. Paket J2EE digunakan pada perangkat keras yang mempunyai
spesifikasi dan memory yang besar seperti pada komputer
server.
2. Paket J2SE digunakan pada perangkat keras seperti komputer
desktop.
3. Paket J2ME digunakan pada perangkat yang memiliki memory
kecil seperti ponsel, pager atau PDA.
Teknologi Java kini hadir dengan teknologi terbarunya, J2ME?
Platform, untuk pembangunan aplikasi pada mobile device seperti
mobile phone dan PDA.
Selain J2ME? Platform yang termasuk baru, terdapat pula satu buah
platform teknologi Java yang termasuk baru pula yaitu Java Card.
Java Card merupakan seperangkat kakas untuk membangun
aplikasi pada sebuah card electronic seperti SIM Card pada ponsel
kita. SIM Card yang dipergunakan oleh Mobile Banking BCA
(layanan operator selular Excelcomindo) menjadi salah satu contoh
dari teknologi Java Card.
http://subari.blogspot.com – PBO
18
Lain:
Java Server Pages (JSP) adalah bahasa scripting untuk web programming yang
bersifat server side seperti halnya PHP dan ASP. JSP dapat berupa gabungan
antara baris HTML dan fungsi-fungsi dari JSP itu sendiri. Berbeda dengan
Servlet yang harus dikompilasi oleh USER menjadi class sebelum dijalankan,
JSP tidak perlu dikompilasi oleh USER tapi SERVER yang akan melakukan
tugas tersebut. Makanya pada saat user membuat pertama kali atau
melakukan modifikasi halaman dan mengeksekusinya pada web browser akan
memakan sedikit waktu sebelum ditampilkan.
http://subari.blogspot.com – PBO
19
JavaTM 2 Platform, Standard Edition (J2SETM)
J2SE Technologies J2SE Downloads J2SE Documentation
Documentation Installation Instructions
for JavaTM 2 Platform, Standard Edition,
version 1.4.1
You should have approximately 165 MB of free disk space before installating the documentation.
Install the JavaTM 2 Platform, Standard Edition, v1.4.1 documentation by following these steps:
1. Where to unbundle your documentation
Unbundling the Java 2 SDK documentation creates a docs directory (folder) in
the current directory, putting all the documentation inside that directory as
shown here.
docs
___________________|_____________________
| | | | | |
index.html guide api tooldocs relnotes images
| | | | |
You can install the documentation inside your Java 2 SDK installation or in any
other location you prefer.
2. Unbundle your documentation
Unbundle the documentation using the a zip-compatible utility such as winzip,
unzip, gunzip, or pkunzip. Your utility must support long file names.
· To install the documentation bundle using the zip utility:
C:> unzip j2sdk-1_4_1-doc.zip
You can also install the .zip file using the Java 2 SDK’s jar utility:
C:> jar xvf j2sdk-1_4_1-doc.zip
Note: If you are using another tool that doesn’t preserve path names by default, be sure to specify that path names be
preserved. For example, if you are using pkunzip, specify -d:
C:> pkunzip -d j2sdk-1_4_1-doc.zip
Unzipping the documentation bundle creates a docs/ directory containing your
Java 2 Platform documentation.
3. View the documentation
Open the docs/index.html page in a browser. This is the front page and table of
contents of the Java 2 SDK documentation.
Java Development Kit
http://subari.blogspot.com – PBO
20
Java Development Kit (JDK) memuat program-program dan library
yang Anda butuhkan untuk meng-compile dan me-launch program Java. Dua
program utama yang ada di JDK adalah javac dan java.
Untuk meng-install JDK, Anda terlebih dahulu men-download installation file
dari http://java.sun.com. Anda perlu men-download JDK yang sesuai dengan
platform di mana Anda bekerja. Tersedia JDK untuk Linux, Solaris dan
Windows.
Installation file untuk Windows dari JDK versi 1.4 adalah j2sdk-1_4_1-
rc-windows-i586.exe. Yang perlu Anda lakukan hanyalah meng-execute file
ini. File ini akan mengalami de-compression.
Anda akan mendapatkan sebuah directory j2sdk1.4.1 (Anda modifikasi
menjadi j2sdk141) yang memuat JDK Anda. Directory ini dikenal sebagai
JAVA_HOME. Banyak aplikasi Java, seperti Tomcat dan JBoss
membutuhkan variable JAVA_HOME sebagai environment variable.
Program java dan javac berada di sub-directory bin/ di bawah JAVA_HOME.
Agar Anda bisa meng-compile dan me-launch program Java dari directory
mana saja, Anda bisa menambahkan JAVA_HOME/bin ke dalam
environment variable bernama PATH.
Untuk mengetahui cara penggunaan dari javac, yaitu Java compiler, Anda
bisa menjalankan perintah javac -help melalui terminal.
Untuk mengetahui cara penggunaan dari java, yaitu Java application
launcher, Anda bisa menjalankan perintah java -help melalui terminal.
Instalasi J2SDK 1.4.1
http://subari.blogspot.com – PBO
21
1. Pada hasil download atau CD instalasi java, double-click icon aplikasi Java 2
Standart Edition (J2SE) seperti dibawah ini.
2. Beberapa saat kemudian muncul dialog proses sbb….
http://subari.blogspot.com – PBO
22
http://subari.blogspot.com – PBO
23
3. maka pada start menu program terdapat link untuk aplikasi “Java Web Start”
(menu aplikasi untuk kondisi komputer online internet) seperti dibawah ini…
4. tampilan Java Web Start (kondisi menu aplikasi kosong, jika PC tdk online)…
http://subari.blogspot.com – PBO
24
5. Lakukan setting untuk variabel PATH & CLASSPATH. Contoh cara termudah,
Anda jalankan NotePad dan buka file c:\Autoexec.bat, rubah PATH untuk
JAVA_HOME/bin dengan menambahkan path c:\j2sdk141\bin, sbb:
6. Lakukan Restart Windows, untuk mendapatkan effect path tersebut. Atau jika
tanpa restart dan sudah berada di “prompt dos” jalankan file autoexec.bat tsb.
7. sekarang cek konfigurasi file hasil instalasi tersebut, buka Explorer.
8. Folder Java 2 SDK 1.4.1, dari hasil instalasi diatas nampak sbb:
http://subari.blogspot.com – PBO
25
- javac : kompiler, sumber java ke kode byte
- java : intepreter, menjalankan kode byte
- jdb : pelacak kesalahan
- appletviewer : memungkinkanprogram java dalam halaman-halaman web
dijalankan tanpa menggunakan browser web.
- javadoc : pembentuk file-file dokumentasi (html) dari petunjuk yang
disertakan pada sumber java.
- javah : pembentuk file header C yang berhubungan dengan objek-objek
java. Ini terutama berguna saat membuat program yang
mencampurkan bahasa-bahasa.
- javap : sebuah piranti untuk mencetak kode byte
- javaprof : sebuah piranti untuk memberi gambaran tentang pernyataan yang
paling sering dieksekusi dalam program anda.
9. Sekarang masuklah pada lingkungan dos prompt (pilih menu dos prompt atau
gunakan START menu untuk menu RUN), sbb: ketik CMD pd dialog Run.
http://subari.blogspot.com – PBO
26
Pada sembarang drive anda sekarang sudah bisa mengeksekusi compiler
dan intepreter java. Ketikkan javac untuk melihat parameter option yang
dimiliki compiler, dan java untuk melihat parameter yang dimiliki javalaunch.
Seperti tampak dibawah ini :
http://subari.blogspot.com – PBO
27
KODE ASCII
K O L O M
Desimal 0 1 2 3 4 5 6 7 8 9
0 NUL SOH STX ETX EOT ENQ ACK BEL BS HT
1 LF VT FF CR SO SI DLE DC1 DC2 DC3
2 DC4 NAK SYN ETB CAN EM SUB ESC FS GS
3 RS US SP ! “ # $ % & `
4 ( ) * + , – . / 0 1
5 2 3 4 5 6 7 8 9 : ;
6 < = > ? @ A B C D E
7 F G H I J K L M N O
8 P Q R S T U V W X Y
9 Z [ \ ] ^ _ ‘ a b c
10 d e f g h i j k l m
11 n o p q r s t u v w
B A R I S
12 x y z { | } ~ DEL
Arti dari beberapa akronim kode :
NULL : Kosong
SOH : Start Of Header
STX : Start of Text
ETX : End of Text
EOT : End Of Transmission
ENQ : Enquiry
ACK : Acknowledge
BEL : Bel
BS : Back Space
HT : Horizontal Tabulation
LF : Line Feed
VT : Vertical Tabulation
FF : Form Feed
CR : Carriage Return
SO : Shift Out
SI : Shift In
DLE : Delete
DC1 : Device Control 1
DC2 : Device Control 2
DC3 : Device Control 3
DC4 : Device Control 4
NAK : Negative Acknowledgement
SYN : Synchronous Idle
ETB : End of Transmission
CAN : CANcel
EM : End of Medium
SUB : Start of Special Sequence
ESC : Escape
FS : File Separator
GS : Group Separator
RS : Record Separator
US : Unit Separator
SP : Space
DEL : DELete
http://subari.blogspot.com – PBO
28
KEYWORD JAVA
Kata kunci adalah kata-kata tercadang, yang tidak boleh dipakai
sebagai pengenal. ANSI hanya memiliki 32 kata-kunci. Java memiliki hampir
60 kata kunci, termasuk setengah lusin yang dicadangkan untuk penggunaan
dimasa yang akan datang.
abstract
boolean
break
byte
case
catch
char
class
const
continue
default
do
double
else
extends
final
finally
float
for
goto
if
implements
import
instanceof
int
interface
long
native
new
abstract
boolean
break
byte
case
catch
char
class
const
continue
default
do
double
else
extends
final
finally
float
for
goto
if
implements
import
instanceof
int
interface
long
native
new
package
private
protected
public
return
short
static
super
switch
synchronized
this
throw
throws
transient
try
void
volatile
while
http://subari.blogspot.com – PBO
29
Komentar dalam listing java dibagi menjadi 3 jenis remark:
X = 0 // komentar “to end-of-line”
/* komentar “reguler multiline”
*/
/** komentar API untuk dokumentasi HTML
*/
LATIHAN
Sekarang gunakan notepad atau Edit (dos), untuk menuliskan contoh bahasa
java dibawah ini :
PERHATIKAN!, menuliskan perintah dan nama file Anda harus
memperhatikan besar kecilnya huruf (case sensitive).
Begitu juga pada saat melakuka kompilasi.
1. Simpan listing java ini dengan nama file: Hebat.java
/**
* Judul : Hebat
* Catatan: Menampilkan tulisan/pesan ke console
*/
class Hebat
{
/**Main Method*/
public static void main(String[] args)
{
System.out.println(“Waduhhh…Java, ternyata hueeebaaatttt….!!!”);
}
}
Catatan:
- void : Menunjukkan bahwa method tidak mengembalikan nilai atau
objek.
- main : nama method utama dari program java.
- string : tipe argument yang diterima untuk parameter dari command java.
- args : array argument yang bisa ditambahkan pada saat menggunakan
command java untuk menjalankan program java.
http://subari.blogspot.com – PBO
30
misal file tersebut disimpan pada drive D:\PRAKTIKUM
kemudian lakukan kompilasi pada file java tersebut, menggunakan javac.
D:\Praktikum> javac Hebat.java
D:\Praktikum>_
Sekarang, jika kompilasi diatas berhasil, maka akan muncul file hasil
kompilasi dalam bentuk .class.
Sehinga jika Anda lihat isi folder D:\PRAKTIKUM, setelah kompilasi tsb.
akan nampak 2 file sbb:
D:\Praktikum> DIR
Hebat.java
Hebat.class
Kemudian jalankan/lakukan launch hasil dari kompilasi tersebut
(Hebat.class), dengan menggunakan perintah java.
D:\Praktikum> java Hebat
Waduhhh…Java, ternyata hueeebaaatttt….!!!
2. Simpan listing java ini dengan nama file: HebatGrafis.java
/**
* Judul : HebatGrafis (GUI)
* Catatan : Modifikasi Listing Program 1 untuk menjadi mode grafis
*/
// Mengimport kelas JOptionPane dari package javax.swing
import javax.swing.JOptionPane;
public class HebatGrafis {
/**Main Method*/
public static void main( String args[] )
{
// Menampilkan pesan dengan Message Dialog dari
// kelas JOptionPane
JOptionPane.showMessageDialog(
null, “Hari gini…..gak kenal JAVA !!”,”Iklan”, 1);
System.exit( 0 ); // Keluar dari program
}
Jika tdk. Terjadi
kesalahan, maka
langsung tampil prompt
dos seperti ini.
http://subari.blogspot.com – PBO
31
}
simpan pada drive D:\PRAKTIKUM
kemudian lakukan kompilasi pada file java tersebut, menggunakan javac.
D:\Praktikum> javac HebatGrafis.java
D:\Praktikum>_
Sekarang, jika kompilasi diatas berhasil, maka akan muncul file hasil
kompilasi dalam bentuk .class.
Sehinga jika Anda lihat isi folder D:\PRAKTIKUM, setelah kompilasi tsb.
akan nampak file-file sbb:
D:\Praktikum> DIR
Hebat.java
Hebat.class
HebatGrafis.java
HebatGrafis.class
Kemudian jalankan/lakukan launch hasil dari kompilasi tersebut
(HebatGrafis.class), dengan menggunakan perintah java.
D:\Praktikum> java HebatGrafis
Jika tdk. Terjadi
kesalahan, maka
langsung tampil prompt
dos seperti ini.
http://subari.blogspot.com – PBO
32
Referensi
Bagaimana cara kita menggunakan dan memanipulasi suatu objek? Pertama adalah kita
harus memperoleh referensi dari objek yang ingin kita manipulasi.
Contoh:
boolean isOn; //pembuatan referensi isOn bertipe data boolean (deklarasi variabel)
isOn = false; //pemberian nilai false pada variabel isOn
Switch bedroomSwitch; //pembuatan referensi bedroomSwitch bertipe objek Switch
bedroomSwitch = new Switch(); //penciptaan objek baru dan variabel bedroomSwitch dijadikan
referensi
Dari sini kita bisa menyimpulkan bahwa secara umum variabel referensi ada dua jenis,
yaitu tipe primitif dan tipe bentukan/objek.
Tabel kata kunci untuk tipe data primitif
contoh penggunaan untuk tipe primitif:
http://subari.blogspot.com – PBO
33
dilanjutkan dengan ArithmeticException pada pembagian dengan l – i, karena l – i adalah nol.
Tipe-tipe primitif mempunyai portabilitas yang sangat tinggi karena semua bahasa memiliki
tipe-tipe data seperti ini. Masing-masing tipe mempunyai objek pembungkus yang immutable,
yaitu: Byte, Short, Integer, Long, Float, Double, Boolean, Character
contoh penggunaan tipe referensi Class dan Array
http://subari.blogspot.com – PBO
34
Class sebagai cetak biru dari objek
Class mendefinisikan sebuah tipe dari objek. Di dalam class kita dapat mendeklarasikan
variabel dan menciptakan objek (instansiasi). Sebuah class mempuyai anggota (member) yang
terdiri atas field dan method. Contoh:
Keyword Penggunaan Keyword Penggunaan
a) Konvensi penamaan Class:
ð Seluruh kata ditulis bersambung kecuali untuk konstanta
ð Nama Class – gunakan kata benda dan huruf pertama dari tiap kata ditulis dengan
huruf besar: String, ArrayIndexOutOfBoundsException
ð Nama Method – gunakan kata kerja dan keculi huruf yang pertama, huruf awal tiap
kata ditulis kapital: replace(), equalsIgnoreCase()
ð Konstanta – Semuanya ditulis dengan huruf besar; pemisah antar kata menggunakan
garis bawah: MAX_VALUE, DECIMAL_DIGIT_NUMBER
1. Field
Field adalah variabel data dan biasanya mempunyai nilai default dimana setiap objek
mempunyai himpunan fieldnya (instance variable) sendiri
class Account {
private long balance;
// the methods…
}
2. Method
Method adalah fungsi yang mempunyai masukan dalam bentuk parameter dan mungkin
menghasilkan nilai kembalian. Method hanya dapat didefinisikan di dalam class. Method terdiri
atas dua bagian, yaitu operation dan method body.
public class Account {
private long balance;
public boolean okToWithdraw(long amount) {
http://subari.blogspot.com – PBO
35
return (amount <= balance);
}
public long withdraw(long amount)
throws InsufficientFundsException {
if (amount > balance) {
throw new InsufficientFundsException(
amount – balance);
}
balance -= amount;
return amount;
}
public void deposit(long amount) {
balance += amount;
}
}
Account acct = new Account();
acct.deposit(15000L);
long cash = acct.withdraw(4000L);
3. Parameter
Parameter atau argumen adalah daftar tipe primitif dan referensi objek yang dipisahkan
oleh tanda koma. Masing-masingnya harus mempunyai nama variabel. Semua parameter
termasuk referensi objek di pass by value
public int lastIndexOf(String str, int fromIndex) {
//…
}
Contoh pass by value
class Value { int val; }
class Test {
public static void main(String[] args) {
int i1 = 3;
int i2 = i1;
i2 = 4;
System.out.print(“i1==” + i1);
System.out.println(” but i2==” + i2);
Value v1 = new Value();
v1.val = 5;
Value v2 = v1;
v2.val = 6;
System.out.print(“v1.val==” + v1.val);
System.out.println(” and v2.val==” + v2.val);
}
}
output yang dihasilkan silahkan direnungkan baik-baik:
i1==3 but i2==4
v1.val==6 and v2.val==6
4. Letak data dalam memori.
Untuk tipe data primitif, referensi dan nilainya berada di dalam stack. Sedangkan untuk
objek, referensinya berada di dalam stack yang menunjukkan alamat objek di dalam Heap
int i = 2001;
Integer i1 = new Integer(2001);
Integer i2 = i1;
http://subari.blogspot.com – PBO
36
5. Array
Array dalam Java juga diimplementasikan sebagai objek. JVM melakukan bounds
checking pada saat run-time
6. Lingkup dari deklarasi variabel
{
int i = 10;
// hanya i yang bisa di akses di sini
{
int j = 20;
// i dan j bisa diakses di sini
// tapi i tidak dapat didefinisikan ulang
// i = 23; illegal
}
// i masih bisa diakses, j tidak dapat diakses
}
{
Integer i = new Integer(10);
{
Character c = new Character(‘q’);
}
// c berada di luar lingkupnya
// objek Character tidak mempunyai referensi
}
// i di luar lingkupnya
// objek Integer tidak mempunyai referensi
7. Kata kunci Static
digunakan untuk membuat class variable dan class method class variable atau private
static field bisa diakses oleh semua instan dari class tersebut dan juga oleh class method. Ia
menjadi atribut yang umum bagi semua instan.
http://subari.blogspot.com – PBO
37
Contoh:
class Point {
int x, y, useCount;
Point(int x, int y) { this.x = x; this.y = y; }
final static Point origin = new Point(0, 0);
}
class Test {
public static void main(String[] args) {
Point p = new Point(1,1);
Point q = new Point(2,2);
p.x = 3; p.y = 3; p.useCount++; p.origin.useCount++;
System.out.println(“(” + q.x + “,” + q.y + “)”);
System.out.println(q.useCount);
System.out.println(q.origin == Point.origin);
System.out.println(q.origin.useCount);
}
}
Menghasilkan:
(2,2)
0
true
1
class method dapat dipanggil tanpa melalui referensi dari objek.
Contoh: main(String[] args), System.out, java.lang.Math, Collections, Arrays. Silahkan lihat
dokumentasi API dari class-class tersebut.
http://subari.blogspot.com – PBO
38
Inisialisasi dan CleanUp
Apa itu constructor?
diskusi tentang method dan constructor overloading constructor default, this, inisialisasi
variable serta array urutan inisialisasi class dan object diskusi tentang finalization dan cleanup
Mengapa kita membutuhkan constructor? Sebelum kita bekerja dengan suatu objek, maka kita
harus yakin bahwa objek itu berada pada satu keadaan tertentu atau ia tidak berada dalam
kondisi yang tidak pasti (indeterminate). Artinya objek itu harus siap untuk bekerja terlebih
dahulu dengan menentukan statenya. Caranya adalah dengan melakukan inisialiasi. Jika tidak
ada constructor maka biasanya programmer dahulu menyiapkan fungsi init() atau setup().
Dengan adanya constructor maka fungsi inisialisasi ini secara otomatis akan dipanggil pada
saat sebuah objek diciptakan
A.Constructor
public class Account {
private long balance;
public Account() {
balance = 0;
}
//…
}
public class Example1 {
public static void main(String[] args) {
// Create an empty account
Account acct = new Account();
}
}
B.Method Overloading
Overloaded method mempunyai nama yang sama tetapi berbeda jumlah dan jenis
parameternya:
public int indexOf(int ch) {
//…
}
public int indexOf(String str) {
//…
}
C.Overloading and Return Value
Tidak dapat overload pada nilai kembalian…
public char[] substring(int beginIndex) {
//…
}
public String substring(int beginIndex) {
//…
}
supaya tidak menimbulkan kebingungan seperti ini:
s.substring(5);
D.Overloading Constructors
public class Account {
private long balance;
public Account() {
balance = 0;
}
public Account(long initDeposit) {
balance = initDeposit;
}
//…
}
public class Example2 {
public static void main(String[] args) {
// Create an empty account
http://subari.blogspot.com – PBO
39
Account acct1 = new Account();
// Create an account with $ 1 Billion
Account acct2 = new Account(100000000000L);
}
}
E.Constructor Default
Jika kita tidak mendefinisikan constructor…
public class Account {
private long balance;
// No constructor declared
public boolean okToWithdraw(long amount) {
return (amount <= balance);
}
// …
}
maka compiler akan membuat default constructor:
public class Account {
private long balance;
public Account() {
}
public boolean okToWithdraw(long amount) {
return (amount <= balance);
}
// …
}
F.Referensi this
this adalah referensi terhadap diri sendiri (self):
public class Account {
private long balance;
public Account() {
balance = 0;
}
public Account(long balance) {
this.balance = balance;
}
public boolean okToWithdraw(long amount) {
return (amount <= this.balance);
}
//…
}
G.Pemanggilan this dalam Constructor
this() memanggil constructor yang lain dari dalam sebuah constructor. Ia harus berada pada
baris pertama pada constructor dan hanya boleh ada satu untuk setiap constructor
Can’t call this() from methods
public class Account {
private long balance;
private long minBal;
public Account() {
this(0, 200000);
}
public Account(long initDeposit) {
this(initDeposit, 200000);
}
public Account(long initDeposit, long minBal) {
balance = initDeposit;
this.minBal = minBal;
}
//…
}
http://subari.blogspot.com – PBO
40
H.Inisialisasi Variabel
Instance (dan class) variabels mempunyai default value:
public class Account {
private long balance;
public void deposit(long amount) {
balance += amount;
}
// …
}
variabel local harus secara explicit diinisialisasi:
// THIS WON’T COMPILE
public class Example7 {
public static void main(String[] args) {
Account acct;
// acct = new Account();
acct.deposit(15000);
}
}
I.Urutan Inisialisasi Object
Constructor dikompilasi menjadi <init>() method
Pertama <init>() memanggil <init>() yang lain
Kedua, initializer dan instance initialization block dieksekusi secara berurutan Ketiga, tubuh
constructor dijalankan
public class Account {
private long balance = 200;
private long minBal = 100;
{
balance = 400;
minBal = 200;
}
public Account(long initDeposit, long minBal) {
balance = initDeposit;
this.minBal = minBal;
}
// …
}
public class Example8 {
public static void main(String[] args) {
Account acct = new Account(800, 400);
}
}
J.Urutan Inisialisasi Class
Static initialization code dikompilasi menjadi method <clinit>()
Static initializers dan static initialization blocks dieksekusi secara berurutan
class CoffeeCup {
private static int cupCount = 355;
static {
cupCount =
PersistentStorage.getLastCupCount();
}
//…
}
Class diinisialisasi pada penggunaannya pertama kali.
K.Insialisasi Array
Dua cara untuk mendeklarasikan array:
int[] value;
int value[];
http://subari.blogspot.com – PBO
41
Untuk memperoleh object array, harus secara eksplisit:
private int[] value = new int[10];
{
for (int i = 0; i < value.length; ++i) {
value[i] = i;
}
}
Dapat juga menggunakan tanda kurung kriting (curly braces):
private int[] value1 = { 0, 1, 2, 3, 4 };
private Integer[] value2 = {
new Integer(0),
new Integer(1)
};
arrayVar.length memberikan panjang dari sebuah array
Multi-dimensional array diimplementasikan sebagai arrays of arrays
L.Finalization dan Cleanup
ð Memori untuk object yang tak terpakai lagi secara otomatis dibebaskan oleh garbage
collector
ð finalize() secara otomatis dipanggil oleh garbage collector sebelum memori dibebaskan
ð Object mungkin saja tidak di garbage collected
ð Tidak boleh bergantung pada finalize() untuk melepaskan sumber daya yang terbatas.
http://subari.blogspot.com – PBO
42
Reusing Classes
Actually we don’t “reuse”, we simply “use”
Ada dua cara untuk menggunakan suatu class yang sudah ada, yaitu:
1. dengan komposisi
2. dengan pewarisan atau inheritansi
Kemudian kita akan belajar apa itu polymorphism dan bagaimana menggunakannya secara
tepat.
A.Komposisi objek.
Secara sederhana adalah suatu objek menggunakan (use) objek lain atau objek
mengandung/memiliki objek lain.
Contoh:
package learn.reuse.composition;
class WaterSource {
private String s;
WaterSource() {
System.out.println(“WaterSource()”);
s = new String(“Constructed”);
}
public String toString() { return s; }
}
public class SprinklerSystem {
private String valve1, valve2, valve3, valve4;
WaterSource source;
int i;
float f;
void print() {
System.out.println(“valve1 = ” + valve1);
System.out.println(“valve2 = ” + valve2);
System.out.println(“valve3 = ” + valve3);
System.out.println(“valve4 = ” + valve4);
System.out.println(“i = ” + i);
System.out.println(“f = ” + f);
System.out.println(“source = ” + source);
}
public static void main(String[] args) {
SprinklerSystem x = new SprinklerSystem();
x.print();
}
}
Keluarannya:
valve1 = null
valve2 = null
valve3 = null
valve4 = null
i = 0
f = 0.0
source = null
http://subari.blogspot.com – PBO
43
B.Composition with forwarding
Ini adalah kasus khusus dari komposisi objek di mana kompositor memanggil method
dari objek yang dikandungnya.
Contoh:
public class Account {
private long balance;
public long withdraw(long amount)
throws InsufficientFundsException {
if (amount <= 0) {
throw new IllegalArgumentException();
}
if (amount > balance) {
throw new InsufficientFundsException(amount – balance);
}
balance -= amount;
return amount;
}
public void deposit(long amount) {
if (amount <= 0) {
throw new IllegalArgumentException();
}
long newBal = balance + amount;
if (newBal < 0) {
throw new ArithmeticException();
}
balance = newBal;
}
public long getBalance() {
return balance;
}
}
Apabila kita ingin menciptakan jenis Account yang lain kita bisa menggunakan class Account
yang sudah tersedia.
Contoh:
http://subari.blogspot.com – PBO
44
public class OverdraftAccount {
private Account account = new Account();
private long overdraft;
public OverdraftAccount(long overdraftMax) {
this.overdraftMax = overdraftMax;
}
public long getOverdraft() {
return overdraft;
}
public long getOverdraftMax() {
return overdraftMax;
}
public long getBalance() {
return account.getBalance();
}
public long withdraw(long amount)
throws InsufficientFundsException {
if (amount <= 0) {
throw new IllegalArgumentException();
}
long bal = account.getBalance();
if (bal >= amount) {
return account.withdraw(amount);
}
long shortfall = amount – bal;
long extraAvailable = overdraftMax – overdraft;
if (shortfall > extraAvailable) {
throw new InsufficientFundsException(shortfall
- extraAvailable);
}
overdraft += shortfall;
account.withdraw(amount – shortfall);
return amount;
}
public void deposit(long amount) {
if (amount <= 0) {
throw new IllegalArgumentException();
}
if (overdraft > 0) {
if (amount < overdraft) {
overdraft -= amount;
}
else {
long diff = amount – overdraft;
overdraft = 0;
account.deposit(diff);
}
}
else {
account.deposit(amount);
}
}
}
C.Inheritansi atau pewarisan
Bagian ini adalah bagian yang paling banyak diberikan contohnya jadi selamat menarik
kesimpulan.
Contoh:
package learn.reuse.inheritance;
public class A {
private int i = 0; // hidden from all other objects, except instances of A
protected double d1 = 0.0D; // subclasses of A will inherit this
protected double d2 = 0.0D; // subclasses of A will inherit this
public void setI(int in) {
i = in;
}
public void setd1(double din) {
d1 = din;
}
public void setd2(double din) {
d2 = din;
}
public void print() {
System.out.println(“A’s print() called”);
System.out.println(“d1: “+d1+”, d2:”+d2);
http://subari.blogspot.com – PBO
45
}
public double acc(double d1) {
System.out.println(“A’s acc(double) called”);
return this.d1+this.d2+d1;
}
}
package learn.reuse.inheritance;
Public class B extends A {
protected double d3 = 0.0D;
public void setd3(double din) {
d3 = din;
}
// print() overrides print() in class A
public void print() {
System.out.println(” B’s print() called”);
//System.out.println(“i1: “+i); i is a private data member of A,
// compile time error
System.out.println(“d1: “+d1+”, d2: “+d2+”, d3: “+d3);
// d1, d2, are protected data members of A, and are inherited by B
}
// acc(double) overrides acc(double) in class A
public double acc(double x1) {
System.out.println(” B’s acc(double) called”);
return super.acc(x1)+d3;
}
// acc(double, double) overloads acc(double) in A
public double acc(double x1, double x2) {
System.out.println(” B’s acc(double, double) called”);
return d1+d2+d3+x1+x2;
}
}
package learn.reuse.inheritance;
public class MainClass {
public static void main(String[] args) {
B myB = new B();
myB.setd1(3.4D); // invoking setd1(double) inherited from A
myB.setd2(4.4D); // invoking setd2(double) inherited from A
myB.setd3(5.5D);
myB.print();
System.out.println(myB.acc(5.5D));
System.out.println(myB.acc(5.5D, 6.5D));
A myA = new B(); // myA is declared as a reference to an object of
// type A, but is actually “pointing” to an object of type B
myA.setd1(2.3D);
myA.setd2(2.6D);
// myA.setd3(6.6D); setd3 not defined in A. Compile time error!
myA.print(); // polymorphic B’s print() called
myA.acc(5.6D); // polymorphic B’s acc(double) called
// myA.acc(3.4D, 5.6D); acc(double, double) not defined in A
// compile time error!
}
}
Outputnya sebagai berikut:
B’s print() called
d1: 3.4, d2: 4.4, d3: 5.5
B’s acc(double) called
A’s acc(double) called
18.8
B’s acc(double, double) called
25.3
B’s print() called
d1: 2.3, d2: 2.6, d3: 0.0
B’s acc(double) called
A’s acc(double) called
http://subari.blogspot.com – PBO
46
Lima contoh selanjutnya adalah tentang instrumen musik
package learn.reuse.inheritance.music1;
class Note {
private int value;
private Note(int val) { value = val; }
public static final Note
MIDDLE_C = new Note(0),
C_SHARP = new Note(1),
B_FLAT = new Note(2);
} // Etc.
class Instrument {
public void play(Note n) {
System.out.println(“Instrument.play()”);
}
}
// Wind objects are instruments
// because they have the same interface:
class Wind extends Instrument {
// Redefine interface method:
public void play(Note n) {
System.out.println(“Wind.play()”);
}
}
public class Music1 {
public static void tune(Instrument i) {
// …
i.play(Note.MIDDLE_C);
}
public static void main(String[] args) {
Instrument flute = new Wind();
tune(flute); // Upcasting
}
}
Outputnya sederhana saja:
Wind.play()
Contoh kedua dari alat-alat musik.
package learn.reuse.inheritance.music2;
class Note {
private int value;
private Note(int val) { value = val; }
public static final Note
MIDDLE_C = new Note(0),
C_SHARP = new Note(1),
B_FLAT = new Note(2);
} // Etc.
class Instrument {
public void play(Note n) {
System.out.println(“Instrument.play()”);
}
}
class Wind extends Instrument {
public void play(Note n) {
System.out.println(“Wind.play()”);
}
}
class Stringed extends Instrument {
public void play(Note n) {
System.out.println(“Stringed.play()”);
}
}
class Brass extends Instrument {
public void play(Note n) {
System.out.println(“Brass.play()”);
}
}
public class Music2 {
http://subari.blogspot.com – PBO
47
public static void tune(Wind i) {
i.play(Note.MIDDLE_C);
}
public static void tune(Stringed i) {
i.play(Note.MIDDLE_C);
}
public static void tune(Brass i) {
i.play(Note.MIDDLE_C);
}
public static void main(String[] args) {
Wind flute = new Wind();
Stringed violin = new Stringed();
Brass frenchHorn = new Brass();
tune(flute); // No upcasting
tune(violin);
tune(frenchHorn);
}
}
Keluarannya adalah:
Wind.play()
Stringed.play()
Brass.play()
Versi ketiganya mulai mengenalkan upcasting
package learn.reuse.inheritance.music3;
import java.util.*;
class Instrument {
public void play() {
System.out.println(“Instrument.play()”);
}
public String what() {
return “Instrument”;
}
public void adjust() {}
}
class Wind extends Instrument {
public void play() {
System.out.println(“Wind.play()”);
}
public String what() { return “Wind”; }
public void adjust() {}
}
class Percussion extends Instrument {
public void play() {
System.out.println(“Percussion.play()”);
}
public String what() { return “Percussion”; }
public void adjust() {}
}
class Stringed extends Instrument {
public void play() {
System.out.println(“Stringed.play()”);
}
public String what() { return “Stringed”; }
public void adjust() {}
}
class Brass extends Wind {
public void play() {
System.out.println(“Brass.play()”);
}
public void adjust() {
System.out.println(“Brass.adjust()”);
}
}
class Woodwind extends Wind {
public void play() {
System.out.println(“Woodwind.play()”);
}
public String what() { return “Woodwind”; }
}
public class Music3 {
http://subari.blogspot.com – PBO
48
// Doesn’t care about type, so new types
// added to the system still work right:
static void tune(Instrument i) {
// …
i.play();
}
static void tuneAll(Instrument[] e) {
for(int i = 0; i < e.length; i++)
tune(e[i]);
}
public static void main(String[] args) {
Instrument[] orchestra = new Instrument[5];
int i = 0;
// Upcasting during addition to the array:
orchestra[i++] = new Wind();
orchestra[i++] = new Percussion();
orchestra[i++] = new Stringed();
orchestra[i++] = new Brass();
orchestra[i++] = new Woodwind();
tuneAll(orchestra);
}
}
Hasilnya:
Wind.play()
Percussion.play()
Stringed.play()
Brass.play()
Woodwind.play()
Edisi ke 4 mulai menggunakan ABC (Abstract Base Class) dari Instrument
package learn.reuse.inheritance.music4;
import java.util.*;
abstract class Instrument {
int i; // storage allocated for each
public abstract void play();
public String what() {
return “Instrument”;
}
public abstract void adjust();
}
class Wind extends Instrument {
public void play() {
System.out.println(“Wind.play()”);
}
public String what() { return “Wind”; }
public void adjust() {}
}
class Percussion extends Instrument {
public void play() {
System.out.println(“Percussion.play()”);
}
public String what() { return “Percussion”; }
public void adjust() {}
}
class Stringed extends Instrument {
public void play() {
System.out.println(“Stringed.play()”);
}
public String what() { return “Stringed”; }
public void adjust() {}
}
class Brass extends Wind {
public void play() {
System.out.println(“Brass.play()”);
}
public void adjust() {
System.out.println(“Brass.adjust()”);
}
}
class Woodwind extends Wind {
public void play() {
System.out.println(“Woodwind.play()”);
}
public String what() { return “Woodwind”; }
}
http://subari.blogspot.com – PBO
49
public class Music4 {
// Doesn’t care about type, so new types
// added to the system still work right:
static void tune(Instrument i) {
// …
i.play();
}
static void tuneAll(Instrument[] e) {
for(int i = 0; i < e.length; i++)
tune(e[i]);
}
public static void main(String[] args) {
Instrument[] orchestra = new Instrument[5];
int i = 0;
// Upcasting during addition to the array:
orchestra[i++] = new Wind();
orchestra[i++] = new Percussion();
orchestra[i++] = new Stringed();
orchestra[i++] = new Brass();
orchestra[i++] = new Woodwind();
tuneAll(orchestra);
}
}
Keluarannya:
Wind.play()
Percussion.play()
Stringed.play()
Brass.play()
Woodwind.play()
Contoh terakhir dari alat-alat musik dengan diperkenalkannya interface sebagai pure
abstract class.
package learn.reuse.inheritance.music5;
import java.util.*;
interface Instrument {
// Compile-time constant:
int i = 5; // static & final
// Cannot have method definitions:
void play(); // Automatically public
String what();
void adjust();
}
class Wind implements Instrument {
public void play() {
System.out.println(“Wind.play()”);
}
public String what() { return “Wind”; }
public void adjust() {}
}
class Percussion implements Instrument {
public void play() {
System.out.println(“Percussion.play()”);
}
public String what() { return “Percussion”; }
public void adjust() {}
}
class Stringed implements Instrument {
public void play() {
System.out.println(“Stringed.play()”);
}
public String what() { return “Stringed”; }
public void adjust() {}
}
class Brass extends Wind {
public void play() {
System.out.println(“Brass.play()”);
}
public void adjust() {
System.out.println(“Brass.adjust()”);
}
}
class Woodwind extends Wind {
public void play() {
System.out.println(“Woodwind.play()”);
http://subari.blogspot.com – PBO
50
}
public String what() { return “Woodwind”; }
}
public class Music5 {
// Doesn’t care about type, so new types
// added to the system still work right:
static void tune(Instrument i) {
// …
i.play();
}
static void tuneAll(Instrument[] e) {
for(int i = 0; i < e.length; i++)
tune(e[i]);
}
public static void main(String[] args) {
Instrument[] orchestra = new Instrument[5];
int i = 0;
// Upcasting during addition to the array:
orchestra[i++] = new Wind();
orchestra[i++] = new Percussion();
orchestra[i++] = new Stringed();
orchestra[i++] = new Brass();
orchestra[i++] = new Woodwind();
tuneAll(orchestra);
}
}
Keluarannya juga sama:
Wind.play()
Percussion.play()
Stringed.play()
Brass.play()
Woodwind.play()
D. Kapan menggunakan composititon atau inheritance
Prinsip kedua dari pemrograman OOP yang baik adalah “favour composition over
inheritance”.
Composition mempunyai keuntungan-keuntungan: low coupling, menjaga encapsulation
kerugiannya perlu kerja yang lebih banyak untuk membungkus method-method yang sudah
standar dan tidak dapat polymporphism.
Sedang inheritance keuntungannya adalah polymorphism dan mudah untuk menambah data
apabila behaviour nya tidak jauh beda. Kerugiannya adalah tight coupling dan encapsulation
yang mulai terbuka.
Tentu saja kedua kekuatan ini bisa digabungkan dengan menggunakan interface