MODUL VI OBJECT ORIENTED PROGRAMMING...
Transcript of MODUL VI OBJECT ORIENTED PROGRAMMING...
Praktikum Algoritma dan Pemrograman Lanjut
VI - 1
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.
Praktikum Algoritma dan Pemrograman Lanjut
VI - 2
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) :
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
class nama_class
{
Data elemen_class private;
Data elemen_class private;
…………………………
Public :
Data elemen_class public;
Data elemen_class public;
…………………………
}nama_object;
Praktikum Algoritma dan Pemrograman Lanjut
VI - 3
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.
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.
+Bergerak()
Kendaraan Bermotor
#Model#Thn Pembuatan
Mobi
-penumpang+memuatBarang()+membongkarMuatan()
Truk
-dayaAngkutSepeda 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.
Superclass
Subclass
Superclass
Subclass
Praktikum Algoritma dan Pemrograman
4. Polimorphisme
Polimorphisme berasal dari bahasa Yunani yang berarti
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 ditera
berbagai cara oleh objek
virtual merupakan dasar dari
Fungsi Virtual / Virtual Function
Polimorphisme didalam bahasa C++ bekerja hanya dengan pointer
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
Pemrograman Lanjut
berasal dari bahasa Yunani yang berarti banyak bentuk. Konsep ini memungkinkan
objek yang berbeda memberikan respon terhadap suatu pesan yang sama dan sesuai dengan
masing. Dengan kemampuan seperti ini, jenis akses tertentu dapat ditera
berbagai cara oleh objek-objek yang mempunyai tipe berbeda dan mempunyai banyak bentuk.
merupakan dasar dari Polimorphisme.
Fungsi Virtual / Virtual Function
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
tidak bisa memiliki virtual constructor, akan tetapi bisa memiliki virtual
Gambar VI.3. Polimorphisme Bentuk
Gambar VI.4. Polimorphisme Print
VI - 4
Konsep ini memungkinkan
objek yang berbeda memberikan respon terhadap suatu pesan yang sama dan sesuai dengan
masing. Dengan kemampuan seperti ini, jenis akses tertentu dapat diterapkan dengan
objek yang mempunyai tipe berbeda dan mempunyai banyak bentuk. Fungsi
pointer dan reference dengan
tidak bisa memiliki virtual constructor, akan tetapi bisa memiliki virtual
Praktikum Algoritma dan Pemrograman Lanjut
VI - 5
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 main() { int bil1=5,bil2=2; int jmlh_looping=5; cout<<endl; 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); cout<<endl; 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 main()
{
int bil1=5, bil2=2;
int jmlh_looping=5;
Praktikum Algoritma dan Pemrograman Lanjut
VI - 6
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 : "<<Demo.tambah(bil1,bil2);
cout<<endl;
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;
}
Praktikum Algoritma dan Pemrograman Lanjut
VI - 7
void Circle::cetakPoint()
{
Point::cetakPoint();
cout<< "Circle : radiusnya "<<radius<<endl;
}
Circle::~Circle() //destruktor
{
cout<< "Destruktor Circle dijalankan "<<endl;
}
int main()
{
Point p(1.1, 2.2); //Pembentukan Objek Point
cout<<endl;
Circle circle1(6.5, 8.2, 1.9); //Pembentukan Objek Circle
circle1.cetakPoint(); //Pemanggilan Method
cout<<endl;
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;
}
};
int main()
{
//definisi objek mamalia
Mamalia mamalia;
//definisi objek sapi
Sapi sapi;
Praktikum Algoritma dan Pemrograman Lanjut
VI - 8
//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.
Praktikum Algoritma dan Pemrograman Lanjut
VI - 9
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