Blogger Template by Blogcrowds

^_^ WELLCOME ^_^

Selamat Datang...Sugeng Rawuh...
di BLOGGER pertamaku....
ini adalah artikel tentang e-lerning yang di fokuskan kepada materi kuliah tentang Konsep Teknologi Informasi

terima kasih sudah berkunjung di alamat link ini...

Dinamic Loading



Semua plug-ins di Netscape atau modul di Apache memakai teknik yang sama, yaitu Dynamic Loading (DL). Ada beberapa terminologi lain untuk menyebutkan teknik ini, seperti DSO (Dynamic Shared Object) atau DLL (Dynamic Link Library). Tulisan ini akan memberikan pengantar tentang bagaimana membuat program dengan memakai teknik ini.1.Pendahuluan Dalam pembuatan sebuah program, terkadang kita tidak ingin semua fungsi diimplementasikan langsung pada program utama, karena kita mungkin belum tahu fungsi apa saja yang harus disediakan. Atau kita menginginkan pemakai program ini harus mempunyai kemungkinan untuk menambahkan fungsi-fungsi yang belum ada pada program yang akan kita tulis. Tentu saja semua itu harus dapat dilakukan tanpa harus melakukan proses rekompilasi program utama dari awal. Teknik Dynamic Loading adalah solusi yang tepat untuk merealisasikan keinginan di atas. Yang harus kita kerjakan hanyalah menulis program pokok yang mempunyai kemampuan memuatkan (loading) fungsi tambahan dan menginterpretasikan fungsi ini dengan benar. Sebelum kita membahas lebih jauh, kita harus mengetahui terlebih dahulu bagaimana tahapan proses dari file source code menjadi file yang bisa dieksekusi. Kita akan memulai dengan menulis program yang sudah tidak asing lagi bagi para pemrogram bahasa C yaitu Hello World.#include int main(int argc, char** argv) { printf("Hello World"); } Untuk melakukan proses kompilasi dapat dipakai perintah:$ gcc -o hello hello.c Instruksi di atas akan melakukan proses berikut:1.Proses kompilasi Source code hello.c dikompilasi menghasilkan file objek hello.o. Karena fungsi printf() tidak diimplementasikan di file ini, maka kompiler akan memberi catatan di tabel file objek ini bahwa fungsi printf() belum mempunyai referensi. 2.Proses linking Linker akan mencari di librari standard pengimplementasi fungsi yang tidak dapat ditemukan pada saat proses kompilasi, dalam hal ini pengimplementasi fungsi printf(). Perintah di atas secara implisit memanggil linker dan menambahkan beberapa librari standar sebagai parameter. Di sini pengimplementasi fungsi dari printf() akan ditemukan di libc yang juga ditambahkan tanpa sepengetahuan sang pemrogram. Proses linking librari ke program utama dibedakan menjadi dua tergantung dari caranya: 2.Proses linking statis (static linking). Di sini jika pengimplementasi fungsi printf() ditemukan, maka akan dikopikan ke dalam file objek hello. 3.Proses linking dinamis (dynamic linking). Di sini libc diimplementasikan sebagai shared library. Linker hanya akan mencatatkan referensi ke simbol pengimplementasi fungsi printf() pada file objek hello. Jika file program hello hasil dari proses linking statis dieksekusi, maka objek file program akan dimuatkan ke memori. Kemudian fungsi pertama, yang nama simbolnya tergantung dari sistem (contohnya __main), akan dipanggil. Fungsi ini, yang biasanya didefinisikan oleh kompiler atau librari akan melakukan seting dan initialisasi internal dan akhirnya akan memanggil fungsi utama main() yang didefinisikan oleh user. Pada cara kedua, jika program hello dieksekusi, maka objek file ini mula-mula juga akan dimuatkan ke memori. Kemudian linker dinamis (dynamic linker) akan membaca catatan referensi yang ada di file program hello yang dihasilkan oleh linker sebelumnya. Jika objek file shared library yang berisi pengimplementasi fungsi yang dibutuhkan belum dimuatkan ke memori, maka linker dinamis akan secara rekursif memuatkan objek file shared library ini ke memori. Rekursif berarti, jika suatu file shared library mempunyai referensi ke file shared library lainnya, maka objek file shared library yang lain ini juga akan dimuatkan ke memori (jika belum dimuat) dan seterusnya. Selanjutnya semua referensi yang merujuk ke simbol pengimplementasi fungsi akan diperbaharui ke posisi simbol yang aktual. Ini disebabkan posisi simbol pengimplementasi baru dapat ditentukan setelah objek file shared library dimuatkan ke memori (runtime). Dan posisi ini selalu berubah-ubah, tergantung dari banyak hal, seperti kapan objek file shared library ini dimuatkan ke memori, objek file shared library apa saja yang sudah dimuatkan ke memori dan sebagainya. Karena kita hanya akan membahas cara yang kedua, maka untuk selanjutnya terminologi librari dimaksudkan untuk merujuk ke shared library. 1.Shared Library Seperti disebutkan di atas, setiap kali objek file librari dimuatkan ke memori tidak selalu mempunyai posisi yang sama. Maka posisi simbol di dalam file libraripun mempunyai alamat yang selalu berubah. Oleh karena itu untuk mereferensi sebuah simbol, dilakukan pengalamatan berbasis zero, yaitu pengalamatan yang relatif terhadap posisi awal dari file librari. Setelah alamat posisi awal dapat ditentukan, maka referensi semua simbol di file librari dapat dihitung pada saat waktu eksekusi (runtime). Pada Program Library HOWTO [#!Wheeler!#] disebutkan tiga jenis librari, selain librari statis (static library) dan shared library masih ada dynamic loaded library. Dilihat dari arsitektur filenya, tidak ada perbedaan antara shared library dan dynamic loaded library. Pembedaan ini hanya dipandang dari sisi pemrogramnya saja. Pada shared library, proses loading dari objek file librari terjadi saat program utama dimuatkan ke memori (proses linking dinamis seperti diuraikan di atas). Sedang pada dynamic loaded library, proses loading dari file librari dapat berlangsung kapan saja selama program utama dijalankan. Proses linking ini juga sering disebut dengan runtime linking. Kita akan menamakan teknik yang memanfaatkan runtime linking ini dengan nama Dynamic Loading. Sebelum teknik ini dibahas, ada baiknya kita mengetahui aturan pemberian nama pada sebuah shared library, walaupun aturan ini tidak sepenuhnya berlaku pada dynamic loaded library. Penggunaan terminologi shared library untuk selanjutnya berlaku juga pada dynamic loaded library. Berbeda dengan jenis librari statis, shared library mempunyai dua jenis nama, yaitu soname dan real name. Soname terdiri dari awalan lib, nama dari librari, kata .so diikuti tanda titik (".") dan nomor versi mayor, seperti contohnya libhello.so.1. Real name adalah nama file librari sebenarnya yang disusun dari soname ditambah tanda titik ("."), nomor minor, dan kalau ada diikuti tanda titik (".") dan nomor release, seperti contohnya libhello.so.1.1 atau libhello.so.1.1.5. Selain kedua jenis nama di atas, masih ditambahkan satu jenis nama lagi yaitu linker name yang sama dengan soname tanpa nomor versi mayor, seperti contohnya libhello.so. Program yang membutuhkan file shared library akan melakukan referensi menggunakan jenis nama ini. Secara umum linker name adalah link ke soname dan soname adalah link ke real name. 2.API dari Dynamic Loading Kebanyakan sistem operasi menyediakan API (Application Program Interface) untuk penggunaan teknik Dynamic Loading. Sayangnya, nama-nama API ini belum ada standarnya, sehingga secara umum setiap sistem operasi menggunakan nama API sendiri-sendiri. Di sini kita akan menggunakan API dari sistem operasi Linux. Sebelum kita mulai dengan contoh program, kita akan membahas terlebih dahulu fungsi-fungsi API yang ditulis dalam bahasa program C. Deklarasi dari fungsi-fungsi ini terdapat di file header . void* dlopen(const char* filename, int flag); Fungsi ini bertujuan untuk memuatkan objek file filename ke memori. Jika pemanggilan fungsi berhasil atau file objek filename sudah ada di memori, maka fungsi akan mengembalikan sebuah handle sebagai hasilnya. Pada prinsipnya handle ini dapat dibayangkan sebagai referensi yang merujuk ke file objek filename. Namun demikian handle ini tidak boleh diinterpretasikan sebagai apapun juga, tapi hanya boleh digunakan sebagai parameter waktu pemanggilan fungsi lainnya seperti dlsym() atau dlclose(). Setiap kali fungsi ini dipanggil dengan sukses, maka librari dl akan memanajemen jumlah pemakai handle ini dengan cara menginkrementasi variabel. Parameter flag menentukan bagaimana dlopen() menangani simbol yang ada di objek filename. RTLD_LAZY dan RTLD_NOW dengan kombinasi RTLD_GLOBAL atau RTLD_LOCAL dapat digunakan untuk parameter ini. Intinya, pada RTLD_LAZY relokasi objek shared library baru dilakukan pada saat referensi di shared library untuk pertama kalinya dipanggil. Sedang pada RTLD_NOW proses relokasi dari semua objek shared library yang dibutuhkan dilakukan setelah objek filename dimuatkan ke memori. Dengan RTLD_GLOBAL, maka simbol di file shared library yang dimuatkan akan dapat dipakai oleh shared library lainnya. Kalau hal ini tidak dikehendaki maka dapat dipakai nilai RTLD_LOCAL yang juga merupakan nilai default. char* dlerror(void); Dengan fungsi ini, informasi tentang sebab-sebab terjadinya kesalahan pada proses linking dinamis dapat diakses. Pada terjadinya kesalahan, fungsi ini akan mengembalikan null-terminated character string sebagai hasilnya. Jika pada pemrosesan terakhir tidak terjadi kesalahan maka nilai NULL akan dikembalikan sebagai hasilnya. void* dlsym(void* handle, char* simbol); Setelah objek file filename dimuatkan ke memori, maka simbol-simbol di dalamnya dapat diakses dengan menggunakan fungsi dlsym(). Sebagai parameter pertama adalah handle yang merupakan hasil dari pemanggilan fungsi dlopen(). Parameter kedua simbol adalah nama fungsi atau nama variabel yang akan diakses. Jika simbol tidak ditemukan, maka fungsi akan mengembalikan NULL sebagai hasilnya. Pada kasus simbol ditemukan, maka sebuah pointer akan dikembalikan oleh fungsi ini sebagai hasilnya. Tergantung dari jenis simbol, pointer ini dapat diinterpretasikan sebagai pointer dari suatu fungsi atau variabel. Ada hal yang perlu mendapat perhatian di sini, jika fungsi mengembalikan nilai NULL. Di sini ada dua kemungkinan, yaitu simbol tidak ditemukan seperti diuraikan di atas, atau simbol ditemukan, tetapi mempunyai nilai NULL. Untuk mendapatkan informasi yang benar, dapat dilakukan dengan cara memanggil fungsi dlerror(), setelah pemanggilan fungsi ini. Jika fungsi dlerror() mengembalikan nilai bukan NULL, maka dapat dipastikan bahwa simbol tidak ditemukan. void* dlclose(void* handle); Fungsi ini adalah kebalikan dari fungsi dlopen(). Setiap kali fungsi ini dipanggil dengan sukses, maka librari dl akan memanajemen jumlah pemakai handle ini dengan cara mendekrementasi variabel. File objek yang direferensi oleh handle baru akan dihapuskan (unload) dari memori, jika sudah tidak ada lagi yang menggunakan handle ini (jumlahnya nol). 3.Contoh pemakaian Dynamic Loading Cara pemakaian API dari Dynamic Loading akan diperlihatkan di sini dengan menggunakan program demo yang sederhana. Source code program terdiri dari dua file, yaitu main.c dan simple_dl.c (Lihat list program: script-1 adalah main.c, script-2 adalah simple_dl.c dan script-3 adalah Makefile). File main.c adalah program utama yang mempunyai fungsi main(). Sedangkan file simple_dl.c adalah file modul yang berisi simbol variabel dan simbol pengimplementasi fungsi yang akan diakses dari fungsi main() dengan menggunakan fasilitas API Dynamic Loading. Dua simbol didefinisikan di dalam simple_dl.c. Yang pertama adalah simbol variabel yang didefinisikan sebagai berikut: char* info_linux = "Info Linux!"; Nama simbol variabel ini adalah info_linux yang merupakan pointer dari tipe data char. Pada pointer ini juga secara langsung dialokasikan sejumlah memori yang berisikan karakter string "Info Linux!". Simbol kedua adalah hello_world yang merupakan simbol dari pengimplementasi fungsi hello_world(). Pada prinsipnya nama simbol tidak selalu sama dengan nama pengimplementasi fungsi. Kita akan membahas hal ini secara ringkas pada bagian akhir dari artikel ini pada kasus penulisan program menggunakan C++. Simbol fungsi ini didefinisikan sebagai berikut: void hello_world(void); Fungsi ini hanya akan menampilkan kalimat "Hello world!" di layar monitor. Sebelum kita membahas kode di file main.c, kita akan mencoba untuk mengkompilasi file simple_dl.c. Untuk dapat menghasilkan shared library, pada proses kompilasi harus digunakan parameter -fPIC. PIC adalah kepanjangan dari position independent code. Dengan instruksi berikut:$ gcc -fPIC -c simple_dl.c akan dihasilkan file objek simple_dl.o. Untuk mendapatkan file shared library simple_dl.so dari file objek ini dapat digunakan instruksi:$ gcc -shared -o simple_dl.so simple_dl.o Untuk lebih yakin lagi, bahwa kedua simbol info_linux dan hello_world terdapat di file shared library simple_dl.o dapat digunakan program nm. Program ini adalah salah satu tools terdapat pada binutils yang dapat menampilkan simbol dari sebuah objek file. Instruksi$ nm -g --defined-only -n simple_dl.so hanya akan menampilkan simbol global yang sudah terdefinisi. Daftar simbol akan ditampilkan secara berurutan menurut alamat relatif simbol, seperti yang terlihat di bawah ini:00000618 ? _init 000007a0 T hello_world 00000840 A _etext 00000840 ? _fini 00001880 D info_linux 00001898 A _GLOBAL_OFFSET_TABLE_ 000018cc A _DYNAMIC 00001964 A __bss_start 00001964 A _edata 0000197c A _end Kolom kedua di atas menunjukkan tipe dari simbol. Huruf T mempunyai arti bahwa posisi simbol yang bersangkutan berada di bagian kode atau text, seperti halnya pada simbol hello_world yang adalah pengimplementasi fungsi. Sedangkan huruf D seperti pada simbol info_linux menandakan bahwa posisi simbol yang bersangkutan berada di bagian data yang terinitialisasi. Sekarang kita akan beralih membahas kode di dalam file main.c. Di sini kita mendefinisikan beberapa variabel. Dua diantaranya adalah void (*pFuncSimbol)(); dan char** pVarSimbol; Yang pertama adalah variabel pointer dari fungsi yang tidak mempunyai parameter (void) dan tidak mempunyai nilai kembali(void). Sedangkan variabel kedua adalah pointer dari character string. Sekarang kita akan membahas fungsi-fungsi yang dipakai di sini satu persatu.handle = dlopen("./simple_dl.so", RTLD_NOW); if (!handle) { printf("Failed: %s\n", dlerror()); return 1; } Pertama-tama fungsi dlopen() akan dipanggil untuk memuatkan objek file shared library simple_dl.so ke memori. Program akan berakhir jika file ini tidak ditemukan. Jika objek file ini dapat dimuatkan ke memori dengan sukses, maka variabel handle selanjutnya dapat dipakai sebagai parameter untuk memanggil fungsi lainnya.pFuncSimbol = (void (*)())dlsym(handle, "hello_world"); error = dlerror(); if (error) { printf("Failed(2): %s\n", error); return 1; } Fungsi dlsym() di atas dipanggil untuk mendapatkan referensi dari simbol hello_world. Jika simbol ini tidak ditemukan maka program akan berakhir. Informasi ini didapatkan dengan cara memanggil fungsi dlerror() yang akan mengembalikan hasil bukan NULL(lihat di atas tentang dlsym()). Jika simbol ditemukan, maka variabel pFuncSimbol sekarang mempunyai referensi ke simbol hello_world dari shared library simple_dl.so.pFuncSimbol(); Dengan instruksi di atas, maka fungsi yang direferensi oleh variabel pFuncSimbol yang tak lain adalah fungsi hello_world di simple_dl.so akan dipanggil. Hasilnya dapat dilihat di layar monitor, yaitu penampilan character string "Hello world!".pVarSimbol = (char**)dlsym(handle, "info_linux"); error = dlerror(); if (error) { printf("Failed(2): %s\n", error); return 1; } Seperti sebelumnya, di sini fungsi dlsym() dipakai untuk mendapatkan referensi dari simbol info_linux. Jika simbol ditemukan, maka sekarang pVarSimbol mempunyai referensi ke simbol info_linux yang isinya tidak lain adalah character string "Info Linux!".printf("%s\n", *pVarSimbol); Di sini isi dari referensi pVarSimbol "Info Linux!" akan ditampilkan di layar monitor.dlclose(handle); Setelah kita tidak membutuhkan lagi, maka kita harus menutup handle yang telah kita buka sebelumnya. Untuk menghasilkan file program main yang dapat dieksekusi, dapat digunakan instruksi seperti berikut:$ gcc -o main main.c -ldl Dengan parameter -ldl maka pada proses linking shared library libdl.so yang mengimplementasi API Dynamic Loading akan ditambahkan. Setelah berhasil, jika program main dieksekusi maka di layar monitor akan ada tampilan sebagai berikut:$ ./main Hello world! Info Linux! 4.Memanggil Fungsi di Program Utama dari Objek shared library Pada banyak kasus kita akan memerlukan fungsi yang sudah diimplementasikan di program utama untuk dipanggil dari objek shared library. Dari sisi objek shared library sendiri tidak ada masalah, selama fungsi ini sudah terimplementasi di program utama, karena pembuatan file shared library tidak membutuhkan proses linking. Yang menjadi kunci pokok di sini adalah, bahwa simbol fungsi di program utama harus ditambahan ke tabel simbol dinamik (dynamic symbol table). Tabel ini memuat semua simbol yang akan dapat diakses oleh semua objek shared library pada saat runtime. Hal ini dapat dilakukan dengan menambahkan parameter -rdynamic pada proses pembuatan file program utama. Parameter ini akan menginstruksikan kompiler untuk melewatkan parameter -export-dynamic pada proses linking oleh ld. Jika parameter ini tidak ditambahkan, maka tabel simbol dinamik hanya akan berisi simbol yang direferensi oleh objek shared library saat proses linking pada pembuatan file program utama. Kita akan menambahkan beberapa baris pada file main.c dan simple_dl.c untuk menunjukkan hal di atas. Pada file main.c ditambahkan sebuah fungsi hello_main() yang akan dipanggil dari file simple_dl.c./*============================== * Fungi tambahan di file main.c */void hello_main(const char* txt) { printf("%s\n", txt); } Fungsi hello_main() hanya akan menampilkan isi string txt yang dilewatkan melalui parameter.void hello_world(void) { printf("Hello world!\n");/* ======================================== * Memanggil fungsi yang ada di file main.c */ hello_main("Saya simple_dl"); } Fungsi hello_main() di program utama akan dipanggil setelah fungsi helllo_world() ini dipanggil oleh program utama. Proses pembuatan objek shared library simple_dl.so sama seperti diterangkan sebelumnya. Pada pembuatan objek program utama, harus ditambahkan parameter -rdynamic seperti berikut:$ gcc -rdynamic -o main main.c -ldl Hasil dari pengeksekusian program main dapat dilihat pada tampilan monitor:$ ./main Hello world! Saya simple_dl Info Linux! 5.Fungsi _init() dan _fini() Fungsi _init() dan _fini() adalah dua fungsi khusus pada sebuah file shared library. Fungsi _init() akan dipanggil oleh librari dl setelah sebuah objek file shared library dimuatkan ke memori dengan instruksi dlopen(). Sedang sebelum shared library dihapuskan(unload) dari memori lewat instruksi dlclose(), librari dl akan memanggil fungsi _fini(). Kita dapat memanfaatkan kedua fungsi ini dengan cara mengimplementasikan kedua fungsi tersebut dalam shared library yang kita tulis. Pada umumnya fungsi _init() digunakan untuk menginitialisasi variabel ataupun mengalokasi memori. Fungsi _fini() sebaliknya dapat digunakan untuk menghapuskan memori yang dialokasi sebelumnya. Untuk menghindari pengimplementasian ganda, pada saat proses kompilasi pembuatan shared library harus ditambahkan parameter -nostartfiles, seperti contohnya:$ gcc -shared -nostartfiles -o simple_dl.so simple_dl.o 6.Penggunaan C++ Pada penggunaan bahasa C++ ada beberapa aspek yang perlu mendapat perhatian. Salah satu hal yang membedakan antara C++ dan C adalah, bahwa di C++ kita dapat mempunyai beberapa fungsi dengan nama yang sama tetapi parameter yang berbeda. Terminologi yang sering dipakai untuk ini pada bahasa yang mendukung object oriented adalah overloading. Lain dengan bahasa C, di sini nama fungsi saja tidak cukup untuk dijadikan sebagai identitas yang unik (unique identifier) di tabel simbol. Untuk mendapatkan identitas yang unik ini, akan dilakukan proses mangling terhadap nama fungsi di C++ yang menyertakan informasi parameternya. Misalnya saja dengan memakai gcc, simbol fungsi foobar dengan parameter tunggal int akan berubah menjadi foobar__Fi. Proses mangling ini bergantung kepada jenis kompiler, sehingga pada pemakaian kompiler yang berbeda akan dihasilkan identitas unik yang berbeda juga. Dengan menggunakan program c++filt yang juga terdapat dalam paket binutils, kita dapat melakukan proses demangling, yaitu proses kebalikan dari mangling. Contohnya dengan intruksic++filt foobar__Fi maka dari simbol foobar__Fi kita akan mendapatkan kembali nama fungsi dengan parameternya foobar(int). Hal di atas akan membuat masalah pada pembuatan program yang memakai bahasa C dan C++, karena simbol fungsi program yang ditulis dengan C juga akan dilakukan proses mangling. Sebagai contoh kita ingin menulis program yang memakai librari dari pihak ketiga yang hanya memberikan file header dan file objek shared library yang ditulis dengan bahasa C. Sedangkan program yang kita tulis menggunakan bahasa C++ yang akan memanggil beberapa fungsi di librari ini. Pada proses kompilasi, simbol fungsi di file header akan dilakukan proses mangling, sehingga pada proses linking akan mengakibatkan kesalahan, karena simbol tidak dapat ditemukan. Untuk mencegahnya, simbol fungsi pada file header tidak boleh dilakukan proses mangling oleh kompiler. Ini dapat dilakukan dengan menambahkan deklarasi extern "C" di file header yang akan membuat kompiler untuk memakai konvensi nama C (C name convention). Karena pada kompiler C++ biasanya didefinisikan makro __cplusplus maka penambahan header dapat dilakukan sbb:#ifdef __cpluplus extern "C" { #endif......#ifdef __cpluplus } #endif Jika librari dimuatkan menggunakan Dynamic Loading dan fungsi di librari dipanggil dengan memakai fungsi dlsym(), maka masalah di atas tidak akan terjadi, karena pada simbol fungsi di librari tidak dilakukan proses mangling. Masalah lain yang timbul sehubungan dengan pemakaian bahasa C++ adalah kita tidak dapat memakai fungsi dlsym() untuk memanggil fungsi di librari yang ditulis memakai bahasa C++. Hal ini diakibatkan karena pada semua simbol akan dilakukan proses mangling, sehingga kita tidak akan tahu nama simbol dari fungsi yang kita inginkan. 7.Penutup Penerapan teknik Dynamic Loading akan memudahkan pengembangan suatu aplikasi besar yang dilakukan oleh sekelompok pemrogram seperti halnya aplikasi web server Apache. Program utamanya hanya mengimplementasi fungsi pokok saja, sedang fungsi-fungsi lainnya ditambahkan dalam bentuk modul secara fleksibel bergantung dari keperluan. Salah satu faktor yang tidak menguntungkan adalah lamanya waktu proses pemuatan file shared library ke memori dan proses pereferensian dari simbol. Jika modul-modul dimuatkan hanya pada saat awal saja, maka faktor di atas tidak terlalu penting. Aplikasi bot irc eggdrop memakai teknik lain untuk menghindari faktor di atas. Pengaksesan ke simbol dilakukan dengan melalui tabel yang berisikan pointer statis dari simbol. Akhir kata, semoga artikel ini bermanfaat dan dapat menambah wacana teknik pemrograman bagi pembaca.

BAHASA PEMROGRAMAN PASCAL



1. Sejarah PASCAL

merupakan pengembangan dari bahasa ALGOL 60, bahasa pemrograman untuk sains komputasi. Tahun 1960, beberapa ahli komputer bekerja untuk mengembangkan bahasa ALGOL, salah satunya adalah Dr. Niklaus Wirth dari Swiss Federal Institute of Technology (ETH-Zurich), yang merupakan anggota grup yang membuat ALGOL. Tahun 1971, dia menerbitkan suatu spesifikasi untuk highly-structured language (bahasa tinggi yang terstruktur) yang menyerupai ALGOL. Dia menamainya dengan PASCAL (seorang filsuf dan ahli matematika dari Perancis) Pascal bersifat data oriented, yaitu programmer diberi keleluasaan untuk mendefinisikan data sendiri. Pascal juga merupakan teaching language (banyak dipakai untuk pengajaran tentang konsep pemrograman). Kelebihan yang lain adalah penulisan kode Pascal yang luwes, tidak seperti misalnya FORTRAN, yang memerlukan programmer untuk menulis kode dengan format tertentu. Bentuk dasar program Pascal adalah seperti berikut:program TITLE ;begin pernyataan;pernyataanend.

2. PASCAL

sebagai bahasa terstrukturSebagai bahasa terstruktur, PASCAL mempunyai ciri-ciri sebagai berikut:1. BerurutanSusunan dari kode-kode dalam teks Pascal harus ditulis secara urut dari atas, pernyataan-pernyataan yang ditulis lebih awal akan dieksekusi lebih dahulu. Oleh karena itu, suatu pernyataan yang menyangkut suatu variabel di dalam program, maka variable itu harus terdefinisi dahulu sebelumnya. Hal ini terutama menyangkut pada pemanggilan sub-program oleh sub-program yang lain. Bisa dibaca lebih lanjut pada bagian sub-program.2. Blok dengan batas-batas yang jelas.Pascal memberikan pembatas yang jelas pada tiap-tiap blok, seperti pada blok program utama, sub-program, struktur kontrol (pengulangan/ pemilihan), dll. Pemakaian kata kunci begin untuk mengawali operasi pada blok dan end untuk menutupnya memudahkan programmer menyusun programnya dengan mudah. Seperti contoh:If X>0 thenbegin Write ( ‘ bilangan positif’);Writeln ( ‘ program selesai’);end;3. Satu pintu masuk dan satu pintu keluar pada blok pemilihan dan pengulangan. Contoh di atas juga mengilustrasikan pintu masuk tunggal pada suatu blok pemilihan yaitu suatu test logika X>0, dengan pintu keluaran yang satu pula (satu disini maksudnya bukan dua baris perintah output tapi suatu paket perintah yang dirangkai dengan begin .. end.3. Bakuan PASCALDibakukan oleh ISO pada tahun 1983 dan dikembangkan dalam beberapa versi, diantaranya: USCD PASCAL, MS PASCAL, TURBO PASCAL dll. Dengan semakin berkembangnya teknologi dalam komputasi, Pascal dimanfaatkan untuk pengembangan DELPHI (berasal dari nama suatu kota di masa Yunani kuno), suatu bahasa pemrograman visual yang menonjolkan pada efek grafis dan orientasi pada objek-objek yang siap dipakai, karena memiliki Visual Component Library (VCL).4. Struktur Bahasa PASCALsecara umumPascal mempunyai struktur sebagai berikut:1. Bagian Judul Program2. Bagian Deklarasia. Deklarasi tipe data (TYPE)b. Deklarasi variabel (VAR)c. Deklarasi konstanta (CONST)d. Deklarasi label (LABEL)e. Deklarasi sub-program (PROCEDURE dan FUNCTION)3. Bagian Program Utama Perintah-perintah.Teks Pascal setidaknya memiliki bagian Judul Program, bagian Deklarasi, dan Bagian Program Utama yang berupa perintah-perintah. Sedangkan untuk bagian deklarasi menyesuaikan dengan isi dari program itu sendiri. Contoh program PASCAL:program TAMBAH_00; { Menjumlahkan dua bilangan yang nilainya diberikan dalam perintah}var X, Y, Z: integer; { Deklarasi variabel X,Y dan Z sebagai bilangan bulat }BEGIN { Program Utama Mulai }X := 50; { Perintah memberikan nilai 50 pada var. X }Y := 25; { Perintah memberikan nilai 25 pada var. Y }Z := X + Y; { Perintah menjumlahkan X dan Y serta menyimpan hasilnya ke Z}END. { Akhir Program Utama }Pada contoh ini nilai X dan Y tidak bisa sembarang, karena didefiniskan tertentu. Agar nilai X dan Y bisa bebas ditentukan, nilai X dan Y dibaca dari default input.program TAMBAH_01; { Menjumlahlan dua buah bilangan yang dibaca dari default input }var X, Y, Z: integer; { Deklarasi variabel X,Y dan Z sebagai bilangan bulat }BEGIN { Program Utama Mulai }read(X); { Membaca nilai X lewat key-board }read(Y); { Membaca nilai Y lewat key-board }Z := X + Y; { Menjumlahkan X dan Y serta menyimpan hasilnya ke Z }write(Z); { Menyajikan Z ke layar monitor }END. { Akhir Program Utama }Dasar Bahasa PASCALUnsur-unsur Pemrogramana. Mendapatkan data dengan membaca data dari default input (key board, file atau sumber data lainnya).b. Menyimpan data ke dalam memori dengan struktur data yang sesuai,c. Memproses data dengan instruksi yang tepat.d. Menyajikan atau mengirimkan hasil olahan data ke default output (monitor, file atau tujuan lainnya).Dalam mengolah data diperlukan pengelolaan instruksi terstruktur:a. Beberapa instruksi dikelompokkan dalam satu blok atau model yang mengerjakan tugas tertentu.b. Beberapa perintah dilaksanakan dengan persyaratan tertentu.c. Beberapa perintah dilaksanakan berulang dengan jumlah pengulangan tertentu. Identifier Digunakan untuk nama: Program, Sub-program (procedure dan function),nama: Variable, Constant, Type, Label.Nama-nama ini digunakan untuk pemakaian dan pemanggilan dalam program. Ketentuan penulisan identifiera. Nama identifier harus dimulai dengan karakter huruf alfabet: a sampai z, A sampai Z atau karakter ‘_’ (underscore - garis bawah)b. Karakter berikutnya boleh karakter numerik (0 .. 9) atau kombinasi alphanumerik (huruf-numerik).c. Panjang nama, pada berbagai versi Pascal umumnya antara 32 - 63.d. Tidak boleh menggunakan karakter istimewa: + - * / \ = < > [ ] . , ; : ( ) ^ @ { } $ # ~ ! % & ` ” ‘ dan ? Contoh penulisan:Penulisan yang benar: X _PQR Beta Sudut_Alpha luasLingkaranPenulisan yang salah: 3D sisi-Kanan B#Jenis identifiera. Identifier umumMerupakan identifier yang didefinisikan sendiri oleh pemrogram. Pemrogram mempunyai kebebasan untuk menentukan nama identifiernya, dengan syarat nama tersebut tidak sama dengan identifier standar dan reserved word yang akan dibahas lebih lanjut. Hal ini untuk mencegah kesalahan yang bisa timbul akibat tumpang tindih identifier dalam program.b. Identifier Standar (Baku)Merupakan identifier yang didefinisikan oleh pembuat kompiler Pascal. Biasanya pembuat kompiler menyediakan suatu library yang sudah ada didalam kompiler. Library berisi berbagai procedure, fungsi atau unit yang sudah siap pakai. Misalnya Turbo Pascal Windows 1.5 memiliki suatu unit untuk memproses output yaitu wincrt, gotoxy, yang dengan mudah bisa dipakai oleh programmer di dalam menuliskan kode-kode programnya. Dinamai Identifier Standar karena suatu kompiler tidak harus memilikinya, masing-masing kompiler dimungkinkan mempunyai identifier yang berbeda untuk suatu tugas yang hampir sama. Misalnya Turbo Pascal versi DOS menggunakan crt untuk melakukan fungsi yang sama dengan wincrt (TPW 1.5). Beberapa Identifier Standar yang dimiliki oleh kompiler-kompiler Pascal antara lain:abs arctan boolean char cos dispose eof eoln exp false input integer ln maxint new odd ord output pack page pred read readln real reset rewrite round sin sqr sqrt succ text true trunc write writelnc. Identifier “reserved word”, yaitu yang sudah didefinisikan dan digunakan oleh bahasa PASCAL sendiri (Kita tidak bisa menamai identifier kita dengan ini).and array begin case const div do downto else end file for forward function goto if in label mod nil not of or packed procedure program record repeat set then to type until var while withDeklarasi Variable:Mendeklarasikan varibel adalah:a. Memberikan nama variabel sebagai identitas pengenalb. Menentukan tipe data variabelContoh deklarasi variabel:var K : integer;R : real;C : char;T : boolean;Beberapa identifier yang sejenis bisa dideklarasikan bersamaan.var i, j, k : integer;{Variabel i, j dan k sebagai integer}namaMHS, alamatMHS : char; {Nama dan alamat mahasiswa }Deklarasi Konstanta:Mendeklarasikan konstanta adalah:a. Memberikan nama konstanta sebagai identitas pengenalb. Menentukan nilai konstantaContoh deklarasi konstanta:const MaximumSize = 100; {integer }ExitCommand = ‘Q’; {char }Tipe DataTipe data yang disediakan oleh PASCAL meliputi:1. Tipe Data Sederhanamerupakan tipe data dasar yang sering dipakai oleh program, meliputi: integer (bilangan bulat), real (bilangan pecahan), char (alphanumerik dan tanda baca), dan boolean (logika). Untuk data integer dan real masing-masing terbagi menjadi beberapa kategoria. Bilangan Integermerupakan tipe data berupa bilangan bulat, terbagi atas beberapa kategori seperti terlihat dalam tabel 1. tabel 1 menunjukkan jenis data, ukuran dalam memori dan rentang nilainya.tabel 1. Tipe Data Bilangan IntegerTipe DataUkuran TempatRentang NilaiByte1 byte0 s/d +255Shortint1 byte-28 s/d +127integer2 bytes-32768 s/d 32767Word2 bytes0 s/d 65535Longint4 bytes2147483648 s/d 2147483647Contoh bilangan integer adalah: 34 6458 -90 0 1112 Penggolongan tipe data integer tersebut dimaksudkan untuk membatasi alokasi memori yang dibutuhkan misalkan untuk suatu perhitungan dari suatu variabel bilangan diperkirakan nilai maksimumnya 32767 kita cukup mendeklarasikan variabel bilangan sebagai integer (2 byte), daripada sebagai longint(4 byte). Di dalam kompilernya, Pascal menyediakan konstanta untuk bilangan Integer yaitu: MaxInt and MaxLongInt, pemrogram bisa menggunakannya di dalam programnya tanpa harus terlebih dahulu mendefinisikannya.-MaxInt bernilai 32.767-MaxLongint bernilai 2.147.483.647.contoh:Program display_maxint;uses wincrt;begin writeln (maxint)end.Hasilnya: 32.767b. Bilangan RealBilangan real atau nyata merupakan jenis bilangan pecahan, dapat dituliskan secara biasa atau model scientific . Contoh bilangan real: 34.265 -3.55 0.0 35.997E+11, dimana E merupakan simbol perpangkatan 10. Jadi 452.13 mempunyai nilai sama dengan 4.5213e2. Penggolongan tipe data bilangan real dapat dilihat pada tabel 2.tabel 2. Bilangan RealTipe DataUkuran TempatRentang Nilaireal6 bytes2.9 x 10-39 s/d 1.7 x1038single4 bytes1.5 x 1045 s/d 3.4 x 1038double8 bytes5.0 x 10-324 s/d 1.7 x 10308extended10 bytes3.4 x 10-4932 s/d 1.1 x 104932comp8 bytes-9.2x 1018 s/d 9.2x 1018c. Chartipe data ini menyimpan karakter yang diketikkan dari keyboard, memiliki 266 macam yang terdapat dalam tabel ASCII (American Standard Code for Information Interchange). Contoh: ‘a’ ‘B’ ‘+’, dsb. Yang perlu diingat bahwa dalam menuliskannya harus dengan memakai tanda kutip tunggal. Jenis data ini memerlukan alokasi memori sebesar 1(satu) byte untuk masing-masing data.

Construction Compiler



Teknik kompilasi telah lama diberikan di lingkungan pendidikan tinggi bidang komputer di Indonesia. Pembahasan dalam mata kuliah ini biasanya berkisar pada teori automata, teori kompilasi, teori grammar. Praktek teknik kompilasi pun telah diberikan di lingkungan laboratorium, walau biasanya masih terbatas pada demonstrasi hal teori, ataupun sekedar pengenalan kompiler yang ada atau banyak digunakan. Beberapa universitas telah mulai memperkenalkan penggunaan perangkat pembangun kompiler.Telah banyak mahasiswa menggunakan dan memanfaatkan compiler/interpreter, tapi saat ini masih belum banyak muncul nama programmer Indonesia yang terlibat dalam proyek pembuatan compiler/interpreter. Mungkin hanya KILANG nya Prof. Dali S Naga (BASIC Indonesia), yang sempat terdengar, sayang sekarang sudah tidak ada jejaknya. Mungkin merilis KILANG dalam bentuk GPL seperti BWBASIC, adalah suatu langkah menarik untuk terus mengembangkan KILANG ini lebih lanjut.Memang ada sekelompok programmer Indonesia yang sempat akan merilis bahasa pemrograman "BATAK" tetapi hingga saat ini belum terdengar kembali. Bahasa pemrograman, JAVA, BALI, MADURA, hanyalah namanya saja yang berbau Indoensia, tapi sedikit atau malah tidak ada keterlibatan pengembang dari Indonesia.Tentu saja akan timbul pertanyaan "apa yang salah dalam pengajaran kompilasi ???" (INGAT SAYA TIDAK INGIN MENDISKREDITKAN SIAPAPUN DALAM PERNYATAAN INI). Hanya mencoba mencari langkah perbaikan yang mungkin bisa diterapkan.Walaupun sedikit sekali atau nyaris tidak ada "lowongan pekerjaan" yang membutuhkan kemampuan mengembangkan compiler ini (silahkan baca di koran ataupun majalah), bukan berarti pengetahuan itu sama sekali tak dibutuhkan dalam dunia pemrograman sehari-hari. Pada dasarnya pengetahuan pembuatan kompiler (compiler construction) ini merupakan pengetahuan dasar komputasi yang sangat baik sekali. Pengetahuan ini dimanfaatkan pada beragam aplikasi nantinya. Misal teknik parsing, pengenalan pola teks, optimasi kode dan lain sebagainya. Bahkan suatu database engine pun di bagian "front end" selalu menggunakan parsing ini. Pengetahuan tentang kompilasi akan dapat memberikan landasan bagi programmer untuk menyusun program yang efektif dan efisien.Ketika seseorang melakukan pemrograman, sebetulnya secara tidak sadar dia akan melakukan proses penambahan suatu bahasa. Misal pembuatan suatu fungsi (ataupun prosedur) pada dasarnya merupakan suatu proses "penambahan kosa-kata" dari bahasa pemrograman tersebut. Dari yang tadinya tidak memiliki fungsi tersebut hingga akhirnya ditambahkan suatu "vocabulary" untuk melakukan suatu fungsi tersebut. Untuk itulah pemahaman penyusunan kompiler merupakan suatu dasar yang utama dalam bidang ilmu komputer.

Refactoring-pengembangan aplikasi



Salah satu faktor yang menghabiskan sumber daya terbesar dalam sebuah proses pengembangan aplikasi adalah saat menjaga kelangsungan hidupnya. Seiring dengan diimplementasikannya dalam lingkungan operasi secara riil, sebuah aplikasi atau lebih luas lagi, sebuah sistem dituntut agar senantiasa mampu memenuhi kebutuhan yag terus berkembang, jauh dari saat aplikasi tersebut dibangun, dusamping tuntutan untuk beroperasi secara baik dan benar.Untuk memebuhi tuntutan kebutuhan tersebut, perbaikan, penyesuaian atas rule yang digunakan, ataupun fitur-fitur baru ditambahkan ke dalam aplikasi tersebut. Permasalahannya, hal-hal tersebut menyebabkan tingkat kompleksitas kode atas aplikasi tersebut menjadi semakin tinggi, dan tingginya kompleksitas tersebut membuat semakin sulit bagi developer untuk terus menjaga kelangsungan hidup aplikasi tersebut.Kompleksitas ini menjadi semakin bertambah lagi dengan dirilisnya kompiler yang lebih baru ataupun software development kit (SDK) / third-party library yang kerap kali membawa perbaikan, penyesuaian, perubahan, ataupun penambahan fitur-fitur baru yang bahkan bisa saja hingga merubah perilaku kerjanya. Hal ini disebabkan tuntutan untuk memenuhi kebutuhan yang juga berkembang atas tool-tool tersebut.Bagi para developer Delphi tentunya masih bisa mengingat bagaimana perubahan yang terjadi ketika Borland merilis Delphi 6 atau bila aktif mengunakan library Developer Express ataupun FastReport masih bisa membayangkan bagaimana repotnya ketika hendak bermigrasi ke QGrid 4 dari versi sebelumnya ataupun migrasi dari FR 2.X ke versi 3 yang lebih baru.Ditambah lagi dengan kebiasaan kita sebagai developer yang umumnya cenderung mengguakan metode extreme programming yang secara lokal lebih dikenal sebagai HB (hajar bleh) programming, yang cenderung mempertinggi tingkat kompleksitas kode yang ada dan mengakibatkan aplikasi yang dibangun menjadi semakin sulit untuk dijaga kelangsungannya.Untuk mengurangi kompleksitas kode yang semakin tinggi ini, tentunya harus ada suatu teknik yang bisa digunakan developer agar dapat senantiasa menjaga aplikasi yang dibangun bisa tetap beradaptasi dengan kebutuhan yang terus berkembang dalam tingkat kompleksitas yang sedapat mungkin dijaga tetap rasional. Ada beberapa teknik yang dikenal saat ini, metode yang terbaru adalah dengan memanfaatkan modelling atau lebih dikenal dengan UML (unified modelling language), sementara konsep yang telah ada sebelumnya dikenal sebagai refactoring. Namun jika dilihat dari situasi dimana aplikasi sudah ada dan terdapat keharusan agar dapat senantiasa responsif/tanggap menjawab tuntutan pemenuhan kebutuhan yang berkembang dalam waktu yang relatif singkat, metode refactoring sepertinya bisa menjadi jawaban yang lebih rasional atas permasalahan-permasalahan di atas.Refactoring sederhananya merupakan teknik untuk memecahkan tingkat kompleksitas kode ke dalam layer-layer class abstraction yang lebih sederhana dan rasional. Proses penyederhanaan ini pun bisa berbagai macam tingkatannya, dimulai dari yang terkecil, memecah sebuah fungsi yang kompleks ke dalam fungsi-fungsi yang lebih sederhana, merestrukturisasi class abstraction dalam sebuah object class yang kompleks, ataupun memecah sebuah modul ke dalam sub-sub modul yang lebih sederhana.Namun demikian, sedapat mungkin diusahakan agar proses penyederhanaan ini tidak mempengaruhi atau bahkan merubah perilaku kerja aplikasi secara keseluruhan. Hal ini sangat penting karena tidak jarang keinginan untuk memecah kompleksitas kode dengan cara refactoring ini justru malah membuat kode menjadi semakin kompleks dan menyulitkan developer untuk melakukan tracking saat akan melakukan perubahaan terhadap kode tersebut di kemudian hari. Refactoring harus diusahakan sedapat mungkin tidak merubah perilaku ataupun code-visibility dari sisi developer, hal ini bisa dihindari jika dalam proses refactoring tersebut developer bisa secara cermat meletakkan fungsi/method dalam tingkatan visibility dan abstraction yang sesuai sehingga tetap mudah jika suatu saat harus melakukan penyesuaian atas kode tersebut.Dalam implementasinya di Delphi, untuk manajemen code-visibility atas sebuah/beberapa fungsi pada tipikal procedural programming bisa dilakukan dengan cara menghindari deklarasi atas sub-fungsi yang hanya terkait dalam unit tersebut pada blok Interface. Kompiler delphi sebenarnya mendukung fungsi di dalam fungsi, namun jika tidak benar-benar pada kasus yang spesifik, sebaiknya hindari cara seperti ini karena cenderung membuat sulit developer dalam melakukan tracing atas kode tersebut.Pada impelementasi dengan kompiler modern saat ini, sedapat mungkin gunakan model OOP dalam menyelesaikan permasalahan anda, tidak hanya karena karena fitur-fitur yang dimiliki oleh model OOP tersebut, melainkan pula OOP sangat membantu mempermudah developer memanajemen code-visibility atas object yang dibuatnya. Sedapat mungkin hanya meletakkan field-field yang benar-benar bersifat spesifik pada blok private declaration dan secara gunakan property untuk mengakses field tersebut. Bilamana dibutuhkan action atas read ataupun write value terhadap field tersebut, hendaknya diatur agar fungsi yang terkait bersifat expandable untuk meningkatkan fleksibilitas kode yang dibuat tersebut. sebagai contoh:TAppType = (atUnknown, atGLedger, atAcctRcv, atAcctPyb, atPayroll);TMyCustomClass = class(TMyBaseClass)privatefunction GetAppType: TAppType;protectedfunction InternalGetAppType: TAppType; virtual;publicproperty ApplicationID: TAppType read GetAppType;end;function TMyCustomClass.InternalGetAppType: TAppType; virtual;beginResult := atUnknown;end;function TMyCustomClass.GetAppType: TAppType;beginResult := InternalGetAppType;end;Dari contoh di atas kode terlihat semakin panjang dan inefisien untuk mendapatkan nilai atas property ApplicationID, namun keuntungan model seperti ini adalah jika suatu saat anda harus menambahkan level abstraksi baru atas class tersebut dan membutuhkan tambahan task atas fungsi pada property tersebut, hal ini masih bisa anda lakukan dengan cara menginherit fungsi InternalGetAppType, anda tidak bisa menginherit fungsi GetAppType secara langsung karena kompiler mensyaratkan fungsi yang digunakan pada sebuah property bersifat static function.Sebenarnya ada banyak hal lagi yang bisa teknik-teknik yang bisa dilakukan untuk memecahkan tingkat kompleksitas ini, dan saya yakin untuk hal ini anda bisa mencoba mengeksplorasinya secara lebih baik.

Interpreter dan Compiler



InterpreterPada bahasa yang menggunakan interpreter, ada suatu program besar yang mendiami memori komputer secara terus menerus. Jika dilakukan pengetikan sebaris program, misalnya suatu pernyataan BASIC, maka interpreter ini akan mengawasi proses pemasukannya lalu menambahkan baris tersebut kedalam program yang tadi sudah tersimpan dalam memori.Ketika menjalankan program tersebut, interpreter akan memeriksa program baris demi baris dan menterjemahkannya ke dalam bahasa mesin (satu-satunya bahasa yang dapat dimengerti oleh microprocessor) selanjutnya meminta komputer melaksanakan terjemahan itu kemudian melakukan proses yang serupa untuk baris program berikutnya.Bahasa terinterprestasi cocok untuk pengembangan program cepat karena programmer dapat menulis program dan langsung mengeksekusinya serta melihat hasilnya. namun demikian bahasa ini memiliki beberapa kelemahan :proses eksekusinya lamban karena interpreter harus menterjemahkan tiap baris program kedalam bahasa mesin setiap kali program dieksekusi. Program tetntunya akan berjalan lebih cepat jika seluruh bagian program diterjemahkan lebih dahulu sebelum dieksekusi,harus adanya interpreter dalam memori komputer pada saat ingin menjalankan program. Contoh untuk kasus ini adalah disertakannya interpreter BASIC dalam PC 8088.Compiler Dalam bahasa terkompilasi, keseluruhan program atau sub program diterjemahkan ke dalam bahasa mesin sekaligus. Proses pengetikan dapat dilakukan dengan menggunakan pengolah kata, disisi lain terdapat program terpisah yang disebut compiler yang menterjemahkan berkas sumber ini menjadi berkas lain dalam bentuk bahasa mesin. Adapula compiler yang menyediakan editor sendiri seperti Turbo C dari Borland.Dedicated for Light IntermutimediaPerusahaan Software Pulsa

grafika komputer 2D


Grafika komputer adalah bagian dari ilmu komputer yang berkaitan dengan pembuatan dan manipulasi gambar (visual) secara digital. Bentuk sederhana dari grafika komputer adalah grafika komputer 2D yang kemudian berkembang menjadi grafika komputer 3D, pemrosesan citra (image processing), dan pengenalan pola (pattern recognition). Grafika komputer sering dikenal juga dengan istilah visualisasi data.Bagian dari grafika komputer meliputi:Ø Geometri: mempelajari cara menggambarkan permukaan bidangØ Animasi: mempelajari cara menggambarkan dan memanipulasi gerakanØ Rendering: mempelajari algoritma untuk menampilkan efek cahayaØ Citra (Imaging): mempelajari cara pengambilan dan penyuntingan gambarGeometri (dari bahasa Yunani γεωμετρία; geo = bumi, metria = pengukuran) secara harafiah berarti pengukuran tentang bumi, adalah cabang dari matematika yang mempelajari hubungan di dalam ruang. Dari pengalaman, atau mungkin secara intuitif, orang dapat mengetahui ruang dari ciri dasarnya, yang diistilahkan sebagai aksioma dalam geometri.Citra atau gambar atau bayangan atau imaji (dari Bahasa Inggris image, dan Bahasa Latin imago) adalah benda yang dihasilkan atas upaya manusia dalam mereproduksi kemiripan dari suatu obyek—biasanya obyek-obyek fisik/nyata.

Pemanfaatan Grafika Komputer



Pada perkembangan saat ini pemanfaatan teknologi grafika komputersangat dibutuhkan untuk memvisualisasikan objek-objek dunia nyata menjadiobjek grafis, dan implementasi yang real yaitu digunakannya teknologi grafikakomputer pada fraktal untuk pembuatan aplikasi desain suatu benda.Penggunaan Metode Newton dalam aplikasi fraktal mempunyai peranandidalam melakukan suatu iterasi, pembentukan gambar dan pemilihan warna(palette) pada aplikasi ini sangat ditentukan dari metode yang digunakan, untukpengujiannya pada setiap input dengan memasukkan nilai iterasi yang berbedabedakemudian diproses, sehingga keluarannya diperoleh berupa bentuk gambardengan susunan pola warna yang ada pada gambar tersebut dari hasil perhitungan.Aplikasi yang dibangun diharapkan mampu untuk diterapkan pada permukaansebuah keramik.

Grafika Komputer 3D



Contoh grafika komputer 3D

Grafika komputer 3D (Inggris: 3D Computer graphics) adalah representasi dari data geometrik 3 dimensi sebagai hasil dari pemrosesan dan pemberian efek cahaya terhadap grafika komputer 2D. Hasil ini kadang kala ditampilkan secara waktu nyata (real time) untuk keperluan simulasi. Secara umum prinsip yang dipakai adalah mirip dengan grafika komputer 2D, dalam hal: penggunaan algoritma, grafika vektor, model frame kawat (wire frame model), dan grafika rasternya.Grafika komputer 3D sering disebut sebagai model 3D. Namun, model 3D ini lebih menekankan pada representasi matematis untuk objek 3 dimensi. Data matematis ini belum bisa dikatakan sebagai gambar grafis hingga saat ditampilkan secara visual pada layar komputer atau printer. Proses penampilan suatu model matematis ke bentuk citra 2 D biasanya dikenal dengan proses 3D rendering.

Teknologi Grafika




Kemajuan teknologi informasi sangat besar pengaruhnya terhadap perkembangan teknologi cetak mencetak, sehingga di mana pun kita berada selalu menatap dan menggunakan barang cetakan, misalnya: uang, meterai, prangko, surat kabar, majalah, buku, brosur, folder, poster, spanduk, company profile, formulir, ticket, kemasan (kertas, karton, kaleng, plastik, dll) sampai pada surat-surat berharga yang dipergunakan pada bank-bank, dan sangat banyak jenis, bentuk, jumlah barang cetakan di masyarakat.
Semakin banyak jumlah manusia, semakin meningkat sosial ekonomi, semakin tinggi pendidikan dan kebudayaan suatu bangsa akan semakin banyak memerlukan barang cetakan sebagai sarana komunikasi, alat pembayaran, sebagai pembungkus, dan fungsi-fungsi lain


Perkembangan terakhir di bidang teknologi produksi grafika sebagai usaha untuk melayani tuntutan pemesan yang semakin cepat dan kritis adalah munculnya “ teknik cetak jarak jauh, instant printing dan yang terakhir print on demand.”
Gambaran umum fungsi dan jenis barang cetakan yang demikian banyak dan bervariasi menuntut industriawan grafika melengkapi peralatan yang memadai dari kualitas dan kuantitasnya, serta kesiapan sumber daya manusianya sebagai penentu keberhasilan produksi. Kondisi demikian memberikan peluang yang sangat besar bagi insan grafika untuk berkiprah mengisi lowongan dan tawaran yang sangat menjanjikan itu.
Sesuai dengan tujuan pendidikan, ATG Trisakti mempersiapkan struktur program kurikulum yang telah mengacu pada kebutuhan industri grafika walau tetap harus dibantu oleh perusahaan grafika, penyalur alat/mesin sebagai akibat dari perkembangan teknologi grafika. Penyusunan kurikulum tetap menggunakan pola baku, walaupun akhir-akhir ini ada kebebasan untuk mengubah dan menyesuaikan dengan kebutuhan industri. Dengan kebebasan menentukan kurikulum itu, maka ATG Trisakti segera menyesuaikan kebutuhan di industri percetakan.
Sebagai bentuk penyesuaian itu tercermin di dalam kurikulumnya, terdapat mata kuliah “Sistem Produksi Grafika” dan simulasinya. Mata kuliah ini disajikan dengan menyertakan CD software yang baru saja diselesaikan oleh tim.
Kuliah sistem simulasi produksi grafika ini disajikan pada semester 4 dan semester 5, setelah para mahasiswa memperoleh materi tentang keteknikan di semester 1, 2, 3 dan 4, dan selanjutnya di semester 6 mahasiswa melakukan PKL (praktek kerja lapangan) dengan sistem kelompok sesuai dengan produk grafika yang akan ditekuni.
Di dalam mata kuliah sistem simulasi produksi grafika itu materi penyajiannya ditekankan bagaimana mahasiswa menangani dan mengelola order cetakan mulai dari awal sampai akhir, sehingga bobot manajerialnya lebih menonjol. Tugas demikian pada umumnya di perusahaan-perusahaan percetakan berperan sebagai perencana dan pengendalian produksi (PPC = Planning Production and Controll) atau dalam istilah manajemen, sebagai middle manager yang menentukan alur proses produksi.
Dari materi kuliah yang disajikan ini, diharapkan mahasiswa mampu menyiapkan dan menyusun rencana produksi, mendesain produk, memilih bahan dan alat/mesin produksi, menyusun jadwal produksi, melakukan pengendalian proses produksi dan mengendalikan mutu produksi. Para mahasiswa dituntut pula untuk mengestimasi apakah barang cetakan itu sebagai barang cetakan yang diproduksi akan menguntungkan perusahaan atau sebaliknya.Selain sebagai seorang perencana dan pengendalian produksi, kemampuan yang diperoleh para mahasiswa itu dapat pula mendukung seseorang sebagai estimator, tenaga pemasaran, dan apabila dibarengi dengan pengembangan diri (melalui pengalaman dan menuntut pendidikan) akan sangat mungkin menjadi manajer setiap bagian dan mungkin lebih tinggi lagi, atau sebagai seorang wiraswastawan.

Grafika komputer


GRAFIKA KOMPUTER
Grafika komputer atau dalam bahasa inggris Computer Graphics dapat diartikan sebagai seperangkat alat yang terdiri dari hardware dan software untuk membuat gambar, grafik atau citra realistic untuk seni, game komputer, foto, dan film animasi.Dewasa ini, grafika komputer sudah banyak digunakan sebagai materi pendukung dalam berbagai bidang, pada tugas akhir ini penulis menganalisis tentang implementasi grafika komputer dengan menggunakan aplikasi perangkat lunak berbasis visual interaktif untuk gerak benda dan gelombang pada fisika yang meliputi gerak melingkar, gerak satelit, gerak peluru, gelombang transversal, dan gelombang sinusoida.Implementasi grafika komputer yang diaplikasikan pada program simulasi berbasis visual interaktif untuk gerak benda dan gelombang pada fisika diharapkan dapat membantu dalam proses belajar, dan mempercepat pemahaman dalam mempelajari tentang gerak benda dan gelombang yang selama ini masih dilakukan dengan cara yang konvensional yaitu dengan gambar dan juga diharapkan dapat meningkatkan daya minat belajar karena cara yang dipakai dalam perangkat lunak ini lebih menarik dengan fasilitas menu yang sederhana..

Postingan Lebih Baru Postingan Lama Beranda