Tugas Pengganti 18 Mei

10
1. Inheritance Inheritance adalah pewarisan atribut-atribut dan method pada sebuah class yang diperoleh dari class yang telah terdefinisi tersebut. Contoh program dengan konsep Inheritance: BangunDatar.java package bangundatartest; public class BangunDatar { protected int panjang, lebar, tinggi, alas, keliling; protected float luas; protected String nama; public BangunDatar(){ panjang = 0; lebar = 0; tinggi = 0; alas = 0; luas = 0; keliling =0; } public void setPanjang(int panjang){ this.panjang = panjang; } public void setLebar(int lebar){ this.lebar = lebar; } public void setTinggi(int tinggi){ this.tinggi = tinggi; } public void setAlas(int alas){ this.alas = alas; } public String getNama() { return String.format(nama); } public int getPanjang() { return panjang; } public int getLebar() { return lebar; } public int getTinggi() { return tinggi; } public int getAlas() { return alas; } public String getInfo(String tambahan){ [Praktikum Pemrograman Berorientasi Objek] Page 1

description

PBO

Transcript of Tugas Pengganti 18 Mei

1. InheritanceInheritance adalah pewarisan atribut-atribut dan method pada sebuah class yang diperoleh dari class yang telah terdefinisi tersebut.Contoh program dengan konsep Inheritance:BangunDatar.javapackage bangundatartest;public class BangunDatar { protected int panjang, lebar, tinggi, alas, keliling; protected float luas; protected String nama; public BangunDatar(){ panjang = 0; lebar = 0; tinggi = 0; alas = 0; luas = 0; keliling =0; } public void setPanjang(int panjang){ this.panjang = panjang; } public void setLebar(int lebar){ this.lebar = lebar; } public void setTinggi(int tinggi){ this.tinggi = tinggi; } public void setAlas(int alas){ this.alas = alas; } public String getNama() { return String.format(nama); } public int getPanjang() { return panjang; } public int getLebar() { return lebar; } public int getTinggi() { return tinggi; } public int getAlas() { return alas; } public String getInfo(String tambahan){ return String.format(tambahan+"\nLuas = "+luas+"\nKeliling = "+keliling+"\n\n"); } public float getLuas(){ return luas; } public int getKeliling(){ return keliling; }}

PersegiPanjang.javapackage bangundatartest;public class PersegiPanjang extends BangunDatar{ public PersegiPanjang(int p, int l){ super.panjang = p; super.lebar = l; } public void setLuas(){ super.luas = super.panjang*super.lebar; } public void setKeliling(){ super.keliling = 2*(super.panjang+super.lebar); } public String getInfo(){ setLuas(); setKeliling(); return String.format(super.getInfo("Bangun Persegi Panjang:: \nPanjang = "+super.panjang+"\nLebar = "+super.lebar)); }}

Segitiga.javapackage bangundatartest;public class Segitiga extends BangunDatar{ public Segitiga(int a, int t){ super.alas = a; super.tinggi = t; } public void setLuas(){ super.luas = (super.alas*super.tinggi)/2; } public void setKeliling(){ super.keliling = (int) (Math.sqrt((alas/2)*(alas/2)+(tinggi*tinggi)))*2+alas; } public String getInfo(){ setLuas(); setKeliling(); return String.format(super.getInfo("Bangun Segitiga:: \nAlas = "+super.alas+"\nTinggi = "+super.tinggi)); }}

BangunDatarTest.javapackage bangundatartest;public class BangunDatarTest {

public static void main(String[] args) { PersegiPanjang PP1 = new PersegiPanjang(10, 5); System.out.print(PP1.getInfo()); Segitiga ST1 = new Segitiga(6, 4); System.out.print(ST1.getInfo()); } }

PENJELASAN: Sesuai konsep inheritance, dimana sebuah sub-class hanya mengextends (memperluas) super-classnya. Bisa di bilang superclassnya adalah sebuah objek class yang bersifat lebih umum, sementara subclassnya bersifat lebih ke suatu objek yang spesifik.Pada contoh program diatas, class BangunDatar merupakan sebuah super-class yang mempunyai sub-class PersegiPanjang dan Segitiga. Class BangunDatar mempunyai atribut-atribut sebagai berikut: panjang, lebar, tinggi, alas, luas, keliling. State/atribut yang ada di superclass tersebut ternyata juga di miliki oleh subclassnya, sehingga disini subclassnya hanya perlu mengextends dari superclassnya dan tidak perlu mendeklarasikannya lagi di subclassnya. Ketika subclassnya ingin mengatur(set) beberapa atribut/state yang ada, subclassnya hanya perlu memanggil method set yang ada di superclassnya. Method setLuas() hanya ada di masing-masing subclassnya, karena setiap jenis bangun datar yang ada untuk menentukan nilai luas mempunyai fungsi yang berbeda-beda. Untuk method getInfo() setiap class juga mengembalikan nilai String yang berbeda sesuai jenis sub-classnya.

2. ABSTRAKKelas abstrak merupakan kelas dimana memiliki metode metode namun tidak dideklarasikan, pendeklarasiannya terjadi ada kelas turunannya. Untuk membuat kelas abstrak sama dengan membuat kelas biasanya, namun diawali dengan kunci abstract pada kelasnya dan diawali dengan kata kunci abstract pada metode yang akan dibuat namun tidak akan dideklarasikan. Metode yang abstract tidak perlu berisikan deklarasinya.Menurut Sinaga (2004), dijelaskan bahwa Abstract Class adalah class yang tidak dapat diinstantiasi. Dengan kata lain Objek Class tersbut tidak dapat dibuat. Suatu class menjadi class Abstract apabila class tersebut paling tidak memiliki fungsi Abstract.Perbedaan abstrak dengan interface :1. Class Abstract dapat memiliki fungsi non abstract (fungsi yang memiliki definisi).2. Class Abstract dapat memiliki deklarasi variable.Contoh program dengan abstract class:package classabstract;

abstract class Shape{ abstract void draw(); } class Rectangle extends Shape{ void draw(){ System.out.println("drawing rectangle"); }} class Circle extends Shape{ void draw(){ System.out.println("drawing circle"); } } class ClassAbstract{ public static void main(String args[]){ Shape s=new Circle(); s.draw(); } }

PENJELASAN: Sebuah abstract class adalah class yang bersifat abstrak atau bisa di bilang sebuah kelas yang setengah jadi. Sebuah abstract class tidak bisa memiliki objek (tidak bisa di jadikan type dari sebuah objek). Sebuah abstract class sudah pasti merupakan superclass. Biasanya abstract class dibuat ketika class tersebut memiliki abstract method (menuliskan signature method saja), tetapi juga bisa memiliki method yang tidak abstract.Pada contoh program diatas, sebuah abstract class Shape memiliki subclass Rectangle dan Circle. Di abstract class Shape, mempunyai abstract method draw() yang wajib di override di subclassnya karena pada abstract class Shape, method draw hanya di tulis signaturenya saja (tanpa isi). Abstract class Shape tidak bisa di jadikan objek tunggal di class mainnya.3. InterfaceInterface adalah jenis khusus dari blok yang hanya berisi method signature(atau constant). Interface mendefinisikan sebuah(signature) dari sebuah kumpulan method tanpa tubuh.Interface mendefinisikan sebuah cara standar dan umum dalam menetapkan sifat-sifat dari class-class. Mereka menyediakan class-class, tanpa memperhatikan lokasinya dalam hirarki class, untuk mengimplementasikan sifat-sifat yang umum. Dengan catatan bahwainterface-interface juga menunjukkan polimorfisme, dikarenakan program dapat memanggil method interface dan versi yang tepat dari method yang akan dieksekusi tergantung daritipe object yang melewati pemanggil method interface.

Contoh program dengan Interface:InterfaceBangunDatar.javapublic interface InterfaceBangunDatar { static final String JENIS = "Bangun Datar 2D"; public abstract double hitungLuas(); public abstract double hitungKeliling(); }

InterfaceSegitiga.javapublic class InterfaceSegitiga implements InterfaceBangunDatar{ private double alas; private double tinggi; public String getJenis(){ return JENIS; } public InterfaceSegitiga(double alas, double tinggi){ this.alas = alas; this.tinggi = tinggi; } public double hitungKeliling() { return 2 * alas + tinggi; } public double hitungLuas() { return ((alas * tinggi)/2); } }

InterfaceBujurSangkar.javapublic class InterfaceBujurSangkar implements InterfaceBangunDatar{ private double sisi; public String getJenis(){ return JENIS; } public InterfaceBujurSangkar(double sisi){ this.sisi = sisi; } public double hitungKeliling() { return sisi * sisi; } public double hitungLuas() { return 4 * sisi; } }

InterfaceTest.javapublic static void main(String[] args) { InterfaceBujurSangkar obyek1 = new InterfaceBujurSangkar(10){}; System.out.println("Jenisnya adalah = "+ obyek1.getJenis()); System.out.println("Luas bujur sangkar dengan sisi 10 = "+ obyek1.hitungLuas()); System.out.println("Kelilingnya = "+ obyek1.hitungKeliling()); System.out.println("\n"); InterfaceSegitiga obyek2 = new InterfaceSegitiga(6, 8){}; System.out.println("Jenisnya adalah = "+ obyek1.getJenis()); System.out.println("Luas Segitiga dengan alas 6, dan tinggi 8 = "+ obyek2.hitungLuas()); System.out.println("Kelilingnya = "+ obyek2.hitungKeliling()); }}PENJELASAN: Kesimpulannya adalah bahwa Interface merupakan class yang hanya berisi deklarasi method tanpa memiliki implementasi dan semua property yang dimilikinya bersifat final. Interface mirip dengan class abstract, tetapi interface tidak terkait dengan class hierarki. Interface mendefinisikan sebuah (signature) dari sebuah kumpulan method tanpa tubuh.Pada contoh program di atas, program memiliki interface InterfaceBangunDatar yang memiliki state JENIS dan 2 method: hitungLuas(), hitungKeliling(). Lalu interface tersebut di implementasikan di class InterfaceBujurSangkar dan InterfaceSegitiga. Di 2 class ini mengoverride 2 method yang di class interface nya hanya di tulis signaturenya saja yaitu hitungLuas() dan hitungKeliling() dengan isi yang berbeda di setiap classnya.Interface vs. Class AbstractBerikut ini adalah perbedaan utama antara sebuah interface dan sebuahclass abstract: method interface tidak punya tubuh, sebuah interface hanya dapat mendefinisikan konstanta dan interface tidak langsung mewariskan hubungan dengan class istimewa lainnya, mereka didefinisikan secara independent.[Praktikum Pemrograman Berorientasi Objek]Page 1