materi java merancang aplikasi teks dan dekstop berbasis obyek

31
Pemrograman Berorientasi Obyek - 1 SMK BIMA BOJONEGORO Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected] JAVA Sejarah Singkat Perkembangan JAVA Proyek Java dimulai pada tahun 1991, ketika sejumlah insinyur perusahaan Sun yang dimotori oleh James Gosling mempunyai keinginan untuk mendesain sebuah bahasa komputer kecil yang dapat dipergunakan untuk peralatan konsumen seperti kotak tombol saluran TV. Proyek ini kemudian diberi nama sandi Green. Keharusan untuk membuat bahasa yang kecil , dan kode yang ketat mendorong mereka untuk menghidupkan kembali model yang pernah dicoba oleh bahasa UCSD Pascal, yaitu mendesain sebuah bahasa yang portable yang menghasilkan kode intermediate. Kode intermediate ini kemudian dapat digunakan pada banyak komputer yang interpreternya telah disesuaikan. Karena orang-orang Sun memiliki latar belakang sebagai pemakai unix sehingga mereka lebih menggunakan C++ sebagai basis bahasa pemrograman mereka, maka mereka secara khusus mengembangkan bahasa yang berorientasi objek bukan berorientasi prosedur. Seperti yang dikatakan Gosling ”Secara keseluruhan, bahasa hanyalah sarana, bukan merupakan tujuan akhir”. Dan Gosling memutuskan menyebut bahasanya dengan nama “Oak” (diambil dari nama pohon yang tumbuh tepat diluar jendela kantornya di Sun), tetapi kemudian nama Oak diubah menjadi java, karena nama Oak merupakan nama bahasa komputer yang sudah ada sebelumnya. Pada tahun 1994 sebagian besar orang menggunakan mosaic, browser web yang tidak diperdagangkan yang berasal dari pusat Supercomputing Universitas Illinois pada tahun 1993.( Mosaic sebagian ditulis oleh Marc Andreessen dengan bayaran $6.85 per jam, sebagai mahasiswa yang melakukan studi praktek. Di kemudian hari ia meraih ketenaran sebagai salah seorang pendiri dan pemimpin teknologi di netscape) Browser yang sesungguhnya dibangun oleh Patrick Naughton dan Jonathan Payne dan berkembang ke dalam browser HotJava yang kita miliki saat ini. Browser HotJava ditulis dalam Java untuk menunjukkan kemampuan Java. Tetapi para pembuat juga memiliki ide tentang suatu kekuatan yang saat ini disebut dengan applet, sehingga mereka membuat browser yang mampu penerjemahkan kode byte tingkat menengah. “Teknologi yang Terbukti” ini diperlihatkan pada SunWorld ‟95 pada tanggal 23 mei 1995, yang mengilhami keranjingan terhadap Java terus berlanjut. Kriteria “Kertas Putih” Java Penulis Java telah menulis pengaruh “Kertas Putih” yang menjelaskan tujuan rancangan dan keunggulannya. Kertas mereka disusun lewat 11 kriteria berikut : Sederhana (Simple) Syntax untuk Java seperti syntax pada C++ tetapi syntax Java tidak memerlukan header file, pointer arithmatic (atau bahkan pointer syntax), struktur union, operator overloading, class virtual base, dan yang lainnya. Jika anda mengenal C++ dengan baik, maka anda dapat berpindah ke syntax Java dengan mudah tetapi jika tidak, anda pasti tidak berpendapat bahwa Java sederhana. Berorientasi Objek (Object Oriented) Rancangan berorientasi objek merupakan suatu teknik yang memusatkan rancangan pada data (objek) dan interface. Fasilitas pemrograman berorientasi objek pada Java pada dasarnya adalah sama dengan C++. Feature pemrograman berorientasi objek pada Java benar-benar sebanding dengan C++, perbedaan utama antara Java dengan C++ terletak pada penurunanberganda (multiple inheritance), untuk ini Java memiliki cara penyelesaian yang lebih baik.

Upload: omen-nayto

Post on 12-Jun-2015

8.124 views

Category:

Education


9 download

TRANSCRIPT

Page 1: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 1 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

JAVA

Sejarah Singkat Perkembangan JAVA

Proyek Java dimulai pada tahun 1991, ketika sejumlah insinyur perusahaan Sun

yang dimotori oleh James Gosling mempunyai keinginan untuk mendesain sebuah bahasa

komputer kecil yang dapat dipergunakan untuk peralatan konsumen seperti kotak tombol

saluran TV. Proyek ini kemudian diberi nama sandi Green.

Keharusan untuk membuat bahasa yang kecil , dan kode yang ketat mendorong

mereka untuk menghidupkan kembali model yang pernah dicoba oleh bahasa UCSD Pascal,

yaitu mendesain sebuah bahasa yang portable yang menghasilkan kode intermediate. Kode

intermediate ini kemudian dapat digunakan pada banyak komputer yang interpreternya

telah disesuaikan.

Karena orang-orang Sun memiliki latar belakang sebagai pemakai unix sehingga

mereka lebih menggunakan C++ sebagai basis bahasa pemrograman mereka, maka mereka

secara khusus mengembangkan bahasa yang berorientasi objek bukan berorientasi

prosedur. Seperti yang dikatakan Gosling ”Secara keseluruhan, bahasa hanyalah sarana, bukan merupakan tujuan akhir”. Dan Gosling memutuskan menyebut bahasanya dengan

nama “Oak” (diambil dari nama pohon yang tumbuh tepat diluar jendela kantornya di Sun),

tetapi kemudian nama Oak diubah menjadi java, karena nama Oak merupakan nama bahasa

komputer yang sudah ada sebelumnya.

Pada tahun 1994 sebagian besar orang menggunakan mosaic, browser web yang

tidak diperdagangkan yang berasal dari pusat Supercomputing Universitas Illinois pada

tahun 1993.( Mosaic sebagian ditulis oleh Marc Andreessen dengan bayaran $6.85 per jam,

sebagai mahasiswa yang melakukan studi praktek. Di kemudian hari ia meraih ketenaran sebagai

salah seorang pendiri dan pemimpin teknologi di netscape)

Browser yang sesungguhnya dibangun oleh Patrick Naughton dan Jonathan Payne dan

berkembang ke dalam browser HotJava yang kita miliki saat ini. Browser HotJava ditulis dalam

Java untuk menunjukkan kemampuan Java. Tetapi para pembuat juga memiliki ide tentang suatu

kekuatan yang saat ini disebut dengan applet, sehingga mereka membuat browser yang mampu

penerjemahkan kode byte tingkat menengah. “Teknologi yang Terbukti” ini diperlihatkan pada

SunWorld ‟95 pada tanggal 23 mei 1995, yang mengilhami keranjingan terhadap Java terus

berlanjut.

Kriteria “Kertas Putih” Java

Penulis Java telah menulis pengaruh “Kertas Putih” yang menjelaskan tujuan rancangan dan

keunggulannya. Kertas mereka disusun lewat 11 kriteria berikut :

Sederhana (Simple)

Syntax untuk Java seperti syntax pada C++ tetapi syntax Java tidak memerlukan header

file, pointer arithmatic (atau bahkan pointer syntax), struktur union, operator overloading, class

virtual base, dan yang lainnya. Jika anda mengenal C++ dengan baik, maka anda dapat berpindah ke

syntax Java dengan mudah tetapi jika tidak, anda pasti tidak berpendapat bahwa Java sederhana.

Berorientasi Objek (Object Oriented)

Rancangan berorientasi objek merupakan suatu teknik yang memusatkan rancangan pada

data (objek) dan interface. Fasilitas pemrograman berorientasi objek pada Java pada dasarnya

adalah sama dengan C++. Feature pemrograman berorientasi objek pada Java benar-benar

sebanding dengan C++, perbedaan utama antara Java dengan C++ terletak pada penurunanberganda

(multiple inheritance), untuk ini Java memiliki cara penyelesaian yang lebih baik.

Page 2: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 2 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

Terdistribusi (Distributed)

Java memiliki library rutin yang luas untuk dirangkai pada protokol TCP/IP sepetrti HTTP

dan FTP dengan mudah. Aplikasi Java dapat membuka dan mengakses objek untuk segala macam

NET lewat URL sama mudahnya seperti yang biasa dilakukan seorang programmer ketika mengakses

file sistem secara lokal.

Kuat (Robust)

Java dimaksudkan untuk membuat suatu program yang benar-benar dapat dipercaya dalam

berbagai hal. Java banyak menekankan pada pengecekan awal untuk kemungkinan terjadinya

masalah, pengecekan pada saat run0time dan mengurangi kemungkinan timbulnya kesalahan (error).

Perbedaan utama antara Java dan C++ adalah Java memiliki sebuah model pointer yang mengurangi

kemungkinan penimpaan (overwriting) pada memory dan kerusakan data (data corrupt).

Aman (Secure)

Java dimaksudkan untuk digunakan pada jaringan terdistribusi. Sebelum sampai pada

bagian tersebut, penekanan terutama ditujukan pada masalah keamanan. Java memungkinkan

penyusunan program yang bebas virus, sistem yang bebas dari kerusakan.

Netral Arsitektur (Architecture Neutral)

Kompiler membangkitkan sebuah format file dengan objek arsitektur syaraf, program

yang di kompile dapat dijalankan pada banyak prosesor, disini diberikan sistem run time dari Java.

Kompiler Java melakukannya dengan membangkitkan instruksi-instruksi kode byte yang tidak dapat

dilakukan oleh arsitektur komputer tertentu. Dan yang lebih baiik Java dirancang untuk

mempermudah penterjemahan pada banyak komputer dengan mudah dan diterjemahkan pada

komputer asal pada saat run-time.

Portabel (Portable)

Tidak seperti pada C dan C++, di Java terdapat ketergantungan pada saat implementasi

(implement dependent). ukuran dari tipe data primitif ditentukan, sebagaimana kelakuan aritmatik

padanya. Librari atau pustaka merupakan bagian dari sistem yang mendefinisikan interface yang

portabel.

Interpreter

Interpreter Java dapat meng-eksekusi kode byte Java secara langsung pada komputer-

komputer yang memiliki interpreter. Dan karena proses linking dalam Java merupakan proses yang

kenaikannya tahap demi tahapdan berbobot ringan, maka proses pengembangan dapat menjadi lebih

cepat dan masih dalam penelitian.

Kinerja Yang Tinggi (High Performance)

Meskipun kinerja kode byte yang di interpretasi biasanya lebih dari memadai, tetapi masih

terdapat situasi yang memerlukan kinerja yang lebih tinggi. Kode byte dapat diterjemahkan (pada

saat run-time) de dalam kode mesin untuk CPU tertentu dimana aplikasi sedang berjalan.

Multithreaded

Multithreading adalah kemampuan sebuah program untuk melakukan lebih dari satu

pekerjaan sekaligus. Keuntunga dari multithreading adalah sifat respons yang interaktif dan real-

time.

Dinamis

Dalam sejumlah hal, Java merupakan bahasa pemrograman yang lebih dinamis dibandingkan

dengan C atau C++. Java dirancang untuk beradaptasi dengan lingkungan yang terus berkembang.

Librari dapat dengan mudah menambah metode dan variabel contoh yang baru tanpa banyak

mempengaruhi klien. Informasi tipr run-time dalam Java adalah langsung (straigtforward).

Page 3: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 3 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

Bagaimana Java Lebih Baik daripada C++ ?

Prinsip dasar pembuatan Java adalah karena C++ ternyata tidak memenuhi janji sebagai

pemrograman berorientasi objek. Jadi apa yang salah dari C++ sehingga Java harus dibuat ?

Jawabannya sederhana, yaitu Kompatibilitas ke belakang ( backward compability). Kompabilitas kebelakang biasanya dikenal sebagai kemampuan yang menjamin keberhasilan

dengan membuat programmer belajar dengan cepat. Java menggunakan hampir semua konvensi yang

identik untuk deklarasi variabel, melewatkan parameter, operator dan pengaturan aliran. Sehingga

dengan kata lain Java menambahkan bagian-bagian yang baik dari C++ dan menghapus bagian-bagian

yang jelek dari C. Java jauh lebih baik dari C++ karena hal-hal yang tidak dimilikinya, seperti

beberapa contoh berikut:

Variabel Global

Para programmer menulis program dalam bahasa assembly, dan semua program yang

disimpan dalan punch card, penghubung alat pemrograman adalah variabel global, masalahnya,

dengan menggunakan variabel blobal suatu fungsi dapat memberikan efek samping yang buruk

dengan mengubah keadaan global. Variabel global pada C++ adalah tanda sebuah program yang tidak

dirancang cukup baik untuk enkapsulasi data dengan cara yang masuk akal.

Pada Java, ruang penamaan global hanya hirarki class. Tidak mungkin menciptakan variabel

global diluar semua class. Setidaknya penentuan keadaan global dibuat lebih jelas dengan

enkapsulasi dalam class. Contoh, system.out.println() sering digunakan dalam program Java. Ini

adalah cara mengakses output standar global untuk interpreter Java.

Goto

Beberapa kemampuan yang digunakan sebagai cara cepat untuk menyelesaikan program

tanpa membuat struktur yang jelas adalah pernyataan goto.Dalam C++ dikenal sebagai if-then-goto.

Sebeleum C++ memasukkan penanganan eksepsi, goto sering digunakan untuk membuat perulangan

didalam keadaan eksepsi.

Java tidak memiliki pernyataan goto. Java menyediakan kata goto hanya untuk menjaga

agar programmer tidak bingung menggunakannya. Java memiliki bagian break yang diberi label dan

pernyataan continue yang merupakan bagian dimana goto boleh dipergunakan. Penanganan eksepsi

yang ampuh dan terdefinisi dengan baik pada Java menghilangkan kebutuhan perintah goto.

Pointer

Pointer atau address pada memori adalah kemampuan C++ yang paling ampuh juga paling

berbahaya. Biasanya kesalahan terjadi karena “kurang satu tempat” atau rusaknya data yang

disimpan karena lokasi memori terakhir hancur.kesalahan ini merupakan salah satu kesalahan

yangterburuk yang susah untuk diperiksa dan ditelusuri.

Meskipun penanganan objek Java menggunakan pointer, bahasa Java tidak memiliki

kemampuan memanipulasi pointer secara langsung. Kita tidak dapat mengubah integer menjadi

pointer, menunjuk ulang sembarang address memori. Array merupakan objek yang didefinisikan,

tidak berupa address dimemori.Di Java kita tidak dapat menulis sebelum akhir lokasi yang

disediakan untuk array.

Alokasi Memori

Kemampuan C++ yang sama berbahayanya dengan pengolahan matematis pointer adalah

manajemen memori. Manajemen memori di C dan C++ diwujudkan dengan keunggulan dan kelemahan

fungsi library malloc() dan free(). Fungsi malloc, mengalokasikan jumlah tertentu memori (dalam

byte), dan mengeluarkan address blok tersebut. Fungsi free, mengirimkan blok yang telah

dialokasikan kepada sistem untuk penggunaan umum. Secara umum dapat menyebabkan kebocoran

memori yang mengakibatkan program berjalan semakin lama semakin lambat.

Page 4: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 4 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

Java tidak memiliki fungsi malloc dan free, karena setiap struktur data yang rumit adalah

objek, maka mereka dialokasikan dengan operator new, yang mengalokasikan ruang untuk objek

pada „heap‟ memori. Memori yang disediakan disebut „heap‟ karena kita tidak perlu lagi

memikirkannya sebagai penambahan address yang berstruktur linier. Jadi hanya berupa kumpulan

instan objek. Yang didapat dari fungsi new bukanlah address memori, melainkan hanya „pegangan‟

untuk objek dalam heap.

Tipe Data Yang Rapuh

C++ mewarisi semua tipe data umum pada C. Tipe-tipe ini mewakili bilangan bulat dan

pecahan dengan berbagai rentang nilai dan ketelitian. Rentang nilai dan ketelitian tipe ini bervariasi

bergantung pada implementasi kompilernya.

Javamemecahkan masalah ini dengan mengambil ukuran yang sesuai untuk semua tipe

numerik dasar dan menyatukannya. Arsitektur tertentu akan mengalami kesulitan atau bekerja

tidak optimal untuk meng-implementasikan tipe data yang bergantung hardware secara ketat pada

interpreter Java yang diberikan, tetapi inilah satu-satunya cara untuk menjamin hasil yang dapat

dibuat ulang pada platform hardware yang berbeda.

Pemilihan Tipe (Type Casting) yang Tidak Aman

Type Casting adalah mekanisme yang ampuh dalam C/C++ yang memungkinkan kita untuk

mengubah tipe suatu pointer secara sembarang. Mungkin kita sering melihat bentuk seperti ini :

memset((void *)p, 0, sizeof (struct p))

Penggunaan ini, walaupun tidak baik, tetapi cukup aman. Tentu saja dengan menganggap blok memori

yang ditunjuk oleh p sekurang0kurangnya sepanjang sizeof (struct p).ini harus digunakan dengan

sangat hati-hati karena tidak ada syarat untuk memeriksa apakah kita telah memilih tipe dengan

benar.

Penanganan objek Java mencakup informasi lengkap tentang class yang menjadi instans

suatu objek, sehingga dapat dilakukan pemeriksaan kompatibilitas tipe selama program berjalan,

dan menghasilkan eksepsi jika terjadi kegagalan.

Daftar Argumen Yang Tidak Aman

C++ banyak disukai karena kemampuannya melewatkan pointerdengan tipe sembarang dalam

daftar argumen panjang-variabel yang dikenal sebagai varargs. Varargs adalah tambahan sederhana

pada premis yang menyatakan bahwa sembarang address dapat dipetakan pada sembarang tipe,

tugas pemeriksaan tipe diserahkan kepada programmer.

Sangat menyenagkan jika Java memiliki cara yang aman terhadap tipe untuk

mendeklarasikan dan melewatkan daftar argumen panjang-variabel, tetapi sampai versi 1.0 belum

ada ketentuan seperti itu.

File Header yang Terpisah

Salah satu kemampuan yang patut dipertimbangkan adalah file header, dimana kita dpata

mendeklarasikan prototipe class kita dan mendistribusikannya dengan kode biner implementasi

class yang telah di-compile. Kemampuan ini membuat lingkungan compiler C++ hampir tidak dapat

digunakan. C++ memiliki format file yang bergantung mesin untuk kode yang telah di-compile,

sehingga informasi header dapat dibuat coresiden. Karena antarmuka programmer ke class yang di-

compile dilakukan melalui file header-nya, maka kode yang telah di-compile sangat bergantung pada

apa yang ada pada file header tersebut.

Misalkan programmer yang senang berpetualang ingin meningkatkan akses pada beberapa

anggota data private pada class yang telah di-compile. Yang harus dilakukan oleh orang tersebut

adalah mengganti pengubah akses yang asalnya private menjadi public pada file header dan meng-

compile suatu sub class dari class yang telah di-compile. Pada Java ini tidak mungkin terjadi, karena

di Java tidak ada file header. Tipe dan visibilitas anggota class dicompile ke dalam file class Java.

Interpreter Java menjalankan pengaturan akses saat program berjalan, jadi sama sekali tidak ada

cara untuk mengakses variabel private dari luar suatu class.

Page 5: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 5 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

Struktur yang Tidak Aman

C berusaha menyediakan enkapsulasi data melalui deklarasi struktur yang disebut struct,

dan polimorfisme dengan mekanisme union. Dua gagasan ini menghasilkan batas tipis antara

penyesuaian bergantung mesin yang kritis dan berbahaya dengan batasan ukuran. Java tidak

memiliki konsep struct dan union , sebaliknya Java menyatukan konsep ini dengan class.

Peng-hacker-an Preprocessor

Untuk mewujudkan keinginan memiliki model yang jelas untuk ditulis oleh programmer,

compiler C dan C++ menggunakan tool yang sama dengan yang digunakan pada masa-masa MACRO

assembler. Ini menghasilkan preprocessor C yang tugasnya mencari perintah khusus yang diawali

tanda pagar (#).Preprocessor C sering digunakan untuk membangun program yang sangat sulit

dibaca.

Java mengatur agar kita dapat bekerja tanpa preprocessor, hanya bergantung pada kata

kunci final untuk mendeklarasikan konstanta yang sebelumnya dihasilkan dengan #define.

QED

Berasal dari bahasa latin Quod Erat Demonstrandum, yang berarti “Terbuktikan..!!!”.

Hal-hal Tata Bahasa

Progaram Java adalah kumpulan spasi, komentar, kata kunci, identifier, literal, operator, dan

pemisah.

Spasi

Java adalah bahasa bebas bentuk. Tidak perlu mengatur tata letaknya agar dapat bekerja.

Asalkan ada sekurang-kurangnya satu spasi, tab, atau baris baru diantara setiap token sebelum

disisipi operator atau pemisah lain.

Komentar

Ada beberapa bentuk :

1. Komentar baris tunggal

Diawali dengan tanda // dan diletakkan diakhir baris yang diberi komentar.

2. Komentar baris banyak

Diawali dengan tanda /* dan ditutup dengan */ semua diantara kedua tanda tersebut

dianggap komentar dan akan diabaikan oleh compiler.

contoh penulisan :

/*

* komentar…….

* komentar……

*/

3. Komentar terdokumentasi

Menggunakan piranti Javadoc, yang mennggunakan komponen compiler Java untuk secara

otomatis menghasilkan dokumentasi antarmuka public suatu class. Aturan pembuatan komentar

yang dapat diolah oleh Javadoc adalah : sebelum deklarasi class, method, dan variabel public

harus digunakan komentar bertanda /** untuk menyatakan komentar dokumentasi, diakhiri

dengan tanda */. Javadoc akan mengenali sejumlah variabel khusus yang didahului dengan tanda

@ didalam bagian komentar.

contoh penulisan :

/**

* komentar….

* komentar…..

*/

Page 6: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 6 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

Kata Kunci Simpanan (Keywords)

Kata kunci simpanan adalah identifier khusus yang disimpan oleh bahasa Java untuk

mengendalikan bagaimana program didefinisikan. Kata kunci ini digunakan untuk mengenali tipe-tipe,

pengubah, dan mekanisme pengaturan aliran program. Kata kunci ini hanya dapat digunakan untuk

fungsi tertentu dan tidak dapat digunakan sebagai identifier nama suatu variabel, class dan

method. Sampai denga Versi 1.0 terdapat 59 kata kunci seperti terlihat dalam tabel :

abstract boolean break byte byvalue case

cast catch char class const continue

default do double else extends false

final finally float for future generic

goto if implement

s

import inner instanceof

int interface long native new null

operator outer package private protected public

rest return short static super switch

synchronize

d

this throw throws transient true

try var void volatile while

Identifier

Bdigunakan untuk nama class, method, dan variabel. Suatu variabel dapat berupa urutan

tertentu huruf (besar atau kecil), angka, garis bawah, dan tanda dolar. Tidak boleh diawali oleh

angka dan bersifat case sensitive.

Kelompok Java mengikuti aturan penamaan identifier untuk semua method public dan

variabel instans dengan huruf awal kecil dan menandai bagian kata selanjutnya dengan huruf besar,

misalnya nextItem, currentValue, getTimeOfDay.

Untuk variabel provate dan lokal identifier akan berupa huruf kecil semua dikombinasikan

dengan garis bawah, misalnya next_val, temp_val. Untuk variabel final yang mewakili suatu

konstanta, digunakan huruf besar semua, misalnya TOK_BRACE, DAY_FRIDAY.

Literal

Besaran konstanta pada Java dihasilkan dengan menggunakan literal yang mewakilinya.

Setiap literal merepresentasikan nilai suatu tipe, dimana tipe itu sendiri menjelaskan bagaimana

sifat nilai tersebut dan bagaimana penyimpanannya.

Separator (Pemisah)

Simbol Nama Fungsi

() Kurung Digunakan untuk menghimpun parameter dalam definisi dan pemanggilan

method, juga digunakan untuk menyatakan tingkatan pernyataan,

menghimpun pernyataan untuk pengaturan alur program dan menyatakan

tipe cast.

{} kurung

kurawal

Digunakan untuk menghimpun nilai yang otomatis dimasukkan kedalam

array, juga digunakan untuk mendefinisikan blok program, untuk cakupan

class, method, dan lokal.

[] kurung siku Digunakan untuk menyatakan tipe array, juga digunakan untuk

membedakan nilai array.

; titik-koma pemisah pernyataan.

, koma Pemisah urutan identifier dalam deklarasi variabel, juga digunakan

untuk mengaitkan pernyataan didalam pernyataan for.

. titik Dugunakan untuk memisahkan nama paket dari sub-paket dan class, juga

digunakan untuk memisahkan variabel atau method dari variabel

referensi.

Page 7: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 7 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

Variabel

variabel adalah satuan dasar penyimpanan dalam program Java. Suatu variabel

didefinisikan dengan kombinasi identifier, tipe, dan cakupan. Bergantung pada tempat kita

mendeklarasikannya, variabel dapat bersifat lokal atau sementara, misalnya didalam perulangan for,

atau dapat juga berupa variabel instans yang dapat diakses oleh semua method dalam class.

Cakupan lokal dinyatakan dalam kurung kurawal.

Tipe Data

Java merupakan contoh bahasa yang strongly typed language. Hal ini berarti bahwa setiap

variabel harus memiliki tipe yang sudah dideklarasikan. Terdapat 8 tipe primitif, 6 diantaranya

adalah tipe bilangan ( 4 tipe integer, 2 tipe floating point), 1 tipe karakter char, digunakan

mengawa-sandi (encode) Unicode, dan 1 tipe boolean.

Integer

Tipe Tempat yang

Diperlukan

Jangkauan (inclusive)

int 4 byte - 2.147.483.648 sampai 2.147.483.647 (hanya lebih dari 2 miliar)

short 2 byte - 32.768 sampai 32.767

long 8 byte - 9.223.372.036.854.775.808L sampai 9.223.372.036.854.775.807L

byte 1 byte - 128 sampai 127

Floating Point

Tipe Tempat Yang

Dibutuhkan

Jangkauan

float 4 byte secara kasar 3,40282347E+38F ( 7 digit desimal signifikan)

double 8 byte secara kasar 1,79769313486231570E+308 (15 digit desimal

siignifikan)

Char

Tipe char menggunakan tanda kutip tunggal untuk menyatakan suatu char. Tipe char juga

menyatakan karakter dalam upaya mengawa-sandi unicode, yang merupakan kode 2-byte. Karakter

unicode paling sering dinyatakan dalam istilah skema pengkodean hexadesimal yang dimulai dari

\u0000 sampai \uFFFF. Selain karakter bebas (escape „ \u „ yang menyatakan karakter unicode di

Java terdapat juga

\b backspace \u0008

\t tab \u0009

\n linefeed \u000a

\r carriage return \u000d

\” double quote \u0022

\‟ single quote \u0027

\\ a backslash \u005c

Boolean

Tipe boolean memiliki nilai true dan false. Tipe ini digunakan untul logical testing dengan

menggunakan operator relasional.

Page 8: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 8 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

Konversi antar Nilai Numerik

Operasi biner apapun pada variabel numerik dengan tipe yang berbeda dapat diterima dan

diperlakukan dengan cara seperti dibawah ini :

1. Jika tipe operand adalah double, maka yang lain juga akan diperlakukan sebagai double

pada lingkup operasi tersebut.

2. Jika operand adalah float, maka yang lain juga akan diperlakukan sebagai float.

3. Jika operand adalaha long, maka yang lain juga akan diperlakukan sebagai long.

konversi yang diijinkan adalah sebagai berikut :

byte short int long float double

Dimana kita dapat memberikan nilai variabel suatu tipe disebelah kiri ke tipe disebelah kanannya.

OPERATOR

Assignment Operator ( = )

Shorthand assignment operator

Operator Usage Meaning

+= X += Y X = X + Y

-= X -= Y X = X – Y

*= X *= Y X = X * Y

/= X /= Y X = X / Y

%= X %= Y X = X % Y

Arithmetic Operator

Operator Operation

+ Addition

- Subtraction

* Multiplication

/ Division

% Modulo

Bitwise Operator

Operator Operation

& AND

| OR

^ XOR

>> Shift Kanan

<< Shift Kiri

>>> Shift Kanan isi dengan nol

Unary Operator

Page 9: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 9 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

Operator Operation

~ Unary NOT

- Minus

++ Increment

-- Decrement

Relational Operator

Operator Operation

== Equal To

!= Not Equal To

> Greater Than

< Less Than

>= Greater or Equal To

<= Less or Equal To

Logical Operator

Operator Operation

! Short-circuit NOT

&& Short-circuit AND

|| Short-circuit OR

?: Operator ternary if-then-else

Preseden Operator

Tertinggi

() [] .

++ -- ~ !

* / %

+ -

>> >>> <<

> >= < <=

== !=

&

^

|

&&

||

?:

= op=

Terendah

Page 10: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 10 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

CONTROL FLOW

Percabangan

if – else

Bentuk if-else menyebabkan eksekusi dijalankan melalui sekumpulan keadaan boolean

sehingga hanya bagian tertentu program yang dijalankan. Bentuk umum pernyataan if-else :

if (boolean expression) statement 1; [else statement 2; ]

Klausa else bersifat optional, setiap statement dapat berupa satu statement tunggal atau

dapat berupa satu blok statement yang ditandai dengan tanda {} (kurung kurawal). Boolean

expression dapat berupa sembarang pernyataan boolean yang menghasilkan besaran boolean.

break

Java tidak memiliki pernyataan goto. Penggunaan goto adalah untuk membuat percabangan

secara sembarang yang membuat program sulit dimengerti dan mengurangi optimasi compiler

tertentu. Pernyataan break pada Java dirancang untuk mengatasi semua kasus tersebut.

Istilah break mengacu kepada proses memecahkan blok program. Proses tersebut

memerintahkan runtime untuk menjalankan program dibelakang blok tertentu. Untuk dapat

ditunjuk blok diberi nama/label. Break juga dapat digunakan tanpa label untuk keluar dari

suatu loop dan pernyataan switch. Penggunaan break menunjukkan bahwa kita akan keluar dari

sutu blok program.

switch

Pernyataan switch memberiikan suatu cara ubtuk mengirimkan bagian program

berdasarkan nilai suatu variabel atau pernyataan tunggal. Bentuk umum pernyataan switch :

switch (expression)

{ case value1 :

Statement;

break;

case value2 :

Statement;

break;

case valueN :

Statement;

break;

default;

}

Expression dapat menghasilkan suatu tipe sederhana, dan setiap value yang disebutkan

pada pernyataan case harus berupa tipe yang cocok. Pernyataan switch bekerja dengan cara

membandingkan nilai expression dengan setiap nilai pada pernyataan case. Jika ada yang cocok

maka urutan program yang ada di pernyataan case tersebut akan dijalankan, jika tidak ada yang

cocok, program akan menjalankan default

return

Java menggunakan bentuk sub-routine yang disebut method untuk mengimplementasikan

antarmuka prosedural ke class objek. Setiap saat dalam method dapat digunakan pernyataan

return yang menyebabkan eksekusi mencabang kembali ke pemanggil method.

Page 11: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 11 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

Perulangan (Looping)

Looping artinya mengulangi eksekusi blok program tertentu sampai tercapai kondisi untuk

menghentikannya. Setiap perulangan memiliki 4 bagian :

a. Inisialisasi, adalah program yang mengyiapkan bagian awal perulangan

b. Badan program, adalah pernyataan yang ingin kita ulangi.

c. Iterasi, adalah program yang sering digunakan untu penambahan atau penguranagn

pencacah dan index.

d. Terminasi, adalah pernyataan boolean yang diperiksa setiap kali selama perulangan

dilaksanakan untuk melihat apakah perulangan sudah saatnya dihentikan.

while

While adalah pernyataan perulangan yang paling mendasar pada Java. Penggunaan

pernyataan while akan menyebabkan rekursi pernyataan secara terus menerus selama

pernyataan booleannya bernilai true. Bentuk umum dari pernyataan while :

[initialization;]

while (termination)

{ body program ;

[iteration;]

}

do-while

Penggunaan pernyataan do –while menyebabkan body program akan dieksekusi sekurang-

kurangnya 1 kali walaupun pernyataan booleannya menghasilkan nilai false. Pemeriksaan

terminasi dilaksanakan pada akhir program. Bentuk umum pernyataan do – while :

[initialization;]

do

{ body program;

[iteration;]

}

while [termination];

for

Pernyataan for adalah cara praktis untuk menyatakan suatu perulangan. Bentuk umum

pernyataan for :

for {initialization; termination; iteration ) body program;

Jika keadaan awal tidak menyebabkan termination bernilai true maka pernyataan

body program dan iteration tidak akan dijalankan.

Pernyataan koma

Kadang-kadang ada keadaan dimana kita ingin memasukkan lebih dari satu pernyataan

inisialisasi atau terminasi, Java menyediakan cara lain untuk menyatakan beberapa pernyataan

sekaligus. Penggunaan koma untuk memisahkan pernyataan di batasi hanya untuk digunakan

didalam tanda kurung untuk pernyataan for.

continue

Pernyataan continue akan menghentikan iterasi yang bersangkutan tetapi program akan

menjalankan sisa perulangan sampai dengan selesai.

Page 12: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 12 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

Class dan Object

Beberapa orang pada awalnya, biasanya tidak memperhatikan perbedaan antara class dan

object, mereka mencampuradukkan kedua istilah tersebut. Mari kita simak kode berikut :

/*

Di sini kita mendefinisikan sebuah class bernama NiceGuy.

Simpan sebagai file NiceGuy.java dan compile file

Tersebut. Anda akan mendapatkan file bernama

NiceGuy.class

*/

public class NiceGuy {

private string name;

public NiceGuy(String name) {

system.out.println(“Instantion of NiceGuy named “ + name) ;

this.name=name;

}

public void sayHello() {

system.out.println(“Hello Object Oriented World…!!!“ ) ;

}

public sayHelloOutLoud() {

system.out.println(“HELLLOOOO OBJECT ORIENTED WORLD!!!”) ;

}

Public String getName() {

Return name;

}

}

Gambar 1. Definisiclass NiceGuy

/*

Di sini, kita membuat sebuah java application yang

bernama OurFirstCode.

Simpan source ini dalam file bernama OurFirstCode.java,

di direktori yang sama dengan tempat anda menyimpan

NiceGuy.java. Kemudian compile file tersebut, Anda akan

Mendapatkan file OurFirstCode.class.

Lalu jalankan aplikasi ini dengan mengetikan java

OurFirstCode pada command line

*/

public class OurFirstCode {

public static void main(String[] args) {

NiceGuy ng= new NiceGuy (“ButtHead”);

ng.sayHello();

ng.sayHelloOutLoud();

//he‟s so cute…,who‟s he???

String NiceGuyName = ng.getName();

System.out.println(“OH…!!!! HE‟S “ +

NiceGuyName.toUpperCase());

}

}

Page 13: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 13 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

Gambar 2. Aplikasi Java

Diatas merupakan contoh pendefinisian sebuah class bernama NiceGuy pada Gambar 1.

Pada Gambar 2 merupakan kode dari sebuah aplikasi java yang bernama OurFirstCode. Pada

aplikasi tersebut kita menggunakan class NiceGuy untuk membuet objek bertipe NiceGuy.

Pendefinisian Class

Sintaks dalam mendefinisikan class adalah sebagai berikut :

[modifier-modifier] class namaclass [extends parentclass]

[implements interface] {

[deklarasi field-field]

[definisi method-method]

}

Yang tertera didalam kurung siku bersifat optional. Dengan demikian, definisi minimal dari

sebuah class bisa jadi seperti berikut :

class Useless {

//….mmm….

}

Tidak ada yang bisa kita harapkan dari objek diatas. Contoh yang lebih baik adalah

Gambar 1. Disana kita mendeklarasikan 1 field dan 3 method. Pada baris 8 kita mendeklarasikan

field yang bernama name yang bertipe string. Secara umum sintaks untuk mendeklarasikan field

adalah :

type namafield;

Tipe dari field bisa primitif (seperti int, boolean, float, dan sebagainya), dan bisa juga

Object (seperti String, Vector, Hashtable, dan sebagainya).

Method-method yang dimiliki class NiceGuy adalah method sayHello() sepanjang baris 14-

16 (method void), method sayHelloOutLoud() pada baris 17-19 (method void), dan method

getName() pada baris 20-22 (method non-void). Secara umum sintaks dalam pendefinisian sebuah

method adalah :

[modifier-modifier] return-type namamethod

( [parameter1, [parameter2],… , [parameter N] ) {

[statement-statement];

}

Tipe Return bisa void, tipe data primitif, atau tipe data object. Method dengan tipe return

non-void harus mencantumkan statement return <something> pada akhir deklarasi method itu

(seperti pada baris 21 class NiceGuy) kita juga dapat menggunakan kata return pada method void

untuk keluar dari method tersebut.

Bagian penting lain dari definisi class adalah constructor. Pendefinisian constructor

dicontohkan pada baris 10-12 class NiceGuy. Constructor digunakan pada saat penciptaan objek

dari sebuah class. Pendeklarasian constructor mirip dengan pendeklarasian method, dengan satu

pengecualian bahwa constructor tidak mencantumkan tipe return.

[modifier-modifier] namaconstructor ([parameter 1], [parameter 2], …

Page 14: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 14 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

, [parameter N]) {

[statement-statement];

}

Hal lain yang perlu dicatat tentang constructor adalah, nama constructor harus sama

dengan classnya. Constructor tanpa parameter disebut default constructor. Kalau kita sama sekali

tidak mendeklarasikan constructor, compiler secara otomatis akan membuatkan sebuah default

constructor.

Pada Gambar 2, aplikasi OurFirstCode memanfaatkan class NiceGuy untuk menciptakan

sebuah objek bertipe NiceGuy dimemori (perhatikan baris 13 gambar 2). Setelah itu, reference ng

dapat digunakan untuk memanggil method-method (mengirimkan pesan kepadanya) atau mengakses

field-field dari objek yang bersangkutan.

Reference adalah seperti alamat rumah sedangkan objek adalah rumahnya. dengan

mengetahui alamat, kita bisa mencapai rumah yang dimaksud.

Inheritance

Salah satu topik penting dalam OOP adalah inheritance (pewarisan sifat). Dengan

inheritance, pengembangan software dapat bekerja lebih efisien dan lebih cepat. Berkat

inheritance dapat menggunakan definisi class yang pernah dibuat sebelumnya untuk membuat class-

class lain yang menyerupai class tersebut. Perhatikan contoh berikut :

public class KattWorld {

public static void main (String args[]) {

Katt k = new Katt();

k.speak();

Anggora a = new Anggora();

a.speak(); a.jump();

Siam s = new Siam();

s.speak();

}

}

class Katt {

public Katt() {

system.out.println(“Katt Constructor”);

}

public void speak() {

system.out.println(“Miaww…”);

}

}

class Anggora extends Katt {

public void jump() {

system.out.println(“Crash…Boom…”);

}

}

class Siam extends Katt {

public Siam() {

system.out.println(“Siam Constructor”);

}

public void speak() {

system.out.println(“Mmurrrr…mmurrrr…”);

}

}

Gambar 3. Kisah kucing

Page 15: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 15 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

Hal pertama yang harus diperhatikan dari gambar 3 dalah cara melakukan inheritance.

Coontoh diatas mempunyai satu class bernama Katt (baris 12-19). Kemudian dibut class lainnya yang

mempunyai sifat seperti Katt, tetapi memiliki keunikan sendiri. Contohnya adalah class Anggora,

kita dapat membuat subclass dari Katt (baris 21-25).

Kini dapat dikatakan bahwa Katt menjadi parentclass (baseclass atau superclass) dari class

Anggora. Secara umum kita dapat mendefinisikan suatu class sebagai turunan dari baseclass dengan

cara :

class namaclass extends baseclass {

[statement-statement];

}

Method overiding

Kita membuat varian baru lain dari Katt dengan cara mengeong Murr….Murr…Murr…. Kita

namai varian itu Siam. Kita definisikan Siam sebagai subclass dari Katt, tapi kini kita melakukan

metode overiding, kita mendefinisikan ulang method speak() didalam definisi class Siam. Jika

dijalankan akan menghasilkan output :

Katt constructor

Miaww…

Katt constructor

Miaww…

Crash…Boom…

Katt constructor

Siam constructor

Mmurrr…mmurrr…

Baris 6 dan 7 dimunculkan sewaktu berlangsung konstruksi/instantiasi objek bertipe Siam.

Default constructor Katt dijalankan terlebih dahulu. Ini menunjukkan bahwa default, kecuali kita

minta yang lain, dari baseclass secara otomatis dijalankan terlebih dahulu sebelum constructor dari

class yang bersangkutan.

This

This sebenarnya adalah sebuah variable read-only (tidak dapat diubah nilainya). Dengan

variable ini, kita mendapatkan reference/pointer menuju objek terkini. Bayangkan aplikasi anda

sedang berjalan, pada saat tertentu yang dijalankan oleh komputer anda adalah method aMethod()

milik object anObject. Dari method aMethod() anda membutuhkan reference ke objek terkini yaitu

object anObject itu sendiri. Untuk itulah kita menggunakan variabel this dalam method aMethod()

milik object anObject. Perhatikan contoh berikut :

public class BeavisAndButtheadStory {

public static void main (string[] args) {

DivineBeing beavis = new DivineBeing (“Beavis”);

DivineBeing butthead = new DivineBeing (“Butthead”);

//guess what‟s gonna happen next…

beavis.messWith (butthead);

butthead.makeRevenge();

}

}

class DivineBeing {

private String name;

private DivineBeing baddDivineBeing;

Page 16: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 16 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

public DivineBeing (String name) {

this.name = name ;

}

public void messWith (DivineBeing anotherDivineBeing) {

anotherDivineBeing.kapow(this);

}

public void kapow (DivineBeing baddDivineBeing) {

system.out.println(baddDivineBeing.getName()+”!!!!Damn You!!”);

//forgive but not forget…

this.baddDivineBeing = baddDivineBeing;

}

public void makeRevenge() {

of (baddDivineBeing != null) {

baddDivineBeing.kapow(this);

}

}

public String getName() {

return name;

}

}

Gambar 4.Contoh penggunaan kata kunci this

beavis memulai gara-gara dengan memukul butthead, beavis memberikan butthead

referensi atas dirinya sendiri. Hal ini dilakukan dengan memberikan argument this pada

pemanggilan method kapow(divineBeing baddDivineBeing). Dengan reference yang ia dapatkan itu ,

suatu saat butthead dapak balik mengirim pesan makeRevenge() ke beavis.butthead ingat betul

siapa yang memukulnya, karena sewaktu ia dipukul, ia menyimpan reference ke objek beavis itu pada

variabel baddDivineBeing miliknya, yang dideklarasikan pada baris 13. Praktek diatas disebut

Callback.

Penggunaan lain dari this dapat dilihat pada baris 15 dan 23. Pada baris 15, kita bermaksud

menetapkan variabel name yang di deklarasikan pada baris 12, tapi sekarang timbul konflik dalam

penamaan variabel. Didalam daftar argumen pada constructor kita juga mendefinisikan variabel lain

yang juga bernama name (baris 14). Jangkauan variabel name pada baris 12 mencakup semua ruang

pada class DivineBeing, sedangkan variabel name pada baris 14 mempunyai jangkauan terbatas

didalam constructor itu. Untuk mengatakan saya menginginkan name yang global bukan name yang

lokal, kita menerobos keluar dengan keyword this. Dapat dilihat pada gambar 5.

class DivineBeing {

private String name;

private DivineBeing baddDivineBeing;

public DivineBeing (String name ) {

this.name = name ;

}

Gambar 5.Out Of The Box Experience

Page 17: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 17 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

Abstract

Abstract method adalah method yang belum mempunyai implementasi. Kita dapat

menyatakan suatu method abstract dengan membubuhkan keyword abstract pada deklarasi method

tersebut. Secara umum sintaks dari pendeklarasian method abstract :

abstract return-type namamethod ([daftar-parameter]);

Contoh :

public class ExplainAbstract {

public static void main (String args[]) {

Penyanyi joshua = new Pnyanyi();

joshua.berkesenian();

Pemrogram raka = new Pemrogram();

raka.berkesenian();

}

}

abstract class Seniman {

public abstract void berkesenian();

public void tidur() {

system.out.println (“ZZZZ…”);

}

}

class Pemrogram extends Seniman {

public void berkesenian() {

system.out.println(“tap…tap…click-

click…tap…PLAK ! Click…DOR !!!”);

}

public void tidur() {

system.out.println(“Buzzz…ngingggg….”);

}

}

class Penyanyi extends Seniman {

public void berkesenian() {

system.out.println(“Tralala-Trilili…”);

}

}

Gambar 6. Contoh Pendeklarasian method abstract

Static method

Pada contoh-contoh sebelumnya kita harus menginstantiasi/membuat objek terlebih

dahulu sebelum dapat menggunakan method-method atau mengakses field-field pada class yang

bersangkutan. Tapi dengan mendefinisikan suatu field atau method sebagai static, kita dapat saja

mengakses field method tersebut tanpa harus melakukan instantiasi terlebih dahulu. Perhatikan

contoh berikut :

public class MyGeomUtil {

int iAmNotPopular = 13; static int iAmCelebrity = 7;

public static double luasSegiempat (float length, float width) {

Page 18: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 18 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

return length * width;

}

public static double luasSegitiga (float alas, float tinggi) {

return 0.5 * alas * tinggi;

}

public static double luasSegitiga (float A, float B, float gamma) {

//fungsi sin (double angel) menerima masukan sudut

//dalam radian angle not angel, you prevert..!

return 0.5 * A * B * Math.sin(gamma / Math.PI);

}

}

Gambar 7. Definisi MyGeomUtil

Final

Dengan menambahkan modifier final pada deklarasi sebuah method, kita menetapkan

bahwa method pada class tersebut tiidak bisa ditimpa pada subclass yang kelak mungkin akan

dibuat. Salah satu alasan untuk membubuhkan final pada method di sebuah base class adalah

karena method itu begitu fundamental bagi kerja instance class tersebut, sehingga jika di

implementasikan secara berbeda oleh subclassnya ( yang bisa saja ditulis oleh programer yang salah

) berpotensi menyebabkan kerja instance itu tidak benar. Bentuk umum final method :

[modifier-modifier] final namamethod() {

//…mmmm…..

}

Final juga bisa diberlakukan bagi class, kita tidak dapat membuat turunan dari class final.

Bentuk umum final class :

final class namaclass extends parentclass {

//…mmm…

}

Interface Pada Interface juga kita dapat mendeklarasikan method-method, field-field (dengan

beberapa catatan tentunya), dan juga dapat membuat rantai inheritance seperti yang dilakukan

pada class. Lihat contoh program dibawah ini :

import java.awt.*;

import java.awt.event.*;

public class AustinPower extends Frame implements MouseListener {

Button behave;

public static void main (String args[]) {

AustinPower asyWhoShaggedMe = new AustinPower();

spyWhoShaggedMe.setSize(100,100);

spyWhoShaggedMe.setVisible(true);

}

public AustinPower() {

behave = new Button (“I Am a Button”);

behave.addMouseListener(this);

Page 19: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 19 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

add(behave);

}

public void mouseEntered(MouseEvent me) {

behave.setLabel (“Click me…!!!”);

}

public void mouseExited(MouseEvent me) {

behave.setLabel (“Come to me…!!!”);

}

public void mousePressed(MouseEvent me){}

public void mouseReleased(MouseEvent me){}

public void mouseClicked(MouseEvent me){}

}

Gambar 8. Penggunaan Interface

Sedangkan interface MouseListener seperti tertera dibawah ini :

package java.awt.event;

import java.util.EventListener;

/**

* The listener interface for receiving mouse event on a

* Component.

* @version 1.7 07/01/98

* @author Carl Quinn

*/

public interface MouseListener extends EventListener {

public void mouseClicked (MouseEvent e);

public void mousePressed (MouseEvent e);

public void mouseReleased (MouseEvent e);

public void mouseEntered (MouseEvent e);

public void mouseExited (MouseEvent e);

}

Gambar 9. Deklarasi interface MouseListener

Pada contoh diatas, kita mengatakan bahwa AustinPower mengimplementasikan

MouseListener. Secara umum interface dapat dideklarasikan sebagai berikut :

interface namainterface [extends parentinterface] {

[deklarasi field-field (konstanta)]

[deklarasi method-method]

Mendeklarasikan method dalam interface mirip dengan mendeklarasikan method abstract,

dimana deklarasi method tidak diakhiri pasangan kurung kurawal, melainkan tanda titik koma :

return-type namamethod ([daftar parameter]);

Ada satu catatan, field-field yang didefinisikan pada interface secara otomatis bersifat

static dan final, yang berarti mereka hanya bertindak sebagai konstanta.

sedangkan secara umum, suatu class dibuat agar mengimplementasikan suatu interface

dengan cara sebagai berikut :

Page 20: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 20 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

class namaclass [extends parentclass] [implements interface1,interface2,…]

{ [deklarasi field-field]

[deklarasi method-method milik class ini]

[deklarasi implementasi method-method yang terdefinisikan pada

interface-interface yang di implementasi oleh class tersebut]

}

Pada contoh diatas dengan mengimplementasikan MouseListener, class AustinPower

dikatakan menandatangai suatu kontrak yang menyatakan bahwa ia mampu menunjukkan kelakuan-

kelakuan seorang MouseListener (yaitu bereaksi terhadap event-event yang berhubungan dengan

Mouse).

Semua method yang terdefinisi pada interface adalah betul-betul abstract, tidak

ada implementasinya. Salah satu konsekuensi dari totalitas abstraksi pada interface itu adalah

semua method yang tertera pada interface harus di implementasikan oleh implementor.

Polymorphism Polymorphism didefinisikan sebagai kemampuan beberapa objek bertipe sama bereaksi

secara berbeda terhadap message yang sama. Lihat contoh dibawah ini :

public class KattParty {

public static void main (String args[]) {

Katt[] kandangKatt = new Katt[3];

kandangKatt[0] = new Anggora();

kandangKatt[1] = new Siam();

kandangKatt[2] = new Katt();

for (int I = 0 ; I < 3 ; I++) {

kandangKatt[I].speak();

}

}

}

Gambar 10. Pesta Kucing

Disetiap iterasi pada loop diatas, pada dasarnya kita mengirimakan pesan yang sama ke

objek-objek yang bertipe sama (yaitu Katt, sesuai dengan definisi array pada baris 3), speak().

Walaupun begitu, ternyata masing-masing bereaksi dengan caranya sendiri-sendiri.

Contoh lain dari polymorphism yaitu, misalkan kita membuat aplikasi client/server, dimana

client mengirimkan objek-objek Katt (dan tentunya bisa juga apapun turunan Katt) ke server. Pada

kasus tersebut, server bersedia menerima Kat-Kat itu tanpa terlalu mempermasalahkan perbedaan

spesifikasinya. Untu itu kode diserver bisa jadi seperti berikut:

Katt k = null;

while (true) {

k = receive();

}

Tentunya untuk kasus ini, tidaklah tepat jika, secara static kita mengasosiasikan k dengan

class Siam (misal dengan pendeklarasian Siam k = null). Pada kode diatas, pengasosiasian k dengan

clas spesifik (Anggora, Siam atau lainnya) dilakukan pada saat run-time, yaitu ketika return Value

dari pemanggilan receive() di-assign ke k. Itulah yang disebut dynamic/late binding.

Page 21: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 21 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

Operator Instanceof Bagaimana seandainya pihak server ingin mengetahui type spesifik dari objek Katt yang

diterimanya ? lihat contoh KattParty yang dimodifikasi berikut :

public class KattParty {

public static void main (String args[]) {

Katt[] kandangKatt = new Katt[3];

kandangKatt[0] = new Anggora();

kandangKatt[1] = new Siam();

kandangKatt[2] = new Katt();

for (int I = 0 ; I < 3 ; I++) {

kandangKatt[I].speak();

if (kandangKatt[I] instanceof Siam) {

System.out.println(“Wow, It‟s a Siam…”);

} else if (kandangKatt[I] instanceof Anggora) {

System.out.println(“Look, they sent us Anggora…”);

}else {

System.out.println(“Well…It could be Lucifer,” +

“ or Alleys or Regular Katt”);

System.out.println(“But one thing for sure…it‟s Katt” +

“ Praise the Lord”);

}

}

}

}

Gambar 11. To know more about Katt

Operator yang kita pakai adalah instanceof. A instanceof B, mengevaluai apakah objek A

bertipe B (B adalah nama class). Evaluasi itu menghasilkan nilai true jika nama class dari objek A

adalah B atau nama parent/grandparent/greatgrandparent /seterusnya dari class dari objek A

adalah B.

Evaluasi juga akan bernilai benar jika B adalah nama interface dan A mengimplementasikan

B. Begitu pula jika parent/grandparent/greatgrandparent/seterusnya dari class objek A

mengimplementasi B.

Singkat kata. jika A instanceof B menghasilkan true, berarti objek A dapat menunjukkan

behavior yang disyaratkan oleh class atau interface B.

Package Kita biasannya mengelompokkan class-class (dan juga interface-interface) yang terkait

(karena jenisnya/fungsinya/alasan lain) dalam sebuah package. Mungkin ada baiknya jika class-

class geometris yang kita buat dikumpulkan dalam sebuah package bernama com.raka.geoms

/*simpan sebagai Graphic.java */

package com.raka.geoms;

public abstract class Shape {

…….

}

Gambar 12. Package---1

/* Simpan sebagai Rectangle java */

package com.raka.geoms;

public class Rectangle extends Shape {

……………

}

Gambar 13. Package---2

Page 22: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 22 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

/* Simpan sebagai Triangle.java */

package com.raka.geoms;

public class Triangle extends Shape {

……………

}

Gambar 14. Package---3

Beberapa keuntungan mengorganisasi class-class buatan kita dalam sebuah package adalah

:

1. Terhindar dari konflik penamaan. Mungkin saja ada orang lain, dibelahan dunia lain,

membuat class yang bernama Rectangle juga. Yang membedakan antara Rectangle kita

dengan yang lain adalah fully qualified name. Fully qualified name dari class Rectangle kita

adalah com.raka.geoms.Rectangle.

2. Teratur. Mendapatkan suatu class tertentu akan mudah dengan mengetahui nama package-

nya.

Pada contoh diatas, masing-masing anggota dari package com.raka.geoms disimpan di file

terpisah, dan dideklarasikan sebagai public. dengan demikian class/program lain (yang bukan

anggota com.raka.geoms) dapat mengimport clas-class kita diatas. Kita juga dapat mendefinisikan

beberapa class sekaligus dalam sebuah file java, seperti contoh berikut :

/* Simpan sebagai NuclearWarHead.java */

package com.raka.lethal;

public class NuclearWarHead {

……………

}

class Sarin {

………………….

}

class Uzi {

………………….

}

Gambar 15. All in Life

Jika kita kompilasi NuclearWarHead.java diatas, kita akan mendapatkan tiga file class,

yaitu NuclearWarHead.class,Sarin.class, Uzi.class. Kesemuanya akan menjadi anggota dari package

com.raka.lethal. Akan tetapi hanya NuclearWarHead yang bisa digunakan secara langsung dari luar

package com.raka.lethal, karena hanya NuclearWarHead yang dideklarasikan sebagai public,

selebihnya dedeklarasikan sebagai protected (defaultnya), sehingga hanya dapat digunakan oleh

class-class yang tergabung didalam com.raka.lethal.

Sekarang untuk menggunakan class-class yang terdapat pada com.raka.geoms dari luar

com.raka.geoms, kita mengenal kata kunci import. Seperti contoh dibawah ini :

package com.drawworks.threedee;

import com.raka.geoms.*;

……

public class Cube {

……

Rectangle r = new Rectangle ();

…..

}

…..

Page 23: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 23 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

Gambar 16. Mengimpor class.

Jika pemrogram com.drawworks.threedee bermaksud menggunakan class-class yang

terdapat pada java.awt juga dimana terdapat juga class Rectangle, maka saat inilah digunaka fully

qualified name. seperti contoh dibawah ini :

package com.drawworks.threedee;

import com.raka.geoms.*;

import java.awt.*;

……

public class ThreeWorld extends Canvas {

……

com.raka.geoms.Rectangle r = new com.raka.geoms.Rectangle ();

…..

}

…..

Gambar 17. Fully Qualified Name

Package-package didalam harddisk dapat kita organisasikan dalam suatu struktur

direktori. File-file class anggota com.raka.geoms terkumpul dalam struktur direktori. Anda boleh

mengambil kesimpulan bahwa tiap-tiap suku kata pada nama package adalah nama sebuah direktori.

Page 24: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 24 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

PENANGANAN EKSEPSI

Eksepsi adalah keadaan tidak normal yang muncul pada suatu bagian program pada saat

dijalankan. Penanganan eksepsi pada java membawa pengelolaan kesalahan program saat dijalankan

kedalam orientasi-objek. Eksepsi java adalah objek yang menjelaskan suatu keadaan eksepsi yang

muncul pada suatu bagian program.

Saat suatu keadaan eksepsi muncul, suatu objek exception dibuat dan dimasukkan ke dalam

method yang menyebabkan eksepsi. Method tersebut dapat dipilih untuk menangani eksepsi

berdasarkan tipe tertentu. Method ini juga menjaga agar tidak keluar terlalu dini melalui suatu

eksepsi, dan memiliki suatu blok program yang dijalankan tepat sebelum suatu eksepsi menyebabkan

metodenya kembali ke pemanggil.

Eksepsi dapat muncul tidak beraturan dalam suatu method, atau dapat juga dibuat secara

manual dan nantinya melaporkan sejumlah keadaan kesalahan ke method yang memanggil.

Dasar-dasar penanganan Eksepsi

Penanganan eksepsi pada java diatur dengan lima kata kunci : try, catch, throw, throws dan

finally. Pada dasarnya try digunakan untuk mengeksekusi suatu bagian program, dan jika

muncul kesalahan, sistem akan melakukan throw suatu eksepsi yang dapat anda catch

berdasarkan tipe eksepsinya, atau yang anda berikan finally dengan penangan default.

Berikut ini bentuk dasar bagian penanganan eksepsi :

try {

// Block of Code

}

catch (ExceptionType1 e) {

// Exception Handler for ExceptionType1

} catch (ExceptionType2 e) {

// Exception Handler for ExceptionTYpe2

throw (e); // re-throw the Exception…

}

finally {

}

Tipe Eksepsi Dipuncak hirarki class eksepsi terdapat satu class yang disebut throwable. Class ini

digunakan untuk merepresentasikan semua keadaan ekasepsi. Setiap ExceptionType pada bentuk

umum diatas adalah subclass dari throwable.

Dua subclass langsung throwable didefinisikan untuk membagi class throwable menjadi dua

cabang yang berbeda. Satu, class Exception, digunakan untuk keadaan eksepsi yang harus ditangkap

oleh program yang kita buat. Sedangkan yang lain diharapkan dapat menangkap class yang kita

subclasskan untuk menghasilkan keadaan eksepsi.

Cabang kedua throwable adalah class error, yang mendefinisikan keadaan yang tidak

diharapkan untuk ditangkap dalam lingkungan normal.

Eksepsi Yang Tidak Dapat Ditangkap

Obyek eksepsi secara otomatis dihasilkan oleh runtime java untuk menanggapi suatu

keadaan eksepsi. Perhatikan contoh berikut :

class Exc0 {

public static void main (Stinr args[]) {

Page 25: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 25 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

int d = 0;

int a = 42 / d;

}

}

Saat runtime java mencoba meng-eksekusi pembagian, akan terlihat bahwa pembaginya

adalah nol, dan akan membentuk objek eksepsi baru yang menyebabkan program terhenti dan harus

berurusan dengan keadaan kesalahan tersebut. Kita belum mengkodekan suatu penangan eksepsi,

sehingga penanganan eksepsi default akan segera dijalankan. Keluaran dari program diatas :

java.lang.ArithmeticExpression : /by zero

at Exc0.main (Exc0.java:4)

Berikut adalah contoh lainnya dari eksepsi :

class Exc1 {

static void subroutine() {

int d = 0;

int a = 42 / d;

}

public static void main (Stinr args[]) {

Exc1.subroutine();

}

}

Output-nya :

java.lang.ArithmeticException : / by zero

at Exc1.subroutine(Exc1.java :4)

at Exc1.main(Exc1.java : 7)

Try dan Catch

Kata kunci try digunakan untuk menentukan suatu blok program yang harus dijaga terhadap

semua eksepsi, setelah blok try masukkan bagian catch, yang menentukan tipe eksepsi yang akan

ditangkap. Perhatikan contoh berikut :

class Exc2 {

public static void main (String args[]) {

try {

int d = 0;

int a = 42 / d;

}

catch (ArithmeticException e) {

System.out.println(“Division By Zero);

}

}

}

Throw

Pernyataan throw digunakan untuk secara eksplisit melemparkan suatu eksepsi. Pertama

kita harus mendapatkan penanganan dalam suatu instance throwable, melalui suatu parameter

kedalam bagian catch, atau dengan membuatnya menggunakan operator new. Bentuk umum

pernyataan throw :

Page 26: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 26 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

throw ThrowableInstance;

Aliran eksekusi akan segera terhenti setelah pernyataan throw, dan pernyataan

selanjutnya tidak akan dicapai. Blok try terdekat akan diperiksa untuk melihat jika telah memiliki

bagian catch yang cocok dengan tipe instance Throwable. Jika tidak ditemukan yang cocok, maka

pengaturan dipindahkan ke pernyataan tersebut. Jika tidak, maka blok pernyataan try selanjutnya

diperiksa, begitu seterusnya sampai penanganan eksepsi terluar menghentikan program dan

mencetak penelusuran semua tumpukan sampai pernyataan throw. Contoh :

class throwDemo {

static void demoProc() {

try {

throw new NullPointerException(“demo”);

}

catch (NullPointerException e) {

System.out.println(“caught inside demoproc…”);

throw e;

}

}

public static void main (String args[]) {

try {

demoproc();

}

catch (NullPointerException e) {

System.out.println(“recaugt : “ + e);

}

}

}

Output :

caught inside demoproc

recaught : java.lang.NullPointerException : demo

Throws

Kata kunci throws digunakan untuk mengenali daftar eksepsi yang mungkin di-throw oleh

suatu method. Jika tipe eksepsinya adalah error, atau RuntimeException, atau suatu subclassnya,

aturan ini tidak berlaku, karena tidak diharapkan sebagai bagian normal dari kerja program.

Jika suatu method secara eksplisit men-throws suatu intans dari Exception atau

subclassnya, diluar RuntimeException, kita harus mendeklarasikan tipenya dengan pernyataan

throws. ini mendefinisikan ulang deklarasi method sebelumnya dengan sintaks sbb :

type method-name (arg-list) throws exception-list { }

Contoh :

class ThrowsDemo {

static void procedure () thorws IllegalAccessException {

System.out.println(“Inside Procedure”);

throw new IllegalAccessException(“demo”);

}

public static void main(String args[]) {

try {

Page 27: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 27 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

procedure();

}

catch (IllegalAccessException e) {

System.out.println(“caught “+ e);

}

}

}

Output :

Inside procedure

caught java.lang.IllegalAccessException : demo

Finally

Saat suatu eksepsi dilemparkan, alur program dalam suatu method membuat jalur yang

cenderung tidak linier melalui method tersebut, melompati baris-baris tertentu, bahkan mungkin

akan keluar sebelum waktunya pada kasus dimana tidak ada bagian catch yang cocok. Kadang-

kadang perlu dipastikan bahwa bagian program yang diberikan akan berjalan, tidak perduli eksepsi

apa yang terjadi dan ditangkap. Kata kunci finally dapat digunakan untuk menentukan bagian

program seperti itu.

Setiap try membutuhkan sekurang-kurangnya satu bagian catch atau finally yang cocok.

Jika kita tidak mendapatkan bagian catch yang cocok, maka bagian finally akan dieksekusi sebelum

akhir program, atau setiap kali suatu method akan kembali ke pemanggilnya, melalui eksepsi yang

tidak dapat ditangkap, atau melalui pernyataan return, bagian finally akan dieksekusi sebelum

kembali ke method kembali.

Berikut adalah contoh program yang menunjukkan beberapa method yang keluar dengan

berbagai cara, tidak satu pun tanpa mengeksekusi bagian finally-nyA.

class finallyDemo {

static void proA() {

try {

System.out.println(“Inside procA..”);

throw new RuntimeException(“Demo”);

}

finally {

System.out.println(“procA is finally”);

}

}

static void proB() {

try {

System.out.println(“Inside procB..”);

return;

}

finally {

System.out.println(“procB is finally”);

}

}

public static void main(String args[]) {

try {

procA{};

}

catch (Exception e);

procB();

Page 28: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 28 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

}

}

Output :

Inside procA..

procA is finally

Inside procB..

procB is finally

Multithreading

Banyak persoalan dalam pemrograman membutuhkan kemampuan suatu program untuk

melakukan beberapa hal sekaligus, atau memberikan penanganan segera terhadap suatu kejadian/

event tertentu dengan menunda aktivitas yang sedang dijalankan untuk menangani event tersebut

dan akhirnya kembali melanjutkan aktivitas yang tertunda.

Contoh, dalam sistem aplikasi jaringan, kita dapat membuat suatu program melakukan

komputasi lokal dengan data yang sudah didapat dari jaringan, pada saat program tersebut

menunggu datangnya tambahan data dari jaringan. Tanpa multithreading, program tersebut harus

melakukannya secara sekuensial dalam sebuah alur program tunggal (yaitu alur control utama), yang

diawali dengan penantian tibanya keseluruhan data, baru kemudian komputasi. Pada masa penantian

tersebut, komputer berada pada keadaan idle yang menyebabkan ketidakefisienan pada

keseluruhan program.

Dengan multithreading kita dapat menciptakan dua thread secara dinamis, yaitu thread

yang berjaga dipintu gerbang, menunggu masuknya data., dan thread yang melakukan komputasi

lokal atas data yang sudah tersedia.

Multithreading dan Java

Thread (seringkali disebut juga lightweight process atau execution context) adalah

sebuah singlesequentialflow of control didalam sebuah program. Secara sederhana, thread adalah

sebuah subprogram yang berjalan didalam sebuah program.

Seperti halnya sebuah program, sebuah thread mempunyai awal dan akhir. Sebuah program

dapat mempunyai beberapa thread didalamnya. Jadi perbedaannya program yang multithreaded mempunyai beberapa flow of control yang berjalan secara konkuren atau paralel sedangkan program

yang singlethreaded hanya mempunyai satu flow of control.

Sebuah Program

Gb.1. Dua thread dalam satu program

Thread

lainnya

Sebuah

Thread

Page 29: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 29 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

Dua program yang dijalankan secara terpisah ( dari command line secara terpisah ), berada

pada dua address space yang terpisah. Sebaliknya, kedua thread pada gambar diatas berada pada

address space yang sama (address space dari program dimana kedua thread tersebut dijalankan).

Kalau program itu berjalan diatas mesin dengan single processor, maka thread-thread itu

dijalankan secara konkuren(dengan mengeksekusi secara bergantian dari satu thread ke thread

yang lainnya). Jika program itu berjalan diatas mesin dengan multiple processor, maka thread-

thread itu bisa dijalankan secara paralel (masing-masing thread berjalan di processor yang

terpisah).

Concurrency Parallelism

Time Time

Gb.2. Konkurensi dan parallelism

Gambar 2 dapat menjelaskan perbedaan antara konkurensi dan parallelism. Bahasa Java

mempunyai kemampuan multithreading built-in, pada Java Virtual Macjine terdapat thread

scheduler yang menentukan thread mana yang beraksi pada selang waktu tertentu. Scheduler pada

JVM mendukung preemptive multithreading, yaitu suatu thread dengan prioritas tinggi dapat

menyeruak masuk dan menginterupsi thread yang sedang beraksi, kemampuan ini sangat

menguntungkan dalam membuat aplikasi real-time.

Scheduler pada JVM juga mendukung non-preemptive multithreading I(atau sering disebut

juga cooperative multithreading), yaitu thread yang sedang beraksi tidak dapat diinterupsi, ia akan

menguasai waktu CPU, sampai ia menyelesaikan tugasnya atau secara eksplisit merelakan diri untuk

berhenti dan memberi kesempatan bagi thread yang lain.

Task 2 Task I T

a

s

k

1

T

a

s

k

2

Page 30: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 30 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

Daur Hidup sebuah Thread

Gb.3. State-state dari thread

Newborn

Sevbuah thread berada pada state ini ketika dia di instantiasi. Sebuah ruangan dimemori

telah dialokasikan untuk thread itu,dan telah menyelesaikan tahap inisialisasinya.

………

Thread timerThread = new TimerThread();

……..

Pada state ini, timeThread belum masuk dalam skema penjadwalan thread scheduler.

Runnable

Pada state ini, sebuah thread berada dalam skema penjadwalan, akan tetapi dia tidak

sedang beraksi. Kita bisa membuat timerThread yang kita buat sebelumnya masuk ke state

runnable dengan : …..

timerThread.start();

……

Kapan tepatnya timerThread beraksi, ditentukan oleh thread scheduler.

Running

Pada state ini, thread sedang beraksi. Jatah waktu beraksi bagi thread ini ditentukan oleh

thread scheduler. Pada kasus tertentu, thread scheduler berhak meng-interupsikegiatan dari

thread yang seddang beraksi (misalnya ada thread lainnya dengan prioritas yang lebih tinggi).

Thread dalam keadaan running bisa juga lengser secara sukarela, dan masuk kembali ke

state runnable, sehingga thread lain yang sedang menunggu giliran(runnable) memperoleh

kesempatan untuk beraksi. Tinddakan thread yang lengser secara sukarela itu biasanya disebut

yield-ing. public void run() {

Blocked

Running Runnable

Dead New

Born

stop()

start()

resume()

notify()

yield()

stop()

stop()

suspend()

sleep()

wait()

Page 31: Materi java merancang aplikasi teks dan dekstop berbasis obyek

Pemrograman Berorientasi Obyek

- 31 – SMK BIMA BOJONEGORO

Omen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page [email protected]

…….

Thread.yield();

…….

}

Blocked

Pada tahap inii thread sedang tidak beraksi dan diabaikan dalam penjadwalan thread

scheduler. Thread yang sedang terblok menunggu sampai syarat-syarat tertentu terpenuhi,

sebelum ia kembali masuk kedalam skema penjadwalan thread scheduler (masuk state runnable

lagi). Suatu thread menjadi terblok karena hal-hal berikut :

a. Thread itu tidur untuk jangka waktu tertentu, seperti berikut : public void run() {

……

try {

thread.slepp(3000);

//thread yg sedang beraksi akan tidur selama 3000 milisecond=3menit

}

catch (InterruptedException e) {

…….

}

b. Thread itu di- suspend(). Thread yang ter-suspend() itu bisa masuk kembali ke state

runnable bila ia resume(). seperti hal berikut : ……

//timerThread akan segera memasuki state blocked

timerThread.suspend();

………

timerThread.resume();

//timerThread kembali masuk state runnable

……

c. Bila thread tersebut memanggil method wait() dari suatu object yang sedang ia kunci.

Thread tersebut bisa kembali memasuki state runnable bila ada thread lain yang memanggil

method notify() atau notifyAll() dari object tersebut.

d. Bila thread ini menunggu selesainya aktifitas yang berhubungan dengan I/O. Misalnya, jika

suatu thread menunggu datangnya bytes dari jaringan komputer maka secara otomatis

thread tersebut masuk ke state blocked.

e. Bila suatu thread mencoba mengakses critical section dari suatu object yang sedang

dikunci oleh thread lain. Critical section adalah method/blok kode yang ditandai dengan

kata synchronized.

Dead

Suatu thread secara otomatis disebut mati bila method run() – nya sudah dituntaskan

(return dari method run() ). Contoh dibawah ini adalah thread yang akan mengecap state running

hanya sekali saat thread scheduler memberinya kesempatan untuk running, ia akan mencetak “ I‟m

doing something….something stupid….but I‟m proud of It”… kemudian mati.

public class MyThread extends Thread {

…..

public void run() {

System.out.print(“I‟m doing something…”);

System.out.print(“something stupid…”);

System.out.println(“but I‟m proud of It…”);

// MyThread akan mati begitu baris diatas selesai dieksekusi

}

……

}