kompiler

1. Mengenali Kompiler Pascal Gratis : Free Pascal

[Illustration] Abstrak:

Setelah Turbo Pascal, datanglah alat RAD bernama Delphi dan Kylix (untuk Linux) lalu bahasa pemrograman yang mirip dengan syntax Pascal syntax berbasis text kode hampir menghilang . Lalu Free Pascal muncul dengan kombinasi pemrograman basis text dan OOP yang sehebat RAD Delphi.

The Free Pascal Logo dan The Jaguar adalah logo dibawah kepemilikan FreePascal.org


_________________ _________________ _________________

Perkenalan

Free Pascal adalah sebuah kompiler gratis untuk bahasa berbasis Pascal,secara semantik persis dan kompatibel dengan Borland Turbo Pascal 7, keluaran terakhir dari Turbo Pascal yang legendaris . Muncul dengan beberapa kekeuatan dan sebuah kombinasi antara TP7 yang ortodok dengan Object Pascal dari Delphi. Sekarang, Team pengembang dari Free Pascal bekerja keras untuk membuat kompiler yang lebih baik lagi untuk penggunaan lintas platform. Anda bisa download paket instalasi semua jenis platform pada [1]. Komunitas Free Pascal akan selalu terbuka terhadap anggota baru untuk membantu mengembangkan kompiler hebat ini lebih luas.

Kebutuhan Minimal

Free Pascal bisa dijalankan minimal pada prosessor 386 pada intel 80×86.Tetapi saya lebih menyarankan untuk menggunakan processor seperti 486 keatas. Menggunakan prosessor AMD bukanlah masalah. Free Pascal berjalan sangat cepat dan mulus saat melakukan compiling untuk kedua jenis type processor tersebut.Free pascal bahkan bisa berjalan pada prosessorn Motorola. Paling tidak Anda mesti memiliki Motorola 680×0 atau 68020 untuk membuat kompiler ini berkerja. Pada seluruh platform, Saya sarankan minimal RAM 8 Megabytes , walaupun dengan 4 Megabytes kompiler ini bisa bekerja. Untuk tempat pada disk Anda membutuhkan sekitar 25 Megabyte minimal. Kompiler ini tersedia untuk berbagai macam platform system operation. Dari berita terakhir bahwasanya sekarang telah tersedia untuk sparc, AMD 64, dan akhirnya untuk arm/linux. Jika Anda tertarik untuk mengetahui berapa banyak jenis platform system dimana Free Pascal di porting , Anda bisa ke halaman download pada [1].TDisana Anda akan temukan paket untuk Linux, Win32, Amiga, Dos, QNX,Solaris, BeOS, NetBSD,FreeBSD, dan OS2.

Kenapa Pascal ,..Mengapa Free Pascal ?

Pada Linux, sebagian besar orang sepertinya harus belajar menggunakan bahasa C, dikarenakan kernel linux ditulis menggunakan C lalu banyak pengguna Linux merasa sebaiknya menggunakan C sebagai bahasa pemrograman meraka. Jadi mengapa kamu harus belajar Pascal ? Saya sudah terlibat dengan C. Tetapi sangat banyak cara yang sempurna untuk menulis kode pada Pascal. Penulisan kode yang sangat bersih. Bekerja sangat cepat, tidak membutuhkan file make apapun sangat terstruktur, kamu akan tahu dengan cepat mana sebuah blok kode, mana sebuah procedure, atau sebuah function. Kompiler bekerja sangat cepat,..walaupun Anda melakukan compile sebuah program yang besar. Satu hal yang sangat saya kagumi adalah integrasinya yang hebat dengan assembler. Beberapa tahun sebelum sekarang, Pascal mempunyai cerita indah tentang membuat kode assembler menjadi mudah dibaca dan dipahami.Untuk kompatibilitas untuk Linux, FPC mempunyai fitur yang bagus, sekali Anda menuliskan sebuah program menggunakan kompiler FPC untuk Linux, maka hasilnya akan bisa Anda jalankan diberbagai mesin atau distro Linux. Ini sangat keren!! Sejak “distribution independent” adalah hal terberat untuk dipecahkan dalam Linux.Lebih jauh lagi, FPC sangat kompatibel dengan syntax Pascal jenis apa saja. Seperti TP7, GnuPascal, bahkan dengan Delphi dan Kylix. Anda bisa menggunakan kode yang Anda buat menggunakan kompiler-kompiler tersebut lalu FPC akan memberimu kode Pascal baru beraroma FPC. Dan keunggulan terakhir , yang sangat penting dan menyenangkan adalah FPC mendukung OOP, seperti halnya Delphi dan Kylix. Bagi Anda yang sudah terlanjur terlibat dengan Object Pascal, maka tidak akan ada perbedaan mencolok dengan FPC, apakah itu kode, syntax, atau dengan kehandalannya.

FPC juga datang dengan bonus yang mantap..misalnya sebuah IDE (Integrated Development Environment) yang sangat mirip dengan IDE-nya TP7. Dan disamping seluruh keuntungan tersebut, FPC tersedia dalam berbagai platform system yang berbeda-beda. Seperti Win32,Linux, BSD,Sparc , dll. Dan berbicara soal keunggulan FPC sepertinya tidak akan pernah cukup,..maka saya berikan Anda satu lagi kompiler ini juga bisa melakukan pemrograman database dan berhubungan dengan SQL-SQL server hebat seperti like MySQL dan PostgreSQL,bahkan Interbase. Untuk membuat antarmuka GUI (banyak orang masih sangat menggilai GUI) maka FPC bisa dipadukan dengan widget software seperti GTK, Tcl/Tk, dan ncurses. Jadi..mengapa Free Pascal…mengapa tidak ?!!

<!–

Posted on Monday, April 1st, 2002 at 10:03 am. About Jurnal, IT.

–>

2. Optimasi Algoritma Decode MPEG-4

I Dewa Putu Hermida 1), Beni Satria 2)

1) Peneliti pada Puslit Elektronika & Telekomunikasi-LIPI (PPET), Jl. Cisitu 21/154 D, Bandung – 40135.
2) Staff Pengajar pada Jurusan Teknik Elektro, Institut Teknologi Medan (ITM), Jl. Gedung Arca 52, Medan – 20217.

Abstrak

Tulisan ini memaparkan tentang OPTIMASI perangkat lunak decoder video MPEG-4 pada sebuah arsitektur yang spesifik, sesuai untuk pemrosesan paralel.
Pertama, mengulas kembali tentang struktur sederhana dari decoder video MPEG-4. Kedua, memaparkan tentang arsitektur prosesor yang memanfaatkan hakekat keparalelan dari algoritma pengcodean video (arsitektur yang berbasis pada konsep dari mesin “Very Long Instruction Word“). Kemudian teknik yang digunakan dan dasar penggunaan teknik ini juga dibahas. Dan terakhir, tulisan ini memaparkan hasil penerapan yang didapatkan dan perbandingan antara performansi yang didapat dengan prosesor VLIW (250 MHz) dan dengan superscalar Pentium II (266 MHz).

PENDAHULUAN

Inovasi utama yang diperkenalkan oleh standard video MPEG-4 (ISO/IEC 14496-2, Maret 1999) adalah kemungkinan untuk memaparkan objek-objek yang bentuknya berubah-ubah dalam deretan gambar video [2]. Kelengkapan decoder MPEG-4 dapat dibandigkan dengan kelengkapan decoder MPEG-2 : seperti blok yang berbasis proses DECODE video yang melibatkan pengulangan bilangan yang besar dan ada kalanya komputasi yang inketergantungan. Arsitektur perangkat keras yang mengeksekusi beberapa operasi-operasi ini dalam paralel dapat memperoleh proses DECODE video yang lebih efisien. Untuk alasan ini VLIW agaknya menjadi pertimbangan yang baik untuk implementasi decoder video: karakteristiknya mengizinkan untuk memanfaatkan hakekat keparalelan dari algoritma decode video [6] [7]. Pendekatan VLIW adalah baik karena sering mendapat kode mesin yang optimal dari kode C.

STRUKTUR DECODER VIDEO MPEG-4

Decoder video MPEG-4 berperan sebagai input aliran data, deretan teratur bit-bit yang mewakili deretan gambar video yang didecodekan. Aliran data memuat informasi tersusun pada struktur deretan gambagr video, yang sepadan dengan MPEG-4 Video International Standard 14496-2 [2][1]. Aliran data mulai memaparkan bagian video, yang merupakan bagian gambar video yang dibentuk dari satu atau lebih struktur sintaksis yang mengidentifikasi objek video. Objek video mewakili sebuah objek yang dimuat dalam deretan gambar video dan dapat didekodekan menjadi satu atau lebih lapisan objek video. Lapisan objek video merupakan suatu struktur sintaksis yang mengidentifikasi aliran datanya sendiri dan mengizinkan untuk mendapat deretan yang dapat diskalakan. Perangkat objek video adalah struktur selanjutnya yang mengidentifikasi timbulnya objek video tunggal pada waktu singkat. Suatu Video Object Plane (VOP) dibuat dari beberapa blok makro, setiap blok makro dibanguan oleh 8 x 8 blok luminan, krominan dan sering juga kejernihan nilai-nilai piksel.

Pada gambar 1, ditunjukkan struktur decoder perangkat VOP [1]. Aliran data input memuat informasi tentang tekstur, gerak, dan struktur setiap VOP Bentuk informasi mengidentifikasi objek yang dipersingkat dalam VOP. Informasi gerak mengurangi pemborosan waktu sementara deretan gambar video, menghubungkan blok makro dari VOP yang sekarang dengan blok makro yang dibangun sebelumnya. Tekstur informasi didecodekan dengan menggunakan suatu algoritma yang mengurangi pemborosan ruang.

Proses decode tekstur didapat dengan pertama kali menerapkan semua algoritma Very Length Decoding (VLD) yang mengekstraksi code word dari tabel Huffman. Kemudian inversi algoritma scan membangun kembali blok 8 x 8 dari array koefisien-koefisien yang dikuantisasi. Setelah inversi algoritma prediksi AC & DC dan inversi algoritma kuantisasi, suatu Inverse Discrete Cosine Transform (IDCT) diterapkan dalam blok 8 x 8. Dalam proses decode tekstur digambarkan bahwa komputasi operasi yang lebih intensif adalah VLD dan IDCT. Decoder yang digambarkan di bawah ini memperlihatkanberapa besar biayan operasi VLD dan IDCT untuk waktu decode.

Struktur Sebuah Decoder VOP

Gambar 1. Struktur Sebuah Decoder VOP

Algoritma kompensasi gerak adalah proses decode lain yang mahal. Algoritma ini membangun kembali setiap blok makro yang bermula dari blok makro yang berhubungan terhadap VOP yang dibanguan kembali sebelumnya. Jika blok makro yang berhubungan ini tidak sama (dalam ambang tertentu) dengan blok makro yang sekarang, suatu prediksi informasi error diekstraksi dari aliran data dan didecode dengan menggunakan algoritma decode tekstur. Dalam hal ini blok makro yang sekarang didapat sebagai penjumlahan dari blok makro (yang berhubungan) dengan blok makro yang dibangun kembali mendecode prediksi yang salah.

Untuk mengidentifikasi modul yang paling diharapkan, telah ditunjukkan implementasi perangkat lunak decoder video MPEG-4. Deretan pengujian yang digunakan mempunyai lapisan tunggal dan empat persegi panjang VOP (VOP berisi objek empat persegi panjang, bentuk tanpa informasi). Pengujian decoder telah dilakukan pada Pentium II 266 MHz, untuk mengetahui kekurangan pada proses VLIW. Telah diperkirakan sebelumnya bahwa waktu komputasi pada Pentium II adalah proporsional terhadap waktu komputasi pada VLIW. Hasil pengujian ini diperlihatkan pada gambar 2 dan memperlihatkan bahwa komputasi modul-modul decoder yang paling intensif, pada waktu uji, adalah VLD (23,6% dari total waktu decode), kompensasi gerak (11,2%), dan IDCT (6,7%).

Profil Hasil Decoder MPEG-4

Gambar 2. Profil Hasil Decoder MPEG-4

ARSITEKTUR VLIW

Pada bagian ini arsitektur menekankan pada ciri-ciri inovatifnya, khususnya sesuai dengan pengkodean video [4][5].

Arsitektur VLIW terdiri dari unit-unit fungsional yang dapat mengeksekusi beberapa instruksi dasar yang paralel. jumlah instruksi dasar yang berbeda yang dapat dengan simultan dieksekusi bergantung dari jumlah dan tipe unit-unit fungsional yang dimilki oleh prosesor VLIW. Gambar 3 memperlihatkan unit-unit arsitektur fungsional yang sederhana yang tersusun dari cluster tunggal yang berisi lima unit fungsional : unit penjumlahan floating point, unit perkalian floating point, ALU integer, unit percabangan dan unit load/store (unit akses memori). Setiap unit-unit fungsional dapat mengeksekusi secara mandiri suatu instruksi yang tepat. Instruksi-instruksi dasar yang dapat dieksekusi secara paralel terhadap unit-unit fungsional yang berbeda dari prosesor VLIW dikumpulkan dalam instruksi tunggal. Mengenai instruksi, unit bertugas memetakan instruksi yang panjang terhadap unit-unit prosesor.

Tugas pengumpulan instruksi mandiri yang primitif dalam satu bundel yang prosesor akan mengeksekusinya dalam suatu siklus clock tunggal dikerjakan dengan compiler (bundel adalah istilah perangkat lunak yang digunakan untuk mengindikasi instruksi yang panjang) [8][9].

Konfigurasi perangkat keras prosesor VLIW adalah sederhana jika dibandingkan dengan superscalar processor (satu-satunya komplikasi adalah hubungan unit-unit fungsional dengan register bank) [3]. Kerumitannya mulai dari perangkat keras ke perngkat lunak, khususnya prosesor VLIW memerlukan “smart” compiler untuk sepenuhnya memanfaatkan ciri-ciri yang ada padanya. Compiler adalah alat yang fleksibel yang mengizinkan penggunaan paralelisme potongan kode yang panjang. Intervensi programmer untuk membantu compiler sering diperlukan. Programmer harus mempunyai pengetahuan yang baik tentang algoritma-algoritma dan tentang arsitektur prosesor untuk mencapai versi kode sumber yang optimal bagi prosesor VLIW.
Untuk memparalelkan kode, compiler mengumpulkan instruksi dasar yang tidak tergantung yang berkaitan dengan implementasi assembler dari kode sumber yang asli. Suatu hambatan untuk mengembangkan keparalelan adalah adanya ketergantungan data dan adanya lompatan kondisional dalam kode sumber. Akses-akses memori, khususnya akses-akses memori yang menyebabkan kehilangan sambungan, adalah batas kecepatan lain, dimana mereka menyebabkan latency sepuluh siklus clock.

Arsitektur Prosesor VLIW Yang Disederhanakan

Gambar 3. Arsitektur Prosesor VLIW Yang Disederhanakan

Untuk mencegah hambatan, compiler pertama kali mencoba untuk mencari jejak, langkah yang terdiri dari deretan yang panjang instruksi jump-free yang memilki kemungkinan besar untuk dikerjakan [8]. Porsi kode jump free kemudian dijadwalkan untuk dieksekusi dengan efisien. Eksekusi kode yang benar seharusnya disiapkan, dalam hal ini langkah yang dipilih tidak akan dilakukan lagi dalam run time. Compiler dapat lebih jauh lagi mencoba untuk mengeksekusi secara paralel instruksi-instruksi mandiri yang datang dari langkah-langkah yang berbeda, membuang langkah-langkah pada waktu yang tepat. Cara lain untuk mendapatkan waktu yang efisien pada arsitektur VLIW adalah memanfaatkan prinsip pipeline. Prinsip pipeline ini mengizinkan untuk mengoptimalkan kerja (task) yang berulang pada tingkatan (stage) yang lebih banyak dimana setiap data output stage adalah data input untuk stage berikutnya dan sejalan dengan ide yang diterapkan dalam assembly lines : banyak unit-unit fungsional yang beroperasi pada stage yang berbeda dapat bekerja secara paralel.

Gambar 4 mengilustrasikan secara intuitif bagaimana siklus-siklus memanfaatkan prinsip pipeline setelah suatu operasi yang tidak berputar sama sekali setiap siklus.

OPTIMASI ALGORITMA PENDECODEAN MPEG-4 DAN TEKNIK YANG DIGUNAKAN

Decoder MPEG mengakses struktur-struktur data yang tersusun dalam matriks yang menggunakan pengulangan (loop). Sebagai konsekwensinya, tidak berputarnya siklus-siklus ini dapat menghasilkan keuntungan, tapi ini bukan merupakan aturan yang umum. Kenyataannya loop yang tidak berputar menambah dimensi struktur data yang dapat dieksekusi; struktur data yang lebih besar yang dapat dieksekusi menambah jumlah instruksi tersembunyi hilang dan sebagai konsekwensinya mengurangi performansi program. Loop yang tidak berputar harus diterapkan hanya dalam loop yang kritis untuk eksekusi proses pendecodean, dalam loop-loop dimana sejumlah waktu yang dapat dipertimbangkan. Lebih lagi tidak semua loop mengambil keuntungan dari operasi yang tidak berputar : keuntungan bergantung pada jumlah instruksi-instruksi yang heterogen yang datang dari iterasi berikutnya yang dapat diparalelkan. Jika setiap iterasi loop menghasilkan banyak operasi, adalah mungkin bahwa level paralelisme yang baik dicapai tanpa loop yang tidak berputar dan semua unit fungsional dalam keadaan sibuk dalam setiap siklus clock. Akhirnya, hanya sejumlah iterasi tertentu yang cukup untuk memanfaatkan porsi yang baik dari unit-unit fungsional yang tidak berputar. Untuk alasan-alasan di atas, untuk mendapat performed compiled decoder, diperlukan intervensi programmer.

Ketika ada sesuatu yang ketergantungan antara data, tidak mungkin untuk memparalelkan instruksi-instruksi. Ketiga data di akses di dalam memori yang menggunakan pointer-pointer, tidak mungkin bagi compiler statis untuk bekerja jika ada sesuatu yang ketergantungan antara data. Hal ini yang disebut masalah “aliasing” antara pointer-pointer dan hanya dapat diselesaikan dengan programer yang mengetahui program apa yang secara dinamis bekerja, bagaimana memori diorganisir dan diutilisasi. Programer dapat menuntun compiler dengan membatasi pointer-pointer mengenal operasi-operasi akses data yang tidak akan membuat aliasing dan kemudian dapat diparalelkan.

Ilustrasi intuitif operasi unrolling
Gambar 4. Ilustrasi intuitif operasi unrolling

Akses-akses memori adalah hal terakhir yang didiskusikan. Memori prosesor umumnya disusun berlapis : akses-akse ke cache memori yang kecil adalah yang tercepat daripada akses-akses ke memori RAM yang besar. Setiap waktu, sebuah data yang tidak dalam cache itu dibutuhkan, memberikan latency (keterlambatan) waktu yang tinggi. Algoritma pendecodean mengakses struktur-struktur data dengan cara berurutan dalam satu deretan sehingga mungkin untuk penarikan instruksi yang menyebabkan instruksi untuk mengantisipasi akses-akses RAM dan mencegah hilangnya cache. Penarikan instruksi menyebabkan kelebihan instruksi sehingga hanya digunakan ketika bear-benar dibutuhkan : juga dalam masalah ini, diperlukan intervensi programer.

HASIL SIMULASI

Aspek kritis mesin VLIW telah menjadi perhatian. Decoder telah diterapkan dengan memperhatikan semua aspek yang menggunakan teknik yang panjang seperti telah dijelaskan diatas. Perhatian khusus telah diberikan untuk implementasi fungsi-fungsi yang paling mahal (IDCT, kompensasi gerak, prediksi AC/DC).

Nilai fix Wang’s IDCT telah diadopsi. Rasio yang optimal antara penjumlahan-penjumlahan dan perkalian-perkalian dalam algoritma mengizinkan menggunakan lebih banyak prosesor VLIW dimana decoder tersebut dikembangkan. Dalam kompensasi gerak, hambatan dibatasi dengan akses-akses memori. Hambatan ini diatasi dengan membatasi pointer-pointer dan paket aritmatika (perbaikan di masa depan yang berkaitan dengan organisasi memori). Mesin VLIW tidak cocok untuk pendecodean dan algoritma prediksi AC/DC : VLIW mempunyai banyak akses memori penyimpanan dan operasi-operasi percabangan yang patah pada pipeline. Kedua algoritma telah dioptimalkan hingga pada jumlah percabangan yang minimum hanya dengan sedikit kerugian dalam operasi-operasi penyimpanan. Tabel-tabel kode Huffman yang besar telah digunakan dan untuk prediksi AC/DC, batas gambar telah dibangun untuk mencegah perbedaan percabangan antara suatu pembagian integer dihasilkan jika parameter kuantisasi sudah berubah : dalam hal ini percabangan berguna untuk mencegah operasi pembagian yang kritis. Karena kekurangan floating point unit semua operasi aritmatika dalam decoder telah dihasilkan dalam fixed point arithmetic.

Gambar 5 dan 6 memperlihatkan usaha compiler untuk mengoptimalkan kode dan hasilnya dalam dua langkah berturut-turut, pertama mengoptimalkan kompensasi gerak dan langkah kedua dalam IDCT. Dua rangkaian test telah digunakan, pertama merupakan deretan dinamis dan yang kedua adalah deretan statis. Hal ini mejelaskan bahwa deretan dinamis memberikan keuntungan lebih baik dari optimasi kerja : deretan dinamis mendecodekan lebih banyak koefisien IDCT (kemudian digunakan sebagai prediksi yang salah untuk membangun kembali blok makro yang baru) daripada deretan statis. Seluruh operasi aritmatika dilakukan ketika proses ini dapat diparalelkan dan hal ini menerangkan kenapa deretan dinamis membuat hasil yang lebih baik dalam kedua hal ini, dalam kepastian dan dalam nilai-nilai yang berkaitan.

Gambar 7 memperlihatkan perbandingan antara Pentium II 266 MHz dan prosesor VLIW yang digunakan. Versus decoder perangkat lunak untuk prosesor Pentium II menggunakan versi transformasi IDCT yang dioptimalkan bagi teknologi MMX. Hasil perbandingan memperlihatkan prosesor VLIW mencapai hasil-hasil yang lebih baik pada frekwensi clock yang lebih rendah.

Hasil Optimalisasi Kompiler

Gambar 5. Hasil Optimalisasi Kompiler

Hasil Optimasi Programmer

Gambar 6. Hasil Optimasi Programmer

Perbandingan VLIW dengan Pentium II

Gambar 7. Perbandingan VLIW dengan Pentium II

KESIMPULAN
Algoritma perangkat lunak pendecodean video memiliki karakteristik ganjil yang memungkinkan memberikan optimasi yang berati pada arsitektur VLIW

Untuk mendapatkan suatu kode yang optimal, tidak perlu menggunakan kode assembler; dengan mengetahui arsitektur prosesor, adalah mungkin untuk bekerja dengan source code C yang mengenalkan instruksi-instruksi untuk menjalankan compiler dan dengan jelas menggunakan jenis pemrograman yang teliti.

REFERENSI

[1] Touradj Ebrahimi, Editor,Mpeg-4 Video Verification Model, VM11.0 N2202.
[2] Touradj Ebrahimi, Mpeg-4 Video Verification Model: A video encoding/decoding algorithm based on content
representation
, Signal Processing: Image Communication 9 (1997), pp. 367-384.
[3] Smith, J.E.; Sohi, G.S., The microarchitecture of superscalar processors, Proceedings of the IEEE, Dec 1995, pp. 1609-1624.
[4] P. Faraboschi, G. Desoli, J. A. Fisher, The Latest Word in Digital and Media Processing, IEEE Signal Processing Magazine, Mar 1998, p. 59-85.
[5] J.A. Fisher, The VLIW Machine: A multiprocessor for Compiling Scientific Code, IEEE Signal Processing Magazine, Jul 1984, pp. 45-53.
[6] Konstantinides, K., VLIW Architectures for Media Processing, IEEE Signal Processing Magazine, Mar 1998, pp. 16-19.
[7] Mellott, J.D.; Taylor, F., Very long instruction word architectures for digital signal processing, IEEE International Conference on Acoustics, Speech, and Signal Processing (ICASSP), 1997, pp. 583-586.
[8] Hwu, W.W.; Hank, et al., Compiler technology for future microprocessors, Proceedings of the IEEE, Dec 1995, pp. 1625-1640.
[9] Kiyohara, T.; Gyllenhaal, J.C., Code Scheduling For Vliw/superscalar Processors With Limited Register Files, Proc. of the 25th Annual International Symposium on Microarchitecture (MICRO 25), Dec 1995, pp. 197-201.

3. Programming Language

    Programming language atau bahasa program adalah suatu bahasa ataupun suatu tatacara yang dapat digunakan oleh manusia (programmer) untuk berkomunikasi secara langsung dengan komputer. Jenis programming language sangatlah banyak. Tetapi secara umum, pengertian programming language dapat dibagi menjadi dua, yaitu Low Level Language dan High Level Language.

    Low level language adalah suatu bahasa program atau suatu tatacara yang dapat digunakan untuk berkomunikasi dengan komputer. Dalam hal ini tatacara yang digunakan masih ber-orientasi dengan mesin, dikarenakan itu low level langugae juga disebut sebagai bahasa mesin.

    Untuk menggunakan bahasa ini, programmer harus menuliskan instruksi untuk setiap instruksi secara jelas dan teliti. Setiap program dan data yang ditulis, harus ditentukan pula address dimana data dan program akan disimpan. Programmer juga harus mengetahui lokasi setiap indikator ataupun register dan program untuk seluruh fungsinya.

    Satu-satunya simbol yang tersedia untuk mengkomunikasikan tindakan yang dilakukan dan meng-identifikasikan data adalah 0 dan 1. Instruksi yang ada harus ditulis dalam urutan dan aturan dimana mereka harus ditmapilkan. Oleh karena itu, apabila salah satu instruksi hilang karena terjadi kesalahan/kekuarang telitian, seluruh instruksi harus dire-alokasi-kan untuk membuat ruang guna menambahkan instruksi tersebut, dan ini berarti pengubahan lokasi data.

    Untuk mengatasi kesulitan tersebut, bahasa mesin kemudian dikembangkan menjadi assembly language. Dengan adanya pengembangan ini, dimungkinkan untuk menuliskan program dengan menggunakan kode instruksi dan label yang mewakili lokasi penyimpanan dengan syarat komputer memiliki sarana untuk menterjemahkan kedalam bahasa mesin.

    Bahasa ini disebut sebagai assembly language dan program untuk menterjemahkannya kedalam kode mesin disebut sebagai asembler. Pada umumnya terdapat hubungan satu untuk satu antara masing-masing instruksi bahasa assembly dengan instruksi kode mesin. Gambar disamping menunjukkan versi asembly dari kode mesin.

    Program yang ditulis oleh programmer dalam bahasa assembly disebut sebagai source program Jika program ini kemudian diubah kedalam bahasa mesin, disebut sebagai object program. Dengan adanya bahasa assembly ini, programmer tidak perlu meng-alokasikan address secara khusus, dan ia cukup memberikan nama atau label serta menginduksikan ukuran dan format yang diperlukan. Assembler kemudian bertanggung jawab atas pengalokasian dan penyimpanan.

    Dengan menggunakan nama-nama simbolik untuk data dan kode-kode pengoperasian, tugas programmer dibuat lebih mudah dari pada menggunakan kode numeric bahasa mesin. Alokasi penyimpanan oleh assembler juga memungkinkan progremmer membuat perubahan-perubahan, penambahan dan penghilangan instruksi cenderung lebih mudah dan cenderung membuat kesalahan yang lebih kecil. Karena masih berhubungan dengan bahasa mesin, assembly sangat efisien dalam penggunaan fasilitas mesin.

    Bahasa assembly adalah low level language, yakni lebih dekat dengan kode mesin dari pada bahasa yang digunakan oleh manusia dalam kehidupan sehari-hari. Karena masih berorientasi mesin, membutuhkan programmmer yang memiliki pengetahuan mesin secara baik. Transfer program bahasa mesin kemesin untuk type berbeda sering sulit dan dalam beberapa kasus tidak mungkin. Programmer masih harus mempelajari bahasa assembly untuk mesin yang berbeda.

    High level language merupakan suatu bahasa program atau suatu tata cara yang dapat digunakan untuk memberi perintah/instruksi kepada komputer. Tata cara yang ada sangat mirip dengan tata cara yang digunakan oleh manusia dalam berkomunikasi. Dengan demikian, high level language lebih mudah untuk dipelajari. Semua kalimat, kata ataupun aturan yang ada didalam high level language, juga merupakan kalimat ataupun kata ataupun aturan yang digunakan dalam kehidupan sehari-hari.

    Karena jangkauan pemakai komputer adalah international, maka aturan ataupun kalimat ataupun kata-kata dasar yang digunakan pada high level language, kemudian disesuaikan dengan aturan-aturan dan kalimat yang ada dalam bahasa Inggris.

    Jenis high level language cukup banyak, seperti misalnya BASIC, COBOL, FORTRAN dan lain sebagainya. Sama halnya dengan tatacara yang terdapat dalam bahasa assembly, penulisan program dalam high level language juga harus diterjemahkan kedalam bahasa mesin sebelum proses dilakukan. Program penterjemah disebuh compiler atau interpreter.

    Setiap bahasa didalam high level language mempunyai aturan dan tata cara sendiri-sendiri, demikian pula halnya dengan compiler ataupun interpreter yang ada. Hal ini juga bisa disamakan dengan bahasa yang digunakan oleh manusia, dimana antara satu bahasa dan bahasa lainnya tidaklah sama, dan semuanya memiliki aturan dan tatacara sendiri-sendiri.

    Untuk bahasa BASIC misalnya, susunan programnya selalu terdiri atas tiga hal, yaitu line number, keyword dan body program. Dalam hal ini BASIC merupakan singkatan dari Beginners All-purpose Symbolic Instruction Code. Basic menjadi sangat populer karena dapat dibuat dengan cara yang ber-struktur ataupun tidak, disamping itu, BASIC memiliki versi interpreter dan versi compiler.

    BASIC menjadi populer seiring dengan hadirnya microcomputer, yaitu pada akhir 70-an. Demikian populernya BASIC, sehingga banyak pabrik komputer PC pada saat itu yang membuat BASIC dalam versi ROM (Read Only Memory) disamping versi interpreter ataupun compiler. Sehingga pada saat komputer dinyalakan, komputer tersebut langsung siap menjalankan BASIC. Belum ada satu bahasa selain BASIC yang dibuat dalam pelbagai versi.

    Selain keunggulan-keunggulan tersebut, BASIC juga sangat cocok digunakan untuk pemula ataupun bagi programmer senior. BASIC juga cocok untuk menyelesaikan masalah-masalah yang berkaitan dengan bisnis ataupun persoalan scientific. Dengan adanya line number yang dimilinya, BASIC akan memproses program dari urutan yang kecil menuju keline number yang besar. Tetapi dengan adanya instruksi GOTO, proses ini bisa dibelokkan keurutan lainnya.

    Bahasa berikutnya adalah COBOL yang merupakan singkatan dari Common Business Oriented Language. Bahasa ini terbagi menjadi empat divisi, yaitu Identification Division, Environtment Devision, Data Devision dan Prosedure Devision. Susunan bahasa ini sangat rapi dan teliti sehingga menyerupai tulisan seorang manajer pada saat membuat laporan ataupun seorang pengarang sedang membuat buku

    Pada tahun 1959, CODASYL (Conference on Data System Language) didirikan dengan anggota yang terdiri dari wakil-wakil pemakai komputer dan pabrik. Dua tahun kemudian, spesifikasi pertama dihasilkan dengan nama COBOL. Akhirnya COBOL menjadi bahasa pemrograman yang digunakan paling luas dalam aplikasi komersial ataupun bisnis. Lebih dari 40% instalasi komputer didunia masih menggunakan COBOL.

    COBOL juga bisa dianggap sebagai suatu bahasa yang menggunakan sistem dokumentasi yang rapi dan teliti seperti halnya bahasa Inggris. Dengan adanya hal ini, pemakai menjadi mudah untuk membaca dan mengerti, dan programmer juga menjadi mudah untuk melakukan debug atau pemeriksaan program. Persoalan bisnis selalu memerlukan adanya data dalam jumlah yang besar, serta kecepatan untuk memprosesnya. COBOL menjawab dengan instruksi-instruksi yang sederhana dan mudah dimengerti.

    PASCAL Programming Language juga merupakan suatu bahasa, dimana nama yang ada diambil dari nama seorang ilmuawan Perancis yang sangat terkenal, yaitu Blaise Pascal. Bahasa ini tersusun dengan pola struktur yang mengalir dari atas kebawah. Disamping itu, sebuah program yang besar dapat dipecah-pecah dalam beberapa modul program yang lebih kecil. Dengan demikian, bahasa ini dapat mendorong seorang programmer untuk melihat sebuah persoalan secara logic.

    Konsep pemrograman secara modular (suatu program yang dibagi dalam beberapa bentuk modul) yang sangat menarik diperkenalkan oleh Turbo Pascal mulai versi 4.0. Modul ini dikenal dengan unit (Turbo Pascal UNIT/TPU). Dengan menggunakan unit, suatu modul bagian dari program dapat dikompilasi secara terpisah terhadap program utama, sehingga hasil compilasi program utama tidak terlalu besar. Dengan demikian apabila program dijalankan, tidak memerlukan memory yang terlalu besar.

    Dengan adanya pola program yang terstruktur (structured programming) yang juga merupakan salah satu rancangan teknik, maka bentuk program PASCAL menjadi standart sehingga mudah untuk melakukan pelacakan arah program ataupun saat diperlukan perbaikan. PASCAL menggunakan instruksi IF-THEN-ELSE dan DO-WHILE untuk mengontrol struktur dari program yang dimilikinya.

    dBASE Programming merupakan salah satu high level languge yang telah dikembangkan sedemikian rupa secara specifik untuk microcomputer, sehingga memungkinkan adanya penggunaan software secara minimum, tetapi pemakai dapat dengan mudah dan cepat dapat menentukan, membangun dan kemudian meng-access (memanggil kembali) file-file yang mereka miliki.

    Dengan adanya hal ini, pemakai dapat dengan mudah mengolah dan membuat laporan dari file mereka sendiri secara interaktif melalui keyboard dan layar monitor ataupun printer. dBase juga menawarkan suatu penulisan dan penyimpanan urutan-urutan tindakan, dan mengulanginya jika diperlukan. Dengan kata lain, dBase adalah bahasa yang diinterpetasikan dan menghasilkan kode intermediate.

    Para pengguna komputer berbasis Windows, kini menggunakan bahasa pemrograman berbasis objek Bahasa pemrograman yang ditawarkan dengan banyak kemudahan ini, menggunakan kosa kata yang cantik, yakni Visual, sehingga kita mengenal adanya Delphi milik Borland, Visual C++, Visual Basic, atau Oracle, PowerBuilder, Visual dBase, Visual Foxpro, untuk aplikasi database.

    Visual Basic dari Microsoft Corporation, merupakan bahasa pemrograman yang secara cepat dan mudah dapat digunakan untuk membuat aplikasi pada Microsoft Windows.

    Kata “Visual” yang ada, menunjukkan cara yang digunakan untuk membuat graphical user interface (GUI). Dengan cara ini kita tidak lagi memerlukan penulisan instruksi pemrograman dalam kode-kode baris, tetapi dengan secara mudah kita dapat melakukan drag dan drop objek-objek yang akan kita gunakan.

    Kata “Basic” merupakan bagian bahasa BASIC (Beginners All-purpose Symbolic Instruction Code), yaitu sebuah bahasa pemrograman yang dalam sejarahnya sudah banyak digunakan oleh para programmer untuk menyusun aplikasi. Visual Basic dikembangkan dari bahasa pemrograman BASIC dan sekarang banyak berisi statemen, fungsi, dan keyword, yang beberapa diantaranya terhubung ke Windows GUI. Versi terbaru program ini menggunakan nomor versi 6.0

    Guna menyusun sebuah aplikasi, kita hanya membutuhkan beberapa menit saja. Dengan membuat user interface melalui kontrol “drawing”, seperti halnya text box dan command button, dalam sebuah form. Selanjutnya kita dapat mengatur properti untuk form dan kontrol yang ada di dalamnya. Misalnya memberi nilai caption, color, dan size. Untuk proses terakhir, kita dapat menuliskan kode untuk memasukkannya ke dalam sebuah aplikasi.

    Jika kita sudah mengetahui urutan proses pembuatan aplikasi diatas, hal ini akan membantu untuk mengetahui konsep di mana Visual Basic membangun sebuah aplikasi. Karena Visual Basic merupakan bahasa pemrograman Windows, yang telah lama “bersahabat” dengan para pemakainya dan banyak menyediakan fasilitas yang dibutuhkan penggemarnya, hal ini akan memudahkan programmer versi BASIC. Jika kita seorang programmer Windows baru, masih memerlukan pemahaman yang mendasar dari sebuah program.

    Visual Basic 6.0 dapat digunakan dalam tiga edisi, dimana setiap edisinya menunjukkan fasilitas dan kemampuan sendiri-sendiri.

    • Edisi Learning

      Di dalam edisi ini para programmer diberi kesempatan untuk membuat sebuah aplikasi sederhana Microsoft Windows dan Windows NT secara mudah. Di dalamnya disertakan beberapa kontrol sederhana, ditambah grid, tab, dan kontrol data-bound.

    • Edisi Professional

      Di dalam edisi ini disertakan tool-tool yang lengkap. Di samping berisi semua fasilitas yang ada dalam edisi Learning, juga ditambah kontrol ActiveX, Desainer Aplikasi Informasi Internet, Integrated data Tools dan Data Environment, Active Data Objects, serta Dynamic HTML Page Designer.

    • Edisi Enterprise

      ini memberikan ijin kepada para profesional untuk membuat aplikasi dalam sebuah tim. di dalamnya dimasukkan semua fasilitas yang ada pada edisi Professional, ditambah tool Back Office seperti SQL Server, Microsoft Transaction Server, Internet Information Server, Visual SourceSafe, SNA Server, dan masih banyak yang lainnya.

    Keuntungan Menggunakan Visual Basic
    Produk-produk Microsoft lainnya seperti Microsoft Word, Excel, ataupun Access, menyediakan fasilitas untuk mengoptimalkan kegiatan melalui fasilitas makro. Jika kita perhatikan, makro merupakan pemrograman yang dikhususkan untuk program aplikasi tersebut. Sintaks bahasa Basic juga digunakan dalam pemrograman ini atau disebut dengan Visual Basic for Application (VBA). Dengan demikian, jika kita telah mengenal Visual Basic, kita akan dengan mudah untuk melakukan pemrograman menggunakan aplikasi-aplikasi ini.

    Dengan semakin banyaknya orang yang menggunakan Internet, peluang memanfaatkan Internet untuk tujuan bisnis sudah merupakan hal yang tidak terelakkan lagi . Untuk mengantisipasi hal ini, Microsoft juga telah merencanakan untuk mengembangkan pemrograman khusus Internet yang menggunakan bahasa Visual Basic yang disebut dengan Visual Basic Script.

    Visual Foxpro 6.0 merupakan versi terbaru dari generasi FoxPro. FoxPro sendiri merupakan perangkat lunak yang tidak hanya terbatas untuk membangun aplikasi berbasis database, melainkan juga bisa digunakan untuk berbagai macam keperluan seperti membuat label surat misalnya.

    Visual FoxPro 6.0 datang bersama produk-produk Microsoft lain dalam paket Visual Studio 6.0, seperti Visual Basic, Visual C++, dan lainnya. Dalam versi terbarunya ini, Visual FoxPro mempunyai banyak sekali fasilitas-fasilitas baru yang tidak akan kita dapatkan pada versi sebelumnya.

    FoxPro adalah sebuah Sistem Manajemen Database (Database Management System/ DBMS) elektronik, yang membantu kita untuk mengumpulkan, mengambil dan menampilkan data. Sedangkan Visual Foxpro sendiri adalah bahasa pemrograman visual yang berorientasi pada obyek dan juga sebagai Sistem Manajemen Database Relasional (RDBMS). Visual FoxPro mempunyai beberapa kelebihan yang tidak dipunyai oleh bahasa pemrograman lain.

    Beberapa fasilitas baru yang dimiliki oleh Visual FoxPro versi 6.0 adalah:

    • Access dan Assign Methods

      Metode ini digunakan untuk mengeksekusi kode ketika nilai sebuah properti diquerikan atau ketika kita berniat mengubah nilai properti. Keuntungannya adalah kita dapat membuat sebuah interface publik untuk sebuah class atau objek yang memisahkan interface dari implementasi. Keuntungan lainnya adalah, kita dapat dengan mudah meng-implementasikan validasi properti dan juga dapat melindungi properti dalam kontrol ActiveX yang di-subclass-kan.

    • Active Document

      Sebuah Active Document adalah sebuah Windows-based, aplikasi non-HTML yang diletakkan pada sebuah browser. Active Document menyediakan sebuah cara untuk fungsionaliti sebuah aplikasi yang dapat diakses melalui interface browser. Aplikasi Active Document Visual FoxPro sama seperti aplikasi Visual FoxPro lain yang dapat kita jalankan, seperti form, laporan dan label, peng-kelas-an siap pakai, dan memanipulasi data, tetapi juga ditambahkan keuntungan lain dalam container Active Document, seperti Internet Explorer.

    • Component Gallery

      Component Gallery adalah tool baru yang membantu untuk mengumpulkan dan mengorganisasikan objek seperti librari class, form, button, dan lain-lain ke dalam objek, proyek, aplikasi atau group lainnya. Tool ini sangat dinamik sehingga kita dapat menggunakan, menggadakan atau mengatur kembali komponen antara beberapa klasifikasi dengan Componen Gallery. Component Gallery juga mengandung class pembentuk Visual FoxPro baru yang menyediakan fungsi “right-out-of-the-box”.

    • Aplikasi Coverage Profiler

      Aplikasi Pengulas (Coverage) menulis informasi tentang baris kode mana dalam sebuah file yang kita jalankan. Aplikasi Penampang (Profiler) menyediakan informasi tentang baris mana yang dijalankan, berapa lama, durasi, dan lain sebagainya. Pengulas dan Penampang digunakan untuk mengidentifikasi area masalah dalam sebuah aplikasi, terutama kode yang terlewat dan performansi “leher botol”. Visual FoxPro Coverage Profiler juga menyediakan sebuah mesin Coverage yang dapat digunakan menurut keinginan, dan sebuah aplikasi multi jendela yang dapat digunakan untuk menganalisa program dan proyek.

    • GIF dan JPEG

      Untuk lebih jauh mendukung kemampuan operasi antar Internet, Visual FoxPro ditingkatkan untuk mendukung format file grafis GIF (Graphics Interchange Format) dan JPEG (Joint Photographic Electronic Group).

    • HTML Help

      HTML Help adalah solusi Microsoft untuk membawa isi Help ke dunia Internet. Visual Studio datang dengan HTML Help Workshop sehingga Anda dapat membuat dan mendistribusikan file HTML Help dengan aplikasi Visual FoxPro.

    • Elemen-elemen bahasa baru

      Bahasa Visual FoxPro ditingkatkan untuk menyederhanakan tugas pemrogram. Dan juga, banyak fungsi manipulasi nama file yang tersedia dalam Foxtools.fll, perpustakaan Visual FoxPro, telah ditambahkan pada Visual foxPro.

    • OLE Drag & Drop

      Visual FoxPro sekarang mendukung OLE (Object Linking & Embedded) drag-and-drop, sebuah tool yang canggih dan berguna untuk memindahkan data ke aplikasi lain yeng mendukung OLE drag-and-drop (seperti Visual Basic, Windows Explorer, Microsoft Excel dan Word). Dalam pendistribusian aplikasi Visual FoxPro, Anda dapat memindahkan data antara kontrol dalam aplikasi, atau antara kontrol dan aplikasi Windows lain yang mendukung OLE drag-and-drop.

    • Automation Server

      Visual FoxPro mengalami peningkatan yaitu pengotomatisan server yang bekerja baik dengan produk dan teknologi seperti Microsoft Visual Basic, Microsoft Transaction Server, dan Active Server Pages.

    • Wizard dan Builder baru

      Selain peningkatan beberapa wizard yang sudah ada, Visual FoxPro datang dengan wizard-wizard dan builder baru yang membantu dalam membangun aplikasi, membuat database, mempublikasikan data kita pada Web, membentuk pemodelan objek, dan membuat wizard sendiri.

    • Dukungan Year 2000 Date

      Beberapa bahasa tingkat tinggi telah ditambahkan pada Visual FoxPro untuk mendukung penanggalan Year 2000 dalam kode aplikasi

    Visual C++ adalah bahasa pemrograman C++ versi Microsoft. Didasarkan pada bahasa C, C++ adalah versi pembaharuan dari C yang mengambil bahasa C ke evolusi bahasa pemrograman aras berikutnya – yang menyediakan pemrograman berorientasi objek.

    Visual C++ adalah bahasa yang dikompilasi. Sebuah compiler C++ (bahasa pemrograman C++ yang merupakan bagian dari Visual C++ kita) mengambil instruksi-instruksi bahasa C++ dan menterjemahkannya ke dalam format yang dapat dibaca komputer. Kompiler C++ adalah perangkat yang digunakan komputer untuk memahami instruksi-instruksi bahasa C++ di dalam program Anda. Microsoft Visual C++ datang bersama editor miliknya dan lingkungan pemrograman terpadu yang membuat pemrograman menjadi mudah dikelola.

    Setelah Anda menulis kode Visual C++, Anda menjalankannya melalui Visual C++, menghasilkan instruksi yang terkompilasi dengan benar dan menjalankan program tersebut.

    Sebuah praprosesor membaca pengarah praprosesor program untuk mengontrol pengkompilasian. Perhatikan bahwa program Visual C++ Anda harus dilewatkan melalui praprosesor sebelum program dikompilasi. Praprosesor membaca simbol-simbol khusus di dalam kode yang disebut pengarah praprosesor yang Anda masukkan di dalam program, untuk mengontrol pengkompilasian program. Visual C++ dengan sendirinya membentuk langkah praprosesor, sehingga tidak perlu pemahaman tambahan bagi Anda selain meletakkan pengarah praprosesor ke dalam program-program Anda.

    Program Anda harus melalui tahapan terakhir setelah pengkompilasian dan sebelum pengeksekusian. Tahapan ini disebut tahapan linking atau link editing. Pada saat program Anda di-link, program yang disebut linker memasok informasi yang diperlukan saat pengeksekusian ke program yang dikompilasi. Anda juga dapat menggabungkan beberapa program yang dikompilasi ke dalam sebuah program yang dapat dieksekusi dengan melakukan link.

    Ide munculnya Delphi sebenarnya berasal dari bahasa pemrograman yang cukup terkenal, yaitu Pascal. Pada tahun 1992 Borland International menggabungkan Turbo Pascal for DOS dan Turbo Pascal For Windows menjadi satu paket bahasa pemrograman yang dikenal dengan nama Borland Pascal versi 7. Karena pemrograman Windows dengan Borland Pascal masih dirasa cukup sulit, maka sejak tahun 1993 Borland International mengembangkan bahasa Pascal yang bersifat Visual. Hasil dari pengembangan ini adalah dirilisnya Borland Delphi tahun 1995.

    Sekitar satu tahun sesudahnya, yaitu tahun 1996, Borland International merilis Borland Delphi 2 yang dikhususkan untuk sistem operasi Windows 95 dan Windows NT. Sampai saat ini Borland telah merilis versi terbarunya yaitu Borland Delphi 6.

    Borland Delphi 6 adalah lingkungan pengembang aplikasi cepat yang pertama untuk Windows yang mendukung penuh layanan Web. Dengan Delphi 6, pengembang kelompok atau individu dapat membentuk generasi berikutnya dari aplikasi e-business di Internet dengan cepat dan mudah.

4.Procedure dan Function dalam Pascal

Dalam Pascal, sebuah rutin dapat diasumsikan dalam dua bentuk: suatu procedure dan suatu function. Secara teori, suatu procedure adalah operasi yang Anda minta untuk dikerjakan oleh komputer, sedangkan suatu function merupakan proses perhitungan yang menghasilkan suatu nilai. Perbedaan ini ditekankan pada kenyataan bahwa suatu function mempunyai return value, sedangkan sebuah procedure tidak. Kedua jenis rutin ini dapat mempunyai beberapa parameter, dengan data type yang ditentukan sebelumnya.

Walau demikian, dalam kenyataannya, perbedaan antara function dan procedure sangatlah terbatas: Anda dapat memanggil suatu function untuk melakukan suatu tugas dan melewati hasilnya (yang mungkin merupakan suatu error code yang optional atau semacam itu) atau Anda dapat memanggil suatu procedure yang menghasilkan nilai melalui parameter (reference parameter akan dibahas lebih lanjut pada bab ini).

Berikut ini adalah definisi procedure dan dua macam versi dari fungsi yang sama, menggunakan cara penulisan yang sedikit berbeda:

procedure Hello;
begin
  ShowMessage ('Hello world!');
end;

function Double (Value: Integer) : Integer;
begin
  Double := Value * 2;
end;

// or, as an alternative
function Double2 (Value: Integer) : Integer;
begin
  Result := Value * 2;
end;

Penggunaan Result daripada nama function untuk mengisi nilai hasil suatu function menjadi cukup populer, dan dalam pandangan saya, cenderung membuat code lebih mudah dipahami.

Setelah rutin ini didefinisikan, Anda dapat memanggil mereka satu kali atau lebih. Anda memanggil procedure untuk menjalankan tugasnya, dan memanggil function untuk menghitung suatu nilai:

procedure TForm1.Button1Click (Sender: TObject);
begin
  Hello;
end;

procedure TForm1.Button2Click (Sender: TObject);
var
  X, Y: Integer;
begin
  X := Double (StrToInt (Edit1.Text));
  Y := Double (X);
  ShowMessage (IntToStr (Y));
end;

Note: Untuk sementara, jangan hiraukan cara penulisan kedua procedure diatas, yang sebenarnya hanyalah merupakan method. Letakkan saja dua button dalam suatu form Delphi, click button tersebut saat design, dan IDE Delphi akan menghasilkan code pendukung yang tepat: Sekarang Anda cukup mengisikan perintah di antara begin dan end. Untuk mengkompilasi code diatas Anda perlu juga untuk menambahkan sebuah kontrol Edit pada form ini.

Nah sekarang kita dapat kembali pada konsep code encapsulation yang telah saya perkenalkan sebelumnya. Jika Anda memanggil function Double, Anda tidak perlu mengetahui algoritma yang digunakan untuk mengimplementasi itu. Jika Anda kemudian menemukan suatu cara yang lebih baik untuk menggandakan nilai suatu angka, Anda dapat dengan mudah mengganti code function, namun code yang memanggil tidaklah perlu dirubah (meskipun program akan berjalan lebih cepat!). Prinsip yang sama dapat diaplikasikan pada procedure Hello: Kita dapat memodifikasi hasi keluaran program dengan mengganti code procedure ini, dan method Button2Click akan secara otomatis merubah efek yang dihasilkan. Berikut ini adalah cara bagaimana kita dapat mengganti code:

procedure Hello;
begin
  MessageDlg ('Hello world!', mtInformation, [mbOK]);
end;

Tip: Ketika Anda memanggil suatu function atau procedure Delphi yang sudah ada, atau method VCL apapun, Anda harus mengingat jumlah dan type parameter yang ada. Editor Delphi membantu Anda dengan memberikan daftar parameter dari suatu function atau procedure dengan suatu hint segera setelah Anda mengetikkan nama dan tanda kurung buka. Fitur ini dinamakan Code Parameter dan merupakan bagian dari teknologi Code Insight.

Reference Parameter

Rutin Pascal memperbolehkan parameter dilewatkan secara nilai atau reference. Secara default, Pascal menggunakan metode pelewatan parameter dengan nilai: yaitu nilai akan di-copy dalam stack dan rutin menggunakan dan memanipulasi hasil copy, bukan nilai original.

Melewatkan suatu parameter dengan reference berarti nilainya tidak akan di-copy dalam stack dalam parameter formal dari suatu rutin (menghindari proses copy seringkali berarti bahwa program akan berjalan lebih cepat). Sebaliknya, program akan menunjuk pada nilai original, juga code dalam rutin tersebut. Hal ini memungkinkan procedure atau function mengganti nilai dari parameter. Melewatkan parameter dengan reference ditandai dengan penggunaan keyword var.

Teknik ini tersedia pada kebanyakan bahasa pemrograman. Hal ini tidak ditemukan dalam C, namun diperkenalkan dalam C++, dimana Anda menggunakan tanda & (pass by reference). Dalam Visual Basic semua parameter yang tidak menggunakan keyword ByVal akan dilewatkan secara reference.

Berikut ini adalah contoh melewatkan parameter secara reference menggunakan keyword var:

procedure DoubleTheValue (var Value: Integer);
begin
  Value := Value * 2;
end;

Pada kasus ini, parameter digunakan untuk melewatkan nilai ke procedure dan juga untuk mengembalikan nilai ke code yang memanggil. Jika Anda menulis:

var
  X: Integer;
begin
  X := 10;
  DoubleTheValue (X);

Nilai dari variable X menjadi 20, karena function tersebut menggunakan reference ke lokasi memory original dari X, yang mempengaruhi nilai awalnya.

Melewatkan parameter dengan reference merupakan hal yang masuk akal untuk ordinal types, untuk strings jaman kuno, dan untuk record berukuran besar. Sesungguhnya, Object Delphi selalu dilewatkan dengan nilai, karena mereka adalah reference ke diri mereka sendiri. Untuk alasan inilah, melewatkan object dengan reference tidak masuk akal (selain kasus khusus tertentu), karena hal ini berarti melewatkan reference kepada suatu reference.

Long string dalam Delphi mempunyai perilaku yang sedikit berbeda: mereka berlaku seperti reference, tapi jika Anda mengganti salah satu string variable yang menunjuk pada string yang sama dalam memory, maka string ini akan di-copy sebelum diperbaharui. Suatu long string digunakan sebagai parameter value akan berlaku seperti reference dalam istilah penggunaan memory dan kecepatan operasi. Namun jika Anda mengubah nilai string tersebut, maka nilai original tidaklah terpengaruh. Sebaliknya, jika Anda melewatkan long string itu secara reference, maka Anda dapat mengubah nilai original.

Delphi 3 memperkenalkan suatu jenis parameter yang baru, yaitu out. Suatu parameter out tidak mempunyai nilai awal dan hanya digunakan untuk mengembalikan nilai. Parameter ini sebaiknya hanya digunakan untuk procedure dan function COM; secara umum, lebih baik tetap menggunakan parameter var yang lebih efisien. Kecuali perbedaan bahwa dia tidak mempunyai nilai awal, parameter out berlaku sama seperti parameter var.

Constant Parameter

Sebagai alternatif dari parameter reference, Anda dapat menggunakan parameter const. Karena Anda tidak dapat memberikan nilai baru pada parameter const dalam suatu rutin, maka compiler dapat mengoptimalkan cara pelewatan parameter. Compiler dapat memilih suatu pendekatan yang mirip dengan paremeter reference (atau suatu const reference dalam istilah C++), tapi perilakunya akan tetap sama dengan parameter value, karena nilai original tidaklah terpengaruh oleh rutin tersebut.

Sesungguhnya, jika Anda mencoba untuk meng-compile code berikut ini, Delphi akan memberikan pesan kesalahan:

function DoubleTheValue (const Value: Integer): Integer;
begin
  Value := Value * 2;      // compiler error
  Result := Value;
end;

Open Array Parameter

Tidak seperti C, suatu function atau procedure dalam Pascal selalu mempunyai jumlah parameter yang tetap. Namun demikian, ada suatu cara untuk melewatkan parameter dengan jumlah yang bervariasi kepada suatu rutin dengan menggunakan open array.

Definisi dasar dari suatu parameter open array adalah typed open array. Hal ini berarti Anda mengindikasikan type parameter namun tidak mengetahui berapa banyak elemen yang akan disimpan ke array tersebut. Berikut ini adalah contoh dari definisi tersebut:

function Sum (const A: array of Integer): Integer;
var
  I: Integer;
begin
  Result := 0;
  for I := Low(A) to High(A) do
    Result := Result + A[I];
end;

Dengan menggunakan High(A) kita dapat memperoleh ukuran array tersebut. Perhatikan juga penggunaan nilai kembali dari function, yaitu Result, untuk menyimpan nilai sementara. Anda dapat memanggil function ini dengan melewatkan array bertype Integer:

X := Sum ([10, Y, 27*I]);

Dengan adanya array Integer tersebut, berapapun besarnya, Anda dapat melewatkannya secara langsung pada suatu rutin yang memerlukan parameter open array, atau Anda dapat menggunakan function Slice untuk melewatkan hanya sebagian array (yang diindikasikan oleh parameter kedua). Berikut ini adalah contoh, dimana array secara lengkap dilewatkan sebagai suatu parameter:

var
  List: array [1..10] of Integer;
  X, I: Integer;
begin
  // initialize the array
  for I := Low (List) to High (List) do
    List [I] := I * 2;
  // call
  X := Sum (List);

Jika Anda ingin melewatkan sebagian array ke function Slice, cukup menggunakan contoh seperti ini:

X := Sum (Slice (List, 5));

Anda dapat menemukan semua cuplikan code yang diberikan pada bagian ini di contoh OpenArr (lihat Gambar 6.1, selanjutnya, untuk form).

Gambar 6.1: Contoh OpenArr ketika tombol Partial Slice ditekan

Typed open array dalam Delphi 4 kompatibel sepenuhnya dengan dynamic array (diperkenalkan dalam Delphi 4 dan dibahas dalam Bab 8). Dynamic array menggunakan syntax yang sama seperti open array, dengan perbedaan bahwa Anda dapat menggunakan notasi seperti array of Integer untuk mendeklarasikan suatu variabel, tidak hanya untuk melewatkan parameter.

Type-Variant Open Array Parameter

Disamping typed open array, Delphi juga memperbolehkan Anda mendefinisikan type-variant atau untyped open array. Jenis Array khusus seperti ini mempunyai jumlah nilai yang belum terdefinisi, yang cukup memudahkan kita dalam melewatkan parameter.

Secara teknis, struktur const array memungkinkan Anda untuk melewatkan suatu array dengan jumlah elemen yang belum terdefinisi dengan type yang berbeda untuk suatu rutin secara berbarengan. Sebagai contoh, ini adalah definisi function Format (kita akan melihat cara penggunaan function ini dalam Bab 7, yang akan membahas mengenai string):

function Format (const Format: string;
  const Args: array of const): string;

Parameter kedua merupakan open array, yang berisi sejumlah nilai. Sebenarnya Anda dapat memanggil function ini dengan cara seperti ini:

N := 20;
S := 'Total:';
Label1.Caption := Format ('Total: %d', [N]);
Label2.Caption := Format ('Int: %d, Float: %f', [N, 12.4]);
Label3.Caption := Format ('%s %d', [S, N * 2]);

Perhatikan bahwa Anda dapat melewatkan parameter sebagai nilai konstanta, nilai suatu variabel, atau suatu ekspresi. Mendeklarasikan suatu function seperti ini adalah mudah, tapi bagaimana Anda melakukan pemrogramannya? Bagaimana Anda tahu type dari parameter yang ada? Nilai dari open array parameter yang bervariasi jenisnya adalah kompatibel dengan elemen dari type TVarRec.

Note: Jangan bingung antara record TVarRec dengan record TVarData yang digunakan oleh Variant type sendiri. Kedua struktur ini mempunyai tujuan yang berbeda dan tidaklah kompatibel. Bahkan daftar dari type yang diperbolehkan juga berbeda, karena TVarRec dapat menampung data type Delphi, sedangkan TVarData dapat menampung data type OLE.

Record TVarRec mempunyai struktur seperti berikut:

type
  TVarRec = record
    case Byte of
      vtInteger:    (VInteger: Integer; VType: Byte);
      vtBoolean:    (VBoolean: Boolean);
      vtChar:       (VChar: Char);
      vtExtended:   (VExtended: PExtended);
      vtString:     (VString: PShortString);
      vtPointer:    (VPointer: Pointer);
      vtPChar:      (VPChar: PChar);
      vtObject:     (VObject: TObject);
      vtClass:      (VClass: TClass);
      vtWideChar:   (VWideChar: WideChar);
      vtPWideChar:  (VPWideChar: PWideChar);
      vtAnsiString: (VAnsiString: Pointer);
      vtCurrency:   (VCurrency: PCurrency);
      vtVariant:    (VVariant: PVariant);
      vtInterface:  (VInterface: Pointer);
  end;

Tiap record yang memungkinkan akan mempunyai field VType, mestipun hal ini tidaklh mudah untuk awalnya karena hanya dideklarasikan sekali saja, beserta data aktual berukuran Integer (yang umumnya merupakan suatu reference atau pointer).

Dengan informasi ini, kita dapat menulis suatu function yang mampu beroperasi pada data type yang berbeda. Dalam contoh function SumAll, saya ingin menjumlahkan semua nilai dengan type yang berbeda, mengubah string menjadi integer, karakter menjadi nilai urutan yang bersesuaian, dan menambah 1 untuk nilai Boolean True. Code didasarkan pada statement case, dan cukup sederhana, meskipun kita harus membalik reference pointer secara cukup sering:

function SumAll (const Args: array of const): Extended;
var
  I: Integer;
begin
  Result := 0;
  for I := Low(Args) to High (Args) do
    case Args [I].VType of
      vtInteger: Result :=
        Result + Args [I].VInteger;
      vtBoolean:
        if Args [I].VBoolean then
          Result := Result + 1;
      vtChar:
        Result := Result + Ord (Args [I].VChar);
      vtExtended:
        Result := Result + Args [I].VExtended^;
      vtString, vtAnsiString:
        Result := Result + StrToIntDef ((Args [I].VString^), 0);
      vtWideChar:
        Result := Result + Ord (Args [I].VWideChar);
      vtCurrency:
        Result := Result + Args [I].VCurrency^;
    end; // case
end;

Saya telah menambahkan code ini pada contoh OpenArr, yang memanggil function SumAll ketika suatu tombol ditekan:

procedure TForm1.Button4Click(Sender: TObject);
var
  X: Extended;
  Y: Integer;
begin
  Y := 10;
  X := SumAll ([Y * Y, 'k', True, 10.34, '99999']);
  ShowMessage (Format (
    'SumAll ([Y*Y, ''k'', True, 10.34, ''99999'']) => %n', [X]));
end;

Anda dapat melihat hasil keluaran dari pemanggilan code ini, dan form pada contoh OpenArr, pada Gambar 6.2.

Gambar 6.2: Form dari contoh OpenArr, dengan message box yang ditampilkan ketika tombol Untyped ditekan.

Delphi Calling Conventions

Delphi versi 32-bit telah memperkenalkan suatu pendekatan baru untuk melewatkan parameter, yang dikenal dengan fastcall: bilamana memungkinkan, sampai tiga parameter dapat dilewatkan dengan register CPU yang membuat pemanggilan function menjadi jauh lebih cepat. Fast calling convention (digunakan secara default pada Delphi 3) diindikasikan dengan register keyword.

Masalahnya hal ini merupakan default convention, dan function yang menggunakannya tidaklah kompatibel dengan Windows: fungsi dari Win32 API harus dideklarasikan menggunakan stdcall calling convention, suatu perpaduan dari original Pascal calling convention dari Win16 API dan cdecl calling convention dari bahasa C.

Secara umum tidak ada alasan untuk tidak menggunakan fast calling convention yang baru, kecuali Anda membuat suatu external Windows call atau mendefinisikan Windows callback function. Kita akan melihat suatu contoh penggunaan stdcall convention sebelum akhir bab ini. Anda dapat menemukan suatu ringkasan dari Delphi calling convention dalam Help Delphi di topik Calling Convention.

Apakah suatu Method itu?

Jika Anda telah bekerja dengan Delphi atau membaca buku manualnya, Anda mungkin telah mendengar istilah “method”. Suatu method merupakan function atau procedure yang khusus yang berkaitan dengan suatu data type, suatu class. Dalam Delphi, tiap kali kita menangani suatu event, kita harus mendefinisikan suatu method, yang umumnya adalah suatu procedure. Meskipun demikian, secara umum istilah method digunakan untuk mengindikasikan baik function maupun procedure yang berkaitan dengan suatu class.

Kita telah melihat sejumlah method dalam contoh pada bab ini dan bab sebelumnya. Berikut ini adalah suatu method kosong yang secara otomatis ditambahkan oleh Delphi untuk suatu source code pada suatu form:

procedure TForm1.Button1Click(Sender: TObject);
begin
  {here goes your code}
end;

Forward Declarations

Ketika Anda harus menggunakan suatu identifier (dengan jenis apapun), kompiler harus telah melihat semacam deklarasi sebelumnya untuk mengetahui apa yang ditunjuk oleh identifier tersebut. Untuk alasan inilah, Anda biasanya memberikan suatu full declaration sebelum menggunakan suatu rutin. Namun demikian, ada kasus tertentu yang tidak bisa menggunakan pendekatan semacam ini. Jika procedure A memanggil procedure B, dan procedure B memanggil procedure A, ketika Anda mulai menulis code, Anda harus melakukan pemanggilan rutin dimana kompiler masih belum melihat suatu deklarasi.

Jika Anda ingin mendeklarasikan keberadaan suatu procedure atau function dengan nama dan parameter tertentu, tanpa memberikan code sesungguhnya, Anda dapat menuliskan procedure atau function diikuti dengan keyword forward:

procedure Hello; forward;

Selanjutnya, code harus menyediakan definisi lengkap dari procedure tersebut, tapi procedure ini dapat dipanggil sebelum dia didefinisikan secara lengkap. Berikut ini adalah contoh untuk memberikan ide kepada Anda:

procedure DoubleHello; forward;

procedure Hello;
begin
  if MessageDlg ('Do you want a double message?',
      mtConfirmation, [mbYes, mbNo], 0) = mrYes then
    DoubleHello
  else
    ShowMessage ('Hello');
end;

procedure DoubleHello;
begin
  Hello;
  Hello;
end;

Pendekatan ini memungkinkan Anda menulis mutual recursion: DoubleHello memanggil Hello, tapi Hello mungkin memanggil DoubleHello juga. Tentu saja harus ada suatu kondisi untuk menghentikan rekursi ini, untuk menghindari stack overflow. Anda dapat melihat code ini, dengan sedikit perubahan, dalam contoh DoubleH.

Meskipun suatu forward procedure declaration tidaklah umum dalam Delphi, tapi ada suatu kasus serupa yang lebih sering. Ketika Anda mendeklarasikan suatu procedure atau function dalam bagian interface dari suatu unit (pembahasan lebih lanjut tentang unit akan Anda temui pada bab selanjutnya), hal ini diperhitungkan sebagai forward declaration, bahkan bila kata kunci forward tidak dijumpai. Sebenarnya Anda tidak dapat menulis badan suatu rutin pada bagian interface dari suatu unit. Pada waktu yang sama, Anda harus menyediakan implementasi aktual dari tiap rutin yang telah Anda deklarasikan.

Hal yang sama juga berlaku untuk deklarasi suatu method didalam suatu class type yang secara otomatis dihasilkan oleh Delphi (saat Anda menambahkan suatu event pada suatu form atau komponen didalamnya). Event handler yang dideklarasikan dalam suatu class TForm merupakan forward declaration: code akan disediakan pada bagian implementation dari suatu unit. Berikut ini adalah cuplikan code dari contoh sebelumnya, dengan deklarasi method Button1Click:

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  end;

Procedural Types

Suatu fitur unik lainnya dari Object Pascal adalah adanya procedural type. Ini merupakan suatu topik pemrograman tingkat lanjut, yang hanya digunakan secara teratur oleh sedikit pemrogram Delphi. Namun demikian, karena kita akan mendiskusikan topik yang terkait pada bab-bab selanjutnya (secara spesifik, method pointer, suatu teknik yang sangat sering dipakai oleh Delphi sendiri), maka cukup berharga untuk melihat secara sepintas disini. Jika Anda adalah pemrogram tingkat sedang, Anda dapat melewati bagian ini sekarang, dan kembali lagi saat Anda merasa sudah siap.

Dalam Pascal, terdapat konsep prosedural type (yang mirip dengan konsep function pointer dalam bahasa pemrograman C). Deklarasi procedural type mengindikasikan daftar parameter dan, untuk kasus function, jenis nilai yang dikembalikan. Misalnya, Anda dapat mendeklarasikan sebuah procedural type yang baru, dengan parameter Integer yang dilewatkan secara reference, dengan code berikut ini:

type
  IntProc = procedure (var Num: Integer);

Procedural type ini kompatibel dengan rutin apapun yang mempunyai parameter yang persis sama (atau function signature yang sama, dalam istilah C). Berikut ini adalah contoh dari suatu rutin yang kompatibel:

procedure DoubleTheValue (var Value: Integer);
begin
  Value := Value * 2;
end;

Note: Dalam Delphi versi 16-bit, rutin harus dideklarasikan menggunakan direktif far agar bisa digunakan sebagai nilai aktual dari suatu procedural type.

Procedural type dapat digunakan untuk dua kegunaan yang berbeda: Anda dapat mendeklarasikan variabel dari suatu procedural type atau melewatkan suatu procedural type (yaitu suatu function pointer) sebagai parameter ke rutin yang lain. Dengan deklarasi type dan procedure sebelumnya, Anda dapat menuliskan code seperti ini:

var
  IP: IntProc;
  X: Integer;
begin
  IP := DoubleTheValue;
  X := 5;
  IP (X);
end;

Code ini mempunyai efek yang sama dengan versi yang lebih pendek berikut:

var
  X: Integer;
begin
  X := 5;
  DoubleTheValue (X);
end;

Versi pertama jelas lebih rumit, jadi kenapa kita harus memakainya? Dalam beberapa kasus, kemampuan untuk memutuskan fungsi mana yang akan dipanggil dan pemanggilan fungsi pada saat berikutnya sangatlah berguna. Sangatlah memungkinkan untuk membuat suatu contoh rumit yang menunjukkan pendekatan ini. Namun demikian, saya cenderung membiarkan Anda menjelajahi yang lebih sederhana, yaitu ProcType. Contoh ini lebih rumit daripada berbagai contoh yang telah kita lihat sejauh ini, untuk membuat situasi menjadi lebih realistik.

Anda cukup membuat suatu project baru dan meletakkan dua buah radio button dan sebuah push button, seperti yang terlihat pada Gambar 6.3. Contoh ini didasarkan pada dua procedure. Sebuah procedure digunakan untuk menghitung nilai dua kali dari parameter. Procedure ini serupa dengan versi yang telah saya tunjukkan sebelumnya pada bagian ini. Procedure kedua digunakan untuk menghitung nilai tiga kali dari parameter, dan karenanya diberi nama TripleTheValue:

Gambar 6.3: Form dari contoh ProcType.

procedure TripleTheValue (var Value: Integer);
begin
  Value := Value * 3;
  ShowMessage ('Value tripled: ' + IntToStr (Value));
end;

Kedua procedure ini menampilkan apa yang sedang berjalan, untuk memberitahu kita bahwa mereka sedang dijalankan. Ini merupakan suatu fitur pelacakan sederhana yang dapat Anda gunakan untuk memeriksa apakah atau kapan suatu bagian code dijalankan, daripada menambahkan suatu breakpoint disana.

Tiap kali seorang user menekan tombol Apply, salah satu dari kedua procedure ini akan dijalankan, tergantung pada status radio button. Sebenarnya, ketika Anda mempunyai dua buah radio button dalam satu form, hanya salah satu yang dapat dipilih pada suatu waktu. Code ini sebenarnya dapat diimplementasikan dengan memeriksa nilai radio button dalam code event Click dari button Apply. Untuk mendemonstrasikan penggunaan procedural type, saya menggunakan pendekatan yang lebih panjang tapi menarik. Tiap kali seorang user meng-klik salah satu dari radio button, satu dari procedure akan disimpan pada satu variabel:

procedure TForm1.DoubleRadioButtonClick(Sender: TObject);
begin
  IP := DoubleTheValue;
end;

Ketika sang user meng-klik push button, procedure yang telah kita simpan akan dijalankan:

procedure TForm1.ApplyButtonClick(Sender: TObject);
begin
  IP (X);
end;

Untuk memungkinkan tiga fungsi yang berbeda untuk mengakses variabel IP dan X, kita perlu membuat mereka terlihat pada semua form; mereka tidak dapat dideklarasikan secara local (dalam salah satu method). Solusi untuk permasalahan ini adalah menempatkan variabel ini pada deklarasi form:

type
  TForm1 = class(TForm)
    ...
  private
    { Private declarations }
    IP: IntProc;
    X: Integer;
  end;

Kita akan melihat secara persis apakah arti hal ini pada bab selanjutnya, tapi untuk saat ini, Anda perlu mengubah code yang dihasilkan oleh Delphi untuk class type seperti yang diindikasikan diatas, dan menambahkan definisi procedural type seperti yang telah saya tunjukkan sebelumnya. Untuk menginisialisasi variabel ini dengan nilai yang sesuai, kita dapat menangani event OnCreate pada form (pilih event ini pada Object Inspector setelah Anda mengaktifkan form, atau cukup melakukan double-click pada form). Saya sarankan Anda membaca listing code ini untuk mempelajari detil source code pada contoh ini.

Anda dapat melihath suatu contoh praktis dari penggunaan procedural type di Bab 9, pada bagian A Windows Callback Function.

Function Overloading

Ide untuk melakukan overloading sangatlah sederhana: compiler memperbolehkan Anda untuk mendefinisikan dua function atau procedure dengan nama yang sama, asalkan parameternya berbeda. Dengan memeriksa parameter, sebenarnya, compiler dapat menentukan rutin versi mana yang ingin Anda jalankan.

Coba lihat sekian function yang diambil dari unit Math dari VCL:

function Min (A,B: Integer): Integer; overload;
function Min (A,B: Int64): Int64; overload;
function Min (A,B: Single): Single; overload;
function Min (A,B: Double): Double; overload;
function Min (A,B: Extended): Extended; overload;

Ketika Anda memanggil Min (10, 20), compiler dengan mudah menentukan bahwa Anda bermaksud untuk menjalankan function pertama dari grup diatas, sehingga return value adalah sebuah Integer.

Ada dua buah aturan dasar, yaitu:

  • Tiap versi rutin harus diikuti dengan kata kunci overload.
  • Haruslah ada perbedaan pada jumlah maupun type parameter, atau keduanya. Namun demikian, Return type tidak dapat digunakan untuk membedakan kedua rutin.

Berikut ini adalah tiga versi overload dari suatu procedure ShowMsg yang saya tambahkan pada contoh OverDef (suatu aplikasi yang mendemonstrasikan overload dan default parameter):

procedure ShowMsg (str: string); overload;
begin
  MessageDlg (str, mtInformation, [mbOK], 0);
end;

procedure ShowMsg (FormatStr: string;
  Params: array of const); overload;
begin
  MessageDlg (Format (FormatStr, Params),
    mtInformation, [mbOK], 0);
end;

procedure ShowMsg (I: Integer; Str: string); overload;
begin
  ShowMsg (IntToStr (I) + ' ' + Str);
end;

Ketiga function ini menunjukkan suatu message box dengan sebuah string, setelah secara optional melakukan format string dalam cara yang berlainan. Berikut ini adalah tiga macam pemanggilan dari program:

ShowMsg ('Hello');
ShowMsg ('Total = %d.', [100]);
ShowMsg (10, 'MBytes');

Apa yang mengejutkan saya dalam konotasi positif, adalah teknologi Code Parameter dari Delphi bekerja dengan baik untuk procedure dan function yang di-overload. Sesaat setelah Anda mengetik tanda kurung buka setelah nama rutin, semua alternatif yang memungkinkan akan ditampilkan. Setelah Anda memasukkan parameter, Delphi menggunakan type mereka untuk menentukan alternatif mana yang masih memungkinkan. Dalam Gambar 6.4 Anda dapat melihat bahwa setelah mengetik suatu string constant, Delphi hanya menampilkan versi yang kompatibel (menghilangkan versi procedure ShowMsg yang mempunyai parameter pertama berupa Integer).

Gambar 6.4: Berbagai alternatif yang ditawarkan Code Parameters untuk rutin yang di-overload yang disaring berdasarkan parameter yang tersedia.

Kenyataan bahwa tiap versi dari rutin yang di-overload haruslah ditandai secara benar membawa implikasi bahwa Anda tidak dapat melakukan overload atas suatu rutin yang sudah ada pada unit yang sama yang tidak ditandai dengan kata kunci overload. (Pesan kesalahan yang Anda terima saat mencobanya adalah: “Previous declaration of ‘<name>’ was not marked with the ‘overload’ directive.”) Namun demikian, Anda dapat melakukan overload suatu rutin yang dideklarasikan pada unit yang berbeda. Hal ini diperlukan untuk kompatibilitas dengan versi Delphi sebelumnya, yang memperbolehkan unit yang berbeda untuk menggunakan nama rutin yang sama. Namun demikian, perhatikan bahwa kasus khusus seperti ini bukanlah suatu fitur tambahan untuk overloading, tapi suatu indikasi permasalahan yang mungkin Anda hadapi.

Misalnya, Anda dapat menambahkan code berikut pada suatu unit:

procedure MessageDlg (str: string); overload;
begin
  Dialogs.MessageDlg (str, mtInformation, [mbOK], 0);
end;

Code ini tidaklah meng-overload rutin MessageDlg yang sesungguhnya. Sebenarnya jika Anda mengetikkan:

MessageDlg ('Hello');

Anda akan mendapatkan suatu pesan kesalahan yang mengindikasikan bahwa beberapa parameter tidak dijumpai. Satu-satunya cara untuk memanggil versi lokal daripada versi dari VCL adalah merujuk secara eksplisit pada unit lokal, sesuatu yang bertentangan dengan ide overloading:

OverDefF.MessageDlg ('Hello');

Default Parameters

Sebuah fitur baru dari Delphi 4 adalah Anda dapat memberikan sebuah nilai default untuk parameter suatu function, dan Anda dapat menjalankan function tersebut dengan atau tanpa parameter.

procedure MessBox (Msg: string;
  Caption: string = 'Warning';
  Flags: LongInt = mb_OK or mb_IconHand);
begin
  Application.MessageBox (PChar (Msg),
    PChar (Caption), Flags);
end;

Dengan definisi ini, kita dapat menjalankan procedure dengan berbagai cara seperti berikut:

MessBox ('Something wrong here!');
MessBox ('Something wrong here!', 'Attention');
MessBox ('Hello', 'Message', mb_OK);

Pada Gambar Figure 6.5 Anda dapat melihat bahwa Code Parameters dari Delphi secara benar menggunakan style yang berbeda untuk mengindikasikan parameter yang mempunyai nilai default, sehingga Anda dapat dengan mudah menentukan parameter mana yang dapat dilewatkan.

Gambar 6.5: Code Parameters dari Delphi menandai parameter yang mempunyai nilai default dengan tanda kurung siku; Anda dapat melewatkan parameter ini saat menjalankan rutin tersebut.

Perhatikan bahwa Delphi tidak menghasilkan suatu code khusus untuk mendukung default parameter; atau membuat beberapa salinan rutin tersebut. Parameter yang tidak dilewatkan akan ditambahkan oleh compiler ke code pemanggil.

Ada juga satu pembatasan penting yang mempengaruhi penggunaan default parameters: Anda tidak dapat “melewati” parameter. Misalnya, Anda tidak melewatkan parameter ketiga walaupun Anda melewatkan parameter kedua:

MessBox ('Hello', mb_OK); // error

Ini merupakan aturan utama untuk default parameters: Dalam suatu pemanggilan, Anda dapat melewatkan parameter dimulai dari yang paling akhir. Dengan kata lain, jika Anda melewatkan suatu parameter, Anda juga harus melewatkan semua parameter setelah itu.

Ada beberapa aturan lain untuk default parameter, seperti berikut:

  • Parameter dengan nilai default haruslah diletakkan pada akhir daftar parameter.
  • Nilai default haruslah berupa konstanta. Hal ini terlihat membatasi type yang Anda dapat pakai dengan default parameter. Misalnya, suatu array dinamis atau suatu interface type tidak dapat mempunyai default parameter selain nil; record tidak dapat digunakan sama sekali.
  • Default parameter harus dilewatkan secara nilai (passed by value) atau sebagai const. Suatu parameter reference (var) tidak dapat mempunyai nilai default.

Menggunakan default parameters dan overloading pada waktu yang bersamaan dapat menyebabkan munculnya beberapa masalah, karena kedua fitur yang bisa bertabrakan/konflik. Misalnya, bila saya menambahkan versi baru untuk procedure ShowMsg pada contoh sebelumnya:

procedure ShowMsg (Str: string; I: Integer = 0); overload;
begin
  MessageDlg (Str + ': ' + IntToStr (I),
    mtInformation, [mbOK], 0);
end;

maka compiler tidak akan menampilkan pesan kesalahan – hal ini adalah definisi yang legal. Namun demikian, pemanggilan:

ShowMsg ('Hello');

ditandai oleh compiler sebagai Ambiguous overloaded call to ‘ShowMsg’. Perhatikan bahwa error ini muncul pada suatu baris code yang dikompilasi dengan benar sebelum definisi baru yang ter-overload. Pada prakteknya, kita tidak mempunyai cara untuk menjalankan procedure ShowMsg dengan satu parameter berupa String, karena compiler tidak tahu apakah kita ingin menjalankan versi dengan hanya satu parameter String atau versi dengan parameter String dan parameter Integer dengan nilai default. Ketika compiler mengalami kebingungan, dia akan berhenti dan meminta pemrogram untuk menyatakan maksudnya dengan lebih jelas.

Kesimpulan

Menulis procedure dan function merupakan elemen penting dari pemrograman, meskipun dalam Delphi Anda akan cenderung menulis method — procedure dan function terhubung dengan class dan object.

Ketimbang beralih ke fitur object-oriented, beberapa bab berikut ini akan memberikan Anda beberapa detil pada elemen pemrograman Pascal lainnya, mulai dari string.

5.Pengenalan Komputer Proses transformasi data berbantukan komputer

Gambar 1. diagram tansformasi data

Penggunaan komputer
Kelebihan Kelemahan
1. Kecepatan
2. Konsistensi
3. Kapasitas
4. Reusability
1. Hanya menjalankan instruksi

Bahasa (language)

Adalah suatu sistim untuk berkomunikasi. Bahasa tertulis menggunakan simbol (yaitu huruf) untuk membentuk kata. Dalam ilmu komputer,bahasa manusia disebut bahasa alamiah (natural languages), dimana komputer tidak bisa memahaminya, sehingga diperlukan suatu bahasa komputer.

Bahasa pemrograman (programming language)

Komputer mengerjakan transformasi data berdasarkan kumpulan perintah – program – yang telah dibuat oleh pemrogram. Kumpulan perintah ini harus dimengerti oleh komputer, berstruktur tertentu (syntax) dan bermakna. Bahasa pemrograman merupakan notasi untuk memberikan secara tepat program komputer. Berbeda dengan bahasa alamiah, mis. Bahasa Indonesia, Inggris dsb. yang merupakan bahasa alamiah(natural language), sintaks dan semantik bahasa pemrograman (komputer) ditentukan secara kaku, sehingga bahasa pemrograman juga disebut sebagai bahasa formal (formal language). Jadi, dalam bahasa pemrograman yang digunakan sebagai alat komunikasi untuk memberikan perintah kepada komputer tidak berlaku kebebasan berekspresi seperti laiknya dalam bahasa alamiah. Pemrograman dalam pengertian luas meliputi seluruh kegiatan yang tercakup dalam pembuatan program, termasuk analisis kebutuhan (requirement’s analysis) dan keseluruhan tahapan dalam perencanaan (planning) , perancangan (design) dan pewujudannya (implementation). Dalam pengertian yang lebih sempit, pemrograman merupakan pengkodean (coding atau program writing = penulisan program) dan pengujiannya (testing) berdasarkan rancangan tertentu. Pemahaman yang lebih sempit ini sering digunakan dalam pembuatan program-program terapan komersial yang membedakan antara system analyst yang bertanggung jawab dalam menganalisa kebutuhan, perencanaan dan perancangan program dengan pemrogram (programmer) yang bertugas membuat kode program dan menguji kebenaran program.

Generasi bahasa pemrograman:

• Generasi I: machine language
• Generasi II: assembly language : Asssembler
• Generasi III: high-level programming language: C, PASCAL, dsb.
• Generasi IV: 4 GL (fourth-generation language): SQL
Gambar 2. Tingkatan bahasa komputer

2. Bahasa Tingkat Rendah (low-level language)

Merupakan bahasa assembly atau bahasa mesin. Lebih dekat ke mesin (hardware), dimana high-level programming languages dekat pada bahasa manusia.

– Bahasa Mesin (machine language)

Bahasa mesin merupakan representasi tertulis machine code (kode mesin), yaitu kode operasi suatu mesin tertentu. Bahasa ini bersifat khusus untuk mesin tertentu dan “dimengerti” langsung oleh mesin, sehingga pelaksanaan proses sangat cepat. Bahasa mesin kelompok komputer tertentu berlainan dengan bahasa mesin kelompok komputer yang lain. Abstraksi bahasa ini adalah kumpulan kombinasi kode biner “0” dan “1” yang sangat tidak alamiah bagi kebanyakan orang – kecuali insinyur pembuat mesin komputer. Karena tidak alamiah bagi kebanyakan orang, bahasa mesin juga disebut bahasa tingkat rendah.

– Bahasa Assembly (assembly language)

Bahasa rakitan (assembly language) merupakan notasi untuk menyajikan bahasa mesin yang lebih mudah dibaca dan dipahami oleh manusia. Bahasa ini sudah menggunakan simbol alpabet yang bermakna (mnemonic). Contoh “MOV AX 1111”, pindahkan ke register AX nilai 1111.Proses data oleh komputer berdasarkan perintah bahasa rakitan adalah cepat. Meski demikian masih merepotkan-bahkan bagi kebanyakan pemrogram, karena masih harus mengingat-ingat tempat penyimpanan data. Bahasa rakitan juga bersifat khusus untuk mesin tertentu. Contoh: Assembler.

2. Bahasa Tingkat Tinggi (high-level language)

Adalah bahasa pemrograman yang dekat dengan bahasa manusia, kelebihan utama dari bahasa ini adalah mudah untuk di baca, tulis, maupun diperbaharui, sebelum bisa dijalankan program harus terlebih dahulu di-compile. Contoh Ada, Algol, BASIC, COBOL, C, C++, FORTRAN, LISP, dan Pascal, dsb. Pada generasi bahasa pemrograman terakhir sekarang ini, kedua cara interpretasi dan kompilasi digabungkan dalam satu lingkungan pengembangan terpadu (IDE = integrated development environment). Cara interpretasi memudahkan dalam pembuatan program secara interaktif dan cara kompilasi menjadikan eksekusi program lebih cepat. Pertama program dikembangkan interaktif, kemudian setelah tidak ada kesalahan keseluruhan program dikompilasi. Contoh bahasa program seperti ini adalah Visual BASIC yang berbasis BASIC dan Delphi yang berbasis PASCAL. Bahasa tingkat tinggi bersifat portable. Program yang dibuat menggunakan bahasa tingkat tinggi pada suatu mesin komputer bersistem operasi tertentu, hampir 100% bisa digunakan pada berbagai mesin dengan aneka sistem operasi. Kalaupun ada perbaikan sifatnya kecil sekali.

3. 4GL (fourth-generation language)

Lebih dekat ke bahasa manusia dibandingkan dengan high-level programming languages. Biasanya dipakai untuk mengakses database. Contoh perintah pada bahasa SQL: FIND ALL RECORDS WHERE NAME IS “JOHN”

Bahasa Pemrograman untuk tujuan tertentu

Tabel 2. Bahasa Pemrograman untuk tujuan tertentu. (Mc. Connell, h 46)

Jenis Program Bahasa Terbaik Bahasa Terburuk
Data terstruktur ADA, C /C++, PASCAL Assembler, BASIC
Proyek cepat BASIC PASCAL, ADA, Assembler
Eksekusi cepat Assembler, C BASIC, Intrepreter Language
Kalkulasi matematika FORTRAN PASCAL
Menggunakan memori dinamis PASCAL, C BASIC
Lingkungan bermemori terbatas BASIC, Assembler, C FORTRAN
Program real-time ADA, Assembler, C BASIC, FORTRAN
Manipulasi string BASIC, PASCAL C
Program mudah dikelola PASCAL, ADA C, FORTRAN

Tabel 2. Rasio pernyataan bahasa tingkat tinggi dengan kode bahasa rakitan yang setara. (Mc. Connell, h 46)

Bahasa Rasio
Assembler 1: 1
ADA 1 : 4.5
Quick / Turbo / Basic 1 : 5
C 1 : 2.5
FORTRAN 1 : 3
PASCAL 1 : 3.5

Compiler dan Intepreter

Compiler Adalah suatu program yang menterjemahkan bahasa program (source code) ke dalam bahasa objek (object code). Compiler menggabungkan keseluruhan bahasa program dikumpulkan kemudian disusun kembali.

Gambar 3. proses kompilasi program komputer
Tahapan Kompilasi:
1. Pertama source code ( program yang ditulis) dibaca ke memory komputer.
2. source code tersebut diubah menjadi object code (bahasa assembly)
3. object code dihubungkan dengan library yang dibutuhkan untuk membentuk file yang bisa di eksekusi.

Compiler memerlukan waktu untuk membuat suatu program yang dapat dieksekusi oleh komputer. Tetapi, program yang diproduksi oleh Compiler bisa berjalan lebih cepat dibandingkan dengan yang diproduksi oleh Interpreter, dan bersifat independen.

Interpreter
berbeda dengan compiler, Interpreter menganalisis dan mengeksekusi setiap baris dari program tanpa melihat program secara keseluruhan. Keuntungan dari Interpreter adalah dalam eksekusi yang bisa dilakukan dengan segera. Tanpa melalui tahap kompilasi, untuk alasan ini interpreter digunakan pada saat pembuatan program berskala besar.

Tipe Pemrograman

1. Pemrograman terstruktur
Pemrograman terstruktur adalah cara pemrosesan data yang terstuktur. Terstruktur dalam: analisa, cara dan penulisan program. Prinsip pemrograman terstruktur:
a. Gunakan rancangan pendekatan dari atas ke bawah (top down design),
b. Bagi program ke dalam modul-modul logika yang sejenis,
c. Gunakan sub-program untuk proses-proses sejenis yang sering digunakan,
d. Gunakan pengkodean terstruktur: IF … THEN, DO … WHILE dan lain-lainnya,
e. Hindarkan penggunaan perintah GO TO bila tidak diperlukan,
f. Gunakan nama-nama bermakna (mnemonic names), dan
g. Buat dokumentasi yang akurat dan berarti.
Dalam perencanaan dan perancangan dari atas ke bawah, kategori dan penyelesaian masalah dimulai dari bagian yang utama kemudian dibagi menjadi bagian yang lebih kecil. Rancangan cara ini memudahkan penulisan, pengujian, koreksi dan dokumentasi program. Tahapan rancangan atas ke bawah dalam pemrograman:
1. Tentukan keluaran (output) yang diminta, masukan (input) yang diperlukan danproses-proses utama yang diperlukan untuk transformasi data.
2. Membagi proses utama ke dalam modul-modul fungsional.
3. Buat algoritma msing-masing modul, dari modul utama ke sub-sub modul.
Setiap modul dalam proses rancangan atas ke bawah biasanya dibatasi dalam isi maupun batasan-batasan berikut:
1. Setiap modul hanya mempunyai satu masukan dan keluaran
2. Setiap modul hanya mewakili satu fungsi program.
Rancangan (design) terstruktur:
1. Membagi program menjadi sub-program
2. Menekankan fungsionalitas.
3. Cocok untuk sistem yang banyak mempunyai fungsi independen. Gaya penulisan program terstruktur:Menggunakan indentasi sehingga jelas struktur dan kontrol program.Memudahkan pembacaan, pemahaman, penelusuran kesalahan dan pembuatan koreksi.

2. Bahasa pemrograman prosedural – terstruktur
Bahasa pemrograman prosedural adalah bahasa pemrograman yang mendukung pembuatan program sebagai kumpulan prosedur. Prosedur-prosedur ini dapat saling memanggil dan dipanggil dari manapun dalam program dan dapat menggunakan parameter yang berbeda-beda untuk setiap pemanggilan. Prosedur adalah bagian dari program untuk melakukan operasi-operasi yang sudah ditentukan dengan menggunakan parameter tertentu. Bahasa pemrograman terstruktur adalah pemrograman yang mendukung abstraksi data, pengkodean terstruktur dan kontrol program terstruktur. Kontrol program terstruktur:
1. Runtun – urut (sequence)
2. Pilihan (selection)
3. Pengulangan (repetition – loop)

Gambar 4. Tahap pengembangan program
1. Batasan Masalah Merencanakan sistim dan spesifikasi program: Siapa yang akan menggunakan program dan untuk apa? dengan cara:
– Menentukan tujuan dan hasil yang akan dicapai
– Menentukan hal-hal yang diperlukan oleh sistim
– Pengumpulan data
2. Pengembangan Model Pembuatan model dari sistim yang akan kita bangun, model adalah suatu gambaran sederhana dari sistim yang kita buat. Dengan pembuatan model akan terlihat dengan jelas hubungan antara objek-objek dalam sistim yang akan kita bangun. Untuk penyelesaian aritmatik, biasanya model dibuat dalam bentuk rumus matematik.
Contoh: untuk membuat program luas_lingkaran kita membuat model matematis c = a x b
3. Rancangan algoritma Pembuatan urutan instruksi yang akan ditulis pada program ( dijelaskan lebih lanjut)
4. Pemrograman Implementasi algoritma ke dalam program (algoritma sendiri dalam komputer adalah merupakan program).
5. Uji dan Validasi Pengujian terhadap program : seperti kesalahan penulisan (syntax error) , kesalahan saat eksekusi (runtime error) kesalahan logika program (program berjalan tapi menghasilkan output yang salah- fatal error).
6. Dokumentasi Pembuatan catatan pada program terutama pada modul-modul yang rumit.
Contoh: Sistim Pengembangan Software Life Cycle

Gambar 5. Sistim Pengembangan Software Life Cycle

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s


%d blogger menyukai ini: