• Uncategorized
  • 0

Abstract dan interface pada Java,rumit?

Hai dan selamat malam semuanya…ketemu lagi nih bersama adli di
blog student telkomuniversity.Kali ini,adli mau membahas mengenai
algoritma pemrograman.Teman – teman pada tau ga apa itu algoritma
pemrograman?

Algoritmna pemrograman yang kerap disapa Alpro ini merupakan
sekumpulan logika untuk menyelesaikan suatu masalah melalui media
bahasa pemrograman dan bahasa pemrograman yang kebanyakan digunakan
orang saat ini adalah bahasa Java.Namun,kali ini adli ga mau
membahas detail dan asal usulnya alpro ya.Malam ini adli khusus
membahas mengenai Abstract dan Interface pada bahasa pemrograman
Java.

Pada penasaran kan mengapa hal ini yang adli bahas? yup,karena
banyak yang request mengenai hal ini.Ada yang bilang tugas nya sulit
karena ini,ga ngerti materinya,dll.Maka dari itu,malam ini kita akan
membahasnya.

Abstract class didefinisikan sebagai class yang tidak bisa
digunakan untuk membuat object dan dibuat ketika adanya hal yang
cukup kompleks terjadi di saat pendefinisian di tahap awal
pembangunan program.

Sub class yang memperluas (atribut dan method) dari abstract class
ini bisa dibuatkan object namun masih
tetap memperhatikan modifier yang digunakan di abstract
class tersebut.

Kelas abstrak merupakan suatu bentuk khusus dari suatu kelas yang
bersifat :

>Tidak dapat diinstansiasi

>Dapat digunakan untuk diturunkan ke dalam bentuk kelas konkret

>Dapat digunakan untuk diturunkan ke kelas abstrak berikutnya

>Dideklarasikan menggunakan keyword abstract.

dan memiliki simbol: Sama seperti class, tapi dengan penulisan nama
dengan style italic (untuk class dan method).

Agar lebih jelasnya,mari kita simak di bagian Pengamatan(Part 1).
EX:
abstract class AbstractClass
{
// Force Extending class to define this method
abstract protected String getValue();
abstract protected String prefixValue(String prefix);
abstract protected String gabung();

// Common method
public void printOut() {
System.out.println( this.getValue() );
}
}

class ConcreteClass1 extends AbstractClass
{
protected String getValue() {
return “Tatank “;
}

public String prefixValue(String prefix) {
return prefix + “Tatank”;
}

public String gabung(){
String a;
a=” hobi meloncat”;
return a;
}
}

class ConcreteClass2 extends AbstractClass
{
public String getValue() {
return “Kelss”;
}

public String prefixValue(String prefix) {
return prefix + “Kells”;
}

protected String gabung(){
String b;
b=” hobi melet”;
return b;
}
}

class Main1
{
public static void main(String[] args) {
ConcreteClass1 class1 = new ConcreteClass1();
class1.printOut();
System.out.println( class1.prefixValue(“Mr. “) );
System.out.println( class1.prefixValue(“Mr.
“)+class1.gabung() );
System.out.println();
ConcreteClass2 class2 = new ConcreteClass2();
class2.printOut();
System.out.println( class2.prefixValue(“Mrs. “) );
System.out.println( class2.prefixValue(“Mrs.
“)+class2.gabung() );
}
}

Soal Pengamatan(Part 1):
1. Bolehkah ditambahkan body “{statement1; statement1;}” pada method
getValue ataupun method prefixValue pada class abstract
AbstractClass? Jelaskan!
2. Kembalikan program seperti semula, jelaskan error apa yang
terjadi apabila method getValue() pada class ConcreteClass1 di
hapus!
3. Kembalikan program seperti semula, selanjutnya perhatikan
perbedaan hak akses method getValue() di child class ConcreteClass1
dan ConcreteClass2! Jelaskan apa maksudnya!
4. Buatlah abstract method yang bernama getValue2 pada class
ConcreteClass1! Compile dan mengapa terjadi error?
5. Ikuti soal nomor 4, silahkan ubah class ConcreteClass1 menjadi
abstract. Selajutnya jelaskan mengapa terjadi error?
6. Dengan mengikuti struktur kode program di atas serta ditambahkan
satu abstract method bernama “gabung” TANPA PARAMETER pada parent
class, hasilkan output berikut:
Tatank
Mr. Tatank
Mr. Tatank hobi meloncat

Kells
Mrs. Kells
Mrs. Kells hobi melet

Jawaban Pengamatan (Part 1):
1.Tidak,karena abstract method tidak boleh memiliki body.

2.ConcreteClass1 bukan merupakan abstract dan bukan override
abstract method getValue() di AbstractClass.

3.Pada class ConcreteClass1, method getValue() nya merupakan
protected sehingga hanya bisa diakses oleh class itu sendiri dan
class turunannya.Sedangkan di class ConcreateClass2, method
getValue() nya merupakan public sehingga dapat diakses oleh class
manapun.

4.ConcreteClass1 bukan merupakan abstract dan bukan override
abstract method getValue2() di ConcreteClass1.

5.ConcreteClass1 merupakan abstract class sehingga tidak dapat di
instansiasi.

6.>>
abstract class AbstractClass
{
// Force Extending class to define this method
abstract protected String getValue();
abstract protected String prefixValue(String prefix);
abstract protected String gabung();

// Common method
public void printOut() {
System.out.println( this.getValue() );
}
}

class ConcreteClass1 extends AbstractClass
{
protected String getValue() {
return “Tatank “;
}

public String prefixValue(String prefix) {
return prefix + “Tatank”;
}

public String gabung(){
String a;
a=” hobi meloncat”;
return a;
}
}

class ConcreteClass2 extends AbstractClass
{
public String getValue() {
return “Kelss”;
}

public String prefixValue(String prefix) {
return prefix + “Kells”;
}

protected String gabung(){
String b;
b=” hobi melet”;
return b;
}
}

class Main
{
public static void main(String[] args) {
ConcreteClass1 class1 = new ConcreteClass1();
class1.printOut();
System.out.println( class1.prefixValue(“Mr. “) );
System.out.println( class1.prefixValue(“Mr.
“)+class1.gabung() );
System.out.println();
ConcreteClass2 class2 = new ConcreteClass2();
class2.printOut();
System.out.println( class2.prefixValue(“Mrs. “) );
System.out.println( class2.prefixValue(“Mrs.
“)+class2.gabung() );
}
}

Selanjutnya,mari kita bahas mengenai interface.
Interface adalah prototype kelas yang berisi definisi
konstanta dan deklarasi method (hanya nama method
tanpa definisi kode programnya).

Interface digunakan untuk menyatakan spefisikasi
fungsional beberapa kelas secara umum.

Interface memungkinkan dibentuknya konsep pewarisan
jamak (Multiple inheritance).

Simbol relasi: realization—panah seperti inheritance, tapi
putus-putus

Simbol: sama seperti class, dengan keyword “interface”
? <<>>

Interfaces di-design untuk men-support dynamic method
resolution saat run time.

Interfaces men-disconnect definisi sebuah atau beberapa
method dari hirarki pewarisan

Dikarenakan interfaces tidak termasuk dalam hirarki
inheritance, sebuah atau beberapa class yang tidak
terkait memungkinkan untuk meng-implements interface
tersebut.

Contoh: Listener pada Action Component (materi pemr. visual)

Contoh: Penggunaan thread

Langsung aja yuk kita simak Pengamatannya…
Soal pengamatan (Part 2):
interface Mobil
{
public void setMerk(String merk);
public String getMerk();
public String getCoba(){
System.out.println(“coba”);}
}

interface Mesin extends Mobil
{
public void setNoMesin(String nomor_mesin);
public String getNoMesin();
}
// This will work
class Mobil1 implements Mesin
{
private String merk, nomor_mesin;

public void setMerk(String merk){
this.merk = merk;
}

public String getMerk(){
return merk;
}

public void setNoMesin(String nomor_mesin){
this.nomor_mesin = nomor_mesin;
}

public String getNoMesin(){
return nomor_mesin;
}
}

// This will not work and result in a fatal error
abstract class Mobil2 implements Mesin
{
private String nomor_mesin;

public void setNoMesin(String nomor_mesin){
this.nomor_mesin = nomor_mesin;
}

public String getNoMesin(){
return nomor_mesin;
}
}

class Main2{
public static void main(String[] args){
Mobil1 m1 = new Mobil1();
m1.setMerk(“Ford”);
m1.setNoMesin(“01010”);
System.out.println( m1.getMerk() );
System.out.println( m1.getNoMesin() );
}
}

Soal pengamatan:
1. Compile kode program diatas dan jelaskan sebab error yang
terjadi!
2. Tambahkan method yang diperlukan untuk mengatasi error yang
terjadi (No. 1)!
3. Perhatikan soal 1 (abstract) dan soal 2 ini (interface) dan
lakukan poin-poin berikut:
– Apa yang terjadi apabila ditambahkan method biasa yang
mengandung body “{}” pada interface Mobil? Jelaskan!
– Jelaskan perbedaan body program antara class abstract dan
interface!
– Jelaskan perbedaan penggunaan extends antara soal 1 dan
soal 2!

Jawaban pengamatan(Part 2):
1.Class Mobil2 bukan merupakan class abstract dan bukan merupakan
override method getMerk() di class Mobil.

2.Tambahkan abstract didepan class Mobil2

3. -Error,karena dalam interface tidak boleh ada method yang
memiliki body
-Interface hanya boleh berisi abstract method yang tidak
bersifat final dan static.Sedangkan Abstract boleh menggunakan
method abstract dan non-abstract juga boleh bersifat static dan
final.
-Soalnya yang mana?? kalau beda extend abstract dan interface sih gini:
Suatu abstact class hanya bisa meng-extend satu abstract class
lainnya.Sedangkan suatu interface hanya bisa meng-extend interface
lainnya. Dan tidak bisa meng-implement class atau interface
lainnya.

 

Sepertinya cukup disini dulu perbincangan kita mengenai algoritma pemrograman.Berhubung udah malam dan ngantuk,mari kita tidur sambil berdoa semoga Alpro nya lancar dan sampai jumpa di lain waktu 😀

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *