Konsep OOP dimulai pertengahan 1960-an dengan sebuah bahasa program SIMULASMALLTALK. Meskipun developer software tidak secara intensif mengembangkan OOP, tetapi metodologi object-oriented tetap digunakan sampai sekarang. kemudian dilanjutkan di era 70-an dengan Pada pertengahan 80-an, bahasa OOP seperti C++ dan Eifle menjadi popular diantara programmer komputer. Popularitas OOP berlanjut pada tahun 90-an, banyak pengembang perangkat lunak menggunakan konsep OOP seperti yang dilakukan pada Java dan kemudian PHP yang menjadi popular sekarang.
Di tahun 2002, versi terakhir dari Visual Studio, Microsoft-pun ikut memperkenalkan bahasa OOP baru yaitu C# (dibaca C-sharp) serta penyempurnaan Visual Basic 6.0 yang tidak mendukung OOP menjadi VB.NET sebagai bahasa pemrograman berorientasi objek.
Namun, pada artikel kali ini, kita akan membahas konsep OOP pada C++ Menggunakan Borland C++ Builder.
Munculnya C++ sebagai bahasa pemrograman yang berorientasi objek sangat memberikan manfaat yang besar kepada kita dalam menyelesaikan masalah-masalah didalam perusahaan/organisasi baik yang berhubungan dengan bisnis ataupun sience.
Dengan konsep OOP nya, C++ akan lebih mudah dipelajari dan dipahami untuk dikembangakan karena sifatnya yang lebih modular yaitu mampu menyederhanakan dan mendefinisikan fungsi-fungsi dan variabel-variabel kedalam bentuk objek.
Berbeda dengan Pemrograman sebelumnya yang bersifat prosedural dan struktural sehingga di dalam implementasinya akan banyak statement atau listing program yang kita tulis secara berulang-ulang seperti penulisan fungsi maupun variabel.
Salah satu contoh perbedaan yang sanagat sederhana antara pemrograman prosedural dengan Pemrograman berorientasi objek adalah pada pendefinisian variabel, konstanta atau fungsi. Didalam pemrograman prosedural seluruh variabel, konstanta, ataupun fungsi yang dibutuhkan didalam program wajib didefinisikan sementa didalam program berorientasi objek semua kebutuhan variabel, konstanta dan fungsi tersebut cukup dibuatkan didalam sebuah objek. Sebuah objek inilah yang dapat menampung data-data baik data dari variabel, konstanta ataupun berupa fungsi. Didalam C++Builder data-data didalam objek tersebut dikenal dengan nama property, perilaku atau fungsi yang dimilikinya dikenal dengan nama method dan peristiwa-peristiwa yang terjadi pada objek tersebut dikenal dengan nama event.
Jika kita analogikan kedalam kehidupan kita sehari-hari, objek yang dimaksud misalnya orang. Setiap orang pasti mempunyai properti seperti nama, berat badan, tinggi badan dan betuk fisik lanya dengan ukuran tertentu. Selain itu, orang juga mempunyai method, misalnya berjalan, marah, makan, dan prilaku lain. Sedangkan contoh event, (kejadian) yang dapat menimpahj orang adalah ketika dipukul, lapar, mengantuk dan sebagainya. Pada saat terjadi suatu event terhadap orang, maka orang akan merespon event tersebut dengan cara melakukan method tertentu. Misalnya ’ketika lapar’ (event), orang akan melakukan sebuah pekerjaan, yaitu ’makan’ (Method). Pada C++Builder, pemograman yang menerapkan konsep ini disebut model pemograman property-method-event (PME).
OOP dan CLASS borland c++
Tugas
Selasa, 21 Desember 2010
KONSEP DASAR PEMROGRAMAN BERORIENTASI OBJEK
Merujuk pada buku Pemrograman Borland C++Builder karangan frieyadie,S.Kom dan kamus online pada situs http://id.wikipedia.org/wiki/, Pemrograman berorientasi objek menekankan pada konsep berikut :
A. Kelas
Yaitu kumpulan atas definisi data dan fungsi-fungsi dalam suatu unit untuk suatu tujuan tertentu. Sebagai contoh ‘class of dog’ adalah suatu unit yang terdiri atas definisi-definisi data dan fungsi-fungsi yang menunjuk pada berbagai macam perilaku/turunan dari anjing. Sebuah class adalah dasar dari modularitas dan struktur dalam pemrograman berorientasi object. Sebuah class secara tipikal sebaiknya dapat dikenali oleh seorang non-programmer sekalipun terkait dengan domain permasalahan yang ada, dan kode yang terdapat dalam sebuah class sebaiknya (relatif) bersifat mandiri dan independen (sebagaimana kode tersebut digunakan jika tidak menggunakan OOP). Dengan modularitas, struktur dari sebuah program akan terkait dengan aspek-aspek dalam masalah yang akan diselesaikan melalui program tersebut. Cara seperti ini akan menyederhanakan pemetaan dari masalah ke sebuah program ataupun sebaliknya.
Kelas merupakan contoh abstrak dari sebuah objek yang telah terbentuk dari proses penyerderhanaan. Adapun contoh nyata atau perwujudan dari sebuah objek dinamakan instance. Misalnya terdapat kelas manusia, contoh instance (wujud nyata) dari kelas tersebut adalah Ali, Udin, Dewi dan yang lainnya. Begitu pula nanti, jika anda mulai membuat program didalam C++Builder, yang dinamakan kelas adalah TForm, TEdit, Tbutton, Tlabel, Tlist, Ttimer dan sebagainya, sedangkan contoh instance-nya adalah Form1, Edit1, Edit2, Button1, Label1, Timer1 dan objek-objek lainya yang merupakan perwujudan dari sebuah kelas tertentu.
B. Objek
Digunakan untuk membungkus data dan fungsi bersama menjadi suatu unit dalam sebuah program komputer; objek merupakan dasar dari modularitas dan struktur dalam sebuah program komputer berorientasi objek.
C. Abstraksi
Yaitu Kemampuan sebuah program untuk melewati aspek informasi yang diproses olehnya, yaitu kemampuan untuk memfokus pada inti. Setiap objek dalam sistem melayani sebagai model dari “pelaku” abstrak yang dapat melakukan kerja, laporan dan perubahan keadaannya, dan berkomunikasi dengan objek lainnya dalam sistem, tanpa mengungkapkan bagaimana kelebihan ini diterapkan. Proses, fungsi atau metode dapat juga dibuat abstrak, dan beberapa teknik digunakan untuk mengembangkan sebuah pengabstrakan.
D. Enkapsulasi
Memastikan pengguna sebuah objek tidak dapat mengganti keadaan dalam dari sebuah objek dengan cara yang tidak layak; hanya metode dalam objek tersebut yang diberi ijin untuk mengakses keadaannya. Setiap objek mengakses interface yang menyebutkan bagaimana objek lainnya dapat berinteraksi dengannya. Objek lainnya tidak akan mengetahui dan tergantung kepada representasi dalam objek tersebut.
E. Polimorfisme melalui pengiriman pesan
Tidak bergantung kepada pemanggilan subrutin, bahasa orientasi objek dapat mengirim pesan; metode tertentu yang berhubungan dengan sebuah pengiriman pesan tergantung kepada objek tertentu di mana pesa tersebut dikirim. Contohnya, bila sebuah burung menerima pesan “gerak cepat”, dia akan menggerakan sayapnya dan terbang. Bila seekor singa menerima pesan yang sama, dia akan menggerakkan kakinya dan berlari. Keduanya menjawab sebuah pesan yang sama, namun yang sesuai dengan kemampuan hewan tersebut. Ini disebut polimorfisme karena sebuah variabel tungal dalam program dapat memegang berbagai jenis objek yang berbeda selagi program berjalan, dan teks program yang sama dapat memanggil beberapa metode yang berbeda di saat yang berbeda dalam pemanggilan yang sama. Hal ini berlawanan dengan bahasa fungsional yang mencapai polimorfisme melalui penggunaan fungsi kelas-pertama.
F. Inheritas
Mengatur polimorfisme dan enkapsulasi dengan mengijinkan objek didefinisikan dan diciptakan dengan jenis khusus dari objek yang sudah ada - objek-objek ini dapat membagi (dan memperluas) perilaku mereka tanpa haru mengimplementasi ulang perilaku tersebut (bahasa berbasis-objek tidak selalu memiliki inheritas.)
A. Kelas
Yaitu kumpulan atas definisi data dan fungsi-fungsi dalam suatu unit untuk suatu tujuan tertentu. Sebagai contoh ‘class of dog’ adalah suatu unit yang terdiri atas definisi-definisi data dan fungsi-fungsi yang menunjuk pada berbagai macam perilaku/turunan dari anjing. Sebuah class adalah dasar dari modularitas dan struktur dalam pemrograman berorientasi object. Sebuah class secara tipikal sebaiknya dapat dikenali oleh seorang non-programmer sekalipun terkait dengan domain permasalahan yang ada, dan kode yang terdapat dalam sebuah class sebaiknya (relatif) bersifat mandiri dan independen (sebagaimana kode tersebut digunakan jika tidak menggunakan OOP). Dengan modularitas, struktur dari sebuah program akan terkait dengan aspek-aspek dalam masalah yang akan diselesaikan melalui program tersebut. Cara seperti ini akan menyederhanakan pemetaan dari masalah ke sebuah program ataupun sebaliknya.
Kelas merupakan contoh abstrak dari sebuah objek yang telah terbentuk dari proses penyerderhanaan. Adapun contoh nyata atau perwujudan dari sebuah objek dinamakan instance. Misalnya terdapat kelas manusia, contoh instance (wujud nyata) dari kelas tersebut adalah Ali, Udin, Dewi dan yang lainnya. Begitu pula nanti, jika anda mulai membuat program didalam C++Builder, yang dinamakan kelas adalah TForm, TEdit, Tbutton, Tlabel, Tlist, Ttimer dan sebagainya, sedangkan contoh instance-nya adalah Form1, Edit1, Edit2, Button1, Label1, Timer1 dan objek-objek lainya yang merupakan perwujudan dari sebuah kelas tertentu.
B. Objek
Digunakan untuk membungkus data dan fungsi bersama menjadi suatu unit dalam sebuah program komputer; objek merupakan dasar dari modularitas dan struktur dalam sebuah program komputer berorientasi objek.
C. Abstraksi
Yaitu Kemampuan sebuah program untuk melewati aspek informasi yang diproses olehnya, yaitu kemampuan untuk memfokus pada inti. Setiap objek dalam sistem melayani sebagai model dari “pelaku” abstrak yang dapat melakukan kerja, laporan dan perubahan keadaannya, dan berkomunikasi dengan objek lainnya dalam sistem, tanpa mengungkapkan bagaimana kelebihan ini diterapkan. Proses, fungsi atau metode dapat juga dibuat abstrak, dan beberapa teknik digunakan untuk mengembangkan sebuah pengabstrakan.
D. Enkapsulasi
Memastikan pengguna sebuah objek tidak dapat mengganti keadaan dalam dari sebuah objek dengan cara yang tidak layak; hanya metode dalam objek tersebut yang diberi ijin untuk mengakses keadaannya. Setiap objek mengakses interface yang menyebutkan bagaimana objek lainnya dapat berinteraksi dengannya. Objek lainnya tidak akan mengetahui dan tergantung kepada representasi dalam objek tersebut.
E. Polimorfisme melalui pengiriman pesan
Tidak bergantung kepada pemanggilan subrutin, bahasa orientasi objek dapat mengirim pesan; metode tertentu yang berhubungan dengan sebuah pengiriman pesan tergantung kepada objek tertentu di mana pesa tersebut dikirim. Contohnya, bila sebuah burung menerima pesan “gerak cepat”, dia akan menggerakan sayapnya dan terbang. Bila seekor singa menerima pesan yang sama, dia akan menggerakkan kakinya dan berlari. Keduanya menjawab sebuah pesan yang sama, namun yang sesuai dengan kemampuan hewan tersebut. Ini disebut polimorfisme karena sebuah variabel tungal dalam program dapat memegang berbagai jenis objek yang berbeda selagi program berjalan, dan teks program yang sama dapat memanggil beberapa metode yang berbeda di saat yang berbeda dalam pemanggilan yang sama. Hal ini berlawanan dengan bahasa fungsional yang mencapai polimorfisme melalui penggunaan fungsi kelas-pertama.
F. Inheritas
Mengatur polimorfisme dan enkapsulasi dengan mengijinkan objek didefinisikan dan diciptakan dengan jenis khusus dari objek yang sudah ada - objek-objek ini dapat membagi (dan memperluas) perilaku mereka tanpa haru mengimplementasi ulang perilaku tersebut (bahasa berbasis-objek tidak selalu memiliki inheritas.)
DEKLARASI DAN DEFINISI OOP DAN CLASS
Deklarasi dan definisi adalah langkah awal dalam setiap penulisan program tidak terkecuali dalam bahasa C++. Deklarasi dan definisi diperlukan untuk semua tipe data termasuk tipe data bentukan user (user-defined type).
Bentuk sederhana deklarasi class adalah sebagai berikut,
class C { }; atau
struct C { };
dalam bahasa C++ struct dan class mempunyai pengertian yang sama. Deklarasi class dengan struct mempunyai anggota dengan akses public kecuali jika dinyatakan lain.
struct C
{
int i;
void f();
}
class C
{
public:
int i;
void f();
}
Kedua deklarasi tersebut mempunyai arti yang sama. Hal ini adalah pilihan desain yang diambil oleh desainer C++ (Bjarne Stroustrup) untuk menggunakan C sebagai basis C++ ketimbang membuat bahasa yang sama sekali baru. Tentunya ada konsekuensi atas pilihan desain ini, salah satu contoh adalah kompatibilitas terhadap bahasa C.
Dalam bahasa C deklarasi:
struct C { … };
menyatakan C sebagai nama tag. Nama tag berbeda dengan nama tipe, sehingga C (nama tag) tidak dapat dipergunakan dalam deklarasi yang membutuhkan C sebagai suatu tipe obyek. Kedua contoh deklarasi berikut ini tidak valid dalam bahasa C, C c; /* error, C adalah nama tag */ C *pc; /* error, C adalah nama tag */
Dalam bahasa C, kedua deklarasi tersebut harus ditulis sebagai berikut:
struct C c;
struct C *pc;
atau menggunakan typedef sebagai berikut:
struct C { … };
typedef struct C C;
C c;
C *pc;
C++ memperlakukan nama class, C sebagai nama tag sekaligus nama tipe dan dapat dipergunakan dalam deklarasi. Kata class tetap dapat dipergunakan dalam deklarasi, seperti contoh berikut ini:
class C c;
Dengan demikian C++ tidak membedakan nama tag dengan nama class, paling tidak dari sudut pandang pemrogram (programmer), dan tetap menerima deklarasi structure seperti dalam bahasa C. Kompatibilitas C++ terhadap tidak sebatas perbedaan nama tag dan nama tipe, karena standar C++ masih perlu mendefinisikan tipe POD (Plain Old Data). POD type mempunyai banyak persamaan dengan structure dalam C. Standar C++ mendefinisikan POD type sebagai obyek suatu class yang tidak mempunyai userdefined constructor, anggota protected maupun private, tidak punya base class, dan tidak memiliki fungsi virtual.
Dalam desain suatu aplikasi terdiri atas banyak class, dan masing-masing class tidak berdiri sendiri melainkan saling bergantung atau berhubungan satu sama lain. Salah satu contoh hubungan tersebut adalah hubungan antara satu class dengan satu atau lebih base class atau parent class. Jika class C mempunyai base class B, dikenal dengan inheritance, maka deklarasi class menjadi:
class C : public B {}; atau
class C : protected B {}; atau
class C : private B {};
akses terhadap anggota base class B dapat bersifat public, protected, maupun private, atau disebut dengan istilah public, protected atau private inheritance. Class C disebut dengan istilah derived class. Jika tidak dinyatakan bentuk akses secara eksplisit, seperti dalam deklarasi berikut:
class C : B
maka interpretasinya adalah private inheritance (default), tetapi jika menggunakan struct maka tetap merupakan public inheritance. Jika desainer class C tersebut menginginkan hubungan multiple inheritance (MI) terhadap class B dan A, maka deklarasi class C menjadi:
class C : public B, public A { };
Sebuah class, seperti halnya class C mempunyai anggota berupa data maupun fungsi (member function). Isi class tersebut berada diantara tanda kurung { } dan dipilah-pilah sesuai dengan batasan akses yang ditentukan perancang (desainer) class tersebut.
class C : public B
{
public:
(explicit) C()(:member-initializer);
C(const C& );
C& operator=(const C&);
(virtual)~C();
statement lain
(protected: statement)
(private: statement)
};
Secara ringkas batasan akses (access specifiers) mempunyai arti seperti ditunjukkan pada table berikut ini:
Batasan Akses Arti
public Semua class atau bebas
protected Class itu sendiri, friend, atau derived class
private Class itu sendiri, friend
Sebuah class dapat memberikan ijin untuk class lain mengakses bagian protected maupun private class tersebut melalui hubungan friendship (dinyatakan dengan keyword friend).
Sebuah class mempunyai beberapa fungsi khusus, yaitu constructor, copy constructor, destructor dan copy assignment operator.
1. Constructor
C ( ) adalah anggota class yang bertugas melakukan inisialisasi obyek (instance) dari suatu class C. Constructor mempunyai nama yang sama dengan nama class, dan tidak mempunyai return value. Sebuah class dapat mempunyai lebih dari satu constructor. Constructor yang tidak mempunyai argumen, disebut default constructor, sebaliknya constructor yang mempunyai lebih dari satu argumen adalah non-default consructor. Constructor dengan satu default argument tetap merupakan sebuah default constructor.
class C
{
public:
C(int count=10) : _count(count) {}
...
private:
int _count;
};
Compiler C++ dapat menambahkan default constructor bilamana diperlukan, jika dalam definisi class
• tidak tertulis secara eksplisit sebuah default constructor dan tidak ada deklarasi constructor lain (copy constructor).
• tidak ada anggota class berupa data const maupun reference.
Sebagai contoh definisi class C sebagai berikut:
class C {…};
C c1; // memerlukan default constructor
C c2(c1); // memerlukan copy constructor
Compiler C++ memutuskan untuk menambahkan default dan copy construtor setelah menemui kedua baris program tersebut, sehingga definisi class secara efektif menjadi sebagai berikut:
class C
{
public:
C(); // default costructor
C(const C& rhs); // copy constructor
~C(); // destructor
C& operator=(const C& rhs); // assignment operator
C* operator&(); // address-of operator
const C* operator&(const C& rhs) const;
};
compiler menambahkan public constructor, dan destructor. Selain itu, compiler juga menambahkan assignment operator dan address-of operator. Constructor (default dan non-default) tidak harus mempunyai akses public, sebagai contoh adalah pola desain (design pattern) Singleton.
class Singleton
{
public:
static Singleton* instance();
protected:
Singleton();
private:
static Singleton* _instance;
};
obyek (instance) singleton tidak dibentuk melalui constructor melainkan melalui fungsi instance. Tidak ada obyek singleton lain yang dapat dibentuk jika sudah ada satu obyek singleton. Umumnya default constructor bentukan compiler (generated default constructor) menggunakan default constructor anggota bertipe class, sedangkan anggota biasa (builtin type) tidak diinisialisasi. Demikian halnya dengan obyek yang dibentuk dari obyek lain (copy), maka copy constructor bentukan compiler (generated copy constructor)
menggunakan copy constructor dari anggota bertipe class pada saat inisialisasi. Sebagai contoh deklarasi class C berikut ini:
class C
{
public:
C(const char* aName);
C(const string& aName);
…
private:
std::string name;
};
copy constructor bentukan compiler menggunakan copy constructor class string untuk inisialisasi name dari aName. Jika class C tidak mempunyai constructor, maka compiler menambahkan juga default constructor untuk inisialisasi name menggunakan default constructor class string. Inisialisasi obyek menggunakan constructor (non-default) dapat dilakukan dengan member initializer maupun dengan assignment sebagai berikut:
class C
{
int i,j;
public:
C() : i(0),j(1) {}
…
};
class C
{
int i,j
public:
C()
{
i=0;j=0;
}
...
};
Kedua cara tersebut memberikan hasil yang sama, tidak ada perbedaan signifikan antara kedua cara tersebut untuk data bukan tipe class. Cara member initializer mutlak diperlukan untuk data const maupun reference, seperti kedua contoh berikut ini:
class C //:1
{
public:
C(int hi,int lo) : _hi(hi),_lo(lo) {}
...
private:
const int _hi,_lo; // const member
};
class C //:2
{
public:
C(const string& aName) : name(aName) {}
...
private:
std::string& name; // reference member
};
Cara member initialization sebaiknya dilakukan untuk anggota bertipe class (userdefined
type) seperti ditunjukkan pada contoh berikut ini:
class C
{
public:
C(const string& aName) : name(aName) { }
private:
std::string name; // bukan reference member
};
Pertimbangan menggunakan cara member initialization terletak pada efisiensi eksekusi
program. Hal ini berkaitan dengan cara kerja C++ yang membentuk obyek dalam dua tahap:
• pertama, inisialisasi data
• kedua, eksekusi constructor (assignment)
Dengan demikian jika menggunakan cara assignment sebenarnya eksekusi program
dilakukan dua kali, pertama inisialisasi kemudian assignment, sedangkan menggunakan
member initialization hanya memanggil sekali constructor class string. Semakin
kompleks class tersebut (lebih kompleks dari class string) semakin mahal (tidak
efisien) proses pembentukan obyek melalui cara assignment.
Constructor dengan satu argumen berfungsi juga sebagai implicit conversion operator.
Sebagai contoh deklarasi class A dan B berikut ini,
class A
{
public:
A();
};
class B
{
public:
B(const A&);
};
pada cuplikan baris program di bawah ini terjadi konversi tipe obyek A ke B secara
implisit melalui copy constructor class B.
A a
B b=a; // implicit conversion
explicit
C++ menyediakan satu sarana, menggunakan keyword explicit, untuk mengubah
perilaku constructor dengan satu argumen agar tidak berfungsi sebagai conversion
operator. Jika class B menyatakan explicit pada copy constructor sebagai berikut,
class B
{
public:
explicit B(const A& a); // explicit ctor
};
maka konversi A ke B secara implisit tidak dapat dilakukan. Konversi A ke B dapat
dilakukan secara eksplisit menggunakan typecast,
A
a;
B b=static_cast(a); atau
B b=(B)a;
Konversi secara implisit dapat terjadi melalui argumen fungsi f dengan tipe B
void f(const B& );
tetapi f diakses dengan variabel tipe A, f(a). Apabila class B menghalangi konversi
secara implisit maka argumen fungsi f menjadi,
f((B)a); atau
f(static_cast(a));
Konversi tipe obyek secara implisit sebaiknya dihindari karena efeknya mungkin lebih
besar terhadap aplikasi program secara keseluruhan dan tidak dapat dicegah pada saat
kompilasi, karena construcor dengan argumen tunggal adalah suatu pernyataan program
yang sah dan memang dibutuhkan.
Copy Constructor dan Copy Assignment
Sejauh ini sudah dibahas mengenai copy constructor sebagai anggota class yang
berperan penting pada saat pembentukan obyek. Apabila sebuah class tidak menyatakan
secara tegas copy constructor class tersebut, maka compiler menambahkan copy
constructor dengan bentuk deklarasi,
C(const C& c);
Bentuk lain copy constructor adalah sebagai berikut,
C(C& c); atau
C(C volatile& c); atau
C(C const volatile& c);
Copy constructor class C adalah constructor yang mempunyai satu argumen. Sebuah
copy constructor boleh mempunyai lebih dari satu argumen, asalkan argumen tersebut
mempunyai nilai default (default argument).
C(C c); // bukan copy constructor
C(C const& c,A a=b); //copy constructor
Constructor dengan argumen bertipe C saja (tanpa reference) bukan merupakan copy
constructor.
Copy constructor juga dibutuhkan pada saat memanggil suatu fungsi yang menerima
argumen berupa obyek suatu class,
void f(C x);
memerlukan copy onstructor class C untuk mengcopy obyek c bertipe C ke obyek x
dengan tipe yang sama, yaitu pada saat memanggil fungsi f(c)(pass-by-value).
Hal serupa terjadi pada saat fungsi f sebagai berikut,
C f()
{
C c;
…
return c;
}
mengirim obyek c ke fungsi lain yang memanggil fungsi f() tersebut.
Copy assignment operator class C adalah operator=, sebuah fungsi yang mempunyai
satu argumen bertipe C. Umumnya deklarasi copy assignment mempunyai bentuk,
C &operator=(const C &c);
Bentuk lain yang mungkin adalah,
C &operator=(C &c); atau
C &operator=(C volatile &c); atau
C &operator=(C const volatile &c);
Copy assignment boleh mempunyai argumen dengan tipe C (bukan reference), tetapi
tidak boleh mempunyai argumen lebih dari satu walaupun argumen tersebut mempunyai
nilai default (default argument). Seperti halnya copy constructor, compiler akan
menambahkan copy assignment jika suatu class tidak mempunyai fungsi tersebut. Copy
assignment dibutuhkan untuk membentuk obyek melalui assignment, seperti contoh
berikut
class C
{
public:
C(); //ctor
~C(); //dtor
…
};
C c1;
C c2=c1; //copy constructor
C c3;
c3=c1; //copy assignment
Class C tidak mempunyai copy constructor maupun copy assignment operator, maka
pembentukan obyek c2, dan c3 menggunakan copy constructor dan copy assignment
yang ditambahkan oleh compiler ke class C tersebut.
Suatu class yang mempunyai data dengan alokasi dinamik (pointer) sebaiknya tidak
mengandalkan copy constructor maupun copy assignment operator yang ditambahkan
compiler. Copy assignment hasil tambahan compiler mengcopy (memberwise copy)
pointer dari obyek satu (yang dicopy) ke obyek lainnya (hasil copy), sehingga kedua
obyek mengacu ke lokasi memori yang sama. Masalah timbul jika kedua obyek
mempunyai masa pakai (lifetime1) yang berbeda. Jika salah satu obyek sudah habis
masa pakainya maka destructor obyek tersebut mengembalikan memori (dynamic
memory) yang digunakan obyek tersebut, padahal copy obyek tersebut masih mengacu
ke lokasi memori yang sama.
Copy assignment b=a
Hasil copy assignment b=a
A p
q B
p A
q B
Pada contoh hasil copy assignment b=a (shalow copy), menunjukkan kedua obyek a dan
b mengacu ke lokasi memori p. Apabila obyek a melepas memori p (melalui destructor),
maka obyek b mengacu ke lokasi memori yang sudah tidak valid lagi. Lokasi memori p
dapat digunakan obyek lain jika obyek a melepasnya. Demikian pula halnya dengan
lokasi memori q, apabila obyek b habis masa pakainya (keluar scope, dihapus dll) maka
destructor class B tidak melepas memori q. Akibatnya terjadi pemborosan memori
(memory leak).
Salah satu jalan keluar adalah dengan menyatakan secara tegas copy constructor dan
copy assignment yang dibutuhkan suatu class sehingga compiler tidak membuat copy
constructor dan copy assignment ke class tersebut. Alternatif lain adalah menempatkan
deklarasi copy constructor dan copy assignment operator private sebagai berikut,
class C
{ …
private:
C(const C&);
C &operator=(const C&);
};
definisi copy constructor dan copy assignment operator class C pada contoh di atas
tidak perlu ada, karena tujuannya adalah menghalangi proses penggandaan (copy)
menggunakan kedua fungsi tersebut. Pada tahap kompilasi penggunaan assignment,
b=a masih dapat diterima karena deklarasi asignment operator tersebut tersedia. Pada
saat link akan gagal karena linker tidak dapat menemukan definisi copy assignment
operator. Teknik ini masih mempunyai kelemahan, karena class lain masih mungkin
1 Lifetime atau storage duration adalah waktu sejak pembentukan (construction) sampai penghancuran
(destruction) obyek.
Bentuk sederhana deklarasi class adalah sebagai berikut,
class C { }; atau
struct C { };
dalam bahasa C++ struct dan class mempunyai pengertian yang sama. Deklarasi class dengan struct mempunyai anggota dengan akses public kecuali jika dinyatakan lain.
struct C
{
int i;
void f();
}
class C
{
public:
int i;
void f();
}
Kedua deklarasi tersebut mempunyai arti yang sama. Hal ini adalah pilihan desain yang diambil oleh desainer C++ (Bjarne Stroustrup) untuk menggunakan C sebagai basis C++ ketimbang membuat bahasa yang sama sekali baru. Tentunya ada konsekuensi atas pilihan desain ini, salah satu contoh adalah kompatibilitas terhadap bahasa C.
Dalam bahasa C deklarasi:
struct C { … };
menyatakan C sebagai nama tag. Nama tag berbeda dengan nama tipe, sehingga C (nama tag) tidak dapat dipergunakan dalam deklarasi yang membutuhkan C sebagai suatu tipe obyek. Kedua contoh deklarasi berikut ini tidak valid dalam bahasa C, C c; /* error, C adalah nama tag */ C *pc; /* error, C adalah nama tag */
Dalam bahasa C, kedua deklarasi tersebut harus ditulis sebagai berikut:
struct C c;
struct C *pc;
atau menggunakan typedef sebagai berikut:
struct C { … };
typedef struct C C;
C c;
C *pc;
C++ memperlakukan nama class, C sebagai nama tag sekaligus nama tipe dan dapat dipergunakan dalam deklarasi. Kata class tetap dapat dipergunakan dalam deklarasi, seperti contoh berikut ini:
class C c;
Dengan demikian C++ tidak membedakan nama tag dengan nama class, paling tidak dari sudut pandang pemrogram (programmer), dan tetap menerima deklarasi structure seperti dalam bahasa C. Kompatibilitas C++ terhadap tidak sebatas perbedaan nama tag dan nama tipe, karena standar C++ masih perlu mendefinisikan tipe POD (Plain Old Data). POD type mempunyai banyak persamaan dengan structure dalam C. Standar C++ mendefinisikan POD type sebagai obyek suatu class yang tidak mempunyai userdefined constructor, anggota protected maupun private, tidak punya base class, dan tidak memiliki fungsi virtual.
Dalam desain suatu aplikasi terdiri atas banyak class, dan masing-masing class tidak berdiri sendiri melainkan saling bergantung atau berhubungan satu sama lain. Salah satu contoh hubungan tersebut adalah hubungan antara satu class dengan satu atau lebih base class atau parent class. Jika class C mempunyai base class B, dikenal dengan inheritance, maka deklarasi class menjadi:
class C : public B {}; atau
class C : protected B {}; atau
class C : private B {};
akses terhadap anggota base class B dapat bersifat public, protected, maupun private, atau disebut dengan istilah public, protected atau private inheritance. Class C disebut dengan istilah derived class. Jika tidak dinyatakan bentuk akses secara eksplisit, seperti dalam deklarasi berikut:
class C : B
maka interpretasinya adalah private inheritance (default), tetapi jika menggunakan struct maka tetap merupakan public inheritance. Jika desainer class C tersebut menginginkan hubungan multiple inheritance (MI) terhadap class B dan A, maka deklarasi class C menjadi:
class C : public B, public A { };
Sebuah class, seperti halnya class C mempunyai anggota berupa data maupun fungsi (member function). Isi class tersebut berada diantara tanda kurung { } dan dipilah-pilah sesuai dengan batasan akses yang ditentukan perancang (desainer) class tersebut.
class C : public B
{
public:
(explicit) C()(:member-initializer);
C(const C& );
C& operator=(const C&);
(virtual)~C();
statement lain
(protected: statement)
(private: statement)
};
Secara ringkas batasan akses (access specifiers) mempunyai arti seperti ditunjukkan pada table berikut ini:
Batasan Akses Arti
public Semua class atau bebas
protected Class itu sendiri, friend, atau derived class
private Class itu sendiri, friend
Sebuah class dapat memberikan ijin untuk class lain mengakses bagian protected maupun private class tersebut melalui hubungan friendship (dinyatakan dengan keyword friend).
Sebuah class mempunyai beberapa fungsi khusus, yaitu constructor, copy constructor, destructor dan copy assignment operator.
1. Constructor
C ( ) adalah anggota class yang bertugas melakukan inisialisasi obyek (instance) dari suatu class C. Constructor mempunyai nama yang sama dengan nama class, dan tidak mempunyai return value. Sebuah class dapat mempunyai lebih dari satu constructor. Constructor yang tidak mempunyai argumen, disebut default constructor, sebaliknya constructor yang mempunyai lebih dari satu argumen adalah non-default consructor. Constructor dengan satu default argument tetap merupakan sebuah default constructor.
class C
{
public:
C(int count=10) : _count(count) {}
...
private:
int _count;
};
Compiler C++ dapat menambahkan default constructor bilamana diperlukan, jika dalam definisi class
• tidak tertulis secara eksplisit sebuah default constructor dan tidak ada deklarasi constructor lain (copy constructor).
• tidak ada anggota class berupa data const maupun reference.
Sebagai contoh definisi class C sebagai berikut:
class C {…};
C c1; // memerlukan default constructor
C c2(c1); // memerlukan copy constructor
Compiler C++ memutuskan untuk menambahkan default dan copy construtor setelah menemui kedua baris program tersebut, sehingga definisi class secara efektif menjadi sebagai berikut:
class C
{
public:
C(); // default costructor
C(const C& rhs); // copy constructor
~C(); // destructor
C& operator=(const C& rhs); // assignment operator
C* operator&(); // address-of operator
const C* operator&(const C& rhs) const;
};
compiler menambahkan public constructor, dan destructor. Selain itu, compiler juga menambahkan assignment operator dan address-of operator. Constructor (default dan non-default) tidak harus mempunyai akses public, sebagai contoh adalah pola desain (design pattern) Singleton.
class Singleton
{
public:
static Singleton* instance();
protected:
Singleton();
private:
static Singleton* _instance;
};
obyek (instance) singleton tidak dibentuk melalui constructor melainkan melalui fungsi instance. Tidak ada obyek singleton lain yang dapat dibentuk jika sudah ada satu obyek singleton. Umumnya default constructor bentukan compiler (generated default constructor) menggunakan default constructor anggota bertipe class, sedangkan anggota biasa (builtin type) tidak diinisialisasi. Demikian halnya dengan obyek yang dibentuk dari obyek lain (copy), maka copy constructor bentukan compiler (generated copy constructor)
menggunakan copy constructor dari anggota bertipe class pada saat inisialisasi. Sebagai contoh deklarasi class C berikut ini:
class C
{
public:
C(const char* aName);
C(const string& aName);
…
private:
std::string name;
};
copy constructor bentukan compiler menggunakan copy constructor class string untuk inisialisasi name dari aName. Jika class C tidak mempunyai constructor, maka compiler menambahkan juga default constructor untuk inisialisasi name menggunakan default constructor class string. Inisialisasi obyek menggunakan constructor (non-default) dapat dilakukan dengan member initializer maupun dengan assignment sebagai berikut:
class C
{
int i,j;
public:
C() : i(0),j(1) {}
…
};
class C
{
int i,j
public:
C()
{
i=0;j=0;
}
...
};
Kedua cara tersebut memberikan hasil yang sama, tidak ada perbedaan signifikan antara kedua cara tersebut untuk data bukan tipe class. Cara member initializer mutlak diperlukan untuk data const maupun reference, seperti kedua contoh berikut ini:
class C //:1
{
public:
C(int hi,int lo) : _hi(hi),_lo(lo) {}
...
private:
const int _hi,_lo; // const member
};
class C //:2
{
public:
C(const string& aName) : name(aName) {}
...
private:
std::string& name; // reference member
};
Cara member initialization sebaiknya dilakukan untuk anggota bertipe class (userdefined
type) seperti ditunjukkan pada contoh berikut ini:
class C
{
public:
C(const string& aName) : name(aName) { }
private:
std::string name; // bukan reference member
};
Pertimbangan menggunakan cara member initialization terletak pada efisiensi eksekusi
program. Hal ini berkaitan dengan cara kerja C++ yang membentuk obyek dalam dua tahap:
• pertama, inisialisasi data
• kedua, eksekusi constructor (assignment)
Dengan demikian jika menggunakan cara assignment sebenarnya eksekusi program
dilakukan dua kali, pertama inisialisasi kemudian assignment, sedangkan menggunakan
member initialization hanya memanggil sekali constructor class string. Semakin
kompleks class tersebut (lebih kompleks dari class string) semakin mahal (tidak
efisien) proses pembentukan obyek melalui cara assignment.
Constructor dengan satu argumen berfungsi juga sebagai implicit conversion operator.
Sebagai contoh deklarasi class A dan B berikut ini,
class A
{
public:
A();
};
class B
{
public:
B(const A&);
};
pada cuplikan baris program di bawah ini terjadi konversi tipe obyek A ke B secara
implisit melalui copy constructor class B.
A a
B b=a; // implicit conversion
explicit
C++ menyediakan satu sarana, menggunakan keyword explicit, untuk mengubah
perilaku constructor dengan satu argumen agar tidak berfungsi sebagai conversion
operator. Jika class B menyatakan explicit pada copy constructor sebagai berikut,
class B
{
public:
explicit B(const A& a); // explicit ctor
};
maka konversi A ke B secara implisit tidak dapat dilakukan. Konversi A ke B dapat
dilakukan secara eksplisit menggunakan typecast,
A
a;
B b=static_cast(a); atau
B b=(B)a;
Konversi secara implisit dapat terjadi melalui argumen fungsi f dengan tipe B
void f(const B& );
tetapi f diakses dengan variabel tipe A, f(a). Apabila class B menghalangi konversi
secara implisit maka argumen fungsi f menjadi,
f((B)a); atau
f(static_cast(a));
Konversi tipe obyek secara implisit sebaiknya dihindari karena efeknya mungkin lebih
besar terhadap aplikasi program secara keseluruhan dan tidak dapat dicegah pada saat
kompilasi, karena construcor dengan argumen tunggal adalah suatu pernyataan program
yang sah dan memang dibutuhkan.
Copy Constructor dan Copy Assignment
Sejauh ini sudah dibahas mengenai copy constructor sebagai anggota class yang
berperan penting pada saat pembentukan obyek. Apabila sebuah class tidak menyatakan
secara tegas copy constructor class tersebut, maka compiler menambahkan copy
constructor dengan bentuk deklarasi,
C(const C& c);
Bentuk lain copy constructor adalah sebagai berikut,
C(C& c); atau
C(C volatile& c); atau
C(C const volatile& c);
Copy constructor class C adalah constructor yang mempunyai satu argumen. Sebuah
copy constructor boleh mempunyai lebih dari satu argumen, asalkan argumen tersebut
mempunyai nilai default (default argument).
C(C c); // bukan copy constructor
C(C const& c,A a=b); //copy constructor
Constructor dengan argumen bertipe C saja (tanpa reference) bukan merupakan copy
constructor.
Copy constructor juga dibutuhkan pada saat memanggil suatu fungsi yang menerima
argumen berupa obyek suatu class,
void f(C x);
memerlukan copy onstructor class C untuk mengcopy obyek c bertipe C ke obyek x
dengan tipe yang sama, yaitu pada saat memanggil fungsi f(c)(pass-by-value).
Hal serupa terjadi pada saat fungsi f sebagai berikut,
C f()
{
C c;
…
return c;
}
mengirim obyek c ke fungsi lain yang memanggil fungsi f() tersebut.
Copy assignment operator class C adalah operator=, sebuah fungsi yang mempunyai
satu argumen bertipe C. Umumnya deklarasi copy assignment mempunyai bentuk,
C &operator=(const C &c);
Bentuk lain yang mungkin adalah,
C &operator=(C &c); atau
C &operator=(C volatile &c); atau
C &operator=(C const volatile &c);
Copy assignment boleh mempunyai argumen dengan tipe C (bukan reference), tetapi
tidak boleh mempunyai argumen lebih dari satu walaupun argumen tersebut mempunyai
nilai default (default argument). Seperti halnya copy constructor, compiler akan
menambahkan copy assignment jika suatu class tidak mempunyai fungsi tersebut. Copy
assignment dibutuhkan untuk membentuk obyek melalui assignment, seperti contoh
berikut
class C
{
public:
C(); //ctor
~C(); //dtor
…
};
C c1;
C c2=c1; //copy constructor
C c3;
c3=c1; //copy assignment
Class C tidak mempunyai copy constructor maupun copy assignment operator, maka
pembentukan obyek c2, dan c3 menggunakan copy constructor dan copy assignment
yang ditambahkan oleh compiler ke class C tersebut.
Suatu class yang mempunyai data dengan alokasi dinamik (pointer) sebaiknya tidak
mengandalkan copy constructor maupun copy assignment operator yang ditambahkan
compiler. Copy assignment hasil tambahan compiler mengcopy (memberwise copy)
pointer dari obyek satu (yang dicopy) ke obyek lainnya (hasil copy), sehingga kedua
obyek mengacu ke lokasi memori yang sama. Masalah timbul jika kedua obyek
mempunyai masa pakai (lifetime1) yang berbeda. Jika salah satu obyek sudah habis
masa pakainya maka destructor obyek tersebut mengembalikan memori (dynamic
memory) yang digunakan obyek tersebut, padahal copy obyek tersebut masih mengacu
ke lokasi memori yang sama.
Copy assignment b=a
Hasil copy assignment b=a
A p
q B
p A
q B
Pada contoh hasil copy assignment b=a (shalow copy), menunjukkan kedua obyek a dan
b mengacu ke lokasi memori p. Apabila obyek a melepas memori p (melalui destructor),
maka obyek b mengacu ke lokasi memori yang sudah tidak valid lagi. Lokasi memori p
dapat digunakan obyek lain jika obyek a melepasnya. Demikian pula halnya dengan
lokasi memori q, apabila obyek b habis masa pakainya (keluar scope, dihapus dll) maka
destructor class B tidak melepas memori q. Akibatnya terjadi pemborosan memori
(memory leak).
Salah satu jalan keluar adalah dengan menyatakan secara tegas copy constructor dan
copy assignment yang dibutuhkan suatu class sehingga compiler tidak membuat copy
constructor dan copy assignment ke class tersebut. Alternatif lain adalah menempatkan
deklarasi copy constructor dan copy assignment operator private sebagai berikut,
class C
{ …
private:
C(const C&);
C &operator=(const C&);
};
definisi copy constructor dan copy assignment operator class C pada contoh di atas
tidak perlu ada, karena tujuannya adalah menghalangi proses penggandaan (copy)
menggunakan kedua fungsi tersebut. Pada tahap kompilasi penggunaan assignment,
b=a masih dapat diterima karena deklarasi asignment operator tersebut tersedia. Pada
saat link akan gagal karena linker tidak dapat menemukan definisi copy assignment
operator. Teknik ini masih mempunyai kelemahan, karena class lain masih mungkin
1 Lifetime atau storage duration adalah waktu sejak pembentukan (construction) sampai penghancuran
(destruction) obyek.
KONSEP DASAR PBO/OOP
Pemrograman berorientasi objek sering sekali disebut sebagai PBO/OOP (Object Oriented Programming). Bahasa pemrograman yang lazim digunakan dalam PBO adalah C++ ( Keluaran Borland disebut Borland C++, sedangkan dari Microsoft disebut Ms C++. Namun yang terakhir kurang poluler ). Demikian pula, jika ada bahasa pemrograman yang menggunakan C++ sebagai landasan utama bagi pengembangannya, maka bahasa tersebut bisa dipakai untuk PBO, seperti Java (bahasa ini sangat popular pada jaringan komputer, dalam hal ini adalah: Internet).
ALASAN DIGUNAKANNYA PBO
PBO diciptakan karena masih dirasakan adanya keterbatasan pada bahasa pemrograman tradisional yang dikenal dengan istilah procedural language seperti C, Pascal dan yang sejenisnya. Padahal, pemrograman prosedural sendiri pada awalnya merupakan perbaikan atas bahasa pemrograman sekuensial (sequential programming language), seperti BASIC ataupun Fortran. Konsep procedural programming language yaitu bahwa semua masalah dibagi ke dalam fungsi atau prosedur. Selain itu dalam procedural programming, fungsi dan data terpisah dan tidak menjadi satu kesatuan. Contoh kelemahan dari procedural programming adalah bila sebuah perusahaan membuat program General Ledger (Buku kas besar) menggunakan variabel yang bisa diakses oleh fungsi-fungsi lainnya, maka harus dideklarasikan variabel tersebut sebagai variabel global yang letaknya di luar semua fungsi sehingga bisa diakses oleh semua fungsi. Jika suatu saat perusahaan tadi memperkerjakan programmer baru yang belum mengetahui seluk-beluk program general ledger tadi, maka sangat dimungkinkan terjadinya kerusakan data. Anda juga akan menemukan kesulitan bila Anda ingin membuat tipe data baru dengan bahasa pemrograman tradisional.
Konsep PBO adalah bahwa semua pemecahan masalah dibagi ke dalam kelas (class). Dalam PBO data dan fungsi-fungsi yang akan mengoperasikan data digabungkan menjadi satu kesatuan yang bias disebut sebagai kelas. Fungsi kelas terletak pada fungsi anggota (member function) dalam Java. Jika Anda ingin membaca data dalam objek maka Anda harus memanggil fungsi anggota (member function) dalam objek. Hanya dengan cara ini Anda bisa mengakses data. Jadi Anda tidak bias mengakses data secara langsung seperti dalam konsep pemrograman tradisional. Pengaksesan data seperti pada PBO ini dikenal sebagai pengkapsulan data. Pengkapsulan data (data encapsulation) dan penyembunyian data merupakan kunci pengertian pemrograman berorientasi objek.
Jika Anda ingin mengubah data dalam objek tentunya Anda harus tahu fungsi-fungsi apa saja yang berinteraksi dengan objek itu, jadi tidak ada fungsi-fungsi lain yang bisa mengakses data sehingga penulisan dan penelusuran kesalahan program (debugging) akan dapat dilakukan dengan mudah. Untuk mempermudah pengertian mengenai objek, dimisalkan objek sebagai departemen-departemen dalam perusahaan, seperti pemasaran, keuangan, produksi, personalia, pengadaan maupun warehouse. Setiap departemen memiliki fungsi, tugas dan tanggung jawab yang berbeda. Jika menginginkan data laporan keuangan maka yang harus diminta adalah departemen keuangan, bukan yang lainnya.
PEMODULAN (ENCAPSULATION)
Pemodulan adalah metode untuk menggabungkan data dengan fungsi. Dalam konsep ini data dan fungsi digabung menjadi satu kesatuan yaitu kelas. Konsep ini erat kaitannya dengan konsep penyembunyian informasi (information hiding). Untuk menjelaskan konsep ini diberikan contoh sebagai berikut.
Contoh 1:
Mobil adalah sebuah kelas. Seorang pengendara mobil tidak harus tahu bagaimana proses kerja mesin mobilnya, pembakaran bahan bakar, proses pemindahan transmisi gigi, dan seterusnya. Yang dia tahu adalah bahwa setir untuk mengendalikan jalannya mobil, pedal gas untuk menambah kecepatan, pedal rem untuk mengurangi kecepatan, dan seterusnya. Singkatnya dia hanya tahu bahwa mobilnya berjalan dengan baik.
Contoh 2:
Kelas rice cooker (penanak nasi). Seorang ibu rumah tangga tidak tahu mengapat rice cooker bisa bekerja seperti itu. Barangkali seorang ibu rumah tangga tidak menyadari bahwa rice cooker modern memiliki sebuah mikroposesor setara Z80. Dari dua contoh di atas jelaslah bagaimana proses dalam metode suatu kelas selalu disembunyikan sedemikian rupa sehingga seseorang hanya tahu kelas tersebut dapat berfungsi, bukannya apa yang menyebabkan kelas itu bisa berbuat demikian. Hal di atas cukup penting dalam PBO membangun aplikasi kompleks yang melibatkan beberapa pemrograman. Misalnya sebuah kelompok pemrograman akan membuat aplikasi akuntansi (aplikasi ini biasanya membutuhkan ilmu yang sangat kompleks). Pemrogram I menangani masalah struktur data, Pemrogram II menangani masalah akuntansi dan Pemrogram III menangani masalah tampilan layar, dan sebagainya. Sebelum dikenal PBO, setiap pemrogram harus membuat suatu fungsi yang memiliki argumen masukan dan keluaran. Jadi bila Pemrogram I ingin mengolah program dari Pemrogram II, dia harus memberikan masukan dan menerima keluarannya. Cara ini sudah banyak digunakan dan mempunyai kelemahan yang antara lain tidak adanya kesatuan antara data dan fungsinya.
PENURUNAN (INHERITANCE)
Dari konsep penurunan ini suatu kelas bisa diturunkan menjadi kelas baru yang masih mewarisi sifat-sifat kelas orangtuanya. Hal ini dapat dianalogikan dengan kelas manusia. Manusia merupakan turunan dari orang tuanya dan sifat-sifat orang tua diwarisi olehnya. Bisa ditarik kesimpulan bahwa semua kelas di dunia selalu memiliki hirarki yang menggambarkan silsilah kelas tersebut.
Contoh:
Dari kelas kendaraan bermotor dapat diturunkan beberapa kelas baru, misalnya: sepeda motor, sedan, pick-up, mini-bus, dan kendaraan roda banyak.
Contoh:
kelas sepeda motor mungkin masih dibagi lagi menjadi dua kelas, yaitu sepeda motor 2 tak dan 4 tak. Sepeda motor 2 tak mungkin masih dibagi lagi menurut pabrik pembuatnya, seperti Honda, Suzuki, Yamaha, dan seterusnya. Masing-masing pabrik mungkin masih mempunyai beberapa kelas turunan lagi, seperti Honda Astrea Star, Honda Astrea Grand, dan seterusnya, seperti ditunjukkan pada Gambar dibawah ini
POLIMORFISME (POLYMORPHISM)
Polimorfisme berarti kelas-kelas yang berbeda tetapi berasal dari satu orang tua dapat mempunyai metode yang sama tetapi cara pelaksanaannya berbeda-beda. Atau dengan kata lain, suatu fungsi akan memiliki perilaku berbeda jika dilewatkan ke kelas yang berbeda-beda. Contoh: kelas untuk input sound system. Sebuah tape recorder dan CD player memiliki tombol PLAY yang berfungsi untuk memainkan music yang dikehendaki. Tape recorder mengimplementasikan tombol PLAY dengan membaca isyarat-isyarat yang terekam di pita magnetis kaset, sedangkan CD player menggunakan sinar laser untuk membaca bit-bit digital yang terekam di permukaan CD.
ALASAN DIGUNAKANNYA PBO
PBO diciptakan karena masih dirasakan adanya keterbatasan pada bahasa pemrograman tradisional yang dikenal dengan istilah procedural language seperti C, Pascal dan yang sejenisnya. Padahal, pemrograman prosedural sendiri pada awalnya merupakan perbaikan atas bahasa pemrograman sekuensial (sequential programming language), seperti BASIC ataupun Fortran. Konsep procedural programming language yaitu bahwa semua masalah dibagi ke dalam fungsi atau prosedur. Selain itu dalam procedural programming, fungsi dan data terpisah dan tidak menjadi satu kesatuan. Contoh kelemahan dari procedural programming adalah bila sebuah perusahaan membuat program General Ledger (Buku kas besar) menggunakan variabel yang bisa diakses oleh fungsi-fungsi lainnya, maka harus dideklarasikan variabel tersebut sebagai variabel global yang letaknya di luar semua fungsi sehingga bisa diakses oleh semua fungsi. Jika suatu saat perusahaan tadi memperkerjakan programmer baru yang belum mengetahui seluk-beluk program general ledger tadi, maka sangat dimungkinkan terjadinya kerusakan data. Anda juga akan menemukan kesulitan bila Anda ingin membuat tipe data baru dengan bahasa pemrograman tradisional.
Konsep PBO adalah bahwa semua pemecahan masalah dibagi ke dalam kelas (class). Dalam PBO data dan fungsi-fungsi yang akan mengoperasikan data digabungkan menjadi satu kesatuan yang bias disebut sebagai kelas. Fungsi kelas terletak pada fungsi anggota (member function) dalam Java. Jika Anda ingin membaca data dalam objek maka Anda harus memanggil fungsi anggota (member function) dalam objek. Hanya dengan cara ini Anda bisa mengakses data. Jadi Anda tidak bias mengakses data secara langsung seperti dalam konsep pemrograman tradisional. Pengaksesan data seperti pada PBO ini dikenal sebagai pengkapsulan data. Pengkapsulan data (data encapsulation) dan penyembunyian data merupakan kunci pengertian pemrograman berorientasi objek.
Jika Anda ingin mengubah data dalam objek tentunya Anda harus tahu fungsi-fungsi apa saja yang berinteraksi dengan objek itu, jadi tidak ada fungsi-fungsi lain yang bisa mengakses data sehingga penulisan dan penelusuran kesalahan program (debugging) akan dapat dilakukan dengan mudah. Untuk mempermudah pengertian mengenai objek, dimisalkan objek sebagai departemen-departemen dalam perusahaan, seperti pemasaran, keuangan, produksi, personalia, pengadaan maupun warehouse. Setiap departemen memiliki fungsi, tugas dan tanggung jawab yang berbeda. Jika menginginkan data laporan keuangan maka yang harus diminta adalah departemen keuangan, bukan yang lainnya.
PEMODULAN (ENCAPSULATION)
Pemodulan adalah metode untuk menggabungkan data dengan fungsi. Dalam konsep ini data dan fungsi digabung menjadi satu kesatuan yaitu kelas. Konsep ini erat kaitannya dengan konsep penyembunyian informasi (information hiding). Untuk menjelaskan konsep ini diberikan contoh sebagai berikut.
Contoh 1:
Mobil adalah sebuah kelas. Seorang pengendara mobil tidak harus tahu bagaimana proses kerja mesin mobilnya, pembakaran bahan bakar, proses pemindahan transmisi gigi, dan seterusnya. Yang dia tahu adalah bahwa setir untuk mengendalikan jalannya mobil, pedal gas untuk menambah kecepatan, pedal rem untuk mengurangi kecepatan, dan seterusnya. Singkatnya dia hanya tahu bahwa mobilnya berjalan dengan baik.
Contoh 2:
Kelas rice cooker (penanak nasi). Seorang ibu rumah tangga tidak tahu mengapat rice cooker bisa bekerja seperti itu. Barangkali seorang ibu rumah tangga tidak menyadari bahwa rice cooker modern memiliki sebuah mikroposesor setara Z80. Dari dua contoh di atas jelaslah bagaimana proses dalam metode suatu kelas selalu disembunyikan sedemikian rupa sehingga seseorang hanya tahu kelas tersebut dapat berfungsi, bukannya apa yang menyebabkan kelas itu bisa berbuat demikian. Hal di atas cukup penting dalam PBO membangun aplikasi kompleks yang melibatkan beberapa pemrograman. Misalnya sebuah kelompok pemrograman akan membuat aplikasi akuntansi (aplikasi ini biasanya membutuhkan ilmu yang sangat kompleks). Pemrogram I menangani masalah struktur data, Pemrogram II menangani masalah akuntansi dan Pemrogram III menangani masalah tampilan layar, dan sebagainya. Sebelum dikenal PBO, setiap pemrogram harus membuat suatu fungsi yang memiliki argumen masukan dan keluaran. Jadi bila Pemrogram I ingin mengolah program dari Pemrogram II, dia harus memberikan masukan dan menerima keluarannya. Cara ini sudah banyak digunakan dan mempunyai kelemahan yang antara lain tidak adanya kesatuan antara data dan fungsinya.
PENURUNAN (INHERITANCE)
Dari konsep penurunan ini suatu kelas bisa diturunkan menjadi kelas baru yang masih mewarisi sifat-sifat kelas orangtuanya. Hal ini dapat dianalogikan dengan kelas manusia. Manusia merupakan turunan dari orang tuanya dan sifat-sifat orang tua diwarisi olehnya. Bisa ditarik kesimpulan bahwa semua kelas di dunia selalu memiliki hirarki yang menggambarkan silsilah kelas tersebut.
Contoh:
Dari kelas kendaraan bermotor dapat diturunkan beberapa kelas baru, misalnya: sepeda motor, sedan, pick-up, mini-bus, dan kendaraan roda banyak.
Contoh:
kelas sepeda motor mungkin masih dibagi lagi menjadi dua kelas, yaitu sepeda motor 2 tak dan 4 tak. Sepeda motor 2 tak mungkin masih dibagi lagi menurut pabrik pembuatnya, seperti Honda, Suzuki, Yamaha, dan seterusnya. Masing-masing pabrik mungkin masih mempunyai beberapa kelas turunan lagi, seperti Honda Astrea Star, Honda Astrea Grand, dan seterusnya, seperti ditunjukkan pada Gambar dibawah ini
POLIMORFISME (POLYMORPHISM)
Polimorfisme berarti kelas-kelas yang berbeda tetapi berasal dari satu orang tua dapat mempunyai metode yang sama tetapi cara pelaksanaannya berbeda-beda. Atau dengan kata lain, suatu fungsi akan memiliki perilaku berbeda jika dilewatkan ke kelas yang berbeda-beda. Contoh: kelas untuk input sound system. Sebuah tape recorder dan CD player memiliki tombol PLAY yang berfungsi untuk memainkan music yang dikehendaki. Tape recorder mengimplementasikan tombol PLAY dengan membaca isyarat-isyarat yang terekam di pita magnetis kaset, sedangkan CD player menggunakan sinar laser untuk membaca bit-bit digital yang terekam di permukaan CD.
KONSEP OOP
Pada bab ini, kita akan mengantarkan beberapa konsep dasar dari Pemrograman berorientasi obyek (Object Oriented Porgramming). Selanjutnya, kita akan membahas konsep dari class dan obyek, serta penggunaan class dan anggota-anggotanya termasuk perbandingan, konversi dan pengubahan obyek.
1. Pengenalan Pemrograman Berorientasi Obyek
OOP berputar pada konsep dari obyek yang merupakan elemen dasar dari program Anda. Ketika kita membandingkan dengan dunia nyata, kita dapat menemukan beberapa obyek disekitar kita seperti mobil, singa, manusia dan seterusnya. Obyek ini dikarakterisasi oleh atribut dan tingkah lakunya.
Contohnya, objek sebuah mobil mempunyai atribut tipe transmisi, warna dan manufaktur.
Mempunyai tingkah laku berbelok, mengerem dan berakselerasi. Dengan cara yang sama pula kita dapat mendefinisikan perbedaan sifat dan tingkah laku dari singa. Coba perhatikan tabel dibawah ini sebagai contoh perbandingan :
Dengan deskripsi ini, obyek pada dunia nyata dapat secara mudah asumsikan sebagai obyek perangkat lunak menggunakan atribut sebagai data dan tingkah laku sebagai method. Data dan method dapat digunakan dalam pemrograman game atau perangkat lunak interaktif untuk membuat simulasi obyek pada dunia nyata. Contohnya adalah perangkat lunak obyek mobil dalam permainan balap mobil atau perangkat lunak obyek singa dalam sebuah perangkat lunak pendidikan interaktif pada kebun binatang untuk anak anak.
2. Class dan Object
2.1 Perbedaan Class dan Object
Pada dunia perangkat lunak, sebuah obyek adalah sebuah komponen perangkat lunak yang
stukturnya mirip dengan obyek pada dunia nyata. Setiap obyek dibangun dari sekumpulan
data (atribut) yang disebut variabel untuk menjabarkan karakteristik khusus dari obyek, dan juga terdiri dari sekumpulan method yang menjabarkan tingkah laku dari obyek. Bisa dikatakan bahwa obyek adalah sebuah perangkat lunak yang berisi sekumpulan variabel dan method yg berhubungan.
Variabel dan method dalam obyek Java secara formal diketahui sebagai variabel instance dan method instance. Hal ini dilakukan untuk membedakan dari variabel class dan method class, dimana akan dibahas kemudian.
Class adalah sturktur dasar dari OOP. Class terdiri dari dua tipe dari anggota dimana disebut dengan field (attribut/properti) dan method. Field merupakan tipe data yang didefinisikan oleh class, sementara method merupakan operasi. Sebuah obyek adalah sebuah instance (keturunan) dari class.
Untuk dapat membedakanantara class dan obyek, mari kita mendiskusikan beberapa contoh berikut ini. Kita memiliki sebuah class mobil dimana dapat digunakan untuk medefinisikan beberapa obyek mobil. Pada tabel dibawah, mobil A dan mobil B adalah obyek dari class mobil. Class memiliki field nomor, plat, warna, manufaktur dan kecepatan yang diisi dengan nilai pada obyek mobil A dan mobil B. Mobil juga dapat berakselerasi, berbelok dan melakukan rem.
Ketika diinisialisi, setiap obyek mendapat satu set variabel yang baru. Bagaimanapun, implementasi dari method dibagi diantara objek pada class yang sama.
Class menyediakan keuntungan dari reusability. Programmer perangkat lunak dapat menggunakan sebuah kelas beberapa kali untuk membuat banyak objek.
2.2 Instansiasi Class
Untuk membuat sebuah objek atau sebuah instance pada sebuah class. Kita menggunakan operator new. Sebagai contoh, jika anda ingin membuat instance dari class string, kita menggunakan kode berikut :
String str2 = new String(“Hello world!”);
Ini juga sama dengan,
String str2 = "Hello";
2.3 Variabel Class dan Variabel Method
Selain dari variabel instance, kita juga memungkinkan untuk mendefinisikan variabel dari
class, yang nantinya variabel ini dimiliki oleh class. Ini berarti variabel ini dapat memiliki nilai yang sama untuk semua objek pada class yang sama. Mereka juga disebut static member variables.
3. Method
3.1 Apakah Method itu dan mengapa menggunakan Method?
Di dalam Java, kita dapat mendefinisikan banyak method yang akan kita panggil dari method yang berbeda.
Sebuah method adalah bagian-bagian kode yang dapat dipanggil oleh program utama atau dari method lainnya untuk menjalankan fungsi yang spesifik.
Berikut adalah karakteristik dari method :
1. dapat mengembalikan satu nilai atau tidak sama sekali
2. dapat diterima beberapa parameter yang dibutuhkan atau tidak ada parameter sama sekali. Parameter bisa juga disebut sebagai argumen dari fungsi
3. setelah method telah selesai dieksekusi, dia akan kembali pada method yang memanggilnya.
Sekarang mengapa kita butuh untuk membuat banyak method? Mengapa kita tidak menuliskan semua kode pada sebuah method? Hal ini karena penyelesaian masalah yang sangat efektif adalah memecah masalah-masalah tersebut menjadi beberapa bagian. Kita juga dapat melakukan hal ini di Java dengan membuat method untuk mengatasi bagian tertentu dari masalah. Sebuah permasalahan dapat dipecah-pecah menjadi beberapa bagian kecil. Hal ini sangat baik sekali untuk membuat program yang sangat besar
1. Pengenalan Pemrograman Berorientasi Obyek
OOP berputar pada konsep dari obyek yang merupakan elemen dasar dari program Anda. Ketika kita membandingkan dengan dunia nyata, kita dapat menemukan beberapa obyek disekitar kita seperti mobil, singa, manusia dan seterusnya. Obyek ini dikarakterisasi oleh atribut dan tingkah lakunya.
Contohnya, objek sebuah mobil mempunyai atribut tipe transmisi, warna dan manufaktur.
Mempunyai tingkah laku berbelok, mengerem dan berakselerasi. Dengan cara yang sama pula kita dapat mendefinisikan perbedaan sifat dan tingkah laku dari singa. Coba perhatikan tabel dibawah ini sebagai contoh perbandingan :
Dengan deskripsi ini, obyek pada dunia nyata dapat secara mudah asumsikan sebagai obyek perangkat lunak menggunakan atribut sebagai data dan tingkah laku sebagai method. Data dan method dapat digunakan dalam pemrograman game atau perangkat lunak interaktif untuk membuat simulasi obyek pada dunia nyata. Contohnya adalah perangkat lunak obyek mobil dalam permainan balap mobil atau perangkat lunak obyek singa dalam sebuah perangkat lunak pendidikan interaktif pada kebun binatang untuk anak anak.
2. Class dan Object
2.1 Perbedaan Class dan Object
Pada dunia perangkat lunak, sebuah obyek adalah sebuah komponen perangkat lunak yang
stukturnya mirip dengan obyek pada dunia nyata. Setiap obyek dibangun dari sekumpulan
data (atribut) yang disebut variabel untuk menjabarkan karakteristik khusus dari obyek, dan juga terdiri dari sekumpulan method yang menjabarkan tingkah laku dari obyek. Bisa dikatakan bahwa obyek adalah sebuah perangkat lunak yang berisi sekumpulan variabel dan method yg berhubungan.
Variabel dan method dalam obyek Java secara formal diketahui sebagai variabel instance dan method instance. Hal ini dilakukan untuk membedakan dari variabel class dan method class, dimana akan dibahas kemudian.
Class adalah sturktur dasar dari OOP. Class terdiri dari dua tipe dari anggota dimana disebut dengan field (attribut/properti) dan method. Field merupakan tipe data yang didefinisikan oleh class, sementara method merupakan operasi. Sebuah obyek adalah sebuah instance (keturunan) dari class.
Untuk dapat membedakanantara class dan obyek, mari kita mendiskusikan beberapa contoh berikut ini. Kita memiliki sebuah class mobil dimana dapat digunakan untuk medefinisikan beberapa obyek mobil. Pada tabel dibawah, mobil A dan mobil B adalah obyek dari class mobil. Class memiliki field nomor, plat, warna, manufaktur dan kecepatan yang diisi dengan nilai pada obyek mobil A dan mobil B. Mobil juga dapat berakselerasi, berbelok dan melakukan rem.
Ketika diinisialisi, setiap obyek mendapat satu set variabel yang baru. Bagaimanapun, implementasi dari method dibagi diantara objek pada class yang sama.
Class menyediakan keuntungan dari reusability. Programmer perangkat lunak dapat menggunakan sebuah kelas beberapa kali untuk membuat banyak objek.
2.2 Instansiasi Class
Untuk membuat sebuah objek atau sebuah instance pada sebuah class. Kita menggunakan operator new. Sebagai contoh, jika anda ingin membuat instance dari class string, kita menggunakan kode berikut :
String str2 = new String(“Hello world!”);
Ini juga sama dengan,
String str2 = "Hello";
2.3 Variabel Class dan Variabel Method
Selain dari variabel instance, kita juga memungkinkan untuk mendefinisikan variabel dari
class, yang nantinya variabel ini dimiliki oleh class. Ini berarti variabel ini dapat memiliki nilai yang sama untuk semua objek pada class yang sama. Mereka juga disebut static member variables.
3. Method
3.1 Apakah Method itu dan mengapa menggunakan Method?
Di dalam Java, kita dapat mendefinisikan banyak method yang akan kita panggil dari method yang berbeda.
Sebuah method adalah bagian-bagian kode yang dapat dipanggil oleh program utama atau dari method lainnya untuk menjalankan fungsi yang spesifik.
Berikut adalah karakteristik dari method :
1. dapat mengembalikan satu nilai atau tidak sama sekali
2. dapat diterima beberapa parameter yang dibutuhkan atau tidak ada parameter sama sekali. Parameter bisa juga disebut sebagai argumen dari fungsi
3. setelah method telah selesai dieksekusi, dia akan kembali pada method yang memanggilnya.
Sekarang mengapa kita butuh untuk membuat banyak method? Mengapa kita tidak menuliskan semua kode pada sebuah method? Hal ini karena penyelesaian masalah yang sangat efektif adalah memecah masalah-masalah tersebut menjadi beberapa bagian. Kita juga dapat melakukan hal ini di Java dengan membuat method untuk mengatasi bagian tertentu dari masalah. Sebuah permasalahan dapat dipecah-pecah menjadi beberapa bagian kecil. Hal ini sangat baik sekali untuk membuat program yang sangat besar
Senin, 20 Desember 2010
BAHASA PEMROGRAMAN YANG MENDUKUNG OOP DAN CLASS
1. Java OOP (Object Oriented Progaming-program berorientasi object)
Yang artinya semua aspek yang ada di java adalah objek. Java merupakan salah satu bahasa pemrograman berbasis objek secara murni. Semua tipe data diturunkan dari kelas dasar yang disebut objek. Hal ini sangat memudahkan pemrogram untuk mendesain membuat mengembangkan dan mengalokasi kesalahan sebuah program dengan basis java secara cepat tepat mudah dan terorganisir. Kelebihan ini menjadikan java sebagai salah satu bahasa pemrograman termudah bahkan untuk fungsi-fungsi yang advance seperti komunikasi antara komputer sekalipun.
2. Pascal (bahasa Pemrograman)
Pascal adalah bahasa pemrograman yang pertama kali dibuat oleh Prof. Niklaus wirth, seorang anggota international federation of information processing(IFIP) pada tahun 1971. Dengan mengambil nama dari matematikawan prancis blaise pascal,yang pertama kali menciptakan mesin penghitung Prof. Niklaus wirth membuat bahasa pascal ini sebagai alat bantu untuk mengajarkan konsep program komputer kepada mahasiswanya selain itu Prof. Niklaus membuat pascal juga untuk melengkapi kekurangan-kekurangan bahasa pemrograman yang ada saat itu.
3. C++
C++ adalah salah satu pemrograman komputer dibuat pada tahun 1980an oleh Bell Blabs atau (Bjame Stroustrup) sebagai pengembangan dari bahasa program C. Salah satu perbedaan yang paling mendasar dengan bahasa C adalah dukungan kepada konsep program berorientasi objek (Object Oriented Programing)
4. Microssoft Visual Basic.Net
Microssoft Visual Basic.Net adalah sebuah alat untuk mengembangkan dan membangun plikasi yang bergerak diatas sistem Net frame work,dengan menggunakan bahasa basic dengan menggunakan alat ini para programmer dapat membangun aplikasi windows forms aplikasi web berbasis ASP.Net,dan juga aplikasi command-line. Alat ini dapat diperoleh secara terpisah dari beberapa produk lainnya (seperti microssoft visual C++,Visual C#,atau Visual J#) Atau juga dapa diperoleh secara terpadu dalam microssoft Visual studio.Net bahasa visual basic.Net sendiri menganut paradigma bahasa pemrograman berorientasi objek yang dapat dilihat sebagai evolusi dari microssoft visual basic versi sebelumnya yang diimplementasikan diatas Net frame work peluncurannya mengundang kontroversi mengingat banyak sekali perubahan yang dilakukan oleh microssoft dan versi baru ini tidak kompatibel dengan versi terdahulu.
5. PHP
PHP adalah bahasa pemrograman script yang paling banyak dipakai saat ini PHP banyak dipakai untuk memrogram situs web dinamis walaupun tidak tertutup kemungkinan digunakan untuk pemakaian lain.
6. C#
C# adalah java versi microssoft sebuah bahasa multi platform yang didesain untuk berjalan diberbagai mesin C# adalah program berorientasi object atau OOP C# memiliki kekuatan bahasa C++ dan portabilitas seperti java.
7. Delphi
Delphi adalah sebuah bahasa pemrograman dan lingkungan pengembangan perangkat lunak.
Produk ini dikembangkan oleh Boorland( Sebelum dikenal sebagai Inprise ). Bahasa Delphi yang sebelumnya dikenal sebagai object pascal ( Pascal dengan ekstensi pemrograman berorientasi objek ( PBO / OOP ) ) Pada mulanya ditujukan hanya untuk microssoft windows namun saat ini telah mampu digunakan untuk mengembangkan aplikasi untuk zlinux dan Microsoft Net frame work dengan menggunakan free Pascal yang merupakan proyek open source bahasa ini dapat pula digunakan untuk membuat program yang berjalan disistem operasi MAC OS X dan Windows CE.
Yang artinya semua aspek yang ada di java adalah objek. Java merupakan salah satu bahasa pemrograman berbasis objek secara murni. Semua tipe data diturunkan dari kelas dasar yang disebut objek. Hal ini sangat memudahkan pemrogram untuk mendesain membuat mengembangkan dan mengalokasi kesalahan sebuah program dengan basis java secara cepat tepat mudah dan terorganisir. Kelebihan ini menjadikan java sebagai salah satu bahasa pemrograman termudah bahkan untuk fungsi-fungsi yang advance seperti komunikasi antara komputer sekalipun.
2. Pascal (bahasa Pemrograman)
Pascal adalah bahasa pemrograman yang pertama kali dibuat oleh Prof. Niklaus wirth, seorang anggota international federation of information processing(IFIP) pada tahun 1971. Dengan mengambil nama dari matematikawan prancis blaise pascal,yang pertama kali menciptakan mesin penghitung Prof. Niklaus wirth membuat bahasa pascal ini sebagai alat bantu untuk mengajarkan konsep program komputer kepada mahasiswanya selain itu Prof. Niklaus membuat pascal juga untuk melengkapi kekurangan-kekurangan bahasa pemrograman yang ada saat itu.
3. C++
C++ adalah salah satu pemrograman komputer dibuat pada tahun 1980an oleh Bell Blabs atau (Bjame Stroustrup) sebagai pengembangan dari bahasa program C. Salah satu perbedaan yang paling mendasar dengan bahasa C adalah dukungan kepada konsep program berorientasi objek (Object Oriented Programing)
4. Microssoft Visual Basic.Net
Microssoft Visual Basic.Net adalah sebuah alat untuk mengembangkan dan membangun plikasi yang bergerak diatas sistem Net frame work,dengan menggunakan bahasa basic dengan menggunakan alat ini para programmer dapat membangun aplikasi windows forms aplikasi web berbasis ASP.Net,dan juga aplikasi command-line. Alat ini dapat diperoleh secara terpisah dari beberapa produk lainnya (seperti microssoft visual C++,Visual C#,atau Visual J#) Atau juga dapa diperoleh secara terpadu dalam microssoft Visual studio.Net bahasa visual basic.Net sendiri menganut paradigma bahasa pemrograman berorientasi objek yang dapat dilihat sebagai evolusi dari microssoft visual basic versi sebelumnya yang diimplementasikan diatas Net frame work peluncurannya mengundang kontroversi mengingat banyak sekali perubahan yang dilakukan oleh microssoft dan versi baru ini tidak kompatibel dengan versi terdahulu.
5. PHP
PHP adalah bahasa pemrograman script yang paling banyak dipakai saat ini PHP banyak dipakai untuk memrogram situs web dinamis walaupun tidak tertutup kemungkinan digunakan untuk pemakaian lain.
6. C#
C# adalah java versi microssoft sebuah bahasa multi platform yang didesain untuk berjalan diberbagai mesin C# adalah program berorientasi object atau OOP C# memiliki kekuatan bahasa C++ dan portabilitas seperti java.
7. Delphi
Delphi adalah sebuah bahasa pemrograman dan lingkungan pengembangan perangkat lunak.
Produk ini dikembangkan oleh Boorland( Sebelum dikenal sebagai Inprise ). Bahasa Delphi yang sebelumnya dikenal sebagai object pascal ( Pascal dengan ekstensi pemrograman berorientasi objek ( PBO / OOP ) ) Pada mulanya ditujukan hanya untuk microssoft windows namun saat ini telah mampu digunakan untuk mengembangkan aplikasi untuk zlinux dan Microsoft Net frame work dengan menggunakan free Pascal yang merupakan proyek open source bahasa ini dapat pula digunakan untuk membuat program yang berjalan disistem operasi MAC OS X dan Windows CE.
IMPLEMENTASI KONSEP OOP DIDALAM BAHASA PEMROGRAMAN BORLAND C++ BUILDER
Construktor adalah suatau fungsi tanpa return yang di panggil secara otomatis setiap kali,sebuah objek/kelas di buat.Hal ini biasa dilakukan untuk proses inisialisasi.Nama fungsi construktur harus sama dengan nama kelas,dan sama seperti fungsi-fungsi lain,pada fungsi construktor juga dapat dilakukan overload.
Contoh program:
#include
#include
#include
class Aku//bagian Kelas
{
private :
char nama[30];
public:
void masukan()
{
cout <<"\nMasukkan nama anda:"; cin >>nama;
}
void tampilkan()
{
cout<<"\n Nama anda :"<
}
};
//akhir dari kelas
void main()//Bagian program utama
{
Aku Aidha;
Aidha.masukan();
Aidha.tampilkan();
getch();
}//akhir program utama
Contoh program:
#include
#include
#include
class Aku//bagian Kelas
{
private :
char nama[30];
public:
void masukan()
{
cout <<"\nMasukkan nama anda:"; cin >>nama;
}
void tampilkan()
{
cout<<"\n Nama anda :"<
};
//akhir dari kelas
void main()//Bagian program utama
{
Aku Aidha;
Aidha.masukan();
Aidha.tampilkan();
getch();
}//akhir program utama
Langganan:
Postingan (Atom)