Wednesday, November 4, 2015

Interface merupakan sekumpulan konstanta atau deklarasi method tanpa menyertakan atau menuliskan badan method. Interface digunakan untuk mendekalrasikan koleksi method dan konstanta yang digunakan oleh satu atau lebih class.
Interface juga dapat diartikan sebagai semacam blok special yang berisi tanda tangan method dan kosntanta. Blok tersebut menggambarkan cara stansard dan public penetapan behavior.
Sedangkan cara menggunakan suatu interface adalah dengan mengimplementasikan interface tersebut pada class yang menggunakanya. Selain itu programmer juga harus mendefinisikan secara detail method-method yang ada pada interface.
Class Interface digunakan agar sebuah project dapat memiliki class yang tidak berhubungan yang mengimplementasikan method yang sama.  Contohnya dalam menggunakan Class Line dan MyInteger, dimana tidak berhubungan dan keduanya mengimplementasikan method perbandingan contohnya isGreater, isLess dan isEqual.
Selain itu interface digunakan untuk mengungkapkan sebuah interface pemrograman object tanpa pernyataan classnya. Dan dapat dihunakan sebagai model multi inheritance yang mengujinkan sebuah class untuk memiliki lebih dari satu superclass.
Interface vs. Abstact Class
-             Semua interface method tidak memiliki body
-             Beberapa abstract class memiliki method dengan implementasi
-             Sebuah interface hanya dapat didefinisikan constant
-             Sebuah abstract class tampak seperti class yang dapat mendeklarasikan variabel
-             Interface tidak memiliki hubungan inheritance secara langsung dengan setiap class tertentu, mereka didefinisikan secara independen
-             Abstract class dapat di-subclass-kan
Persamaan antara Interface dan Class
-             Interface dan class adalah sama-sama sebuah tipe
-             Hal ini berarti bahwa interface dapat digunakan ditempat dimana sebuah class dapat digunakan. 
-             Interface dan class, keduanya dapat mendefinisikan method
Perbedaan antara Interface dan Class
-             Interface tidak memiliki segala implementasi dari method
-             Programmer tidak dapat membuat instance dari sebuah interface

Encapsulation(Enkapsulasi)
Enkapsulasi adalah suatu cara untuk menyembunyikan informasi detail dari suatu class. Dua hal yang mendasar dalam enkapsulasi, yakni :
a. Information Hiding
Adalah proses yang menyembunyikan informasi dari suatu class sehingga class tersebut tidak dapat diakses dari luar. Yaitu dengan memberikan akses kontrol “private” ketika mendeklarasikan atribut atau method.
b. Interface to Acces data
adalah cara melalukan perubahan terhadap atribut yang di information hiding yaitu dengan membuat suatu interface berupa method untuk menginisialisasi atau merubah nilai dari suatu atribut tersebut. Dalam enkapsulasi terdapat 2 method yang dapat digunakan yaitu:Mutator dan Accessor method
a. Accessor Methods
Digunakan untuk membaca nilai variabel pada class, baik berupa instance maupun static.
b. Mutator Methods
Di gunakan untuk mengubah atau memberi nilai variable pada class, baik berupa instance maupun static.1.      Inheritance
Inheritance atau pewrisan adalah prinsip pewarisan sifat dari orang tua ke anak atau turunannya yang diterapkan pada kelas. Orag tua memiliki atribut dan method yang lebih umum dibandingkan dengan anak atau turunannya. Pada gambar dibawah bisa diketahui bahwa modbil memiliki atribut dan method yang lebih umum dibandingkan sedan, truk atau bus. Mobil sebagai kelas yang mewarisi disebut dengan super class, sedangkan sedan, truk dan bus sebagai kelas yang diwarisi.

2.      Super Class dan Sub Class
Terdapat 2 jenis kelas pada pewarisan, yaitu :
a.    Super Class/Kelas Induk
Super class merupakan suatu class yang mempunyai class turunan, atau class yang mewariskan classnya ke class lain.
b.    Sub Class/ Child Class
Sub class merupakan class turunan itu sendiri. Suatu subclass dapat mewarisi apa-apa yang dipunyai oleh Super Class. Karena suatu subclass dapat mewarisi apa-apa yang dipunyai oleh parent classnya, maka member dari suatu subclass adalah tersiri dari apa-apa yang ia punyai dan juga apa-apa yang ia warisi dari super classnya.
Kesimpulamya, boleh dikatakan bahwa suatu subclass adalah tidak lain hanya memperluas (extend) super classnya. Dengan menambahkan kata kucni extends setelah deklarasi nama class, kemudian diikuti dengan nama Super classnya. Kata kunci extends tersebut memberitahu kompiler java bahwa kita ingin melakukan perluasan class.

Semua class didalam Java adalah merupakan subclass dari class super induk yang bernama Object. 
Pada saat dikompilasi, kompiler java akan membacanya sebagai subclass dari ckass Object

Kita baru menerapkan konsep pewarisan pada saat kita menjumpai ada suatu class yang dapat diperluas dari class lain. Jadi saat tidak ada class yang dapat di perluas maka tidak harus menggunakan konsep pewarisan.Berikut merupakan keuntungan dalam penggunakan konsep pewarisan, adalah :
a.         Pada saat mendefinisikan sebuah method pada super class, maka perilaku tersebut secara otomats diwariskan ke subclas. Sehingga hanya perlu menulis method sekali dan bisa digunakna untuk semua subclass.
b.        Pada saat mendefinisikan properties/field di superclass, maka semua field diwariskan ke semua subclass. Dengan kata lain superclass dan subclass berbagi field.
c.         Subclass hanya mengimplementasi jika ada perbedaan dengan supernya.
 Berikut merupakan jenis-jenis dari konsep pewarisan,
a.         Single Inheritance
Konsep inheritance yang ada di dalam java adalah java hanya memperkenalkan adanya singel inheritance. Konsep single inheritance hanya memperbolehkan suatu subclass mempunyai satu parent class.
b.        Multilever Inheritance
Kosep inheritance yang ada di java memperkenalkan adanya multilevel inheritance. Dimana konsep ini memperbolehkan suatu subclass mempunyai subclass lagi.

Pengaksesan member yang dideklarasikan di super class dari subclass
Pengaksesan member yang ada di super class dari subclassnya tidak berbeda dengan pengaksesan member subclass itu sendiri. Misalnya class manager kita ingin mengakses data member nama melalui sebuah functuon member IsiData(), sekaligus kita juga ingin mengakses data member departemen di class manager.

Kontrol Pengaksesan
Dalam dunia riil, suatu entitas super bisa saja tidak mewariskan sebagian dari apa-apa yang ia punya kepada entitas turunan karena suatu hal. Demikian juga dalam konsep inheritance dalam OOP. Suatu super class dapat tidak mewariskan sebagian member-nya kepada subclassnya. 

Pada saat mengkompilasi class manager pada contoh sebelumnya, akan ada pesan kesalahan 
Ini membuktikan bahwa class manager tidak mewarisi data member nama dari super classnya (Pegawai). Berikut merupakan kontrol akses yang ada di dalam konsep inheritance di Java

a.    Private
Variabel dan method yang dideklarasikan private hanya bisa diakses oleh class yang mendeklarasikan variabel dan method tersebut.
b.      Deafult
Kata kunci Deafult bukan merupakan Java Keyword. Karena Deafult merupakan jenis akses kontrol jika tidak menulis akses kontrol secara eksplisit. Semua feature class-class yang ada dalam satu package bisa diakses oleh semua yang ada didalam package tersebut. Class diluar package boleh melakukan subclass, tetaoi subclass tersebut tidak bisa mengakses feature superclass.
c.       Protected
Protected mempunyai kemampuan akses yang lebih besae dari pada private dan deafult. Protected feature dari suatu class bisa diakses oleh semua class dalam satu package. Class di luar package boleh melakukan subclass, dan subclass tersebut dapat mengakses feature superclass.
Berikut merupakan kupulan dari mode akses yang ada di dalam java,


      Kata Kunci Super
Kata kunci super dipakai untuk merujuk pada member dari super class. Sebagaimana kata kunci this dipakai utnuk merujuk pada member dari class itu sendiri. Berikut merupakan format penulisan :
-          Super.data_member
Merujuk pada data member pada super class.
-          Super.function_member()
Merujuk pada fungction member pada super class
-          Super()
Keyword This
kata kucni ini digunakan pada pembuatan kelas dan digunakan untuk menyatakan objek sekarang. Untuk menghindari variabel yang sama  antara variabel class dengan variabel property. Berikut merupakan contoh program dengan menggunakan konsep Inheritance, Interface dan Enkapsulasi

//class Volume.java
public abstract class Volume
{
    protected double panjang;
    protected double lebar;
    protected double luas;

    Volume()
    {
        panjang = lebar = 0;
    }
    Volume (double p, double l)
    {
        panjang = p;
        lebar = l;
    }
    public double hitungLuas()
    {
        luas = panjang * lebar ;
        return luas;
    }
}
//clas UjiVolume
class UjiVolume extends Volume  implements Relation
{
    private double tinggi;
    UjiVolume(int p, int l, int t)
    {
        panjang = p;
        lebar = l;
        tinggi = t;
    }

  
    public final double getTinggi()
    {
        return tinggi;
    }
    public final double hitungVolume()
    {
        double volume = panjang * lebar * tinggi ;
        return volume;
    }
}
//class Relation
public interface Relation
{
    public double getTinggi();
    public double hitungVolume();
}
import java.util.Scanner;
import java.util.InputMismatchException;
class PanggilVolume
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        int a,b,c =0;
        try
        {
            System.out.println("Masukan panjang :");
            a= input.nextInt();
            System.out.println("Masukan lebar   :");
            b= input.nextInt();
            System.out.println("Masukan tinggi  :");
            c= input.nextInt();
            UjiVolume kotak;
            // instansiasi obyek
            kotak = new UjiVolume( a, b, c);
            System.out.println("Luas salah satu sisi = " +
            kotak.hitungLuas());
            System.out.println("Tinggi kotak         = " +
            kotak.getTinggi());
            System.out.println("Volume kotak         = " +
            kotak.hitungVolume());
        }
        catch (InputMismatchException e)
        {
            System.out.println("Gagal");
        }
    }
}