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
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 private; Data elemen_class private; Public : Data elemen_class public; Data elemen_class public; nama_object; 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
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 #Model #Thn Pembuatan +Bergerak() Superclass Subclass Mobi -penumpang Truk -dayaangkut +memuatbarang() +membongkarmuatan() Sepeda Motor 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
4. Polimorphisme Polimorphisme berasal dari bahasa Yunani yang berarti banyak bentuk. Konsep ini memungkinkan objek-objek yang berbeda memberikan respon terhadap suatu pesan yang sama dan sesuai dengan sifat masing-masing. Dengan kemampuan seperti ini, jenis akses tertentu dapat diterapkan dengan berbagai cara oleh 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 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
III. GUIDED 1. Pemrograman Terstruktur #include <iostream.h> #include <conio.h> void helloworld(int jmlh_looping)//contoh Prosedur for(int i=0;i<jmlh_looping;i++) cout<<i+1<<". Hello World..."<<endl; int tambah(int bil1,int bil2)//contoh Fungsi return(bil1+bil2); int bil1=5,bil2=2; int jmlh_looping=5; cout<<"-display Hello World-"<<endl; helloworld(jmlh_looping);//pemanggilan Prosedur cout<<endl<<"-pemanggilan Fungsi Tambah-"<<endl; //Pemanggilan Fungsi cout<<"hasil Operasi Tambah : "<<tambah(bil1, bil2); return 0; 2. Pemrograman OOP #include <iostream> #include <conio.h> 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<<i+1<<". Hello World..."<<endl; int DemoObjectOriented::tambah(int bil1, int bil2) return(bil1+bil2); int bil1=5, bil2=2; int jmlh_looping=5; VI - 5
DemoObjectOriented Demo; //Pembentukan Objek cout<<"-display Hello World-"<<endl; Demo.helloWorld(jmlh_looping);//Pemanggilan Prosedur cout<<endl<<"-pemanggilan Fungsi Tambah-"<<endl; //Pemanggilan Fungsi cout<<"hasil Operasi Tambah : "<<Demo.tambah(bil1,bil2); return 0; 3. Inheritance (Pewarisan) #include<iostream.h> #include<conio.h> 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<<", "<<y<<']'<<endl; Point::~Point() cout<< "Destruktor Point dijalankan"<<endl; // Kelas Circle : Merupakan kelas turunan dari kelas Point class Circle : public Point public: Circle(float r=0.0,float x=0.0,float y = 0.0); //konstruktor void cetakpoint(); //redefinisi fungsi kelas induk ~Circle(); //destruktor private: float radius; ; Circle::Circle(float r,float a,float b): Point(a, b) // memanggil konstruktor kelas induk dan inisialisasi data member warisan cout<< "Konstruktor Circle dijalankan"<<endl; radius = r; VI - 6
void Circle::cetakPoint() Point::cetakPoint(); cout<< "Circle : radiusnya "<<radius<<endl; Circle::~Circle() //destruktor cout<< "Destruktor Circle dijalankan "<<endl; Point p(1.1, 2.2); //Pembentukan Objek Point Circle circle1(6.5, 8.2, 1.9); //Pembentukan Objek Circle circle1.cetakpoint(); //Pemanggilan Method Circle circle2(10, 5, 5); circle2.cetakpoint(); getch(); 4. Polimorphisme #include <iostream.h> #include <conio.h> 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; ; //definisi objek mamalia Mamalia mamalia; //definisi objek sapi Sapi sapi; VI - 7
//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
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++ 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