24
MODUL PRAKTIKUM ALGORITMA DAN PEMROGRAMAN II Tim Penyusun: Dosen Teknik Informatika JURUSAN TEKNIK INFORMATIKA FAKULTAS TEKNIK UNIVERSITAS PALANGKARAYA 2015

Algoritma Pemrograman 2

Embed Size (px)

Citation preview

Page 1: Algoritma Pemrograman 2

MODUL PRAKTIKUM

ALGORITMA DAN PEMROGRAMAN II

Tim Penyusun:

Dosen Teknik Informatika

JURUSAN TEKNIK INFORMATIKA

FAKULTAS TEKNIK

UNIVERSITAS PALANGKARAYA

2015

Page 2: Algoritma Pemrograman 2

1

MODUL I

DASAR PEMROGRAMAN BERORIENTASI OBJEK

I. TUJUAN

Setelah menyelesaikan modul ini, mahasiswa diharapkan mampu:

memahami dasar-dasar pemrograman berorientasi obyek

Memahami enkapsulasi

membuat kelas dan objek

II. DASAR TEORI

Perbedaan pemrograman tradisional dan berorientasi objek adalah pada

cara menelesaikan suatu permasalahan. Pada pemrograman tradisional dalam

memecahkan suatu masalah, masalah akan dibagi menjadi fungsi-fungsi yang

lebih kecil, sedangkan pada pemrograman berorientasi objek (PBO) setiap

masalah diselesaikan dengan cara dibagi ke dalam objek–objek.

Pada PBO dilakukan pembungkusan data (attributes) dan fungsi (behavior)

ke paket yang disebut kelas. Attributes merupakan data yang menggambarkan

status internal sebuah objek dan biasanya merupakan “member variables” pada

C++, tidak dapat diakses dari luar (enkapsulasi), dan juga sebagai “state”.

Methods merupakan fungsi yang mengakses status internal sebuah objek dan

biasanya merupakan “member functions” pada C++, dapat diakses dari luar,

memanipulasi atribut, dan disebut juga “behavior”. Berikut ini merupakan

gambaran mengenai objek.

Kelas (Class) terdiri dari model objek yang memiliki atribut (data

members) dan Behaviors (member functions), dan Member functions yaitu

Methods yang dipanggil sebagai response terhadap pesan. Kelas didefinisikan

dengan keyword class.

Mode Akses akses yang ada pada kelas ada tiga yaitu private yang

merupakan default mode akses dan dapat diakses oleh member functions, public

Page 3: Algoritma Pemrograman 2

2

yang dapat diakses oleh setiap Accessible fungsi dalam program, dan protected

yang biasanya digunakan untuk pewarisan .

Fungsi Constructor merupakan member function khusus yang

menginisialisasi data members dan memiliki nama yang sama dengan nama kelas.

Fungsi Constructor dipanggil saat membuat objek dari kelas dan tidak memiliki

tipe balikan.

Member functions yang didefinisikan di luar kelas dilakukan dengan

menggunakan binary scope resolution operator (::) yang berfungsi untuk

“mengikat” nama fungsi ke nama kelas dan mengindentifikasi fungsi dari suatu

kelas tertentu.

Berikut ini merupakan format dari member functions. NilaiBalikan NamaKelas::NamaFungsi( ){

}

Member functions yang didefinisikan di dalam kelas tidak membutuhkan scope

resolution operator dan nama kelas

III. LANGKAH KERJA

1. Buatlah program seperti di bawah ini!

#include<iostream.h>

#include<conio.h>

class Sepeda {

public:

Sepeda(int, int, int);

void mengubahPutaran(int);

void mengubahGir(int);

void mengerem();

void tampilInfo();

private:

int kecepatan;

int putaran;

int gir;

};

Sepeda::Sepeda(int k, int p, int g)

{

kecepatan = k;

putaran = p;

gir = g;

}

void Sepeda::mengubahPutaran(int p)

{

putaran = p;

}

void Sepeda::mengubahGir(int g)

{

gir = g;

}

void Sepeda::mengerem()

Page 4: Algoritma Pemrograman 2

3

{

cout<< "Kecepatan dan putaran berkurang ..." ;

}

void Sepeda::tampilInfo()

{

cout<< "Gir : " << gir << endl << "Kecepatan : "

<<kecepatan<< endl << "Putaran : " << putaran << endl;

}

int main()

{

Sepeda sepeda1(10,60,3),

sepeda2(4,12,1),

sepeda3(35,80,5);

sepeda1.tampilInfo();

sepeda2.tampilInfo();

sepeda3.tampilInfo();

getch();

return 0;

}

2. Buatlah program seperti di bawah ini!

#include<iostream.h>

#include<iomanip.h>

#include<conio.h>

class Time {

public:

Time();

void setTime( int, int, int );

void printUniversal();

void printStandard();

private:

int hour;

int minute;

int second;

};

Time::Time()

{

hour = minute = second = 0;

}

void Time::setTime( int h, int m, int s )

{

hour = ( h >= 0 && h < 24 ) ? h : 0;

minute = ( m >= 0 && m < 60 ) ? m : 0;

second = ( s >= 0 && s < 60 ) ? s : 0;

}

void Time::printUniversal()

{

cout<< setfill( '0' ) << setw( 2 ) << hour << ":"

<<setw( 2 ) << minute << ":"

<<setw( 2 ) << second;

}

void Time::printStandard()

{

cout << ( ( hour == 0 || hour == 12 ) ? 12 : hour % 12 )

Page 5: Algoritma Pemrograman 2

4

<< ":" <<setfill( '0' ) << setw( 2 ) << minute

<< ":" <<setw( 2 ) << second

<<( hour< 12 ? " AM" : " PM" );

}

int main()

{

Time t;

cout<< "The initial universal time is ";

t.printUniversal();

cout<< "\nThe initial standard time is ";

t.printStandard();

t.setTime( 13, 27, 6 );

cout<< "\n\nUniversal time after setTime is ";

t.printUniversal();

cout<< "\nStandard time after setTime is ";

t.printStandard();

t.setTime( 99, 99, 99 );

cout<< "\n\nAfter attempting invalid settings:"

<< "\nUniversal time: ";

t.printUniversal();

cout<< "\nStandard time: ";

t.printStandard();

cout<< endl;

getch();

return 0;

}

3. Buatlah sebuah program untuk menghitung volume dan keliling sebuah kotak,

dengan rumus V = panjang x lebar x tinggi, dan K = (2 x panjang) + (2 x

lebar) + (2 x tinggi). Program tersebut harus memiliki setidaknya 1 (satu) buah

Class dan 1 (satu) buah Constructor.

Page 6: Algoritma Pemrograman 2

5

MODUL II

PEWARISAN

I. TUJUAN

Setelah menyelesaikan modul ini, mahasiswa diharapkan mampumembuat

kelas baru dari kelas yang sudah ada dengan pewarisan

II. DASAR TEORI

Dalam PBO, kita mengambil realita kehidupan sehari-hari. Kita melakukan

pengamatan bahwa manusia secara alami sering melakukan pengelompokan atas objek

atau benda.Sejauh ini kita mengetahui cara untuk melakukan pengelompokan –

pengelompokan atas objek-objek yang serupa (menjadi kelas objek).

Selain melakukan katagorisasi terhadap objek yang memiliki sekumpulan atribut

dan perilaku yang sama, manusia sering melakukan pengelompokan terhadap objek yang

memiliki kesamaan atas beberapa (tidak semua) atribut/perilaku. Contoh:

Pengelompokan atas kendaraan bermotor, kemudian menggrupkannya berdasarkan suatu

tipe atau jenis (mobil, truk, sepeda motor, dll.). Setiap subkatagori ini merupakan kelas

atas objek-objek yang serupa.

Ada beberapa karakteristik yang di-share oleh semua kelompok. Relasi antar

kelas-kelas ini disebut dengan relasi “is-a”. Dalam setiap kasus, objek yang

dikelompokkan bersama dalam satu sub-katagori merupakan anggota dari kategori yang

lebih umum.Contohnya adalah seperti di bawah ini.

Mobil adalah (“is-a”) kendaraan bermotor.

Truk adalah (“is-a”) kendaraan bermotor

Sepeda Motor adalah (“is-a”) kendaraan bermotor

Objek yang dikelompokkan dalam satu kelas men-share sekumpulan atribut dan

perilaku. Jadi, seluruh objek kendaraan bermotor memiliki sekumpulan atribut dan

perilaku yang juga dimiliki oleh objek dari mobil. Keterkaitan antar kelas dalam relasi

“is-a” berasal dari kenyataan bahwa sub kelas memiliki atribut dan perilaku yang dimiliki

kelas induk, ditambah atribut dan perilaku yang dimiliki oleh sub kelas tersebut.

Superclass (“kelas dasar” atau “kelas induk”) merupakan kelas yang lebih general

dalam relasi “is-a”. Subclass ( “kelas turunan” atau “kelas anak”) merupakan kelas yang

lebih spesifik dalam relasi “is-a”. Objek yang dikelompokkan dalam sub kelas memiliki

atribut dan perilaku kelas induk, dan juga atribut dan perilaku tambahan. (Jadi, kumpulan

atribut dan perilaku sub kelas lebih besar dari super kelas-nya). Relasi “is-a” antar

superclass dan subclasses-nya disebut dengan pewarisan atau inheritance.

Subclass “mewarisi” suatu superclass (atau juga bisa dikatakan sebuah subclass

“turunan dari” suatu superclass) karena reusabilitas Perangkat Lunak, membuat kelas

baru (kelas turunan) dari kelas yang sudah ada (kelas dasar), kelas turunan mewarisi kelas

induk yang mendapatkan data dan perilaku, merupakan bentuk spesial dari kelas induk,

dan diperluas dengan perilaku tambahan,

Pewarisan ada dua jenis yaitu pewarisan tunggal dan pewarisan jamak. Pada

protected access, protected members dapat diakses oleh member kelas dasar, friend kelas

Page 7: Algoritma Pemrograman 2

6

dasar, member kelas turunan, dan friend kelas turunan. Kelas turunan dapat

merujuk/mengakses langsung public dan protected data member kelas induk dengan

menggunakan nama atribut yang yang diakses.

III. LANGKAH KERJA

1. Buatlah program seperti di bawah ini!

#include<iostream.h>

#include<conio.h>

class Point {

public:

Point(float = 0.0, float = 0.0);

void cetakPoint();

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;

}

class Circle : public Point {

public:

Circle(float r = 0.0, float a = 0.0, float b =

0.0);//konstruktor

float area();

void cetakPoint();

protected:

float radius,l;

};

Circle::Circle(float r, float a, float b)

: Point(a, b){

cout<< "Konstruktor Circle dijalankan"<<endl;

radius = r;

}

float Circle::area()

{

l=3.14*radius*radius;

return l;

}

void Circle::cetakPoint()

{

Point::cetakPoint();

cout<< "Circle dgn r : "<<radius<<" Center : ["<<x<<",

"<<y<<"]"<<endl;

cout<< "Luas circle : "<<l<<endl;

}

class Cylinder:public Circle {

public:

Page 8: Algoritma Pemrograman 2

7

Cylinder(float h = 0.0, float r = 0.0, float a = 0.0, float b

= 0.0);//konstruktor

float area();

float vol();

void cetakPoint();

protected:

float height,l,v;

};

Cylinder::Cylinder(float h, float r, float a, float b)

: Circle(r, a, b)

{

cout<< "Konstruktor Cylinder dijalankan"<<endl;

height = h;

}

float Cylinder::area()

{

l= (2*Circle::area() + 2*3.14*radius*height);

return l;

}

float Cylinder::vol()

{

v= (Circle::area()*height);

return v;

}

void Cylinder::cetakPoint()

{

Circle::cetakPoint();

cout<< "Tinggi tabung (h) : "<<height<<endl;

cout<< "Luas tabung : "<<l<<endl;

cout<< "Volume tabung : "<<v<<endl;

}

int main()

{

Point p(1.1, 2.2);

cout<<endl;

Circle lingkaran(10, 5, 5);

lingkaran.area();

lingkaran.cetakPoint();

cout<<endl;

Cylinder tabung(20, 30, 3, 4);

tabung.area();

tabung.vol();

tabung.cetakPoint();

getch();

return 0;

}

2. Buatlah program untuk menghitung luas dan keliling persegi panjang serta

volume dan keliling kotak. Program tersebut harus menerapkan prinsip

pewarisan!

Page 9: Algoritma Pemrograman 2

8

MODUL III

POLIMORFISME

I. TUJUAN

Setelah menyelesaikan modul ini, mahasiswa diharapkan mampu membuat

polimorfisme.

II. DASAR TEORI

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

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, 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)/menggunakan fungsi virtual (pure virtual).

virtual balikan namaFungsi (parameter) = 0

III. LANGKAH KERJA

1. Buatlah program seperti di bawah ini!

#ifndef MANUSIA_H

Page 10: Algoritma Pemrograman 2

9

#define MANUSIA_H

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 {

Page 11: Algoritma Pemrograman 2

10

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 {

private:

float alas, tinggi;

public:

Segitiga(float, float);

float cariLuas();

};

#endif

Bentuk2D.cpp

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

}

Segitiga::Segitiga(float a, float t)

{

alas = a;

tinggi = t;

}

Page 12: Algoritma Pemrograman 2

11

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;

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>

#include "shape.h"

class Point : public Shape {

public:

Point( int = 0, int = 0 );

void setPoint( int, int );

Page 13: Algoritma Pemrograman 2

12

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

#include "point1.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 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;

};

#endif

circle1.cpp

#include <iostream>

#include "circle1.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::area() const

{ return 3.14159 * radius * radius; }

Page 14: Algoritma Pemrograman 2

13

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 ); // 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;

}

void virtualViaPointer( const Shape *baseClassPtr )

{

baseClassPtr->printShapeName();

baseClassPtr->print();

cout<< "\nArea = " << baseClassPtr->area()

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

}

Page 15: Algoritma Pemrograman 2

14

MODUL IV

RELASI KELAS

I. TUJUAN

Setelah menyelesaikan modul ini, mahasiswa diharapkan mampu membuat

berbagai jenis relasi antara kelas.

II. DASAR TEORI

Jenis Relasi antar kelas terdiri dari pewarisan, agregasi, asosiasi. Pewarisan

merupakan hubungan antar satu kelas dengan kelas lain dalam suatu hirarki kelas induk

dan kelas turunan. Superclass (“kelas dasar” atau “kelas induk”) merupakan kelas yang

lebih general dalam relasi “is-a”. Subclass ( “kelas turunan” atau “kelas anak”)

merupakan kelas yang lebih spesifik dalam relasi “is-a”. Objek yang dikelompokkan

dalam sub kelas memiliki atribut dan perilaku kelas induk, dan juga atribut dan perilaku

tambahan. Kita mengatakan subclass “mewarisi” suatu superclass (atau juga bisa

dikatakan sebuah subclass “turunan dari” suatu superclass).

Agregasi merupakan hubungan antar kelas yang menyatakan suatu kelas

merupakan bagian dari kelas yang lain atau hubungan antar kelas yang menyatakan suatu

kelas memiliki kelas lain [sebagai atribut]. Agregasi merupakan relasi “has a”. Contoh:

Mobil memiliki mesin

Fakultas terdiri atas jurusan

Rumah memiliki dapur

Mobil, Fakultas dan Rumah dinyatakan sebagai kelas agregat.Mesin, Jurusan dan Dapur

merupakan kelas penyusun.

Kardinalitas menyatakan jumlah objek penyusun yang terlibat dalam

pembentukan relasi agregasi.Suatu KelasAgregat dibentuk dari beberapa (disimbolkan

dengan *) objek Kelas Penyusun.

Asosiasi menggambarkan hubungan struktural antar kelas.Setiap kelas memiliki

kedudukan yang sama (tidak merupakan bagian dari kelas lain).Pada saat merancang

relasi antar kelas, ada dua hal yang perlu diperhatikan yaitu berapa objek yang terlibat

dari masing-masing kelas yang ber-relasi dan apakah relasi tersebut bersifat wajib

(mandatory) atau opsional.

III. LANGKAH KERJA

1. Buatlah program seperti di bawah ini!

agregasi.cpp

#include <iostream.h>

#include <stdlib.h>

class Titik

{

private:

float sbX, sbY;

Page 16: Algoritma Pemrograman 2

15

public:

Titik()

{

sbX = sbY = 0.0f;

}

Titik(float x, float y)

{

sbX = x; sbY = y;

}

void posisiTitik()

{

cout<< "[" << sbX << ", " << sbY << "]" << endl;

}

};

class Lingkaran

{

private:

float jejari;

Titik titikPusat;

public:

Lingkaran(float j)

{

jejari = j;

}

Lingkaran(float x, float y, float j):titikPusat(x,y)

{

jejari = j;

}

void cetakLingkaran()

{

cout<< "Titik pusat : " ; titikPusat.posisiTitik();

cout<< "Jari-jari : " << jejari << endl;

}

};

int main()

{

Lingkaran L1(3.0);

Lingkaran L2(3.0, 4.0, 5.0);

L1.cetakLingkaran();

L2.cetakLingkaran();

}

2. Buatlah program seperti di bawah ini!

asosiasi.cpp

#include <iostream.h>

#include <stdlib.h>

class MataKuliah

{

private:

char* kodeMK;

char* namaMK;

int sksMK;

Page 17: Algoritma Pemrograman 2

16

public:

MataKuliah(char* kode, char* nm, int sks)

{

kodeMK = kode;

namaMK = nm;

sksMK = sks;

}

void cetakMK()

{

cout<< kodeMK << " : " << namaMK << " : " << sksMK

<<endl;

}

};

class Dosen

{

private:

char* NPP;

char* Nama;

MataKuliah* mk;

int indeks;

public:

Dosen(char* noPeg, char* nm)

{

NPP = noPeg;

Nama = nm;

indeks = 0;

}

void tambahMK (MataKuliah matakuliah)

{

mk[indeks] = matakuliah;

indeks++;

}

void cetakInformasi()

{

cout<< Nama << " Mengajar : " << endl;

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

mk[i].cetakMK();

}

};

int main()

{

Dosen dsn("P001", "Steve Owen");

MataKuliah mk1("MK001", "PBO", 3);

MataKuliah mk2("MK002", "Struktur Data", 3);

MataKuliah mk3("MK003", "R Perangkat Lunak", 3);

MataKuliah mk4("MK004", "Analisis Algoritma", 2);

MataKuliah mk5("MK005", "Sistem Operasi", 3);

dsn.tambahMK(mk1);

dsn.tambahMK(mk2);

dsn.tambahMK(mk3);

dsn.tambahMK(mk4);

dsn.tambahMK(mk5);

dsn.cetakInformasi();

}

Page 18: Algoritma Pemrograman 2

17

MODUL V

OPERATOR OVERLOADING DAN EXCEPTION HANDLING

I. TUJUAN

Setelah menyelesaikan modul ini, mahasiswa diharapkan mampu:

mengimplementasikan Exception Handling

mengimplementasikan operator overloading

II. DASAR TEORI

Jarang sekali sebuah program dibuat dapat berjalan dengan sukses pada saat

pertama sekali dijalankan. Kesalahan sering terjadi pada saat perancangan atau

pemrograman.Kesalahan tersebut dikatagorikan menjadi tiga bagian, yaitu:

syntax errors – mengakibatkan kesalahan kompilasi.

semantic errors– program menghasilkan keluaran yang tidak sesuai dengan harapan.

runtime errors – kebanyakan mengakibatkan terminasi program secara tidak normal

atau bahkan sistem crash

Berikut ini merupakan contoh runtime error.

Pembagian bilangan dengan nol.

Akses elemen yang berada di luar indeks array

Menggunakan nilai negatif untuk ukuran array

Setiap program dalam berada dapat suatu kondisi yang tidak normal – Error

Conditions.Program yang ‘baik’ harus dapat menangani kondisi ini.Exception merupakan

suatu keadaan yang disebabkan oleh runtime error dalam program. Memungkinkan

kesalahan ditangani tanpa harus ‘mengotori’ program (dengan rutin yang menangani

kesalahan). Memungkinkan pemisahan penanganan kesalahan dengan program utama

(main business logic).

Suatu fungsi dapat memberi tanda suatu kesalahan dengan melempar suatu

exception – throws. Fungsi pemanggil dapat menyerahkan kendali ke exception handler

dengan menangkap (catching) exception - try, catch. Berikut ini merupakan blok try-

catch.

try{

instruksi yang berpotensi menghasilkan exception

}

catch(tipe_exception e){

instruksi untuk menangani exception

}

Seperti bahasa tingkat tinggi yang lain, C++ memiliki beberapa operator +, -, \, *,

<<, >>, &, [], =, dll. Operator ini telah didefinisikan (pre-defined) dan digunakan untuk

tipe tertentu. Misal: operator ‘+’ hanya dapat digunakan untuk tipe dasar seperti integer,

float, dll. Kadang-kadang diperlukan untuk meredefinisi operator ini untuk digunakan

untuk tipe bentukan. Misalnya Kelas Complex a dan b, apakah bisa dilakukan a+b?

Page 19: Algoritma Pemrograman 2

18

Manipulasi bilangan kompleks lebih mudah apabila dapat memperlakukannya seperti

pada tipe dasar. Sehingga dapat dilakukan, hal-hal seperti

Complex a(2,4);

Complex b(4,5);

. . .

Complex c = a + b;

Bukannya

Complex a(2,4);

Complex b(4,5);

. . .

Complex c = a.tambah(b);

Operator yang digunakan pada kelas dalam C++ dinyatakan dalam pemanggilan

fungsi. Jenis operator ada dua yaitu operator uner dan operator biner.Operator uner hanya

membutuhkan satu argument,misalnya ++, --, ~. Operator biner membutuhkan dua

argument, misalnya +, -, /, *.

Operator dalam C++ diimplementasikan dengan pemanggilan fungsi. User dapat

meredefinisikan arti suatu operator pada suatu kelas dengan melakukan redefinisi method

yang berkaitan dengan operator tersebut. Tidak semua operator bisa di-overload. Ada

batasan-batasan yang bisa dilakukan dalam operator overloading.

Berikut ini merupakan daftar operator yang dapat di-overload dan yang tidak

dapat di-overload.

III. LANGKAH KERJA

1. Buatlah program seperti di bawah ini!

Complex.cpp #include <iostream>

#include <stdlib.h>

class complex

{

double real;

double imaginer;

Operator yang tidak dapat di-overload

. .* :: ?: sizeof

Operator yang dapat di-overload

+ - * / % ^ & |

~ ! = < > += -= *=

/= %= ^= &= |= << >> >>=

<<= == != <= >= && || ++

-- ->* , -> [] () new delete

new[] delete[]

Page 20: Algoritma Pemrograman 2

19

public:

complex(double re=0, double im=0)

{

real = re;

imaginer = im;

}

complex operator-()

{

complex result;

result.real = -real;

result.imaginer = -imaginer;

return result;

}

complex operator+(complex c)

{

complex result;

result.real = real + c.real;

result.imaginer = imaginer + c.imaginer;

return result;

}

complex operator-(complex c)

{

complex result;

result.real = real - c.real;

result.imaginer = imaginer - c.imaginer;

return result;

}

void display()

{

cout << '(' << real << ',' << imaginer << ')' << endl;

}

};

int main()

{

complex z(1,2), w(3,4), b;

complex a = z + w;

a.display();

a = z - w;

a.display();

b=-a;

b.display();

}

2. Buatlah sebuah program kalkulator sederhana dengan dua operand dan

operator yang digunakan adalah: +, -, *, /, >, dan <

Page 21: Algoritma Pemrograman 2

20

MODUL VI

TEMPLATE CLASS

I. TUJUAN

Setelah menyelesaikan modul ini, mahasiswa diharapkan mampu

mengimplementasikannya template fungsi dan kelas.

II. DASAR TEORI

Template merupakan cara untuk mendefinisikan fungsionalitas generik pada

parameter tanpa perlu mendeklarasikan tipenya. Abstraksi definisi fungsi dalam bentuk

pseudo code sehingga tipe yang digunakan dapat diganti merupakan konsep dari

template. Penerapan template pada fungsi akan menghasilkan definisi fungsi. Berikut ini

merupakan langkah-langkah untuk mendefinisikan fungsi, yaitu:

1. Mulai dengan keyword template

2. Nyatakan dalam kurung segitiga, nama placeholder untuk tipe yang akan digunakan.

3. Ikuti dengan nama fungsi

4. Ikuti nama fungsi dengan daftar parameter.

III. LANGKAH KERJA

1. Buatlah program seperti di bawah ini! #include<iostream.h>

template<class T>

void CetakArray(T *array, const int count)

{

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

cout<< array[i] << " ";

cout<< endl;

}

main()

{

const int aCount=5, bCount=4,

cCount=6;

int a[aCount] = {1, 2, 3, 4, 5};

float b[bCount] = {1.1, 2.2, 3.3, 4.4};

char c[cCount] = "hello";

cout<< "Array a berisi : " << endl;

CetakArray(a, aCount);

cout<< "Array b berisi : " << endl;

CetakArray(b, bCount);

cout<< "Array c berisi : " << endl;

CetakArray(c, cCount);

return 0;

}

Page 22: Algoritma Pemrograman 2

21

2. Buatlah template untuk melakukan insertion sort sehingga dapat digunakan

untuk masukan dengan tipe data integer, float, dan double!

Algoritma insertion sort adalah sebagai berikut:

DEKLARASI

Var

I, J, N : integer

X : integer

DESKRIPSI

For I 2 to N Do

X Larik[I]

Larik[0] X

J I – 1

While X <Larik[J] Do

Larik[J+1] Larik[J]

J J-1

EndWhile

Larik[J+1] X

EndFor

Page 23: Algoritma Pemrograman 2

22

TATA TERTIB DAN TATA LAKSANA PRAKTIKUM

TATA TERTIB

1. Praktikan WAJIB mengikuti semua modul praktikum.

2. Praktikan hanya boleh tidak mengikuti praktikum 1 (satu) kali DENGAN

ATAU TANPA SURAT IZIN dari jumlah pertemuan praktikum.

3. Praktikan yang berhalangan mengikuti praktikum, diwajibkan melaporkan

ke dosen praktikum untuk menentukan jadwal praktikum sebagai

pengganti jadwal yang berhalangan.

4. Praktikan yang lebih dari 1 (satu) kali tidak mengikuti praktikum, tidak

diperbolehkan untuk mengikuti praktikum untuk modul-modul praktikum

selanjutnya dan NILAI AKHIR PRAKTIKUM adalah NOL.

5. Praktikan diberikan toleransi waktu keterlambatan selama 15 menit dan

tidak ada penambahan waktu praktikum.

6. Tidak diperbolehkan saling bekerja sama.

7. Dilarang menggunakan kaos oblong dan sendal selama praktikum. Bagi

yang melanggar poin ini, tidak diperbolehkan mengikuti praktikum.

TATA LAKSANA :

1. Sebelum praktikum di mulai, setiap praktikum wajib mengumpulkan

LAPORAN HASIL PRAKTIKUM modul sebelumnya.

2. Jika praktikan tidak melaksanakan Tata Laksana poin 1, maka tidak

diperbolehkan mengikuti praktikum.

3. Setiap modul praktikum, akan dilakukan Pre-Test.

4. Format laporan meliputi :

Laporan Hasil Praktikum :

Halaman Depan

BAB I. Tujuan dan Landasan Teori

BAB II. Langkah Kerja

BAB III. Pembahasan

BAB IV. Kesimpulan

BAB V. Daftar Pustaka

BAB VI. Lampiran (disertai laporan rencana praktikum modul

sebelumnya)

5. Format Penulisan

Spasi : 1,5

Font : Times New Roman

Font Size : 12

Margins : Top 3, Left 4, Right 3, Bottom 3

Kertas : A4

Page 24: Algoritma Pemrograman 2

23

6. Penilaian Laporan Hasil Praktikum

BAB I. Tujuan dan Landasan Teori Nilai 20

BAB II. Langkah Kerja Nilai 10

BAB III. Pembahasan Nilai 40

BAB IV. Kesimpulan Nilai 15

BAB V. Daftar Pustaka Nilai 5

BAB VI. Lampiran Nilai 10

Total 100

7. Praktikan yang mengabaikan format penulisan poin 5, akan dikurangi 5

setiap kesalahan.

8. Penilaian Akhir Praktikum :

Pre-Test : 15 %

Praktikum : 30 %

Laporan Praktikum : 20 %

Responsi : 35 %

Total 100 %

9. Penilaian Akhir Mata Kuliah Algoritma dan Pemrograman II :

Tugas : 20 %

UTS : 30 % 50 %

Praktikum : 50 %

UAS : 50 %

Nilai Akhir : 100 %