troikasix 0 Report post Posted July 6, 2007 (edited) Berdasarkan buku: Effective C++ : Scott MeyersC++ mempunyai pengikut yang paling ramai berbanding bahasa pengaturcaraan yang lain seolah2 terdapat kultus keagamaan fanatik terhadap bahasa ini. Ia adalah bahasa yang mampu mengeluarkan 'commercial grade' software berbanding bahasa lain dan selalu digelarkan sebagai Object Oriented Assembly Language.Hari ini, C++ adalah bahasa pengaturcaraan pelbagai-paradigma, dengan kombinasi strukturan, orientasi objek, functional, generic dan metaprogramming. Keupayaan dan fleksibiliti ini menjadikan C++ satu alat yang tiada tara, tapi memeningkan kepala. Jadi bagaimana nak menguasainya?Cara paling mudah adalah dengan melihat C++ bukan sebagai satu bahasa, tetapi gabungan pelbagai bahasa. Setiap sub-bahasa mempunyai undang2 tersendiri jadi lebih senang diingati. Apabila kita beranjak ke satu sub dari satu sub, maka undang2nya berubah. Untuk tak memeningkan kepala, anda mesti mengenalpasti pembahagian utamanya. Nasib baik cuma ada 4.Rahsia penting disini adalah manahan diri daripada mengeksplor keterlaluan sehingga tersasar masuk ke sub-bahasa yang lain. Saya akan cuba menerangkan penggunaan sintaks dalam setiap sub-bahasa supaya anda boleh melihat perbezaan dan penggunaannya. Tapi mungkin saya akan tertinggal sedikit sebab saya pun baru nak faham juga.Paradigma 1- C++ sebagai bahasa pengaturcaraan berstruktur C (structured language) Asal usul C++ adalah dari bahasa C. Sampai ke satu tahap, C tak dapat nak dikembangkan lagi melainkan dengan sokongan platform sistem spt Windows & Linux. Semua pengkompil C++ adalah pengkompil C. Skop yang agak terhad tetapi sesuai utk proses pengenalan permulaan. Ini adalah aliran yang paling mudah untuk dipelajari tapi paling susah untuk digunakan. Jangan buang masa lama sangat belajar di sini. Cukup sekadar untuk mengenali sintaks dan program flow bersama beberapa latihan. Tetapi luangkan masa untuk memahami topik `pointer`. Cuba fahamkan, kenapa kod yang berikut boleh dikompil.struct Cell { int nRow, int nCol }; Cell singlesel = {2,3}; unsigned int x = (void *)&singlesel; Cell another = *(Cell*)(void*)x; Hadkan diri anda kepada sintaks bahasa C struct, int, if, switch, case, for, do...while, return dsb nya. Ianya cukup sebagai panduan. Elakkan penggunaan sintaks class, virtual, template dan typename, juga semua jenis operator overloading. Untuk elak tersasar, gunakan file *.c dan *.h sahaja dalam peringkat ini. Paradigma 2- C++ sebagai bahasa berorientasi objek Kenali dan fahami konsep penting Abstraction, Polymorphism, Inheritance dan Encapsulation. (A-PIE). Anda boleh menggunakan Java sebagai platform mempelajarinya. Tetapi ia berakhir di situ. Java tak mampu pergi lebih jauh dari itu. Pastikan anda faham bahawa int x; adalah satu deklarasi objek. Bukan sekadar variable declaration. Ini maklumat penting untuk memahami apa itu sebenarnya objek dalam program anda. Dimana ia berada dan macammana untuk memanipulasikan objek. Belajar sikit pasal Assembly supaya anda faham kenapa this pointer wujud dan boleh digunakan dalam member function. Ia penting untuk memahami implikasi sintaks static kepada member function. Kenali multiple Inheritance dalam C++. Bandingkan ia dengan teknik interface dalam Java dan C#. Sintaks penting disini adalah class, virtual, operator, static dan struct. Elakkan sintaks template dan typename buat masa ini. Paradigma 3- C++ Template Metaprogramming (TMP) Ini adalah bahagian 'Generic' dalam C++, bahagian yang mana kebanyakan programmer kurang pendedahan dan pengalaman. Maklumlah, jika dilihat sampel kod, ia terlalu cryptic. Bukan mudah nak memahami cuma dengan cara membaca kod. Untuk walk-thru dalam debug mode pun tak tentu anda boleh kenalpasti apa yang berlaku. Tapi keupayaan paradigma ini tiada tandingan. Malah ia seolah-olah satu cabang yang amat besar. Memang boleh ditinggalkan terus sub-bahasa ini. Terang, Microsoft MFC hampir tiada mengguna cabang ini. Seingat saya cuma CArray dan beberapa yang lain. Tapi trend sekarang adalah TMP. Fahami dulu 23 teknik penyelesaian masalah dengan Design Pattern spt, Abstract Factory, Composit, Bridge, Observer, Iterator, Facade, Visitor dll. Gunakan Platform Java untuk tidak terlajak lebih jauh. Pelajari sintaks template dengan function dulu. Jangan terus lompat menggunakan sintaks template<typename T > class Foo{...}; Ia merbahaya kepada orang baru. Ingat, `function` baru `class`. Cuba kenalpasti perbezaan antara function template dgn class template. Apa yang boleh dan apa yang tak boleh.Apabila sudah faham 2 perkara di atas, baru gunakan template base Design Pattern. Anda akan lebih menghargai template dengan cara ini. Bandingkan penggunaan C++ template dalam Design Pattern dengan implementasi Java.Banyakkan membaca kod orang lain tentang template ini. Baca Microsoft punya ATL. Memang banyak magik (code [coklat ubat batuk]) diorang buat dengan template ni. Tapi teknik yang digunakan amatlah menarik. Saya nasihatkan, jangan tiru.Warning!! Anda sekarang berada pada tahap 'no turning back' untuk menjadi Peminat Mati Keras ( Die hard fan ).Paradigma 4- C++ Standard LibrarySTL adalah template base library. Tapi susunannya amat menarik. containers, iterators, algorithms, dan function bersatu dengan baik. Tak kenal maka tak cinta. Cari asal usul kewujudannya supaya dapat lebih menghargai library ni. Saya ada terbaca `White Paper` pertama cadangan STL. Memang best. Kalau saya jumpa link dia semula nanti, saya modify lagi tempat ni.a- Mulakan dengan Container. (vector, list, ....)b- Fahami Pointer Abstraction menggunakan Iterator.c- Gunakan Algorithm dimana jua anda beradad- Fahami teknik operator overloading dan kenapa ia sangat berguna.e- Sambung pelajaran dengan Boost library pulak.Tiada syntax yang dapat saya gariskan disini sbb semua dah abis dalam 3 paradigma sebelumnya.KesimpulannyaBahasa C++ terlalu miskin. Tiada library GUI, tiada library CONTAINER seperti bahasa lain yang dikeluarkan dengan pelbagai jenis library. Java dgn swing, vb dgn form. Jadi usaha pengkayaan masih berterusan. Kalau nak tahu perkembangan terkini, lawatilah BOOST. Ia adalah platform ujian untuk pelbagai library baru yang sekiranya bersesuaian, akan dimasukkan ke dalam Std Library.Diharap ini sedikit sebanyak membantu pada mereka yang baru kepada C++. Pastikan anda belajar mengikut urutan yang diberi.- Ilmu yang paling penting disini adalah ilmu 'belajar untuk belajar' -Wassalam. Edited July 6, 2007 by xeonn Quote Share this post Link to post Share on other sites
ApoNie 0 Report post Posted July 6, 2007 thanks atas tips tersebut..- Ilmu yang paling penting disini adalah ilmu 'belajar untuk belajar'.kata2 yang bagus.. hehehe..p/s: weh, ko terer pasal VB tak? Quote Share this post Link to post Share on other sites
troikasix 0 Report post Posted July 6, 2007 (edited) Tak terer. Tahu sikit sikit jer sebab ada cuba gak. Tapi bila tengok, kod panjang menjela utk selesaikan satu masalah. Balik lagi ke C++. Tengok ni.VB. Tak tahu betul ke tak. tapi seingatnya camni lah'Declare Dim cnn As ADODB.Connection Dim rs As ADODB.Recordset Set cnn = new ADODB.Connection Set rs = new ADODB.Connection cnn.Open "[connection string]" rs.Open "Select ID, Nama From Customer" cnn SomeArray 'Declare array kat sini. Tak ingat camana While rs.EOF = False SomeArray.ID = rs.Field(0) SomeArray.Nama = rs.Field(1) rs.MoveNext Loop rs.Close Set rs = Nothing cnn.Close Set cnn = Nothing Bandingkan benda yang sama dalam C++ otl_connect cnn("Connectionstring"); otl_stream istm (10, "Select ID, Nama from Customer", cnn); map<int, string> arr; int ID; string sNama; while( !istm.eof() ) { istm >> ID >> sNama; arr[ID] = sNama; }Declaration VB sahaja dah sampai 4 line (declare dgn set) compare dgn 2 C++. Camana nak kerja.P/S OTL boleh amik kat http://otl.sourceforge.net Edited July 6, 2007 by xeonn Quote Share this post Link to post Share on other sites
ApoNie 0 Report post Posted July 6, 2007 erk~! aku xfaham lasung apa coding tu.. noob lagik aku nie.. Quote Share this post Link to post Share on other sites
encik pot pet 0 Report post Posted July 6, 2007 terima kasih banyak2 kepada xeonn sebab sudi berkongsi tips di atas. kalau boleh extend keempat2 paradigma tersebut dgn lebih panjang semoga lebih ramai yg berminat dgn c++ kat malaysia ni sebab c++ ni tak femes langsung berbanding php, vb/csharp.net. satu lagi tips dari aku; kalau korang nak belajar konsep OOP dgn senang, aku masih tetap dgn pendirian aku, pegi download ruby. Quote Share this post Link to post Share on other sites
Paralys3r 0 Report post Posted July 7, 2007 saya tak pernah pula dengar gelaran Object Oriented Assembly Language untuk C++, tapi sesungguhnya kita ada object oriented assembly language - java assembly dan .NET IL assembly. saya tak tahu status Parrot sekarang, dia pun ada assembly language juga .saya tak sure lah kenapa saya tak boleh tahan dengan C++. Terlalu sukar untuk otak saya menerimacout << "Hello World" (atau adakah ia cout >> "Hello World"??? saya sentiasa lupa!) tapi sepantas kilat otak saya dapat memahami printf("Hello World"); Quote Share this post Link to post Share on other sites
troikasix 0 Report post Posted July 7, 2007 kalau boleh extend keempat2 paradigma tersebut dgn lebih panjang semoga lebih ramai yg berminat dgn c++ kat malaysia ni sebab c++ ni tak femes langsung berbanding php, vb/csharp.net.Saya akan cuba sebaik mungkin betulkan post yang asal sbb gaya bahasa saya mmg susah org nak faham. Itu mmg kelemahan. Tapi post kat sini adalah Tips semata mata. Saya taknak spoil the fun. Saya lebih suka membakar semangat org.Bagaimanapun trimas utk komen yang membina. Perbincangan adalah cara belajar yang paling berkesan. Lagipun 4 paradigma itu adalah pendapat semata-mata dari penulis buku Effective C++ : Scott Meyers. Dalam buku tu pun tak explain lebih lanjut kerana topik setiap satu terlalu besar. Saya akan cuba buat post yang lain untuk memperkembang idea. Tapi bukan semua, kerana macam OO, sama konsepnya dlm bahasa pengaturcaraan yang lain.satu lagi tips dari aku; kalau korang nak belajar konsep OOP dgn senang, aku masih tetap dgn pendirian aku, pegi download ruby.Setuju. Saya tak tahu Ruby tu, tapi kalau itu mempermudahkan kenapa tidak. Quote Share this post Link to post Share on other sites
troikasix 0 Report post Posted July 7, 2007 (edited) saya tak pernah pula dengar gelaran Object Oriented Assembly Language untuk C++, tapi sesungguhnya kita ada object oriented assembly language - java assembly dan .NET IL assembly. saya tak tahu status Parrot sekarang, dia pun ada assembly language juga .Terma 'Assembly' dah disalahguna pada zaman sekrg kerana nak mengaburi mata programmer. Java Assembly(Java Bytecode) dan .Net Assembly(Intermediate Language) bukan bermaksud 'Assembly' yang sebenar. Assembly language adalah satu bahasa pengaturcaraan yang paling dekat dengan bahasa binari. Malah ia tak perlu dikompil, cuma tukar semua perkataan kepada binari. Tengok ni http://www.xs4all.nl/~smit/asm01001.htmsaya tak sure lah kenapa saya tak boleh tahan dengan C++. Terlalu sukar untuk otak saya menerimacout << "Hello World"(atau adakah ia cout >> "Hello World"??? saya sentiasa lupa!)tapi sepantas kilat otak saya dapat memahamiprintf("Hello World");Salah satu tujuan dalam C++ adalah untuk mempermudah penulisan kod. Mungkin ia terlalu mudah sampai org tak dapat menerima. Tengok kemampuan C++ ni yang tak ada pada bahasa lain.class Duit{ int Ringgit; float Sen; void operator +=(int NewRinggit){ Ringgit += NewRinggit; } void operator +=(float NewSen) { Sen += NewSen; } }; //Bila kita dah overload operator += kat atas, objek kita boleh faham sendiri mana nak dicampur. Ringgit atau Sen menggunakan simbol += yang sama Duit poket; poket += 12; //poket.Ringgit == 12 poket += 0.20; //poket.Sen ==0.20 Dalam penggunaan << dan >> pula int n = 2; double dbl = 12.20; cout << "Saya cuma ada " << n << " dalam poket" << endl << "Mak tambah " << dbl << " dah jadi " << (dbl + n) << endl; //Bandingkan dengan printf("Saya cuma ada %d dalam poket\n Mak tambah %.2f dah jadi %.2f", n, dbl, (dbl + n); dengan << atau >> kita tak payah susah2 nak ingat samada variable tu double ka string ka int ka, cucuh suma ke <<. Biar C++ yang cari amenda jenis variable tu. Jadi lebih selamat dari bug yang tak kelihatan macam ni. (Cuba cari) printf("Saya cuma ada %f dalam poket\n Mak tambah %.2f dah jadi %.2f", n, dbl, (dbl + n);Sintaks C++ lebih asli dan selamat. Tapi itu semua bergantung samada anda orang asli atau tiruan. Mengenali nak guna samada >> atau << adalah proses pengenalan. Bila dah biasa, tak ada masalah."Saya seorang pemalas tulis Satu baris kod tapi jual dengan harga beribu ringgit. Nasib baik ada C++" Edited July 7, 2007 by xeonn Quote Share this post Link to post Share on other sites
ApoNie 0 Report post Posted July 7, 2007 (edited) yap.. aku setuju.. c++ lebih mudah coding dari c. pasal << ngan >> tu senang jer aku nak ingat;kalau nak masuk nilai, mesti tuju pada variable tu: int i; cout<<"Masuk Nilai :"; // kalau nak output, mesti tuju ke cout; cin>>i;kadang2 aku pon tersilap.. biasa ahh tu.. Edited July 7, 2007 by ApoNie Quote Share this post Link to post Share on other sites
Nazirul 0 Report post Posted July 7, 2007 c++ wit OOP... lectr. buat pun x lepas.. abis2 time exam mati hafal code je walaupun mmg xbleh dicompile.. macamana tu.. hehe Quote Share this post Link to post Share on other sites
xtreme_paranoid 0 Report post Posted July 9, 2007 cout ngan cin .. memori aku semester 2 nih..aku amik calculus semester 2cin ngan cout nih memula aku keliru gak..last2 dapat teori sendiricin > hala ke dalam kertas [in]cout < hala ke luar kertas [out]huhuhuhu Quote Share this post Link to post Share on other sites
encik pot pet 0 Report post Posted July 10, 2007 c++ wit OOP... lectr. buat pun x lepas.. abis2 time exam mati hafal code je walaupun mmg xbleh dicompile.. macamana tu.. hehe lecturer awak tu belajar bahasa c++ dan belajar bahasa pengaturcaraan tak susah mana pun, tapi apabila tak prektis sebagai programmer akan nampak la kesan buruknya kepada student.anyway, C paling senang nak belajar sebab bahasa dia paling kecik, standard library dia pun sikit. tapi, kalau korang nak buat benda2 berguna dgn C, faham2 la. Quote Share this post Link to post Share on other sites