Selasa, 22 Oktober 2013

Kotak Hitam

Versi ramah cetakVersi ramah cetak
Subrutin terdiri dari beberapa instruksi yang melakukan suatu tugas tertentu, dikumpulkan dalam satu himpunan, dan diberi nama. Kumpulan instruksi ini bisa berupa suatu "tugas" yang cukup kompleks yang disatukan sebagai konsep. Dengan cara ini, kita tidak perlu lagi memikirkan bagaimana komputer melakukan tugas hingga sedetail mungkin. Kita hanya perlu memanggil nama subrutin tersebut untuk menjalankan suatu "tugas".
Subrutin sering juga disebut dengan kotak hitam (atau black box) karena kita tidak perlu (atau tidak mau tahu) secara detail apa yang subrutin tersebut lakukan. Kita hanya ingin tahu hubungan kotak hitam tersebut dengan dunia luar. Hubungan ini disebutantar muka (interface). Di kotak itu mungkin ada tombol yang bisa kita tekan, ada keyboard yang bisa kita ketik, atau mungkin ada jendela untuk memberi dan mengambil informasi dari dalamnya.
Karena kita bermaksud untuk menyembunyikan kompleksitas (dalam hal ini program yang akan kita buat), ada beberapa prinsip penting dari suatu kotak hitam :
Antar muka harus sederhana, jelas, tak berbelit-belit, dan mudah dimengerti.
Apa contoh kotak hitam di sekitar kita? Sebetulnya banyak, misalnya TV, handphone, DVD player, MP3 player, kulkas, AC, dan sebagainya. Kita bisa menyalakan TV, mengganti channel, menaikkan dan menurunkan volume dengan mudah tanpa harus mengetahui bagaimana TV bekerja. Sama halnya dengan AC, Anda cukup menekan tombol, menaikkan dan menurunkan temperatur tanpa harus mengerti bagaimana AC bekerja.
Sekarang mari kita lihat bagian dalam dari kotak hitam. Bagaimana AC atau TV bekerja disebut dengan implementasi. Aturan kedua dari suatu kotak hitam adalah :
Untuk menggunakan kotak hitam, kita tidak perlu mengetahui tentang implementasi. Yang kita butuh adalah antar muka.
Sebetulnya kita bisa mengganti implementasi selama apa yang dihasilkan dan apa yang diminta tetap sama. Atau dengan kata lain, perilakunya tidak berubah. Misalnya dulu TV menggunakan tabung hampa, tetapi sekarang menggunakan transistor. Tetapi perubahan implementasi (dari tabung hampa ke transistor) tidak mengubah bagaimana TV dioperasikan dan apa yang kita lihat di TV. Seperti halnya dengan program, kita bisa mengubah implementasi suatu subrutin, misalnya mengoptimasi subrutin tersebut agar lebih cepat, tanpa mengubah perilaku program secara keseluruhan, dan tanpa mengubah perilaku fungsi lain yang memanggil subrutin tersebut.
Tentunya untuk membuat kotak hitam, kita perlu mengetahui detail tentang implementasinya. Kotak hitam digunakan untuk membantu baik si pembuat kotak hitam maupun penggunanya. Pada akhirnya, kotak hitam tersebut akan digunakan dalam bermacam-macam situasi. Orang yang membuat kotak hitam ini tidak perlu mengerti bagaimana kotaknya akan digunakan. Pembuatnya hanya menjamin bahwa kotak yang dibuat harus bekerja sesuai dengan yang diharapkan. Aturan ketiga dari kotak hitam :
Pembuat (implementor) kotak hitam tidak perlu tahu bagaimana kotak hitam itu akan digunakan.
Dengan kata lain, kotak hitam membagi dunia menjadi 2 bagian, yaitu bagian luar, untuk apa ia digunakan, dan bagian dalam, yaitu detail bagaimana ia bekerja.
Antar muka kotak hitam tidak melulu harus berupa koneksi fisik antara kotak hitam dengan dunia luar. Antar muka bisa juga berupa spesifikasi yang menjelaskan apa yang dilakukan kotak hitam tersebut, dan perilakunya terhadap input yang diterimanya. Tidak cukup untuk menyebutkan bahwa TV membutuhkan colokan kabel, tetapi harus disebutkan bahwa colokan kabel digunakan untuk menyambung aliran listrik ke TV supaya TV bisa dinyalakan.
Dalam bahasa pemrograman, antar muka dari suatu subrutin harus terdiri dari komponen sintaks dan semantik. Bagian sintaks dari subrutin mengandung penjelasan tentang apa yang harus diketik untuk memanggil subrutin tersebut. Dan bagian semantik menjelaskan bagaimana secara khusus apa yang akan dikerjakan oleh subrutin tersebut. Untuk menulis program yang benar, kita harus mengetahui spesifikasi sintaks dari subrutin tersebut. Untuk mengerti dan bisa menggunakan subrutin tersebut seefektif mungkin, kita harus mengetahui spesifikasi semantiknya. Kedua bagian dari subrutin tersebut bisa disebut sebagaikontrak subrutin.
Kontrak subrutin bisa dijelaskan seperti "Ini yang harus Anda lakukan untuk menggunakan saya, dan ini yang akan saya lakukan untuk Anda". Ketika kita menulis subrutin, komentar yang kita tulis untuk menjelaskan subrutin itu harus memuat kontrak subrutin tersebut. Kadang kala kontrak ini seringkali tidak dituliskan dengan benar, sehingga programmer yang menggunakannya harus menerka apa yang akan dilakukan. Tentu saja ini tidak efisien dan menghabiskan banyak waktu apabila kita harus menerka semua subrutin yang terdapat dalam bahasa pemrograman.

Tidak ada komentar:

Posting Komentar