Anda di halaman 1dari 28

LAPORAN HASIL PRATIKUM

ALGORITMA DAN PEMROGRAMAN II

Nama

: WANDY SUPRIADI

NIM

: DBC 114 121

Kelas

: F

Modul

: III ( POLIMORFISME )

JURUSAN TEKNIK INFORMATIKA


FAKULTAS TEKNIK
UNIVERSITAS PALANGKARAYA
2015
BAB I
TUJUAN DAN LANDASAN TEORI
1. Tujuan

Setelah menyelesaikan modul ini, mahasiswa diharapkan mampu membuat


polimorfisme.
2. Landasan Teori
Polimorfisme Memiliki arti "banyak bentuk", melakukan hal yang sama untuk
berbagai data yang berbeda, mengirimkan pesan yang sama ke berbagai objek
yang berbeda karena tiap objek memberi respons dengan cara yang berbeda.
Berikut ini merupakan contoh polimorfisme.

Luas
Bentuk

Segitiga
Luas

Lingkaran
Luas

Bujursangkar

Luas

Polimorfisme memiliki syarat-syarat sebagai berikut:


Ada hirarki pewarisan
Kelas dalam hirarki pewarisan barus memiliki fungsi virtual (virtual method)
dengan signature yang sama.
Menggunakan pointer atau rujukan ke kelas induk. Pointer digunakan

untuk

memanggil fungsi virtual


Polimorfisme dapat diimplementasikan dengan menggunakan dasar function
overriding (melakukan redefinisi suatu fungsi di kelas anak, fungsi yang dioverride memiliki signature sama, signature sama : tipe batik, nama fungsi,
parameter sama) dan pewarisan.
Suatu kelas disebut abstrak apabila memiliki minimal satu fungsi abstrak. Fungsi
abstrak merupakan fungsi yang tidak memiliki definisi (hanya deklarasi
fungsi)/menggunakan fungsi virtual (pure virtual).

Virtual balikan namaFungsi (parameter) = 0

BAB II
LANGKAH KERJA
1. Buatlah program seperti dibawah ini!
1 Manusia.h
#ifndef MANUSIA_H
#define MANUSIA_H class Manusia {
class Manusia {
public:
virtual void Hello();
};
class Pelajar : public Manusia {
public:
void Hello();
}:
class Pegawai : public Manusia {
public:

void Hello();
};
#endif
Manusia.cpp
#include "Manusia.h"
#include <iostream.h>
void Manusia::Hello() {
cout <<"Hallo ..."<< endl;
}
void Pelajar::Hello() {
cout <<"Hallo, Saya Pelajar ..."<< endl;
}
void Pegawai::Hello() {
cout <<"Hallo, Saya Pegawai ...."<< endl;
}
MPoli.cpp
#include "Manusia.h"
#include <iostream.h>
#include <stdlib.h>
int main(} {
Manusia* m;
int pilihan;
do {
cout <<"1: Manusia, 2: Pelajar, 3: Pegawai >>
cin >> pilihan;
} while ( pilihan < 1 || pilihan > 3;
switch ( pilihan ) {
case 1: m = new Manusia; break;
case 2: m = new Pelajar; break;
case 3: m = new Pegawai; break;
}
m->Hello();
delete m;
return 0;
}
2. Buatlah program seperti di bawah ini!
Bentuk2D.h
#ifndef BENTUK2D_H
#define BENTUK2D_H
class Bentuk2D {
public:

virtual float cariLuas()=0;


};
class Segiempat : public Bentuk2D {
protected:
float panjang, lebar;
public:
Segiempat(float, float);
float cariLuas();
};
class Lingkaran : public Bentuk2D {
private:
float jejari;
public:
Lingkaran (float);
float cariLuas();
};
class Segitiga : public Bentuk2D f private:
float alas, tinggi;
public:
Segitiga(float, float);
float cariLuas();
#endif

#include <iostream.h>
#include "Bentuk2D.h"
Segiempat::Segiempat(float p, float l)
{
panjang = p;
lebar = l;
}
float Segiempat:: cariLuas()
{
cout << "Luas segiempat : << panjang*lebar << endl;
}
Lingkaran::Lingkaran (float r)
{
jejari = r;
}
float Lingkaran:: cariLuas()
{
cout << "Luas lingkaran : << 3.4*jejari*jejari <<
}

endl;

Segitiqa::Segitiga(float a, float t)
{
alas = a;
tinggi = t;
}
float Segitiga:: cariLuas()
{
cout << "Luas Segitiga : << 0.5*alas*tinggi << endl;
}
MAbstrak.cpp
#include "Bentuk2D.h"
#include <iostream.h>
#include <stdlib.h>
int main() {
Bentuk2D* b2d;
bool loop = true;
int pilihan;
do {
cout <<"1: Segiempat, 2: Lingkaran, 3: Segitiga >> ;
cin >> pilihan;
} while ( pilihan < 1 || pilihan > 3 );
Switch ( pilihan ) {
case 1: b2d = new Segiempat(4.0, 5.0); break;
case2: b2d = new Lingkaran (7.0); break;
case 3: b2d = new Segitiga (2.0, 10.0); break;
case4: loop= false;
}
b2d->cariLuas();
delete b2d;
return 0;
}
3. Buatlah program seperti dibawah ini!
shape.h
#ifndef SHAPE_H
#define SHAPE_H
class Shape {
public:
virtual double area() const { return 0.0; }
virtual double volume() const { return 0.0; }

virtual void printShapeName() const = 0;


virtual void print() const = 0;
};
#endif
Point1.h
#ifndef POINT1_H
#define POINT1_H
#include <iostream>
#include "shape.h"
class Point : public Shape {
public:
Point( int = 0, int = 0 );
void setPoint( int, int );
int getXO() const { return x; }
int getYO() const { return y; }
virtual void printShapeName() const { cout << "Point: ; }
virtual void print() const;
Private:
int x, y;
};
#endif
pointl.cpp
#include "pointl.h"
Point::Point( int a, int b) { setPoint ( a, b ); }
void Point::setPoint( int a, int b )
{
X = a;
Y = b;
}
void Point::print() const
{ cout << ' [' << x << ", " << y << ]; }
circlel.h
#ifnde CIRCLE1_H
#define CIRCLE1_H
#include "point1.h"
class Circle : public Point {
public:
Circle( double r = 0.0, int x = 0, int y = 0 );

void setRadius( double );


double getRadius() const;
virtual double area() const;
virtual void printShapeName() const cout << "Circle: ; }
virtual
void print{} const;
private:
double radius;
};
#ifendif
circle1.cpp
#include <iostream>
#include "circlel.h"
Circle::Circle( double r, int a, int b )
: Point( a, b )
{ setRadius( r ); }
void Circle::setRadius( double r ) { radius = r > 0 ? r: 0; }
double Circle::getRadius() const { return radius; }
double Circle::getRadius() const
{ return 3.14159*radius*radius; }
void Circle::print() const
{
Point::print();
cout << "; Radius = << radius;
}
main.cpp
#include <iostream>
#include <stdlib.h>
#include "shape.h"
#include "point1.h"
#include "circle1.h"
#include "cylindr1.h"
void virtualViaPointer ( const Shape * );
int main()
}
Point point( 7, 11 );
Circle circle( 3.5, 22, 8 );

// create a Point
// create a Circle

point.printShapeName();
point.printo();

// static binding
// static binding

cout << 1\n';


circle.printShapeName();
circle.printo();
cout << ' \n' ;

// static binding
// static binding

cout << "Virtual function calls made off


<< "base-class pointers\n";
for ( int i = 0; i < 2; i++ )
virtualViaPointer( arrayOfShapes[ i ] );
return 0;
}
void virtualViaPointer( const Shape *baseClassPtr )
{
baseClassPtr->printShapeName();
baseClassPtr->print();
cout << "\nArea = " << baseClassPtr->area()
<< "\volume = << baseClassPtr->volume() <<"\n\n";
}

BAB III
PEMBAHASAN
Program pertama di atas terdiri dari 3 file, yaitu 1 file header, dan 2 file source.
Dan diberi nama Manusia.h, Manusia.cpp, MPoli.cpp.

KET :
Pada program

manusia.h,

coding

program

diawali

dengan

penulisan

#include<iostream.h> . include sendiri adalah salah satu pengarah prepoceccor


directive yang selalu dijalankan terlebih dahulu pada saat proses kompilasi terjadi.
Coding include tidak diakhiri dengan tanda (;), karena bentuk tersebut bukanlah
suatu bentuk pernyataan, tetapi merupakan prepocessor directive. Coding tersebut
diakhiri dengan ekstensi .h (file header) yaitu file yang berisi sebagai deklarasi.
#ifndef : pengarah compiler yang sering digunakan untuk menandai
bahwa suatu file sudah diikutsertakan dalam kompilasi. Dan pada program
tersebut, filenya adalah MANUSIA.H
#define : untuk mendefinisikan suatu pengenal / konstanta yang nantinya
akan digantikan oleh praprosesor saat program dikompilasi.
Public adalah suatu tipe akses yang dapat diakses diluar class,sedangkan private
diakses didalam class.
Pada program diatas terdapat 3 kelas yaitu kelas Manusia, Pelajar, Pegawai. Dan
kelas utama pada program ini adalah kelas Manusia.
Pada kelas utama yaitu Manusia, menggunakan fungsi virtual, yaitu virtual void
Hello();. Fungsi virtual ini adalah pendefinisian ulang pada kelas-kelas
turunannya. Jadi yang di ulang pada program ini adalah variabel Hello() yang
bertipe void (merupakan nilai dari suatu variabel dan tidak bertipe data).

Pada penulisan class Pelajar : public Manusia dan class Pegawai : public
Manusia , menandakan bahwa kelas Pelajar dan kelas Pegawai merupakan kelas
turunan dari kelas Manusia.
Pada kedua kelas turunan tersebut menggunakan variabel void hello(); dari kelas
induk kelas Manusia. Dan ketiga kelas ini menggunakan perubah akses (anggota
kelas) public.

KET :
Pada program manusia.cpp diatas, #include Manusia.h berfungsi untuk
memasukkan file header Manusia.h ke dalam Manusia.cpp .
Pernyataan #include<iostream.h> .diperlukan untuk melibatkan objek cout
( digunakan pada proses input dan output).
Pada penulisan void Manusia::Hello() , void Pelajar::Hello() , void
Pegawai::Hello() yang menggunakan fungsi COUT untuk menampilkan masingmasing perintah yang ada pada script.

KET :
Pada bagian program Mpoli.cpp yang merupakan program utama ini terdapat
kekurangan dalam memberi masukan file lain. Jadi kita tambahkan fungsi

#include "Manusia.cpp" untuk mengincludekan file Manusia.cpp yang kita buat


sebelumnya. Dan fungsi #include <stdlib.h> adalah fungsi file header yang
meliputi alokasi memori, kontrol proses, konversi dan lain-lain.
Int main () berfungsi sebagai penanda program utama. Suatu program pada C++
harus memiliki sebuah main. Main diikuti tanda () karena main merupakan
sebuah fungsi.
Pada penulisan Manusia* m; , tanda bintang (*) pada Manusia disebut pointer.
Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori dari
suatu variabel lain. Alamat ini merupakan lokasi dari obyek lain (biasanya
variabel lain) di dalam memori. Dalam hal ini pointer menunjuk kelas Manusia,
jadi pointer ini menghasilkan nilai yang berada pada kelas alamat yaitu variabel
void Hello().
Pada program utama ini di buat variabel baru yaitu variabel pilihan yang bertipe
integer (int piihan). Variabel ini digunakan untuk variabel inputan untuk memilih
pilihan pada penulisan berikut :

struktur dowhile, digunakan pada pengulangan yang dilakukan pada fungsi


Cout yaitu << "1: Manusia, 2: Pelajar, 3: Pegawai >> ; dan fungsi CIN untuk
menggunakan variabel pilihan sebagai variabel inputan.
Pada penggunaan, while ( pilihan < 1 || pilihan > 3; , pengulangan akan terus
dilakukan apabila inputan yang dimasukkan kurang dari 1 atau lebih dari 3.

KET :
Pada saat variabel pilihan ditentukan nilainya, maka akan terpilih sesuai isi
yang ada pada fungsi dari Switch.

KET :
pointer m mengarah kepada fungsi Hello() yang ada pada pilihan yang telah
ditentukan.Pada saat kita memasukan angka 2, maka akan di eksekusi untuk
menuju ke kelas Pelajar yang berisi perintah "Hallo, Saya Pelajar ...". Dan
fungsi delete berfungsi untuk menghapus memori yang tersimpan pada saat
program selesai di jalankan, maka apabila terhapus ruang di memori

dapat

digunakan untuk keperluan yang lainnya. return 0; digunakan untuk


mengembalikan nilai fungsi, dan nilai balikannya adalah 0.
Pada program kedua terdiri dari 3 file, 1 file header, dan 2 file source. Dan diberi
nama Bentuk2D.h, Bentuk2D.cpp, MAbstrak.cpp.

KET :
Pada awal program Bentuk2D.h fungsi dari #indef, #define telah dijelaskan
diatas tapi yang berbeda adalah file yang sudah diikutsertakan saat kompilasi
tersebut adalah BENTUK2D_H.

Pada program ini terdapat 4 kelas yaitu kelas Bentuk2D, Segiempat, Lingkaran,
dan Segitiga. Dan kelas utama pada program ini adalah kelas Bentuk2D. Pada
langkah kerja program kedua, variabel cariLuas adalah bertipe float (bilangan
pecahan), tapi diganti menjadi bertipe void, karena melakukan percetakan sebuah
data, maka tipe void lah yang cocok untuk digunakan.
Pada kelas utama yaitu Bentuk2D, menggunakan fungsi virtual, yaitu virtual void
cariLuas()=0;. penggunaan Fungsi virtual ini adalah pendefinisian ulang pada
kelas-kelas turunannya. Jadi yang di ulang pada program ini adalah variabel
cariLuas() yang bertipe void.
Pada kelas turunan class Segiempat : public Bentuk2D, terdapat dua tipe perubah
akses (anggota kelas) yaitu protected dan public. Dalam protected terdapat
variabel panjang dan lebar yang bertipe float. Dan di dalam public terdapat
konstruktor Segiempat(float, float); dan void cariLuas(); yang berasal dari kelas
induk Bentuk2D.
Pada kelas turunan class Lingkaran : public Bentuk2D, terdapat dua tipe perubah
akses (anggota kelas) yaitu private dan public. Pada private terdapat variabel
jejari yang bertipe float. Dan di dalam public terdapat konstruktor
Lingkaran(float); dan void cariLuas(); yang berasal dari kelas induk Bentuk2D.
Pada kelas turunan class Segitiga : public Bentuk2D, terdapat dua tipe perubah
akses (anggota kelas) yaitu private dan public. Dalam private terdapat variabel
alas dan tinggi yang bertipe float. Dan di dalam public terdapat konstruktor
Segitiga(float, float); dan void cariLuas(); yang berasal dari kelas induk
Bentuk2D.

KET :
Pada program Bentuk2D.cpp diatas, penulisan Segiempat::Segiempat(float p,
float l) ini adalah bagian konstruktor Segiempat dengan nilai berurutan p dan l
yang bertipe float. Bagian ini berisi variabel panjang yang dinyatakan dengan p
dan variabel lebar yang dinyatakan dengan l.
Fungsi dari float Segiempat:: cariLuas() adalah perintah yang akan
menampilkan hasil nilai luas Segiempat dari rumus panjang * lebar.
Pada penulisan Lingkaran::Lingkaran(float r) merupakan bagian dari konstruktor
Lingkaran dengan komponennya adalah r yang bertipe float. Bagian ini berisi
variabel jejari yang dinisialisasi sama dengan r.
Fungsi dari float Lingkaran:: cariLuas() adalah perintah yang akan
menampilkan hasil nilai luas Lingkaran dari rumus 3.14 * jejari * jejari.
Pada penulisan Segitiga::Segitiga(float a, float t) merupakan bagian dari
konstruktor Segitiga dengan komponen berurutan a, t yang bertipe float. Bagian
ini berisi variabel alas yang dinyatakan dengan a dan variabel tinggi yang
dinyatakan dengan t.
Fungsi dari float Segitiga:: cariLuas() adalah perintah yang akan menampilkan
hasil nilai luas Segitiga dari rumus 0.5 * alas * tinggi.

KET :
Pada program Mabstrak.cpp, fungsi dari #include <stdlib.h> adalah fungsi file
header yang meliputi alokasi memori, kontrol proses, konversi dan lain-lain.
fungsi int main ()sebagai penanda program utama. Suatu program pada C++
harus memiliki sebuah main. Main diikuti tanda () karena main merupakan
sebuah fungsi.
Pada coding Bentuk2D* b2d; , tanda bintang(*) pada Bentuk2D disebut pointer.
Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori dari
suatu variabel lain. Alamat ini merupakan lokasi dari obyek lain (biasanya
variabel lain) di dalam memori. Dalam hal ini pointer menunjuk kelas Bentuk2D,
jadi pointer ini menghasilkan nilai yang berada pada kelas alamat yaitu variabel
void cariLuas().
Pada program utama ini di buat variabel baru yaitu variabel pilihan yang bertipe
integer (bilangan bulat) dan loop yang bertipe Boolean (menyatakan
true/false) yang bernilai true. Variabel ini digunakan untuk variabel inputan untuk
memilih pilihan pada :

Pada pengulangan menggunakan struktur dowhile, dan pengulangan yang


dilakukan adalah perinaht pada fungsi cout yaitu <<"1: Segiempat, 2: Lingkaran,
3: Segitiga >> , dan fungsi Cin untuk menggunakan variabel pilihan sebagai
variabel inputan.
Pada struktur while, while ( pilihan < 1 || pilihan > 3; , pengulangan akan terus
dilakukan apabila inputan yang dimasukkan kurang dari 1 atau lebih dari 3.
Pada bagian switch(pilihan), Setelah variabel pilihan ditentukan nilainya, maka
akan terpilih sesuai isi yang ada pada struktur switch. Pada pilihan ini sudah terisi
nilai-nilai pada masing-masing variabel kelasnya.

pointer b2d mengarah kepada fungsi cariLuas() yang ada pada pilihan yang kita
tentukan.
Pada saat kita memasukan 2, maka akan di eksekusi untuk menuju ke kelas
lingkaran yang berisi argument nilai Luas Lingkaran yang di dapat dari rumus di
dalamnya.
fungsi delete di atas digunakan untuk menghapus memori yang tersimpan pada
saat program selesai di jalankan, sehingga apabila terhapus ruang di memori
dapat digunakan untuk keperluan yang lainnya.
return 0; digunakan untuk mengembalikan nilai fungsi, dan nilai balikannya
adalah 0.
Pada program ketiga terdiri dari 6 file, terdiri dari 3 buah file header, dan 3 buah
source file. pada coding program, terdapat beberapa kesalahan. Agar program
dapat berjalan, maka ada perbaikan pada coding program Antara lain pada
pengisian file header yang akan digunakan. Pada point1.h, circle1.cpp, main.cpp
terdapat #include<iostream>. Coding tersebut tidak dapat digunakan karena tidak

ada ekstensi .h (header) di bagian sesudah iostream-nya sehingga program tidak


dapat berjalan. Selain itu, pada bagian main.cpp, terdapat pemanggilan terhadap
fungsi cylinder.h sedangkan pada coding program di modul tidak terdapat
source file untuk cylinder. Jadi pada pemanggilan terhadap cylinder dihilangkan.
1. file Shape.h yang berisikan sebuah deklarasi kelas induk (dasar) program. Coding
yang terdapat pada file header ini berisikan deklarasi kelas, yaitu kelas shape
yang merupakan kelas dasar dari kelas point yang ada. Attribute yang digunakan
dari fungsi pada coding yang terdapat pada file header ini merupakan fungsi
virtual yang merupakan fungsi virtual murni karena tidak mempunyai definisi
sama sekali. Agar Fungsi yang terdapat pada kelas induk dapat di override
(mengimplementasikan polimorfisme) oleh kelas turunannya, maka fungsi
tersebut harus bersifat virtual dan untuk melakukan ini adalah dengan
menambahkan keyword virtual di depan nama fungsinya.
2. file point1.h merupakan kelas turunan dari kelas kelas shape.h. Coding pada file
header ini berisikan kelas point yang merupakan kelas turunan dari kelas shape,
dan attribute yang digunakan memiliki fungsi virtual. Pada coding :

getX dan getY digunakan untuk memberikan nilai pada saat program dijalankan
dengan melalui variable yang telah ditentukan.
3. Program point1.cpp mempunyai sebuah fungsi (method) yang berasal dari kelas
point.

Terdapat x=a, dan x=b ini menandakan bahwa untuk nilai x diisi dengan nilai
yang telah ditentukan pada nilai a, serta nilai yang terdapat pada y adalah nilai
yang dihasilkan atau sama dengan nilai yang terdapat pada b.
4. Pada program circle1.h berisikan deklarasi kelas yang berasal dari kelas turunan
point (kelas Circle). Attribute pada kelas ini memiliki fungsi virtual yang berguna
untuk mengakses fungsi sebelumnya.
5. Circle1.cpp nilai menuju source file dan berisikan fungsi-fungsi yang berasal
dari kelas circle. fungsi-fungsi yang diakses oleh kelas circle terhadap fungsi
virtual pada dekalrasi kelas sebelumnya. Pada file ini, terdapat rumus untuk
perhitungan yang berguna untuk memberikan nilai pada saat program 3 ini
dijalankan.
6. main.cpp merupakan sebuah progam utama dari keseluruhan file pada program
ketiga ini.

KET :
Pada code program di atas, nilai telah ditentukan terlebih dahulu atau nilainya
sudah tertanam pada tubuh program sehingga hasil yang akan dicetak adalah
bernilai tetap, sesuai dengan apa yang telah dibuat pada program.
Fungsi i++ digunakan untuk menambahkan operand dengan nilai 1 (increment).
[ i ] digunakan untuk untuk mengindikasikan sebuah matrik satu atau
multidimensi.
BAB IV
KESIMPULAN
polimorfisme, apabila salah satu nilai variabel pada salah satu kelas, maka output
yang dihasilkan tidak mempengaruhi output semua kelas, tetapi hanya pada kelas
yang memuat nilai variabel tersebut.
Pada polimorfisme menggunakan fungsi virtual, Fungsi virtual ini adalah
pendefinisian ulang pada kelas-kelas turunannya.
Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori dari
suatu variabel lain. Alamat ini merupakan lokasi dari obyek lain (biasanya
variabel lain) di dalam memori.
Untuk melakukan pengulangan dapat menggunakan fungsi dari dowhile
switch .
Tanda -> digunakan untuk mengarahkan pointer kepada fungsi virtual yang telah
di tentukan pada pengulangan struktur dowhile switch.

BAB V
DAFTAR PUSTAKA
Modul Praktikum Algoritma dan Pemrograman II. Palangka Raya: Universitas
Palangka Raya Fakultas Teknik Jurusan Teknik Informatika. 2015.

BAB VI
LAMPIRAN
1. Program pada langkah kerja pertama :
Manusia.h :

Manusia.cpp :

MPoli.cpp :

Outputnya:

2. Program pada langkah kerja kedua:


Bentuk2D.h :

Bentuk2D.cpp :

Mabstrak.cpp :

Outputnya:

3. Program pada langkah kerja ketiga :


shape.h :

point1.h :

point1.cpp :

circle1.h :

circle1.cpp :

main.cpp :

Outputnya :

Anda mungkin juga menyukai