Sabtu, 23 Januari 2010

Sekilas tentang OOP

Pengantar Program Berorientasi Object (Pengantar OOP programming).

Program berorientasi object (OOP) merupakan paradigma yang dominan akhir-akhir ini, prosedur teknik pemrogramannya mulai dikembangkan pada tahun 1970. Program Java merupakan program yang benar-benar berorientasi object, dan kita harus terbiasa dengan OOP agar menjadi familiar dan produktif dengan program Java.

Program berorientasi object dibuat dari object-object. Setiap object memiliki fungsi-fungsi spesifik yang ditampilkan kepada penggunanya, dan juga implementasi tersembunyi. Banyak object-object dalam program diambil dari turunanannya untukpendesignan sebagai sesuatu yang biasa.

Baik membuat/membangun sendiri maupun memebelinya tergantung pada budget dan waktu yang kita punya. Tetapi biasanya sepanjang object-object memuaskan spesifikasi kita, kita tidak akan perduli function apa yang akan kita implementasikan. Dan juga dalam OOP, kita tidak akan peduli bagaimana object diimplementasikan sepanjang memenuhi apa yang kita inginkan.

Program berstruktur tradisional biasanya dibuatdengan mendesign satu set prosedur (algoritma) untuk memecahkan masalah. Setelah prosedur ditentukan, langkah tradisional berikutnya adalah menemukan cara yang tepat untuk menyimpan data. Karena itu mengapa designer bahasa pascal, (Niklaus Wirth), menyebut dalam bukunya yang terkenal yaitu algoritma + struktur data sama dengan program (Prentice Hall, 1975). Menyadari hal tersebut maka Wirth mengatakan, algoritma adalah yang pertama dan struktur data sebagai yang kedua. Begitulah cara programmer bekerja saat itu. Pertama, mereka memutuskan prosedur untuk memanipulasi data; kemudian mereka menentukan struktur apa yang akan dipakai/ dimasukkan kedalam data untuk membuat manipulasi data menjadi mudah. Sebaliknya OOP membalikkan urutannya dan menempatkan data dulu, kemudian beralih kealgoritma yang mengopersikan data.

Untuk masalah yang kecil pembagian kedalam prosedur berjalan sangat baik, tetapi object-object akan lebih tepat untuk masalah yang lebih besar. Berdasar pada Web browser yang sederhana, Mungkin akan membutuhkan 2000 prosedur untuk implementasinya, dan seluruhnya memanipulasi satu set global data.

Dalam style(gaya) berorientasi objek mungkin ada 100 kelas dengan rata rata 20 metode per kelas.

Struktur berikutnya lebih mudah bagi progrmmer untuk merangkum. Juga lebih mudah untuk mendapatkan bug. Umpamanya data dari objek tertentu dalam situasi yang salah. Akan lebih mudah untuk pencarian diantara 20 metode yang mempunyai akses terhadap item data daripada diantara 2000 prosedur.



ClASS

Class adalah blueprint dari object yang dibuat. Memahami tentang klas sangatlah mudah. Ketika kita membuat object dari class, maka yang kita lakukan disebut menginstansiasi klas.

Seperti kita lihat semua kode yang kita tulis pada java, ada dalam suatu klas. Perpustakaan java standard mensupplai beberapa ribu kelas untuk setiap ragam tujuan sebagai pengguna design interface, tanggal dan kalender, dan program network. Walaupun demikian , kita masih harus membuat klas kita sendiri di java untuk menjelaskan objek-objek dari domain masalah aplikasi kita.

Encapsulation (pembungkusan/penyembunyian informsai) merupakan konsep utama dalam pengerjaan objek. Secara formal, encapsulation tidak lebih dari kombinasi data dan perilaku, dalam satu paket dan menyembunyikan detail-detail implementasi dari penggunaan objek. Data dalam sebuah object disebut inatansiasi field, prosedur yang mengoperasikan data disebut method. Objek spesifik yang dinstansiasi dari kelas akan memiliki nilai-nilai spesifik untuk instansiasi field. Sekumpulan nilai-nilai tersebut merupakan kondisi saat ini dari objek. Kapanpun anda memakai mehod pada objek, kondisinya bisa berubah.

Kunci untuk membuat Encapsulation bekerja adalah untuk membuat metode tidak pernah langsung mengakses instans filed dalam klas selain miliknya sendiri. Program harus saling berinteraksi dengan objek data hanya melalui method objek. Encapsulation merupakan cara untuk memberikan objek perilaku (black box), yang merupakan kunci untuk penggunaan kembali secara reliability. Ini artinya sebuah klas mungkin berubah secara total bagaimana data disimpan, tetapi selama itu terus menggunakan method yang sama untuk memanipulasi data, tidak ada object lain yang tahu (tersembunyi).

Ketika anada mulai menulis klas anda sendiri dalam java, fasilitas lainnya dari OOP membuat hal ini jadi lebih mudah. Kelas-kelas dapat dibangun dengan memperluas kelas-kelas lainnya. Java, pada kenyataannya, datang bersama sifat superclasnya yang disebut objek. Seluruh kelas lainnya memperluas kelas ini. Kita akan melihat lebih banyak mengenai kelas objek di kesempatan berikutnya.

Ketika kita memperluas kelas yang ada, kelas baru memiliki semua properti dan method dari kelas yang anda perluas. Kita mensuplai metod baru dan data field yang menerapkan hanya pada kelas baru kita. Konsep memperluas kelas untuk mendapatkan kelas lainnya disebut Inheritance.



OBJECT.

Untuk bekerja dengan OOP kita harus mampu mengidentifikasikan tiga karakterisitik utama dari objek :
- Perilaku Objek- Apa yang dapat kita lakukan dengan objek ini, atau method apa yang dapat kita terapkan ?
- State Object - Bagaimana objek bereaksi ketika kita menerapkan method tersebut
- Identitas objek - Bagaimana objek dibedakan dari lainnya yang mungkin memiliki perilaku dan bentuk yang sama ?


Seluruh objek yang diiinstansiasi dari kelas yang sama, berbagi sifat-sifat dari kelompoknya dengan cara mensupport perilaku yang sama. Perilaku objek didefinisikan melalui method yang kita panggil.

Berikutnya, setiap objek menyimpan informasi mengenai seperti apa kelihatannya saat ini. Ini adalah state objek. Sebuah state objek berubah sepanjang waktu tetapi tidak spontan. Perubahan dalam state objek mesti menjadi konsekwensi panggilan method. (Jika state objek diubah tanpa pemanggilan method pada objek, hal ini merusak encapsulation).

Bagaimanapun, state objek tidak secara lengkap dijelaskan, karena setiap objek memiliki identitas tersendiri. Sebagai contoh, dalam sistem order prosessing sistem, dua order dibedakan meski mereka meminta item identifikasi. Menyadari bahwa objek individual yang instan dari kelas selalu berbeda dalam indentitasnya dan biasanya berbeda dalam bentuknya.

Karakter-karakter kunci ini dapat saling mempengaruhi. Sebagai contoh, bentuk objek dapat mempengaruhi perilakunya (bila perintahnya Shipped atau paid, mungkin menolak panggilan method yang memintanya untuk menambah atau memindahkan item. Sebaliknya, bila ordernya kosong, yaitu tidak ada item yang diperintahkan, seharusnya tidak mengijinkan dirinya untuk di shipped).


IDENTIFIKASI KLAS

Dalam program prosedur tradisional, kita memulai proses dari atas , dengan fungsi utama. Ketika mendesign sistem berorientasi objek, tidak ada atas dan pendatang baru, terhadap pendatang baru, OOP sering bingung harus memulai. Jawabnya adalah temukan kelas dan kemudian menambah method setiap kelas.

Aturan yang sederhana dalam mengidentifikasi kelas adalah mencari kata benda dalam setiap analisis masalah. Method, disisi lain mengacu pada kata kerja.

Sebagai contoh, dalam sistem prosesing order(pesanan), beberapa dari kata benda adalah
- Item
- Order
- Penempatan Address
- Pembayaran (payment).
- Account

Kata benda ini bisa merujuk kepada item kelas, order dan lainnya.

Berikutnya mencari kata kerja. Item ditambahkan pada order. Order ditempatkan atau dicancel. Payment diterapkan untuk order. Dengan setiap kata kerja, seperti add, ship(pengiriman), cancel dan apply, kita mengidentifikasi sebuah objek yang memiliki tanggung jawab besar untuk membawanya keluar. Sebagai contoh, ketika item baru ditambahkan pada order, order objek harus menjadi satu dalam nilai karena dia mengetahui bagaimana penyimpanan dan memilah-milah item. Yaitu, add seharusnya menjadi method dari order kelas yang mengambil objek item sebagai parameter.

Sudah tentu, aturan kata benda dan kata kerja hanya sebuah aturan pokok, dan hanya pengalaman kita yang dapat membantu kita memutuskan kata benda dan kata kerja yang mana , yang penting ketika membuat kelas kita.


HUBUNGAN ANTARA KELAS

Hubungan yang paling umum antara kelas adalah
- Saling ketergantungan ( Menggunakan -A)
- Agregasi (memiliki -A)
- Inheritance (adalah -A)

Saling ketergantungan, atau hubungan menggunakan -A, merupakan yang paling jelas dan paling umum. Sebagai contoh kelas order menggunakan kelas account karena object order membutuhkan akses objek account untuk chek status credit. Tetapi kelas item tidak tergantung pada kelas account, karena objek item tidak perlu untuk khawatir mengenai accoun t pelanggan. Jadi, kelas bergantung pada kelas lainnya bila metodenya menggunakan atau memanipulasi objek dari kelas itu.

Coba untuk meringkas jumlah kelas yang saling bergantung. Intinya adalah, jika kelas A tidak menyadari keberadaan kelas B berarti itu juga tidak perhatian terhadap perubahan B (dan ini artinya poerubahan pada B tidak memperkenalkan bug terhadap A). Dalam istilah software engineering kita perlu meringkas pasangan diantara kelas.

Agreagasi atau hubungan memliki A, mudah untuk memahami karena konkret; Sebagai contoh, objek order berisi objek item. Contain berarti, objek kelas A berisi objek kelas B.

Inheritance atau hubungan adalah A , mengekspresikan hubungan antara yang lebih khusus dan umum. Sebagai contoh kelas rush order berasal(pewarisan) dari kelas order. Kelas rush order khusus memilki method khusus untuk penanganan prioritas dan method yang berbeda mengolah penempatan nilai, tetapi method lainnya seperti penambahan item dan billing , diturunkan dari kelas order . Secara umum bila kelas A memperluas kelas B , kelas A mewariskan method dari kelas B tetapi lebih handal. (kami menjelaskan Inheritance secara lengkap pada kesem[patan berikutnya)

Banyak programmer menggunakan notasi UML (Unified Modelling Languange) untuk menggambarkan diagram kelas yang menjelaskan hubungan antar kelas. Kita menggambarkan kelas -kelas sebagai kotak-kotak diagram dan memakai hubungan dengan (tanda panah) ( dalam arah yang banyak).



----