Praktikum Algoritma dan Pemrograman Lanjut
MODUL VI OBJECT ORIENTED PROGRAMMING (OOP)
I.
TUJUAN 1.
Mahasiswa akan dapat membandingkan pemrograman terstruktur dengan pemrograman berorientasi objek dengan membuat program dalam bahasa C++
2.
Mahasiswa akan dapat memahami konsep pemrograman PBO dan mengimplementasikannya kedalam bahasa C++
II.
DASAR TEORI 1.
Pengenalan OOP Apa itu OOP ? Merupakan teknik membuat suatu program berdasarkan objek dan apa yang bisa dilakukan objek tersebut. Object-oriented program terdiri dari objek-objek yang berinteraksi satu sama lain untuk menyelesaikan sebuah tugas. Kenapa menggunakan OOP ? Kode-kode di-breakdown agar lebih mudah di-manage. Breakdown berdasarkan objek-objek yang ada pada program tersebut. Dianjurkan diimplementasikan
untuk
program dengan berbagai ukuran karena lebih mudah untuk men-debug. Pemrograman procedural mengatur program dalam barisan-barisan linier yang bekerja dari atas ke bawah. Kumpulan tahapan yang dijalankan setelah yang lain berjalan. Baik untuk program kecil yang berisi sedikit code. Tidak dianjurkan diimplementasikan pada program berukuran besar, karena susah untk dimanage dan di-debug OOP mempunyai karakteristik sebagai berikut : a.
Abstraksi Menemukan hal-hal yang penting pada suatu
objek dan mengabaikan hal-hal yang sifatnya
insidental. b.
Enkapsulasi Pengkapsulan adalah proses pemaketan data objek bersama method-methodnya
c.
Pewarisan (Inheritance) Proses penciptaan kelas baru (subclass/kelas turunan) dengan mewarisi karakteristik dari kelas yang udah ada (superclass/kelas induk), ditambah karakteristik unik kelas baru itu.
d.
Reuseability Reuseability adalah kemampuan untuk menggunakan kembali kelas yang sudah ada.
e.
Polymorphism Polymorphism berasal dari bahasa Yunani yang berarti banyak bentuk.
VI - 1
Praktikum Algoritma dan Pemrograman Lanjut
2.
Kelas Suatu kelas (class) merupakan suatu metode logis untuk mengorganisasikan data dan fungsi didalam struktur yang sama. Objek merupakan penerjemahan dari subgroup-subgoup sehingga menjadi unit-unit. Suatu objek dalam bahasa C++ merupakan suatu variabel yang didefinisikan sendiri oleh pemrogram, yang berisi data dan kode program untuk memanipulasi data. Deklarasi Kelas (Class) : class nama_class { Data elemen_class Data elemen_class ………………………… Public : Data elemen_class Data elemen_class ………………………… }nama_object;
private; private;
public; public;
Contoh Deklarasi : class Motor //Nama Class { Public : //Tipe anggota data bersifat public, default private char merk[50]; char jenis[35]; //Nama anggota data float harga; int stock; }Motor Sport; //Pendefinisian object a.
Konstruktor Konstruktor merupakan suatu fungsi dari anggota suatu kelas yang mempunyai nama yang sama dengan kelas tempat fungsi itu berada. Konstruktor ini digunakan untuk mengalokasikan ruang untuk suatu objek dan memberikan nilai awal.
b. Destruktor Destruktor merupakan suatu fungsi anggota yang dijalankan secara otomatis ketika suatu objek akan terbebas dari memori karena lingkup keberadaannya telah menyelesaikan tugasnya. Destruktor harus mempunyai nama yang sama dengan kelas dan diawali dengan karakter tilde (~) atau karakter tak terhingga
VI - 2
Praktikum Algoritma dan Pemrograman Lanjut
3.
Inheritance (Pewarisan) Konsep yang mendasari Inheritance adalah Generalization. Generalization digambarkan sebagai hubungan dari subclass ke superclass, sedangkan Inheritance adalah proses pewarisan data dan behaviour (method) dari superclass ke subclass. Contoh :
Hewan adalah generalization dari Singa dan Elang. Sebaliknya, Singa dan Elang adalah inherits dari Hewan. Superclass
Subclass
Gambar VI.1. Pewarisan Hewan
Kendaraan Bermotor adalah generalization dari Mobil, Truk dan Sepeda Motor. Sebaliknya, Mobil, Truk dan Sepeda Motor adalah inherits dari Kendaraan Bermotor. Kendaraan Bermotor
Superclass
#Model #Thn Pembuatan +Bergerak()
Mobi -penumpang
Truk
Subclass
Sepeda Motor
-dayaAngkut +memuatBarang() +membongkarMuatan()
Gambar VI.2. Pewarisan Kendaraan Bermotor Akses pada inheritance ada tiga macam, yaitu : a.
Public Mengijinkan kelas dan sub kelas dari package manapun untuk mengaksesnya.
b.
Private Membatasi akses hanya untuk kelas itu sendiri dan objek yang diinstans darinya.
c.
Protected Akses hanya diberikan kepada kelas itu sendiri dan sub kelas yang diturunkan darinya.
VI - 3
Praktikum Algoritma dan Pemrograman Lanjut
4.
Polimorphisme Polimorphisme berasal dari bahasa Yunani yang berarti banyak bentuk. Konsep ini memungkinkan objek-objek objek yang berbeda memberikan respon terhadap suatu pesan yang sama dan sesuai dengan sifat masing-masing. masing. Dengan kemampuan seperti ini, jenis akses tertentu dapat ditera diterapkan dengan berbagai cara oleh objek-objek objek objek yang mempunyai tipe berbeda dan mempunyai banyak bentuk. Fungsi virtual merupakan dasar dari Polimorphisme. Fungsi Virtual / Virtual Function Polimorphisme didalam bahasa C++ bekerja hanya dengan pointer-pointer pointer pointer dan reference dengan hanya mendeklarasikan method sebagai virtual. Aturan fungsi virtual adalah sebagai berikut :
Virtual fungsi harus anggota kelas
Anggota kelas bukan anggota yang bersifat statis
Anggota kelas dapat diakses dengan pointer objek
Virtual Function tidak bisa memiliki virtual constructor, akan tetapi bisa memiliki virtual destructor
Gambar VI.3. Polimorphisme Bentuk
Gambar VI.4. Polimorphisme Print
VI - 4
Praktikum Algoritma dan Pemrograman Lanjut
III.
GUIDED 1.
Pemrograman Terstruktur #include
#include void helloWorld(int jmlh_looping)//Contoh Prosedur { for(int i=0;i<jmlh_looping;i++) { cout<
2.
Pemrograman OOP #include #include class DemoObjectOriented { public: void helloWorld(int jmlh_looping); int tambah(int bil1, int bil2); }; void DemoObjectOriented::helloWorld(int jmlh_looping) { for(int i=0;i<jmlh_looping;i++) { cout<
VI - 5
Praktikum Algoritma dan Pemrograman Lanjut
DemoObjectOriented Demo; //Pembentukan Objek cout<<endl; cout<<"-Display Hello World-"<<endl; Demo.helloWorld(jmlh_looping);//Pemanggilan Prosedur cout<<endl<<"-Pemanggilan Fungsi Tambah-"<<endl; //Pemanggilan Fungsi cout<<"Hasil Operasi Tambah : "<
Inheritance (Pewarisan) #include #include class Point // Kelas Point sebagai kelas induk { public: Point(float = 0.0, float = 0.0); //konstruktor default void cetakPoint(); //akan di-redefinisi di kelas anak ~Point(); //destruktor protected: float x,y; }; Point::Point(float a, float b) { cout<< "Konstruktor Point dijalankan "<<endl; x = a; y = b; } void Point::cetakPoint() { cout<< "Point : "<<'['<<x<<", "<
VI - 6
Praktikum Algoritma dan Pemrograman Lanjut
void Circle::cetakPoint() { Point::cetakPoint(); cout<< "Circle : radiusnya "<
Polimorphisme #include #include class Makhluk { public : //deklarasi fungsi virtual virtual void keterangan() { cout<<"keterangan() pada kelas Makhluk"<<endl; } }; class Mamalia:public Makhluk { public: void keterangan() { cout<<"keterangan() pada kelas Mamalia"<<endl; } }; class Sapi:public Mamalia { void keterangan() { cout<<"keterangan() pada kelas Sapi"<<endl; } }; int main() { //definisi objek mamalia Mamalia mamalia; //definisi objek sapi Sapi sapi;
VI - 7
Praktikum Algoritma dan Pemrograman Lanjut
//definisi pointer ke objek berkelas Makhluk Makhluk *binatang; //menunjuk ke objek mamalia binatang=&mamalia; binatang->keterangan(); cout<<"---------------------"<<endl; //menunjuk ke objek sapi binatang=&sapi; binatang->keterangan(); getch(); } IV.
UNGUIDED 1. Buatlah program dalam bahasa C++ dimana anda diminta untuk mengimplementasikan kasus operasi terhadap suatu Titik dalam konsep PBO. Buatlah kelas Titik dengan ketentuan sebagai berikut : a. Memiliki atribut x dan y b. Memiliki default konstruktor c. Memiliki method inisialisasiTitik (int x, int y), untuk mengeset nilai Titik sesuai masukan dari user d. Memilki method tampilTitik(), untuk menampilkan nilai Titik e. Memilki method perkalihanSkalar(int skalar), untuk mengalikan nilai Titik dengan suatu nilai skalar sesuai masukan dari user (x dan y dikalikan dengan nilai skalar ) f. Memiliki metod pencerminanSumbuX(), untuk melalukan pencerminan Titik terhadap sumbu X (nilai y menjadi negatif) g. Memiliki metod pencerminanSumbuY(), untuk melalukan pencerminan Titik terhadap sumbu Y (nilai x menjadi negatif) h. Memiliki method int jarak(Titik t2), untuk mencari jarak antara 2 buah titik, dengan rumus : jarak = (
−
) +(
−
)
2. Sebuah perusahaan Asuransi memiliki banyak pegawai antara lain Sales, Satpam dan Manajer dengan spesifikasi sebagai berikut : a. Setiap pegawai memiliki NIP, nama, alamat, dan tahun masuk kerja. b. Data satpam meliputi NIP, nama, alamat, gaji pokok dan jam lembur. c. Bonus diberikan bagi Satpam yang bersedia untuk lembur dengan perhitungan Rp.10.000/jam lembur. d. Data Sales meliputi NIP, nama, alamat, gaji pokok dan jumlah pelanggan yang berhasil direkrut. e. Komisi diberikan dengan perhitungan Rp.50.000 untuk setiap pelanggan yang berhasil direkrut. f. Data Manajer meliputi nama, alamat, gaji pokok,divisi dan tunjangan jabatan g. Tunjangan jabatan bagi Manajer diberikan jika telah bekerja selama 3 tahun sebesar 5% dari gaji pokok dan jika telah bekerja selama lebih dari 5 tahun sebesar 10% dari gaji pokok.
VI - 8
Praktikum Algoritma dan Pemrograman Lanjut
Buatlah sebuah Kelas Pegawai yang menjadi induk Kelas Satpam, Kelas Sales dan Kelas Manajer. Lalu implementasikan konsep inheritance untuk menghitung gaji akhir pegawai melalui method HitungGajiAkhir() dan menampilkan informasi data pegawai perusahaan Asuransi tersebut pada tahun 2016. Ketentuan:
Program diimplementasikan dalam bahasa C++
Data Satpam, Sales dan Manajer diinputkan melalui konstruktornya. Setelah itu semua data pegawai ditampilkan.
Gaji Akhir = GajiPokok + Bonus atau Komisi atau Tunjangan
Main Program dalam Bahasa C++ int main() { Satpam a; Sales b; ManajerCabang c; a.SetSatpam("Adi","0042",2000,"Jl. Itik 15",300000,5); b.SetSales("Budi","0185",2006,"Jl. Ayam 78",500000,10); c.SetManajerCabang("Udin","0005",1999,"Jl.Angsa56","Keuangan",1500 000); cout<<"====DISPLAY DATA KARYAWAN===="<<endl; a.cetakSatpam(); b.cetakSales(); c.cetakManajerCabang(); getch(); } 3. Dalam sebuah perusahaan, terdapat banyak employess, diantaranya Salaried Employee, Commission Employee, dan Project Planner. a.
Setiap Employee tersebut memiliki fungsi untuk menghitung gaji dan cetak informasi
b.
Salaried Employee memiliki atribut nama, nip, upah mingguan
c.
Commission Employee memiliki atribut nama, nip, gaji pokok, komisi dan total penjualan
d.
Project Planner memiliki atribut nama, nip, gaji pokok, komisi dan total hasil proyek
Setiap kelas harus memiliki konstruktor, fungsi untuk menghitung gaji setiap pegawai, dan fungsi untuk menampilkan informasi yang dimiliki setiap jenis employee. Fungsi hitung gajinya adalah :
Salaried Employee : gaji = upah mingguan
Commission Employee : gaji = gaji pokok + (komisi * total penjualan)
Project Planner : gaji = gaji pokok + (komisi * total hasil proyek) - pajak. Pajak dihitung 5 % dari gaji pokok.
Buatlah program tersebut dalam bahasa C++ menggunakan konsep polymorphism. Setiap kelas dibuat dalam file yang berbeda
VI - 9