Pages

Showing posts with label Kompiler. Show all posts
Showing posts with label Kompiler. Show all posts

Wednesday, October 17, 2007

compiler vs interpreter

Perbedaan :

1. Kalau hendak menjalankan program hasil kompilasi bisa dilakukan tanpa kode sumber. Kalau interpreter butuh kode sumber.

2. Kalau dengan kompiler, maka pembuatan kode yang bisa dijalankan mesin dilakukan dalam 2 tahap terpisah, yaitu parsing / pembuatan kode objek dan linking / penggabungan kode objek dengan library. Kalau interpreter tidak ada proses terpisah.

3. Kalau compiler membutuhkan linker untuk menggabungkan kode objek dengan berbagai macam library demi menghasilkan suatu kode yang bisa dijalankan oleh mesin. Kalau interpreter tidak butuh linker.

4. Interpreter cocok untuk membuat / menguji coba modul / sub-routine / program-program kecil. Kalau compiler agak repot karena untuk mengubah suatu modul / kode objek kecil, maka harus dilakukan proses linking / penggabungan kembali semua objek dengan library yang diperlukan.

5. Pada kompiler bisa dilakukan optimisasi / peningkatan kwalitas kode yang bisa dijalankan. Ada yang dioptimasi supaya lebih cepat, ada yang supaya lebih kecil, ada yang dioptimasi untuk sistem dengan banyak processor. Kalau interpreter susah / tidak bisa dioptimasikan.

Definis dasar:

http://www.jegsworks.com/lessons/lesson9/lesson9-1.htm

Lihat bagian translators:

http://www.cs.princeton.edu/courses/archive/spr00/cs111/labs/introJava/3.html

Perbedaan dalam bahasa common LISP:

http://www.cons.org/cmucl/doc/different-compilers.html

Perbedaan dalam bahasa Prolog:

http://gprolog.inria.fr/manual/manual008.html

Perbedaan dalam bahasa XSLT:

http://www.datapower.com/solutions/xsljit.html

Dasar dasar C++

Bagian Pertama

Tutorial ini untuk siapa saja, walaupun anda belum pernah melakukan pemrograman, atau jika andapun berpengalaman dalam pemrograman dengan bahasa pemrograman lain tapi ingin mempelajari bahasa C++, ada baiknya anda mengikuti penjelasan disini.

C++ adalah sebuah bahasa pemrograman yang memiliki banyak dialek, seperti bahasa orang yang banyak memiliki dialek. Dalam C++, dialek bukan disebabkan oleh karena si pembicara berasal dari Jepang atau Indonesia, melainkan karena bahasa ini memiliki beberapa kompiler yang berbeda. Ada empat kompiler umum yaitu : C++ Borland, C++ Microsoft Visual, C/386 Watcom, dan DJGPP. Anda dapat mendownload DJGPP atau mungkin saja anda telah memiliki kompiler lain.

Setiap kompiler ini agak berbeda. Setiap kompiler akan dapat menjalankan fungsi fungsi standar C++ ANSI/ISO, tetapi masing masing kompiler juga akan dapat menjalankan fungsi fungsi nonstandard (fungsi fungsi ini, agak mirip dengan ucapan yang tidak standar yang diucapkan orang diberbagai pelosok negeri. Sebagai contoh, di New Orleans kata median disebut neutral ground). Kadang kadang pemakaian fungsi nonstandard akan menimbulkan masalah pada saat anda hendak mengkompilasi kode sumber data (source code) (yaitu program berbahasa C++ yang ditulis oleh seorang programer) mempergunakan kompiler yang berbeda. Tutorial ini tidak terlepas dari masalah seperti itu.

Bila anda belum mempunyai sebuah kompiler, disarankan agar anda segera memiliki sebuah kompiler. Sebuah kompiler sederhana sudah cukup untuk dipergunakan oleh anda dalam mengikuti tutorial ini.

Bahasa pemrograman C++ adalah bahasa yang amat berbeda. Untuk kompiler C++ berbasis DOS, akan memerlukan beberapa kata kunci (keywords); keyword sendiri tidak cukup untuk difungsikan sebagai input dan output. Walau hampir semua fungsi dalam file library tampaknya bias diakses oleh header filenya. Coba kita lihat program sesungguhnya :
#include
int main()
{
cout<<"HEY, you, I'm alive! Oh, and Hello World!";
return 0;
}

Marilah kita lihat elemen dari program diatas. Tanda #include adalah sebuah prosesor pengarah yang mengatakan kepada kompiler untukmeletakan kode dari header file iostream.h kedalam program. Dengan menyertakan header file, anda dapat mengakses banyak fungsi fungsi berbeda. Dalam contoh diatas, fungsi cout memerlukan file iostream.h.

Pada baris berikutnya yang penting adalah int main(). Baris ini mengatakan kepada kompiler bahwa ada sebuah fungsi bernama main, yang mana fungsi itu mengembalikan sebuah integer, sehingga diberi tanda int. Tanda kurung ({ dan }) menandakan awal dan akhir fungsi dalam program diatas dan menghentikan kode lainnya. Jika anda memakai bahasa Pascal, anda akan mempergunakan perintah BEGIN dan END.

Baris berikutnya dari program diatas agak aneh. Jika anda menulis sebuah program mempergunakan bahasa lain, anda akan mengetahui bahwa perintah print akan menampilkan text di layar monitor. Dalam bahasa C++ tidaklah demikian, pemakaian fungsi cout dipakai untuk menampilkan text di layar monitor anda. Itu juga memakai tanda atau symbol <;<; , yang diketahui sebagai operator pemasukan ( insertion operators). Tanda tersebut mengatakan kepada kompiler agar segera menghasilkan output sesuai dengan input anda. Tanda semicolon ditambahkan kedalam bagian akhir dari semua fungsi yang dipanggil dalam bahasa C++; tanda seterusnya memperlihatkan variable yang anda deklarasikan.

Pada baris itu juga ada kode yang memerintahkan fungsi main kembali ke 0. Pada saat satu kali kembali diproses, itu dilakukan melalui system operasi. Sebagai catatan, pendeklarasian fungsi main yang tidak diinginkan memiliki proses kembali, dapa ditambahkan - void main() - dan biasanya itu berfungsi dengan baik; namun cara ini merupakan cara yang kurang baik.

Tanda kurung terakhir berperan sebagai penutup agar fungsi dihentikan. Anda bias mencobamengoperasikan fungsi ini didalam sebuah kompiler. Anda dapat melakukan cut dan paste kode diatas kedalam sebuah file, dan menyimpannya sebagai file.cpp, dan kemudian anda buka file itu dari dalam kompiler anda. Jika anda memakai baris perintah kompiler seperti yang ada dalam Borland C++ 5.5, sebaiknya anda membaca dahulu instruksi kompiler tentang bagaimana cara melakukan kompilasi (how to compile).

Comment atau komentar sering dipakai dalam penulisan program. Ketika anda mengatakan kepada kompiler bahwa sebuah bagian dari program anda adalah tex komentar, kompiler tidak akan memasukan itu sebagai perintah pemrograman. Untuk membua sebuah komentar dipergunakan tanda //, yang mengaakan kepada kompiler bahwa baris berikut adalah komentar, atau memakai tanda /* dan kemudian diakhiri tanda */ untuk menandai bahwa segala yang ada antara kedua tanda ini adalah komentar. Beberapa kompiler akan mengubah warna area komentar, tetapi beberapa kompiler lain tidak. Berhati hatilah dalam menulis program anda agar kode program anda tidak dianggap sebagai komentar oleh kompiler karena dapat mempengaruhi output program yang anda buat.

Selanjutnya anda harus dapa menuliskan program sederhana untuk menampilkan informasi yang anda ketikan kedalamnya. Selain itu, program juga bisa dibuat untuk menerima input. Fungsi yang dipakai adalah cin, dan diikuti dengan tanda >>.

Tentu saja sebelum anda mencoba menerima input, anda harus memiliki tempat penyimpan input. Dalam pemrograman, input dan data disimpan dalam variable. Ada beberapa jenis variable. Pada saat anda ingin mengatakan kepada kompiler sebuah variable yang anda deklarasikan, anda harus menyertakan tipe data dan nama dari variable itu. Beberapa cara dasar adalah dengan menuliskan include char, int, dan float.

Sebuah variabel char menyimpan sebuah karakter tunggal; variabel int akan menyimpan integer (bukan bilangan desimal), dan variables float akan menyimpan bilangan desimal. Setiap variable - char, int, dan float - merupakan sebuah kata kunci (keyword) yang and pergunakan pada saat anda mendeklarasikan sebuah variabel. Untuk mendeklarasikan sebuah variable anda memakai syntax type . Ini diijinkan untuk mendeklarasikan variable multiple dari jenis variable yang sama pada baris yang sama; masing masing variabelnya dipisahkan dengan tanda koma. Deklarasi sebuah variable atau sekelompok variabel dapat diikuti tanda semicolon (Catatan, tanda ini sama dengan yang diterapkan pada prosedur dimana anda akan memanggil sebuah fungsi).

Jika anda tidak memakai sebuah variable yang dideklarasikan sebelumnya. program anda tidak akan dapat dioperasikan (atau di run), dan anda akan menerima pesan error yang memberitahu anda bahwa anda telah melakukan kesalahan.

Berikut adalah beberapa contoh deklarasi variable:
int x;
int a, b, c, d;
char letter;
float the_float;

Walaupun anda boleh memiliki banyak variable dengan jenis yang sama, anda tidak dapat memiliki variable dengan nama yang sama. Begitu pula anda tidak dapat memiliki variable dan fungsi dengan nama yang sama.
#include <>
int
main()
{
int thisisanumber;
cout<<"Please enter a number:";
cin>>thisisanumber;
cout<<"You entered: "<
return 0;
}

Coba kita bahas program diatas ini setiap barisnya. Keyword int mendeklarasikan thisisanumber menjadi sebuah bilangan integer. Fungsi cin>> membaca sebuah nilai ke dalam thisisanumber; user harus menekan tombol enter sebelum bilangan bias dibaca oleh program. Ingatlah, bahwa variable yang telah dideklarasikan adalah sebuah integer; jika user cenderung nmenulis bilangan decimal, itu akan diproses dengan tidak tepat (sebab komponen desimal dari bilangan itu akan ditolek). Cobalah menuliskan satu baris karakter atau bilangan desimal ketika anda mengoperasikan program diatas; hasil yang didapat bervariasi dari input ke input, tetapi bila tidak ada masalah akan tampak bagus. Ingatlah ketika mencetak sebuah variabel, tanda quotation tidak dipakai. Apabila ada tanda quotation, maka hasilnya adalah "You Entered: thisisanumber."

Apabila tanda quotation dihilangkan, maka kompiler akan menganggap itu sebuah variabel, dan karena itu program akan melakukan pengecekan atas nilai variabel agar dapat mengganti nama variabel dengan variable pada saat eksekusi fungsi output. Jangan bimbang dengan adanya dua operator pemasukan dalam satu baris program. Anda bisa juga memasukan beberapa operator pemasuka dalam satu baris selama tiap operator pemasukan menghasilkan output yang berbeda; anda perlu memisahkan literal string (yaitu string yang tertutup dalam tanda quotation) dan variabel dengan menaruh masing masing operator pemasukannya (each insertion operators) (yaitu tanda <<).

Bila anda hendak mencoba untuk meletakan dua variabel bersama sama dalam satu baris program seperti tanda <;<; hasilnya adalah pesan eror; maka janganlah melakukan itu.

Jangan lupa untuk mengakhiri fungsi fungsi dan deklarasi dengan sebuah tanda semicolon. Jika anda lupa memberi tanda semicolon, kompiler akan memberi anda sebuah pesan eror pada saat anda melakukan kompilasi program anda.

Pascal

Pascal dari Wirth

Bahasa Pascal pertama kali didesain pada tahun 1971 oleh Niklaus Wirth, seorang profesor dari Polytechnic of Zurich, Switzerland. Bahasa Pascal didesain sebagai penyederhanaan bahasa Algol untuk keperluan pendidikan, sejak tahun 1960.

Ketika Pascal didesain, telah ada sekian banyak bahasa pemrograman, namun hanya sedikit yang digunakan secara luas: FORTRAN, C, Assembler, COBOL. Ide kunci dari bahasa baru ini adalah urutan, yang diatur melalui konsep tipe data yang sangat kuat, dan memerlukan deklarasi dan kontrol program yang terstruktur. Bahasa ini juga didesain untuk menjadi alat bantu pengajaran bagi siswa kelas pemrograman.

Turbo Pascal

Kompiler Pascal dari Borland yang begitu terkenal diseluruh dunia, dikenal dengan nama Turbo Pascal, diperkenalkan pada tahun 1983, mengimplementasikan "Pascal User Manual and Report" oleh Jensen dan Wirth. Kompiler Turbo Pascal telah menjadi salah satu dari kompiler terlaris sepanjang masa, dan membuat bahasa ini sangat populer pada platform PC, dikarenakan keseimbangan antara kemudahan penggunaan dan kemampuan/kekuatan.

Turbo Pascal memperkenalkan suatu Integrated Development Environment (IDE) dimana Anda dapat mengedit code (dalam sebuah editor yang kompatibel dengan WordStar), menjalankan kompiler, melihat kesalahan yang ada, dan melompat kembali ke baris yang mengandung kesalahan tersebut. Hal ini mungkin kedengarannya sangat sepele pada dewasa ini, tapi pada masa sebelumnya Anda harus keluar dari editor, kembali ke DOS; menjalankan kompiler dari command-line, menuliskan nomor baris yang salah, membuka editor dan melompat ke baris tersebut.

Terlebih lagi Borland menjual Turbo Pascal seharga 49 dollar, dimana kompiler Pascal dari Microsoft dijual dengan harga ratusan dollar. Keberhasilan Turbo Pascal selama sekian tahun juga dikarenakan Microsoft membatalkan produk kompiler Pascal mereka.

Delphi's Pascal

Setelah 9 versi dari kompiler Turbo dan Borland Pascal, yang secara perlahan mengembangkan bahasa ini, Borland meluncurkan Delphi pada tahun 1995, mengubah Pascal menjadi sebuah bahasa pemrograman visual.

Delphi mengembangkan bahasa Pascal dalam sekian banyak cara, termasuk pengembangan berorientasi objek yang berbeda dari produk Object Pascal lain, termasuk dari kompiler Borland Pascal with Objects.

Menggunakan bahasa Assembly

Tutorial kali ini berasal dari mini paper ku saat mata kuliah bahasa assembly. Sengaja aku tampilkan di situs ini untuk disharing bagi yg sedang belajar assembly khususnya for Linux, karena yang digunakan adalah kompiler NASM.

Tutorial kali ini berasal dari mini paper ku saat mata kuliah bahasa assembly. Sengaja aku tampilkan di situs ini untuk disharing bagi yg sedang belajar assembly khususnya for Linux, karena yang digunakan adalah kompiler NASM.

Yaitu tentang pembuatan program yang kegunaannya untuk mengenkripsi sekaligus juga mendekripsi file teks.. pengacakan dilakukan berdasarkan sandi/kata kunci tertentu.
Pertanyaannya kenapa dibikin pake assembly?, toh pake C kan lebih mudah.. alasannya karena emang tugas bwat mata kuliah assembly.. dan juga konon program hasil bahasa assembly pastinya berjalan lebih cepat. hal ini emang terbukti..

Tidak seluruh program dalam artikel ini dibikin pake assembly, melainkan hanya sub program nya saja. Yaitu pada fungsi enkripsi-dekripsinya saja. Sedangkan sisanya, termasuk program utama dibikin pake C dengan interface Linux-style yang khas.. yaitu command line mode..

Sebelum meneruskan setidaknya anda harus membaca referensi berikut, sebagai pengetahuan dasar dan referensi utama:

  • E-book PC Assembly Language karya Paul A. Carter. Format pdf bisa didownload gratis, cari aja di google (aku lupa situsnya). buku ini bagus banget. bagi yg belajar PC assembly, must have deh..
  • tutorial mengenai dasar bahasa C di Linux dan kompiler GCC. Lalu baca juga referensi fungsi getopt, ketik man getopt

Listing program disini bersifat open source (GPL lah..) and mengandung banyak keterangan & komentar yg mudah2an membantu memahaminya..

Penggunaan Kelas Dalam Java

  1. Kelas
  2. Deklarasi Kelas
  3. Konstruktor
  4. Deklarasi Kelas
  5. Kelas Bersarang
  6. Kelas Anonim
  7. Kelas Abstrak
  8. Polimorfisme

Tables

  1. Diagram komponen deklarasi kelas

Kode

  1. Contoh kode kelas sederhana


Oleh Ari Hermawan

Tutorial kali ini akan membahas bagaimana menciptakan dan mengelola kelas dan pewarisan dalam bahasa Java. Pembahasan mengenai kelas akan membahas juga tentang konstruktor yang berfungsi sebagai sarana menciptakan objek dari suatu kelas dan tentang metode yang merupakan implementasi behaviour dari suatu kelas. Selain itu dibahas juga beberapa jenis kelas khusus seperti kelas bersarang dan kelas anonim. Anda diharapkan telah menguasai konsep pemrograman berorientasi objek yang telah dibahas dalam tutorial sebelumnya.

Kelas

Kelas memiliki peran penting dalam paradigma pemrograman berorientasi objek. Kelas bagaikan sebuah pabrik yang siap memproduksi objek-objek yang kita butuhkan. Untuk dapat menciptakan sebuah objek, kita harus menciptakan kelasnya. Kelas inilah yang dalam runtime program akan menciptakan objek yang inginkan. Singkatnya kelas adalah cetak biru bagi objek yang ingin kita ciptakan.

Perlu diperhatikan bahwa umumnya tidak ada batasan jumlah objek yang dapat diciptakan melalui sebuah kelas. Namun terkadang ada kelas-kelas yang memang dirancang untuk menciptakan tidak lebih dari satu objek.

Objek-objek yang tercipta dari sebuah kelas disebut instans dari kelas tersebut. Instans ini akan mempunyai variabel dan metode yang disebut variabel instans dan metode instans. Namun ada juga variabel kelas yang berlaku bagi kelas itu sendiri sehingga akan berlaku juga untuk semua instans dari kelas tersebut.

Di Listing 1 Anda dapat melihat kode contoh kelas sederhana.

Deklarasi Kelas

Pendeklarasian kelas dapat dimulai dengan pernyataan package. Pernyataan seperti baris pertama dari Listing 1 berarti kelas tersebut adalah bagian dari package com.arih. Hirarki package di sini secara konseptual sama dengan konsep pohon, di mana ada node akar dan bercabang terus oleh node anak. Pernyataan ini tidak harus ada dalam setiap kode program kelas. Hanya bila program Anda memiliki banyak kelas dan ingin disusun menurut hirarki tertentu barulah Anda perlu meletakkan pernyataan seperti ini. Biasanya hirarki package mengikuti hirarki domain vendor. Dalam kasus ini, arih.com—nama situs saya.

Setelah pernyataan package, kita dapat meletakkan baris-baris pernyataan import. Pernyataan import digunakan untuk mendaftarkan nama lengkap dari kelas-kelas yang kita impor agar di dalam kelas ini nantinya kita tidak lagi perlu menuliskan nama lengkap secara hirarkis sebuah kelas. Contohnya di Listing 1 kita meletakkan baris import java.io.*;, artinya semua kelas yang berada di dalam package java.io dapat kita panggil dalam kelas kita langsung dengan nama kelas, tanpa nama package. Jadi bila kita ingin menggunakan kelas java.io.InputStreamReader, kita dapat langsung menuliskan InputStreamReader tanpa mesti membubuhkan java.io di depannya. Dalam kasus tertentu kemudahan ini dapat terganggu bila ada dua kelas dengan nama yang sama namun dari package berbeda yang keduanya kita impor. Akibatnya penggunaan nama kelas tersebut akan menyebabkan ambiguitas. Pemecahannya adalah dengan menggunakan nama lengkap, atau minimal nama package yang berbeda untuk kedua kelas tersebut.

Baris-baris pernyataan impor ini sebenarnya hanya berfungsi sebagai pembantu agar penulisan kode program lebih mudah dan lebih singkat. Jadi hal ini tidak wajib dilakukan. Selama Anda merasa senang menulis nama lengkap suatu kelas yang biasanya cukup panjang, silahkan tidak menggunakan fasilitas impor. Kalaupun Anda menggunakan fasilitas ini, biasakanlah untuk tetap mengetahui nama lengkap dari kelas-kelas yang Anda gunakan. Dengan begitu Anda tidak akan kesusahan bila ingin melihat dokumentasi API Java untuk kelas tersebut.

Konstruktor

Kita sudah mengetahui bahwa kelas adalah alat untuk menciptakan objek. Sekarang yang menjadi pertanyaan adalah bagaimana cara menciptakan objek menggunakan sebuah kelas. Jawabannya adalah dengan menggunakan sebuah konstruktor.

Apakah sebuah konstruktor itu? Konstruktor adalah bagian dari definisi suatu kelas yang berfungsi menciptakan instans dari kelas tersebut. Konstruktor ini bisa kita buat sendiri, atau bila kita tidak mendefinisikannya, maka kompiler Java akan membuatkan konstruktor default untuk kelas tersebut pada saat kompilasi. Yang perlu diperhatikan adalah bahwa suatu konstrukor tidak termasuk anggota suatu kelas seperti metode dan variabel dan bahwa konstruktor bisa dibuat lebih dari satu.

Bentuk konstruktor sendiri mirip dengan sebuah metode. Beda yang paling mencolok adalah nama sebuah konstruktor harus sama dengan nama kelas tersebut dan konstruktor tidak memiliki definisi return type seperti sebuah metode. Untuk jelasnya Anda bisa lihat kembali Listing 1, di mana terdapat dua buah konstruktor. Yang satu adalah konstruktor default dan yang lain adalah konstruktor dengan sebuah parameter bertipe int.

Adanya dua buah konstruktor ini termasuk sifat polimorfisme dalam pemrograman berorientasi objek. Sifat ini dapat berlaku bagi konstruktor dan juga metode. Lebih jauh mengenai polimorfisme akan dijelaskan lebih jauh di akhir tutorial ini.

Secara singkat, konstruktor adalah perintah yang akan dilaksanakan saat ada instruksi untuk menciptakan sebuah instans dari kelas tersebut. Bisa saja konstruktor tersebut tidak melakukan apa-apa, yaitu bila konstruktor tersebut kosong. Berikut adalah contoh-contoh penciptaan suatu kelas dengan berbagai jenis konstruktor.

SuatuKelas kelasContoh = new SuatuKelas();
SuatuKelasLain kelasContoh2 = new SuatuKelasLain("judul");
BufferedReader reader =
new BufferedReader(new InputStreamReader(System.in));
new SuatuKelas().sebuahMetode();

Pada contoh pertama, kita menciptakan sebuah instans dari kelas SuatuKelas dengan memanggil konstruktor tanpa parameter. Bila dalam pendefinisian kelas SuatuKelas sebenarnya tidak ada pendefinisian konstruktor, perintah seperti ini tetap dapat dipakai, karena kompiler Java akan menyisipkan secara otomatis kosntruktor default bila tidak ada definisi konstruktor dalam sebuah kelas. Konstruktor default sendiri sebenarnya tidak melakukan apa-apa dalam proses instansiasi objek, karena tidak berisi perintah apapun.

Pada contoh kedua, kita memanggil sebuah konstruktor yang mengandung argumen berupa sebuah parameter bertipe String. Konstruktor seperti ini menjadi sangat berguna bila dalam proses instansiasi sebuah objek kita ingin memasukkan suatu nilai untuk dapat digunakan oleh instans baru tersebut.

Pada contoh ketiga, kita memanggil konstruktor dengan argumen sebuah parameter bertipe InputStreamReader. Yang menarik dari contoh ini adalah kita memasukkan argumen berupa kelas baru yang anonim sehingga terjadi pemanggilan konstruktor lain di dalam argumen konstruktor semula. Dalam konstruktor yang terakhir kita juga memasukkan argumen berupa sebuah objek InputStream yaitu System.in.

Contoh keempat adalah contoh yang lebih jelas mengenai kelas anonim. Pada contoh ini kita menciptakan sebuah instans dari kelas SuatuKelas namun tidak menyimpan referensi ke instans tersebut, sehingga kita hanya bisa menggunakannya sekali, yaitu langsung pada baris tersebut seperti terlihat pada contoh.

Ada hal yang menarik dan perlu diperhatikan mengenai konstruktor dalam kelas-kelas yang merupakan subkelas. Pada saat kita menginstans sebuah objek dari sebuah subkelas, kompiler tidak hanya memanggil konstruktor subkelas tersebut, melainkan memanggil kosntruktor superkelasnya terlebih dahulu, baru kemudian memanggil konstruktor subkelas tersebut. Penjelasan mengenai hal ini adalah bahwa sebuah subkelas adalah superkelas itu sendiri namun dengan tambahan karakterisasi yang lebih detil. Sehingga untuk menginstans sebuah subkelas, pertama-tama kita menginstansiasi sebuah superkelas, kemudian menerapkan karakterisasi dari subkelas kepada instans baru tersebut.

Deklarasi Kelas

Deklarasi kelas terdiri dari beberapa komponen. Contoh deklarasi kelas adalah seperti pada Listing 1, yaitu public class KelasKita implements InterfaceKita1, InterfaceKita2 extends SuperKelas. Dari semua komponen tersebut, yang harus ada adalah bagian class namakelas, sedang yang lain adalah opsional. Tabel 1 akan menunjukkan diagram komponen deklarasi kelas berikut penjelasan singkat.

Kelas Bersarang

Kelas bersarang adalah deklarasi kelas yang terletak di dalam isi kelas lain. Akibatnya kelas baru ini menjadi anggota dari kelas yang melingkupinya.

Kita dapat menggunakan kelas bersarang untuk menerapkan hubungan antara dua kelas dimana kelas bersarang tersebut hanya ada dalam konteks kelas yang melingkupinya. Contohnya, bila kita membuat kelas Listener untuk event yang khusus oleh sebuah kelas, misalnya tombol atau mouse diklik dalam sebuah kelas yang berupa Applet. Maka kita mendeklarasikan kelas Listener tersebut sebagai anggota dari kelas yang memproduksi event.

Selain contoh sebelumnya, kelas bersarang juga dapat digunakan bila sebuah kelas membutuhkan kelas lain untuk dapat berfungsi. Maka kelas tersebut dideklarasikan sebagai anggota dari kelas yang memiliki kebutuhannya. Misalnya kita ingin membuat kelas yang berupa dialog, dan dialog ini membutuhkan sebuah kelas lain sebagai parent dari dialog ini. Maka kita meletakkan kelas dialog tersebut dalam kelas parentnya.

Kelas Anonim

Kelas anonim adalah kelas yang tidak mempunyai nama. Dalam program artinya kelas ini tidak memiliki referensi yang disimpan di simbol tertentu. Akibatnya kita tidak dapat mengakses kelas tersebut dengan menggunakan cara biasa. Satu-satunya cara mengakses kelas seperti ini adalah langsung pada baris instansiasinya. Contoh kelas seperti ini telah kita lihat dalam contoh mengenai konstruktor.

Kelas anonim dapat kita gunakan bila kita ingin menciptakan sebuah kelas namun hanya butuh menggunakannya sekali dan tidak ingin mengalokasikan memori untuknya karena memang tidak akan digunakan lagi. Kasus seperti ini terjadi misalnya kita ingin menciptakan sebuah kelas baru sebagai argumen untuk sebuah konstruktor atau metode, dimana kita tidak lagi ingin mengakses kelas tersebut secara langsung. Contohnya adalah kasus ketiga dalam contoh mengenai konstruktor. Di sana kita menciptakan sebuah kelas InputStream untuk argumen konstruktor BufferedReader, namun kita tidak ingin menyimpan referensi ke objek InputStream tersebut, karena penggunaannya oleh BufferedReader juga akan berjalan tanpa perintah eksplisit dari program. Jadi sebenarnya referensi ke objek InputStream tersebut disimpan oleh instans BufferedReader, bukan oleh kelas kita.

Kelas Abstrak

Kelas abstrak adalah kelas yang mengandung konsep abstrak sehingga tidak mungkin mempunyai instans. Misalnya suatu kelas abstrak Buah yang mengandung konsep tentang bagian dari tumbuhan yang dapat dimakan. Namun kita tidak dapat menciptakan sebuah instans dari kelas tersebut karena tidak masuk akal menciptakan suatu Buah. Yang mungkin adalah menciptakan instans dari kelas Jeruk, Apel, atau kelas lain yang sudah mengimplementasikan konsep abstrak dari buah.

Kelas abstrak dapat mengandung metode abstrak, yaitu metode yang tidak memiliki implementasi. Dengan begitu, kelas abstrak dapat menentukan bagaimana konsep abstrak tersebut diimplementasikan oleh subkelas yang akan menggunakannya. Kelas abstrak tidak harus memiliki metode abstrak, namun setiap kelas yang memiliki metode abstrak haruslah menjadi kelas abstrak.

Polimorfisme

Polimorfisme secara bahasa dapat diartikan memiliki banyak bentuk. Konsep ini terdapat dalam bahasa pemrograman seperti konstruktor yang memiliki beberapa bentuk. Selain konstruktor, konsep ini juga berlaku bagi metode. Metode atau konstruktor dapat memiliki banyak bentuk dalam arti memiliki nama yang sama namun dengan argumen yang berbeda atau dengan return type yang berbeda. Contoh polimorfisme untuk konstruktor maupun untuk metode dapat Anda lihat pada Listing 1. Disana terdapat konstruktor-konstruktor dengan nama sama namun dengan argumen yang mengandung parameter-parameter yang berbeda. Untuk contoh polimorfisme untuk metode ditunjukkan bahwa terdapat metode dengan nama sama namun memiliki argumen dan return type yang berbeda.

Kegunaan dari polimorfisme adalah agar kita dapat mendefinisikan beberapa konstruktor atau metode dengan karakteristik yang berbeda-beda agar nantinya dapat digunakan untuk kasus-kasus yang berbeda. Misalnya kita ingin menciptakan instans dari kelas KelasKita pada Listing 1 tanpa memberikan nilai apapun, namun terkadang kita ingin memberikan sebuah nilai sebagai parameter untuk digunakan oleh instans dari kelas tersebut, maka kita dapat membuat kelas seperti KelasKita tersebut. Begitu juga halnya dengan metode, sehingga kita dapat membuat metode-metode yang memiliki karakteristik yang khusus.

Polimorfisme sebenarnya dapat dihilangkan dengan medefinisikan sebuah konstruktor atau metode yang dapat menangani semua kasus yang mungkin. Namun hal ini akan menyebabkan program Anda lebih rumit dan sulit dimengerti. Sedangkan polimorfisme yang membantu Anda untuk membuat program yang lebih baik dan mudah juga membawa konsekuensi yaitu proses kompilasi yang lebih rumit, dan penurunan kecepatan eksekusi kelas. Namun hal ini tidak perlu menjadi perhatian Anda kecuali Anda memang ingin mendalami proses kompilasi Java.

Ari Hermawan mahasiswa fakultas Ilmu Komputer UI. Sehari-hari dapat ditemukan di Lab kampus sedang bingung dengan pertanyaan tentang Java dari komunitas Java di Internet. Saat ini sedang berusaha mempromosikan diri sebagai konsultan Java sambil berusaha keras untuk lulus. Ari dapat dihubungi di arih@pokuz.net.

GTK# for .NET

GTK+ (The GIMP Toolkit) merupakan multi-platform toolkit untuk membuat GUI(Graphical User Interfaces).

GTK bertugas "menggambar" pada layar komputer.
Bila anda pernah menggunakan GIMP(free grahpic editor) maka anda sudah melihat 'indahnya' hasil toolkit ini(terutama menggunakan gtk themes).
Banyak framework yang menggunakan Toolkit ini sebagai GUI-nya. Salah satunya adalah .Net framework.

Pada dasarnya GTK hanya library, dan kita menggunakannya melalui API.
Kalau anda programmer di win32 maka anda akan menggunakan WindowAPI untuk membuat sebuah kotak di layar hanya dengan mengakses API(gdi).
window API untuk GUI ini sudah ada di namespace System.Windows.Forms ; dan untuk mengakses API GTK ini dalam .Net Framework di buatlah GTK#(baca: GTK Sharp).
Jadi dengan GTK# ini pengguna .Net Framework akan merasakan manfaat dari GTK+ sebagai GUI aplikasi.

Tujuan

Dalam artikel ini sengaja menggunakan bahasa basic(VB.Net) karena lebih banyak developer di bahasa ini bekerja untuk desktop aplikasi.
Dengan harapan mereka dapat lebih mudah bertransisi multi-platform.
Dan dapat menikmati keuntungan dari .Net Framework untuk cross-platform aplikasi, sehingga akan lebih banyak software dekstop yang dikembangkan(terutama untuk user non teknik) bagi kemajuan bersama.
Ada harapan teman-teman yang biasa berkecimpung di satu platform bisa berkontribusi untuk platform lain-nya.
Walaupun artikel ini hanya pengenalan hubungan GTK+ dan .Net Framework melalui GTK#, anggap langkah kecil buat pejalanan panjang di dunia bit dan byte. :-)

Yang di butuhkan

Microsoft .Net Framework v.1.1 - dalam Framework ini sudah terdapat compiler(C#-csc.exe,VB.Net-vbc.exe,J#-vjc.exe), BCL(Base Class Library), dan tentu saja .Net Runtime (JIT,Memory Management, dll).

GTK#/GTK-Sharp Library dengan GTK2
Project ini hanya membantu kita dalam meng-install GTK2 ke system dan GTK# library ke GAC.
saat ini kita cukup menggunakan runtime versi(gtksharp-runtime-x.x.x-win32-x.x.exe).
Tapi bila anda mempunyai visual studio 2003, ada glade tool yang bisa di plug-in.
Gunakan Developer versi(gtksharp-x.x.x-win32-x.x.exe).

Text Editor
Saat ini tool terbaik untuk membuat .Net Aplikasi adalah Visual Studio. tapi dengan notepad-pun bukan masalah. Tentu di artikel ini kita menggunakan simpel editor (notepad atau edit).

Konsep dan code

GTK di-kembangkan pada lingkungan X-window yang notabene bekerja dengan X-protocol. Tentu caranya agak berbeda dengan win32 GDI arsitektur.
Bila anda dari Visual Basic maka anda terbiasa dengan RAD akan mengenal Form. Form yang kita kenal berbentuk Window. Dan TextBox, Button, Label dll kita sebut sebagai control.
GTK hanya mengenal Widget; kalau kita samakan widget itu seperti control tapi "form"-nya pun disebut widget.
Dan karena ini GTK# berdiri di atas .Net maka widget ini akan berbentuk object. object ini merepesentasikan class yang ada di GTK#.
Bagi yang anda yang dari Visual Basic .Net maka widget ini kita kenalnya sebagai class. WindowsForms-pun bentuk class, textbos berbentuk class; yang perlu anda lakukan hanya meng-instant class tersebut menjadi object. hal ini yang kadang mengbingungkan bagi developer visual basic ke visual basic .Net; tapi sekarang anda sudah mengetahui-nya bukan? :-)

Ok, mungkin anda sudah bosan dengan basa-basi diatas. nah, sekarang kita buat sebuah file, kita sebut "GTKPertamaku.vb"
isi dengan code dibawah:

Imports System
Imports Gtk

Namespace BenPinter

Module MainApp

Sub Main()

Application.Init()

Dim window As New Gtk.Window("My First GTK Window")
window.Show()

Application.Run()

End Sub

End Module

End Namespace

Buka Command prompt lalu kita compile dengan:

  vbc C:GTKPertamaku.vb /libpath:"C:WINNTMicrosoft.
NETFrameworkv1.1.4322";"C:Program
FilesCommon FilesGTK2.2libgtk-sharp"; /r:System.dll
/r:gtk-sharp.dll /r:glib-sharp.dll /r:atk-sharp.dll

bila berhasil maka anda akan mendapatkan GTKPertamaku.exe; coba anda jalankan software itu, maka akan muncul sebuah window kosong.
wah anda sudah membuat sebuah window dengan GTK+ :-). (ini lebih menyenangkan dari pada menulis 7 halaman(A4) dengan c untuk window 3.1.1 hanya untuk membuat sebuah window seperti ini)

mari kita bedah code-nya:

 Imports System
Imports Gtk

kita membutuhkan ini agar ter-refence pada external libary

 Application.Init()

Fungsi ini perlu dijalankan agar GTK# Ter-inisiasi.

 Dim window As New Gtk.Window("My First GTK Window")
window.Show()
Application.Run()

Di sini kita membuat sebuah object dengan meng-instant class Gtk.Window ke variable window.
Dan kita memerintahkan agar Gtk mulai meng-create widget/form kita.

code diatas tercompile dan berjalan tapi dia tidak bisa berjalan semestinya. karena untuk keluar anda membutuhkan Application.Quit()
Sekarang anda CTRL+C, maka window itu akan menghilang. untuk menyempurnakan tambahkan code pada module seperti dibawah:

    Module MainApp

Sub Main()

Application.Init()

Dim window As New Gtk.Window("My First GTK Window")
AddHandler window.DeleteEvent, AddressOf OnDeleteEvent

window.Show()
Application.Run()

End Sub

Sub OnDeleteEvent(ByVal sender As System.Object, ByVal args As
DeleteEventArgs)

Console.WriteLine("I am out of business")
Application.Quit()
args.RetVal = True

End Sub

End Module

Setelah meng-edit-nya; compile dengan cara di atas; lalu jalan kembali; sekarang kita dapat meng-close window kita seperti normal.

Sekarang kita coba membuat-nya lebih menarik. tambahkan code pada module seperti dibawah:

    Module MainApp

Sub Main()

Application.Init()

Dim window As New Gtk.Window("My First GTK Window")
AddHandler window.DeleteEvent, AddressOf OnDeleteEvent

Dim btnGtkButton As New Button("Hello")
AddHandler btnGtkButton.Clicked, AddressOf OnClicked

window.Add(btnGtkButton)
window.ShowAll()

Application.Run()

End Sub

Sub OnDeleteEvent(ByVal sender As System.Object, ByVal args As
DeleteEventArgs)

Console.WriteLine("I am out of business")
Application.Quit()
args.RetVal = True

End Sub

Sub OnClicked(ByVal sender As System.Object, ByVal e As EventArgs)

Console.WriteLine("Hello World []", New Random().Next(10000).ToString())

End Sub

End Module

Di sini kita menambahkan sebuah tombol/button, yang memiliki event clicked.
Anda save; compile dan jalankan. :-) mudah bukan.