Teknik OOP (Object Oriented Programming) dalam Pengaturcaraan

Assalammualaikum

Baiklah, kali ini kita masuk pula ke teknik pengaturcaraan OOP

Ianya tidaklah susah seperti yang dibelajar dalam kelas. Yang penting cara penyampaian bagi menarik minat pelajar dahulu dan kemudian baru mereka akan beransur-ansur akan minat dengan pengaturcaraan atau dalam bahasa inggerisnya programming

Sebelum saya mulakan apa-apa, baik kita tenangkan diri dan buangkan dalam minda bahawa programming ini susah dan menyusahkan. Buang dahulu dan anggap anda akan belajar subjek baru yang anda nak tengok apa isi kandungannya.

Ini subjek yang membolehkan anda menonton filem 3D, bermain permainan konsol atau komputer, bermain permainan di iPAD dan iPhone atau Samsung Galaxy Tab dan sewaktu dengannya

Apakah itu OOP?

OOP ini sebenarnya satu istilah sahaja untuk mengambarkan tahap keteraturan programming anda berbanding teknik struktur dan modular dahulu

Anggap sahaja kita ingin melakukan tugas arithmetic iaitu tambah dan tolak

Kita akan recall kembali pembelajaran kita dan mulakan dengan teknik-teknik programming terdahulu

Saya mulakan dengan menulis main.cpp terlebih dahulu (Untuk kali ini saya menggunakan Visual C++ 2010 Edition)

//disini saya panggil iostream untuk tujuan penggunaan "cout" dan "endl"
#include <iostream>
//disini saya panggil stdlib.h untuk arahan system ("pause").
//Ini membolehkan Visual C++ tidak terus menutup tetingkap konsol sebaik sahaja tamat program
#include <stdlib.h>
//untuk arahan "cout" dan "endl". Ianya memudahkan kita dalam menulis cout ini kerana jika tidak
//kita perlu meletakkan std::cout<<"etc"<<endl; untuk setiap kali menggunakan cout
using namespace std;

int main()
{
cout<<"test"<<endl; //papar perkataan test
system("pause");    //jangan tamatkan program
}

Berdasarkan pengaturcaraaan di atas. Saya selalu menulis dengan menguji menggunakan cout terlebih dahulu.

Maka kali ini kita cuba masukkan pula fungsi tambah, tolak, darab dan bahagi. Sila baca definisi pada sesetengah fungsi

#include <iostream>
#include <stdlib.h></pre>
int a,b,c,d;

using namespace std;

int tambah() //fungsi baru tambah
{
cout<<"Masukkan Nilai A    :"; // untuk memasukkan nilai A
cin>>a;                                           // mengambil nilai A menggunakan arahan cin
cout<<"Masukkan Nilai B    :"; // untuk memasukkan nilai B
cin>>b;                                          // mengambil nilai B menggunakan arahan cin
return (a+b);                                // Kita menghantar nilai A+B kepada fungsi yang memanggil fungsi "tambah()" ini
}

int tolak()
{
cout<<"Masukkan Nilai C    :";
cin>>c;
cout<<"Masukkan Nilai D    :";
cin>>d;
return (c-d);                                       // Kita menghantar nilai C-D kepada fungsi yang memanggil fungsi "tolak()" ini
}

int main () {
cout << "jawapan bagi penambahan a+b ialah : "<<tambah()<<endl;
cout << "jawapan bagi penolakan c-d ialah : "<<tolak()<<endl;
system ("pause");
}
<pre>

Maka sekarang kita sudah beralih ke Procedural Programming.

Sekarang, kita akan convertkan kepada Object Oriented Programming. Maka saya memerlukan satu fail tambahan yang digelar sebagai tambahtolak.h (rujuk post saya terdahulu)

Tetapi apa yang perlu ada dalam tambahtolak.h ini? Sebuah fail header?

Untuk melakukan operasi tambah tolak kita memerlukan
– operasi tambah : untuk menjalankan operasi tambah
– operasi tolak : untuk menjalankan operasi tolak
– operasi pengambilan data : untuk mengambil data agar dapat digunakan oleh tambah dan tolak.

Bermaksud, operasi tambah dan tolak memerlukan data dari operasi pengambilan data yang lain.

Tetapi jika kita boleh “bundlekan” operasi-operasi ini atau gabungkan untuk menjadi satu fungsi sahaja.

Dan apa yang tinggal kita hanya perlu dapatkan data sahaja.

#ifndef tambahtolak_h
#define tambahtolak_h

class nombor
{
public:
int aa,bb,cc,dd;
void operasi(nombor dapatkandata);
};

#endif

Satu class nombor diperkenalkan. Sistem class ini bertujuan seperti pakej. Ianya tidak sama seperti fungsi. class ini dapat digunakan oleh fungsi lain juga.

Saya juga isytiharkannya sebagai public kerana saya tidak menggunakan data yang private atau protected. Definisi ini tidak akan diterangkan untuk artikel ini.

Cuba perhatikan, saya perkenalkan int aa,bb,cc, dan dd untuk menyimpan data yang akan dimasukkan oleh pengguna

Kemudian ada satu fungsi operasi (void) untuk mendapatkan data. “nombor dapatkandata” itu adalah bertujuan memberitahu class nombor yang kita mahu simpan

atau parsing data yang dihantar melalui dapatkandata. bermaksud “dapatkandata” ini seperti seorang orang tengah dalam mendapatkan data

.

Seterusnya kita pergi ke satu lagi fail yang akan diperkenalkan iaitu tambahtolak.cpp

#include <iostream>
#include "tambahtolak.h"

using namespace std;

void nombor::operasi(nombor dapatkandata)
{
cout<<"Penambahan a+b    :    "<<dapatkandata.aa + dapatkandata.bb<<endl;
cout<<"Penolakan c-d    :    "<<dapatkandata.cc - dapatkandata.dd<<endl;
}

Seperti biasa, kita akan memanggil header file tambahtolak.h ini kerana kita akan melakukan sesi function declaration di dalam ini.

Cuba lihat dalam void nombor::operasi (nombor dapatkandata)

Inilah cara untuk kita menulis bagi mendapatkan atau memanggil function yang diisytiharkan di dalam class nombor tadi.

Kemudian di dalamnya terdapat sesi penambahan dan penolakan. kita menggunakan [dot] atau “.” untuk mendapatkan data yang telah dikutip oleh

dapatkandata bagi setiap variable aa,bb,cc, dan dd.

Seterusnya kita lihat pula main.cpp

</pre>
#include <iostream>
#include <stdlib.h>
#include "tambahtolak.h"

using namespace std;

nombor datas;
nombor *getdatas;

int main () {
cout<<"Nilai A    :    ";cin>>datas.aa;
cout<<"Nilai B    :    ";cin>>datas.bb;
cout<<"Nilai C    :    ";cin>>datas.cc;
cout<<"Nilai D    :    ";cin>>datas.dd;
getdatas->operasi(datas);
system ("pause");
}
<pre>

Kita mendapati bahawa kita perlu sekali lagi memanggil tambahtolak.h

Dan disini saya perkenalkan dua data untuk dapatkan data. satu berbentuk  *getdatas dan satu lagi berbentuk datas sahaja.

Apakah bezanya?

Satu untuk menyimpan data dan satu lagi untuk memanggil data.

*getdatas adalah untuk memangil operasi

datas pula adalah untuk memasukkan nilai di dalamnya.

Oleh sebab itu Nilai A sehingga D dipanggil menggunakan cin>>datas.aa dan sebagainya

Manakala getdatas->operasi(datas) pula adalah bertujuan untuk memanggil operasi dan “menghantar” datas itu semua kepada fungsi operasi.

Kita tidak perlu spesifikkan aa,bb,cc, dan dd (seperti getdatas->operasi(datas.aa)) dan seterusnya kerana melecehkan. Baik sahaja kita hantar satu bundle

Maksudnya

getdatas->operasi(datas.aa)
getdatas->operasi(datas.bb)
getdatas->operasi(datas.cc)
getdatas->operasi(datas.dd)

sama sahaja seperti

getdatas->operasi(datas)

Lihat, 4 lines versus 1 line. mana satu anda pilih?

Outputnya:-

main.cpp

Maaf, agar kabur. Tetapi anda boleh cuba copy and paste setiap kod tadi dalam Visual C++ 2010 dan jalankan.

WordPress tidak membenarkan saya upload .zip file dan .cpp file. Maka saya cadangkan agar copy and paste sahaja code di atas.

Sehingga berjumpa lagi

Selamat Programming dengan bestnya!!

Cara Belajar Programming C/C++ Dengan Hebatnya

Assalammualaikum,

Maaflah jika post ini agak membosankan tatkala saya juga terasa bosan maka saya bercadang untuk menulis. Tetapi saya menulis artikel ini untuk dikongsi bersama anda semua atau pencari tips-tips untuk menjadi hebat dalam Programming C/C++ terutama khas kepada pelajar-pelajar yang sedang belajar di universiti atau sesiapa jua. Kebanyakan tips ini diperoleh oleh supervisor saya yang ternyata saya rasa membantu meningkatkan minat pelajar kepada pengaturcaraan

Baiklah, seperti yang kita tahu, apabila kita mahu memulakan programming, kita mesti ada perisiannya. Pendek kata, samada Borland C atau Visual C++. Pastikan anda memasangnya terlebih dahulu.Oh ya Visual Studio 11 sedang dalam proses untuk diterbitkan pada penghujung tahun 2012 (dijangka)

Seterusnya apa yang perlu anda buat adalah anda menggunakan Google untuk mencari sample source code paling mudah ataupun menggunakan nota yang dibuat oleh pensyarah anda. Sebenarnya ianya pasti amat membosankan kerana ianya terlalu senang dengan hello world sahaja. Tetapi percayalah, anda perlu hapuskan perasaan bosan tersebut dan mulakan dari awal.

Oleh sebab itu untuk pelajar saya, saya suruh dia runkan kesemua source code yang di laman web ini http://www.swiftless.com dan saya mahu dia tunjukkan setakat mana dia boleh runkan source code tersebut. Website tersebut memuatkan cara menggunakan OpenGL bersama-sama pengaturcaraan C++. Tidak perlu risau tahu atau tidak penggunaan source code tersebut.

Seterusnya, setelah berjaya runkan setiap source code tersebut. Maka anda perlu diberi tugasan. Oleh sebab itu pensyarah perlu aktif dalam mengajar subjek programming ini dan bukan sekadar dalam slide powerpoint. Sebaliknya tunjukkan secara live bagaimana anda menulis dari awal sehingga akhir sesuatu sample program tersebut di dalam kelas. Sebagai pelajar, kita harus berusaha membuatnya.

Kemudian, bagi tugasan yang perlu dijawab dalam masa 5 minit untuk mengubahsuaikan source code tersebut menggunakan topik yang dipelajari pada hari tersebut. Tugas anda adalah untuk monitor semua pelajar tersebut dan cuba lihat siapa yang lemah dalam mengubahsuaikan source code tersebut. Teruskan dengan another 5 minutes challenge dan sehingga tertapisnya siapa yang lemah dan siapa yang hebat. Tujuannya supaya kita boleh memberi tumpuan yang lebih kepada yang lemah dan kurang kepada yang sudah hebat. Bukan semua dapat menguasai dengan baik bidang pengaturcaraan ini, oleh itu kita perlu saling membantu antara satu sama lain.

Cara seterusnya adalah dengan sentiasa mencari idea bagaimana untuk membuat sesuatu perisian yang memudahkan tugas anda. Sebagai contoh, Visual C++ menggunakan .NET Framework boleh digunakan untuk membuat perisian Vending Machine, Driving Simulator dan sebagainya. Apa yang harus anda tekankan disini adalah menanamkan minat kerana tanpa minat ianya tidak berguna jua.

Pastikan anda tidak meninggalkan pembelajaran pengaturcaraan ini terlalu lama kerana kelak ianya membuatkan anda malas dan akhirnya anda sudah bosan dengen pengaturcaraan. Sebaliknya, cuba setiap minggu anda libatkan diri dengan pengaturcaraan kerana dengan itu anda dapat mem”polish” skill pengaturcaraan anda secara berkala.

 

[Teknikal] Jenis-jenis Teknik Pengaturcaraan

Assalammualaikum,

Saya secara tiba-tiba ingin menulis artikel berkaitan teknik-teknik pengaturcaraan (programming) yang “common” di dunia ini.

Baiklah

Terdapat beberapa jenis teknik yang terdapat dalam menulis sesuatu program atau aturcara

1. Teknik Pengaturcaraan Tidak Berstruktur (Unstructred Programming)

Teknik ini biasanya dipelajari oleh diri kita semasa kita mula-mula mengenal dunia pengaturcaraan.

Ianya hanya dibuat secara mendatar sahaja dan lebih kepada permulaan untuk para pelajar mengenal dunia pengaturcaraan.

Contohnya

int main()
{ cout<<"Hello Hamzah"<<endl;
}

ataupun

#include <iostream>
using namespace std;
int main () {
int a,b,c;
c=5;
b=c*5;
a=b+c;
cout << "jawapan bagi a ialah : "<<a<<endl;
return 0;
}

Pendek kata, semuanya disumbat sahaja ke dalam main tersebut dan ini memudahkan pelajar untuk faham asas programming.

Jadi para pelajar dan reader sekalian, Ini disebut sebagai unstructured programming. Semua kita sumbat dalam main.

2. Teknik Pengaturcaraan Berprosedur (Procedural Programming)

Ianya agak sama seperti pengaturcaraan tidak berstruktur di atas kecuali kita kali ini membina fungsi-fungsinya di luar daripada main.

Bermaksud, kita tidak sumbat kesemuanya dalam main. Jika anda mahir peringkat programming ini, bermaksud anda sebenarnya di tahap Moderate Programming in C++ technique.

Contohnya, saya ingin membuat fungsi tolak dan tambah dan kita perlu masukkan nilai dan akhirnya akan memperoleh jawapan

#include <iostream>

using namespace std;

int a,b,c,d;

int tambah()
{
	cout<<"Masukkan Nilai A	:";
	cin>>a;
	cout<<"Masukkan Nilai B	:";
	cin>>b;
	return (a+b);
}

int tolak()
{
	cout<<"Masukkan Nilai C	:";
	cin>>c;
	cout<<"Masukkan Nilai D	:";
	cin>>d;
	return (c-d);
}

int main () {
	cout << "jawapan bagi penambahan a+b ialah : "<<tambah()<<endl;
	cout << "jawapan bagi penolakan c-d ialah : "<<tolak()<<endl;
    return 0;
}

3. Teknik Pengaturcaraan Modular (Modular Programming) 

Baiklah, cuba anda lihat kembali dari segi ayat. Apakah itu struktur? atau modular ataupun ayat “modul” itu sendiri?

Katakan kita belajar subjek Sejarah, di dalamnya terdapat

Modul 1 : Sejarah Dunia.
Modul 2 : Sejarah Asia Tenggara
Modul 3 : Sejarah Malaysia

Jadi, modul ini sebenarnya seperti subtopik yang anda belajar dalam subjek Sejarah.

Ataupun kita ambil contoh anda mengambil Kursus Kejuruteraan Komputer

Dalam Kejuruteraan Komputer, terdapat pelbagai subjek dan setiap subjek ada modulnya tersendiri

Jadi apakah itu modul? Modul dari segi penerangan di atas bermaksud pecahan-pecahan bagi sesuatu tajuk/topik/kursus

Dalam dunia programming, Modular Programming ini bermaksud satu cara programming yang tersusun. Sebagai contoh, saya ingin membuat satu program yang boleh mengira hasil tambah dan hasil tolak (sama seperti diatas tetapi diubahsuai sedikit).

Oleh itu, saya memperkenalkan satu file yang lain iaitu satu dipanggil header file dan satu lagi .cpp file yang bernama tambahtolak.h dan tambahtolak.cpp

Di dalam tambahtolak.h, saya meletakkan dua fungsi berstatus void untuk memastikan saya tidak akan return sebarang nilai. Itulah bagusnya void berbanding int yang memerlukan untuk memulangkan nilai.

Tambahtolak.h

#ifndef tambahtolak_h
#define tambahtolak_h

void tambah(int a, int b);
void tolak(int c, int d);

#endif

di dalam file tambahtolak.h ini saya memperkenalkan dua fungsi void yang mengandungi integer di dalamnya. Saya memerlukannya untuk parsingkan nilai supaya diproses oleh tambahtolak.cpp

tambahtolak.cpp

#include <iostream>
#include "tambahtolak.h"

using namespace std;

void tambah(int a, int b)
{
	cout<<"Masukkan Nilai A	:";
	cin>>a;
	cout<<"Masukkan Nilai B	:";
	cin>>b;
	cout << "jawapan bagi penambahan a+b ialah : "<<a+b<<endl;

}

void tolak(int c, int d)
{
	cout<<"Masukkan Nilai C	:";
	cin>>c;
	cout<<"Masukkan Nilai D	:";
	cin>>d;
	cout << "jawapan bagi penolakan c-d ialah : "<<c-d<<endl;
}

Perhatikan saya meletakkan isi setiap fungsi tersebut. Satu dengan fungsi tambah dan satu lagi dengan fungsi tolak.

Oh ya, bagaimana kita memanggilnya di main.cpp?

main.cpp

#include <iostream>
#include "tambahtolak.h"

using namespace std;

int no1,no2,no3,no4;

int main () {
	tambah(no1, no2);
	tolak(no3, no4);
    return 0;
}

Apabila kita run kan program tersebut

Jadi, apakah kelebihan modular programming ini berbanding dua yang sebelumnya? banyak

– Kita boleh memasukkan seberapa banyak fungsi dalam tambahtolak.cpp tambah perlu mengubah main.cpp

– Kita boleh masukkan fungsi bahagi dan darab di dalamnya tanpa perlu mengubah fungsi dalam main.cpp (tidak perlu sentuh langsung main.cpp). Yang penting kita panggil sahaja di dalam main.cpp

– Kita juga boleh bermain-main dengan nilai yang kita hendak parsing kepada tambahtolak.cpp di bahagian main andaikata kita mahu menghantar nilai-nilai yang lain. Contohnya, kita mahu input diambil daripada main. Maka kita perlu ubah sedikit sahaja.

tambahtolak.h

tambahtolak.cpp

main.cpp

hasilnya

Jadi, cukup sekadar itu, Object Oriented Programming (teknik terakhir) akan saya cover dalam keluaran seterusnya.

Sebenarnya, programming ini sangat menyeronokkan. dan best!!!