Menggunakan Obyek dan Class

524 Direktorat Pembinaan SMK | 2008 { char Sekolah[ 20 ]; char Nama[ 25 ]; char NIS[ 12 ]; char Alamat[ 25 ]; char Kelas[ 10 ]; }; int mainint argc, char argv[] { KartuPelajar data; cout Pengisian Data Kartu Pelajar endl; cout Asal Sekolah : ; cin.getlinedata.Sekolah, sizeofdata.Sekolah; cout Nama Siswa : ; cin.getlinedata.Nama, sizeofdata.Nama; cout N I S : ; cin.getlinedata.NIS, sizeofdata.NIS; cout Alamat : ; cin.getlinedata.Alamat, sizeofdata.Alamat; cout JurusanKelas : ; cin.getlinedata.Kelas, sizeofdata.Kelas; coutendlendl; cout Hasil Pengisian Data endl; cout Asal Sekolah : data.Sekolahendl; cout Nama Siswa : data.Namaendl; cout N I S : data.NISendl; cout Alamat : data.Alamatendl; cout JurusanKelas : data.Kelasendl; system PAUSE ; return EXIT_SUCCESS; } Keluaran dari program diatas adalah sebagai berikut: Pengisian Data Kartu Pelajar Asal Sekolah : SMA N 1 Yogyakarta Nama Siswa : Badu Mahir Banget N I S : 1234 Alamat : Jl. Antah Berantah 2009 Jurusan Kelas : X IPA 1 2008 | Direktorat Pembinaan SMK 525 Hasil Pengisian Data Pengisian Data Kartu Pelajar Asal Sekolah : SMA N 1 Yogyakarta Nama Siswa : Badu Mahir Banget N I S : 1234 Alamat : Jl. Antah Berantah 2009 Jurusan Kelas : X IPA 1 Lebih lanjut, struct dalam program di atas merupakan tipe data baru yang bernama KartuPelajar, ini sama dengan char, int, float dan sebagainya. Hal itu lebih diyakinkan pada main ada perintah KartuPelajar data; dapat dijelaskan bahwa data merupakan variable dengan tipe KartuPelajar. Keyword struct dalam bahasa C++ dapat digantikan dengan class seperti contoh di bawah ini: class KartuPelajar { public: char Sekolah[20]; char Nama[25]; char NIS[12]; char Alamat[25]; char Kelas[10]; }; Potongan program di atas merupakan pembuatan tipe data baru juga namun menggunakan class, bukan struct. Program selengkapnya seperti berikut: Program 16.2 include cstdlib include iostream using namespace std; class KartuPelajar { public: char Sekolah[ 20 ]; char Nama[ 25 ]; char NIS[ 12 ]; char Alamat[ 25 ]; char Kelas[ 10 ]; }; int mainint argc, char argv[] { KartuPelajar data; 526 Direktorat Pembinaan SMK | 2008 cout Pengisian Data Kartu Pelajar endl; cout Asal Sekolah : ; cin.getlinedata.Sekolah, sizeofdata.Sekolah; cout Nama Siswa : ; cin.getlinedata.Nama, sizeofdata.Nama; cout N I S : ; cin.getlinedata.NIS, sizeofdata.NIS; cout Alamat : ; cin.getlinedata.Alamat, sizeofdata.Alamat; cout JurusanKelas : ; cin.getlinedata.Kelas, sizeofdata.Kelas; coutendlendl; cout Hasil Pengisian Data endl; cout Asal Sekolah : data.Sekolahendl; cout Nama Siswa : data.Namaendl; cout N I S : data.NISendl; cout Alamat : data.Alamatendl; cout JurusanKelas : data.Kelasendl; system PAUSE ; return EXIT_SUCCESS; } Keluaran program di atas: Pengisian Data Kartu Pelajar Asal Sekolah : SMA N 3 Yogyakarta Nama Siswa : Badu Pakar Banget N I S : 1500 Alamat : Jl. Kemana‐mana 007 Jurusan Kelas : X IPA 3 Hasil Pengisian Data Pengisian Data Kartu Pelajar Asal Sekolah : SMA N 3 Yogyakarta Nama Siswa : Badu Pakar Banget N I S : 1500 Alamat : Jl. Kemana‐mana 007 Jurusan Kelas : X IPA 3 Lalu apa bedanya selain keyword struct diganti dengan class dan ditambah public: dalam class tersebut ? Di sinilah konsep object oriented programming pemrograman berorientasi obyek seharusnya 2008 | Direktorat Pembinaan SMK 527 berbeda. Dalam pemrograman berorientasi obyek antara data atau variable dan fungsinya menjadi satu kesatuan tidak terpisah seperti struct di atas. Sehingga fungsi pengisian data dan pencetakan data menjadi satu dalam class, contoh lengkap sebagai berikut: Program 16.3 include cstdlib include iostream using namespace std; class KartuPelajar { private: char Sekolah[ 20 ]; char Nama[ 25 ]; char NIS[ 12 ]; char Alamat[ 25 ]; char Kelas[ 10 ]; public: void pengisian { cout Pengisian Data Kartu Pelajar endl; cout Asal Sekolah : ; cin.getlineSekolah, sizeofSekolah; cout Nama Siswa : ; cin.getlineNama, sizeofNama; cout N I S : ; cin.getlineNIS, sizeofNIS; cout Alamat : ; cin.getlineAlamat, sizeofAlamat; cout JurusanKelas : ; cin.getlineKelas, sizeofKelas; coutendlendl; }; void cetak { cout Hasil Pengisian Data endl; cout Asal Sekolah : Sekolahendl; cout Nama Siswa : Namaendl; cout N I S : NISendl; cout Alamat : Alamatendl; 528 Direktorat Pembinaan SMK | 2008 cout JurusanKelas : Kelasendl; }; }; int mainint argc, char argv[] { KartuPelajar data; data.pengisian; data.cetak; system PAUSE ; return EXIT_SUCCESS; } Dalam program di atas dapat dilihat bahwa antara variable dan method menjadi satu dalam class. Selain itu ada perubahan dari contoh sebelumnya bahwa variable berubah sifat dari public menjadi private. Hal ini dimaksudkan untuk penyembunyian data information hiding dari pengguna, sehingga pengguna tidak dapa mengubah- ubah data secara langsung tetapi harus melalui pemanggilan class atau penurunan inheritance class. Sedangkan method pada class bersifat public, tentunya dimaksudkan agar dapat dipakai secara umum dari class yang lain atau class turunannya. Pada contoh program di atas konten dari method ditulis langsung dalam class, itu merupakan cara pertama. Ada cara kedua penulisan konten method di luar class supaya lebih leluasa apabila kontennya panjang. Program lengkapnya seperti berikut: Program 16.4 include cstdlib include iostream using namespace std; class KartuPelajar { private: char Sekolah[ 20 ]; char Nama[ 25 ]; char NIS[ 12 ]; char Alamat[ 25 ]; char Kelas[ 10 ]; public: 2008 | Direktorat Pembinaan SMK 529 void pengisian; void cetak; }; void KartuPelajar::pengisian { cout Pengisian Data Kartu Pelajar endl; cout Asal Sekolah : ; cin.getlineSekolah, sizeofSekolah; cout Nama Siswa : ; cin.getlineNama, sizeofNama; cout N I S : ; cin.getlineNIS, sizeofNIS; cout Alamat : ; cin.getlineAlamat, sizeofAlamat; cout JurusanKelas : ; cin.getlineKelas, sizeofKelas; coutendlendl; }; void KartuPelajar::cetak { cout Hasil Pengisian Data endl; cout Asal Sekolah : Sekolahendl; cout Nama Siswa : Namaendl; cout N I S : NISendl; cout Alamat : Alamatendl; cout JurusanKelas : Kelasendl; }; int mainint argc, char argv[] { KartuPelajar data; data.pengisian; data.cetak; system PAUSE ; return EXIT_SUCCESS; } 530 Direktorat Pembinaan SMK | 2008 Penulisan dalam pemrograman berorientasi obyek lebih lazim contoh terakhir, walaupun cara pertama tidak salah. Dalam contoh cara kedua lebih menunjukkan ciri-ciri pemrograman beririentasi obyeknya dibanding cara pertama.

16.2. Realisasi Prosedur dan Fungsi dalam Class

Sebuah class telah disinggung di uraian sebelumnya bahwa prosedur maupun fungsi method merupakan satu kesatuan dengan datanya, sering disebut dengan encapsulated. Prosedur dan fungsi ini merupakan dasar untuk komunikasi sebuah class dengan class lainnya, dan merupakan nyawanya class tersebut karena pengaturan proses dari suatu class melalui komponen ini. Untuk lebih jelasnya lihat contoh di bawah ini: Program 16.5 include cstdlib include iostream using namespace std; class Titik { int Absis; int Ordinat; public: void SetAbsisint x; void SetOrdinatint y; int AmbilAbsis; int AmbilOrdinat; }; void Titik::SetAbsisint x { Absis = x; } void Titik::SetOrdinatint y { Ordinat = y; } 2008 | Direktorat Pembinaan SMK 531 int Titik::AmbilAbsis { return Absis; } int Titik::AmbilOrdinat { return Ordinat; } int mainint argc, char argv[] { Titik A; A.SetAbsis 4 ; A.SetOrdinat 6 ; cout Absis titik A = A.AmbilAbsis \n ; cout Ordinat titik A = A.AmbilOrdinat \n ; Titik B = A; cout Absis titik B = B ‐AmbilAbsis \n ; cout Ordinat titik B = B ‐AmbilOrdinat \n ; A.SetAbsis 2 ; A.SetOrdinat 3 ; Titik C = A; cout Absis titik C = C.AmbilAbsis \n ; cout Ordinat titik C = C.AmbilOrdinat \n ; system PAUSE ; return EXIT_SUCCESS; } Program di atas merupakan program untuk mengolah tentang titik dalam suatu bidang 2 dimensi. Sehingga mempunyai variable x dan y. Untuk dapat mengolah data-data absis serta ordinat dalam bidang 2 dimensi tersebut diperlukan prosedur untuk set absis dan prosedur untuk set ordinat. Hal itu dapat dilihat dalam prosedur SetAbsisint x dan prosedur SetOrdinatint y; Sedangkan untuk mengambil data baik absis maupun ordinatnya menggunakan fungsi AmbilAbsis dan fungsi AmbilOrdinat guna pengolahan lebih lanjut, misal untuk mencari jarak antara dua titik dalam suatu bidang 2 dimensi. Dalam program di atas juga dimunculkan cara pemanggilan obyek dengan berbagai cara : Titik A; pemanggilan obyek secara biasa Titik B = A; pemanggilan obyek secara pointer Titik C = A; pemanggilan obyek secara reference