• Tidak ada hasil yang ditemukan

Laporan praktikum OOP modul 4 (AILA)

N/A
N/A
ATILA LUCIYANTI

Academic year: 2023

Membagikan "Laporan praktikum OOP modul 4 (AILA)"

Copied!
30
0
0

Teks penuh

(1)

BAB I PENDAHULUAN

1.1 Latar Belakang

Bahasa pemrograman berorientasi objek (PBO) adalah paradigma pemrograman yang berdasarkan konsep "objek", dapat berisi data dan kode dalam bentuk atribut dan method. OOP (Object Oriented Programming) memungkinkan pengembang untuk membuat program yang lebih modular, fleksibel, dan mudah dipelihara. Salah satu konsep penting yang terdapat di dalamnya adalah inheritance atau pewarisan, di mana class turunan dapat mewarisi atribut dan method dari class induknya. Selanjutnya terdapat konsep polimorfisme, yang mana konsep tersebut memiliki alur bahwa objek dari class turunan dapat digunakan sebagai objek dari class induknya. Dalam polimorfisme, objek dari class turunan dapat mengganti objek dari class induknya dalam situasi tertentu.

Overriding adalah konsep dalam OOP (Object Oriented Programming) di mana class turunan dapat menimpa (override) implementasi method dari class induknya. Dalam overriding, class turunan dapat memberikan implementasi yang berbeda untuk method yang sudah ada di class induknya. Contohnya, class

"Kucing" dapat menimpa implementasi method "suara" dari class "Hewan"

dengan implementasi yang berbeda, karena kucing mengeluarkan suara yang berbeda dengan hewan lainnya. Dalam OOP (Object Oriented Ptogramming), overriding memungkinkan pengembang untuk membuat class turunan yang lebih spesifik dan efisien, karena dapat menyesuaikan implementasi method dengan kebutuhan class turunan tersebut.

1.2 Tujuan

1. Menerapkan konsep pewarisan pada class.

2. Menerapkan konsep pewarisan bertingkat.

3. Memahami konsep polimorfisme.

4. Menerapkan konsep method overloading.

(2)

BAB II DASAR TEORI

2.1 Pengertian Pewarisan (Inheritance)

Inheritance atau pewarisan adalah salah satu konsep penting dalam pemrograman berorientasi objek (PBO) yang memungkinkan class turunan untuk mewarisi atribut dan method dari class induknya. Konsep inheritance ini mengadopsi dunia riil dimana suatu entitas/objek dapat mempunyai entitas/objek turunan. Dalam OOP (Object Oriented Programming), inheritance memungkinkan pengembang untuk membuat class turunan yang lebih spesifik dan efisien, karena tidak perlu menulis ulang atribut dan method yang sudah ada di class induknya.

Konsep inheritance membuat sebuah struktur atau “hierarchyclass dalam kode program. Class yang akan “diturunkan” disebut sebagai class induk (parent class), super class, atau base class. Sedangkan class yang “menerima penurunan”

bisa disebut sebagai class anak (child class), sub class, derived class, atau heir class. Pada bahasa pemrograman berorientasi objek (PBO) tidak semua property dan method dari class induk akan diturunkan. Property dan method dengan hak akses private, tidak akan diturunkan kepada class anak. Hanya property dan method dengan hak akses protected atau public saja yang dapat diakses dari class anak. Class baru yang mewarisi sifat-sifat class sebelumnya dinamakan

subclass”. Sedangkan class yang mewarisi sifat-sifatnya dinamakan “superclass”.

Class yang baru (subclass) selain dapat memiliki sifat-sifat dari induknya (superclass) juga dapat memiliki sifat lain yang menunjukkan kekhasan dirinya.

2.2 Deklarasi Pewarisan (Inheritance)

Dalam Java, konsep inheritance diimplementasikan dengan menggunakan kata kunci "extends" pada deklarasi class turunan. Sebagai contoh, class "Kucing"

dapat diturunkan dari class "Hewan", sehingga class "Kucing" dapat mewarisi atribut dan method dari class "Hewan". Dalam inheritance, terdapat tiga jenis pewarisan, yaitu single inheritance, multilevel inheritance, dan hierarchical

(3)

inheritance. Single inheritance adalah pewarisan yang mana jumlah kelas dasarnya tunggal. Pada pewarisan ini, kelas turunan dapat berjumlah lebih dari satu. Multilevel inheritance adalah pewarisan yang terdiri dari beberapa kelas turunan yang saling berhubungan. Hierarchical inheritance adalah pewarisan yang terdiri dari beberapa kelas turunan yang berasal dari satu kelas dasar.

Berikut contoh deklarasi inheritance (pewarisan):

2.3 Pewarisan Bertingkat

Pewarisan bertingkat (multilevel inheritance) adalah salah satu jenis pewarisan dalam pemrograman berorientasi objek (PBO) yang terdiri dari beberapa kelas turunan yang saling berhubungan. Dalam pewarisan bertingkat, sebuah class turunan dapat mewarisi atribut dan method dari class induknya, dan class induk tersebut juga dapat mewarisi atribut dan method dari class induknya yang lain. Dengan konsep pewarisan bertingkat, sebuah class dapat memiliki banyak class turunan dan dapat mempunyai atribut dan method yang lebih spesifik.

Dalam OOP (Object Oriented Programming), pewarisan bertingkat memungkinkan pengembang untuk membuat program yang lebih efisien dan mudah diubah, karena class turunan dapat mewarisi atribut dan method dari class induknya yang lebih spesifik. Selain itu, pewarisan bertingkat juga memungkinkan pengembang untuk membuat program yang lebih modular dan fleksibel, karena class turunan dapat memiliki banyak class turunan dan dapat mempunyai atribut dan method yang lebih spesifik.

2.4 Pengertian Polimorfisme

Polimorfisme adalah salah satu konsep penting dalam pemrograman berorientasi objek (PBO). Polimorfisme memungkinkan sebuah class untuk memiliki banyak "bentuk" method yang berbeda-beda meskipun namanya sama.

Konsep ini mengadopsi dunia riil dimana suatu objek dapat memiliki banyak

<modifier> class subclass extends superclass { [deklarasi atribut]

[deklarasi method]

}

(4)

bentuk atau perilaku. Dalam bahasa pemrograman C++, polimorfisme dapat diimplementasikan dengan menggunakan konsep "overloading" dan "overriding".

Overloading adalah konsep di mana sebuah class dapat memiliki beberapa method dengan nama yang sama, tetapi dengan parameter yang berbeda-beda. Overriding adalah konsep di mana sebuah class turunan dapat menimpa (override) implementasi method dari class induknya.

Dalam Java, polimorfisme dapat diimplementasikan dengan menggunakan konsep "upcasting", di mana objek dari class turunan diubah menjadi objek dari class induknya. Dalam polimorfisme, objek dari class turunan dapat digunakan sebagai objek dari class induknya. Sebagai contoh, objek "Kucing" dan objek

"Anjing" dapat diubah menjadi objek dari class "Hewan", karena kucing dan anjing adalah jenis hewan. Polimorfisme terbagi menjadi dua suku kata yaitu,

“Poli” yang berarti banyak dan “Morfisme” yang berarti bentuk. Dalam ilmu sains, Polimorfisme (polymorphism) adalah sebuah prinsip dalam biologi di mana organisme atau spesies memiliki banyak bentuk serta tahapan (stages). Prinsip tersebut diterapkan juga pada bahasa pemrograman Java. Polimorfisme pada Java ada dua macam, yaitu Static Polymorphism dan Dynamic Polymorphism. Static Polymorphism adalah polimorfisme yang terjadi pada saat kompilasi, sedangkan Dynamic Polymorphism adalah polimorfisme yang terjadi pada saat runtime.

2.5 Pengertian Overloading

Overloading pada bahasa pemrograman Java adalah konsep dimana sebuah class memiliki beberapa method dengan nama yang sama, namun memiliki parameter dan tipe data yang berbeda. Tujuannya adalah untuk memudahkan penggunaan atau pemanggilan method dengan fungsionalitas yang mirip. Aturan method overloading adalah nama method harus sama dengan method lainnya, parameter haruslah berbeda, dan return boleh sama atau berbeda. Method overloading dapat terjadi dalam satu class yang sama maupun dari class turunan.

Dalam konsep OOP (Object Oriented Programming) pada Java, method overloading berbeda dengan method overriding yang terjadi ketika sebuah class turunan mengubah implementasi dari method yang sudah didefinisikan di class induk.

(5)

2.6 Method Overriding

Overriding adalah konsep dalam pemrograman berorientasi objek di mana sebuah kelas turunan (subclass) menyediakan implementasi ulang dari metode yang sudah didefinisikan dalam kelas induknya (superclass). Dalam overriding, nama, tipe pengembalian, dan parameter metode harus sama persis dengan metode yang diwarisi. Tujuan utama dari overriding adalah untuk mengubah perilaku metode yang diwarisi sehingga sesuai dengan kebutuhan kelas turunan. Dengan melakukan overriding, pengguna dapat mengganti implementasi metode dari kelas induk dengan implementasi yang lebih spesifik atau khusus dalam kelas turunan.

Beberapa hal yang perlu diperhatikan dalam overriding adalah; Nama metode, tipe pengembalian, dan parameter harus sama persis dengan metode yang diwarisi.

Kemudian metode yang diwarisi harus memiliki tingkatan akses yang memungkinkan untuk overriding, yaitu harus bersifat public atau protected.

Selain itu, “@Override dapat digunakan untuk memastikan bahwa metode yang di-override benar-benar ada dalam kelas induk. Metode yang di-override dalam kelas turunan harus memiliki hak akses yang sama atau lebih luas dibandingkan dengan metode yang diwarisi.

Ketika sebuah objek dari kelas turunan dipanggil menggunakan referensi kelas induk, metode yang di-override akan dieksekusi berdasarkan implementasi yang ada di kelas turunan. Hal ini memungkinkan polimorfisme, di mana objek dari kelas yang berbeda dapat memiliki perilaku yang berbeda meskipun dipanggil menggunakan referensi yang sama. Overriding memungkinkan fleksibilitas dalam hierarki pewarisan, di mana kelas turunan dapat mengubah atau memperluas perilaku yang telah didefinisikan dalam kelas induk. Dengan menggunakan overriding, pengguna dapat menciptakan hierarki kelas yang lebih kaya dan fleksibel dalam pemrograman berorientasi objek.

(6)

BAB III

HASIL DAN PEMBAHASAN

3.1 Tugas Pendahuluan 3.1.1 Soal

1. Apa perbedaan antara Overloading dan Overriding? Jelaskan dan beri contoh!

2. Bagaimana syntax untuk memanggil class induk? Jelaskan!

3. Apa perbedaan abstrak class dan class? Jelaskan dan beri contoh!

4. Bagaimana cara menurunkan interface ke dalam interface lain?

3.1.2 Jawaban

1. Overloading dan overriding adalah dua konsep penting dalam pemrograman berorientasi objek (PBO) yang memungkinkan penggunaan polimorfisme dalam Java. Perbedaan utama antara overloading dan overriding adalah bahwa overloading terjadi pada satu class dengan metode yang sama tetapi dengan parameter yang berbeda, sedangkan overriding terjadi antara superclass dan subclass dengan metode yang sama. Overloading menyelesaikan pemanggilan metode saat kompilasi, sedangkan overriding menyelesaikan pemanggilan metode saat runtime menggunakan polimorfisme.

Contoh dari overloading:

public class Calculator { public int add(int a, int b) { return a + b;

}

public double add(double a, double b) { return a + b;

} }

(7)

Program di atas menggunakan konsep overloading, yaitu ketika terdapat beberapa metode dengan nama yang sama tetapi memiliki parameter yang berbeda. Dalam kedua metode tersebut, hasil penjumlahan dihitung dan dikembalikan sebagai nilai return.

Perbedaan utama antara kedua metode ini adalah tipe data parameter yang diterima dan tipe data yang dikembalikan. Dengan adanya dua metode "add" dengan tipe data parameter yang berbeda, program ini memungkinkan pengguna untuk melakukan penjumlahan baik untuk bilangan bulat maupun bilangan desimal, tergantung pada jenis parameter yang pengguna berikan saat memanggil metode tersebut.

Contoh dari overriding:

Program di atas menggambarkan konsep overriding dalam bahasa pemrograman Java. Terdapat dua kelas, yaitu kelas

"Binatang" dan kelas "Kucing". Kelas "Kucing" merupakan turunan dari kelas "Binatang" dengan menggunakan kata kunci

"extends".

2. Untuk memanggil class induk (superclass) dari class turunan (subclass), pengguna dapat menggunakan kata kunci super di dalam subclass. Kata kunci super digunakan untuk merujuk ke class induk dan memanggil metode atau variabel yang diwarisi oleh subclass.

public class Binatang { public void suara() {

System.out.println("Binatang tersebut membuat suara!

Contohnya ");

} }

public class Kucing extends Binatang { @Override

public void suara() {

System.out.println("Kucing mengeong");

} }

(8)

3. Perbedaan antara abstrak class dan class biasa adalah abstrak class tidak dapat di-instantiate, sedangkan class biasa dapat di- instantiate. Abstrak class digunakan sebagai blueprint untuk class turunan yang akan diwarisi dan diberikan implementasi lebih lanjut, sementara class biasa digunakan untuk membuat objek secara langsung dan memiliki implementasi lengkap untuk metode- metodenya.

Berikut contoh syntax dari abstract class (kelas abstrak):

Program di atas menggambarkan penggunaan abstract class dalam bahasa pemrograman Java. Terdapat sebuah kelas abstrak bernama "MakhlukHidup". Kelas "MakhlukHidup" dideklarasikan sebagai abstract class dengan menggunakan kata kunci "abstract"

sebelum deklarasi kelas. Abstract class adalah kelas yang tidak dapat diinstansiasi langsung, namun digunakan sebagai kerangka atau blueprint untuk kelas-kelas turunannya.

Berikut contoh syntax dari class biasa:

public abstract class MakhlukHidup {

public abstract void berdiri ();

public void oksigen(){

System.out.println("- butuh Makanan");

System.out.println("- butuh oksigen");

System.out.println("- butuh air");

} }

public class Manusia extends MakhlukHidup { private String duaKaki;

public Manusia(String duaKaki){

this.duaKaki = duaKaki;

}

public void berdiri (){

System.out.println("Manusia berdiri menggunakan :

"+duaKaki);

} }

(9)

Program di atas merupakan sebuah class Java yang bernama Manusia yang merupakan turunan dari class MakhlukHidup. Class Manusia memiliki sebuah atribut duaKaki yang merupakan tipe data String dan sebuah constructor yang menerima parameter duaKaki untuk menginisialisasi atribut duaKaki pada objek Manusia.

4. Untuk menurunkan (inherit) interface ke dalam interface lain, pengguna dapat menggunakan kata kunci extends. Mirip dengan pewarisan class, pengguna dapat membuat interface turunan (sub- interface) yang mewarisi definisi metode dari interface yang lain.

Berikut adalah contoh cara menurunkan interface ke dalam interface lain:

Program di atas mendefinisikan empat buah interface dalam bahasa pemrograman Java. Interface pertama adalah Shape yang memiliki satu metode draw(). Interface ini mewakili sebuah bentuk atau objek yang dapat digambar. Interface kedua adalah Circle yang merupakan turunan dari Shape. Interface Circle menambahkan satu metode baru yaitu calculateArea(). Hal ini mengindikasikan bahwa Circle merupakan bentuk lingkaran yang memiliki kemampuan untuk menghitung luasnya.

public interface Shape { void draw();

}

public interface Circle extends Shape { double calculateArea();

}

public interface Drawable extends Shape { void setColor(String color);

void setLineWidth(int width);

}

public interface ColoredDrawable extends Drawable { void setFillColor(String fillColor);

}

(10)

BAB IV IMPLEMENTASI

4.1 Kegiatan Praktikum

4.1.1 Program Pewarisan Bertingkat (Inheritance) a) Code program

Program di atas merupakan class induk dari program test pewarisan bertingkat yakni class “Hewan” yang di dalamnya berisikan method “bergerak” dan “makan” , yang mana method tersebut berfungsi sebagai keterangan yang digunakan untuk penjelasan beberapa subclass selanjutnya.

Program di atas merupakan turunan class atau subclass dari class “Hewan” yang terdapat kata kunci extends sebagai penurunan dari program pertama yang dimana didalamnya terdapat method

“melahirkan”, berfungsi untuk memberi keterangan pada hewan yang berjenis mamalia pada program turunan class selanjutnya.

package Hewan;

public class Hewan { public void bergerak() {

System.out.println("Hewan Bergerak");

}

public void makan() {

System.out.println("Hewan makan");

} }

public class mamalia extends Hewan{

public void melahirkan() {

System.out.println("Mamalia melahirkan");

} }

public class Unggas extends Hewan{

public void bertelur(){

System.out.println("Unggas bertelur");

} }

(11)

Program di atas merupakan turunan class atau subclass ke-2 dari class “Hewan” yang dimana dalam program menjalaskan tentang hewan berjenis unggas. Penurunan class pada program di atas menggunakan kata kunci “extends”. Pada program terdapat method “bertelur” berfungsi untuk memberi keterangan pada hewan yang berjenis unggas pada program turunan class selanjutnya.

Program di atas merupakan turunan ketiga atau subclass dari class mamalia yang merupakan turunan dari class hewan, pada program berisikan penjelasan bahwa hewan kucing adalah hewan yang mencakar dengan kuku tajamnya. Penjelasan tersebut terdefinisi dengan method berparameter “mencakar”.

Program di atas merupakan turunan ketiga atau subclass dari class unggas yang merupakan turunan dari class hewan, pada program berisikan penjelasan bahwa hewan unggas adalah hewan yang menyelam dalam es. Penjelasan tersebut terdefinisi dengan method berparameter “menyelam”.

public class Pinguin extends Unggas { public void menyelam(){

System.out.println("Pinguin menyelam dalam Es");

} }

public class TestPewarisanBertingkat { public static void main(String[] args) { System.out.println("Pinguin : ");

Pinguin tux = new Pinguin();

tux.bergerak();

tux.makan();

tux.bertelur();

tux.menyelam();

System.out.println();

System.out.println("Kucing : ");

public class Kucing extends mamalia { public void mencakar(){

System.out.println("Kucing mencakar dengan kuku tajamnya");

} }

(12)

Program di atas merupakan program akhir dari program class

“Hewan” yang memiliki kelas "TestPewarisanBertingkat" sebagai kelas utama (main class). Program ini berguna untuk me-running kerangka class maupun subclass yang telah dibuat. Di dalam metode "main", terdapat beberapa pernyataan untuk mencetak teks ke layar sebagai judul dari setiap objek yang akan dibuat. Pertama, objek "tux" dibuat dari kelas "Pinguin" menggunakan operator

"new". Kemudian, metode "bergerak", "makan", "bertelur", dan

"menyelam" dipanggil pada objek "tux" untuk menunjukkan perilaku objek pinguin. Selanjutnya, objek "tom" dibuat dari kelas

"Kucing" menggunakan operator "new". Metode "bergerak",

"makan", "melahirkan", dan "mencakar" dipanggil pada objek

"tom" untuk menunjukkan perilaku objek kucing.

b) Running program

Gambar 4.1 Output program pewarisan bertingkat (inheritance).

Gambar di atas merupakan output atau hasil running dari program yang sudah di buat pada text box sebelumnya. Pada gambar menghasilkan dua objek dengan method masing-masing, yakni parameter “Mamalia” dan parameter “Unggas”.

Kucing tom = new Kucing();

tom.bergerak();

tom.makan();

tom.melahirkan();

tom.mencakar();

} }

(13)

4.1.2 Program Polimorfisme 1 a) Code program

Program di atas merupakan class induk pada program polimorfisme dalam pemrograman Java. Di dalam class "Orang", terdapat tiga method yaitu "makan", "minum", dan "berlari". Yang mana pada method "makan" mencetak teks "Orang makan Makanan", method "minum" mencetak teks "Orang minum Air", dan method "berlari" mencetak teks "Orang berlari dengan kedua kaki bergantian cepat". Ketiga method tersebut akan digunakan pada turunan class selanjutnya.

Program di atas merupakan turunan class atau subclass dari kelas induk pada text box sebelumnya yang mana menggunakan kata kunci extends sebagai alat penurunannya. Dengan

package Orang;

public class Orang { public void makan(){

System.out.println("Orang makan Makanan");

}

public void minum(){

System.out.println("Orang minum Air");

}

public void berlari(){

System.out.println("Orang berlari dengan kedua kaki bergantian cepat");

} }

public class OrangA extends Orang{

@Override

public void makan(){

System.out.println("Makan terus sampai kenyang");

}

@Override

public void minum(){

System.out.println("Minum teh manis");

}

@Override

public void berlari(){

System.out.println("Berlari dengan kecepatan 140 Km/jam");

} }

(14)

menggunakan overriding, kelas "OrangA" dapat mengganti perilaku metode-metode yang diwarisi dari kelas "Orang" sesuai dengan kebutuhan spesifik kelas "OrangA". Hal ini memungkinkan untuk memperluas atau memodifikasi implementasi metode yang sudah ada dalam kelas induk tanpa mengubah struktur dasar dari kelas tersebut.

Program di atas merupakan turunan class atau subclass ke dua dari kelas induk “Orang”, yang mana method di dalamnya sama seperti subclass “Orang A” dan menggunakan kata kunci extends sebagai alat penurunannya.

Program di atas merupakan program test polimorfisme, yang mana, di dalam kelas "TestPolimorfisme", terdapat metode "main"

yang merupakan metode utama. Di dalam metode "main", terdapat public class OrangB extends Orang {

@Override

public void makan(){

System.out.println("Makan yang Pedas dan Gurih");

}

@Override

public void minum(){

System.out.println("Minum Kopi Susu tanpa ES");

}

@Override

public void berlari(){

System.out.println("Berlari dengan kecepatan 0.07 Km/jam");

} }

public class TestPolimorfisme {

public static void main(String[] args) { OrangA gat = new OrangA();

OrangB edo = new OrangB();

System.out.println("Gatot :");

gat.makan();

gat.minum();

gat.berlari();

System.out.println("Edo :");

edo.makan();

} }

(15)

dua objek yaitu "gat" yang merupakan objek dari kelas "OrangA"

dan "edo" yang merupakan objek dari kelas "OrangB". Dalam hal ini, objek "gat" dan "edo" adalah contoh polimorfisme, di mana mereka merespon metode dengan nama yang sama "makan"

namun perilaku metode tersebut bergantung pada kelas objek yang sebenarnya.

b) Running program

Gambar 4.2 Output program polimorfisme 1.

Gambar di atas menampilkan hasil dari pogram test polimorfirme yang mana menghasilkan dua objek yang memiliki 3 method makan, minum, dan berlari. Ketiga method tersebut memiliki statement masing-masing. Namun, pada objek “Edo”

hanya ter-implementasi 1 method, yakni method makan, karena pada program test polimorfisme hanya memanggil 1 method saja.

4.1.3 Program Polimorfisme 2 a) Code program

Program di atas merupakan sebuah class "Orang" yang memiliki method bernama "getKendaraan", yang berdungsi untuk menjalankan atribut atau method lain pada turunan class (subclass) lainnya pada program polimorfisme 2, yakni class motor dan class mobil.

package Orang2;

public class Orang {

public void getKendaraan(){

} }

(16)

Program di atas memaparkan sebuah class bernama “Motor”

yang memiliki kata kunci override dengan sebuah metode

"toString" yang di-override dari kelas induknya. Metode "toString"

pada Java adalah metode yang secara default mengembalikan representasi String dari objek. Namun, dalam kelas "Motor", metode "|toString" di-override untuk memberikan implementasi khusus.

Program di atas memaparkan sebuah class bernama “Mobil”

yang memiliki kata kunci override dengan sebuah metode

"toString" yang di-override dari kelas induknya sama seperti pada program dengan class “Motor”.

Program di atas merupakan program sebuah kelas bernama

"OrangC" yang memiliki metode "getKendaraan" dari class

“Orang”. Di dalam metode ini, terdapat pembuatan objek "Motor"

dengan menggunakan konstruktor default kelas "Motor".

Kemudian, objek "kendaraan" tersebut dijadikan argumen pada public class Motor {

@Override

public String toString(){

return "Kendaraan Motor";

} }

public class Mobil { @Override

public String toString(){

return "Kendaraan Mobil";

} }

public class OrangC {

public void getKendaraan(){

Motor kendaraan = new Motor();

System.out.println(kendaraan.toString());

} }

(17)

pemanggilan metode "toString". Metode "getKendaraan" dipanggil pada objek dari kelas "OrangC", akan mencetak String "Kendaraan Motor", yang merupakan hasil representasi String dari objek

"Motor" yang dibuat di dalam metode tersebut.

Program di atas merupakan program sebuah kelas bernama

"OrangD" yang memiliki metode "getKendaraan" dari class

“Orang”. Di dalam metode ini, terdapat pembuatan objek "Mobil;"

dengan menggunakan konstruktor default kelas "Mobil”, sama seperti pada class “Orang C”

Program di atas adalah contoh penggunaan polimorfisme dalam pemrograman Java. Di dalam kelas "TestPolimorfisme2", terdapat metode "main" yang merupakan metode utama. Di dalam metode "main", terdapat dua objek yaitu "aku" yang merupakan objek dari kelas "OrangD" dan "dia" yang merupakan objek dari kelas "OrangC". Dalam hal ini, objek "aku" dan "dia" adalah contoh polimorfisme, di mana mereka merespon metode dengan nama yang sama ("getKendaraan") namun perilaku metode tersebut bergantung pada kelas objek yang sebenarnya.

public class OrangD {

public void getKendaraan(){

Mobil kendaraan = new Mobil();

System.out.println(kendaraan.toString());

} }

public class TestPolimorfisme2 { public static void main(String[] args) { OrangD aku = new OrangD();

OrangC dia = new OrangC();

System.out.println("Aku : ");

aku.getKendaraan();

System.out.println("Dia : ");

dia.getKendaraan();

} }

(18)

b) Running program

Gambar 4.3 Output program polimorfisme 2.

Gambar di atas merupakan hasil running dari program polimorfisme dengan classTestPolimorfisme2”, yang mana class tersebut adalah subclass paling akhir yang berguna sebagai tempat pemanggilan method dan me-running seluruh kerangka program mulai dari superclass dan subclass. Pada gambar muncul hasil running dengan objek “Aku” , yeng memiliki statement

“Kendaraan Mobil”. Sedangkan, objek “Dia”, memiliki statement

“Kendaraan Motor”.

(19)

4.2 Tugas Praktikum 4.2.1 Soal

1. Implementasi program diagram rantai makanan hewan dengan inheritance.

2. Implementasi program polimerfisme.

3. Implementasi program overriding.

4.2.2 Jawaban

1. Program rantai makanan hewan dengan inheritance.

a) Diagram

Dalam diagram di atas, Organisme adalah kelas abstrak sebagai kelas induk. Kelas Ikan dan Paus adalah turunan langsung dari Organisme, sementara Hiu adalah turunan dari Ikan, sedangkan orca merupakan turunan dari paus. Hal ini

Organisme - Makan() - Bergerak() - Info( )

Ikan Paus

- Makan( ) - Bergerak( )

- Makan( ) - Bergerak( )

Hiu Orca

- Makan( ) - Makan( )

Gambar 4.4 Diagram program rantai makanan pewarisan bertingkat (inheritance).

(20)

menunjukkan hubungan pewarisan bertingkat antara kelas- kelas tersebut, dengan setiap turunan mewarisi atribut dan metode dari kelas induknya.

b) Code program

Program di atas adalah sebuah abstraksi dari kelas Organisme. Kelas ini memiliki atribut “nama” dan

“jenisMakanan” yang merepresentasikan nama organisme dan jenis makanan yang dikonsumsi olehnya. Kelas ini juga memiliki metode abstrak makan() dan bergerak() yang harus diimplementasikan oleh kelas turunannya. Metode makan() dan bergerak() digunakan untuk menampilkan perilaku makan dan gerak dari organisme tersebut.

Selain itu, kelas Organisme juga memiliki metode info() yang menampilkan informasi tentang nama dan jenis makanan organisme. Kelas ini menggunakan konstruktor untuk menginisialisasi atribut “nama” dan “jenisMakanan”. Program ini masih bersifat abstrak karena kelas Organisme tidak dapat diinstansiasi. Program ini menyediakan kerangka dasar untuk menggambarkan organisme dalam ekosistem dan memungkinkan kelas turunan untuk menentukan perilaku khusus mereka sendiri.

package OCEAN;

abstract class Organisme { String nama;

String jenisMakanan;

public Organisme(String nama, String jenisMakanan) { this.nama = nama;

this.jenisMakanan = jenisMakanan;

}

public abstract void makan();

public abstract void bergerak();

public void info() {

System.out.println("Nama: " + nama);

System.out.println("Jenis makanan: " + jenisMakanan);

} }

(21)

Program di atas adalah kelas Ikan yang merupakan turunan dari kelas Organisme. Kelas Ikan memiliki konstruktor yang menerima parameter nama dan jenisMakanan, dan menggunakan konstruktor superclass (Organisme) untuk menginisialisasi atribut-atribut tersebut. Kelas Ikan juga mengimplementasikan metode makan() dan bergerak() yang diturunkan dari kelas Organisme.

Program di atas adalah kelas Paus yang merupakan turunan dari kelas Organisme. Kelas Paus memiliki konstruktor yang menerima parameter nama dan jenisMakanan, dan menggunakan konstruktor superclass (Organisme) untuk menginisialisasi atribut-atribut tersebut. Kelas Paus juga mengimplementasikan metode makan() dan bergerak() yang diturunkan dari kelas Organisme.

public class Ikan extends Organisme {

public Ikan(String nama, String jenisMakanan) { super(nama, jenisMakanan);

}

public void makan() {

System.out.println("Ikan " + nama + " memakan " + jenisMakanan);

}

public void bergerak() {

System.out.println("Ikan " + nama + " berenang");

} }

public class Paus extends Organisme {

public Paus(String nama, String jenisMakanan) { super(nama, jenisMakanan);

}

public void makan() {

System.out.println("Paus " + nama + " memakan " + jenisMakanan);

}

public void bergerak() {

System.out.println("Paus " + nama + " berenang");

} }

(22)

Program di atas adalah program yang terdapat kelas Hiu yang merupakan turunan dari kelas Ikan. Kelas Hiu memiliki konstruktor yang menerima parameter nama dan jenisMakanan, dan menggunakan konstruktor superclass (Ikan) untuk menginisialisasi atribut-atribut tersebut. Kelas Hiu juga mengimplementasikan metode makan() yang diturunkan dari kelas Ikan.

Program di atas adalah kelas Orca yang merupakan turunan dari kelas Paus. Kelas Orca memiliki konstruktor yang menerima parameter nama dan jenisMakanan, dan menggunakan konstruktor superclass (Paus) untuk menginisialisasi atribut-atribut tersebut. Kelas Orca juga mengimplementasikan metode makan() yang diturunkan dari kelas Paus.

public class Hiu extends Ikan {

public Hiu(String nama, String jenisMakanan) { super(nama, jenisMakanan);

}

public void makan() {

System.out.println("Hiu " + nama + " memakan ikan");

} }

public class Orca extends Paus{

public Orca(String nama, String jenisMakanan) { super(nama, jenisMakanan);

}

public void makan() {

System.out.println("Orca " + nama + " memakan hiu dan ikan");

} }

public class PewarisanBertingkatLaut { public static void main(String[] args) { Organisme[] rantaiMakanan = { new Ikan("Tuna", "Plankton"),

new Hiu("Great White Shark", "Ikan"), new Paus("Blue Whale", "Tuna"),

new Orca("Killer Whale", "Hiu dan ikan")

(23)

Program di atas adalah program yang menggambarkan pewarisan bertingkat dalam sebuah rantai makanan di laut.

Program ini menggunakan beberapa kelas yang merupakan turunan dari kelas Organisme. Di dalam metode main(), terdapat array rantaiMakanan yang berisi objek-objek dari kelas-kelas turunan, yaitu Ikan, Hiu, Paus, dan Orca. Setiap objek memiliki atribut nama dan jenisMakanan yang diberikan melalui konstruktor saat pembuatan objek.

Selanjutnya, program melakukan iterasi melalui array rantaiMakanan dan memanggil metode info(), bergerak(), dan makan() pada setiap objek Organisme. Metode info() akan menampilkan informasi tentang nama dan jenis makanan organisme tersebut. Metode bergerak() akan menampilkan perilaku bergerak organisme, sedangkan metode makan() akan menampilkan perilaku makan organisme sesuai dengan spesiesnya.

c) Running program };

for (Organisme organisme : rantaiMakanan) { organisme.info();

organisme.bergerak();

organisme.makan();

System.out.println();

} } }

(24)

Gambar 4.5 Output programrantai makanan hewan dengan inheritance.

Hasil program menampilkan informasi tentang setiap organisme dalam rantai makanan laut. Dimulai dengan Ikan Tuna, program menampilkan nama dan jenis makanan ikan tersebut, serta perilaku berenang dan makan. Selanjutnya, program menampilkan informasi yang sama untuk Hiu Great White Shark, Paus Blue Whale, dan Orca Killer Whale. Setiap organisme memiliki perilaku berenang yang unik dan pola makan yang sesuai dengan jenis makanannya.

2. Program polimorfisme a) Code program

Program di atas merupakan class induk pada program polimorfisme dalam pemrograman Java. Di dalam class

"Siswa", terdapat tiga method yaitu "cita_cita", "Hobi", dan

"pelajaran". Yang mana pada method "cita_cita" memiliki statement"Siswa bercita-cita", method "Hobi" ber-statement

package SEKOLAH;

public class Siswa { public void cita_cita(){

System.out.println("Siswa bercita-cita");

}

public void Hobi(){

System.out.println("Siswa memiliki banyak hobi");

}

public void pelajaran(){

System.out.println("Siswa belajar dengan giat");

} }

(25)

"Siswa memiliki banyak hobi", dan method "pelajaran" dengan statement "Siswa belajar dengan giat". Ketiga method tersebut akan digunakan pada turunan class selanjutnya.

Program di atas merupakan turunan class atau subclass dari kelas induk pada text box sebelumnya yang mana menggunakan kata kunci extends sebagai alat penurunannya.

Dengan menggunakan overriding, kelas "SiswaA" dapat mengganti perilaku metode-metode yang diwarisi dari kelas

"Siswa" sesuai dengan kebutuhan spesifik kelas "SiswaA". Hal ini memungkinkan untuk memperluas atau memodifikasi implementasi metode yang sudah ada dalam kelas induk tanpa mengubah struktur dasar dari kelas tersebut.

public class SiswaB extends Siswa{

@Override

public void cita_cita(){

System.out.println("memiliki cita-cita menjadi penyanyi");

}

@Override

public void Hobi(){

System.out.println("memiliki Hobi menari");

}

@Override

public void pelajaran(){

System.out.println("sangat menyukai bahasa inggris");

} }

public class SiswaA extends Siswa{

@Override

public void cita_cita(){

System.out.println("memiliki cita-cita menjadi pilot");

}

@Override

public void Hobi(){

System.out.println("memiliki Hobi belajar");

}

@Override

public void pelajaran(){

System.out.println("sangat menyukai matematika");

} }

(26)

Program di atas merupakan turunan class atau subclass ke- dua dari kelas induk “Siswa”, yang mana method di dalamnya sama seperti subclass “SiswaA” dan menggunakan kata kunci extends sebagai alat penurunannya.

Program di atas merupakan program test polimorfisme yang mana, di dalam class "tugasPolimorfisme", terdapat metode "main" yang merupakan metode utama. Di dalam metode "main", terdapat dua objek yaitu "rav" yang merupakan objek dari kelas "SiswaA" dan "ela" yang merupakan objek dari kelas "SiswaB". Dalam hal ini, objek "rav" dan "ela"

adalah contoh polimorfisme, di mana mereka merespon metode dengan nama yang sama ("makan") namun perilaku metode tersebut bergantung pada kelas objek yang sebenarnya.

b) Running program

Gambar 4.6 Output program polimorfisme.

public class tugasPolimorfisme {

public static void main(String[] args) { SiswaA rav = new SiswaA();

SiswaB ela = new SiswaB();

System.out.println("Ravandi :");

rav.cita_cita();

rav.Hobi();

rav.pelajaran();

System.out.println("Elana :");

ela.cita_cita();

ela.Hobi();

ela.pelajaran();

} }

(27)

Gambar di atas menampilkan hasil dari pogram tugas polimorfirme yang mana menghasilkan dua objek dan di dalamnya memiliki 3 method “cita_cita”, “Hobi”, dan

“pelajaran”. Ketiga method tersebut memiliki statement masing-masing,

3. Program method override a) Code program

Program di atas merupakan class “Hobi” yang berada dalam package HOBI. Kelas ini memiliki dua metode, yaitu deskripsi dan getInfo. Metode deskripsi bertujuan untuk mencetak pesan "Ini adalah hobi umum" ke dalam output saat dipanggil. Sementara itu, metode getInfo mengembalikan String "Hobi ini seru!".

Program di atas merupakan kelas Menggambar yang merupakan turunan dari kelas Hobi. Kelas ini melakukan method overriding terhadap metode deskripsi dan getInfo yang ada di kelas induknya.

package HOBI;

public class Hobi {

public void deskripsi() {

System.out.println("Ini adalah hobi umum.");

}

public String getInfo() { return "Hobi ini seru!";

} }

public class Menggambar extends Hobi { @Override

public void deskripsi() {

System.out.println("Menggambar adalah hobi menarik.");

}

@Override

public String getInfo() {

return "ayo gambar biar bisa dapet cuan!";

} }

(28)

Program di atas merupakan kelas Menari yang merupakan turunan dari kelas Hobi. Kelas ini juga melakukan method overriding terhadap metode deskripsi dan getInfo yang ada di kelas induknya. Metode deskripsi di kelas Menari mencetak pesan "Menari adalah hobi yang sehat" ke dalam output saat dipanggil. Dengan melakukan method overriding, pengguna dapat mengganti implementasi dari metode yang telah didefinisikan di kelas induk. Metode getInfo di kelas Menari mengembalikan String "Ayo menari untuk menghilangkan penat!" saat dipanggil. Dalam hal ini, pengguna juga melakukan method overriding untuk mengubah informasi yang dikembalikan oleh metode tersebut.

Program di atas merupakan kelas testHobi yang berisi metode main sebagai titik masuk eksekusi program. Di dalam metode main, terdapat pembuatan objek dari kelas Hobi,

public class testHobi {

public static void main(String[] args) { Hobi hobi1 = new Hobi();

Hobi hobi2 = new Menggambar();

Hobi hobi3 = new Menari();

hobi1.deskripsi();

System.out.println(hobi1.getInfo());

hobi2.deskripsi();

System.out.println(hobi2.getInfo());

hobi3.deskripsi();

System.out.println(hobi3.getInfo());

} }

public class Menari extends Hobi { @Override

public void deskripsi() {

System.out.println("Menari adalah hobi yang sehat.");

}

@Override

public String getInfo() {

return "Ayo menari untuk menghilangkan penat!";

} }

(29)

Menggambar, dan Menari untuk menguji method overriding pada metode deskripsi dan getInfo. Pada saat pembuatan objek hobi1 dari kelas Hobi, metode deskripsi akan mencetak pesan

"Ini adalah hobi umum" dan metode getInfo akan mengembalikan String "Hobi ini seru!". Hal ini sesuai dengan implementasi di kelas Hobi tersebut. Selanjutnya, objek hobi2 dari kelas Menggambar dan hobi3 dari kelas Menari dibuat.

Karena kedua kelas tersebut melakukan method overriding terhadap metode deskripsi dan getInfo, maka implementasi yang ada di kelas turunan akan dijalankan.

b) Running program

Gambar 4.7 Output program overriding.

Hasil program yang ditampilkan di atas mencetak deskripsi dan informasi mengenai hobi-hobi yang digunakan. program ini menggambarkan penggunaan method overriding untuk memperluas fungsionalitas kelas induk Hobi dengan implementasi yang lebih khusus di kelas turunan Menggambar dan Menari.

(30)

BAB V PENUTUP

5.1 Analisa

Pada modul kali ini dapat dianalisa bahwa pewarisan (inheritance) dalam pemrograman memungkinkan untuk membuat hierarki kelas di mana subclass dapat mewarisi atribut dan metode dari kelas induk. Hal ini memungkinkan untuk membagi dan mengorganisir kode secara hierarkis dan meminimalkan duplikasi kode. Polimorfisme memanfaatkan pewarisan dengan memungkinkan objek dari kelas yang berbeda untuk merespon metode dengan nama yang sama, sehingga memungkinkan fleksibilitas dalam penggunaan objek. Overriding digunakan untuk mengubah perilaku metode yang diwarisi oleh kelas turunan dengan menyediakan implementasi yang berbeda. Sedangkan overloading memungkinkan penggunaan metode dengan nama yang sama tetapi memiliki parameter yang berbeda. Ini memudahkan penggunaan metode dengan tipe data yang berbeda tanpa mengubah nama metode.

5.2 Kesimpulan

Secara keseluruhan, inheritance, polimorfisme, dan overriding adalah konsep penting dalam bahasa pemrograman berorientasi objek seperti Java.

Kombinasi dari ketiga konsep ini memungkinkan pengembang untuk membuat kode yang efisien, mudah dipelihara, dan dapat diadaptasi dengan baik ke kebutuhan aplikasi yang berbeda.

5.3 Saran

Diharapkan dengan adanya laporan mengenai “Inheritance, polimorfisme, &

overriding” ini, praktikan selanjutnya dapat menguasai materi dan konsep praktikum. Serta memahami isi program, seperti bagaimana mengelola code dan menggunakan inheritance, polimorfisme, dan overriding pada bahasa pemrograman Java.

Gambar

Gambar 4.1 Output program pewarisan bertingkat (inheritance).
Gambar 4.2 Output program polimorfisme 1.
Gambar 4.3 Output program polimorfisme 2.
Gambar 4.4 Diagram program rantai makanan pewarisan  bertingkat (inheritance).
+4

Referensi

Dokumen terkait

The four platforms of the NDEAS-Model, as explained in the earlier part of this paper are: • The domestic education and technical training standardization platform P1 • The internal