Anda di halaman 1dari 31

LAPORAN AKHIR PRAKTIKUM

ALGORITMA DAN PEMPROGRAMAN II

NAMA

: SUPRIYANDI

NIM

: DBC 113 170

KELAS

:D

MODUL

: III (Polimorfisme)

JURUSAN TEKNIK INFORMATIKA


FAKULTAS TEKNIK
UNIVERSITAS PALANGKA RAYA
2014

BAB I
TUJUAN DAN LANDASAN TEORI

I. TUJUAN
Setelah menyelesaikan modul ini, mahasiswa diharapkan mampu membuat
polimorfisme.
II. LANDASAN TEORI
Polimorfisme memiliki arti banyak bentuk, melalui 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.

Bentuk
luas

Segitiga

Lingkaran

BujurSangkar

luas

luas

luas

Polimorfisme memiliki syarat-syarat sebagai berikut :

Ada hirarki pewarisan.

Kelas dalam hirarki pewarisan harus 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 di-override memiliki signature sama, : tipe balik, 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) atau menggunakan fungsi virtual (pure virtual).
virtual

balikan namaFungsi (parameter) = 0

BAB II
LANGKAH KERJA

1. Buatlah program seperti di bawah ini!


#ifndef MANUSIA_H
#define MANUSIA_H
Class Manusia {
public:
virtual void Hello ();
};
Class Pelajar : public Manusia {
Pulic:
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 BENTUK_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 ();
};
#endif

Bentuk2D.cpp
#include<iostream.h>
#includeBentuk2D.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;
Segitiga::Segitiga(float a, float t)
{
alas = a;
tinggi = t;
}
Float Segitiga:;cariLuas()
{
Cout<<Luas Segitiga : << 0.5 * alas *tinggi<<endl;
}

MAbstak.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;
Case 2:b2d = new Lingkaran (7.0 );break;
Case 3:b2d = new Segitiga (2.0, 10.0); break;
Case 4:loop = false;
}
b2d->cariLuas ();
delete b2d;
return 0;
}

3. Buatlah program seperti di bawah 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>
#includeshape.h

class point : public Shape {


Public:
Point (int = 0, int = 0 );
Void setPoint (int, int );

Int getX() const { return x; }


Int getY() const { return y; }
Virtual void printShapeName () const { cout<<Point:; }
Virtual void print () const;
Private:
Int x, y;
};
#endif

Point1.cpp
#includepoint1.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<<];}

Circle1.h
#ifndef CIRCLE1_H
#define CIRCLE_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;
};
#endif

Circle1.cpp
#include<iostream>
#includecircle1.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::area() const { return radius; }
double Circle::area () const
{return 3.14159 * radius *radius; }
Void Circle::print () const
{
Point::print ();
Cout<<; Radius = << radius ;
}

Main.cpp
#include<iostream>
#include<stdlib.h>
#includeshape.h
#includepoint.h
#includecircle1.h
#includecylindr1.h
Void virtual1ViaPointer ( const Shape * );
Int main()
{
Point point(7, 11);

//create a point

Circle circle (3.5, 22, 8);

//create a Circle

Point.printShapeName();

//static binding

Point.print ();

//static binding

Cout<< \n;
Circle.printShapeName ();

// static binding

Circle.print () ;

// static binding

Cout<< \n;
Shape *array0fShapes [ 2 ]; // array of base-class pointers
array0fShapes [ 0 ] = &point;
array0fShapes [ 1 ] =&circle;
cout<< Virtual function calls made off
<<base-class pointers\n;
For ( int i = 0; i< 2; i++ )
Virtualviapointer (array0fShapes [ i] );
return 0;
}
Void virtualViapointer ( const shape *baseClassptr )
{
baseClassPtr->printShapeName();
baseClass->print ();
cout<<\nArea = << baseClassPtr->area()
<<nVolume = << baseClassPtr->volume() << \n\n;
}

BAB III
PEMBAHASAN

1.

Program Pertama :

Tujuan dari pembuatan program ini adalah untuk membuat kelompok


manusia, pegawai dan pelajar serta mengirimkan pesan kepada berbagai
objek yang berbeda (Polimorfisme). Pada saat kita memilih kelompok
manusia maka secara otomatis akan tampil kalimat Hallo pada
outputnya, itu menandakan bahwa orang tersebut adalah kelompok dari
masyarakat, dan seterusnya. Fungsi virtual adalah fungsi yang mendukung
adanya polymorphic function, artinta fungsi tersebut dapat didefinisikan ulang
pada kelas-kelas turunannya. Dalam C++ untuk mendefinisikan fungsi
sabagai fungsi virtual adalah dengan menggunakan kata kunci virtual, yaitu
dengan menempatkannya di depan pendeklarasian fungsi tersebut.

Program pertama ini mengalami error atau terjadi kesalahan pada


program MPoli.cpp tersebut.

#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;
}

Dalam coding MPoli.cpp di atas tidak ada pemanggilan untuk


Manusia.cpp untuk menampilkan hasil dari inputan pada outputnya.

#include "Manusia.h"
#include <iostream.h>
#include <stdlib.h>
#include "Manusia.cpp"
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;
}

Manusia.cpp dan MPoli.cpp sangat erat hubungannya, MPoli.cpp juga


berhubungan dengan Manusia.h. Jadi, apabila dalam MPoli.cpp tidak ada
salah satu pun Manusia.cpp dan Manusia.h tidak dipanggil, maka program
tersebut akan terjadi error atau terjadi kesalahan. Untuk proses penampilan
pada outputnya setelah melakukan pilihan adalah :

void Manusia::Hello() {
cout <<"Hallo ..."<< endl;
}
void Pelajar::Hello() {
cout <<"Hallo, Saya Pelajar ..."<< endl;
}
void Pegawai::Hello() {
cout <<"Hallo, Saya Pegawai ...."<< endl;
}

Proses switch ( pilihan ) adalah untuk masukkan pilihan yang telah


tersedia dalam coding yang telah dibuat.

2.

Program Kedua :

Tujuan dari pembuatan program ini adalah untuk membuat kelompok


segiempat, lingkaran dan segitiga serta mengirimkan pesan kepada berbagai
objek yang berbeda (Polimorfisme). Program ini hampir sama dengan
program pertama, perbedaannya kalau program pertama menampilkan
kalimat, sedangkan program kedua menampilkan hitungan luas. Pada
program kedua ini terdapat kesalahan atau error pada coding Bentuk2D.cpp
dan MAbstrak.cpp. kata yang harus ditambah pada Bentuk2D.cpp adalah
return 0;, sedangkan pada MAbstrak.cpp adalah pemanggilan Bentuk2D.cpp
yaitu #include "Bentuk2D.cpp".

Coding MAbstrak.cpp untuk memanggil segiempat, lingkaran dan


segitiga pada program kedua adalah :

#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;
case 2: b2d = new Lingkaran (7.0); break;
case 3: b2d = new Segitiga (2.0, 10.0); break;
case 4: loop = false;
}
b2d->cariLuas();
delete b2d;
return 0;
}

Maksud dari case 4: loop = false; adalah jika kita masukkan angka 4
pada outputnya, maka masukkan tersebut tidak dapat dibaca atau dianggap
salah, dan akan program tersebut akan meminta masukkan lagi nomor 1, atau
nomor 2, atau juga nomor 3.

Maksud dari switch ( pilihan ) adalah untuk memproses pilihan nomor


1, nomor 2, nomor 3 dan nomor 4. Untuk nomor 4 tidak dibaca atau dianggap
salah.
Maksud dari penambahan return 0; adalah mengembalikan nilai balikan
dari nilai segiempat, lingkaran dan segitiga.

Untuk proses masukkan pilihan kelompok adalah :

switch ( pilihan ) {
case 1: b2d = new Segiempat(4.0, 5.0); break;
case 2: b2d = new Lingkaran (7.0); break;
case 3: b2d = new Segitiga (2.0, 10.0); break;
case 4: loop = false;
}

3.

Program Ketiga :

Tujuan dari program ini adalah untuk membuat tampilan point dan
circle dalam fungsi virtual. Program ketiga ini banyak terdapat error atau
terdapat kesalahan. Pada coding shape.h tidak terdapat ada error atau
kesalahan. Pada coding point1.h terdapat error atau kesalahan, yaitu #include
<iosteram>, seharusnya dalam include tersebut ditambahkan (.h) dan setelah
diperbaiki menjadi #include <iosteram.h>. Pada coding point1.cpp tidak
terdapat error atau kesalahan. Pada coding circle1.h tidak terdapat error atau
kesalahan. Pada coding circle1.cpp terdapat error atau kesalahan, yaitu
#include <iosteram>, seharusnya dalam include tersebut ditambahkan (.h)
dan setelah diperbaiki menjadi #include <iosteram.h>. Pada coding main.cpp
ini banyak yang diperbaiki dari pemanggilannya sampai dengan prosesnya.
Coding main.cpp.

Sebelum diperbaiki sbb :

#include <iostream>
#include <stdlib.h>

#include " shape.h"


#include " point.h"
#include " circle1"
#include " cylindr1.h"

void virtualViaPointer( const Shape * );

int main()
{
Point point( 7, 11 );

// create a Point

Circle circle( 3.5, 22, 8 );

// create a Circle

point.printShapeName();

// static binding

point.print();

// static binding

cout << '\n';

circle.printShapeNama();

// static binding

circle.print();

// static binding

cout << '\n';


Shape *arrayOfShapes[ 2 ];

// array of base-class pointers

arrayOfShapes[ 0 ] = &point;

arrayOfShapes[ 1 ] = &circle;

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()


<< "\nVolume = " << baseClassPtr->volume() << "\n\n";

Setelah diperbaiki menjadi :

#include <iostream.h>
#include <stdlib.h>
#include <conio.h>

#include "shape.h"
#include "point1.h"
#include "circle1.h"

void virtualViaPointer( const Shape * );


void virtualViaPointer(const Shape * baseClassPtr)
{
baseClassPtr->printShapeName();
baseClassPtr->print();
cout

<<"\nArea

= "<<baseClassPtr->area()

<<"\nVolume = "<<baseClassPtr->volume()<<"\n\n";

int main()
{
Point point( 7, 11 );

// create a Point

Circle circle( 3.5, 22, 8 );

// create a Circle

point.printShapeName();

// static binding

point.print();

// static binding

cout <<'\n';

circle.printShapeName();

// static binding

circle.print();

// static binding

cout <<'\n';

Shape *arrayOfShapes[ 2 ];

// array of base-class pointers

arrayOfShapes[ 0 ] = &point;

arrayOfShapes[ 1 ] = &circle;

cout << "virtual function calls made off "


<< "base-class pointers\n";

for ( int i = 0; i < 2; i++ )


virtualViaPointer( arrayOfShapes[i] );
return 0;
getch();

Maka dengan begitu program ketiga ini sudah dapat dijalankan. Pada
coding ini menggunakan fungsi virtual. Di dalam program ketiga ini terdapat
3 header dan 3 cpp. Return juga berperan untuk mengembalikan nilai balikan
dari nilai Point dan Circle.

BAB IV
KESIMPULAN

1. Polimorfisme adalah kemampuan 2 buah object yang berbeda untuk


merespon pesan permintaan yang sama dalam suatu cara yang unik.
2. Dalam OOP, konsep polimorfisme memungkinkan digunakannya suatu
interface yang sama untuk memerintah suatu objek agar melakukan suatu
aksi/tindakan yang mungkin secara prinsip sama tetapi secara proses
berbeda.

BAB V
DAFTAR PUSTAKA

2014.Modul Algoritma dan Pemrograman II . Palangkaraya:Universitas


Palangkaraya.
http://www.adityarizki.net/2011/04/tutorial-pemrograman-berorientasi-obyekdengan-c-polimorfisme-studi-kasus/
http://fillavigne.blogspot.com/2009/09/c-polimorfisme-polymorphismadalah.html

BAB VI
LAMPIRAN

Program 1 :
MANUSIA.H

Manusia.cpp

MPoli.cpp

Output :

Program 2 :
Bentuk2d.h

Bentuk2d.cpp

Mabstrak.cpp

Output :

Program 3 :
Shape.h

Point1.h

point1.cpp

circle1.h

circle1.cpp

Main.cpp

Output :

Anda mungkin juga menyukai