iklan

Rabu, 13 Juni 2012

UML ( Unified Modeling Language ) & PENDEKATAN OOD ( Object Oriented Design ) UNTUK SISTEM WAKTU NYATA




Saat ini piranti lunak semakin luas dan besar lingkupnya, sehingga tidak bisa lagi dibuat asal asalan.Piranti lunak saat ini seharusnya dirancang dengan memperhatikan hal-hal seperti scalability, security, dan eksekusi yang robust walaupun dalam kondisi yang sulit.
Selain itu arsitekturnya harus idefinisikan dengan jelas, agar bug mudah ditemukan dan diperbaiki, bahkan oleh orang lain selain programmer aslinya. Keuntungan lain dari perencanaan arsitektur yang matang adalah mungkinkannya penggunaan kembali modul atau komponen untuk aplikasi piranti lunak lain yang membutuhkan fungsionalitas yang sama. Pemodelan (modeling) adalah proses merancang piranti lunak sebelum melakukan pengkodean(coding). Model piranti lunak dapat dianalogikan seperti pembuatan blueprint pada pembangunan gedung. Membuat model dari sebuah sistem yang kompleks sangatlah penting karena kita tidak dapat memahami sistem semacam itu secara menyeluruh.
Semakin komplek sebuah sistem, semakin penting pula penggunaan teknik pemodelan yang baik. Dengan menggunakan model, diharapkan pengembangan piranti lunak dapat memenuhi semua kebutuhan pengguna dengan lengkap dan tepat, termasuk faktor-faktor seperti scalability, robustness, security, dan sebagainya. Kesuksesan suatu pemodelan piranti lunak ditentukan oleh tiga unsur, yang kemudian terkenal dengan sebuan segitiga sukses (the triangle for success). Ketiga unsur tersebut adalah metode pemodelan (notation), proses (process) dan tool yang digunakan. Memahami notasi pemodelan tanpa mengetahui cara pemakaian yang sebenarnya (praoses) akan membuat proyek gagal. Dan pemahaman terhadap metode pemodelan dan proses disempurnakan dengan penggunaan tool yang tepat.

A. Pengenalan “Unified Modeling Language/UML
Unified Modelling Language (UML) adalah sebuah “bahasa” yg telah menjadi standar dalam industri untuk visualisasi, merancang dan mendokumentasikan sistem piranti lunak. UML menawarkan sebuah standar untuk merancang model sebuah sistem.
Dalam suatu proses pengembangan software, analisa dan rancangan telah merupakan terminologi yang sangat tua. Pada saat masalah ditelusuri dan spesifikasi dinegoisasikan, dapat dikatakan kita berada pada tahap rancangan.
Merancang adalah menemukan suatu cara untuk menyelesaikan masalah, salah satu tool / model untuk merancang pengembangan software yang berbasis object oriented adalah UML.
1.    Konsep Objek
Obyek dalam ‘software analysis & design’ adalah sesuatu berupa konsep (concept), benda (thing), dan sesuatu yang membedakannya dengan lingkungannya. Secara sederhana obyek adalah mobil, manusia, alarm dan lain- lainnya. Tapi obyek dapat pula merupakan sesuatu yang abstrak yang hidup didalam sistem seperti tabel, database, event, system messages. Obyek dikenali dari keadaannya dan juga operasinya. Sebagai contoh sebuah mobil dikenali dari warnanya, bentuknya, sedangkan manusia dari suaranya. Ciri- ciri ini yang akan membedakan obyek tersebut dari obyek lainnya.
Alasan mengapa saat ini pendekatan dalam pengembangan software dengan object-oriented, pertama adalah scalability dimana obyek lebih mudah dipakai untuk menggambarkan sistem yang besar dan komplek. Kedua dynamic modeling, adalah dapat dipakai untuk permodelan sistem dinamis dan real time.
2.    Sejarah Singkat UML
UML (Unified Modeling Language) adalah sebuah bahasa yang berdasarkan grafik/gambar untuk memvisualisasi, menspesifikasikan, membangun, dan pendokumentasian dari sebuah sistem pengembangan software berbasis OO(Object-Oriented). UML sendiri juga memberikan standar penulisan sebuah sistem blue print, yang meliputi konsep bisnis proses, penulisan kelas-kelas dalam bahasa program yang spesifik, skema database, dan komponen-komponen yang diperlukan dalam sistem software.Pendekatan analisa & rancangan dengan menggunakan model OO mulai diperkenalkan sekitar pertengahan 1970 hingga akhir 1980 dikarenakan pada saat itu aplikasi software sudah meningkat dan mulai komplek. Jumlah yang menggunakaan metoda OO mulai diuji cobakandan diaplikasikan antara 1989 hingga 1994, seperti halnya oleh Grady Booch dari Rational Software Co., dikenal dengan OOSE (Object-Oriented Software Engineering), serta James Rumbaugh dari General Electric, dikenal dengan OMT (Object Modelling Technique).
Kelemahan saat itu disadari oleh Booch maupun Rumbaugh adalah tidak adanya standar penggunaan model yang berbasis OO, ketika mereka bertemu ditemani rekan lainnya Ivar Jacobson dari Objectory mulai mendiskusikan untuk mengadopsi masing-masing pendekatan metoda OO untuk membuat suatu model bahasa yang uniform / seragam yang disebut UML (Unified Modeling Language) dan dapat digunakan oleh seluruh dunia.
Secara resmi bahasa UML dimulai pada bulan oktober 1994, ketika Rumbaugh bergabung Booch untuk membuat sebuah project pendekatan metoda yang uniform/seragam dari masing-masing metoda mereka. Saat itu baru dikembangkan draft metoda UML version 0.8 dan diselesaikan serta di release pada bulan oktober 1995. Bersamaan dengan saat itu, Jacobson bergabung dan UML tersebut diperkaya ruang lingkupnya dengan metoda OOSE sehingga muncul release version 0.9 pada bulan Juni 1996. Hingga saat ini sejak Juni 1998 UML version 1.3 telah diperkaya dan direspons oleh OMG (Object Management Group), Anderson Consulting, Ericsson, Platinum Technology, ObjectTime Limited, dll serta di pelihara oleh OMG yang dipimpin oleh Cris Kobryn. UML adalah standar dunia yang dibuat oleh Object Management Group (OMG), sebuah badan yang bertugas mengeluarkan standar-standar teknologi object- oriented dan software component.
3.    Pengenalan UML
UML sebagai sebuah bahasa yang memberikan vocabulary dan tatanan penulisan kata-kata dalam ‘MS Word’ untuk kegunaan komunikasi. Sebuah bahasa model adalah sebuah bahasa yang mempunyai vocabulary dan konsep tatanan / aturan penulisan serta secara fisik mempresentasikan dari sebuah sistem. Seperti halnya UML adalah sebuah bahasa standard untuk pengembangan sebuah software yang dapat menyampaikan bagaimana membuat dan membentuk model-model, tetapi tidak menyampaikan apa dan kapan model yang seharusnya dibuat yang merupakan salah satu proses implementasi pengembangan software.
UML tidak hanya merupakan sebuah bahasa pemograman visual saja, namun juga dapat secara langsung dihubungkan ke berbagai bahasa pemograman, seperti JAVA, C++, Visual Basic, atau bahkan dihubungkan secara langsung ke dalam sebuah object-oriented database. Begitu juga mengenai
pendokumentasian dapat dilakukan seperti; requirements, arsitektur, design, source code, project plan, tests, dan prototypes. Untuk dapat memahami UML membutuhkan bentuk konsep dari sebuah bahasa model, dan mempelajari 3 (tiga) elemen utama dari UML seperti building block, aturan-aturan yang menyatakan bagaimana building block diletakkan secara bersamaan, dan beberapa mekanisme umum (common).
a.     Building blocks
Ada 3 macam yang terdapat dalam building block adalah katagori benda/Things, hubungan, dan diagram. Benda/things adalah abstraksi yang pertama dalam sebuah model, hubungan sebagai alat komunikasi dari benda- benda, dan diagram sebagai kumpulan / group dari benda-benda/things.
o        Benda/Things
Adalah hal yang sangat mendasar dalam model UML, juga merupakan bagian paling statik dari sebuah model, serta menjelaskan elemen-elemen lainnya dari sebuah konsep dan atau fisik. Bentuk dari beberapa benda/thing adalah sebagai berikut:
-       sebuah kelas yang diuraikan sebagai sekelompok dari object yang mempunyai atribute, operasi, hubungan yang semantik. Sebuah kelas mengimplementasikan 1 atau lebih interfaces. Sebuah kelas dapat digambarkan sebagai sebuah persegi panjang, yang mempunyai sebuah nama, atribute, dan metoda pengoperasiannya, seperti terlihat dalam gambar 1.
-       yang menggambarkan ‘interface’ merupakan sebuah antar-muka yang menghubungkan dan melayani antar kelas dan atau elemen. ‘Interface’ / antar- muka mendefinisikan sebuah set / kelompok dari spesifikasi pengoperasian, umumnya digambarkan dengan sebuah lingkaran yang disertai dengan namanya. Sebuah antar-muka berdiri sendiri dan umumnya merupakan pelengkap dari kelas atau komponen, seperti dalam gambar 2.

-       collaboration yang didefinisikan dengan interaksi dan sebuah kumpulan / kelompok dari kelas-kelas/elemen-elemen yang bekerja secara bersama-sama. Collaborations mempunyai struktura dan dimensi. Pemberian sebuah kelas memungkinkan berpartisipasi didalam beberapa collaborations dan digambarkan dengan sebuah ‘elips’ dengan garis terpotong-potong.
-       sebuah ‘use case’ adalah rangkaian/uraian sekelompok yang saling terkait dan membentuk sistem secara teratur yang dilakukan atau diawasi oleh sebuah aktor. ‘use case’ digunakan untuk membentuk tingkah-laku benda/ things dalam sebuah model serta di realisasikan oleh sebuah collaboration. Umumnya‘use case’ digambarkan dengan sebuah ‘elips’ dengan garis yang solid, biasanya mengandung nama, seperti terlihat dalam gambar 4.
-       sebuah node merupakan fisik dari elemen-elemen yang ada pada saat dijalankannya sebuah sistem, contohnya adalaha sebuah komputer, umumnya mempunyai sedikitnya memory dan processor. Sekelompok komponen mungkin terletak pada sebuah node dan juga mungkin akan berpindah dari node satu ke node lainnya. Umumnya node ini digambarkan seperti kubus serta hanyamengandung namanya, seperti terlihat dalam gambar 5.
o        Hubungan / Relationship
Ada 4 macam hubungan didalam penggunaan UML, yaitu; dependency, association, generalization, dan realization.
-       sebuah dependency adalah hubungan semantik antara dua benda/thing yang mana sebuah benda berubah mengakibatkan benda satunya akan berubah pula. Umumnya sebuah dependency digambarkan sebuah panah dengan garis terputus-putus seperti terlihat dalam gambar 6.
-       sebuah association adalah hubungan antar benda struktural yang terhubung diantara obyek Kesatuan obyek yang terhubung merupakan hubungan khusus, yang menggambarkan sebuah hubungan struktural diantara seluruh atau sebagian. Umumnya assosiation digambarkan dengan sebuah garis yang dilengkapi dengan sebuah label, nama, dan status hubungannya seperti terliahat dalam gambar 7.
 
-       sebuah generalization adalah menggambarkan hubungan khusus dalam obyek anak/child yang menggantikan obyek parent / induk . Dalam hal ini, obyek anak memberikan pengaruhnya dalam hal struktur dan tingkah lakunya kepada obyek induk. Digambarkan dengan garis panah seperti terlihat dalam gambar 8.
-       sebuah realization merupakan hubungan semantik antara pengelompokkan yang menjamin adanya ikatan diantaranya. Hubungan ini dapat diwujudkan diantara interface dan kelas atau elements, serta antara use cases dan collaborations. Model dari sebuah hubungan realization seperti terlihat dalam gambar 9.
o        Diagram
UML sendiri terdiri atas pengelompokkan diagram-diagram sistem menurut aspek atau sudut pandang tertentu. Diagram adalah yang menggambarkan permasalahan maupun solusi dari permasalahan suatu model. UML mempunyai 9 diagram, yaitu; use-case, class, object, state, sequence, collaboration, activity, component, dan deployment diagram. Diagram pertama adalah use case menggambarkan sekelompok use cases dan aktor yang disertai dengan hubungan diantaranya. Diagram use cases ini menjelaskan dan menerangkan kebutuhan / requirement yang diinginkan/ dikehendaki user/pengguna, serta sangat berguna dalam menentukan struktur organisasi dan model dari pada sebuah sistem.
UML mendefinisikan diagram-diagram sebagai berikut:
a.    Use – Case Diagram
Use-case diagram adalah gambaran graphical dari beberapa atau semua actor, use-case, dan interaksi diantara komponen-komponen tersebut yang memperkenalkan suatu sistem yang akan dibangun. Use-case diagram menjelaskan manfaat suatu sistem jika dilihat menurut pandangan orang yang berada di luar sistem. Diagram ini menunjukkan fungsionalitas suatu sistem atau kelas dan bagaimana sistem tersebut berinteraksi dengan dunia luar.
Use-case diagram dapat digunakan selama proses analisis untuk menangkap requirement sistem dan untuk memahami bagaimana sistem seharusnya bekerja. Selama tahap desain, use-case diagram berperan untuk menetapkan perilaku (behavior) sistem saat diimplementasikan. Dalam sebuah model mungkin terdapat satu atau beberapa use-case diagram. Kebutuhan atau requirements system adalah fungsionalitas apa yang harus disediakan oleh sistem kemudian didokumentasikan pada model use-case yang menggambarkan fungsi sistem yang diharapkan (use-case), dan yang mengelilinginya (actor), serta hubungan antara actor dengan use-case (use-case diagram) itu sendiri.
Komponen Pembentuk Use-case Diagram

-       Actor

Pada dasarnya actor bukanlah bagian dari use-case diagram, namun untuk dapat terciptanya suatu use-case diagram diperlukan beberapa actor. Actor tersebut mempresentasikan seseorang atau sesuatu (seperti perangkat, sistem lain) yang berinteraksi dengan sistem. Sebuah actor mungkin hanya memberikan informasi inputan pada sistem, hanya menerima informasi dari sistem atau keduanya menerima, dan memberi informasi pada sistem. Actor hanya berinteraksi dengan use-case, tetapi tidak memiliki kontrol atas use-case. Actor digambarkan dengan stick man. Actor dapat digambarkan secara secara umum atau spesifik, dimana untuk membedakannya kita dapat menggunakan relationship

Gambar 2.1. Actor
Ada beberapa kemungkinan yang menyebabkan actor tersebut terkait dengan sistem  antara lain :
-       Yang berkepentingan terhadap sistem dimana adanya arus informasi, baik yang diterimanya maupun yang dia inputkan ke sistem
-       Orang ataupun pihak yang akan mengelola sistem tersebut
-       External resource yang digunakan oleh sistem
-       Sistem lain yang berinteraksi dengan sistem yang akan dibuat

b.    Use-case

Use-case adalah gambaran fungsionalitas dari suatu sistem, pengguna sistem paham dan mengerti mengenai kegunaan sistem yang akan dibangun. Use-case diagram adalah penggambaran sistem dari sudut pandang pengguna sistem tersebut (user), sehingga pembuatan use-case lebih dititikberatkan pada fungsionalitas yang ada pada sistem, bukan berdasarkan alur atau urutan kejadian.

Cara menentukan Use-case dalam suatu sistem :

-       Pola perilaku perangkat lunak aplikasi

-       Gambaran tugas dari sebuah actor

-       Sistem atau “benda” yang memberikan sesuatu yang bernilai kepada actor

-       Apa yang dikerjakan oleh suatu perangkat lunak (*bukan bagaimana cara mengerjakannya”)


c.    Relasi dalam Use-case
Ada beberapa relasi yang terdapat pada use-case diagram :
-       Association, menghubungkan link antar elemen.
-       Generalization, disebut juga inheritance (pewarisan), sebuah elemen dapat merupakan spesialisasi dari elemen lainnya.
-       Dependency, sebuah element bergantung dalam beberapa cara ke elemen lainnya.
-       Aggregation, bentuk assosiation dimana sebuah elemen berisi elemen lainnya.

Tipe relasi atau  stereotype yang mungkin terjadi pada use-case diagram :
1.     <<include>>, yaitu kelakuan yang harus terpenuhi agar sebuah event dapat terjadi, dimana pada kondisi ini sebuah use-case adalah bagian dari use-case lainnya.
2.     <<extends>>, kelakuan yang hanya berjalan di bawah kondisi tertentu seperti menggerakkan alarm.
3.     <<communicates>>, mungkin ditambahkan untuk asosiasi yang menunjukkan asosiasinya adalah communicates association . Ini merupakan pilihan selama asosiasi hanya tipe relationship yang dibolehkan antara actor dan use-case.

1.    Class Diagram
Diagram yang menunjukkan sekumpulan class, interface dan collaboration serta relationships. Diagram ini biasa ditemukan pada pemodelan object oriented system. Class diagram menunjukkan view desain statik dari sebuah sistem. Class diagram yang termasuk active class menunjukkan view proses statik sebuah sistem.
2.    Object Diagram
Object diagram adalah bentuk lain dari class diagram tetapi  menggunakan cara yang berbeda. Perbedaan diantara keduanya adalah pada object diagram memperlihatkan beberapa object yang merupakan instansi dari sebuah class. Sebuah object diagram menggunakan notasi penggambaran yang sama dengan class diagram kecuali dalam penulisan nama dan hubungan antar object. Object diagram dapat digunakan untuk menggambarkan class diagram yang kompleks meskipun penggunaannya tidak sepenting class diagram.
3.    Sequence Diagram
Diagram interaksi yang menekankan pada waktu pengiriman message. Sequence diagram menunjukkan sekumpulan objek dan pengiriman serta penerimaan message antar objek. Objek yang umumnya memiliki nama atau instansiasi dari class, tapi dapat pula merupakan turunan dari things lain, seperti collaboration, component dan node. Diagram ini digunakan untuk mengilustrasikan dynamic view dari system.
4.    Collaboration Diagram
Diagram interaksi yang menekankan pada struktur organisasi dari objek yang menerima dan megirim message. Collaboration diagram menunjukkan sekumpulan objek dan hubungan diantaranya serta pengiriman dan penerimaan message. Objek yang umumnya memiliki nama atau instansiasi dari class, tapi dapat pula merupakan turunan dari things lain, seperti collaboration, component dan node. Diagram ini digunakan untuk mengilustrasikan dynamic view dari system.
5.    Activity Diagram
Activity diagram menggambarkan urutan aktifitas yang digunakan untuk menjelaskan aktifitas dari sebuah operasi. Pada activity diagram terdapat keadaan aksi yang berisi spesifikasi dari aktifitas tertentu. Diagram ini berisi, pilihan keputusan dan kondisi serta spesifikasi message yang dikirim atau diterima sebagai gambaran dari aksi.
6.    State Diagram
Sebuah state diagram menggambarkan keadaan mesin, transisi, event dan activity. Diagram ini adalah pelengkap khusus untuk mendeskripsikan sebuah class yang menggambarkan state dari objek dari class dan event yang menyebabkan state berubah. Event tersebt dapat berasal dari objek yang mengirimkan suatu message atau dari kondisi yang terpenuhi.
7.    Component Diagram
Component diagram menjelaskan struktur fisik kode pada komponen kodede. Sebuah komponen dapat berupa komponen source code, komponen binary atau komponen executable. Komponen berisi informasi tentang logical class. Ketergantungan diantara komponen dapat memudahkan untuk menganalisa bagaimana komponen yang lain terpengaruh dengan perubahan pada sebuah component.
8.    Deployment Diagram
Deployment diagram menggambarkan arsitektur fisik dari perangkat keras dan perangkat lunak pada sebuah system. Kita dapat memperlihatkan computer dan alat yang terhubung (nodes), serta ketergantungan antar component. Dengan model yang baik, kita dapat memakai semua cara dari sebuah node pada arsitektur fisik ke komponen ke class implementasi ke objek yang berinteraksi dan terakhir ke dalam use case.

B.   PENDEKATAN OOD ( Object Oriented Design ) UNTUK SISTEM WAKTU NYATA
Pemrograman Berorientasi Objek merupakan perbaikan dari pemrograman structural (atau disebut juga fungsional). Kelemahan dari pemrograman structural adalah kurangnya modularitas dari data yang ada. Sebuah perubahan pada sebuah data yang tersimpan menyebabkan banyaknya perubahan yang harus dilakukan pada data – data lain yang berhubungan.  Salah satu contoh permasalahan yang timbul akibat dari pemrograman structural ini adalah permasalahan Y2K (bug yang terjadi pada tahun 2000) yang menyebabkan kerugian materi dalam jumlah yang besar. OO memberikan sebuah metode untuk membangun perangkat lunak yang lebih handal (robust) dengan semakin besar dan kompleksnya sistem.
a.  Konsep
o        Modularitas
Sistem berorientasi objek terdiri dari modul – modul. Modularitas adalah sebuah konsep yang menekankan penggabungan data – data dan fungsi – fungsi yang berhubungan ke dalam sebuah kesatuan (modul) yang sama.
Ada 2 hal yang yang perlu diketahui tentang modul :
- Untuk setiap modul yang ada, mungkin terdapat beberapa variabel. Setiap variabel memiliki nilai tersendiri.
- Sebuah modul berkomunikasi dengan modul lain dengan cara saling memanggil fungsi yang ada.
o        Enkapsulasi
Enkapsulasi adalah sebuah konsep yang menekankan bahwa hanya setiap variabel yang memiliki data itu sendirilah yang dapat melakukan perubahan (modifikasi) terhadap data tersebut ataupun membaca data tersebut. Konsep ini memberikan struktur yang handal (robust) tetapi menyebabkan perubahan lebih mudah bisa dilakukan terhadap sistem.
o        Terminologi
Setiap modul pada sistem berorientasi objek disebut juga sebagai objek. Pada dunia nyata, objek memiliki 2 karakteristik, yaitu : data dan kelakuan.
Data untuk setiap objek secara umum disebut atribut dari objek. Kelakuan yang berbeda dari setiap objek disebut juga metode dari objek. Metode adalah analogi langsung dari fungsi atau prosedur pada bahasa pemograman.
Kelas adalah template dari sebuah objek. Sebuah kelas mendeskripsikan atribut dan metode yang akan ada untuk semua variabel dari kelas.
o        Kelebihan dan Kelemahan Object Oriented Programming dibanding Structural Programming
Pengembangan perangkat lunak menuntut keahlian teknis yang tinggi, ketekunan luar biasa, serta kemampuan mengelola proyek yang memadai. Di masa lalu, pengembangan perangkat lunak memakan waktu yang lama, biaya yang melebihi perkiraan, kurang memenuhi harapan dan kebutuhan pengguna dan yang paling parah banak perangkat lunak yang tidak bisa digunakan setelah selesai dikembangkan karena jauh dari apa yang diharapkan pengguna.
Pada saat ini, perangkat lunak yang dikembangkan harus mampu mengakomodasi perubahan-perubahan yang terjadi sangat cepat terutama untuk merespon perubahan lingkungan bisnis dan kebutuhan pengguna yang berubah dengan cepat. Oleh karena itu diperlukan metode pengembangan perangkat lunak yang lebih sesuai. Metode terstruktur yang selama ini digunakan dirasakan kurang memadai lagi.
Dalam pengembangan perangkat lunak dengan metode terstruktur, para perancang mulai dengan mengembangkan blok-blok standar kode untuk melakukan operasi tertentu, kemudian menyalinnya ke aplikasi lain yang ditulis. Hal tersebut menyulitkan saat terjadi perubahan pada blok-blok kode awal, sebab pengembang harus menyalinnya dimanapun kode awal tersebut disalin, yang pada akhirnya menjadikan waktu pengembangan lebih lama.
Pemrograman berorientasi obyek (Object Oriented Programming-OOP) dipandang merupakan kerangka kerja yang paling baik saat ini untuk menggantikan metode terstruktur. Dengan OOP para pengembang menciptakan blokblok kode yang dinamakan objek. Objek-objek ini kemudian digunakan oleh berbagai aplikasi. Dan apabila suatu saat terjadi perubahan, para pengembang hanya melakukan perubahan sekali saja dan dengan mudah mewariskannya ke objek lain yang menjadi turunannya.
Paradigma OOP adalah para pengembang membagi aplikasi-aplikasi yang besar menjadi objek-objek yang mandiri satu terhadap lainnya. Karena OOP menggunakan paradigma yang berbeda dengan pemrograman terstruktur, maka dibutuhkan tool yang berbeda pula. Salahsatu tool tersebut adalah UML (Unified Modelling Language). UML merupakan tool yang sangat sesuai karena konsep dasarnya adalah memodelkan kelas-kelas beserta atribut di dalamnya bersamaan dengan relasi-relasi yang terjadi antar kelas yang bersangkutan. Selain itu, UML memungkinkan pengembang sistem untuk melakukan perancangan hingga ke model fisik perangkat keras (misalnya pada jaringan komputer).
Kelebihan pada umumnya :
- Sistem yang dibangun lebih handal (robust).
- Memiliki gambaran yang lebih baik tentang dunia nyata.
Kelemahan pada umumnya
- Sulit untuk menggambarkan kelakuan dari sistem secara keseluruhan disebabkan oleh karena kelas adalah kesatuan yang bersifat low-level.
o        Karakteristik Dasar Sistem Berorientasi Objek
Sistem berorientasi objek berfokus untuk menangkap struktur dan perilaku dari sistem informasi dalam modul kecil yang mencakup baik data dan proses. Modul-modul kecil ini dikenal sebagai objek. Pada bagian ini bab, kita menjelaskan karakteristik dasar sistem berorientasi objek, yang meliputi kelas, objek, metode, pesan, enkapsulasi, menyembunyikan informasi, pewarisan, polimorfisme, dan dynamic binding.
1.    Classes and Objects
Kelas adalah template umum kita gunakan untuk mendefinisikan dan membuat variabel tertentu, atau bisa disebut benda. Setiap objek berhubungan dengan kelas. Sebagai contoh, semua objek yang menangkap informasi mengenai pasien dapat masuk ke dalam kelas yang disebut Pasien, karena ada atribut (misalnya, nama, alamat, dan tanggal lahir) dan metode (contoh menyisipkan misalnya, menginputkan pasien baru, memelihara informasi, dan menghapus entri ) semua itu adalah apa yang pasien bagikan (lihat Gambar 2.1).
Sebuah objek adalah variabel dari kelas. Dengan kata lain, sebuah objek adalah orang, tempat, peristiwa, atau hal yang ingin kita peroleh sebagai informasi. Jika kita membangun sebuah sistem pendaftaran untuk kantor dokter, kelas mungkin termasuk dokter, pasien, dan perjanjian. Para pasien tertentu seperti Jim Maloney, Mary Wilson, dan Theresa Marks dianggap contoh, atau objek, dari kelas pasien.  Setiap objek memiliki atribut yang mendeskripsikan informasi tentang objek, seperti nama pasien, tanggal lahir, alamat, dan nomor telepon. Keadaan suatu obyek ditentukan oleh nilai atribut dan hubungan dengan obyek lain pada suatu titik waktu tertentu. Sebagai contoh, pasien mungkin memiliki kondisi “baru” atau “sekarang” atau “telah berobat.”
Setiap objek juga memiliki behaviors. Behaviors adalah sifat yang menentukan apa yang dapat dilakukan oleh objek. Sebagai contoh, objek perjanjian dapat berupa menjadwalkan janji baru, menghapus janji, dan mencari janji yang tersedia berikutnya.
Gambar 2.1 Classes And Object
Salah satu aspek yang lebih membingungkan pengembangan sistem berorientasi objek adalah kenyataan bahwa di kebanyakan bahasa pemrograman berorientasi objek, baik kelas dan variabel dari kelas masing-masing dapat memiliki atribut dan metode. Atribut dari kelas dan metode cenderung digunakan untuk atribut model (atau metode) yang berhubungan dengan isu-isu terkait dengan semua variabel kelas. Misalnya, untuk membuat objek pasien baru, pesan dikirim ke kelas pasien untuk membuat sebuah keterangan yang baru untuk kelas itu sendiri. Dari sudut pandang seorang analisis sistem dan desain, maka kita akan berfokus pada atribut dan metode dari objek dan bukan dari kelas.
2.    Methods and Messages
Metode menerapkan perilaku obyek. Sebuah metode tidak lebih dari suatu tindakan yang dapat objek lakukan. Dengan demikian, mereka bersifat analog dengan fungsi atau prosedur dalam bahasa pemrograman tradisional seperti C, COBOL, atau Pascal. Message adalah informasi yang dikirim ke objek untuk memicu metode. Pada dasarnya, pesan adalah fungsi atau prosedur yang dipanggil dari satu objek ke objek lain. Misalnya, jika seorang pasien, baru mendaftar ke kantor dokter, sistem akan mengirim pesan untuk memasukkan informasi ke aplikasi tersebut. Objek pasien akan menerima pesan (instruksi) dan melakukan apa yang perlu untuk dilakukan, tentang memasukkan pasien baru ke dalam sistem (execute adalah metode yang dipakai). Lihat Gambar 2.2.
3.    Encapsulation and Information Hiding
Ide-ide enkapsulasi dan menyembunyikan informasi sangat berhubungan dalam sistem berorientasi objek. Walaupun tidak ada satu pun penjelasan yang baru. Enkapsulasi hanyalah kombinasi sederhana dari proses dan data ke dalam satu kesatuan. Pendekatan tradisional untuk pengembangan sistem informasi cenderung untuk menjadi proses-sentris (misalnya, sistem terstruktur) ataupun data-sentris (misalnya, teknik informasi). Pendekatan berorientasi objek menggabungkan proses dan data ke dalam (objek) secara keseluruhan yang bisa hadir secara bebas tanpa terpengaruh (objek) lain.
Gambar 2.2 Messages and Methods
Information hiding pertama kali diperkenalkan dalam pengembangan sistem terstruktur. Prinsip menyembunyikan informasi menunjukkan bahwa hanya informasi yang dibutuhkan untuk menggunakan sebuah modul perangkat lunak yang akan diterbitkan kepada pengguna modul. Biasanya, hal ini berarti informasi yang dibutuhkan untuk diteruskan ke modul, dan informasi yang kembali dari modul yang telah diterbitkan. Persisnya bagaimana modul dalam menerapkan fungsi yang dibutuhkan adalah tidak relevan. Kita benar-benar tidak peduli bagaimana benda melakukan fungsinya, selama fungsinya bisa terjadi. Dalam sistem berorientasi objek, menggabungkan enkapsulasi dengan prinsip menyembunyikan informasi, menunjukkan bahwa prinsip menyembunyikan informasi diterapkan pada objek bukan hanya menerapkannya pada fungsi atau proses. Dengan demikian, objek diperlakukan seperti kotak hitam.
Secara fakta, bahwa kita bisa menggunakan objek dengan metode memanggil adalah kunci untuk penggunaan ulang karena hal ini melindungi kerja internal objek dari perubahan yang terjadi di sistem luar, dan menjaga sistem dari keterpengaruhan ketika ada perubahan dilakukan terhadap suatu objek. Pada Gambar 2.2, perhatikan bagaimana sebuah pesan (insert pasien baru) akan dikirim kepada suatu objek, namun algoritma internal yang diperlukan untuk menanggapi pesan, tersembunyi dari bagian yang lain dari sistem. Satu-satunya informasi yang objek perlu tahu adalah seperangkat operasi, atau metode, yang objek lain dapat lakukan dan apa pesan yang perlu dikirim untuk memicunya.
4.    Inheritance
Pewarisan, sebagai karakteristik pengembangan sistem informasi, diusulkan dalam pemodelan data di akhir 1970-an dan awal 1980-an. Literatur pemodelan data menyarankan menggunakan pewarisan untuk mengidentifikasi tingkat yang lebih tinggi, atau lebih umum, seperti kelas dari objek. Setting umum dari atribut dan metode dapat diatur menjadi superclasses. Biasanya, kelas diatur dalam hirarki dimana superclasses, atau kelas umum, berada di atas, dan subkelas, atau kelas tertentu, di bagian bawah. Pada Gambar 2.3, seseorang adalah superclass daripada kelas Dokter dan kelas Pasien. Dokter, pada gilirannya, adalah superclass untuk dokter umum dan spesialis. Perhatikan bagaimana kelas (misalnya, dokter) dapat berfungsi sebagai superclass dan subclass secara bersamaan. Hubungan antara kelas dan superclass dikenal sebagai hubungan A-Kind-Of (AKO). Sebagai contoh, pada Gambar 2.3, seorang dokter umum adalah A-Kind dari dokter, dan merupakan A-Kind-Of dari orang.  Subclass mewarisi atribut dan metode yang sesuai dari superclasses di atas mereka. Artinya, setiap subclass berisi atribut dan metode dari superclass induknya. Sebagai contoh, Gambar 2.3 menunjukkan bahwa baik dokter dan pasien adalah subclass orang dan karena itu akan mewarisi atribut dan metode dari class orang. Pewarisan akan membuatnya pendefinisian kelas lebih sederhana. Alih-alih seperti mengulang atribut dan metode di dokter dan pasien yang kelasnya terpisah, atribut dan metode pada umumnya ditempatkan di kelas orang dan diwarisi oleh kelas-kelas di bawahnya. Perhatikan bagaimana jauh lebih efisien hirarki dari kelas objek daripada objek yang sama tanpa hirarki pada Gambar 2.4.
Gambar 2.3 Hirarki Class
Kebanyakan kelas di seluruh hirarki akan mengakibatkan kasus, setiap kelas yang memiliki variabel disebut kelas konkret. Misalnya, jika Mary Wilson dan Jim Maloney adalah attribut nama dari kelas pasien, pasien akan dianggap sebagai kelas konkret. Beberapa kelas tidak menghasilkan kasus karena mereka digunakan hanya sebagai template untuk kelas yang lebih spesifik lain (terutama kelas yang berlokasi tinggi pada sebuah hirarki). Kelas-kelas yang disebut sebagai kelas abstrak. Orang akan menjadi contoh dari kelas abstrak. Daripada membuat objek dari orang, kita akan menciptakan contoh yang mewakili kelas-kelas yang lebih spesifik dari Dokter dan Pasien, kedua jenis orang (lihat Gambar 2.3). Apa jenis kelas adalah kelas dokter umum? Mengapa?
Gambar 2.4 Pewarisan
5.    Polymorphism and Dynamic Binding
Polimorfisme berarti bahwa pesan yang sama dapat diartikan berbeda oleh kelas yang berbeda dari objek. Sebagai contoh, memasukkan pasien berarti sesuatu yang berbeda dari memasukkan janji. Dengan demikian, bagian yang berbeda informasi yang perlu dikumpulkan dan disimpan. Untungnya, kita tidak perlu khawatir tentang bagaimana sesuatu diselesaikan saat menggunakan objek. Kita hanya mengirim pesan ke objek, dan objek yang akan bertanggung jawab untuk menafsirkan pesan secara tepat. Sebagai contoh, jika kita mengirim pesan “Gambarkan bentukmu” untuk objek persegi, objek lingkaran, dan objek segitiga, hasilnya akan sangat berbeda, walaupun pesan tersebut adalah sama. Perhatikan pada Gambar 2.5 bagaimana setiap objek merespon dengan tepat (dan berbeda) meskipun pesan adalah identik.
Polimorfisme bisa dibentuk melalui dynamic binding. Dinamis, atau terlambat, binding adalah teknik yang menunda untuk menentukan tipe objek sampai waktu running. Dengan demikian, metode khusus yang biasa disebut tidak dipilih oleh sistem berorientasi objek sampai sistem berjalan. Hal ini berbeda untuk binding statis. Dalam sistem statis terikat, jenis objek akan ditentukan pada waktu kompilasi. Oleh karena itu, pengembang harus memilih metode mana yang harus dipanggil disamping mengijinkan sistem untuk melakukannya. Inilah sebabnya mengapa di sebagian besar bahasa pemrograman tradisional anda akan menemukan logika yang rumit dalam mengambil keputusan berdasarkan berbagai jenis objek dalam sistem. Sebagai contoh, dalam bahasa pemrograman tradisional, daripada mengirim pesan “Gambarlah bentukmu” ke berbagai jenis objek grafis pada Gambar 2.5, Anda akan harus menulis logika keputusan menggunakan pernyataan case atau satu set pernyataan untuk menentukan objek grafis apa yang ingin anda gambar, dan anda harus menamai setiap fungsi gambar secara berbeda (misalnya, menggambar-persegi, menggambar lingkaran, atau menggambar-segitiga). Hal ini jelas akan membuat sistem yang jauh lebih rumit dan lebih sulit untuk dipahami.
Gambar 2.5 Polimorfisme dan Enkapsulasi
o        Object Oriented Development (OOD)
Dewasa ini konsep object oriented telah mendominasi hampir seluruh aspek komputerisasi. Mulai dari software game, aplikasi bisnis, DBMS, bahkan sampai ke sistem operasi. Hal tersebut terjadi karena konsep object oriented dipandang sebagai suatu konsep yang maju dan dianggap mampu memodelkan hampir semua fenomena yang ada di dunia ini. Hal lain yang menarik adalah kemampuannya untuk mengembangkan perangkat lunak secara incremental dan mengurangi biaya yang sulit dicapai oleh meodologi sebelumnya.
Membangun sistem perangkat lunak dapat diibatkan dengan membangun gedung bertingkat. Gedung bertingkat tidak mungkin dibangun tanpa memiliki cetak biru arsitektur yang lengkap. Proses tradisional untuk melakukan pengembangan sistem informasi dinamakan System Development Life Cycle (SDLC), yang memuat langkah-langkah yang seharusnya diikuti oleh para profesional dalam pengembangan sistem informasi untuk menetapkan spesifikasi, mengembangkan, dan memelihara sistem informasi. Beberapa metode yang cukup dikenal adalah metode air terjun (waterfalls) dan prototyping.
o        Pemodelan perancangan
Untuk memodelkan aplikasi dunia nyata (real world) menggunakan metodologi berorientasi objek, kita perlu memodelkan data maupun proses yang berjalan pada objek yang bersangkutan. Dalam konteks pengembangan sistem berorientasi objek (Object Oriented Development – OOD), terdapat beberapa keuntungan dari penggunaan pemodelan berorientasi objek, yaitu :
- Kemampuan untuk menangani tipe-tipe data dan masalah-masalah yang lebih kompleks dan rumit
-   Memperbaiki komunikasi antara pengguna, analis, perancang, dan pemrogram
-    Meningkatkan derajad konsistensi antara tahap analisis, perancangan, serta kegiatan pemrograman karena menggunakan model yang sama untuk setiap tahap
-    Ketangguhan sistem (robustness)
-    Kemampuan untuk menggunakan ulang hasil analisis, perancangan, serta pemrograman (reusable component) pada suatu proyek ke proyek lainnya.
Untuk mengembangkan model perancangan, kita harus mengidentifikasi dan menyelidiki konsekuensi pada lingkungan implementasi akibat langkah-langkah perancangan. Semua keputusan strategis, misalnya penanganan kesalahan dan pustaka komponen yang akan dipakai berulang-ulang harus dibuat. Selanjutnya kita menggunakan keputusan itu untuk beradaptasi dengan lingkungan implementasi. Langkah terakhir adalah membuat formalisasi model perancangan untuk mendeskripsikan bagaimana objek-objek berinteraksi satu sama lain lewat suatu skenario (use case) yang telah dikembangkan sebelumnya.
Pemodelan (modeling) adalah proses merancang piranti lunak sebelum melakukan pengkodean (coding). Model piranti lunak dapat dianalogikan seperti pembuatan blueprint pada pembangunan gedung. Membuat model dari sebuah sistem yang kompleks sangatlah penting karena kita tidak dapat memahami sistem semacam itu secara menyeluruh. Semakin komplek sebuah sistem, semakin penting pula penggunaan teknik pemodelan yang baik. Dengan menggunakan model, diharapkan pengembangan piranti lunak dapat memenuhi semua kebutuhan pengguna dengan lengkap dan tepat, termasuk faktor-faktor seperti scalability, robustness, security, dan sebagainya. Kesuksesan suatu pemodelan piranti lunak ditentukan oleh tiga unsur, yang kemudian terkenal dengan sebuan segitiga sukses (the triangle for success). Ketiga unsur tersebut adalah metode pemodelan (notation), proses (process) dan tool yang digunakan.
UML (Unified Modelling Language) adalah bahasa pemodelan standar pada rekayasa perangkat lunak. Dengan menggunakan UML akan berdampak pada peningkatan produktifitas dan dan kualitas serta pengurangan biaya dan waktu. Kerumitan arsitektur dalam pengembangan perangkat lunak bisa diatasi dengan menggambarkan cetak biru sistem tersebut. Di sinilah UML bisa banyak berperan.

C.   Task dan Multithreading Java
Dengan  seiring  berjalannya  waktu dan  tuntutan  teknologi  ternyata  ditemukan  kelemahan  yang  sebenarnya  bisa  diminimalisir  pada proses.  Untuk  itulah  diciptakan  thread  yang  merupakan  cara  dari  komputer  untuk  menjalankan dua  atau  lebih  task  dalam  waktu  bersamaan,  sedangkan  multithreading  adalah  cara  komputer untuk  membagi-bagi  pekerjaan  yang  dikerjakan  sebagian-sebagian  dengan  cepat  sehingga menimbulkan  efek  seperti  menjalankan  beberapa  task  secara  bersamaan  walaupun  otaknya hanya  satu.  Di  sini  kita  akan  belajar  mengapa  harus  ada  thread,  perbedaan  thread  dengan proses,  keuntungan  dan  kerugian  pengimplementasian  thread,  model-model  multithreading, pengimplementasian  pustaka  thread,  pembatalan  thread,  thread  pools,  penjadwalan  thread dan thread di Linux.
a.    Keuntungan dan Kerugian MultiThreading
Multiprocessing  merupakan  penggunaan  dua  atau  lebih  CPU  dalam  sebuah  sistem  komputer. Multitasking  merupakan  metode  untuk  menjalankan  lebih  dari  satu  proses  dimana  terjadi pembagian  sumberdaya  seperti  CPU.  Multithreading  adalah  cara pengeksekusian  yang mengizinkan  beberapa  thread  terjadi  dalam  sebuah  proses,  saling  berbagi  sumber  daya  tetapi dapat dijalankan secara independen.
Keuntungan  dari  sistem  yang  menerapkan  multithreading  dapat  kita  kategorikan  menjadi  4 bagian:
-    Responsif. Aplikasi interaktif menjadi tetap responsif meskipun sebagian dari program sedang diblok atau melakukan operasi lain yang panjang. Umpamanya, sebuah thread dari web browser dapat  melayani  permintaan  pengguna  sementara  thread  yang  lain  berusaha  menampilkan gambar.
-    Berbagi  sumber  daya.  Beberapa  thread  yang  melakukan  proses  yang  sama  akan  berbagi sumber  daya.  Keuntungannya  adalah  mengizinkan  sebuah  aplikasi  untuk mempunyai  beberapa thread yang berbeda dalam lokasi memori yang sama.
-    Ekonomis. Pembuatan sebuah proses memerlukan pengalokasian memori dan sumber daya. Alternatifnya adalah dengan menggunakan thread, karena thread membagi memori dan sumber daya  yang  dimilikinya  sehingga  lebih  ekonomis  untuk  membuat  thread  dan  context  switching thread.  Akan  susah  mengukur  perbedaan  waktu  antara  thread  dan  switch,  tetapi  secara  umum pembuatan  dan  pengaturan  proses  akan  memakan  waktu  lebih  lama  dibandingkan  dengan thread.  Pada  Solaris,  pembuatan  proses  memakan  waktu  30  kali  lebih  lama  dibandingkan pembuatan  thread  sedangkan  proses  context  switch  5  kali  lebih  lama  dibandingkan  context switching thread.
-    Utilisasi  arsitektur  multiprosesor.  Keuntungan  dari  multithreading  dapat  sangat  meningkat pada  arsitektur  multiprosesor,  dimana  setiap  thread  dapat  berjalan  secara  paralel  di  atas procesor  yang  berbeda.  Pada  arsitektur  processor  tunggal,  CPU  menjalankan  setiap  thread secara  bergantian  tetapi  hal  ini  berlangsung  sangat  cepat  sehingga  menciptakan  ilusi  paralel, tetapi pada kenyataannya hanya satu thread yang dijalankan CPU pada satu-satuan waktu. 
Adapun kerugian dari multithreading adalah :
-    Jika  digunakan  secara  berlebihan,  multithreading  akan  berdampak  pada  pemborosan resource  dan  CPU  yang  dialokasikan  untuk  switching  threads.  Misalnya  jika  heavy  disk  I/O terlibat,  akan  lebih  cepat  jika  hanya  memiliki  1  atau  2  thread  yang  melaksanakan  tugas  secara berurutan,  daripada  menggunakan  multithread  yang  masing-masing mengeksekusi  sebuah  task pada waktu yang sama.
-    Sistem yang memiliki kecepatan prosesor dan memory yang cenderung sama, sehingga tidak ada  efisiensi  yang  hilang  (mengacu  kepada  latency),  tidak  akan  memperoleh  peningkatan bandwidth yang signifikan jika menggunakan multithreading. 
-    Multithreading  menghasilkan  program  yang  lebih  kompleks.  Menggunakan  multiple thread sendiri  tidak  akan  menciptakan  kerumitan,  tapi  interaksi  antar  thread-lah  yang  mengakibatkan kompleksitas tersebut.
-    Thread  yang  banyak  bisa  saling  berinterferensi  ketika  saling  berbagi  sumber  daya  hardware seperti cache.
b.    Model MultiThreading
Beberapa terminologi yang akan dibahas:
1.    Thread pengguna: Thread yang pengaturannya dilakukan oleh pustaka thread pada tingkatan pengguna.  Karena  pustaka  yang  menyediakan  fasilitas  untuk  pembuatan  dan  penjadwalan thread, thread pengguna cepat dibuat dan dikendalikan.
2.    Thread Kernel: . Thread  yang  didukung langsung oleh kernel.  Pembuatan,  penjadwalan  dan manajemen  thread  dilakukan  oleh  kernel  pada  kernel  space.  Karena  dilakukan  oleh  sistem operasi, proses pembuatannya akan lebih lambat jika dibandingkan dengan thread pengguna.
c.    Model-Model MultiThreading:
1.    Model  Many-to-One.  Model  ini  memetakan  beberapa  thread  tingkatan  pengguna  ke  sebuah thread.  tingkatan  kernel.  Pengaturan  thread  dilakukan  dalam  ruang  pengguna  sehingga  efisien. Hanya satu thread pengguna yang dapat mengakses thread kernel pada satu saat. Jadi Multiple thread tidak dapat berjalan secara paralel pada multiprosesor. Kekurangannya adalah ketika ada satu blocking systemc call, semua akan menjadi terblok juga. Contoh: Solaris Green Threads dan GNU Portable Threads.
2.    Model One-to-One. Model ini memetakan setiap thread tingkatan pengguna ke setiap thread. Ia  menyediakan  lebih  banyak  concurrency  dibandingkan  model  Many-to-One.  Keuntungannya sama  dengan  keuntungan  thread  kernel.  Kelemahan  model  ini  ialah  setiap  pembuatan  thread pengguna memerlukan tambahan thread kernel. Karena itu, jika mengimplementasikan sistem ini maka  akan  menurunkan  kinerja  dari  sebuah  aplikasi  sehingga  biasanya  jumlah  thread  dibatasi dalam sistem. Contoh: Windows NT/XP/2000 , Linux, Solaris 9, OS/2.
3.    Model  Many-to-Many.  Model  ini  memultipleks  banyak  thread  tingkatan  pengguna  ke  thread kernel  yang  jumlahnya  sedikit  atau  sama  dengan  tingkatan  pengguna.  Model  ini  mengizinkan developer  membuat  thread  sebanyak  yang  ia  mau  tetapi  concurrency  tidak  dapat  diperoleh karena  hanya  satu  thread  yang  dapat  dijadwalkan  oleh  kernel  pada  suatu  waktu.  Keuntungan dari  sistem  ini  ialah  kernel  thread  yang  bersangkutan  dapat  berjalan  secara  paralel  pada multiprosessor dan lebih efisien. Contoh : Solaris 2, IRIX, HPUX.
Model-Model MultiThreading

d.    Pustaka Thread
Pustaka  Thread  atau  yang  lebih  familiar  dikenal  dengan  Thread  Library  bertugas  untuk menyediakan  API  untuk  programmer  dalam  menciptakan  dan  memanage  thread.  Ada  dua  cara dalam mengimplementasikan pustaka thread:
1.    Menyediakan  API  dalam  level  pengguna  tanpa  dukungan  dari  kernel  sehingga  pemanggilan fungsi  tidak  melalui  system  call.  Jadi,  jika  kita  memanggil  fungsi  yang  sudah  ada  di  pustaka, maka akan menghasilkan pemanggilan fungsi call yang sifatnya lokal dan bukan system call. 
2.    Menyediakan API di level kernel yang didukung secara langsung oleh sistem operasi. Pemanggilan fungsi call akan melibatkan system call ke kernel. Ada tiga pustaka thread yang sering digunakan saat ini, yaitu: POSIX Pthreads, Java, dan Win32. Implementasi POSIX standard dapat dengan cara user level dan kernel level, sedangkan Win32 adalah kernel level. Java API thread dapat diimplementasikan oleh Pthreads atau Win32.

e.     Pembatalan Thread
Thread  Cancellation  ialah  pembatalan  thread  sebelum  tugasnya  selesai.  Misalnya  hendak  mematikan  Java  Virtual  Machine  (JVM)  pada  program  Java.  Maka  sebelum  JVM  dimatikan seluruh thread yang berjalan harus dibatalkan terlebih dahulu. Contoh lain adalah pada masalah search.  Apabila  sebuah  thread  mencari  sesuatu  dalam  database  dan  menemukan  serta mengembalikan hasilnya, thread sisanya akan dibatalkan. Thread yang akan diberhentikan biasa disebut target thread. 
Pemberhentian target Thread dapat dilakukan dengan 2 cara:
a. Asynchronous cancellation. Suatu thread seketika itu juga membatalkan target thread.
b. Deferred  cancellation.  Suatu  thread  secara  periodik memeriksa  apakah  ia  harus  batal,  cara ini memperbolehkan target thread untuk membatalkan dirinya secara terurut.
Hal yang sulit dari pembatalan thread ini adalah ketika terjadi situasi dimana sumber daya sudah dialokasikan  untuk  thread  yang  akan  dibatalkan.  Selain  itu  kesulitan  lain  adalah  ketika  thread yang dibatalkan sedang meng-update data yang ia bagi dengan thread lain. Hal ini akan menjadi masalah  yang  sulit  apabila  digunakan  asynchronous  cancellation.  Sistem  operasi  akan mengambil  kembali  sumber  daya  dari  thread  yang  dibatalkan  tetapi  seringkali  sistem  operasi tidak mengambil kembali semua sumber daya dari thread yang dibatalkan. 
Alternatifnya  adalah  dengan  menggunakan  deffered  cancellation.  Cara  kerja  dari  deffered cancellation  adalah  dengan  menggunakan  satu  thread  yang  berfungsi  sebagai  pengindikasi bahwa target thread hendak dibatalkan. Tetapi pembatalan hanya akan terjadi jika target thread memeriksa  apakah  ia  harus  batal  atau  tidak.  Hal  ini  memperbolehkan  thread  untuk  memeriksa apakah ia harus batal pada waktu dimana ia dapat dibatalkan secara aman yang aman. Pthread merujuk sebagai cancellation points.
Pada  umumnya  sistem  operasi  memperbolehkan  proses  atau  thread  untuk  dibatalkan  secara asynchronous.  Tetapi  Pthread  API  menyediakan  deferred  cancellation.  Hal  ini  berarti  sistem operasi yang mengimplementasikan Pthread API akan mengizinkan deferred cancellation.

f.     Thread Pools
Pada web server yang menerapkan multithreading ada dua masalah yang timbul:
-   Ukuran  waktu  yang  diperlukan  untuk  menciptakan  thread  yang  melayani  permintaan  yang diajukan pada kenyataannya thread dibuang seketika sesudah ia menyelesaikan tugasnya.
-   Pembuatan thread yang tidak terbatas jumlahnya dapat menurunkan performa dari sistem.
Solusinya  adalah  dengan  penggunaan  Thread  Pools,  yaitu  sekumpulan  thread  yang  mengantri untuk mengerjakan tugas  Cara kerjanya adalah dengan membuat beberapa thread pada proses  startup  dan  menempatkan  mereka  ke  pools,  dimana  mereka  duduk  diam  dan  menunggu  untuk bekerja. Jadi, ketika server menerima permintaan, ia akan membangunkan thread dari pool dan jika thread tersedia maka permintaan tersebut akan dilayani. Ketika  thread  sudah  selesai  mengerjakan  tugasnya  maka  ia  kembali  ke  pool  dan  menunggu pekerjaan  lainnya.  Bila  tidak  ada  thread  yang  tersedia  pada  saat  dibutuhkan  maka  server menunggu sampai ada satu thread yang bebas. 
Keuntungan thread pool adalah:
-  Biasanya  lebih  cepat  untuk  melayani  permintaan  dengan  thread  yang  ada  dibandingkan menunggu thread baru dibuat.
-  Thread pool membatasi jumlah thread yang ada pada suatu waktu. Hal ini penting pada sistem yang  tidak  dapat  mendukung  banyak  thread  yang  berjalan  secara  concurrent.  Jumlah  thread dalam  pool  dapat  tergantung  dari  jumlah  CPU  dalam  sistem,  jumlah  memori  fisik,  dan  jumlah permintaan klien yang concurrent.
-   Pembuatan  jumlah  thread  yang  tepat  dapat  meningkatkan  performa  serta  sistem  yang  lebih stabil

g.    Penjadwalan Thread
Begitu  dibuat,  thread  baru  dapat  dijalankan  dengan  berbagai  macam  penjadwalan.  Kebijakan penjadwalanlah  yang  menentukan  setiap  proses,  di  mana  proses  tersebut  akan  ditaruh  dalam daftar proses sesuai proritasnya dan bagaimana ia bergerak dalam daftar proses tersebut.
Untuk  menjadwalkan  thread,  sistem  dengan  model  multithreading  many  to  many  atau  many  to one menggunakan:
-   Process  Contention  Scope  (PCS).  Pustaka  thread  menjadwalkan  thread  pengguna  untuk berjalan pada LWP (lightweight process) yang tersedia.
-   System  Contention  Scope  (SCS).  SCS  berfungsi  untuk  memilih  satu  dari  banyak  thread, kemudian menjadwalkannya ke satu thread tertentu (CPU / Kernel).

Penjadwalan Thread

1 comments: