Friday, August 26, 2011

Object Oriented - Class, Deklarasi Class dan Access Modifier(Part 2)

Hmm, dilanjut saja untuk implementasinya. Di postingan sebelumnya, disebutkan bahwa 1 kelas nantinya akan dibuat menjadi 2 file, header dan implementasinya. Tujuannya dipisah seperti itu agar semua fungsi yang ada bisa menggunakan fungsi lain. Karena proses kompilasi program kan top-down, jadi kalo tidak dipisah nanti fungsi di atas tidak bisa menggunakan fungsi yang dibawahnya. Baiklah, mari kita bahas satu persatu.
File header, Bus.h

#pragma once
#include <iostream>
#include <iomanip>
#include <string>
using std::cout;
using std::endl;
using std::setw;
using std::setprecision;
using std::string;

class Bus
{
private:
    int Id;
    string Name;
    long Distance;
    int PassengersCount;
    int Capacity;
    int Position;
    double Fuel;
public:
    Bus(void);
    Bus(int Id, string Name, int Capacity);
    void Initialize(int PassengerCount);
    void Move();
    void Stop();
    int Unload(int PassengersCount);
    int Load(int PassengersCount);
    void Refill();
    int GetId();
    int PassCount();
    int Position();
    long GetDistance();
    string GetName();
    double GetFuel();
    void DisplayData();
    ~Bus(void);
};
 
Nah, disitu dapat dilihat ada deklarasi variabel-variabel dan beberapa fungsi ditambah keterangan public dan private yang akan dijelaskan di postingan berikutnya. Seperti yang sebelumnya dibahas, bahwa yang tipenya variabel merupakan atribut dan yang bertipe fungsi adalah perilaku. Untuk bagian atribut, mungkin tidak perlu dijelaskan lebih lanjut karena sama seperti pendeklarasian variabel biasa, sama seperti pemrograman lain, yg tidak berorientasi objek. Untuk fungsi-fungsi/periaku objek, ada sedikit perbedaan. Disitu dapat kita lihat ada beberapa fungsi yang tidak ada tipenya dan namanya sama seperti nama kelas. Itulah yang disebut fungsi constructor dan destructor. Apa lagi itu constructor dan destructor?
Jadi, suatu kelas itu pasti punya yang namanya constructor dan destructor, minimal ada 1 constructor dan 1 destructor.
Di baris kode tersebut dapat kita lihat ada 2 fungsi dengan nama Bus dengan parameter berbeda. Itulah yang disebut constructor. Fungsinya untuk membuat objek baru ketika dideklrasikan di fungsi main() dan mengalokasikan suatu blok memory untuk objek tersebut. Sedangkan ada fungsi dengan nama Bus tetapi diawal tanda '~'. Itulah yang disebut destructor. Fungsinya untuk membebaskan alokasi memory ketika program akan keluar. Secara default, fungsi destructor dipanggil compiler secara otomatis sebelum return 0 pada fungsi main(). Jadi dalam fungsi itu isinya cuma membebaskan memory yang digunakan.
Selain, constructor dan destructor ada fungsi khusus lain yaitu fungsi accessor dan modifier. Karena kedua fungsi ini berhubungan dengan yang namanya access modifier yang private dan public tadi itu, maka penjelasan kedua fungsi ini akan dijelaskan bersamaan bagian access modifier. Nah, di baris kode di file header, jika ada yang namanya diawali Set umumnya merupakan fungsi modifier sedangkan yang awalannya Get umumnya fungsi accessor. Namun, tidak selalu seperti itu karena masalah penamaan tergantung programmer juga. Tapi standart OOP umumnya seperti itu. Set bla bla bla berarti modifier, kalo Get bla bla bla berarti fungsi accessor.
Nah, lalu di Bus.h diatas ada beberapa fungsi yang diawali Get, itula fungsi accessor di kelas Bus, namun tidak ada fungsi modifier karena memang tidak membutuhkan fungsi modifier yang terpisah. Fungsionalitas fungsi modifier sudah diambil alih oleh perilaku objek.
Berarti fungsi sisanya, yang tidak termasuk constructor, destructor, accessor maupun modifier merupakan fungsi perilaku, fungsi-fungsi yang menggambarkan perilaku objek di dunia nyata.
Fiuh, baru bahas file header saja sudah panjang, dan saya sudah mulai mengantuk, sudah berkali-kali salah ketik, hehe. Mungkin dilanjut di postingan berikutnya saja untuk penjelasan implementasinya.
Semoga menambah pemahaman. Stay in touch ya.. hehe :P

0 comments:

Post a Comment

 
Copyright (c) 2010 printf("hello world"); and Powered by Blogger.