BAB 8 - Kelas Abstrak (Abstract Class) - TeachMeSoft

BAB 8 - Kelas Abstrak (Abstract Class)

BAB 8 - Kelas Abstrak (Abstract Class)

Capaian dan Indikator


1. Capaian Pembelajaran

Mahasiswa dapat mengenal dan memahami konsep abstract class, abstract method dan keyword  "final" serta penerapannya dalam konsep OOP.

2. Indikator

Mampu menjelaskan dan mengimplementasika konsep abstract class, abstract method dan keyword "final" serta penerapannya dalam konsep OOP


Uraian Materi


Anda pasti masih ingat contoh program yang menghitung berat badan ideal berdasarkan tinggi  badan.  Di  dalam contoh tersebut, terdapat class Manusia, class Laki_Laki, dan class Perempuan seperti contoh bagan di bawah ini.



Dalam abstract class, class tertinggi merupakan kelas Manusia. Apabila dalam kelas abstract terdapat  abstract method, maka method tersebut hanya mendeskripsi method tanpa isi method nya. Untuk lebih jelas, simak konsep abstract method di bawah ini.

A. Abstract Class

Abstract Class merupakan kelas yang berada pada posisi tertinggi dalam sebuah hierarki kelas. Sesuai dengan namanya , abstract class dapat didefinisikan pada class itu sendiri. Berikut adalah cara mendeklarasi kan abstract class:
abstract class Nama_Kelas
{
 //isi abstract class
}

Contoh:
abstract class Manusia
{
 //isi abstract class
}

Di dalam abstract class dapat juga diberi abstract method (optional). Penggunaan abstract method tidak diperlukan statement dalam method tersebut.

Berikut adalah cara mendeklarasikan abstract method pada abstract class:
abstract class Nama_Kelas
{
 //untuk sub program berjenis prosedur
 [access_modifier] abstract void [nama_method]();
 
 //untuk sub program berjenis function
 [access_modifier] abstract [tipe_data] [nama_method]();
}

Contoh:
abstract class Manusia
{
 //untuk sub program berjenis prosedur
 public abstract void cetak();
 
 //untuk sub program berjenis function
 public abstract double HtgBBI();
}

Catatan:
Apabila dalam abstract class terdapat abstract method dan kelas tersebut diturunkan ke kelas turunannya, maka method tersebut harus dideklarasikan ulang (overriding method) dengan diberi statement pada isi methodnya. Untuk lebih jelas penggunaan overriding method, dapat dilihat pada soal latihan

Apabila class tersebut merupakan abstract class, maka class tersebut bisa terdapat abstract method atau tidak (optional). Sedangkan apabila kelas tersebut, terdapat abstract method , maka kelas tersebut wajib berbentuk abstract class


B. Keyword ''final"

Keyword "final" digunakan untuk mencegah suatu class diturunkan atau suatu method di lakukan  pendeklarasian ulang (overriding method). Berikut adalah cara mendeklarasikan final dalam class:
final class Nama_Kelas
{
 //isi class
}

Contoh:
final class Manusia
{
 //isi class
}

Sedangkan cara mendeklarasikan "final" pada method adalah sebagai berikut:
final class Nama_Kelas
{
 //sub program berjenis prosedur
 [access_modifier] final void [nama_method]()
 {
  //isi method
 }
 
 //sub program berjenis function
 [access_modifier] final [tipe_data] [nama_method]()
 {
  //isi method
  return [isi_nilai];
 }
}

Contoh
final class Manusia
{
 //sub program berjenis prosedur
 public final void cetak()
 {
  //isi method
 }
 
 //sub program berjenis function
 public final double HtgBBI()
 {
  //isi method
  return 0;
 }
}


Untuk lebih detail dalam penggunaan keyword "final'', akan dibahas lebih lanjut melalui soal latihan


Latihan


Perhatikan gambar di bawah ini!




Buatlah class untuk menghitung Berat Sadan Ideal sesuai dengan rancangan gambar diatas! Rumus hitung berat badan ideal adalah sebagai berikut:
Laki-Laki                = (tinggi badan(cm)-100) kg x 90%
Untuk Perem puan    = (tinggi badan( cm)-100) kg x 80%

Tambahkan pula class Utama yang digunakan untuk memanggil class Mahasiswa.Ketika class Utama dijalankan, hasilnya akan tampak seperti di bawah ini :



Jawabannya adalah...
Ketika anda perhatikan baik-baik bagan soal latihan modul ini dengan soal latihan modul sebelumnya, maka anda akan menemukan perbedaan sebagai berikut:




Langkah1: class Manusia (ketikkan script berikut)
a.  Membuat kerangka class Manusia


Setelah anda membuat class Manusia, simpan file tersebut dengan nama Manusia.java. Di  dalam  class Manusia, saya juga menyediakan tempat untuk mendeklarasikan variabel, constructor, getter dan method HtgBBI() untuk menghitung berat badan ideal.

b.   Mendeklarasi variabel yang dibutuhkan
Setelah kita mem buat kerangka class, maka diperlukan pendeklarasian variabel yang nantinya   digunakan sebagai tempat menyimpan data yang bersifat sementara (temporary). Gambar di bawah ini menunjukkan pendeklarasian variabel.



c.    Mendeklarasi constructor
Setelah membuat variabel yang dibutuhkan pada class Manusia, langkah selanjutnya anda membuat  constructor Manusia. Constructor ini nantinya akan digunakan dalam class Laki_Laki dan class  Perempuan. Gambar di bawah ini menunjukkan deklarasi constructor.


Coba perhatikan kembali script yang telah anda buat seperti gambar di atas. Karena terdapat perbedaan deklarasi nama variabel pada class Manusia dan deklarasi variabel pada constructor Man usia, maka keyword this boleh digunakan atau tidak (optional). Untuk lebih jelas mengenai keyword  this, anda dapat melihat rmodul 1.


d.  Membuat method getter
Setelah membuat constructor, anda tinggal membuat method getter untuk mengambil nilai dari masing-masing variabel. Hal ini bertujuan untuk mengambil nilai dari variabel pada class Manusia yang nantinya akan kita gunakan ke dalam class Laki_Laki maupun class Perempuan. Perlu diketahui pula, bahwa dalam pembuatan variabel pada parameter di method getter, harus sesuai dengan tipe data pada variabel yang dideklarasikan di kelas. Gambar di bawah ini menunjukkan deklarasi getter.


e.   Membuat method HtgBBI()
Setelah membuat method getter(), anda tinggal membuat method HtgBBI() yang bertugas untuk menghitung berat badan ideal berdasarkan tinggi badan. Karena method HtgBBI() merupakan abstract method, maka method tersebut tidak terdapat isi method. Gambar di bawah ini menunjukkan deklarasi method HtgBBI().


Coding
abstract class Manusia
{
 //deklarasi variabel
 private double TinggiBadan;
 
 //constructor
 public Manusia (double TB)
 {
  TinggiBadan = TB;
 }
 
 //getter
 public double getTB()
 {
  return TinggiBadan;
 }
 
 //method HtgBBI
 public abstract double HtgBBI();
}

Langkah 2: class Laki_Laki (ketikkan script berikut)
Karena class Laki_Laki pada soal Iatihan 4 = soal latihan 5, maka script ini tidak mengalami perubahan. Adapun scriptnya adalah sebagai berikut:
class Laki_laki extends Manusia
{
 //constructor
 public Laki_laki (double TB)
 {
  super(TB);
 }
 
 //Method HtgBBI() merupakan method overidding dari superclass-nya
 public double HtgBBI()
 {
  return (super.getTB()-100)*0.9;
 }
}

Setelah anda membuat class Laki_Laki, simpan file tersebut dengan nama Laki_Laki.java. Di dalam  class Laki_Laki, terdapat penggunaan extendsyang menunjukkan bahwa class Laki_Laki merupakan turunan dari class Manusia.

Coba perhatikan kembali script yang telah anda buat seperti gambar di atas. Pada constructor Laki_Laki, terdapat keyword "super". Keyword ini akan memanggil constructor Manusia (sesuai isi parameter) yang merupakan class induk. Sedangkan pada method HtgBBI() dilakukan pendeklarasian kembali (overrid ing method) sesuai dengan kelas induknya, dimana method HtgBBI() di beri rumus untuk menghitung berat badan ideal laki-laki.

Langkah 3: class Perempuan (ketikkan script berikut)

class Perempuan extends Manusia
{
 //constructor
 public Perempuan (double TB)
 {
  super(TB);
 }
 
 //Method HtgBBI() merupakan method overidding dari superclass-nya
 public double HtgBBI()
 {
  return (super.getTB()-100)*0.8;
 }
}

Setelah anda membuat class Perempuan, simpan file tersebut dengan nama Perempuan.java. Di  dalam class Perempuan, terdapat penggunaan extends yang menunjukkan bahwa class Perempuan merupakan turunan dari class Manusia.

Seperti halnya dengan class Laki_Laki, class Perempuan memiliki constructor dan method    HtgBBI() yang sama. Perbedaannya terletak pada nama class, nama constructor, dan isi rumus method HtgBBI().

Keyword "final" pada line 1 digunakan untuk mencegah pembuatan kelas baru dari kelas turunan  perempuan. Sedangkan keyword  "final" pada line 10 digunakan untuk mencegah pendeklarasian  ulang (overriding method) pada kelas turunan nya.

Langkah 4: class Utama (ketikkan script berikut)
Adapun scriptnya adalah sebagai berikut :

import java.io.*;
class Utama
{
 public static void main(String[] args) throws Exception
 {
  BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
  
  //instance of class
  Manusia[] m = new Manusia[2];
  
  //deklarasi variabel
  int x = 0;
  
  do
  {
   //input
   System.out.println("User "+(x+1));
   System.out.print("Masukkan tinggi badan anda (cm) = ");
   double t = Double.parseDouble(br.readLine());
   System.out.print("Masukkan jenis kelamin anda (L/P) = ");
   String jk = br.readLine();
   
   //proses + output
   if (jk.toUpperCase().equals("L"))
   {
    m[x] = new Laki_laki(t);
    System.out.println("Berat badan ideal laki-laki ini anda adalah "+m[x].HtgBBI());
    System.out.println();
   }
   else
   {
    m[x] = new Perempuan(t);
    System.out.println("Berat badan ideal perempuan ini anda adalah "+m[x].HtgBBI());
    System.out.println();
   }
   x++;
  }while(x<2);
 }
}

Untuk penjelasan script pada class Utama, dapat dilihat pada soal latihan modul 4. Perlu diketahui pula, bahwa instance of class pada class Utama tidak wajib menggunakan array of Class (konsep Polymorphism), tapi anda bisa juga membuat objek berdasarkan kelas turunannya.


Full coding


Keterangan program :


Output:



Tugas


  1. Buat program untuk mencetak ciri makhluk hidup (manusia, hewan, tumbuhan). Ciri-ciri didefiniskan kedalam suatu method yang bertipe abstrak dalam sebuah abstract class. Kemudian buatlah class baru (manusia, hewan, dan tumbuhan) untuk meng-extends class tersebut.
  2. Diberikan oleh dosen pengampun




Disqus comments