Rabu, 12 Juni 2013

UAS MBO(diagram UML game domino)

USE CASE DIAGRAM

 ACTIVITY DIAGRAM START GAME

 ACTIVITY DIAGRAM PLAY GAME
CLASS DIAGRAM


 squance diagram
PLAY GAME



START GAME

Minggu, 09 Juni 2013

konsep dasar OOP

Konsep dasar dari Pemrograman Berorientasi Objek Pemrograman orientasi-objek menekankan konsep berikut:
Kelas — kumpulan atas definisi data dan fungsi-fungsi dalam suatu unit untuk suatu tujuan tertentu. Sebagai contoh 'class of dog' adalah suatu unit yang terdiri atas definisi-definisi data dan fungsi-fungsi yang menunjuk pada berbagai macam perilaku/turunan dari anjing. Sebuah class adalah dasar dari modularitas dan struktur dalam pemrograman berorientasi object. Sebuah class secara tipikal sebaiknya dapat dikenali oleh seorang non-programmer sekalipun terkait dengan domain permasalahan yang ada, dan kode yang terdapat dalam sebuah class sebaiknya (relatif) bersifat mandiri dan independen (sebagaimana kode tersebut digunakan jika tidak menggunakan OOP). Dengan modularitas, struktur dari sebuah program akan terkait dengan aspek-aspek dalam masalah yang akan diselesaikan melalui program tersebut. Cara seperti ini akan menyederhanakan pemetaan dari masalah ke sebuah program ataupun sebaliknya.
Objek - membungkus data dan fungsi bersama menjadi suatu unit dalam sebuah program komputer; objek merupakan dasar dari modularitas dan struktur dalam sebuah program komputer berorientasi objek.
Abstraksi - Kemampuan sebuah program untuk melewati aspek informasi yang diproses olehnya, yaitu kemampuan untuk memfokus pada inti. Setiap objek dalam sistem melayani sebagai model dari "pelaku" abstrak yang dapat melakukan kerja, laporan dan perubahan keadaannya, dan berkomunikasi dengan objek lainnya dalam sistem, tanpa mengungkapkan bagaimana kelebihan ini diterapkan. Proses, fungsi atau metode dapat juga dibuat abstrak, dan beberapa teknik digunakan untuk mengembangkan sebuah pengabstrakan.
Enkapsulasi - Memastikan pengguna sebuah objek tidak dapat mengganti keadaan dalam dari sebuah objek dengan cara yang tidak layak; hanya metode dalam objek tersebut yang diberi izin untuk mengakses keadaannya. Setiap objek mengakses interface yang menyebutkan bagaimana objek lainnya dapat berinteraksi dengannya. Objek lainnya tidak akan mengetahui dan tergantung kepada representasi dalam objek tersebut.
Polimorfisme melalui pengiriman pesan. Tidak bergantung kepada pemanggilan subrutin, bahasa orientasi objek dapat mengirim pesan; metode tertentu yang berhubungan dengan sebuah pengiriman pesan tergantung kepada objek tertentu di mana pesa tersebut dikirim. Contohnya, bila sebuah burung menerima pesan "gerak cepat", dia akan menggerakan sayapnya dan terbang. Bila seekor singa menerima pesan yang sama, dia akan menggerakkan kakinya dan berlari. Keduanya menjawab sebuah pesan yang sama, namun yang sesuai dengan kemampuan hewan tersebut. Ini disebut polimorfisme karena sebuah variabel tungal dalam program dapat memegang berbagai jenis objek yang berbeda selagi program berjalan, dan teks program yang sama dapat memanggil beberapa metode yang berbeda di saat yang berbeda dalam pemanggilan yang sama. Hal ini berlawanan dengan bahasa fungsional yang mencapai polimorfisme melalui penggunaan fungsi kelas-pertama.
Dengan menggunakan OOP maka dalam melakukan pemecahan suatu masalah kita tidak melihat bagaimana cara menyelesaikan suatu masalah tersebut (terstruktur) tetapi objek-objek apa yang dapat melakukan pemecahan masalah tersebut. Sebagai contoh anggap kita memiliki sebuah departemen yang memiliki manager, sekretaris, petugas administrasi data dan lainnya. Misal manager tersebut ingin memperoleh data dari bag administrasi maka manager tersebut tidak harus mengambilnya langsung tetapi dapat menyuruh petugas bag administrasi untuk mengambilnya. Pada kasus tersebut seorang manager tidak harus mengetahui bagaimana cara mengambil data tersebut tetapi manager bisa mendapatkan data tersebut melalui objek petugas adminiistrasi. Jadi untuk menyelesaikan suatu masalah dengan kolaborasi antar objek-objek yang ada karena setiap objek memiliki deskripsi tugasnya sendiri.

Pembuatan game domino menggunakan GameMaker (UAS SCS)

Pembuatan Game menggunakan Game maker Versi 8.1
permainan Game domino sample.





package game;

import java.util.ArrayList;
import java.util.Random;
public class Game{
public static void main(String args[]){

ArrayList<int []> tiles = new ArrayList<int []>();
Random gen = new Random();

for(int i=0;i<7;i++){
for(int j=0;j<7;j++){
tiles.add(new int[]{i,j});
System.out.print("("+ i + ", " + j + ") ");
}
System.out.println();
}

int [][] player1_tiles = new int[7][49];
int [][] player2_tiles = new int[7][49];
int [] tile1 = null;
int [] tile2 = null;

for(int i=0;i<player1_tiles.length;i++){

tile1 = tiles.get(gen.nextInt(tiles.size()));
tile2 = tiles.get(gen.nextInt(tiles.size()));
tiles.remove(tile1);
tiles.remove(tile2);

player1_tiles[i] = tile1;
player2_tiles[i] = tile2;
}

System.out.println("\nTile\tPlayer 1\tPlayer 2");
for(int i=0;i<player1_tiles.length;i++){
System.out.print((i+1) +": \t ");
for(int j=0;j<player1_tiles[i].length;j++){
System.out.print(player1_tiles[i][j] + " ");
}
System.out.print("\t\t");

for(int j=0;j<player2_tiles[i].length;j++){
System.out.print(player2_tiles[i][j] + " ");
}

System.out.println();
}
System.out.println();
if(tile1[0]>tile2[1] && tile1[1]>tile2[1]){
System.out.println("player 1 drops first");
}else{
System.out.println("player 2 drops first");

}
}
}

pengertian rational rose

Rational rose
Rational Rose adalah tools pemodelan visual untuk pengembangan system berbasis objek yang handal untuk digunakan sebagai bantuan bagi para pengembang dalam melakukan analisis dan perancangan system. Rational rosemendukung permodelan bisnis yang membantu para pengembang memahami system secara komprehensif. Ia juga membantu analisis system dengan cara pengembang membuat diagram use case untuk melihat fungsionalitas system secara keseluruhan sesuai dengan harapan dan keinginan pengguna. Kemudian, ia juga menuntut pengembang untuk mengambangkan Interaction Diagram untuk melihat bagaimana objek-objek saling bekerjasama dalam menyediakan fungsionalitas yang diperlukan.
Dalam Rational rose, pemodelan adalah cara melihat system dari berbagai sudut pandang. Ia mencakup semua diagram yang dikenal dalam UML, actor-aktor yang terlibat dalam system, use-case, objek-objek, kelas-kelas, komponen-komponen, serta simpul-simpul penyebaran. Model juga mendeskripsikan rincian yang diperlukan system dan bagaimana ia akan bekerja, sehingga para pengembang dapat menggunakan model itu sebagai blue print untuk system yang akan dikembangkan.

UML
UML (Unified Modelling Language) adalah sebuah bahasa yang menjadi standar dalam industri untuk visualisasi, merancang dan mendokumentasikan system piranti lunak.

Seperti bahasa-bahasa lainnya,  UML mendefinisikan notasi dan  syntax/semantik. Notasi UML merupakan sekumpulan bentuk khusus untuk menggambarkan berbagai diagram piranti lunak. Setiap bentuk memiliki makna tertentu, dan UML syntax mendefinisikan bagaimana bentuk-bentuk tersebut dapat dikombinasikan. Notasi UML terutama diturunkan dari 3 notasi yang telah ada sebelumnya: Grady Booch OOD (Object-Oriented Design), Jim Rumbaugh OMT (Object Modeling Technique), dan Ivar Jacobson OOSE (Object-Oriented Software Engineering).

Sejarah UML sendiri cukup panjang. Sampai era tahun 1990 seperti kita ketahui puluhan metodologi pemodelan berorientasi objek telah bermunculan di dunia. Diantaranya adalah: metodologi booch [1],  metodologi coad [2], metodologi OOSE [3], metodologi OMT [4], metodologi shlaer-mellor [5], metodologi wirfs-brock [6], dsb. Masa itu terkenal dengan masa perang metodologi (method war) dalam pendesainan berorientasi objek. Masing-masing metodologi membawa notasi sendiri-sendiri, yang mengakibatkan timbul masalah baru apabila kita bekerjasama dengan group/perusahaan lain yang menggunakan metodologi yang berlainan.

Posisi UML

Tahapan pembangunan aplikasi berorientasi objek pada umunya bersifat iterative dan incremental. Proses pembangunan aplikasi dibagi menjadi beberapa siklus. Setiap kali satu situs selesai dilakukan, dilakukan evaluasi sebagai bahan untuk memulai siklus berikutnya. Beberapa siklus biasanya terdiri atas:

Tahap analisa permintaan
Tahap analisa desain
Tahap desain
Tahap Pengkodean.
Tahap implementasi
UML digunakan pada tahap analisa dan desain. Desain yang dihasilkan berupa diagram-diagram UML yang akan diterjemahkan menjadi kode program pada tahap pengkodean.

Konsep Dasar UML

Abstraksi konsep dasar UML yang terdiri dari structural classification, dynamic behavior, dan model management, bisa kita pahami dengan mudah apabila kita melihat gambar diatas dari Diagrams. Main concepts bisa kita pandang sebagai term yang akan muncul pada saat kita membuat diagram. Dan view adalah kategori dari diagaram tersebut.

Lalu darimana kita mulai ? Untuk menguasai UML, sebenarnya cukup dua hal yang harus kita

perhatikan:

1.  Menguasai pembuatan diagram UML

2.  Menguasai langkah-langkah dalam analisa dan pengembangan dengan UML

Tulisan ini pada intinya akan mengupas kedua hal tersebut.

Seperti juga tercantum pada gambar diatas UML mendefinisikan diagram-diagram sebagai berikut:

use case diagram
class diagram
statechart diagram
activity diagram
sequence diagram
collaboration diagram
component diagram
deployment diagram
Diagram UML

UML menyediakan 10 macam Dalam UML merupakan salah satu alat Bantu yang sangat handal dalam mengembangkan system berorientasi objek. Ada 9 jenis diagram yang ditangani oleh UML, yakni:

1. Diagram Use Case

Use case adalah deskripsi fungsi dari sebuah dari sudut pandang pengguna. Use case bekerja dengan cara mendeskripsikan tipikal interkasi antar user (pengguna) sebuah system dengan system itu sendiri dan menjelaskan bagaimana system itu bekerja.

2. Diagram Class

Class diagram adalah sebuah spesifikasi yang jika diinstansiasi maka akan menghasilkan objek yang merupakan inti dari pengembangan dan desain berorientasi objek. Kelas menggambarkan atribut atau properti dari sebuah system sekaligus menawarkan layanan apa saja yang bisa dilakukan dengan objek tersebut (method/fungsi). Jadi, kelas memiliki 3 pokok penting yaitu: nama, atribut dan method.

3. Diagram Statechart

Statechart diagram menunjukkan transisi dan perubahan keadaan suatu objek pada system sebagai akibat dari stimulasi yang diterima. Dalam UML, state digambarkan berbentuk segi empat dengan sudut tumpul dan memiliki nama sesuai dengan kondisi saat itu.

4. Diagram Activity

Actifity diagram menggambarkan berbagai alir aktifitas dalam system yang sedang dirancang, bagaimana masing-masing alir berawal, decision yang mungkin terjadi dan bagaimana mereka berakhir. Activity diagram juga dapat menggambarkan proses parallel yang mungkin erjadi pada beberapa eksekusi.

5. Diagram Sequence

Sequence diagram digunakan untuk menggambarkan perilaku pada sebuah sekenario. Diagram ini menunjukkan sejumlah contoh objek dan message (pesan) yang diletakkan di antara objek-objek ini di dalam use case.

6. Diagram Collaboration

Collaboration diagram adalah perluasan dari objek diagram. Objek diagram menunjukkan objek-objek dan hubungannya dengan yang lain. Collaboration diagram menunjukkan message-message objek yang dikirim satu sama lain,

7. Diagram Component

Component Diagram menggambarkan struktur dan hubungan antar komponen piranti lunak, termasuk ketergantungan di antaranya.

8. Diagram Deployment.

Deplaoyment diagram menggambarkan detail bagaimana komponen di-deploy dalam infrastruktur system, dimana komponen akan diletakkan (pada mesin, server atau piranti keras apa), bagaimana kemampuan jaringan pada lokasi tersebut, spesifikasi server dan hal-hal lain yang bersifat fisikal.

Tool Pembuatan UML

Banyak sekali tool-tool yang didesain untuk mendukung UML,mulai dari yang gratis maupun komersial. Di antaranya yaitu:

Komersial:

Rational Rose
Object Domain
Magic Draw
Visio


Argo UML: Tool sederhana ini dapat membuat membantu kita untuk merancang perangkat lunak yang akan dibangun. Tool ini cocok untuk bagi yang baru belajar UML, karena fitur-fiturnya sangat terbatas.
FrameUML: Menurut saya tool ini agak kurang userfriendly karena sangat sederhana dan tidak meng-cover semua kebutuhan yang diperlukan dalam pembuatan UML.
Net Beans: Tool ini sangat kompleks, karena tidak hanya UML yang ada didalamnya, tapi BaseIDE, JavaME, JavaSE, SOAP, Ruby,C++ termasuk webserver Apache Tomcat. Maka dari itu tool ini sangat berat dan memakan memori yang cukup banyak.

tugas use case diagram




(tugas) use case diagram perekam informasi kepentingan negara


penggunaan UML

Unified Modeling Language (UML) adalah bahasa spesifikasi standar untuk mendokumentasikan, menspesifikasikan, dan membangun sistem perangkat lunak.


Pendahuluan

Unified Modeling Language (UML) adalah himpunan struktur dan teknik untuk pemodelan desain program berorientasi objek (OOP) serta aplikasinya. UML adalah metodologi untuk mengembangkan sistem OOP dan sekelompok perangkat tool untuk mendukung pengembangan sistem tersebut. UML mulai diperkenalkan oleh Object Management Group, sebuah organisasi yang telah mengembangkan model, teknologi, dan standar OOP sejak tahun 1980-an. Sekarang UML sudah mulai banyak digunakan oleh para praktisi OOP. UML merupakan dasar bagi perangkat (tool) desain berorientasi objek dari IBM.
UML adalah suatu bahasa yang digunakan untuk menentukan, memvisualisasikan, membangun, dan mendokumentasikan suatu sistem informasi. UML dikembangkan sebagai suatu alat untuk analisis dan desain berorientasi objek oleh Grady Booch, Jim Rumbaugh, dan Ivar Jacobson.Namun demikian UML dapat digunakan untuk memahami dan mendokumentasikan setiap sistem informasi. Penggunaan UML dalam industri terus meningkat. Ini merupakan standar terbuka yang menjadikannya sebagai bahasa pemodelan yang umum dalam industri peranti lunak dan pengembangan sistem.

UML

Sampai era tahun 1990 puluhan metodologi pemodelan berorientasi objek telah bermunculan di dunia.Diantaranya adalah: metodologi booch, metodologi coad, metodologi OOSE, metodologi OMT, metodologi shlaer-mellor, metodologi wirfs-brock, dsb. Masa itu terkenal dengan masa perang metodologi (method war) dalam pendesainan berorientasi objek. Masing-masing metodologi membawa notasi sendiri-sendiri, yang mengakibatkan timbul masalah baru apabila kita bekerjasama dengan kelompok/perusahaan lain yang menggunakan metodologi yang berlainan.
Dimulai pada bulan Oktober 1994 Booch, Rumbaugh dan Jacobson, yang merupakan tiga tokoh yang boleh dikata metodologinya banyak digunakan mempelopori usaha untuk penyatuan metodologi pendesainan berorientasi objek. Pada tahun 1995 direlease draft pertama dari UML (versi 0.8). Sejak tahun 1996 pengembangan tersebut dikoordinasikan oleh Object Management Group

Diagram UML

UML menyediakan 10 macam diagram untuk memodelkan aplikasi berorientasi objek, yaitu:
Use Case Diagram untuk memodelkan proses bisnis.
Conceptual Diagram untuk memodelkan konsep-konsep yang ada di dalam aplikasi.
Sequence Diagram untuk memodelkan pengiriman pesan (message) antar objects.
Collaboration Diagram untuk memodelkan interaksi antar objects.
State Diagram untuk memodelkan perilaku objects di dalam sistem.
Activity Diagram untuk memodelkan perilaku Use Cases dan objects di dalam system.
Class Diagram untuk memodelkan struktur kelas.
Object Diagram untuk memodelkan struktur object.
Component Diagram untuk memodelkan komponen object.
Deployment Diagram untuk memodelkan distribusi aplikasi.

Berikut akan dijelaskan 4 macam diagram yang paling sering digunakan dalam pembangunan aplikasi berorientasi object, yaitu use case diagram, sequence diagram, collaboration diagram, dan class diagram.

Use Case Diagram 
Use case diagram digunakan untuk memodelkan bisnis proses berdasarkan perspektif pengguna sistem. Use case diagram terdiri atas diagram untuk use case dan actor. Actor merepresentasikan orang yang akan mengoperasikan atau orang yang behhhrinteraksi dengan sistem aplikasi.
Use case merepresentasikan operasi-operasi yang dilakukan oleh actor. Use case digambarkan berbentuk elips dengan nama operasi dituliskan di dalamnya. Actor yang melakukan operasi dihubungkan dengan garis lurus ke use case.

Sequence Diagram 
Sequence diagram menjelaskan secara detail urutan proses yang dilakukan dalam sistem untuk mencapai tujuan dari use case: interaksi yang terjadi antar class, operasi apa saja yang terlibat, urutan antar operasi, dan informasi yang diperlukan oleh masing-masing operasi.

Collaboration Diagram 
Collaboration diagram dipakai untuk memodelkan interaksi antar object di dalam sistem. Berbeda dengan sequence diagram yang lebih menonjolkan kronologis dari operasi-operasi yang dilakukan, collaboration diagram lebih fokus pada pemahaman atas keseluruhan operasi yang dilakukan oleh object.

Class Diagram 
Class diagram merupakan diagram yang selalu ada di permodelan sistem berorientasi objek.Class diagram menunjukkan hubungan antar class dalam sistem yang sedang dibangun dan bagaimana mereka saling berkolaborasi untuk mencapai suatu tujuan

COBRA

Common Object Request Broker Architecture (CORBA) 
adalah teknologi yang dipergunakan untuk heterogeneous computing (sistem komputer dengan berbagai macam
lingkungan). CORBA pada dasarnya menggunakan arsitektur client-server dimana klien dan server berupa objek. CORBA mendukung apa yang disebut interoperabilitas, yaitu kemampuan saling bekerjasama antar sistem computer.

CORBA berbeda dengan RMI, berikut perbedaan CORBA dengan RMI:
CORBA adalah dapat diimplementasikan dengan sembarang bahasa pemrograman.
CORBA terdiri dari beberapa mekanisme dimana RMI dapat termasuk di dalamnya.
Pada RMI tidak menggunakan ORB (Object Request Broker).

Kenapa ada CORBA?
Dapat menangani keberagaman lingkungan antara klien dan server (dapat diimplementasikan pada bahasa pemrograman yang berbeda). Hal ini karena CORBA menggunakan apa yang disebut antarmuka (interface) untuk menjembatani dua buah lingkungan yang berbeda.

Object Request Broker (ORB) merupakan inti dari CORBA dan bertanggung jawab untuk menjalankan semua mekanisme yang dibutuhkan, yaitu:
Menemukan implementasi objek untuk memenuhi suatu request
Menyiapkan implementasi objek untuk menerima suatu request
Melakukan komunkasi data untuk memenuhi suatu request
Sebuah permintaan (request) yang dikirimkan suatu client ke suatu object implementation akan melewati ORB. Dengan ORB, yang terdiri dari interface, suatu client dapat berkomunikasi dengan object implementation tanpa adanya batasan platform, teknologi jaringan, bahasa pemrograman, dan letak objek. Dengan menggunakan ORB, objek client bisa meminta sebuah method pada sebuah object server yang bisa saja terdapat dalam satu mesin maupun jaringan yang berbeda. ORB menerima panggilan dan menemukan objek yang bisa mengimplementasikan permintaan, mengirim parameter, invoke method, dan mengembalikan hasil yang diperoleh.

Objek-objek CORBA dispesifikasikan menggunakan interface, yang merupakan penghubung anatara client dan server. Interface Definition Language (IDL) digunakan untuk mendefinisikan interface tersebut. IDL menentukan tipe-tipe suatu objek dengan mendefinisikan interface-interface objek tersebut. Sebuah interface terdiri dari kumpulan operasi dan parameter operasi tersebut. IDL hanya mendeskripsikan interface, tidak mengimplementasikannya. Meskipun sintaks yang dimiliki oleh IDL menyerupai sintaks bahasa pemrograman C++ dan Java., perlu diingat, IDL bukan bahasa pemrograman.

CORBA mendefinisikan IIOP (Internet Inter-ORB Protocol) untuk mengatur bagaimana objek berkomunikasi melalui jaringan. IIOP merupakan open protocol yang berjalan diatas TCP/IP.

Pada Java, CORBA merupakan pelengkap untuk menyediakan framework distribusi objek, services pendukung framework itu, dan kemampuan antar operasi dengan bahasa pemrograman lainnya. CORBA untuk client-server menggunakan protokol IIOP (Internet InterORB Protocol) untuk komunikasi antara server dan klien.


Skeletons adalah bagian kode yang dibangin pada kode implementasi server pada antarmuka (interface). Stub adalah bagian kode yang membuat antarmuka (interface) dapat diakse (available) oleh klien.

Java menyediakan ORB (Object Request Broker) yang mendukung teknologi CORBA. ORB adalah komponen runtime yang dapat digunakan untuk distributed computing menggunakan komunikasi IIOP. OMG (Object Management Group) adalah industri yang membuat spesifikasi dan mempublikasikan CORBA.

Java IDL (Interface Definition Langauge) merupakan sebuah teknologi untuk distribusi
objek yang berinteraksi antar platform. CORBA menggunakan IDL untuk membuat antarmuka (interface). Java IDL adalah implementasi dari teknologi antarmuka pada CORBA. Model pemrograman IDL atau biasa disebut Java IDL terdiri dari ORB CORBA dan kompiler idlj yang memetakan OMG IDL ke Java dengan menggunakan Java CORBA ORB. Aplikasi CORBA dibuat dengan menggunakan IDL untuk mendefinisikan antarmuka objek agar dapat diakses oleh klien maupun server.

probabilitas

Sebelum Anda melakukan trading yang sebenarnya, ada baiknya bila kita membahas masalah probabilitas secara lebih mendalam sekali lagi guna memaksimalkan teknik Anda di dalam melakukan trading.
Pada bab sebelumnya telah diberikan illustrasi kasus mengenai probabilitas dengan pelemparan koin secara acak untuk mendapatkan suatu data statistik tentang kemungkinan muka koin yang akan muncul di tangan kita. Apakah kita akan mendapatkan sisi koin yang bergambar atau sisi koin yang menunjukkan angka.
Pada pelemparan koin, kita hanya akan mendapatkan 2 kemungkinan atas apa yang kita lakukan terhadap koin tersebut, yaitu gambar atau angka.
Di dalam pendekatan statistik, probabilitas yang akan kita dapatkan adalah sama. Bila Anda melempar koin tersebut, Anda dapat mencatat berapa kali muncul gambar dan berapa kali muncul angka. Dari catatan yang Anda dapatkan mungkin Anda akan merasa bahwa eksperimen yang Anda lakukan merupakan suatu bentuk perjudian sederhana. Namun demikian apa yang Anda lakukan tersebut merupakan suatu eksperimen yang baik tentang probabilitas.
Jika Anda melakukan eksperimen pelemparan koin, misalkan saja, sebanyak 10 kali, maka berikut adalah kemungkinan data berapa kali sisi gambar akan muncul dan berapa kali sisi angka akan muncul:
Gambar
Angka
10
0
9
1
8
2
7
3
6
4
5
5
4
6
3
7
2
8
1
9
0
10
Dari tabel di atas, menurut Anda. manakah sisi koin yang paling berpeluang muncul dari pelemparan koin sebanyak 10 kali? Sekarang coba Anda amati tibel di atas. Di situ nampak bahwa kita akan mendapatkan suatu kombinasi probabilitas yang sama antara peluang munculnya sisi gambar dan sisi angka.
Jika Anda ingin menguji sekali lagi apa yang telah Anda lakukan dengan meminta tolong orang lain untuk melakukan hal yang sama seperti yang Anda lakukan, cobalah Anda bandingkan antara data yang Anda dapatkan dengan data yang didapatkan orang tersebut. Apakah Anda mendapatkan hasii yang sama?
Pertanyaan di atas adalah harus Anda kemukakan ketika Anda ingin mempelajari lebih lanjut tentang probabilitas. Kita akan membahas bersama untuk mengkaji lebih lanjut tentang probabilitas ini.
Ketika Anda melakukan pelemparan koin tersebut sebanyak 1 kali, atau sebanyak 10 kali, maka jawaban yang akan kita dapatkan tentang probabilitas adalah sama, karena masing-masing sisi koin memiliki peluang yang sama, untuk muncul. Dengan kondisi ini kita telah mendapatkan suatu prediksi tentang probabilitas sisi koin mana yang akan muncul. Jika misalnya koin tersebut cacat sehingga pada saat kita lemparkan ternyata sisi tertentu dari koin menjadi lebih sering muncul maka kita akan kesulitan untuk melakukan prediksi. Sekilas hal ini tampak aneh dan kontradiktif, karena dengan adanya cacat pada koin maka kita harus mempelajari perilaku atau karakter dari koin yang cacat itu. Jika kita melemparkan koin cacat tersebut sebanyak 1000 kali, misalnya, maka bisa jadi kita akan mendapatkan sisi gambar muncul sebanyak 700 kali dibanding sisi angka sebanyak 300 kali. Jika hal itu yang terjadi maka biasanya kita akan segera berkesimpulan bahwa kita dengan mudah dapat memprediksikan hasil pelemparan koin cacat tersebut, meskipun kenyataan tidaklah demikian. Sekali lagi kita harus mengerti dan memahami karakter dari koin cacat tersebut sebelum kita melakukan prediksi dan itu tidak semudah jika kita melakukannya terhadap koin yang tidak cacat.
Dari uji coba pelemparan koin di atas kita mencatat bahwa hasil dari setiap pelemparan koin merupakan suatu peristiwa independen. Tidak ada faktor apapun yang mempengaruihi hasil dari uji pelemparan koin. Berapa kalipun Anda melakukan uji pelemparan, angka probabilitas sisi koin mana yang akan muncul adalah sama. Koin tersebut tidak akan “mengingat” hasil akhir pelemparan sebelumnya. Juga tidak bisa ditentukan sisi mana yang akan muncul pada pelemparan berikutnya. Ini adalah suatu peristiwa yang benar-benar independen.
Akan lain halnya jika kita mengambil suatu contoh kasus lain tentang peristiwa uji coba yang bersifat tidak independen. Katakanlah kita melakukan uji coba terhadap 20 biji kelereng, 19 kelereng berwarna hijau dan hanya 1 yang berwarna merah, dengan ukuran dan berat yang benar-benar sempurna sama. Ketika kita memasukkan semua kelereng tersebut ke dalam sebuah toples lalu kita mencoba mengambil kelereng berwarna merah dengan mata tertutup, berapakah probabilitas keberhasilan kita untuk mendapatkan kelereng merah tersebut? Ketika Anda mulai mengambil kelereng merah tersebut, angka probabilitas yang kita hadapi adalah 1 banding 20. Pada pengambilan pertama bisa jadi kita akan gagal dan kemudian kita mencoba lagi. Kali ini dengan perbandingan 1 banding 19 kerena jumlah kelereng sudah berkurang satu.
Jika kita terus mencoba untuk mengambil kelerengmerah dengan cara yang sama, dan ketika Anda berhasil mengambil kelereng merah sementara yang masih tersisa hanya beberapa biji kelereng hijau, maka permainan telah berakhir. Namun jika Anda gagal dan Anda tidak mengganti kelereng hijau yang terambil dengan kelereng berwama merah maka probabilitasnya adalah sama. Kecuali jika Anda melanjutkan pengambilan kelereng tersebut hingga jumlah kelereng di dalam toples tersebut terus berkurang hingga akhimya menyisakan satu kelereng saja. Dalam hal demikian bukanlah probabilitas lagi yang berlaku, namun sebuah kepastian.
Contoh kasus ini, jika kita bandingkan dengan uji pelemparan koin, sangatlah berbeda kondisinya. Uji pelemparan koin adalah suatu bentuk uji coba yang bersifat independen event dan tidak didasarkan atas suatu kepastian. Dari pembahasan ini saya berharap Anda sudah mendapatkan gambaran yang jelas tentang probabilitas.

Multi Threading dan Multiplexing

Dalam ilmu komputer , sebuah thread eksekusi adalah urutan terkecil instruksi diprogram yang dapat dikelola secara independen oleh sistem operasi scheduler . Sebuah thread adalah proses ringan . Pelaksanaan benang dan proses berbeda dari satu sistem operasi yang lain, tetapi dalam banyak kasus, thread yang terkandung di dalam proses. Beberapa benang bisa ada dalam proses yang sama dan berbagi sumber daya seperti memori , sedangkan berbeda proses tidak berbagi sumber daya tersebut. Secara khusus, benang-benang proses berbagi petunjuk yang terakhir (kode) dan konteksnya (nilai-nilai yang variabel yang referensi pada saat tertentu).
Pada prosesor tunggal, multithreading umumnya terjadi oleh time-division multiplexing (seperti dalam multitasking ): dengan prosesor switch antara benang yang berbeda. Ini switching konteks umumnya terjadi cukup sering bahwa pengguna merasakan benang atau tugas sebagai berjalan pada waktu yang sama. Pada multiprosesor atau multi-core sistem, benang dapat benar-benar bersamaan, dengan setiap prosesor atau inti mengeksekusi thread terpisah secara bersamaan.
Banyak sistem operasi modern langsung mendukung baik waktu-iris dan multiprosesor threading dengan scheduler proses. The kernel dari sistem operasi memungkinkan programmer untuk memanipulasi benang melalui system call interface. Beberapa implementasi yang disebut kernel thread, sedangkan proses ringan (LWP) adalah jenis spesifik kernel thread yang berbagi negara dan informasi yang sama.
Program dapat memiliki benang user-space ketika threading dengan timer, sinyal, atau metode lain untuk menghentikan eksekusi mereka sendiri, melakukan semacam ad-hoc waktu mengiris .

Thread berbeda dari tradisional multitasking proses sistem operasi dalam hal:
proses biasanya independen, sedangkan benang ada sebagai subset dari sebuah proses
proses membawa jauh lebih negara informasi dari benang, sedangkan beberapa thread dalam proses berbagi proses negara serta memori dan lainnya sumber daya
proses memiliki terpisah ruang alamat , sedangkan benang berbagi ruang alamat mereka
proses berinteraksi hanya melalui disediakan sistem komunikasi antar-proses mekanisme
konteks beralih antara benang dalam proses yang sama biasanya lebih cepat daripada konteks beralih antara proses.

Multithreading

Multi-threading adalah pemrograman meluas dan eksekusi model yang memungkinkan beberapa thread untuk tetap eksis dalam konteks sebuah proses tunggal. Benang ini berbagi sumber daya proses, tetapi mampu melakukan secara mandiri. Model threaded menyediakan pengembang dengan abstraksi yang berguna eksekusi konkuren. Namun, mungkin aplikasi yang paling menarik dari teknologi ini bila diterapkan pada proses tunggal untuk memungkinkan eksekusi paralel pada sistem multiprocessing.
Ini keuntungan dari program multithreaded memungkinkan untuk beroperasi lebih cepat pada sistem komputer yang memiliki beberapa CPU , CPU dengan beberapa core, atau melintasi sekelompok mesin - karena benang dari program alami meminjamkan diri untuk benar-benar bersamaan eksekusi . Dalam kasus seperti itu, programmer perlu berhati-hati untuk menghindari kondisi ras , dan perilaku non-intuitif lainnya. Agar data yang akan dimanipulasi dengan benar, benang akan sering perlu untuk pertemuan dalam waktu untuk memproses data dalam urutan yang benar. Thread mungkin juga memerlukan saling eksklusif operasi (sering diimplementasikan menggunakan Semaphore ) untuk mencegah data umum dari yang bersamaan dimodifikasi, atau membaca sementara dalam proses modifikasi. Penggunaan ceroboh primitif tersebut dapat menyebabkan deadlock .
Penggunaan lain multithreading, berlaku bahkan untuk sistem single-CPU, adalah kemampuan untuk sebuah aplikasi untuk tetap responsif terhadap masukan. Dalam program single-threaded, jika blok utama benang eksekusi pada tugas lama berjalan, seluruh aplikasi dapat muncul untuk membekukan. Dengan memindahkan tugas berjalan lama tersebut kepada pekerja thread yang berjalan bersamaan dengan eksekusi thread utama, adalah mungkin untuk aplikasi tetap responsif terhadap input pengguna ketika menjalankan tugas di latar belakang. Di sisi lain, dalam banyak kasus multithreading bukan satu-satunya cara untuk menjaga program responsif, dengan non-blocking I / O dan / atau sinyal Unix yang tersedia untuk mendapatkan hasil yang sama. [1]
Sistem operasi menjadwalkan thread di salah satu dari dua cara:
Preemptive multitasking umumnya dianggap pendekatan unggul, karena memungkinkan sistem operasi untuk menentukan kapan beralih konteks harus terjadi. Kerugian untuk multithreading preemptive adalah bahwa sistem dapat membuat context switch pada waktu yang tepat, menyebabkan kunci konvoi , prioritas inversi atau efek negatif lainnya yang dapat dihindari dengan multithreading koperasi.
Multithreading Koperasi, di sisi lain, bergantung pada benang sendiri untuk melepaskan kontrol setelah mereka berada pada titik berhenti. Hal ini dapat menciptakan masalah jika thread sedang menunggu sumber daya untuk menjadi tersedia.
Sampai akhir 1990-an, CPU dalam komputer desktop tidak memiliki banyak dukungan untuk multithreading, meskipun benang masih digunakan pada komputer tersebut karena beralih antara benang itu umumnya masih lebih cepat daripada proses penuh konteks switch . Prosesor di embedded system , yang memiliki persyaratan yang lebih tinggi untuk real-time perilaku, mungkin mendukung multithreading dengan mengurangi waktu benang-switch, mungkin dengan mengalokasikan dedicated register file untuk setiap thread bukan menyimpan / mengembalikan register file umum. Pada akhir 1990-an, ide melaksanakan instruksi dari beberapa thread secara simultan, yang dikenal sebagai multithreading simultan , telah mencapai desktop dengan Intel 's Pentium 4 prosesor, di bawah nama hiper threading . Telah turun dari Intel Core dan Core 2 arsitektur, tetapi kemudian kembali instated di Core I3 , Core i5 dan i7 arsitektur.

Proses, kernel thread, thread pengguna, dan serat

Artikel utama: Proses (komputasi) dan Serat (ilmu komputer)
Sebuah proses adalah "terberat" unit penjadwalan kernel. Proses sudah memiliki sumber daya yang dialokasikan oleh sistem operasi. Sumber daya termasuk memori, menangani file , soket, perangkat menangani, dan jendela. Proses tidak berbagi ruang alamat atau file sumber daya kecuali melalui metode eksplisit seperti mewarisi menangani file atau segmen memori bersama, atau pemetaan file yang sama dengan cara berbagi. Proses biasanya preemptively multitasked.
Suatu kernel thread adalah "ringan" unit penjadwalan kernel. Setidaknya satu thread kernel ada dalam setiap proses. Jika beberapa thread kernel bisa ada dalam proses, maka mereka berbagi memori yang sama dan sumber daya berkas. Kernel thread yang preemptively multitasked jika sistem operasi proses scheduler adalah preemptive. Kernel thread tidak sumber daya sendiri kecuali tumpukan , salinan register termasuk program counter , dan penyimpanan thread-lokal (jika ada). Kernel dapat menetapkan satu thread untuk masing-masing inti logis dalam sistem (karena setiap prosesor membagi dirinya menjadi beberapa logical core jika mendukung multithreading, atau hanya mendukung satu inti logis per core fisik jika tidak mendukung multithreading), dan dapat menukar benang yang bisa diblokir. Namun, benang kernel memakan waktu lebih lama daripada benang pengguna untuk ditukarkan.
Thread kadang-kadang diimplementasikan dalam userspace perpustakaan, sehingga disebut benang pengguna. Kernel tidak menyadari dari mereka, sehingga mereka dikelola dan dijadwalkan di userspace . Beberapa basis implementasi thread pengguna mereka di atas beberapa thread kernel untuk mendapatkan keuntungan dari multi-prosesor mesin ( M: Model N ). Dalam artikel ini istilah "benang" (tanpa kernel atau petunjuk kualifikasi) defaultnya mengacu pada kernel thread. Benang pengguna seperti yang diterapkan oleh mesin virtual juga disebut benang hijau . Benang Pengguna umumnya cepat untuk membuat dan mengelola, tetapi tidak dapat memanfaatkan multithreading atau multiprocessing dan mendapatkan diblokir jika semua yang terkait thread kernel mereka mendapatkan diblokir bahkan jika ada beberapa thread pengguna yang siap dijalankan.
Serat adalah unit bahkan lebih ringan dari penjadwalan yang kooperatif dijadwalkan : serat berjalan secara eksplisit harus "menyerah" untuk memungkinkan serat lain untuk menjalankan, yang membuat pelaksanaannya jauh lebih mudah daripada kernel atau petunjuk benang. Sebuah serat dapat dijadwalkan untuk berjalan di thread apapun dalam proses yang sama. Hal ini memungkinkan aplikasi untuk mendapatkan peningkatan kinerja dengan mengelola penjadwalan sendiri, bukan mengandalkan pada scheduler kernel (yang mungkin tidak disetel untuk aplikasi). Lingkungan pemrograman paralel seperti OpenMP biasanya menerapkan tugas mereka melalui serat. Terkait erat dengan serat yang coroutines , dengan perbedaan adalah bahwa coroutines adalah membangun bahasa tingkat, sementara serat adalah sistem tingkat membangun.

Thread dan serat isu

Concurrency dan struktur data

Thread dalam proses yang sama berbagi ruang alamat yang sama. Hal ini memungkinkan bersamaan menjalankan kode untuk pasangan erat dan nyaman pertukaran data tanpa overhead atau kompleksitas dari IPC . Bila dibagi antara benang, bagaimanapun, struktur data sederhana bahkan menjadi rentan terhadap bahaya ras jika mereka membutuhkan lebih dari satu instruksi CPU untuk memperbarui: dua benang mungkin berakhir mencoba untuk memperbarui struktur data pada waktu yang sama dan merasa tiba-tiba berubah di bawah kaki. Bugs yang disebabkan oleh bahaya ras bisa sangat sulit untuk mereproduksi dan mengisolasi.
Untuk mencegah hal ini, threading API menawarkan sinkronisasi primitif seperti mutexes untuk mengunci struktur data terhadap akses konkuren. Pada sistem prosesor tunggal, benang berlari ke mutex terkunci harus tidur dan karenanya memicu context switch. Pada sistem multi-prosesor, benang mungkin bukan polling mutex dalam spinlock . Kedua mungkin kinerja getah dan kekuatan prosesor di SMP sistem untuk bersaing untuk bus memori, terutama jika granularity penguncian baik-baik saja.

I / O dan penjadwalan

Benang atau serat pengguna implementasi biasanya sepenuhnya dalam userspace . Akibatnya, konteks beralih antara benang pengguna atau serat dalam proses yang sama ini sangat efisien karena tidak memerlukan interaksi dengan kernel sama sekali: context switch dapat dilakukan dengan lokal menyimpan CPU register yang digunakan oleh thread pengguna yang sedang dijalankan atau serat dan kemudian memuat register yang dibutuhkan oleh thread pengguna atau serat akan dieksekusi. Sejak penjadwalan terjadi di userspace, kebijakan penjadwalan dapat lebih mudah disesuaikan dengan kebutuhan beban kerja program.
Namun, penggunaan sistem memblokir panggilan di thread user (sebagai lawan kernel thread) atau serat dapat menjadi masalah. Jika thread pengguna atau serat melakukan panggilan sistem yang blok, benang pengguna lain dan serat dalam proses tidak dapat berjalan sampai kembali system call. Sebuah contoh khas dari masalah ini adalah ketika melakukan I / O: sebagian besar program yang ditulis untuk melakukan I / O serempak. Ketika operasi I / O dimulai, panggilan sistem dibuat, dan tidak kembali sampai operasi I / O telah selesai. Pada periode intervensi, seluruh proses "diblokir" oleh kernel dan tidak dapat dijalankan, yang kelaparan thread pengguna lain dan serat dalam proses yang sama dari mengeksekusi.
Sebuah solusi umum untuk masalah ini adalah menyediakan I / O API yang mengimplementasikan antarmuka sinkron dengan menggunakan non-blocking I / O internal, dan penjadwalan lain benang pengguna atau serat sementara operasi I / O sedang berlangsung. Solusi serupa dapat disediakan untuk panggilan memblokir sistem lainnya. Atau, program dapat ditulis untuk menghindari penggunaan sinkron I / O atau panggilan memblokir sistem lainnya.
SunOS 4.x diimplementasikan " proses ringan "atau LWPs. NetBSD 2.x +, dan DragonFly BSD menerapkan LWPs sebagai thread kernel (Model 1:1). SunOS 5.2 melalui SunOS 5.8 serta NetBSD NetBSD 2 sampai 4 menerapkan model tingkat dua, multiplexing satu atau lebih benang level pengguna pada setiap thread kernel (M: Model N). SunOS 5.9 dan kemudian, serta NetBSD 5 dieliminasi pengguna dukungan benang, kembali ke model 1:1. [1] FreeBSD 5 diimplementasikan M: Model N. FreeBSD 6 mendukung kedua 1:1 dan M: N, pengguna bisa memilih mana yang harus digunakan dengan program yang diberikan dengan menggunakan / etc / libmap.conf. Dimulai dengan FreeBSD 7, 1:1 menjadi default. FreeBSD 8 tidak lagi mendukung M: Model N.
Penggunaan benang kernel menyederhanakan kode pengguna dengan memindahkan beberapa aspek yang paling kompleks threading ke dalam kernel. Program ini tidak perlu menjadwalkan benang atau eksplisit menghasilkan prosesor. Kode pengguna dapat ditulis dalam gaya prosedural akrab, termasuk panggilan untuk memblokir API, tanpa kelaparan benang lain. Namun, kernel threading mungkin memaksa konteks beralih antara benang setiap saat, dan dengan demikian mengekspos bahaya ras dan concurrency bug yang dinyatakan akan berbohong laten. Pada sistem SMP, ini lebih diperparah karena kernel thread dapat harfiah mengeksekusi secara bersamaan pada prosesor yang terpisah.

Model

01:01 (Kernel-level threading)
Thread yang dibuat oleh pengguna dalam korespondensi 1-1 dengan entitas schedulable di kernel. Ini adalah sederhana kemungkinan pelaksanaan threading. Win32 menggunakan pendekatan ini dari awal. Pada Linux , yang C library yang biasa menerapkan pendekatan ini (melalui NPTL atau lebih LinuxThreads ). Pendekatan yang sama digunakan oleh Solaris , NetBSD dan FreeBSD .
[ sunting ]N: 1 (User-level threading)
Sebuah N: 1 Model menyiratkan bahwa semua benang level aplikasi peta ke level kernel dijadwalkan entitas tunggal, kernel tidak memiliki pengetahuan tentang benang aplikasi. Dengan pendekatan ini, switching konteks dapat dilakukan dengan sangat cepat dan, di samping itu dapat diimplementasikan bahkan pada kernel sederhana yang tidak mendukung threading. Salah satu kelemahan utama bagaimanapun adalah bahwa ia tidak bisa mendapatkan keuntungan dari akselerasi hardware pada multi-threaded prosesor atau multi-prosesor komputer: tidak pernah lebih dari satu thread yang dijadwalkan pada waktu yang sama. Misalnya: Jika salah satu benang perlu mengeksekusi permintaan I / O, seluruh proses akan diblokir dan keuntungan threading tidak dapat dimanfaatkan. The GNU Portabel Thread menggunakan User-level threading, seperti halnya Thread Negara .

M: N (Hybrid threading)

M: N peta beberapa nomor M benang aplikasi ke beberapa nomor N entitas kernel, atau "prosesor virtual." Ini adalah kompromi antara kernel-level ("01:01") dan user-level ("N: 1") threading. Secara umum, "M: N" sistem threading lebih kompleks untuk diterapkan daripada baik kernel atau benang pengguna, karena perubahan baik kernel dan kode user-space yang diperlukan. Dalam M: N pelaksanaan, perpustakaan threading bertanggung jawab untuk penjadwalan thread pengguna pada entitas schedulable tersedia, ini membuat konteks switching benang yang sangat cepat, karena menghindari panggilan sistem. Namun, ini meningkatkan kompleksitas dan kemungkinan inversi prioritas , serta penjadwalan suboptimal tanpa ekstensif (dan mahal) koordinasi antara scheduler userland dan scheduler kernel.

contoh implementasi Hybrid

Scheduler aktivasi yang digunakan oleh NetBSD asli POSIX thread implementasi perpustakaan (sebuah M: Model N sebagai lawan kernel 1:1 atau model implementasi userspace)
Marcel dari PM2 proyek.
OS untuk Tera / Cray MTA
Microsoft Windows 7

contoh implementasi Fiber

Serat dapat dilaksanakan tanpa dukungan sistem operasi, meskipun beberapa sistem operasi atau perpustakaan memberikan dukungan eksplisit untuk mereka.
Win32 API memasok serat [3] (Windows NT 3.51 SP3 dan kemudian)
Ruby sebagai benang Hijau
Netscape Portabel Runtime (termasuk implementasi serat user-space)

Pemrograman dukungan bahasa

Banyak bahasa pemrograman mendukung threading dalam beberapa kapasitas. Banyak implementasi dari C dan C + + memberikan dukungan untuk threading sendiri, tetapi juga memberikan akses ke threading API asli yang disediakan oleh sistem operasi. Beberapa tingkat yang lebih tinggi (dan biasanya lintas platform) bahasa pemrograman seperti Java, Python, dan NET., Mengekspos threading untuk pengembang sedangkan abstrak perbedaan spesifik platform dalam implementasi threading di runtime untuk pengembang. Sejumlah bahasa pemrograman lain juga mencoba abstrak konsep concurrency dan threading dari pengembang sama sekali ( Cilk , OpenMP , MPI ). Beberapa bahasa yang dirancang untuk paralelisme (Ateji PX, CUDA ).
Beberapa bahasa pemrograman ditafsirkan seperti Ruby dan (pelaksanaan CPython dari) Python dukungan threading, tetapi memiliki keterbatasan yang dikenal sebagai Juru Kunci global (GIL). GIL merupakan kunci saling pengecualian diselenggarakan oleh interpreter yang dapat mencegah penafsir dari bersamaan menafsirkan aplikasi kode pada dua atau lebih benang pada saat yang sama, yang secara efektif membatasi concurrency pada beberapa sistem inti (sebagian besar untuk benang prosesor-terikat, dan tidak banyak untuk yang network-bound).
Pemrograman event-driven bahasa deskripsi hardware seperti Verilog memiliki model threading berbeda yang mendukung sangat besar jumlah benang (untuk modeling hardware).