LAPORAN HASIL PRAKTIKUM ALGORITMA DAN PEMROGRAMAN II
NAMA
:
WANDY SUPRIADI
NIM
:
DBC 114 121
KELAS
:
F
MODUL
:
I I ( PEWARISAN )
JURUSAN/PROGRAM STUDI TEKNIK INFORMATIKA FAKULTAS TEKNIK UNIVERSITAS PALANGKA RAYA 2015
BAB I TUJUAN DAN LANDASAN TEORI
A. Tujuan Setelah menyelesaikan modul ini, mahasiswa diharapkan mampu membuat kelas baru dari kelas yang sudah ada dengan pewarisan.
B. Landasan Teori Dalam PBO, kita mengambil realita kehidupan sehari-hari. Kita melakukan pengamatan bahwa manusia secara alami sering melakukan pengelompokkan atas objek atau benda.sejauh ini kita mengetahui cara untuk melakukan pengelompokkanpengelompokkan atas objek-objek yang serupa (menjadi kelas objek). Selain melakukan kategorisasi terhadap objek yang memiliki sekumpulan atribut dan perilaku yang sama, manusia sering melakukan pengelompokkan terhadap objek yang memiliki kesamaan atas beberapa (tidak semua) atribut/perilaku. Contoh : pengelompokkan atas kendaraan bermotor, kemudian menggrupkannya berdasarkan suatu tipe atau jenis (mobil, truk, sepeda motor, dll.). Setiap subkategori 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-kategori 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 suatu 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 atau 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 reuabilitas 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 dasar, member kelas turunan, dan friend member kelas turunan. Kelas turunan dapat merujuk/mengakses langsung public dan protected data member kelas induk dengan menggunakan nama atribut yang diakses. Memahami Konsep Inheritance (Pewarisan) Pada OOP I. KONSEP PEWARISAN (INHERITANCE) PADA OOP Sebagai Informasi bahwa Ciri khas Pemrograman Berorientasi Objek ada tiga hal yaitu: 1. Enkaptulasi (Pembungkusan) 2. Inheritance (Pewarisan) 3. Polymorphism (Perbedaan Bentuk) A. PENGERTIAN PEWARISAN (INHERITANCE)
Konsep inheritance ini mengadopsi dunia riil dimana suatu entitas/obyek dapat mempunyai entitas/obyek turunan. Dengan konsep inheritance, sebuah Class dapat mempunyai class turunan. Suatu class yang mempunyai class turunan dinamakan parent class atau base class. Sedangkan class turunan itu sendiri seringkali disebut subclass atau child class. Suatu subclass
dapat
mewarisi
apa-apa
yang
dipunyai
oleh
parent
class.
Karena suatu subclass dapat mewarisi apa apa yang dipunyai oleh parent class-nya, maka member dari suatu subclass adalah terdiri dari apa-apa yang ia punyai dan juga apa-apa yang ia warisi dari class parent-nya. Kesimpulannya, boleh dikatakan bahwa suatu subclass adalah tidak lain hanya Memperluas (extend) parent class-nya. Dari hirarki diatas dapat dilihat bahwa, semakin kebawah, class akan semakin bersifat spesifik. Class mamalia memiliki seluruh sifat yang dimiliki oleh binatang, demikian halnya juga macan , kucing, Paus dan Monyet memiliki seluruh sifat yang diturunkan dari class mamalia. Dengan konsep ini, karakteristik yang dimiliki oleh class binatang cukup didefinisikan dalam class binatang saja. Class mamalia tidak perlu mendefinisikan ulang apa yang telah dimiliki oleh class binatang, karena sebagai class turunannya, ia akan mendapatkan karakteristik dari class binatang secara otomatis. Demikian juga dengan class macan, kucing, Paus dan monyet, hanya perlu mendefinisikan karakteristik yang spesifik dimiliki oleh classnya masing-masing. Dengan memanfaatkan konsep pewarisan ini dalam pemrograman, maka hanya perlu mendefinisikan karakteristik yang lebih umum akan didapatkan dari class dariman ia diturunkan.
B. DEKLARASI PEWARISAN (INHERITANCE)
Deklarasi yang digunakan adalah dengan menambahkan kata kunci extends setelah deklarasi nama class, kemudian diikuti dengan nama parent class-nya. Kata kunci extends tersebut memberitahu kompiler Java bahwa kita ingin melakukan perluasan class. Public class B extends A {…}. Pada saat dikompilasi, Kompiler Java akan membaca sebagai subclass dari class Object. Public class A extends Object {…} C. KAPAN KITA MENERAPKAN INHERITANCE ? Kita baru perlu menerapkan inheritance pada saat kita jumpai ada suatu class yang dapat diperluas dari class lain. Misal terdapat class Pegawaipublic class Pegawai {public String nama;public double gaji;}Misal terdapat class Managerpublic class Manajer {public String nama;public double gaji;public String departemen;} Dari 2 buah class diatas, kita lihat class Manajer mempunyai data member yang identik sama dengan class Pegawai, hanya saja ada tambahan data member departemen. Sebenarnya yang terjadi disana adalah class Manajer merupakan perluasan dari class pegawai dengan tambahan data member departemen. Disini perlu memakai konsep inheritance, sehingga class Manajer dapat kita tuliskan Seperti berikut : public class Manajer extends Pegawai {public String departemen;} D. KEUNTUNGAN INHERITANCE a. Subclass menyediakan state/behaviour yang spesifik yang membedakannya dengan superclass, hal ini akan memungkinkan programmer Java untuk menggunakan ulang source code dari superclass yng telah ada. b. Programmer Java dapat mendefinisikan superclass khusus yang bersifat generik, yang disebut abstract class, untuk mendefinisikan class dengan behaviour dan state secara umum..
E. ISTILAH INHERITANCE Extends Keyword ini harus kita tambahkan pada definisi class yang menjadi subclass. Superclass Superclass digunakan untuk menunjukkan hirarki class yang berarti class dasar dari subclass/class anak. Subclass Subclass adalah class anak atau turunan secara hirarki dari superclass. Super Keyword ini digunakan untuk memanggil konstruktor dari superclass atau menjadi variabel yang mengacu pada superclass. Methode Overriding Pendefinisian ulang method yang sama pada subclass Dalam inheritance, method overriding berbeda dengan method overloading. Kalau method overriding adalah mendefinisikan kembali method yang sama, baik nama method maupun signature atau parameter yang diperlukan dalam subclass, kalau method overloading adalah mendefinisikan method yang memiliki nama yang sama, tetapi dengan signature yang berbeda dalam definisi class yang sama.
BAB II LANGKAH KERJA
1. Buatlah progam seperti di bawah ini! #include
#include 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 "<
{ cout<< "Konstruktor Cylinder dijalankan"<
BAB III PEMBAHASAN
Pada modul yang ke II ini kita akan membahas masalah pewarisan yang kta ketahui pewarisan adalah proses penciptaan kelas baru dengan mewarisi karakteristik kelas yang telah ada, ditambah karakteristik unit kelas baru. Dengan pewarisan, dimungkinkan penciptaan, dimungkinkan penciptaan klasifikasi berhirarki. 1. Program No. 1 : Program ini digunakan untuk menghitung tinggi tabung, luas tabung dan volume dari tabung dengan nilai yang telah ditentukan berikut pembahasannya.
Pembahasan Program : #include #include Ini adalah header file, atau bisa juga disebut library. File ini sebenarnya kumpulan fungsi-fungsi yang sering digunakan untuk pembuatan program. Fungsi #include adalah untuk memasukkan file library. Sedangkan conio.h dan iostream.h berisi library untuk memanggil fungsi yang kita butuhkan yaitu getch();. class Point { public: Point(float = 0.0, float = 0.0); void cetakPoint(); protected: float x,y; };
Pada baris selanjutnya merupakan coding program untuk class Point. dalam program ini, class Point merupakan class induk. Pada mode akses publicnya class ini mempunyai variabel cetakPoint() dengan tipe data void dan pada mode akses protectednya terdiri dari variabel x dan y yang tipe datanya float. Kemudian pada baris selanjutya Public Pada variabel yang bertipe data float=0.0; (nol) mempunyai Boolean false, selain itu true. Kemudian pada baris selanjutnya void cetakPoint(); Fungsi cetakPoint() digunakan untuk menampilkan/mencetak nilai dari variabel yang terdapat pada class Point.
Pada mode akses protected, terdapat dua buah variabel, yaitu x dan y yang tipe datanya float. Float merupakan tipe data pada C++ yang mengelompokkan bilangan bernilai decimal atau pecahan. Point::Point(float a, float b) { cout<< "Konstruktor Point dijalankan "<
Pada bagian coding yang selanjutnya Point::Point(float a, float b) Baris selanjutnya pada bagian dari coding tersebut terdapat tanda kurung kurawal ( { ) Kurung kurawal ( { ) menandakan awal program. Pada baris selanjutnya lagi Bagian program ini merupakan konstruktor untuk class Point. Konstruktor ini memiliki dua buah parameter yang tipe datanya float. Pada saat dilakukan pemanggilan, maka akan ditampilkan tulisan "Konstruktor Point dijalankan " dan nilai dari parameter akan dimasukkan ke dalam variabel x dan y (nilai parameter a dimasukkan ke variabel x dan nilai parameter b yang dimasukkan ke variabel y). Kemudian bagian coding tersebut diakhiri dengan tanda kurung kurawal ( } ) yang menandakan akhir program.
void Point::cetakPoint() { cout<< "Point : "<<'['<
Pada Bagian program baris yang selanjutnya merupakan class Circle: public Point{ yang berfungsi untuk mendeklarasikan variabel dan fungsi yang terdapat pada class Circle.
Pada public:, konstruktor Circle terdiri dari tiga buah parameter (r, a dan b) yang tipe datanya float. Yang kita ketahui Tipe data Float merupakan tipe data bilangan pecahan presisi tungga. Kemudian pada baris selanjutnya terdapat fungsi float area() yang tipe datanya float, digunakan untuk menghitung nilai luas dari objek Circle. Kemudian pada baris selanjutnya adalah void cetakPoint() yang tipe datanya void, digunakan untuk menampilkan/mencetak nilai dari fungsi area. Kemudian pada mode akses protectednya, terdapat variabel radius dan l yang tipe datanya float. Kemudian diakhiri degan tanda kurung kurawal tutup ( } ) untuk menandakan akhir dari program. Circle::Circle(float r, float a, float b) : Point(a, b) { cout<< "Konstruktor Circle dijalankan"<
float Circle::area() { l=3,14*radius*radius; return l; }
Pada baris bagian program yang selanjutnya merupakan bagian program yang berfungsi untuk menghitung nilai dari luas lingkaran dengan memasukkan rumus dari luas lingkaran l=3,14*radius*radius. Hasil dari perhitungan rumus itulah yang akan dimasukkan ke dalam variabel l. Fungsi void Circle::cetakPoint() { Point::cetakPoint(); cout<< "Circle dgn r : "<
Center :
["<
Pada baris bagian program yang selanjutnya merupakan fungsi cetakPoint() yang tipe datanya void. Program tersebut adalah turunan dari class Circle, namun pada saat dilakukan pemanggilan fungsi ini akan memanggil fungsi dari cetakPoint yang merupakan class induk (class Point). Selanjutnya, fungsi ini akan menampilkan nilai dari variabel radius, x, y dan l.
class Cylinder : public Circle { public: 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; }; Pada baris selanjutnya yaitu Class Cylinder yang merupakan turunan dari class Point dan class Circle, pada kelas ini ada 3 fungsi yang bertipe akses Public yaitu, area () dengan tipe data float, vol () dengan tipe data float, dan cetakPoint () dengan tipe data void. Pada Publicnya, class ini memiliki sebuah konstruktor yang terdiri dari empat buah parameter (h, r, a dan b) yang tipe datanya float dengan presisi 1 angka di belakang koma. Yang kita ketahui Konstruktor adalah method yang dijalankan setiap kali objek dibuat. Terdapat juga fungsi area() dan vol() yang tipe datanya float. Fungsi area() digunakan untuk menghitung nilai dari luas lingkaran pada class Cylinder, sedangkan fungsi vol() digunakan untuk menghitung nilai volume dari abjek pada class Cylinder. Pada baris selanjutnya merupakan fungsi cetakPoint(), yang berfungi untuk menampilkan fungsi-fungsi dan variabel yang terdapat pada mode akses public.
Kemudian Protectednya, terdapat tiga buah variabel yang tipe datanya float, yakni height, l dan v yang berfungsi untuk menampung nilai dari luas lingkaran serta tinggi dan volume tabung. Cylinder::Cylinder(float h, float r, float a, float b) : Circle(r, a, b) { cout<< "Konstruktor Cylinder dijalankan"<
float Cylinder::vol() { v= (Circle::area()*height); return v; } Pada bagian program selanjutnya digunakan untuk menghitung nilai dari volume tabung. Tipe data yang digunakan fungsi ini adalah float. void Cylinder::cetakPoint() { Circle::cetakPoint(); cout<< "Tinggi tabung (h) : "<
: "<
cout<< "Volume tabung
: "<
}
Pada bagian void Cylinder::cetakPoint() bagian ini digunakan untuk menampilkan hasil/nilai dari perhitungan pada fungsi-fungsi sebelumnya yang dipanggil dengan menggunakan parameter height, l dan v. Agar nilai dapat ditampilkan, maka kita lakukan pemanggilan terhadap fungsi cetakPoint().
int main() { Point p(1.1, 2.2); cout<
memanggil fungsi standar yang sudah ada pada C++. Pada bagian akhir dari fungsi main ini ada tertulis sebuah kode yaitu return 0;, yang berarti apabila program ini dieksekusi maka akan memberikan nilai kembalian 0 yang artinya program dijalankan tanpa error.inilah alasan kenapa fungsi ini menggunakan int (integer) sebagai nilai kembalinya. Hasil output dari program :
2. Program yang kedua ini digunakan untuk menghitung luas dan keliling persegi panjang serta volume dan keliling kotak. Berikut ini pembahasan program no 2 yang saya buat : Pembahasan Program : #include #include Ini adalah header file, atou bisa juga disebut library. File ini sebenarnya adalah kumpulan fungsi-fungsi yang sering digunakan untuk pembuatan program. Fungsi #include adalah untuk memasukkan file library. Sedangkan conio.h dan iostream.h berisi library untuk memanggil fungsi yang kita butuhkan yaitu getch();.
class Awal { public : Awal (float = 0.0, float = 0.0); float hitungluas(); float hitungkeliling(); void tampilhasil(); protected : float panjang, lebar, L, K; };
Pada bagian coding yang ini merupakan class awal yaitu nama dari class yang dibuat. Pada baris selanjutya Public pada variabel awal yang bertipe data float=0.0; (nol) mempunyai Boolean false, selain itu true. Publicnya terdiri dari konstruktor Persegi yang memiliki dua buah parameter yang tipe datanya float dengan presisi 1 angka di
belakang koma. Pada mode akses ini juga terdapat fungsi hitungLuas, hitungKeliling, hitung luas dan tampilhasil yang tipe datanya void. Kemudian pada mode akses protectednya, terdapat variabel panjang, lebar,L dan K yang tipe datanya float. Kemudian akhiri dengan tanda kurung kurawal tutup ( } ). Awal::Awal (float p, float l) { panjang = p; lebar = l; } Kemudian pada baris yang selanjutnya yaitu pada variabel tipedata Float nya saya buat panjang = p; dan lebar = l; Kemudian pada coding tersebut terdapat Kurung kurawal ( { ) menandakan awal program dan Kurung kurawal ( } ) menandakan akhir program float Awal::hitungluas() { L = panjang * lebar; return L; } Pada baris bagian program yang selanjutnya merupakan bagian program yang berfungsi untuk menghitung nilai dari luas persegi panjang dengan memasukkan rumus dari luas persegi panjang yaitu L=panjang*lebar;. Hasil dari perhitungan rumus itulah yang akan dimasukkan ke dalam variabel L Fungsi.
float Awal::hitungkeliling() { K = (2 * (panjang + lebar )); return K; }
Pada baris bagian program yang selanjutnya merupakan bagian program yang juga berfungsi untuk menghitung nilai dari keliling persegi panjang dengan memasukkan rumus dari keliling persegi panjang yaitu K = (2 * (panjang + lebar ));Hasil dari perhitungan rumus itulah yang akan dimasukkan ke dalam variabel K.Fungsi . void Awal::tampilhasil() { cout<<"Panjang : "<
Pada bagian void Awal::tampilhasil() bagian ini digunakan untuk menampilkan hasil/nilai dari perhitungan pada fungsi-fungsi sebelumnya dengan menggunakan parameter Panjang,Lebar,Luas dan Keliling persegi panjang.
class Kotak : public Awal { public : Kotak(float h = 0.0, float p = 0.0, float l = 0.0); float hitungvol(); float hitungkeliling(); void tampilhasil(); protected : float height, V, K; };
Pada bagian yang selanjutnya yaitu Class Kotak untuk menghitung Keliling Kotak Pada baris selanjutya Public, Publicnya terdiri dari konstruktor Kotak yang memiliki tiga buah parameter yang tipe datanya float dengan presisi 1 angka di belakang koma. Pada mode akses ini juga terdapat fungsi hitungvol, hitungkeliling, dan tampilhasil yang tipe datanya void. Kemudian pada mode akses protectednya, terdapat variabel height, V, dan K yang tipe datanya float. Kotak::Kotak (float h, float p, float l) : Awal (p,l) { height = h; }
Pada bagian coding yang selanjutnya variabel h, p, dan l dibuat dengan tipe data float dengan variabel height dibuat dengan = h; Kemudian akhiri program dengan tanda ( } ). float Kotak::hitungvol() { V = ( 2* Awal::hitungluas () * height); return V; }
Pada baris bagian program yang selanjutnya merupakan bagian program yang berfungsi untuk menghitung nilai dari volume kotak dengan memasukkan rumus dari volume kotak yaitu
V = ( 2* Awal::hitungluas () * height);. Hasil dari
perhitungan rumus itulah yang akan dimasukkan ke dalam variabel V Fungsi. float Kotak::hitungkeliling() { K = ( 2 * Awal::hitungkeliling() + 4 * height); return K; }
Pada baris bagian program yang selanjutnya merupakan bagian program yang juga berfungsi untuk menghitung nilai dari keliling kotak dengan memasukkan rumus dari keliling kotak yaitu K = ( 2 * Awal::hitungkeliling() + 4 * height); Hasil dari perhitungan rumus itulah yang akan dimasukkan ke dalam variabel K.Fungsi .
void Kotak:: tampilhasil() { Awal::tampilhasil(); cout<<"Tinggi Kotak : "<
Pada bagian coding yang selanjutnya void Awal::tampilhasil() bagian ini digunakan untuk menampilkan hasil/nilai dari perhitungan pada fungsi-fungsi sebelumnya dengan menggunakan parameter Tinggi, Volume, dan Keliling Kotak yang akan tampil pada ouput program nanti untuk hasil nilai dari keliling kotak.
int main() { Awal ppanjang (5, 9); ppanjang.hitungluas(); ppanjang.hitungkeliling(); ppanjang.tampilhasil(); cout<
Pada bagian penjelasan coding yang terkahir Pada bagian ini merupakan bagian utama program. int main() Pada bagian ini, dilakukan pendeklarasian/penginputan nilai untuk Persegi panjang (5, 9) dan Kotak (11, 12, 13) yang akan digunakan untuk melakukan proses penghitungannya nanti. Kemudian pada baris selanjutnya terdapat fungsi yaitu getch(); yang berfungsi untuk menangkap tampilan pada layar dan program tidak akan tertutup sendiri sebelum tombol pada keyboard ditekan.Fungsi ini mirip dengan fungsi readkey pada pascal, fungsi ini diambil dari file conio.h yang merupakan header yang berguna untuk memanggil fungsi standar yang sudah ada pada C++. Pada bagian akhir dari fungsi main ini ada tertulis sebuah kode yaitu return 0;, yang berarti apabila program ini dieksekusi maka akan memberikan nilai kembalian 0 yang artinya program
dijalankan tanpa error.inilah alasan kenapa fungsi ini menggunakan int (integer) sebagai nilai kembalinya. Kemudian akhiri program dengan tanda kurung kurawal tutup ( } ). Hasil output dari program :
BAB IV KESIMPULAN Pewarisan merupakan sebuah Kelas yang menurunkan sifat-sifat class disebut kelas dasar (base class), sedangkan yang kelas baru yang mewarisi sifat kelas dasar disebut kelas turunan (derived class). Float merupakan tipe data yang menyatakan bilangan pecahan. fungsi strcyp adalah untuk penyalinan(copy) string. KONSTRUKTOR adalah fungsi anggota yang mempunyai nama sama dengan nama kelasnya, sebagai fungsi yang tidak mempunyai nilai balik, harus diletakkan pada bagian public, dijalankan secara otomatis saat objek diciptakan , dapat memiliki argument dan argument dengan nilai default, dapat diletakkan overloading . Kegunaannya : mengalokasikan ruang bagi sebuah objek , memberikan nilai awal terhadap anggota data suatu objek , membentuk tugastugas umum lainnya , melakukan tugasnya pada saat objek diciptakan . (//) merupakan sebuah komentar.
BAB V DAFTAR PUSTAKA
Modul Praktikum Algoritma dan Pemrograman II, Jurusan Teknik Informatika Universitas Palangkaraya, 2015. http://mungjava.blogspot.com/2009/05/memahami-konsep-inheritance pewarisan.html ( diakses pada hari rabu tanggal 30 april 2015 pukul 23:53 WIB) http://www.findamo.com/search.html?q=pewarisan+pada+pemrogaman+c+ +®ion=id&lang=en ( diakses pada hari rabu tanggal 2 mei 2015 pukul 01:00 WIB)
BAB VI LAMPIRAN
Program pertama :
Output program pertama :
Program kedua :
Output Program kedua :