MODUL VI OBJECT ORIENTED PROGRAMMING...

9
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.

Transcript of MODUL VI OBJECT ORIENTED PROGRAMMING...

Page 1: MODUL VI OBJECT ORIENTED PROGRAMMING (OOP)aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · berdasarkan objek-objek yang ada pada ... int tambah(int bil1,int

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.

Page 2: MODUL VI OBJECT ORIENTED PROGRAMMING (OOP)aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · berdasarkan objek-objek yang ada pada ... int tambah(int bil1,int

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;

Page 3: MODUL VI OBJECT ORIENTED PROGRAMMING (OOP)aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · berdasarkan objek-objek yang ada pada ... int tambah(int bil1,int

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

Page 4: MODUL VI OBJECT ORIENTED PROGRAMMING (OOP)aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · berdasarkan objek-objek yang ada pada ... int tambah(int bil1,int

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

Page 5: MODUL VI OBJECT ORIENTED PROGRAMMING (OOP)aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · berdasarkan objek-objek yang ada pada ... int tambah(int bil1,int

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;

Page 6: MODUL VI OBJECT ORIENTED PROGRAMMING (OOP)aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · berdasarkan objek-objek yang ada pada ... int tambah(int bil1,int

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;

}

Page 7: MODUL VI OBJECT ORIENTED PROGRAMMING (OOP)aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · berdasarkan objek-objek yang ada pada ... int tambah(int bil1,int

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;

Page 8: MODUL VI OBJECT ORIENTED PROGRAMMING (OOP)aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · berdasarkan objek-objek yang ada pada ... int tambah(int bil1,int

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.

Page 9: MODUL VI OBJECT ORIENTED PROGRAMMING (OOP)aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · berdasarkan objek-objek yang ada pada ... int tambah(int bil1,int

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