Rabu, 03 Oktober 2012

GUI with Java without Netbeans

Biasanya kalau kita mau buat gui menggunakan Java, kita menggunakan ide Netbeans yang mempunyai fitur untuk membuat GUI dengan fasilitas drag and drop. Di satu sisi ini memudahkan penggunanya yang tidak ingin terintimidasi dengan detil yang mengerikan. Namun di sisi lain hal ini bisa dianggap overkill, apabila kita hanya ingin men-design GUI yang sederhana dan tidak begitu kompleks. Bahaya lainnya adalah apabila file .form yang digenerate oleh Netbeans hilang, kita tidak bisa mengubah GUI secara visual dan untuk mengubahnya secara manual lewat kode juga susah karena generated code untuk GUI dari Netbeans terkadang bloated dan sulit untuk dimengerti.
Karena itu kita perlu juga mengetahui bagaimana menyusun GUI melalui kode. Artikel berikut akan mencoba menjelaskan cara menyusun GUI yang paling sederhana dan cocok untuk yang ingin membuat GUI yang sederhana juga.
Ada dua cara untuk menyusun komponen GUI. Pertama dengan menggunakan layout manager atau dengan absolute position. Netbeans juga menggunakan layout manager untuk mendesain GUI-nya. Tapi yang akan dijelaskan di post ini adalah dengan menggunakan absolute position. Menggunakan layout manager memudahkan jika kita ingin menyusun GUI dengan praktis tanpa perlu mengetahui posisi pasti komponen yang akan ditaruh. Selain itu jika dilakukan resize terhadap komponen kontainernya, otomatis komponen yang dikandung didalamnya akan menyesuaikan dengan ukuran yang baru. Akan tetapi, jika kita ingin membuat GUI dengan ukuran yang sudah fixed, absolute position bisa memudahkan kita dalam mengatur posisi komponen dengan catatan kita harus sering mencoba untuk mendapatkan lokasi yang pas.
Oke, langsung buka editor favoritmu (Scite, geany, notepad++, eclipse, dlllll)
Hal pertama yang harus dilakukan adalah membuat kelas yang meng-extend JFrame
public class TestGUI extends JFrame
Jangan lupa import kelas JFrame

1import javax.swing.JFrame;
kemudian di method main, kita cukup membuat objek dari kelas ini, dan menjalankan method setVisible agar GUI-nya bisa terlihat.

1public static void main(String[] args) {
2   TestGUI test = new TestGUI();
3   test.setVisible(true);
4}
Sampai saat ini, kita sudah membuat GUI yang fungsional, tapi begitu dikompail dan dijalankan kok GUI-nya tidak keliatan? Itu karena kita belum menspesifikasikan ukurannya. Jadi ukuran luasnya masih 0.
Inisialisasi ukuran GUI pada konstruktor

1TestGUI() {
2   setSize(600, 400);
3}

parameter pada method setSize adalah panjang dan lebar dari JFrame tersebut.
Jangan lupa menambahkan kode berikut
1TestGUI() {
2   setDefaultCloseOperation(EXIT_ON_CLOSE);
3}

agar ketika window-nya ditutup dengan menekan tombol x merah di pojok kanan atas, programnya benar-benar tertutup dan dimatikan dari JVM.
Posisi window tadi terletak di pojok kiri atas, bagaimana jika posisinya ingin ditengah?
1TestGUI() {
2   setLocationRelativeTo(null);
3}

Maka posisi Windows akan berada di tengah.
Kalau mau Windows-nya tidak bisa diubah-ubah ukurannya, gunakan kode berikut
1TestGUI() {
2   setResizable(false);
3}

Jika ingin memberi nama pada Windowsnya, panggil konstruktor parent Class dengan method super yang disertai argumen nama dari Windows dengan tipe String. Jangan lupa kalau super hanya bisa dipanggil di baris pertama pada konstruktor.
1TestGUI() {
2   super("Graphical User Interface for Test");
3}
Setelah proses awal tersebut selesai, tahap berikutnya adalah tinggal layout untuk komponen-komponen yang kita butuhkan. Ada dua cara untuk layout dengan GUI di Java. Cara pertama adalah dengan menggunakan kelas LayoutManager untuk mengatur tata letak dari GUI kita. Cara ini juga yang dipakai oleh Netbeans untuk mendesain GUI. Kelebihan cara ini adalah kita tidak perlu khawatir apabila ukuran GUI berubah-rubah. Tampilan komponen akan mengikuti ukuran GUI yang sedang berlaku. Kekurangannya adalah ini bisa-bisa menjadi overkill, terutama untuk tampilan GUI sederhana dan tidak ada perubahan dari desain semula yang sudah disusun misalnya di kertas.
Karena itu saya memilih cara kedua, yaitu dengan absolute positioning. Dengan cara ini, desain awal yang sudah kita punya di kertas bisa langsung diterjemahkan ke dalam kode karena kita memiliki kuasa penuh terhadap letak dari komponen-komponennya.
Untuk memulai menggunakan absolute position, maka layout manager-nya harus di set null

1TestGUI() {
2   setLayout(false);
3}
Berikutnya akan ditunjukkan bagaimana mengeset posisi komponen, misalnya sebuah textbox dan button

01TestGUI() {
02   JTextField tf1 = new JTextField();
03   JButton btn1 = new JButton();
04 
05   tf1.setBounds(50, 50, 100, 20);
06   btn1.setBounds(200, 50, 100, 20);
07 
08   add(tf1);
09   add(btn1);
10}

Dua baris pertama adalah instansiasi komponen TextField dan Button. Dua baris terakhir adalah cara menambahkan komponen ke dalam objek kontainer, dalam hal ini JFrame-nya sendiri. Kode yang berguna untuk mengatur letak adalah dua kode ditengah, yaitu method setBounds. Method setBounds memiliki empat buah parameter, dua parameter di depan adalah posisi secara sumbu x dan y untuk pojok kiri atas komponen yang bersangkutan. Dan jangan lupa juga, kalau sumbu x dan y posisi 0,0 untuk komputer juga dimulai dari pojok kiri atas. Dua parameter berikutnya adalah untuk panjang dan lebar dari komponen ini.
Tada, selesai. Sekarang Anda telah bisa membuat GUi serumit apapun tanpa membutuhkan bantuan dari Netbeans. Yang agak sulit dari pembuatan manual ini adalah harus sering dikompail untuk melihat posisi aslinya, karena ketika di code mungkin agak sulit untuk dibayangkannya. Berikut potongan kode lengkapnya

01import javax.swing.JButton;
02import javax.swing.JFrame;
03import javax.swing.JTextField;
04 
05public class TestGUI extends JFrame {
06     
07    TestGUI() {
08        super("Graphical User Interface for Test");
09        setSize(600, 400);
10        setDefaultCloseOperation(EXIT_ON_CLOSE);
11        setResizable(false);
12        setLocationRelativeTo(null);
13         
14        setLayout(null);
15         
16        JTextField tf1 = new JTextField();
17        JButton btn1 = new JButton();
18         
19        tf1.setBounds(50, 50, 100, 20);
20        btn1.setBounds(200, 50, 100, 20);
21         
22        add(tf1);
23        add(btn1);
24    }
25     
26    public static void main(String[] args) {
27        TestGUI test = new TestGUI();
28        test.setVisible(true);
29    }
30}

Dan screenshot dari hasil akhir program
Image and video hosting by TinyPic
Selamat mencoba, semoga bermanfaat

Rabu, 19 September 2012

DASAR PEMOGRAMAN BERORIENTASI OBJEK



ü Pengertian Objek = Representasi sebuah item, unit atau entitas individu, dapat diidentifikasi,real atau abstrak.
ü Contoh Objek:-Tangible: mobil, printer,..
-Peranan: pekerja, boss,..
ü KOMPONEN OBJEK:
Objek=Atribut+Operasi
Atribut Merupakan data dalam system dimanipulasi oleh operasi dalam implementasi, atribut mungkin berupa objek lain, atau rujukan ke objek lain.
Operasi disebut juga Method yaitu Dapat memanipulasi atribut dalam sebuah kelas,Dapat memanggil operasi lain dalam kelas yang lain,Mengirim dan menerima informasi/pesan sebagai parameter.
Representasi objek memiliki nama misal kucing,objek memiliki atribut yang mendefinisikan keadaan misal:warna,berat dan jenis kelamin.objek memiliki operasi menyatakan apa yang dilakukan misal:mengeong,mencakar dan berbaring.
Ø Class(kelas) = Sekumpulan objek-objek yang sama.
Ø Semua objek dalam suatu kelas memiliki atribut dan operasi yang sama, tetapi nilai atribut dapat berbeda.
Ø Suatu objek tertentu merupakan instance sebuah kelas.
*Konsep-konsep PBO
§ Pengertian secara abstrak => suatu sistem dalam bentuk yang lebih sederhana, yaitu sebagai suatu kumpulan sub sistem (object) yang saling berinteraksi.
§ Modularity: Sifat object adalah modular. Object dapat ditulis dan dimaintain terpisah (independen) dari object lain.
§ Contoh : Mobil adalah kumpulan sistem pengapian, sistem kemudi, sistem pengereman.
o Pengertian Enkapsulasi => Suatu teknik di mana data dibuat dalam suatu paket beserta dengan fungsi yang bersesuaian.
o Antar muka ke objek didefinisikan sedemikian rupa sehingga memperlihatkan sekecil mungkin bagaimana objek bekerja.
o Mekanisme menyembunyikan suatu proses dalam sistem untuk menghindari interferensi dan menyederhanakan penggunaan sistem itu sendiri.
§ Pengartian Polimorfisme : Kemampuan objek-objek yang berbeda untuk memberi respons terhadap permintaan yang sama,sesuai dengan cara masing-masing objek.
2.KONSEP PEMOGRAMAN DAN PARADIGMANYA
Þ Bahasa Pemograman yaitu Komputer bekerja seperti switching dan hanya mengenali 0 dan 1
  • Manusia tidak (paham) berbicara dengan bahasa 0 dan 1
  • Perlu bahasa pemrograman yang dapat menjadi perantara percakapan antara komputer dan manusia
  • Bahasa pemrograman diubah ke dalam bahasa yang dipahami oleh komputer dengan menggunakan interpreter atau kompiler.
Þ Compiler:
Mengkompilasi source code menjadi bentuk file yang bisa dieksekusi.
Þ Interpreter:
Mengkompilasi dan menjalankan source code secara langsung.
Þ Tingkat Bahasa Pemograman :
  • Bahasa Pemrograman Tingkat Rendah(Assembler)
  • Bahasa Pemrograman Tingkat Sedang (C, Pascal, fortran)
  • Bahasa Pemrograman Tingkat Tinggi (Java, C++)
CLASS DAN OBJEK
=>Definisi Class dan Objek: sekumpulan objek-objek yang sama,
  • Semua objek dalam suatu kelas memiliki atribut dan operasi yang sama, tetapi nilai atribut dapat berbeda.
  • Suatu objek tertentu merupakan instance sebuah kelas.
=>Class dan Objek : Sekumpulan bola merupakan suatu kelas,
o Seluruh bola memiliki ukuran, berat dan warna, posisi
o Seluruh bola dapat dilempar dan ditangkap
o Bola yang berbeda mungkin memiliki ukuran, berat dan warna yang berbeda – merupakan instances

Selasa, 18 September 2012

Pengenalan tentang Program yang Benar dan Tangguh

Suatu program disebut "benar" jika ia menyelesaikan suatu tugas sesuai dengan desainnya. Program disebut "tangguh" jika ia bisa menangani suatu situasi yang tidak biasa dengan cara yang masuk akal. Misalnya, suatu program didesain untuk membaca angka yang diketik oleh user, kemudian menampilkan angka dengan urutan tertentu. Program tersebut benar jika ia bekerja untuk angka berapa pun. Program tersebut tangguh jika program tersebut bisa menangani input yang salah, misalnya jika user memasukkan sesuatu yang bukan angka, misalnya, dengan cara memberi tahu user bahwa input yang dia masukkan salah, dan mengabaikan input yang salah tersebut. Program yang tidak tangguh akan keluar tiba-tiba atau memberikan keluaran yang tidak bermakna dalam kondisi tertentu.
Semua program harusnya bekerja dengan benar. (Program yang dibuat untuk mengurutkan angka tetapi tidak mengurutkan dengan benar adalah program yang tidak berguna). Program tidak selalu harus tangguh secara total. Akan tetapi tergantung pada siapa yang akan menggunakan dan bagaimana program tersebut digunakan. Misalnya, program kecil yang digunakan hanya oleh Anda sendiri tidak harus tangguh total, karena kita tahu batas-batas dan bagaimana program tersebut bekerja.
Kebenaran suatu program sebenarnya lebih sulit dari apa yang kita bayangkan. Seorang programmer mencoba membuat program sesuai dengan spesifikasi tentang bagaimana sebuat program "seharusnya" bekerja. Hasil kerja programmer tersebut benar jika program yang ia buat bekerja sesuai dengan spesifikasinya. Tapi apakah itu berarti program tersebut benar? Bagaimana jika ternyata spesifikasinya kurang lengkap atau salah? Program yang benar seharusnya merupakan implementasi dari spesifikasi yang lengkap dan benar. Pertanyaannya apakah spesifikasi tersebut lengkap dan sesuai dengan yang diinginkan tercakup di luar domain ilmu komputer.

Banyak pengguna komputer memiliki pengalaman di mana program tidak bekerja atau crash. Dalam banyak hal, masalah tersebut hanya mengganggu saja, tapi kadang-kadang masalahnya lebih kompleks dari itu, misalnya hilangnya data atau uang. Jika komputer diberi tugas penting, konsekuensinya akan lebih serius apabila program tersebut berperilaku tidak normal.
Beberapa tahun yang lalu, kegagalan dua misi ruang angkasa ke Mars masuk dalam berita. Kedua kegagalan tersebut dipercaya karena masalah pada software, akan tetapi pada kedua kasus tersebut masalahnya bukan pada program yang tidak benar. Pada bulan September 1999, Orbiter Iklim Mars terbakar di atmosfer Mars karena data yang ditulis dalam satuan Inggris (inci, kaki, dll) dimasukkan ke dalam program komputer yang didesain untuk menerima input satuan Metrik (sentimeter, kilometer, dll). Beberapa bulan kemudian, Pendarat Kutub Mars jatuh karena softwarenya mematikan mesinnya terlalu cepat. Program yang dibuat seharusnya bisa mendeteksi tumpuan ketika pesawat mendarat dan baru kemudian mematikan mesin. Akan tetapi, roda pendarat kemungkinan macet yang menyebabkan program pemati mesin aktif sebelum pesawat menyentuh tanah. Sistem yang lebih tangguh akan mengecek terlebih dahulu ketinggian pesawat sebelum mesin dimatikan.
Masih banyak beberapa kisah tentang masalah yang disebabkan oleh jeleknya desain atau implementasi suatu software. Silakan lihat buku Computer Ethics karangan Tom Forester dan Perry Morrison untuk melihat beberapa insiden yang pernah terjadi. (Buku ini menceritakan tentang isu etika dalam bidang komputer. Buku ini mungkin penting sekali untuk dibaca oleh orang yang berkecimpung dalam dunia ilmu komputer).
Pada tahun 1985 dan 1986, satu orang tewas dan beberapa lainnya terluka karena overdosis radiasi, pada saat melakukan perawatan radiasi dengan mesin radiasi yang komputernya tidak diprogram dengan benar. DI kasus lain, selama 10 tahun hingga tahun 1992, sekitar 1000 pasien kanker menerima dosis radiasi sekitar 30% lebih rendah dari yang diberikan dokter karena kesalahan pemrograman.
Pada tahun 1985, sebuah komputer di Bank of New York menghancurkan data-data transaksi sekuritas yang sedang berjalan karena adanya kesalahan pada program. Butuh kurang dari 24 jam untuk memperbaiki program tersebut, akan tetapi pada saat itu, bank sudah kehilangan sekitar 5 juta US dollar karena bunga overnight yang harus dipinjam untuk mengkover masalah tersebut.
Pemrograman sistem kendali inersia dari pesawat tempur F-16 bisa membalik pesawat dari atas ke bawah ketika digunakan di atas khatulistiwa, untungnya masalah ini sudah ditemukan dalam simulasi. Pemindai luar angkasa Mariner 18 hilang karena kesalahan di satu baris program. Kapsul luar angkasa Gemini V salah mendarat beberapa ratus kilometer lebih jauh karena programmer lupa untuk memasukkan perputaran bumi ke dalam perhitungan.
Pada tahun 1990, layanan telephon jarak jauh AT&T terganggu di seluruh Amerika Serikat ketika program komputer yang baru dijalankan terbukti memiliki bug.
Contoh-contoh di atas adalah beberapa yang pernah terjadi. Masalah software adalah masalah yang sangat umum. Sebagai programmer, kita harus mengerti kenapa itu bisa terjadi dan bagaimana cara mengatasinya.

Salah satu bagian dari masalahnya dapat dilacak kepada bahasa pemrogramannya itu sendiri, begitu kata para penemu Java. Java didesain untuk memberikan proteksi terhadap beberapa jenis kesalahan. Bagaimana caranya suatu bahasa pemrograman menghindari kesalahan? Mari kita lihat beberapa contohnya.
Bahasa pemrograman terdahulu tidak membutuhkan variabel untuk dideklarasikan. Pada bahasa pemrograman tersebut, ketika suatu nama variabel digunakan dalam program, variabel akan otomatis dibuat. Mungkin ini terlihat lebih mudah dan nyaman daripada harus mendeklarasikan variabel beserta tipenya terlebih dahulu. Akan tetapi, ada konsekuensinya : Kesalahan ketik sedikit saja akan membuat komputer menciptakan variabel baru yang sebetulnya tidak kita inginkan. Kesalahan seperti ini pernah terjadi dan mengakibatkan hilangnya pesawat ruang angkasa.
Dalam bahasa pemrograman FORTRAN, perintah "DO 20 I = 1,5" adalah pernyataan pertama dari suatu perulangan. Sekarang, spasi tidak lagi suatu hal yang penting pada bahasa FORTRAN, sehingga perintah ini akan sama dengan "DO20I=1,5". Di lain pihak, perintah "DO20I=1.5" dengan tanda titik bukan koma, merupakan pernyataan pemberi nilai yang memberi nilai 1.5 ke dalam variabel DO20I. Misalnya ada kesalahan dalam mengetik koma menjadi titik, bisa jadi akan menyebabkan suatu roket meledak sebelum diluncurkan.
Karena FORTRAN tidak memerlukan variabel untuk dideklarasi, kompilernya akan senang menerima perintah "DO20I=1.5". Ia akan membuat variabel baru bernama DO20I. Jika FORTRAN membutuhkan variabel untuk dideklarasikan di awal, kompiler akan mengeluarkan pesan kesalahan di awal karena variabel DO20I tidak pernah dideklarasikan sebelumnya.
Hampir semua bahasa pemrograman saat ini perlu mendeklarasikan variabel sebelum digunakan, akan tetapi masih ada beberapa fitur pada bahasa pemrograman yang bisa menyebabkan kesalahan. Java sudah membuang fitur ini. Beberapa orang tidak suka karena ini membuat Java menjadi kurang feksibel dan kurang ampuh. Walaupun mungkin kritik ini benar, meningkatnya tingkat keamanan dan ketangguhan suatu program mungkin lebih dipentingkan dalam beberapa hal.
Pertahanan yang paling baik untuk mencegah beberapa macam jenis kesalahan adalah mendesain bahasa pemrograman di mana membuat kesalahan tidak mungkin sama sekali. Dalam kasus lain, di mana kesalahan tidak bisa dihilangkan sama sekali, bahasa pemrograman bisa didesain sehingga apabila kesalahan terjadi, maka kesalahan ini akan dapat dideteksi secara otomatis. Paling tidak cara ini akan mencegah kesalahan tersebut membuat bencana yang lebih besar, karena akan memberi peringatan kepada programmer bahwa ada sesuatu bug yang harus diperbaiki. Mari lihat beberapa contoh yang diberikan Java untuk mengatasi permasalahan ini.
Suatu array dibuat dengan beberapa lokasi, dimulai dengan 0 hingga ke indeks maksimumnya. Kita tidak dibolehkan untuk menggunakan lokasi array di luar rentang yang sudah dibuat. Pada Java, jika kita memaksakan untuk melakukan itu, sistem akan otomatis mendeteksi hal ini. Pada bahasa pemrograman lain seperti C dan C++, programmer diberi keleluasaan penuh untuk memastikan bahwa indeks array berada di dalam rentang tersebut.
Misalnya suatu array, A, memiliki tiga lokasi A[0], A[1], dan A[2]. Maka A[3], A[4], dan berikutnya adalah lokasi pada memori di luar array tersebut. Pada Java, apabila kita mencoba untuk menyimpan data pada A[3], Java akan mendeteksi ini. Program akan dihentikan saat itu juga (kecuali kesalahan ini "ditangkap" yang akan dibahas kemudian). Pada bahasa C atau C++, komputer akan diam saja dan melakukan penyimpanan di lokasi ini. Hasilnya akan tidak bisa diprediksi. Konsekuensinya akan jauh lebih berat daripada jika program berhenti (Kita akan diskusikan tentang tumpahan buffer di bagian ini nanti).
Pointer (penunjuk memori) juga merupakan kesalahan pemrograman yang paling sulit. Dalam Java, variabel dari suatu objek menyimpan pointer atau rujuan ke alamat memori di mana objek tersebut disimpan, atau isinya bisa juga null. Jika kita mencoba untuk menggunakan nilai null seperti layaknya rujukan ke objek sungguhan, maka sistem komputer akan mendeteksinya. Dalam bahasa pemrograman lain, lagi-lagi, adalah tanggung jawab programmer untuk mencegah digunakannya rujukan ke null. Pada komputer Macintosh lama, alamat null merupakan alamat ke lokasi di memori dengan alamat 0. Program dapat menggunakan memori di dekat alamat 0. Sayangnya, Macintosh menyimpan data penting tentang sistem di lokasi tersebut. Mengubah data di lokasi tersebut akan membuat sistem crash atau hang, bukan hanya program tersebut saja tetapi keseluruhan sistem operasi akan berhenti.
Kesalahan pointer lain adalah jika isi pointer menunjuk pada tipe data yang salah atau lokasi di memori yang tidak memiliki objek sama sekali. Kesalahan seperti ini tidak mungkin dalam bahasa Java, karena programmer tidak diperbolehkan untuk mengganti pointer sama sekali. Di dalam bahasa pemrograman lain, programmer bisa mengganti lokasi pointer ke lokasi lain, intinya, ke lokasi memori manapun. Jika tidak dilakukan dengan benar, pointer ini bisa menunjuk pada lokasi berbahaya atau menghasilkan sesuatu yang tidak bisa diperkirakan.
Kesalahan lain yang bisa terjadi pada Java adalah kebocoran memori. Pada Java, sewaktu tidak ada lagi pointer yang merujuk ke pada suatu objek, objek tersebut akan diambil oleh pemulung memori, sehingga memori tersebut dapat digunakan lagi oleh bagian program lain. Dalam bahasa pemrograman lain, programmer bertanggung jawab untuk mengembalikan memori yang tidak digunakan kepada sistem operasi. Jika programmer tidak melakukannya, makan memori yang tidak terpakai akan terakumulasi, sehingga jumlah memori yang tersedia akan berkurang. Ini adalah salah satu contoh masalah umum yang terjadi pada komputer Windows di mana banyak sekali kebocoran memori yang terjadi, sehingga komputer harus direstart ulang setiap beberapa hari.
Banyak program yang terjangkit masalah tumpahan buffer (buffer overflow error). Tumpahan buffer sering menjadi berita utama karena hal ini sering mengakibatkan kompromi masalah keamanan komputer. Ketika komputer menerima data dari komputer lain dari network atau internet misalnya, data tersebut akan disimpan dalam buffer. Buffer adalah bagian memori yang telah dialokasikan program untuk menyimpan data tersebut. Tumpahan buffer terjadi jika data yang diterima lebih banyak dari jumlah data yang bisa ditampung oleh buffer. Pertanyaannya adalah kapan ini terjadi?
Jika kesalahan ini bisa dideteksi oleh program atau program yang mengatur lalu lintas network, maka satu-satunya kemungkinan adalah pada karena kesalahan transmisi data pada network. Masalah utamanya terjadi ketika program tidak bisa mendeteksi tumpahan buffer secara benar. Dalam hal ini, software terus mensuplai data ke memori meskipun buffer telah terisi penuh, dan data lebihnya disimpan pada bagian memori yang tidak dialokasikan untuk buffer tersebut. Bagian memori yang tertunpah tersebut mungkin digunakan untuk fungsi lain. Mungkin juga digunakan untuk menyimpan data penting lain. Atau bahkan mungkin menyimpan kode program itu sendiri. Ini yang akan menjadi masalah keamanaan. MIsalnya tumpahan buffer ini menimpa bagian dari program. Ketika komputer mengeksekusi bagian program yang telah diganti, maka sebetulnya komputer akan menjalankan data yang diterima dari komputer lain. Data ini bisa berisi apa saja. Bisa jadi program untuk menghentikan komputer atau bahkan mengendalikan komputer. Programmer jahat yang bisa menemukan kesalahan tumpahan memori dalam software pengendali network bisa menggunakan lubang ini untuk menjalankan program-program jahatnya.
Untuk software yang ditulis dalam Java, kesalahan tumpahan buffer tidak dimungkinkan. Bahasa Java tidak mungkin menyimpan data di memori yang tidak dialokasikan kepadanya. Untuk bisa menyimpan data, komputer membutuhkan pointer yang menunjuk pada lokasi memori yang belum terpakai, atau menggunakan lokasi array yang berada di luar lokasi yang disediakan untuk array tersebut. Seperti dijelaskan sebelumnya, kedua kemungkinan tersebut tidak diperbolehkan sama sekali pada Java. (Akan tetapi, masih mungkin kesalahan seperti ini muncul pada kelas standar Java, karena beberapa metode pada kelas ini sebenarnya ditulis dalam bahasa C bukan Java).
Sudah jelas desain bahasa bisa membantu mencegah kesalahan atau membantu mendeteksi masalah yang mungkin terjadi. Atau dibutuhkan pengujian, misalnya menguji apakah pointer bernilai null. Beberapa programmer mungkin merasa harus mengorbankan kecanggihan dan efisiensi. Akan tetapi, ada banyak situasi di mana keamanan merupakan prioritas utama. Java didesain untuk situasi seperti ini.

Ada satu bagian di mana desainer Java tidak memasukkan pendeteksi masalah secara otomatis, yaitu perhitungan numerik. Pada Java, nilai suatu bilangan int dinyatakan dalam bilangan biner 32-bit. Dengan 32 bit, maka terdapat kurang lebih 4 milyar bilangan yang bisa dibentuk. Nilai int memiliki rentang antara -2147483648 hingga 2147483647. Apa yang terjadi jika hasil perhitungan berada di luar rentang ini? Misalnya, berapa 2147483647 + 1? Dan berapa 2000000000 * 2? Jawaban yang benar secara matematis berada di luar nilai int. Contoh-contoh di atas disebut tumpahan bilangan bulat (integer overflow). Dalam banyak kasus, tumpahan bilangan bulat termasuk suatu kesalahan. Akan tetapi Java tidak otomatis mendeteksi kesalahan tersebut. Misalnya, perhitungan 2147483647 + 1 akan bernilai negatif -2147483648 (Apa yang terjadi sebenarnya adalah bit tambahan di luar bit ke-32 diabaikan. Nilai yang lebih besar dari 2147483647 akan "terpotong" sehingga menjadi nilai negatif. Secara matematis, hasilnya akan selalu merupakan sisa pembagian dari pembagian dengan 232).
Banyak kesalahan program yang disebabkan oleh kesalahan semacam ini. Program tersebut benar, akan tetapi tidak bisa menangani bilangan lebih besar daripada 32 bit. Contoh sederhana adalah kesalahan Y2K sebenarnya merupakan kesalahan yang mirip dengan ini.
Untuk jenis bilangan real seperti double, masalahnya bahkan lebih kompleks lagi. Bukan hanya tumpahan yang mungkin terjadi. Untuk jenis double, rentangnya berlaku hingga 10308. Nilai yang lebih dari nilai ini tidak "terpotong" menjadi negatif. Akan tetapi ia akan diubah menjadi suatu konstanta yang bernilai tak berhingga. Nilai Double.POSITIVE_INFINITY dan Double.NEGATIVE_INFINITY melambangkan nilai positif tak hingga dan negatif tak hingga. Nilai spesial lainnya dari tipe data double adalah Doube.NaN atau bukan bilangan (not a number), yang melambangkan suatu nilai yang tidak berarti. Misalnya pembagian dengan 0 atau akar kuadrat suatu bilangan negatif. Kita bisa menguji apakah suatu variabel berisi bukan bilangan dengan memanggil fungsi yang bertipe keluaran boolean, yaitu Double.isNaN(x).
Untuk bilangan real, ada komplikasi tambahan yaitu hampir semua bilangan real hanya bisa dilambangkan dalam bentuk pendekatan. Bilangan real bisa memiliki jumlah digit di belakang koma yang tak terhingga banyaknya. Nilai bertipe double biasanya akurat sekitar 15 digit di belakang koma. Bilangan real 1/3, misalnya, berarti 0.33333333......, dan bilangan ini tidak bisa digantikan dengan bilangan dengan jumlah bit terbatas. Perhitungan dengan bilangan real biasanya memiliki kesalahan akurasi. Sebenarnya, jika kita kurang berhati-hati, akan menyebabkan perhitungan sama sekali salah. Ada bidang tertentu dalam ilmu komputer yang dinamakan analisis numerik yang berkonsentrasi pada algoritma untuk memanipulasi bilangan real..

sejarah_logat bahasa penentu hidup dan mati..







Konon di tahun 1370 SM, terjadi perang antara suku Gilead dan suku Ephraim yang sebetulnya sama-sama keturunan Yahudi. Perang ini dimenangkan oleh suku Gilead dan di perbatasan wilayah di muara sungai Jordan disiagakan prajurit untuk mencegah laskar Ephraim yang mencoba menyelundup kembali ke tanah airnya. Karena karakteristik fisik dua suku serupa, maka dipakailah ’logat bahasa’ untuk alat screening menentukan oknum bersangkutan dari suku Ephraim atau bukan. Mereka yang akan menyeberang sungai Jordan diwajibkan melafalkan kata ’shibbolet’ yang dalam bahasa Yahudi bermakna ’bagian batang tanaman yang mengandung bulir-bulir, misalnya jagung’. Orang Gilead akan melafalkannya dengan ’syibolet’, sedangkan orang Ephraim akan mengucapkannya dengan ’sibolet’. Tanpa banyak tanya lagi, pelintas batas yang keliru mengucapkan kata ’shibboleth’ ini langsung dibantai. Empat puluh dua ribu orang Ephraim menemui ajalnya gara-gara tak lulus melafalkan ’shibboleth’ ini.
Istilah ’shibboleth’ ini sekarang sudah menjadi kosakata bahasa Inggris yang bermakna ’adat, atau kekhasan bahasa yang dipakai untuk membuktikan seseorang adalah sesama ’kaum’, atau dipakai sebagai pengganjal (stumbling block) menjadi anggota perkumpulan sosial atau profesi tertentu. Dengan kata lain ’shibboleth’ adalah cara untuk menentukan seseorang termasuk ’orang kita’ atau ’orang luar’. Banyak kisah dramatis yang tercatat dalam sejarah akibat penerapan ’shibboleth’.
Dalam perang dunia II, tentara perlawanan Belanda memakai kiat ’shibboleth’ untuk menjebak tentara Jerman yang menyamar sebagai orang Belanda. Mereka akan disuruh melafalkan kata ’Scheveningen’ (nama kota pelabuhan di negeri Belanda). Orang Belanda asli akan melafalkannya ’sch’ ini sebagai dua ucapan ’s’ dan ’ch’, sedangkan orang Jerman akan melafalkannya sebagai satu ’suara’ yaitu ’sch’ (ʃ). Bisa dibayangkan nasib infiltrator yang gagal melafalkan kata ’Scheveningen’ yang biasanya berakhir di ujung moncong senapan.
Juga di masa perang dunia II, di front Pasifik (kawasan Lautan Teduh), tentara Amerika mempunyai kiat jitu untuk mengidentifikasi kawan atau lawan. Di kawasan tempur ini, banyak orang Jepang yang menyamar sebagai orang Amerika atau Filipina. Mereka akan dites dengan pengucapan ’lollapalooza’ (artinya ’sangat hebat’). Orang Jepang yang tidak mampu melafalkan ’lolla’ dan mengucapkannya dengan ’rorra’ langsung didor tanpa sempat menyelesaikan pengucapan kata ini (the sentry would open fire without waiting to hear the remainder).
Pada perang kemerdekaan Israel, intel pasukan Israel selalu memakai kata sandi yang mengandung huruf ’p’, karena orang Arab kebanyakan melafalkan huruf ’p’ ini dengan ’b’. Penulis fiksi ilmiah (science fiction) Isaav Asimov menulis dalam buku ’To Tell a Chemist’ cara untuk mengetahui seseorang pakar kimia atau bukan. Dia mengajukan kata ’unionized’ untuk dilafalkan sebagai tes. Kalau diucapkan ’un-ionized’ (tidak terionisasi) maka betul yang bersangkutan ’orang kimia’, namun kalau dilafalkan ’union-ized’ (masuk dalam serikat buruh), maka pasti dia bukan ’orang kimia’. Kita juga bisa mengetahui apakah seseorang dari Amerika atau dari Kanada dari pelafalan kata ’about’. Orang Kanada akan melafalkannya dengan suara seperti ’a boat’, logat yang dinamakan dengan ’Canadian raising’.
Shibboleth kini tak lagi semata-mata dimaknai secara ’sempit’, tapi juga dipakai untuk kelompok generasi yang sepantaran, kelompok angkatan sekolah atau angkatan (lichting) dalam militer. Dia tak lagi ’seseram’ di zaman dahulu yang beresiko dijemput malaikat el maut.

sahabat

:butuh waktu yang lama untuk membangun sebuah persahabatan, tetapi hanya butuh waktu singkat untuk menghancurkannya::