Jumat, 17 Oktober 2008
Jangan terlalu Cepat Menilai Seseorang Berdasarkan Persepsi Kita
Siu Lan, seorang janda miskin memiliki seorang putri kecil berumur 7 tahun, Lie Mei. Kemiskinan memaksanya untuk membuat sendiri kue-kue dan menjajakannya di pasar untuk biaya hidup berdua. Hidup penuh kekurangan membuat Lie Mei tidak pernah bermanja-manja pada ibunya, seperti anak kecil
lain.
Suatu ketika dimusim dingin, saat selesai membuat kue, Siu Lan melihat keranjang penjaja kuenya sudah rusak berat. Dia berpesan agar Lie Mei menunggu di rumah karena dia akan membeli keranjang kue yang baru.
Pulang dari membeli keranjang kue, Siu Lan menemukan pintu rumah tidak terkunci dan Lie Mei tidak ada di rumah. Marahlah Siu Lan.Putrinya benar-benar tidak tahu diri, sudah hidup susah masih juga pergi bermain dengan teman-temannya. Lie Mei tidak menunggu rumah seperti pesannya.
Siu Lan menyusun kue kedalam keranjang, dan pergi keluar rumah untuk menjajakannya. Dinginnya salju yang memenuhi jalan tidak menyurutkan niatnya untuk menjual kue. Bagaimana lagi ? Mereka harus dapat uang untuk makan.
Sebagai hukuman bagi Lie Mei, putrinya, pintu rumah dikunci Siu Lan dari luar agar Lie Mei tidak bisa pulang. Putri kecil itu harus diberi pelajaran, pikirnya geram. Lie Mei sudah berani kurang ajar.
Sepulang menjajakan kue, Siu Lan menemukan Lie Mei, gadis kecil itu tergeletak di depan pintu. Siu Lan berlari memeluk Lie Mei yang membeku dan sudah tidak bernyawa. Siu Lan berteriak membelah kebekuan salju dan menangis meraung-raung, tapi Lie Mei tetap tidak bergerak. Dengan segera, Siu Lan membopong Lie Mei masuk ke rumah.
Siu Lan menggoncang- goncangkan tubuh beku putri kecilnya sambil meneriakkan nama Lie Mei. Tiba-tiba jatuh sebuah bungkusan kecil dari tangan Lie Mei. Siu Lan mengambil bungkusan kecil itu, dia membukanya. Isinya sebungkus kecil biskuit yang dibungkus kertas usang. Siu Lan mengenali tulisan pada kertas usang itu adalah tulisan Lie Mei yang masih berantakan namun tetap terbaca *,"Hi..hi..hi. . mama pasti lupa. Ini hari istimewa buat mama. Aku membelikan biskuit kecil ini untuk hadiah. Uangku tidak cukup untuk membeli biskuit ukuran besar. Hi?hi?hi.. mama selamat ulang tahun."*
------------ -------
Take time to THINK. It is the source of power
Take time to READ. It is the foundation of wisdom
Take time to be QUIET. It is the opportunity to seek God
Take time to DREAM. It is what the future is made of
Take time to PRAY. It is the greatest power on earth....... .
Rabu, 17 September 2008
Kamis, 21 Februari 2008
Bab 1. Pendahuluan
Bab 1
Pendahuluan
Program adalah kumpulan data dan instruksi yang dapat dieksekusi pada suatu bahasa tertentu. Program komputer adalah simulasi digital dari suatu model konseptual atau fisik. Model-model ini sering kali menjadi sangat rumit, sehingga untuk menghilangkan kerumitan ini diperlukan suatu program aplikasi yang dilakukan oleh programmer. Kerja programmer bertujuan untuk memecahkan kerumitan tersebut menjadi bentuk yang mudah dimegerti dan ditampilkan untuk para pemakai melalui antar muka.
Pada lingkungan pemrograman yang lama, membiarkan programmer memikirkan program sebagai urutan perintah yang linier, model ini sering disebut model prosedural atau berorientasi proses. Model berorientasi proses adalah suatu model yang memberikan urutan langkah-langkah tunggal dalam suatu permasalahan tanpa memodelkan keseluruhan masalah.
Model berorientasi proses baik untuk program yang sederhana, tetapi ketika program bertambah besar, masalah akan banyak timbul, dimana kelambatan mendefinisikan antarmuka atau interaksi antara hal-hal yang dikombinasikan dengan sejumlah hal lain akan mejadi tak teratur dan kesalahan pun lebih sering terjadi.
Pada pemrograman berorientasi objek, kerumitan suatu permasalahan diatur dengan membuat abstraksi. Sebagai contoh, kita tidak melihat mobil sebagai susunan puluhan ribu komponen. Kita melihatnya sebagai objek-objek tertentu dengan sifat uniknya. Dengan abstraksi ini kita dapat berangkat ke toko onderdil tanpa dibingungkan dengan algoritma untuk menjelaskan bagaimana mesin, transmisi, dan sistem rem bekerja. Sebaliknya kita sebagai suatu gambaran, yang cukup jelas dan ideal, tentang bagaimana keseluruhan objek bekerja. Sebaliknya kita melihatnya sebagai suatu gambaran, yang cukup jelas dan ideal untuk menjelaskan bagaimana keseluruhan objek bekerja.
Kita mempunyai kemampuan yang kuat untuk mengatur gambaran ini secara hirarkis yang memungkinkan kita untuk melihat lebih dalam mengenai mobil itu jika kita menginginkannya. Dari luar, mobil adalah mobil, lalu sedikit lebih dalam, kita dapat mengoperasikan setir, rem, stereo-set, sabuk pengaman, AC, dan telepon seluler secara bersamaan.
Cara berpikir seperti ini, mengambarkan (abstraksi) secara hirarkis sistem yang rumit, dapat diterapkan dengan baik pada program komputer dan juga kehidupan nyata. Algoritma program tradisional dapat digambarkan dalam bentuk objek komponen yang berkaitan dengan proses. Urutan proses dapat menjadi kumpulan pesan antar objek yang otonom. Setiap objek memiliki perilaku yang unik. Kita memperlakukan objek ini sebagai kejadian dunia-nyata yang konkrit dan merespon pesan yang disampaikan padanya untuk melakukan sesuatu. Inilah esensi dari pemrograman berorientasi objek. Kita melengkapi objek kita dengan ‘kepribadian’ dan percaya bahwa mereka akan selalu berkelakuan menurut spesifikasi yang telah dibuat.
1.1 Pemrograman Berorientasi Objek
Pemrograman berorientasi objek sangat ampuh dan merupakan paradigma alami untuk membuat program yang dapat bertahan terhadap kemungkinan perubahan yang berkaitan dengan pertumbuhan dan pertambahan umur sistem apapun. Karena kita telah memahami fungsi masing-masing objek dan memiliki antar muka yang jelas dan layak antar objek, kita dapat mengatur ulang bagian-bagian dari sistem yang lama tanpa takut-takut. Dalam pemrograman berorientasi objek setiap permasalahan pertama kali dibuat dalam bentuk paling abstrak, baru kemudian mendefinisikan subrutin yang berkaitan dengan implementasi yang lebih konkrit, dan juga kita harus mengusahakan untuk menghindari penggunaan variabel global dan melewatkan suatu pointer ke dalam suatu struktur.
Bahasa berorientasi objek sejati menyediakan mekanisme yang dikenal sebagai enkapsulasi, inheritansi, dan polimorfisme. Baik C++ maupun Java menyertakan mekanisme ini dengan cara yang hampir sama.
1.1.1 Enkapsulasi
Enkapsulasi dapat dipikirkan sebagai bungkusan (wrapper) pelindung program dan data yang sedang diolah. Pembungkus ini mendefinisikan perilaku dan melindungi program dan data agar tidak diakses sembarangan oleh program lain. Contoh dalam dunia nyata, transmisi otomatis pada mobil mengenkapsulasi ribuan keping informasi dari mesin, seperti percepatan, kemiringan tanjakan, dan posisi perseneling.
Pada Java, dasar enkapsulasi adalah class. Kita membuat suatu class yang menyatakan abstraksi dari sekolompok objek yang berbagi struktur dan sifat yang sama. Objek adalah keadaan tertentu suatu class yang mempertahankan struktur dan sifat sebagaimana didefinisikan oleh class tersebut, seolah-olah keluar dari cetakan class yang sama. Objek-objek ini sering disebut sebagai instans dari class. Struktur tertentu atau representasi data dari suatu class didefinisikan oleh sekumpulan variabel instans. Variabel-variabel ini menyimpan keadaan dinamis setiap instans suatu class. Sifat dan antarmuka suatu class didefinisikan dengan method yang beroperasi pada data instans tersebut. Method adalah perintah untuk melakukan beberapa aksi terhadap sebuah objek.
Karena tujuannya mengenkapsulasi kerumitan, ada mekanisme untuk menyembunyikan kerumitan implementasi dalam class. Setiap method atau variabel dalam class dapat jadi private atau public. Antar muka public suatu class menunjukkan semua yang perlu terhadap class tersebut dapat mengaksesnya. Suatu method atau data instans private menyatakan bahwa program lain di luar implementasi class tidak dapat mengakses method atau data dari class tersebut. Antar muka public harus dipilih dengan hati-hati supaya tidak terlalu banyak membuka bagian dalam class.
Perbedaan antara class dengan instans adalah :
- Class adalah sesuatu yang menjelaskan attribut dan umum sebuah objek, termasuk tipe setiap attribut method yang dapat mengoperasikan objek tersebut.
- Sebuah instans adalah keadaan tertentu sebuah objek tersebut.
Contoh, Seekor anjing Labrador mempunyai enam anak, maka dia membuat enam instans baru dari class Labrador. Setiap anak anjing memiliki himpunan variabel instansi-nya sendiri yang didefinisikan dengan class. Beberapa hitam, yang lain coklat, dan sisanya putih, beberapa jantan, yang lain betina, tetapi semuanya tetap Labrator.
1.1.2 Inheritansi
Sebagian besar kita melihat lingkungan kita sebagai objek yang saling terhubung secara hirarkis, misalkan binatang, mamalia, dan anjing. Jika kita amati binatang memilki ciri-ciri tertentu, misalkan ukuran, kecerdasan, dan jenis sistem kerangka tulangnya. Binatang juga memiliki aspek prilaku tertentu, mereka makan, bernafas, dan tidur. Penjelasan struktur tubuh dan prilaku ini adalah penjelasan class binatang.
Jika kita ingin menjelaskan lebih terinci suatu class binatang, misalkan mamalia, maka harus dirinci ciri-ciri lain, misalkan jenis gigi dan periode kehamilan. Ini dikenal sebagai sub-class binatang, dimana binatang adalah super class mamalia.
Karena mamalia dikelompokkan sebagai binatang, maka mamalia mewarisi (inherit) semua ciri-ciri binatang. Inheritansi juga berinteraksi dengan enkapsulasi. Jika suatu class tertentu mengenkapsulasi sejumlah attribut, maka sub-class manapun akan memiliki attribut yang sama ditambah dengan attribut spesialisasinya.
1.1.3 Polimorfisme
Method pada objek adalah informasi yang dilewatkan sebagai parameter untuk permintaan method. Parameter ini mewakili nilai yang dimasukkan ke suatu fungsi dan harus dikerjakan oleh suatu method.
Polimorfisme, yang berarti satu objek dengan banyak bentuk, adalah konsep sederhana yang memperbolehkan method memiliki beberapa implementasi yang dipilih berdasarkan tipe objek yang dilewatkan pada pengerjaan metode. Ini dikenal sebagai overloading method.
1.1.4 Overriding
Overloading sebuah method adalah cara class tunggal mengurusi tipe yang berbeda dengan cara yang seragam. Cara tersebut statik karena implementor suatu class perlu mengetahui semua type yang akan dihadapinya agar dapat menulis suatu metode. Pembuatan sub-class memungkinkan kita untuk menggunakan polimorfisme pada program yang sedang berjalan secara lebih dinamis.
1.2 Pengenalan Bahasa Java
File program sumber Java, resminya disebut unit kompilasi (compilation unit), adalah suatu file teks yang berisi satu atau lebih definisi class. Compiler java memerlukan file-file ini untuk disimpan dalam file dengan akhiran .java. Ketika program sumber Java di compile, setiap class diletakkan pada file keluaran masing-masing dengan akhiran .class.
Contoh 1.1
1. class HelloWorld {
2. public static void main(String[] args){
3. System.out.println("Hello World, Nice to meet you all");
4. }
5. }
Penjelasan langkah demi langkah :
Meskipun HelloWorld hanya suatu contoh sederhana, namun ia cukup menarik dalam meperlihatkan pemrograman baru ini untuk pertama kali, karena perlu memperkenalkan konsep dan perincian sintaks sekaligus.
- Baris 1, class HelloWorld {
menggunakan kata simpanan class untuk mendeklarasikan bahwa sebuah class baru akan didefinisikan di sini. HelloWorld adalah sebuah identifier yang dapat digunakan, akan kita gunakan untuk mengidentifikasi class. Seluruh definisi class, termasuk semua program dan data, akan ada di antara tanda kurung-kurawal-buka ‘{‘ dan pasangannya, kurung-kurawal-tutup ‘}’, yaitu pada baris 5.
- Baris 2, public static void main(String[] args){
Baris kedua program sederhana ini menjadi rumit, karena rancangan Java yang sama sekali tidak memperbolehkan adanya variabel global, hanya boleh ada class. Untuk lebih detailnya konsep ini, akan kita lihat per detailnya.
- public
ini adalah ketentuan akses, yang mengizinkan programmer mengendalikan visibilitas setiap variabel atau metode. Pada kasus ini, public menunjukkan bahwa sembarang class dapat melihat method main.
- static
method dan variabel yang digunakan oleh class, berlawanan dengan instans class tersebut, dapat dideklarasikan static. Ini memungkinkan sebuah method dipanggil tanpa harus menjadi instans suatu class. Pada kasus main, perlu dideklarasikan static karena main dipanggil oleh interpreter sebelum instans dibuat.
- void
karena pada contoh ini hanya menuliskan ke layar dan tidak menghasilkan suatu besaran, jadi digunakan void.
- main
Java sangat memperhatikan besar-kecil huruf (case-sensitive) bila berkaitan dengan kata kunci dan identifier. Jadi Main berbeda dengan main. Tidak ada yang istimewa dengan main, kecuali bahwa implementasi interpreter Java saat ini akan mencari method dengan nama main ketika meng-interpretasi suatu class. Compile Java akan meng-compile class-class yang tidak memiliki method main. Akan tetapi, interpreter Java, tidak memiliki cara untuk menjalankan class-class tersebut. Method main secara sederhana merupakan titik awal untuk kerja interpreter. Program yang rumit akan memiliki lusinan class, hanya satu diantaranya yang harus memiliki method main agar program dapat berjalan. Untuk program Java yang berjalan di web, kita tidak akan membuat method main sama sekali, karena jalannya program web browser Java memiliki aturan yang berbeda untuk memulai jalannya applet.
- (String[] args)
semua parameter yang dilewatkan ke suatu method diletakkan dalan tanda kurung”( “ dan “)”. Jika tidak ada parameter yang dibutuhkan untuk method yang diberikan, kita tetap harus menambahkan pesangan tanda kurung “( )”. Dalam contoh ini ada satu parameter yang diberikan. String[] args, mendeklarasikan parameter yang diberi nama args, yang merupakan array instans dari class String.
- System.out.println("Hello World, Nice to meet you all");
method ini mengeksekusi method println pada out, yang merupakan instans OutputStream dan secara statis diinisialisasi pada class System.
1.3 Tata Bahasa Java
Program Java adalah kumpulan spasi, komentar, identifier, literal, operator, dan pemisah.
- Spasi kosong
Java adalah bahasa bebas-bentuk. Tidak perlu mengatur tata letak agar dapat bekerja. Asal selalu ada sekurang-kurangnya satu spasi, tab atau baris baru di antara setiap token sebelum disisipi operator atau pemisah yang lain.
Contoh 1.2 dan Contoh 1.3, penulisan lain dari Contoh 1.1
Contoh 1.2
class HelloWorld { public static void main(String[] args){
System.out.println("Hello World, Nice to meet you all"); } }
Contoh 1.3
class
HelloWorld
{
public
static
void
main
(
String
[
]
args
)
{
System.
out.
Println
(
"Hello World, Nice to meet you all"
)
;
}
}
- Komentar
Biarpun komentar tidak berperan apapun pada jalannya program, jika digunakan dengan benar dapat menjadi bagian penting dari setiap program. Komentar pada program sumber dapat dibuat dalam beberapa bentuk, yaitu baris-tunggal, yang dimulai dengan “//” atau komentar lebih dari satu baris, yang dimulai dengan “/*” dan diakhiri dengan tanda “*/”.
Contoh 1.4 Komentar baris-tunggal
A = 42 ; // jawabanya 42
Contoh 1.5 Komentar banyak-baris yang lebih panjang.
/*
* ini contoh komentar banyak baris
* yang diperuntukkan sebagai pengingat
*/
- Kata kunci Simpanan
Kata kunci simpanan adalah identifier khusus yang disimpan oleh Java untuk mengendalikan bagaimana program di definisikan. Kata kunci ini digunakan untuk mengenali tipe-tipe, pengubah, dan mekanisme pengaturan aliran program yang sudah ada.
Contoh 1.6.
public int _sum = 0;
- Identifier
Identifier digunakan untuk nama class, method, dan variabel. Suatu identifier dapat urutan huruf (besar ataupun kecil), angka, garis bawah, dan tanda dollar. Tidak boleh diawali dengan literal numerik. Java sangat memperhatikan besar-kecil-nya huruf.
- Literal
Besaran konstanta pada Java dihasilkan dengan menggunakan literal yang mewakilinya. Misalnya, Integer, boolean, karakter, string dll.
- Operator
Operator adalah sesuatu yang membutuhkan satu argumen atau lebih dan bekerja pada argumen tersebut untuk menghasilkan sesuatu.
- Pemisah (Separator)
Hanya ada beberapa urutan karakter lain yang secara sintaks dapat diletakkan pada program Java. Berikut ini adalah beberapa pemisah sederhana yang mendefinisikan bentuk dan fungsi program yang dibuat.
| Simbol | Nama | Penggunaan |
| ( ) | 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 ke dalam 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 di dalam pernyataan for |
| . | Titik | Digunakan untuk memisalahkan nama paket dari sub-paket dan class, juga digunakan untuk memisahkan variabel atau method dari variabel refensi. |
- Variabel
Variabel adalah satuan dasar penyimpanan dalam program Java.
Bab 12. State Diagram
12 – State Diagram
Salah satu karakteristik dari suatu sistem adalah adanya perubahan state di dalam meresponi event dan terhadap perubahan waktu yang diberikan kedalam sistem tersebut. Misalnya, saat anda memilih cannel baru dari remote televisi maka akan terjadi perubahan state terhadap yang anda lihat.
State diagram memperlihatkan perubahan-perubahan yang terjadi di dalam sistem, mulai dari state awal, perpindahan state di dalam sistem dan state akhir secara berurutan (sekuens). State diagram juga direpresentasikan sebagai state machine.
State diagram berbeda dengan class diagram. State diagram memperlihatkan state-state dari suatu objek tunggal.
Simbol
Suatu state disimbolkan dengan segi empat bulat (rounded rectangle), garis berarah menyatakan aliran perpindahan state yang terjadi pada objek tersebut. Awal dari suatu state disimbolkan dengan lingkaran penuh (solid cicle), dan akhir state disimbolkan dengan lingkaran penuh setengah (bull’s eye) seperti yang ditunjukkan pada gambar 12.1.
: awal state
: transisi state
: akhir state
: state
![]()
Gambar 12.1 State diagram
State diagram dapat juga dinyatakan dengan tiga bagian area yaitu bagian atas menyatakan nama state, bagian tengah menyatakan variabel state dan bagian bawah menyatakan aktivitas-aktivitas yang berlangsung pada state. Seperti yang ditunjukkan pada gambar 12.2.

Gambar 12.2 state yang dibagi atas tiga bagian
State variable dapat berupa timer atau counter yang kadang-kadang dapat membantu dalam pengembangan sistem. Activities terdiri dari events dan actions. Ada tiga hal yang sering diperhatikan dalam suatu state yaitu entry( apa yang terjadi saat sistem masuk state), exit (apa yang terjadi saat sistem meninggalkan state), dan do (apa yang terjadi saat sistem berada dalam state).

Gambar 12.3 state diagram fax machine
Fax machine merupakan suatu contoh dari objek yang memilki state variable dan activities. Saat pengiriman fax - misalkan nama statenya Faxing – fax machine mencatat tanggal dan waktu awal pengiriman fax (nilai state variables “date” dan “time”), dan mencatat nomor telepon maupun namanya (nilai state variable “phone number” dan “owner”). Saat state ini berlangsung, fax machine melakukan aktivitas penambahan datestamp dan timestamp kepada fax, menambahkan nomor telepon dan namanya. Aktivitas-aktivitas dalam state ini mesin mengeluarkan kertas (pull pages through), menulis ke kertas (paginate), dan menyelesaikan pengiriman (transmission). Saat mesin dalam diam (idle), mesin fax menampilkan date dan time. State diagram dinyatakan pada gambar 12.3
Penambahan informasi pada Transition : Events dan Actions
Saudara dapat juga menambahkan informasi detail pada garis transisi. Saudara dapat menyatakan suatu event yang menyebabkan suatu transisi terjadi (a trigger event), dan komputasi (action) yang mengeksekusi dan membuat perubahan state. Penambahan informasi ini dinyatakan dengan penulisan informasi di dekat garis transisi. Kadang-kadang suatu event menyebabkan suatu transisi tanpa berhubungan dengan suatu action, dan suatu transisi yang menyebabkan menyelesaikan aktivitas state secara sempurna (dari pada menyebabkan suatu event). Jenis transisi ini disebut triggerless transition.
Misalkan saat kita menyalakan PC dengan melakukan turn on, PC akan melakukan inisialisasi dengan booting, setelah selesai kita akan dapat melakukan pekerjaan pada PC. Saat kita telah selesai bekerja kita akan mematikan PC dengan turn off sehingga PC tidak aktif lagi. State diagram dari aktivitas-aktivitas yang terjadi pada PC tersebut dapat direpresentasikan seperti pada gambar 12.4.

Gambar 12.4 state dan transition GUI yang mentrigger events, actions, dan triggerless transitions
Penambahan informasi pada Transition : Guard Contions
Misalkan dalam contoh komputer PC diatas, PC Screen Sever di setting untuk menampilkan gambar screen sever setiap 15 menit jika pengguna tidak melakukan aksi pada PC. Maka dalam hal ini waktu 15 menit merupakan guard condition dari state ini. Sehingga state diagramnya dapat dinyatakan seperti yang ditunjukkan pada gambar 12.5.

Gambar 12.5 state diagram GUI, ScreenSaver state dan suatu guard condition
Substate
Saat bekerja pada GUI anda yaitu pada state Working terdapat berbagai aktivitas yang dapat anda lakukan. GUI dapat melakukan aktivitas menunggu masukan (Awaiting input) yang anda lakukan, baik berupa keystroke, perpindahan mouse mapun penekanan button. Kemudian GUI mendaftarkan (register) input yang anda berikan dan mengubah tampilan (visualizing) untuk memperlihatkan aksi yang anda lakukan pada monitor anda. Setiap state ini- Awaiting, Registering, dan Visualizing- merupakan substate dari state Working. Perpindahan state di dalam substate dapat dibagi atas dua bagian, yaitu sequential dan concurrent.
Sequential substate merupakan urutan substate yang terjadi dalam suatu state secara berurutan atau sekuens. Seperti yang ditunjukkan pada gambar 12.6.

Gambar 12.6 sequential substate GUI’s Working
Concurreny substate merupakan aktivitas-aktivitas sekelompok substate yang dapat bekerja secara bersamaan dengan sekelompok substate lainnya secara bersamaan. Visualisasi dalam concurrency substate dinyatakan dengan garis putus-putus (dotten line) di dalam suatu state.

Gambar 12.7 Concurrent substates pada waktu yang sama
Saat anda bekerja pada GUI PC anda, system clock PC anda akan tetap menampilkan waktu dan melakukan peng-update-an waktu pada selang waktu tertentu. Karena kedua aktivitas ini dapat berlangsung secara bersamaan saat anda bekerja pada GUI maka representasi dari aktivitas ini dapat direprensentasikan seperti yang ditunjukkan pada gambar 12.7.
Suatu state yang terdiri dari sequential substate disebut juga dengan suatu composite state.
11- Activity Diagram
11- Activity Diagram
Salah satu model visual di dalam menerapkan proses komputasi adalah flowchart yang menggambarkan urutan-urutan proses, titik-titik keputusan, dan kondisi-kondisi percabangan. Bagi programmer baru, flowchart merupakan suatu alat bantu di dalam visualisasi konsep permasalahan dan membantu dalam menyelesaikan permasalahan tersebut. Activity diagram UML merupakan suatu flowchart, yang menunjukkan langkah-langkah baik sebagai titik keputusan maupun kondisi-kondisi percabangan. Activity juga memperlihatkan apa yang terjadi di dalam suatu proses bisnis atau pada suatu operasi.
Apa itu Activity Diagram?
Activity diagram di desain untuk memperlihatkan apa yang terjadi selama suatu proses atau operasi berlangsung. Activity diagram adalah suatu perluasan dari state diagram. State diagram menunjukkan state-state suatu objek dan representasi activitas dinyatakan sebagai state yang dihubungkan dengan garis berarah.
Setiap activity direpresentasikan dengan suatu rounded rectangle. Pemrosesan pada suatu aktivitas yang telah selesai akan dikirimkan ke aktivitas berikutnya secara otomatis untuk melakukan aktivitas berikutnya. Garis berarah menyatakan perpindahan aktivitas dari suatu aktivitas ke aktivitas berikutnya.
Sama seperti state diagram, activity diagram memiliki suatu starting point yang direpresentasikan dengan suatu linkarang berisi, dan endpoint yang direpresentasikan dengan bull’s eye. Seperti yang ditunjukkan pada gambar 11.1
Gambar 11.1 activity diagram
Dalam representasi suatu activity diagram yang menyatakan suatu kondisi tertentu dapat dinyatakan dengan dua cara seperti yang ditunjukkan pada gambar 11.2.
Gambar 11.2 activity diagram representasi suatu keputusan
Dalam merepresentasikan aliran aktivitas yang bersumber dari suatu aktivitas ke dua aktivitas yang dapat berjalan secara bersamaan atau konkuren kemudian hasil kedua aktivitas tersebut menghasilkan suatu titik keputusan direpresentasikan seperti pada gambar 11.3. Penggabungan dua atau lebih aktivitas atau pemecahan hasil aktivitas ke beberapa aktivitas dinyatakan dengan solid bold line.
Gambar 11.3 activity diagram concurrency
Signals
Dalam suatu aktivitas dimungkinkan suatu akivitas untuk mengirimkan suatu signal atau menerima suatu signal. Simbol untuk pengiriman signal dinyatakan dengan suatu convex pentagon, sedangkan untuk penerimaan suatu signal dinyatakan dengan concave poligon.
: convex pentagon
: concave poligon.
Contoh Activity diagram dalam proses perhitungan bilangan Fibonacci(n)

Gambar 11.4 acivity diagram perhitungan bilangan Fibonacci (n)
Swimlanes
Salah satu aspek penting dari activity diagram adalah kemampuan untuk menunjukkan objek apa yang bertanggung jawab terhadap setiap aktivitas yang sedang berlangsung. Untuk memperlihatkan objek-objek tersebut dinyatakan dalam suatu diagram segment paralel yang disebut dengan swimlanes. Setiap swimlanes mempunyai nama yang diletakkan pada atas swimlanes. Perpindahan suatu aktivitas dapat terjadi dari satu swimlane ke swimlane yang lain.
Misalkan suatu proses bisnis memilki urutan kerja sebagai berikut :
- Salesperson menelepon client dan set up tanggal pertemuan
- jika tanggal pertemuan sudah ditemukan (pada sisi konsultan perusahaan), persiapkan ruang konferens
- jika tidak (pada sisi client), seorang konsultan mempersiapkan presentase pada laptop
- setelah konsultan dan salesperson telah rapat dengan client pada tempat dan waktu yang telah disepakati
- Salesperson mem-follows up dengan pengiriman suatu surat
- jika hasil pertemuan menghasilkan suatu pernyataan dari suatu permasalahan, konsultan mencipatakan suatu proposal dan mengirimkan ke client.
Seperti yang ditunjukkan pada gambar 11.5

Gambar 11.5 activity diagram proses bissnis pertemuan dengan client
Activity diagram diatas dapat direpresentasikan dalam swimlanes seperti yang ditunjukkan pada gambar 11.6

Gambar 11.6 activity diagram proses bissnis pertemuan dengan client dgn Swimlanes
Bab 2. Konsep OOP pada Java
Bab 2
Konsep OOP pada Java
Pemrograman berorientasi objek diciptakan untuk mempermudah pengembangan program dengan cara mengikuti model yang telah ada dalam kehidupan nyata. Dalam paradigma ini, sesuai dengan model kehidupan nyata, segala bagian (entiti) dari suatu permasalahan adalah objek. Objek-objek ini kemudian juga dapat berupa gabungan dari beberapa objek yang lebih kecil. Sebagai contoh, sebuah mobil. Mobil adalah sebuah objek dalam kehidupan nyata. Namun mobil sendiri terbentuk dari beberapa objek yang lebih kecil seperti roda ban, mesin, jok, transmisi, sistem rem, dan lain-lain. Mobil sebagai objek yang merupakan gabungan dari objek yang lebih kecil dibentuk dengan membentuk hubungan antara objek-objek penyusunnya. Begitu juga dengan sebuah program. Objek besar dapat dibentuk dengan menggabungkan beberapa objek-objek dalam bahasa pemrograman. Objek-objek tersebut berkomunikasi dengan saling mengirim pesan kepada objek lain.
Konsep-konsep pemrograman berorientasi objek dalam Java secara umum sama dengan yang digunakan oleh bahasa-bahasa lain. Jadi kebanyakan konsep yang kita bahas juga terdapat dalam bahasa selain Java. Namun, terkadang terdapat perbedaan-perbedaan kecil antara penerapan konsep-konsep tersebut dalam masing-masing bahasa. Perbedaan-perbedaan ini juga akan dijelaskan seiring penjelasan masing-masing konsep.
Dalam penjelasan mengenai analogi, kita sudah menyinggung mengenai objek. Sekarang kita akan mengupas lebih dalam tentang objek sebagai konsep kunci dari pemrograman berorientasi objek.
Baik dalam dunia nyata atau dalam sebuah program, sebuah objek memiliki dua karakteristik, yaitu state dan behaviour. State adalah keadaan dari sebuah objek, seperti mobil memiliki state warna, model, tahun pembuatan, kondisi, dan lain-lain. Sedang behaviour adalah kelakuan dari objek tersebut, seperti mobil dapat melaju, membelok, membunyikan klakson, dan lain-lain. Objek menyimpan statenya dalam satu atau lebih variabel, dan mengimplementasikan behaviournya dengan metode. Dengan penjelasan di atas, dapat disimpulkan bahwa objek adalah bagian software yang dibentuk dengan variabel-variabel dan metode-metode yang berhubungan dengan variabel tersebut.
Dengan karakteristik tersebut, kita dapat memodelkan berbagai objek dalam kehidupan nyata ke dalam objek-objek dalam sebuah program. Lebih lanjut kita dapat memodelkan objek-objek abstrak ke dalam sebuah program. Contoh umum untuk konsep abstrak seperti ini adalah objek Event, yaitu objek untuk mewakili peristiwa klik atau tombol ditekan.
Sebuah objek yang dibentuk dari sebuah kelas biasa disebut instans dalam terminologi OOP. Artinya objek tersebut adalah wujud nyata dari sebuah kelas. Variabel dan metode dari instans ini disebut variabel instans dan metode instans. Setiap instans menyimpan variabelnya sendiri-sendiri, jadi nilai variabel untuk tiap instans bisa berbeda.
Objek-objek yang bekerja sama membentuk suatu sistem harus saling berkomunikasi untuk menjalankan sistem tersebut. Dalam sebuah program, objek-objek berkomunikasi satu sama lain dengan mengirimkan pesan. Sebagai contoh, jika sebuah objek ingin memanggil metode dari objek lain, maka objek ini akan mengirimkan sebuah pesan yang meminta objek tujuan untuk menjalankan metode yang dikehendaki. Pesan ini akan berisi informasi-informasi yang dibutuhkan objek tujuan untuk dapat menunaikan permintaan tadi.
Sebuah pesan dibentuk oleh informasi berikut ini:
1. objek yang dituju
- nama metode yang ingin dipanggil
3. parameter yang dibutuhkan metode tersebut.
Contoh 2.1 anotherObject.aMethod(parameter1);
Misalkan objek Budi meminta objek Iwan untk membawa mobil Budi, maka Budi akan memanggil objek Iwan dengan perintah Iwan bawaMobil serta memberikan kuncil mobilnya. Dalam pemrograman berorientasi objek, perlakuan ini dapat dilakukan dengan cara,
iwan.bawaMobil ( kucilMobilBudi );
Ini menunjukkan bahwa objek yang dituju oleh objek Budi adalah objek Iwan dengan metode yang dibutuhkan bawaMobil yang dalam hal ini objek iwan mempunyai kemampuan membawa mobil, sedangkan parameter yang dibutuhkan oleh objek iwan dalam membawa mobil adalah kunci mobil budi.
Bila sebuah objek ingin memanggil metode miliknya sendiri, maka informasi pertama adalah dirinya sendiri. Untuk menunjuk diri sendiri dalam Java digunakan kata kunci this. Maka contoh sebelumnya akan menjadi:
this.aMethod(parameter1);
Andaikan bahwa objek Budi ingin membawa mobil miliknya sendiri, maka Budi hanya memanggil dirinya sendiri, yaitu saya bawa mobil dengan kunci yang saya miliki. Dalam pemrograman berorientasi objek, perlakuan ini dapat ditulis dalam bentuk;
this.bawaMobil(kunciMobilBudi);
Informasi pertama pada penulisan this.aMethod(parameter1); dapat kita dihilangkan sehingga menjadi:
aMethod(parameter1);
Dengan cara yang sama bahwa penulisan bawaMobil(kunciMobilBudi); menunjukkan bahwa yang membawa mobil adalah objek Budi sendiri, karena bila informasi pertama tidak ada, kompiler akan secara otomatis menunjuk ke objek itu sendiri.
Ada dua keuntungan dalam penggunaan pesan, yaitu:
1. semua kebutuhan interaksi antar objek dapat dilakukan
- objek-objek yang saling berinteraksi tidak harus berada dalam satu proses atau bahkan dalam satu komputer.
Kelas adalah semacam cetakan, atau template, untuk membuat objek. Ibaratkan sebuah rancangan rumah yang digunakan untuk membangun ratusan rumah. Rumah yang dibangun tersebut adalah objek dari kelas rancangan rumah. Hal ini dapat dilakukan karena semua objek rumah yang dibangun memiliki karakteristik yang sama, sehingga dapat dibuatkan semacam blueprint-nya. Tetapi objek-objek yang dibangun tetap akan memiliki bentuk fisik tertentu sendiri-sendiri, seperti variabel dalam sebuah program, atau pintu sebuah objek rumah. Dengan penjelasan ini, kelas dapat kita definisikan kembali menjadi sebuah blueprint, atau prototipe, yang mendefinisikan variabel dan metode yang sama untuk semua objek sejenis.
Sebagai contoh, misalkan kita ingin membuat kelas Rumah, maka kita harus membuat sebuah kelas yang mendefinisikan semua variabel yang dimiliki objek dari kelas tersebut. Selain itu, kelas tersebut juga harus mendeklarasikan metode-metode yang dimiliki objek dari kelas dan juga membuat implementasi dari metode tersebut. Dengan adanya kelas ini, kita dapat membuat sebanyak apapun objek-objek rumah yang sejenis, yaitu jenis yang didefinisikan oleh kelas Rumah. Setiap objek Rumah diciptakan, sistem akan mengalokasikan sejumlah memori untuk objek tersebut dan variabel-variabelnya. Dengan begitu setiap objek akan memiliki salinan masing-masing untuk setiap variabel instans.
Setelah mengenal konsep kelas, saatnya Anda dikenalkan dengan variabel kelas. Variabel kelas sebenarnya sama dengan variabel instans. Bedanya adalah, setiap objek berbagi satu dan hanya satu variabel kelas, tapi masing-masing memiliki salinan dari variabel instans. Misalkan kelas Rumah yang kita buat hanya akan mendukung 2 lantai, dan setiap objek Rumah terdiri atas 2 lantai. Maka informasi ini cukup disimpan satu kali, karena nilainya tidak berbeda untuk semua objek. Lebih jauh, bila ada satu objek yang mengubah nilai dari variabel kelas, maka semua objek sejenis lainnya akan mengikuti perubahan itu. Di samping variabel, terdapat juga metode kelas. Metode jenis ini dapat langsung dipanggil melalui kelas dan bukan dari instans kelas tersebut.
Terminologi asing untuk pewarisan adalah inheritance. Mungkin dalam literatur lain Anda akan sering menjumpai istilah ini. Secara gamblang, pewarisan berarti sebuah kelas mewarisi state dan behaviour dari kelas lain. Sebagai contoh, sebuah kelas RumahMewah akan mewarisi state dan behaviour dari kelas Rumah. Begitu juga dengan kelas RumahSederhana. Kelas RumahMewah dan RumahSederhana disebut subkelas, atau kelas anak, dari kelas Rumah, yang disebut superkelas, atau kelas induk.
Seluruh subkelas akan mewarisi (inherits) state dan behaviour dari superkelasnya. Dengan begitu, semua subkelas dari superkelas yang sama akan memiliki state dan behaviour yang sama. Namun, masing-masing subkelas bisa menambah sendiri state atau behaviournya. Misalkan, pada kelas Rumah tidak terdapat variable kolamRenang, namun subkelas RumahMewah memiliki variabel tersebut. Contoh lain misalnya kelas Rumah tidak memiliki metode nyalakanAlarm, namun rumah mewah memiliki metode itu.
Dalam kasus tertentu subkelas mungkin memiliki implementasi behaviour yang berbeda dengan superkelasnya. Hal seperti ini disebut override. Contohnya subkelas SepedaBalap memiliki implementasi metode ubahGigi yang berbeda dengan implementasi metode tersebut pada superkelas Sepeda.
Tingkat pewarisan tidak hanya terbatas pada dua tingkatan. Dari contoh di atas, kita bisa saja membuat subkelas dari kelas SepedaBalap, dan seterusnya. Kita bisa terus memperpanjang tingkat pewarisan ini sepanjang yang kita butuhkan. Dengan begitu, subkelas-subkelas yang dibuat akan lebih khusus dan lebih terspesialisasi. Namun terdapat batasan pewarisan dalam Java yang disebut single inheritance. Artinya sebuah kelas hanya dapat mewarisi sifat dari satu dan hanya satu superkelas saja. Dalam beberapa bahasa pemrograman berorientasi objek lain, yang berlaku adalah multiple inheritance. Artinya sebuah kelas dapat mewarisi sifat dari beberapa superkelas sekaligus.
Dalam Java, terdapat kelas Object yang merupakan superkelas dari semua kelas dalam Java, baik yang builtin ataupun yang kita buat sendiri, lansung maupun tidak langsung. Karena itu sebuah variabel bertipe Object akan dapat menyimpan referensi ke objek apapun dalam bahasa Java. Kelas Object ini memiliki behaviour yang dibutuhkan semua objek untuk dapat dijalankan di Java Virtual Machine. Sebagai contoh, semua kelas mewarisi metode toString dari kelas Object, yang mengembalikan representasi String dari objek tersebut.
Manfaat penggunaan konsep pewarisan antara lain:
- kita dapat menggunakan kembali kelas-kelas yang kita buat (sebagai superkelas) dan membuat kelas-kelas baru berdasar superkelas tersebut dengan karakteristik yang lebih khusus dari behaviour umum yang dimiliki superkelas.
- kita dapat membuat superkelas yang hanya mendefinisikan behaviour namun tidak memberi implementasi dari metode-metode yang ada. Hal ini berguna jika kita ingin membuat semacam template kelas. Kelas semacam ini disebut kelas abstrak, karena behaviournya masih abstrak dan belum diimplementasikan. Subkelas-subkelas dari kelas semacam ini, yang disebut kelas konkret, mengimplementasikan behaviour abstrak tersebut sesuai dengan kebutuhan masing-masing.
Sedikit penjelasan mengenai kelas abstrak, kelas ini bisa memiliki hanya satu atau lebih metode abstrak. Subkelas dari kelas ini bertanggung jawab untuk memberikan implementasi untuk metode-metode abstrak tersebut. Sebagai akibat dari keberadaan metode abstrak ini, kelas abstrak tidak dapat diinstanskan (dibuatkan instansnya) atau digunakan untuk menciptakan sebuah objek dari kelas tersebut.
2.5 Interface
Arti harfiah dari interface adalah antarmuka, yaitu suatu alat untuk digunakan benda-benda yang tidak terhubung secara langsung untuk berinteraksi. Dalam bahasa pemrograman, interface digunakan oleh berbagai objek yang tidak terhubung untuk saling berinteraksi. Jadi dalam bahasa pemrograman, interface dapat didefinisikan sebagai koleksi definisi metode-metode dan variabel-variabel konstan, namun tanpa implementasi. Implementasi akan dilakukan oleh kelas-kelas yang mengimplements interface ini. Tanpa implementasi di sini tidak seperti pada kelas abstrak yang merupakan metode-metode yang tidak melakukan apa-apa, melainkan hanya sekedar nama metode saja.
Sebelumnya telah dijelaskan bahwa sebuah kelas tidak dapat menjadi subkelas dari beberapa superkelas, melainkan hanya bisa menjadi subkelas dari satu superkelas saja. Hal ini membuat desain program lebih rapi dan teratur, sehingga dapat mengurangi kompleksitas program. Namun, terkadang hal ini dapat menjadi suatu halangan yang tidak menyenangkan, yaitu saat kita membutuhkan suatu kelas yang memiliki sifat-sifat dari dua atau lebih kelas lain. Pada masalah seperti ini, interface dapat memberikan alternatif jalan keluar.
Dengan adanya interface maka beberapa kelas akan dapat menangani interaksi yang sama namun dengan behaviour yang bisa berbeda. Misalnya beberapa kelas mengimplementasi sebuah interface yang sama, maka kelas-kelas tersebut dapat menangani interaksi sesuai interface tersebut, namun tiap kelas dapat memiliki implementasi yang berbeda-beda.
Begitu juga bila sebuah kelas mengimplementasi banyak interface, maka kelas tersebut akan dapat menangani interaksi-interaksi sesuai salah satu interface yang diimplement oleh kelas tersebut. Namun, kelas tersebut harus mengimplementasi sendiri behaviournya. Di sinilah letak perbedaan penggunaan interface dengan multiple inheritance. Dalam multiple inheritance, layaknya single inheritance, subkelas tidak harus mengimplementasikan sendiri behaviournya karena secara default kelas tersebut akan mengikuti behaviour superkelasnya.
.jpg)




