You are on page 1of 9

Laporan Akhir Pemrograman Berbasis Obyek

Yudistyra Ochtavian Putra / 7408030011

A. Dasar Teori
a. Abstract Class
Abstract class adalah class yang mempunyai setidaknya satu abstract
method. Sedangkan abstract method adalah method yang tidak memiliki body
(hanya deklarasi method). Implementasi dari isi abstract method tersebut
dilakukan pada subclass. Bila sebuah subclass dari kelas abstract tidak
mengimplementasikan isi semua method maka subclass tersebut harus
dideklarasikan abstract. Dan deklarasi method abstract pada subclass tersebut
boleh tidak dituliskan kembali.
Abstract class tidak bisa dibuat objectnya Object hanya bisa dibuat dari non-
abstract class (concrete class). Konsekuensinya, suatu abstract class haruslah
diturunkan dimana pada subclass tersebut berisi implementasi dari abstract
method yang ada di superclass.

b. Interface
Interface mirip dengan kelas abstrak yaitu tidak dapat dinstan secara
langsung. Dan keduanya berisikan data dan method yang tidak disertai
implementasi. Walaupun mempunyai kemiripan, interface dan kelas abstrak
tidaklah sama.
Interface sendiri terdiri atas konstanta dan method tanpa implementasi dan
menyerupai class. Untuk deklarasinya adalah sebagai berikut :
public interface contohInterface {

}
Class yang mengimplementasikan interface, semua konstanta dan method
interface akan dimiliki oleh class ini. Method pada interface harus
diimplementasikan pada class yang mengimplementasikan interface ini. Bila
class yang mengimplementasikan interface tidak menginplemetasikan semua
method dalam interface, maka class tersebut harus dideklarasikan abstract.
Kita bisa membuat subinterface dengan menggunakan kata extends. Satu
class boleh mengimplementasikan lebih dari satu interface. Bila suatu class
merupakan subclass dan akan mengimplementasikan interface, maka kata

extends harus lebih dulu dari implements. Method yang dideklarasikan didalam

interface secara otomatis adalah public dan abstract. Variable dalam interface
secara otomatis adalah public, static, dan final.
A. Source code and printed program !

Instrument Program : Abstract Class Implementation

package PrakAbstract;
/**
*
* @author Yudistyra
*/
abstract class Instrumen {
int i;

public abstract void play();

public String what() {


return "Instrumen";
}

public abstract void adjust();


}

class Wind extends Instrumen {


public void play() {
System.out.println("Wind.play()");
}

public String what() {


return "Wind";
}

public void adjust() {

}
}

class Percussion extends Instrumen {


@Override
public void play() {
System.out.println("Percussion.play()");
}

public String what() {


return "Percussion";
}
@Override
public void adjust() {

}
}

class Stringed extends Instrumen {


public void play() {
System.out.println("Stringed.play()");
}

public String what() {


return "Stringed";
}

public void adjust() {

}
}

class Brass extends Wind {


public void play() {
System.out.println("Brass.play()");
}

public void adjust() {


System.out.println("Brass.adjust()");
}
}

class WoodWind extends Wind {


public void play() {
System.out.println("WoodWind.play()");
}

public String what() {


return "WoodWind";
}
}

public class Music {


static void tune(Instrumen i) {
i.play();
}

static void tuneAll(Instrumen[] e) {


for(int i = 0; i < e.length; i++)
tune(e[i]);
}

public static void main(String[] args) {


Instrumen[] orchestra = new Instrumen[5];

int i = 0;

orchestra[i++] = new Wind();


orchestra[i++] = new Percussion();
orchestra[i++] = new Stringed();
orchestra[i++] = new Brass();
orchestra[i++] = new WoodWind();
tuneAll(orchestra);
}
}
Output :

Analyze : Program diatas merupakan penerapan dari abstrak class pada java.
Instrumen sebagai abstract class dan juga parent class dari class Wind,
Percussion dan Stringed. Pada abtract class Instrumen dideklarasikan 1
abstract method, yaitu method adjust(). Kemudian method adjust di
implementasikan pada kelas turunannya. Class Wind sendiri juga
memiliki class turunan. Yaitu, Brass dan WoodWind. Class utama pada
program diatas adalah class Music, class yang mempunyai method main.
Di dalam class Music dibentuk objek – objek dari class tersebut kecuali
class Instrumen yang merupakan abstract class. Pada dasarnya semua
objek tersebut akan menjalankan method play, yang terdapat pada
method tune(). Parameter dari method tune() itu sendiri adalah
Instrumen. Sebenarnya objek yang dibentuk berasal dari satu tipe data
yaitu Instrumen. Karena polymorpishm akhirnya dari 1 tipe data
tersebut bisa memiliki beberapa bentuk / objek. Dan walaupun
parameternya Instrumen, tiap objek akan memanggil method play pada
class masing – masing.

Instrument Program : Interface Implementation

package PrakInterface;
/**
*
* @author Yudistyra
*/
interface Instrumen {
int i = 5;

void play();
String what();
void adjust();
}

class Wind implements Instrumen {


public void play() {
System.out.println("Wind.play()");
}

public String what() {


return "Wind";
}

public void adjust() {

}
}

class Percussion implements Instrumen {


public void play() {
System.out.println("Percussion.play()");
}

public String what() {


return "Percussion";
}

public void adjust() {

}
}
class Stringed implements Instrumen {
public void play() {
System.out.println("Stringed.play()");
}

public String what() {


return "Stringed";
}

public void adjust() {

}
}

class Brass extends Wind {


public void play() {
System.out.println("Brass.play()");
}

public void adjust() {


System.out.println("Brass.adjust()");
}
}

class WoodWind extends Wind {


public void play() {
System.out.println("WoodWind.play()");
}

public String what() {


return "WoodWind";
}
}

public class Music {


static void tune(Instrumen i) {
i.play();
}

static void tuneAll(Instrumen[] e) {


for(int i = 0; i < e.length; i++)
tune(e[i]);
}

public static void main(String[] args) {


Instrumen[] orchestra = new Instrumen[5];

int i = 0;

orchestra[i++] = new Wind();


orchestra[i++] = new Percussion();
orchestra[i++] = new Stringed();
orchestra[i++] = new Brass();
orchestra[i++] = new WoodWind();
tuneAll(orchestra);
}
}
Output :
Analyze : Pada dasarnya program diatas hampir sama dengan program sebelumnya.
Hanya saja program di atas merupakan penerapan dari Interface pada
java. Sebuah Interface hanya berisi konstanta dan method kosong. Untuk
implementasinya adalah pada class yang mengimplementasikan interface
tersebut. Interface Instrumen hanya berisi method play(), what(), dan
adjust() yang kosong tanpa definisi class. Untuk jalannya program
diatas, sama dengan program sebelumnya. Dan telah dijelaskan pada
analisa program.

Animal Program

package AnimalProgram;
/**
*
* @author Yudistyra
*/
abstract class Animal {
protected int legs;

protected Animal (int legs) {


this.legs = legs;
}

public void Walk() {


System.out.println("This animal can walk with " + this.legs + "legs");
}

public abstract void eat();


}

interface Pet {
String getName();
void setName(String name);
void play();
}

class Spider extends Animal {


public Spider() {
super(8);
}

public void eat() {


System.out.println("mosquito");
}
}

class Cat extends Animal implements Pet {


private String name;
public Cat(String name) {
super(4);
this.name = name;
}

public Cat() {
this("");
}

@Override
public void eat() {
System.out.println(this.name + " likes eat meal and fish");
}

public String getName() {


return this.name;
}

public void setName(String name) {


this.name = name;
}

public void play() {


System.out.println(this.name + " Let's play");
}
}

class Fish extends Animal implements Pet {


private String name;

public Fish(){
super(0);
}

public void Walk() {


System.out.println("Fish doesn't have legs, but Fish is swim");
}

public void eat() {


System.out.println(this.name + " eat Sea Grass and Plankton");
}

public void setName(String name) {


this.name = name;
}

public String getName() {


return this.name;
}

public void play() {


System.out.println(this.name + " Let's play");
}
}

public class TestAnimal {


static void eat(Animal ani) {
ani.eat();
}
static String getName(Pet a) {
return a.getName();
}
static void setName(Pet b, String nama) {
b.setName(nama);
}
static void play(Pet c) {
c.play();
}
static void walk(Animal w) {
w.Walk();
}

public static void main(String[] args) {


Spider freak = new Spider();
Cat kitty = new Cat("Kitty");
Fish nemo = new Fish();

System.out.println("This is Freak, my spider");


System.out.print("Freak eat ");
eat(freak);
System.out.println("");
System.out.println("This is " + getName(kitty));
System.out.println("I Change my cat name");
setName(kitty,"Jeni");
System.out.println("Now my cat name's is " + getName(kitty));
eat(kitty);
play(kitty);
System.out.println("");
System.out.println("This is my Fish");
setName(nemo,"Nemo");
System.out.println("I'm just named my fish, his name is " + getName(nemo));
eat(nemo);
System.out.print("And ");
walk(nemo);
play(nemo);
}
}
Output :

Analisis :
Program diatas merupakan penerapan abstract class dan interface. Animal sebagai
abstract class dan Pet sebagai interface. Animal sendiri merupakan parent class dari
class Spider, Cat dan Fish. Sedangkan yang mengimplementasikan interface Pet
adalah class Cat dan Fish. Pada class utama yaitu TestAnimal, terdapat method eat(),
getName(), setName(), play() dan walk(). Parameter dari method – method tersebut
adalah parent class dari class – class turunannya yaitu Animal dan Pet. Karena sifat
Java yang polymorphism, walaupun yang dipanggil pada method tersebut adalah
method milik parent class, sebenarnya method tersebut akan mengarah ke class asli
sesuai dengan objek yang dikirimkan ke parameter.

C. Kesimpulan

1. Abstract method adalah sebuah method yang tidak memiliki pendefinisian


didalam body nya. Dan pendeklarasiannya menggunakan keyword abstract.
2. Subclass dari sebuah abstract class harus didefinisikan sebagai abstract class pula
apabila tidak mengimplementasikan semua method abstractnya.
3. Sebuah interface terdiri dari konstanta dan method kosong.
4. Sebuah subclass yang meng-implement sebuah interface harus dideklarasikan
sebagai abstract apabila tidak mengimplementasikan semua method dari interface
tersebut.
5. Jika beberapa class mengimplmentasikan interface, method yang dideklarasikan
sebagai anggota dari interface dapat di eksekusi secara polymorpishm.