• Tidak ada hasil yang ditemukan

IKG2I4 / Software Project I

N/A
N/A
Protected

Academic year: 2021

Membagikan "IKG2I4 / Software Project I"

Copied!
41
0
0

Teks penuh

(1)

IKG2I4 / Software Project I

Mahmud Imrona, M.T. Izzatul Ummah, M.T.

Kelompok Keahlian Algoritma dan Komputasi

LECTURE NOTE

WEEK 6

(2)

Abstract Class Interface

Exception

WEEK 6

(3)

Misalkan kita ingin membuat program permainan di mana di dalamnya ada class Human yang

diturunkan menjadi class Raja, class Prajurit, dan class Petani. Pada sistem ini, kita juga

menginginkan setiap objek harus diinstansiasi dari class raja/prajurit/petani, yang berarti tidak boleh ada objek human yang diinstansiasi.

Bagaimana konsep OOP memfasilitasi aturan pada sistem tersebut? Jawabannya adalah

(4)
(5)

Abstract class adalah class yang tidak dapat diinstansiasi objectnya.

Abstract class biasanya diterapkan pada sebuah superclass.

Superclass dibuat abstract supaya tidak dapat diinstansiasi objectnya. Programmer hanya bisa menginstansiasi turunan dari superclass tersebut. Abstract class boleh memiliki atribut dan method

ABSTRACT CLASS

(6)

Cara penulisan abstract class: abstract class Human{

String name; }

(7)

Abstract method adalah header method, yaitu method yang tidak dituliskan implementasi

algoritmanya, atau dengan kata lain yang dituliskan hanya headernya saja.

Bila sebuah class memiliki minimal 1 abstract method, maka class tersebut harus dijadikan abstract juga.

Akan tetapi, sebuah abstract class tidak harus

ABSTRACT METHOD

(8)

Cara penulisan abstract method: abstract class Human{

String name;

abstract void berjalan(int jarak); }

Method berjalan() tidak perlu diimplementasikan algoritmanya di class Person. Method itu hanya bisa diimplementasikan di class-class turunannya

ABSTRACT METHOD

(9)

Ilustrasi yang lebih jelas misalnya pada permainan catur. Kita

definisikan abstract class Bidak, yang diturunkan menjadi class Raja, Ratu, Gajah, Kuda, Benteng, Pion.

abstract class Bidak{

abstract void berjalan(int jarak, int arah); }

Class Bidak dibuat abstract karena setiap bidak pasti adalah instansiasi dari salah satu class turunannya.

Method berjalan dibuat abstract karena tidak perlu

diimplementasi-ABSTRACT METHOD

(10)

Method berjalan harus diimplementasikan di class turunan. class Raja{

abstract void berjalan(int jarak, int arah){

……..Raja bisa berjalan satu langkah ke semua arah }

}

class Kuda{

abstract void berjalan(int jarak, int arah){

….. Kuda berjalan dengan langkah berbentuk huruf L

ABSTRACT METHOD

(11)

Tiap class turunan mengimplementasikan method

berjalan secara berbeda-beda, tergantung bagaimana

aturan atau cara bergerak/berjalan masing-masing bidak.

ABSTRACT METHOD

(12)

Class turunan dari class abstract harus

mengimplementasikan semua method abstract yang diwarisi dari class induknya. Bila ada 1 method abstract warisan yang tidak diimplementasikan, maka class

turunan itu harus menjadi abstract juga.

Sebuah class tidak boleh mengextend ke dua superclass, tidak peduli superclass itu abstract atau bukan. Hal ini

karena Java hanya mensupport single inheritance.

ABSTRACT METHOD

(13)

Di bawah ini adalah method abstract: public abstract method berjalan();

Tapi yang di bawah ini bukan method abstract, melainkan method kosong:

public abstract method berjalan(){ }

(14)

Interface adalah class yang lebih “abstrak” dibandingkan class abstract.

Interface adalah class abstract yang seluruh methodnya adalah method abstract (tidak memiliki method biasa). Semua atribut di dalam interface secara otomatis bersifat public static final. Di dalam interface tidak boleh ada

atribut private, dan tidak ada method get dan set.

INTERFACE

(15)

Jadi interface mirip seperti file header pada ADT (ingat kembali Praktikum Pemrograman Terstruktur II). Contoh pada ADT LIST ada file list.h.

Akan tetapi konsep/kegunaan interface berbeda dengan file header pada ADT. Perbedaannya adalah:

–Konsep ADT tidak terkait dengan inheritance

–Konsep interface terkait erat dengan inheritance. Java tidak menyediakan fitur multiple-inheritance, akan tetapi Java menyediakan fitur interface sebagai penggantinya.

(16)

Konsep/kegunaan interface adalah memberi peran-peran (roles) pada sebuah class.

Misalkan kita sedang membuat sistem akademik, di

mana di dalamnya kita mendefinisikan class Dosen dan class Mahasiswa.

Class Dosen memiliki method mengajar(), belajar(), membuatSoal(), menilaiUjian(), menerimaGaji(), dsb. Class Mahasiswa memiliki method belajar(),

(17)

Selain itu, kita juga mendefinisikan class Asisten di mana asisten memiliki peran campuran yaitu sebagai

mahasiswa dan juga sebagai “dosen junior”.

Asisten harus mengimplementasikan semua method

Mahasiswa serta semua (atau sebagian) method Dosen. Bagaimana Java memfasilitasi kebutuhan sistem tsb? Jawabnya adalah: menggunakan interface.

(18)

Kita buat 2 buah interface yaitu InterDosen dan InterMahasiswa.

–Class Dosen menginduk kepada InterDosen.

–Class Mahasiswa menginduk kepada InterMahasiswa.

–Class Asisten menginduk kepada InterDosen dan InterMahasiswa. Menginduk di sini tidak menggunakan syntax “extends” melainkan “implements”.

Perhatikan bahwa sebuah class dapat meng-implements

INTERFACE

(19)

Agar lebih lengkap, kita buat juga abstract class Person, di mana semua class Dosen, Mahasiswa, dan Asisten harus meng-extends ke class tersebut dan harus meng-implements ke interface yang sesuai. Cara penulisannya adalah sbb:

abstract class Person{ String nama;

void makan(); }

interface InterDosen{

INTERFACE

(20)

interface InterMahasiswa{

void hadirKuliah(); // method di interface harus abstract }

class Dosen extends Person implements InterDosen{ void makan(){ ……. } void mengajar(){ ……. } }

INTERFACE

(21)

class Mahasiswa extends Person implements InterMahasiswa{ void makan(){ ……. } void hadirKuliah(){ ……. } }

INTERFACE

(22)

class Asisten extends Person implements InterMahasiswa, InterDosen{ void makan(){ ……. } void hadirKuliah(){ ……. } void mengajar(){ ……. } }

INTERFACE

(23)

Ada 2 jenis error yang bisa terjadi ketika kita membuat program:

Compile-time error: yaitu error yang terjadi saat

program dicompile, ciri-cirinya yaitu program tidak lulus compile, umumnya terjadi karena kesalahn penulisan

syntax (kurang titik koma atau kurung tutup dsb)

Run-time error: yaitu error yang terjadi saat program

dijalankan, ciri-cirinya yaitu program tetap lulus compile tapi ketika dijalankan bisa terjadi error (tergantung pada nilai variabel yang diolah), misalnya pembagian dengan

EXCEPTION HANDLING

(24)

Beberapa contoh runtime error:

–Pembagian dengan angka nol

–Pengaksesan array melebihi batas kapasitas array

–Kesalahan parsing dan formatting number

–Program gagal membuka file

–Program gagal menerima input dari keyboard

–Pengaksesan terhadap object yang belum diinstansiasi (belum di-new, jadi masih NULL)

(25)

Exception handling berguna untuk mencegah runtime error.

Beberapa exception yang penting misalnya:

–ArithmeticException –NullPointerException –ArrayIndexOutOfBoundsException –NumberFormatException –IOException

EXCEPTION HANDLING

(26)

Berikut ini adalah contoh pembagian dengan nol. public static void main(String[] args) throws Exception{

int a=5; int b=0; int c=a/b;

System.out.println(“Nilai c = “,c); }

Program di atas dapat dicompile, tapi ketika dirun akan error, karena terjadi exception pada baris c=a/b, atau kita katakan bahwa program “melempar” exception pada baris

EXCEPTION HANDLING

(27)

Untuk menangani exception tersebut, gunakan mekanisme try-catch. Baris yang bermasalah dapat dimasukkan ke

dalam blok try, dan gunakan exception handling yang sesuai untuk “menangkap” (catch) exception yang mungkin terjadi. public static void main(String[] args) throws Exception{

int a=5; int b=0; int c; try{ c=a/b; }

EXCEPTION HANDLING

(28)

Exception yang terjadi karena pengaksesan object yang masih NULL (belum diinstansiasi/new)

Segiempat se1 = new Segiempat(5,3); Segiempat se2; // objectnya masih null se1.printAttribute();

try{

se2.setPanjang(7);

} catch (NullPointerException npe){

System.out.println("Masuk ke Null Pointer Exception");

NULL POINTER EXCEPTION

(29)

Exception yang terjadi karena mengakses array dengan indeks melebihi batas kapasitasnya.

int[] arrNIM = {3010666,3010777,3010999}; try {

System.out.println(arrNIM[3]); }

catch (ArrayIndexOutOfBoundsException aobe) {

System.out.println("Masuk ke Array Index Out Of

ARRAY INDEX OUT OF BOUND

(30)

Exception yang terjadi karena parsing number. Coba modifikasi program berikut ini dengan

exception handling yang sesuai.

public static void main(String[] args) { String str = "50a\ju79hj3@sdjf";

int i = 0;

i = Integer.parseInt(str); // class Wrapper System.out.println("i="+i);

(31)

Bagaimana exception dapat terjadi/dilempar?

Exception adalah class khusus pada Java Library (src) yang diturunkan dari class Throwable.

–Lihat java.lang.Exception

Semua jenis exception lainnya

(ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException,

NumberFormatException, dsb) adalah turunan

CLASS EXCEPTION

(32)

Exception yang tidak ditangani (tidak di-catch) dapat menyebabkan program berhenti (halt)

ketika dijalankan. Exception bisa terjadi bisa juga tidak, tergantung pada nilai variabel yang diolah. Exception terjadi secara beruntun

(chain-reaction), misalnya kita membuat methodX(),

yang di dalamnya memanggil methodY(), yang di dalamnya memanggil methodZ(). Ternyata ketika methodZ() dieksekusi terjadi exception, maka

(33)

Exception handling bisa dilakukan di

method-method mana saja yang kita inginkan, mencakup:

–Method yang mengandung baris exception

–Method yang memanggil method lain yang mengandung baris exception

(34)

Sebelumnya telah dibahas bagaimana cara:

Menangani atau menangkap (catch) exception yang

dilempar oleh program. Untuk menangkap suatu exception harus menggunakan jenis exception handling yang sesuai dengan jenis exception tersebut.

Sekarang akan dibahas bagaimana cara:

Membuat program yang melempar (throw) exception yang jenisnya sudah ada di Java Library

–Membuat jenis exception sendiri sesuai kebutuhan (yang

THROW

(35)

Berikut adalah contoh sederhana melempar exception:

–Exception harus diinstansiasi dulu (new) sebelum dilempar

public static void main(String args[]) throws Exception{ int d=6;

int e=1; int f=0;

if (e==1) { throw new Exception("Ngapain ngebagi dengan satu!"); }

(36)

Sekarang kita akan membuat jenis exception sendiri, yaitu exception yang menangani nilai

input negatif. Pada class Segiempat, panjang dan lebar tidak boleh negatif.

class NegatifException extends Exception { public void printPesanError(){

System.out.println("Nilai panjang dan lebar tidak boleh negatif");

(37)

NegatifException tersebut kemudian di-new lalu dilempar di dalam method setPanjang & setLebar.

public void setPanjang(int p) throws NegatifException{

if (p<0) {

throw new NegatifException(); } else {

panjang = p;

(38)

Method setLebar dengan exception:

public void setLebar(int l) throws NegatifException{ if (l<0)

{

throw new NegatifException(); } else {

lebar = l; }

}

(39)

Ketika method setPanjang dan setLebar tersebut dipanggil di Driver, method-method tersebut

harus ditempatkan di dalam blok try-catch. class Driver {

public static void main(String args[]) { Segiempat se = new Segiempat(); try {

se.setPanjang(5); se.setLebar(-3);

} catch (NegatifException ne) { ne.printPesanError();

(40)
(41)

Referensi

Dokumen terkait

Volume penjualan adalah total penjualan yang dinilai dengan unit dalam periode tertentu untuk mencapai laba yang maksimal sehingga dapat menunjang pertumbuhan

Penelitian ini bermaksud mengevaluasi pelaksanaan Sistem Manajemen Mutu ISO 9001:2008 pada SMK Negeri 2 Salatiga, berdasarkan 8 (delapan) prinsip standar sistem manajemen

1) Utang yang telah ada artinya besarnya utang yang telah ditentukan dalam perjanjian kredit. 2) Utang yang akan ada tetapi telah diperjanjikan dengan jumlah

Hal ini berarti penggunaan variabel usia, tingkat pendidikan, jumlah tanggungan keluarga, jumlah pinjaman, pengalaman usaha, dan omzet usaha ke dalam model adalah memperbaiki model

Data pada tabel tersebut menunjukkan bahwa bobot lahir akan semakin tinggi pada periode ke lima sampai denga ke tujuh, kemungkinan besar yang terjadi pada bobot lahir adalah

Jika kartu ATM tersebut telah dilaporkan dicuri, maka akan muncul pesan ‘kartu tidak dapat digunakan karena telah dilaporkan dicuri’.Jika tidak lolos validasi kartu ini

pendek dengan kandungan minyak tak jenuh tinggi, c) persilangan dura dan pisifera untuk meminimumkan gejala crown disease (CD), d) sistem seleksi untuk menghasilkan tanaman

Hasil penelitian menunjukkan bahwa profitabilitas berpengaruh signifikan negatif terhadap rasio hutang, ukuran perusahaan berpengaruh signifikan positif terhadap