Senin, 08 Agustus 2011

OOP #4: Pass By Value

Gimana, mudah kan ngompile pake command line di OOP #3. Ayo lanjutkan penjelajahan baris-baris kode C++. Kali ini kita ngebahas "Pass By Value"

Diasumsikan kita sudah punya direktorti c:\oop. Ketik source code berikut ini (nomor baris hanya untuk referensi, jangan diketik) dan disimpan menjadi c:\oop\oop4.cpp yang akan di-compile menjadi oop4.exe.

Source code:


  1. #include <stdio.h>

  2. int main(int argc, char* argv[]) {

  3. int a, b;

  4. printf("address a: %X, b: %X, nilai a: %X, b:%X\n", &a, &b, a, b);

  5. a=8;

  6. b=a;

  7. printf("address a: %X, b: %X, nilai a: %X, b:%X\n", &a, &b, a, b);

  8. a=4;

  9. printf("address a: %X, b: %X, nilai a: %X, b:%X\n", &a, &b, a, b);

  10. return 0;

  11. }


Diasumsikan kita sudah berada dalam direktori c:\oop. Build menjadi oop4.exe dengan mengetik command line: g++ -o oop4.exe oop4.cpp

Output Program:

Jika kompilasi berhasil, berikut ini adalah hasil eksekusi oop4.exe (nomor baris saya selipkan untuk referensi):


  1. address a: 22FF4C, b: 22FF48, nilai a: 7FFDC000, b:0

  2. address a: 22FF4C, b: 22FF48, nilai a: 8, b:8

  3. address a: 22FF4C, b: 22FF48, nilai a: 4, b:8


Pembahasan Source Code:

Setiap variabel menempati memori. Jadi, variabel memiliki 2 hal: alamat memori dan nilai. Kita memeriksa keduanya dalam latihan kali ini.


  1. Baris 1: Meng-include stdio.h yang berisi deklarasi function printf (Dalam OOP #3 sudah dibahas tentang hal ini).

  2. Baris 2: function main adalah entry-point program.

  3. Baris 3: mendeklarasikan dua varibel (a dan b) bertipe integer (bilangan bulat).

  4. Baris 4: memeriksa alamat dan nilai a dan b. Lihat Output Program, baris 1. Variabel a sudah memiliki alokasi memori: 22FF4C dan b: 22FF48 (kode &a dan &b masing-masing berarti mengevaluasi alamat a dan b). Variabel b yang dideklarasikan setelah a memperoleh alamat memori yang lebih awal (22FF48 lebih awal daripada 22FF4C). Ini adalah efek penyimpanan variabel dalam stack segment. (Tentang alokasi stack vs heap dijelaskan di bab berikutnya). Kita belum meng-assign nilai a dan b sehingga masih acak (a: 7FFDC000 dan b: 0).


  5. Baris 5: a diberi nilai 8.

  6. Baris 6: nilai a disalin ke b secara pass by value.

  7. Baris 7: memeriksa alamat dan nilai a dan b. Lihat Output Program, baris 2. Alamat a dan b tidak berubah. Nilai a sama dengan nilai b, yaitu 8. Ini akibat penyalinan nilai a ke b (source code, baris 6).

  8. Baris 8: nilai a diubah menjadi 4. Apakah b juga berubah?

  9. Baris 9: Memeriksa alamat dan nilai a dan b. Lihat Output Program baris 3. Alamat a dan b tidak berubah. Nilai a berubah menjadi 4. Dan b? Tetap 8. a dan b adalah 2 variabel independen. Pass by value hanya menyalin nilai suatu variabel ke variabel lain. Seperti halnya setelah kita mem-fotokopi selembar kertas. Kalau kita mencoret-coret kertas asli, tidak akan berakibat apa-apa ke kertas copy-annya.

  10. Baris 10: memberi tahu sistem operasi kalo fungsi main selesai tanpa error.


Pass by value:

  • Hanya nilai yang disalin antar dua variabel, alamat keduanya tetap.

  • Perubahan variabel pertama tidak akan mengubah variabel kedua. Demikian pula sebaliknya.

Sabtu, 06 Agustus 2011

OOP #3: Wajah Dunia yang Pertama

"Wajah Dunia yang Pertama", itu salah satu sajak WS.Rendra yang amat saya kagumi.

Dalam OOP #2 kita baru saja menginstalasi compiler g++. "Let us give it a try".


  • mkdir c:\oop

  • cd c:\oop

  • notepad main.cpp (klik Yes untuk pertanyaan Do you want to create a new file)

  • Dalam notepad, ketik kode (nomor baris jangan diketik ya, hanya untuk referensi):

    1. #include <stdio.h>

    2. int main(int argc, char* argv[]) {

    3. printf("hello\n");

    4. return 0;

    5. }



  • Menu notepad: save.

  • Compile menggunakan command line: g++ -o oop main.cpp. Artinya: meng-compile file teks main.cpp menjadi object code (file biner): main.o lalu me-link-nya menjadi executable file: oop.exe.

  • Periksa hasil compile menggunakan dir. Pastikan ada file oop.exe.

  • Eksekusilah program pertama itu, ketik: oop.


Pembahasan

Baris #1: meng-include file header stdio.h. Dalam C/C++, tipe data buatan, variable, dan function (kecuali main function) harus dideklarasikan sebelum digunakan. Tanpa meng-include stdio.h, perintah printf(...) pada baris 3 akan menghasilkan error ketika di-compile. Coba saja meng-comment baris 1: //#include <stdio.h>. Lalu compile ulang. Akan tampil error: 'printf' was not declared in this scope.

Baris #2: main function. Dua argumen input: argc dan argv (dijelaskan nanti) dan sebuah output bertipe int (bilangan bulat). Ini adalah fungsi yang menjadi entry-point program.

Baris #3: printf. Memformat dan mem-print data ke layar text mode. Tanda "backslash n" di akhir "hello" artinya newline: baris baru.

Baris #4: return 0. keluar dari function main dan memberikan bilangan bulat 0 (sesuai tipe return function main) bagi sistem operasi. Angka 0 memberi tahu sistem operasi bahwa program kita selesai tanpa error code.

"Jangan cuma dibaca ya, ayo dong cobain"

OOP #2: Compiler, go open source

OOP paling asyik kalo dimainkan pake bahasa C++. Kenapa gak Java saja ya? Bagusnya sih mulai dengan C++. Karena akan jadi akrab juga dengan C. Terus kalo mahir C, bisa kotak-katik source code-nya projek-projek open source, terutama di Linux. Juga, bisa main teknologi terbaru Firefox: js-ctypes. Saya pake js-ctypes untuk mengendalikan hardware secara lebih ringan melalui javascript.

Pernah dengar Qt-C++ (yang sekarang sudah dimiliki Nokia)? Itulah library yang jadi dasar pengembangan KDE Linux. Kita cukup meng-coding satu kali. Hasilnya bisa di-compile dan di-eksekusi di berbagai sistem operasi: Linux, Unix, Mac OS, Sun Solaris, Windows. Saya pernah nyoba. Sungguh... selalu bikin penasaran.

Menginstalasi Compiler yang Open Source

Langsung saja ya. Sesuai semangat text mode, kita akan menginstalasi compiler C++ yang open source. Kalo di Linux sih sangat mudah. Sudah ada paket gcc, g++, make. Gak usah dijelasin lagi. Persoalannya kalo di Windows gimana? Ayo, kita ikut gaya open source.

Untuk windows, saya menggemari MINGW (Minimalist GNU for Windows). Compatible banget sama gcc, g++ dan make-nya Linux. Kalo lancar bahasa Inggris, prosedur nginstall-nya ada di: http://www.mingw.org/wiki/Getting_Started. Berikut ini prosedur instalasi yang saya lakukan:

  1. Buat direktory c:\mingw.

  2. Download mingw-get-0.3-mingw32-alpha-2.1-bin.zip dari http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/mingw-get/mingw-get-0.3-alpha-2.1/

  3. Unzip hasil download tersebut ke dalam c:\mingw.

  4. Daftarkan c:\mingw\bin ke Path windows menggunakan [Control Panel]--System--Advanced--[Environment Variables].

  5. Pastikan komputer tetap terhubung ke internet. Masuk ke layar text mode (dijelaskan di OOP #1). Ketik perintah: mingw-get install gcc g++ mingw32-make

  6. Jika berhasil, maka di bawah direktori c:\mingw\bin terdapat file-file yang amat kita perlukan, salah satunya: g++.exe.


Sahabat:
"Selamat datang di dunia open source"

Jumat, 05 Agustus 2011

waaaaaah...sudah masuk Bulan Ramadhan, saya selaku admin mohon maap lahir batin eaaaa...... maaf akhir ini postingan sedikit karna kesibukan di dunia nyata.hahahaha.....
selamat menjalankan ibadah puasa bagi yang menjalankan-nya.

RePLu On Facebook