Mewujudkan Science Fiction

November 16, 2007 at 1:28 pm (BeLaJar)

Jadi tak ada udara di Bulan? Lalu siapa yang akan membuktikannya? Para ilmuwan

Jules Verne, bapak karya fiksi ilmiah, membuat dialog itu sebagai awal dibangunnya kanon raksasa yang menembakkan proyektil berpenumpang menuju Bulan, dalam From the Earth to the Moon (1865).

Imajinasi Verne tidak selalu tepat, bahkan kadang berlawanan dengan kenyataan. Ilmuwan masa kini, misalnya, bisa memberi tahu Verne bahwa para penjelajah di dalam proyektil itu pasti langsung mati karena tak kuat menahan akselerasi penembakan.

Namun, 100 tahun kemudian (lebih empat tahun, tepatnya 20 Juli 1969) khayalan Verne menjadi kenyataan. Teknologi yang dikembangkan National Aeronautics and Space Administration (NASA) membawa Neil Armstrong dan Edwin Aldrin sungguh-sungguh menjejakkan kaki di Bulan. Mereka diangkut dengan roket Apollo 11—bukan proyektil—yang punya mesin pendorong sendiri.

Science fiction memang sering bersimbiosis dengan dunia nyata. Bisa jadi ”the men of science” dunia nyata terilhami sang pengarang atau sebaliknya: perkembangan ilmu pengetahuanlah yang memicu imajinasi tanpa batas.

Star Wars sebagai film science fiction juga banyak berkorelasi dengan dunia nyata. Kalau Anda termasuk Star Wars mania, pastilah tak asing lagi dengan para tokoh dan teknologi film ini: dari Obi Wan Kenobi sampai Luke Skywalker. Dari robot penerjemah seperti C3PO hingga sistem komunikasi tiga dimensi.

Begitu luar biasanya dampak film ini, sampai majalah bergengsi seperti National Geographic dan saluran televisi Discovery Channel membuat bahasan khusus tentang Star Wars.

Selama 28 tahun—sejak film pertama diluncurkan 1977 hingga episode penutupan 2005—semua rekaan George Lucas dalam Star Wars, seperti senjata laser, pertahanan di antariksa, serta sistem robotik dan komunikasi, berkembang paralel dengan teknologi dunia nyata.

Konsep pertahanan udara Amerika Serikat zaman perang dingin yang dijuluki ”Star Wars” sebagai contoh, kini dirancang ulang Pentagon agar bisa memantau peluncuran rudal dari orbit, menembak rudal dengan interceptor, atau menyerang musuh dengan sinar laser. Staf Presiden George W Bush bahkan sudah membahas upaya persenjataan yang lebih agresif di antariksa.

Diperkecil skalanya

Namun, rancangan Pentagon sebenarnya tak pernah semaju versi ”Star Wars” era perang dingin. Cakupannya diperkecil untuk bertahan terhadap ancaman skala kecil, bukan soal kiamat seperti saat berseteru dengan Soviet.

”Pengurangan ini bukan karena kami tidak punya teknologi 20 tahun lalu seperti zaman Star Wars, tetapi lebih karena situasi dunia memang sudah berbeda,” kata pakar kebijakan pertahanan John Pike, Direktur GlobalSecurity.org di MSNBC.com.

NASA juga mengembangkan semacam ion drive, seperti pesawat antariksa Star Wars, yaitu sublight speed travel. Dengan kecepatan sedikit di bawah kecepatan cahaya, suatu ion drive bertenaga matahari sukses digunakan NASA sebagai penggerak wahana peneliti Deep Space 1 akhir 1990-an. Akhir 2004 European Space Agency (ESA) juga memasangnya pada SMART-1 yang ke orbit Bulan.

Bedanya, dunia nyata butuh waktu berbulan-bulan untuk membangun mesin bertenaga fusi ion drive, sementara Anakin Skywalker cuma beberapa hari.

Anggota badan bionik

Seperti halnya Anakin dan Luke Skywalker, di dunia nyata anggota badan yang hilang tak lama lagi bisa diganti dengan tangan atau kaki bionik. Forbes.com mencontohkan Hugh Herr dari MIT Media Laboratory, yang mengembangkan lutut dan tungkai robotik. Perangkat ini memungkinkan pasien berjalan mendekati normal, naik turun tangga, bahkan bersepatu roda.

Peralatan Herr dengan dana 7,2 juta dollar AS dari Departemen Urusan Veteran ini sudah diuji di Brown University. Terima kasih kepada perkembangan teknologi chip yang memungkinkannya membaca sinyal-sinyal saraf dan kemudian mengirim ke jaringan otot yang tersisa.

Salah satu versi komersial lutut bionik bermerek Rheo Knee, dibuat oleh Iceland’s Ossur Therapeutics. Alat bantu ini langsung diminati para pasien yang kehilangan anggota badannya, begitu masuk pasar AS Februari lalu.

Peneliti lain mengembangkan cara mengoneksikan anggota badan bionik langsung di bawah perintah otak. Miguel Nocolelis dari Duke University telah menguji coba tangan robotik pada monyet terlatih lewat perintah chip di otaknya tanpa menggerakkan otot sama sekali.

Pesan hologram

Teknologi lain di Star Wars adalah pengiriman pesan dengan proyektor hologram tiga dimensi. Tak ada e-mail atau telepon seluler, yang saat film pertama dibuat (1977) memang belum ada. Kalaupun sudah, George Lucas mungkin tak memilihnya karena kurang futuristis.

Sebenarnya, displai tiga dimensi bukanlah barang baru di dunia nyata. Film tiga dimensi adalah contoh paling konvensional, yang sering disuguhkan di bioskop dengan kacamata khusus.

Dunia kedokteran juga sudah lama diuntungkan teknologi ini. Ada USG (ultrasonografi) tiga dimensi yang bisa membantu mendeteksi kelainan bawaan pada janin yang masih di rahim ibu. Ada juga CT scan yang bisa menghasilkan gambar hingga 24 potongan tubuh untuk melihat gangguan pada organ tubuh seperti jantung.

CT scan tiga dimensi bahkan sudah dimanfaatkan para arkeolog untuk memotret mumi raja Mesir Tutankhamen, dan kemudian menjadi dasar untuk mewujudkan wajah asli sang Firaun.

Bedanya, seperti diungkapkan Michael Halle dari bagian radiologi di Harvard Medical School, di alam nyata hologram tidak bisa dikirim begitu saja. Soalnya hologram hanya bisa eksis di permukaan datar seperti piring atau layar, padahal planet umumnya berbentuk bulat.

”Belum lagi halangan dari sinar foton di semesta, juga gaya tarik di setiap benda langit, yang bisa membuyarkan kiriman hologram tiga dimensi,” ujar Halle menjelaskan.

Pedang laser

Sama halnya dengan komunikasi hologram, sinar laser yang menjadi senjata andalan para ksatria Jedi banyak berperan dalam dunia nyata. Lagi-lagi bidang kedokteran mendapat manfaat banyak dari sinar laser ini.

Para penderita rabun jauh atau rabun dekat, misalnya, sudah lama bisa menanggalkan kacamata setelah matanya dikoreksi dengan excimer laser. Bedah laser juga membantu membuang tahi lalat, hiperpigmentasi, bahkan tato.

Ilmu pengetahuan memang telah berkembang begitu luar biasa dengan percepatan seperti deret ukur. Maka tidak seperti Jules Verne, George Lucas beruntung bisa menyaksikan imajinasinya menjadi kenyataan.

Permalink 1 Comment

SeJAraH KOmPUter

November 16, 2007 at 1:18 pm (BeLaJar)

Nah, kita sudah melihat bagaimana sejarah konsep awal komputer dimulai. Dalam tulisan ini kita akan melihat sejarah komputer modern pertama diawali. Siap ? Time machine engage….
Sejarah Komputer Elektronik Pertama

Sejarah Komputer elektronik pertama dimulai oleh ENIAC (Electronic Numerical Integrator and Computer). ENIAC adalah komputer digital serbaguna yang dibuat pada tahun 1946 oleh J. Presper Eckert dan John Mauchly. ENIAC memiliki lebih dari 18.000 tabung hampa (yang digunakan sebagai pengganti switch mekanis pada mark I) dan 1000 kali lebih cepat dibanding Mark I. Dalam 20 detik, ENIAC dapat melakukan perhitungan matematis yang sebenarnya memerlukan waktu penyelesaian 40 jam jika dilakukan secara manual oleh kita. ENIAC dibuat saat Perang Dunia II dan tugas pertamanya adalah menghitung kelayakan sebuah desain bom Hidrogen. ENIAC adalah komputer sepanjang 100 kaki dengan ketinggian 100 kaki.

Sejarah Komputer Modern lainnya

Dalam sejarahnya, sebuah komputer modern diawali dengan pengembangan penulisan kode biner yang dilakukan oleh John von Neumann. Dialah yang memulai praktek penyimpanan data dan instruksi dalam kode biner dan mengawali menggunaan memori untuk menyimpan data dan program. Sebuah komputer yang bernama EDVAC (Electronic Dicrete Variable Computer) dibuat menggunakan kode biner pada tahun 1950. Sebelum EDVAC, komputer seeprti ENIAC hanya dapat melakukan satu tugas dan kemudian harus diubah susunan kabelnya untuk melakukan tugas atau program yang lain. Konsep penyimpanan beberapa program pada kartu lubang EDVAC sebagai pengganti proses perubahan perkabelan mengarah pada komputer yang kita kenal saat ini.

Perlu diingat bahwa meskipun komputer modern saat ini jauh lebih cepat dan lebih baik dibandingkan EDVAC pada masanya, namun komputer tersebut tidak mungkin ada tanpa pengetahuan dan kerja keras dari banyak penemu dan pionir. Jadi jangan sampai melupakan sejarah ya J.

Ok. Sampai di sini dulu perjalanan mesin waktu kita menjelajahi Sejarah Komputer. Semoga bermanfaat.

Salam hangat.

Permalink 2 Comments

Konsep OOP di Java

November 16, 2007 at 1:16 pm (BeLaJar)

Pemrograman berorientasi objek diciptakan untuk mempermudah pengembangan program dengan cara mengikuti model yang telah ada dalam kehidupan nyata. Dalam paradigma ini, sesuai dengan model kehidupan nyata, segala bagian (entiti) dari suatu permasalahan adalah objek. Objek-objek ini kemudian juga dapat berupa gabungan dari beberapa objek yang lebih kecil. Sebagai contoh, tengoklah sebuah mobil. Mobil adalah sebuah objek dalam kehidupan nyata. Namun mobil sendiri terbentuk dari beberapa objek yang lebih kecil seperti roda ban, mesin, jok, dll. Mobil sebagai objek yang merupakan gabungan dari objek yang lebih kecil dibentuk dengan membentuk hubungan antara objek-objek penyusunnya. Begitu juga dengan sebuah program. Objek besar dapat dibentuk dengan menggabungkan beberapa objek-objek dalam bahasa pemrograman. Objek-objek tersebut berkomunikasi dengan saling mengirim pesan kepada objek lain.

Konsep-konsep pemrograman berorientasi objek dalam Java secara umum sama dengan yang digunakan oleh bahasa-bahasa lain. Jadi kebanyakan konsep yang kita bahas juga terdapat dalam bahasa selain Java. Namun, terkadang terdapat perbedaan-perbedaan kecil antara penerapan konsep-konsep tersebut dalam masing-masing bahasa. Perbedaan-perbedaan ini juga akan dijelaskan seiring penjelasan masing-masing konsep.
Objek

Dalam penjelasan mengenai analogi, kita sudah menyinggung mengenai objek. Sekarang kita akan mengupas lebih dalam tentang objek sebagai konsep kunci dari pemrograman berorientasi objek.

Baik dalam dunia nyata atau dalam sebuah program, sebuah objek memiliki dua karakteristik, yaitu state dan behaviour. State adalah keadaan dari sebuah objek, seperti mobil memiliki state warna, model, tahun pembuatan, kondisi, dll. Sedang behaviour adalah kelakuan dari objek tersebut, seperti mobil dapat melaju, membelok, membunyikan klakson, dll. Objek menyimpan statenya dalam satu atau lebih variabel, dan mengimplementasikan behaviournya dengan metode. Dengan penjelasan di atas, dapat disimpulkan bahwa objek adalah bagian software yang dibentuk dengan variabel-variabel dan metode-metode yang berhubungan dengan variabel tersebut.

Dengan karakteristik tersebut, kita dapat memodelkan berbagai objek dalam kehidupan nyata ke dalam objek-objek dalam sebuah program. Lebih lanjut kita dapat memodelkan objek-objek abstrak ke dalam sebuah program. Contoh umum untuk konsep abstrak seperti ini adalah objek Event, yaitu objek untuk mewakili peristiwa klik atau tombol ditekan.

Sebuah objek yang dibentuk dari sebuah kelas biasa disebut instans dalam terminologi OOP. Artinya objek tersebut adalah wujud nyata dari sebuah kelas. Variabel dan metode dari instans ini disebut variabel instans dan metode instans. Setiap instans menyimpan variabelnya sendiri-sendiri, jadi nilai variabel untuk tiap instans bisa berbeda.
Message (Pesan)

Objek-objek yang bekerja sama membentuk suatu sistem harus saling berkomunikasi untuk menjalankan sistem tersebut. Dalam sebuah program, objek-objek berkomunikasi satu sama lain dengan mengirimkan pesan. Sebagai contoh, jika sebuah objek ingin memanggil metode dari objek lain, maka objek ini akan mengirimkan sebuah pesan yang meminta objek tujuan untuk menjalankan metode yang dikehendaki. Pesan ini akan berisi informasi-informasi yang dibutuhkan objek tujuan untuk dapat menunaikan permintaan tadi.

Sebuah pesan dibentuk oleh informasi berikut ini: 1) objek yang dituju; 2) nama metode yang ingin dipanggil; 3) parameter yang dibutuhkan metode tersebut. Misalnya:

anotherObject.aMethod(parameter1);

Bila sebuah objek ingin memanggil metode miliknya sendiri, maka informasi pertama adalah dirinya sendiri. Untuk menunjuk diri sendiri dalam Java digunakan kata kunci this. Maka contoh sebelumnya akan menjadi:

this.aMethod(parameter1);

Atau kita dapat menghilangkan informasi pertama sehingga menjadi:

aMethod(parameter1);

karena bila informasi pertama tidak ada, kompiler akan secara otomatis menunjuk ke objek itu sendiri.

Ada dua keuntungan dalam penggunaan pesan, yaitu: 1) semua kebutuhan interaksi antarobjek dapat dilakukan; 2) objek-objek yang saling berinteraksi tidak harus berada dalam satu proses atau bahkan dalam satu komputer.
Kelas

Kelas adalah semacam cetakan, atau template, untuk membuat objek. Ibaratkan sebuah rancangan rumah yang digunakan untuk membangun ratusan rumah. Rumah yang dibangun tersebut adalah objek dari kelas rancangan rumah. Hal ini dapat dilakukan karena semua objek rumah yang dibangun memiliki karakteristik yang sama, sehingga dapat dibuatkan semacam blueprint­nya. Tetapi objek-objek yang dibangun tetap akan memiliki bentuk fisik tertentu sendiri-sendiri, seperti variabel dalam sebuah program, atau pintu sebuah objek rumah. Dengan penjelasan ini, kelas dapat kita definisikan kembali menjadi sebuah blueprint, atau prototipe, yang mendefinisikan variabel dan metode yang sama untuk semua objek sejenis.

Sebagai contoh, misalkan kita ingin membuat kelas Rumah, maka kita harus membuat sebuah kelas yang mendefinisikan semua variabel yang dimiliki objek dari kelas tersebut. Selain itu, kelas tersebut juga harus mendeklarasikan metode-metode yang dimiliki objek dari kelas dan juga membuat implementasi dari metode tersebut. Dengan adanya kelas ini, kita dapat membuat sebanyak apapun objek-objek rumah yang sejenis, yaitu jenis yang didefinisikan oleh kelas Rumah. Setiap objek Rumah diciptakan, sistem akan mengalokasikan sejumlah memori untuk objek tersebut dan variabel-variabelnya. Dengan begitu setiap objek akan memiliki salinan masing-masing untuk setiap variabel instans.

Setelah mengenal konsep kelas, saatnya Anda dikenalkan dengan variabel kelas. Variabel kelas sebenarnya sama dengan variabel instans. Bedanya adalah, setiap objek berbagi satu dan hanya satu variabel kelas, tapi masing-masing memiliki salinan dari variabel instans. Misalkan kelas Rumah yang kita buat hanya akan mendukung 2 lantai, dan setiap objek Rumah terdiri atas 2 lantai. Maka informasi ini cukup disimpan satu kali, karena nilainya tidak berbeda untuk semua objek. Lebih jauh, bila ada satu objek yang mengubah nilai dari variabel kelas, maka semua objek sejenis lainnya akan mengikuti perubahan itu. Di samping variabel, terdapat juga metode kelas. Metode jenis ini dapat langsung dipanggil melalui kelas dan bukan dari instans kelas tersebut.
Pewarisan

Terminologi asing untuk pewarisan adalah inheritance. Mungkin dalam literatur lain Anda akan sering menjumpai istilah ini. Secara gamblang, pewarisan berarti sebuah kelas mewarisi state dan behaviour dari kelas lain. Sebagai contoh, sebuah kelas RumahMewah akan mewarisi state dan behaviour dari kelas Rumah. Begitu juga dengan kelas RumahSederhana. Kelas RumahMewah dan RumahSederhana disebut subkelas, atau kelas anak, dari kelas Rumah, yang disebut superkelas, atau kelas induk.

Seluruh subkelas akan mewarisi (inherits) state dan behaviour dari superkelasnya. Dengan begitu, semua subkelas dari superkelas yang sama akan memiliki state dan behaviour yang sama. Namun, masing-masing subkelas bisa menambah sendiri state atau behaviournya. Misalkan, pada kelas Rumah tidak terdapat variable kolamRenang, namun subkelas RumahMewah memiliki variabel tersebut. Contoh lain misalnya kelas Rumah tidak memiliki metode nyalakanAlarm, namun rumah mewah memiliki metode itu.

Dalam kasus tertentu subkelas mungkin memiliki implementasi behaviour yang berbeda dengan superkelasnya. Hal seperti ini disebut override. Contohnya subkelas SepedaBalap memiliki implementasi metode ubahGigi yang berbeda dengan implementasi metode tersebut pada superkelas Sepeda.

Tingkat pewarisan tidak hanya terbatas pada dua tingkatan. Dari contoh di atas, kita bisa saja membuat subkelas dari kelas SepedaBalap, dan seterusnya. Kita bisa terus memperpanjang tingkat pewarisan ini sepanjang yang kita butuhkan. Dengan begitu, subkelas-subkelas yang dibuat akan lebih khusus dan lebih terspesialisasi. Namun terdapat batasan pewarisan dalam Java yang disebut single inheritance. Artinya sebuah kelas hanya dapat mewarisi sifat dari satu dan hanya satu superkelas saja. Dalam beberapa bahasa pemrograman berorientasi objek lain, yang berlaku adalah multiple inheritance. Artinya sebuah kelas dapat mewarisi sifat dari beberapa superkelas sekaligus.

Dalam Java, terdapat kelas Object yang merupakan superkelas dari semua kelas dalam Java, baik yang builtin ataupun yang kita buat sendiri, lansung maupun tidak langsung. Karena itu sebuah variabel bertipe Object akan dapat menyimpan referensi ke objek apapun dalam bahasa Java. Kelas Object ini memiliki behaviour yang dibutuhkan semua objek untuk dapat dijalankan di Java Virtual Machine. Sebagai contoh, semua kelas mewarisi metode toString dari kelas Object, yang mengembalikan representasi String dari objek tersebut.

Manfaat penggunaan konsep pewarisan antara lain: pertama, kita dapat menggunakan kembali kelas-kelas yang kita buat (sebagai superkelas) dan membuat kelas-kelas baru berdasar superkelas tersebut dengan karakteristik yang lebih khusus dari behaviour umum yang dimiliki superkelas. Kedua, kita dapat membuat superkelas yang hanya mendefinisikan behaviour namun tidak memberi implementasi dari metode-metode yang ada. Hal ini berguna jika kita ingin membuat semacam template kelas. Kelas semacam ini disebut kelas abstrak, karena behaviournya masih abstrak dan belum diimplementasikan. Subkelas-subkelas dari kelas semacam ini, yang disebut kelas konkret, mengimplementasikan behaviour abstrak tersebut sesuai dengan kebutuhan masing-masing.

Sedikit penjelasan mengenai kelas abstrak, kelas ini bisa memiliki hanya satu atau lebih metode abstrak. Subkelas dari kelas ini bertanggung jawab untuk memberikan implementasi untuk metode-metode abstrak tersebut. Sebagai akibat dari keberadaan metode abstrak ini, kelas abstrak tidak dapat diinstanskan (dibuatkan instansnya) atau digunakan untuk menciptakan sebuah objek dari kelas tersebut.
Interface

Arti harfiah dari interface adalah antarmuka, yaitu suatu alat untuk digunakan benda-benda yang tidak terhubung secara langsung untuk berinteraksi. Dalam bahasa pemrograman, interface digunakan oleh berbagai objek yang tidak terhubung untuk saling berinteraksi. Jadi dalam bahasa pemrograman, interface dapat didefinisikan sebagai koleksi definisi metode-metode dan variabel-variabel konstan, namun tanpa implementasi. Implementasi akan dilakukan oleh kelas-kelas yang mengimplements interface ini. Tanpa implementasi di sini tidak seperti pada kelas abstrak yang merupakan metode-metode yang tidak melakukan apa-apa, melainkan hanya sekedar nama metode saja.

Sebelumnya telah dijelaskan bahwa sebuah kelas tidak dapat menjadi subkelas dari beberapa superkelas, melainkan hanya bisa menjadi subkelas dari satu superkelas saja. Hal ini membuat desain program lebih rapi dan teratur, sehingga dapat mengurangi kompleksitas program. Namun, terkadang hal ini dapat menjadi suatu halangan yang tidak menyenangkan, yaitu saat kita membutuhkan suatu kelas yang memiliki sifat-sifat dari dua atau lebih kelas lain. Pada masalah seperti ini, interface dapat memberikan alternatif jalan keluar.

Dengan adanya interface maka beberapa kelas akan dapat menangani interaksi yang sama namun dengan behaviour yang bisa berbeda. Misalnya beberapa kelas mengimplementasi sebuah interface yang sama, maka kelas-kelas tersebut dapat menangani interaksi sesuai interface tersebut, namun tiap kelas dapat memiliki implementasi yang berbeda-beda.

Begitu juga bila sebuah kelas mengimplementasi banyak interface, maka kelas tersebut akan dapat menangani interaksi-interaksi sesuai salah satu interface yang diimplement oleh kelas tersebut. Namun, kelas tersebut harus mengimplementasi sendiri behaviournya. Di sinilah letak perbedaan penggunaan interface dengan multiple inheritance. Dalam multiple inheritance, layaknya single inheritance, subkelas tidak harus mengimplementasikan sendiri behaviournya karena secara default kelas tersebut akan mengikuti behaviour superkelasnya.

Permalink 3 Comments