Jumat, 19 Oktober 2012


Pertemuan 3

 

INHERITANCE, ENCAPSULATION, POLYMORPHISM DAN INFORMATION HIDING


Dalam bahasa pemrograman yang berorientasi obyek dikenal beberapa konsep-konsep dasar saling berinteraksi satu sama lain yang mendasari pemrograman berorientasi obyek tersebut yaitu, INHERITANCE (pewarisan), ENCAPSULATION (pengkapsulan), POLYMORPHISM dan INFORMATION HIDING. Berikut adalah penjelasan dari tiap-tiap konsep dasar tersebut :
  1. INHERITANCE (pewarisan)                                                                                                                Pada dasarnya, kita melakukan inheritance(pewarisan) untuk membuat suatu class baru (class turunan/subclass) yang masih memiliki sifat atau spesifikasi dari superclass.
    Di dalam Java untuk mendeklarasikan suatu class sebagai subclass dilakukan dengan cara menambahkan kata kunci extends setelah deklarasi nama class, kemudian diikuti dengan nama parent class-nya. Kata kunci extends tersebut memberitahu kompiler Java bahwa kita ingin melakukan perluasan class.
    Dekalarasi:
    [modifier] class Namasubkelas extends Namakelas super {
                Class body;
                }
     
    public class Mamalia {
    void KelasMamalia () {
    .....
    }}
    class Paus extends Mamalia { (class Paus merupakan keturunan dari class Mamalia)
    void TampilkanPaus () {   
     .....

    }}
      
           Pada saat class Paus menurunkan atau memperluas (extend) class Mamalia, maka ia mewarisi data member yang dipunyai oleh class Mamalia. Dengan demikian, class Paus mempunyai data member yang diwarisi oleh Mamalia (behaviournya), ditambah dengan data member yang ia punyai (tempat hidup,dsb).
    Keuntungan dari inheritance adalah :
    • Subclass menyediakan state/ behaviour yang spesifik yang mem-bedakannya dengan superclass, hal ini akan memungkinkan programmer Java untuk menggunakan ulang source code dari superclass yang telah ada.
    • Programmer Java dapat mendefinisikan superclass khusus yang bersifat generik, yang disebut abstract class, untuk mendefinisi-kan class dengan state dan behaviour secara umum.
    Beberapa aturan tentang pewarisan (inheritance) yang perlu diperhatikan :
    1. Java hanya memperkenankan adanya single inheritance. Konsep single inheritance hanya memperbolehkan suatu sublass mempunyai satu parent class. Dengan konsep single inheritance ini, masalah pewarisan akan dapat diamati dengan mudah.

    2. Subclass juga merupakan class biasa, maka kita tetap dapat melakukan pewarisan pada subclass ini. Misal : class B merupakan subclass dari class A, kita dapat membuat class baru yang diturunkan dari class B sehingga class baru tersebut akan memiliki apa yang dimiliki oleh class A dan class B.

    3. Suatu parent class dapat tidak mewariskan sebagian member-nya kepada subclass-nya. Sejauh mana suatu member dapat diwariskan ke class lain, ataupun suatu member dapat diakses dari class lain, sangat berhubungan dengan access control (kontrol pengaksesan).
    Di dalam java, kontrol pengaksesan dapat digambarkan dalam tabel berikut ini:
                                                                                                                                                                                                                  
  2. ENCAPSULATION (pengkapsulan)                                                                                                      Enkapsulasi adalah pembungkus, pembungkus disini dimaksudkan untuk menjaga suatu proses program agar tidak dapat diakses secara sembarangan atau di intervensi oleh program lain. Konsep enkapsulasi sangat penting dilakukan untuk menjaga kebutuhan program agar dapat diakses sewaktu-waktu, sekaligus menjaga program tersebut.
        Dalam kehidupan sehari hari enkapsulasi dapat dimisalkan sebagai arus listrik pada generator, dan sistem perputaran generator untuk menghasilkan arus listrik. Kerja arus listrik tidak mempengaruhi kerja dari sistem perputaran generator, begitu pula sebaliknya. Karena didalam arus listrik tersebut, kita tidak perlu mengetahui bagaimana kinerja sistem perputaran generator, apakah generator berputar kebelakang atau ke depan atau bahkan serong. Begitu pula dalam sistem perputaran generator, kita tidak perlu tahu bagaimana arus listrik, apakah menyala atau tidak.
         Begitulah konsep kerja dari enkapsulasi, dia akan melindungi sebuah program dari akses ataupun intervensi dari program lain yang mempengaruhinya. Hal ini sangat menjaga keutuhan program yang telah dibuat dengan konsep dan rencana yang sudah ditentukan dari awal.
           Manfaat dari proses enkapsulasi adalah :
    • Modularitas
    Kode sumber dari sebuah objek dapat dikelola secara independen dari kode sumber objek yang lain.
    • Information Hiding
    Dapat menentukan hak akses sebuah variabel/ methode dari suatu objek, dengan demikian dapat menyembunyikan informasi yang tidak perlu diketahui oleh objek lain.
    Contoh dalam program :
    Belajar.Java
    class belajar{
    public String x =”Pintar”;
    private String y = “Java”;
    }
    Pintar.Java
    public class Pintar{
    public static void main(String[]args){
    Coba panggil = new Belajar();
    System.out.println(“Panggil X : “+panggil.x);
    System.out.println(“Panggil Y : “+panggil.y);
    }}
          Tipe public dan private mempunyai fungsi yang berbeda. Fungsi public yang terdapat dalam class Coba pada variable x, memungkinkan nilai dari variable x dapat diakses oleh class Belajar. Sedangkan variable y yang menggunakan fungsi private tidak dapat dipanggil didalam class Belajar.
     3. POLYMORPHISM
           Polymorphism adalah suatu aksi yang memungkinkan pemrogram menyampaikan pesan tertentu keluar dari hirarki obyeknya, dimana obyek yang berbeda memberikan tanggapan/respon terhadap pesan yang sama sesuai dengan sifat masing-masing obyek.
    Atau Polymorphic dapat berarti banyak bentuk, maksudnya yaitu kita dapat menimpa (override), suatu method, yang berasal dari parent class (super class) dimana object tersebut diturunkan, sehingga memiliki kelakuan yang berbeda.
            Kondisi yang harus dipe-nuhi supaya polimorfisme dapat diimplementasikan adalah :
    • Methode yang dipanggil harus melalui variabel dari basis class atau superclass.
    • Methode yang dipanggil juga harus menjadi methode dari basis class.
    • Signature methode harus sama baik pada superclass maupun pada subclass.
    • Methode access attribute pada subclass tidak boleh lebih terbatas dari basis class.
    Contoh program :
    Simpan dengan nama BeautyfullMahasiswa.java
    public class BeautyfullMahasiswa extends Mahasiswa{
    public void printNama(){
    System.out.println(“Hallo, saya Mahasiswa yg cantik n baik”);
    Super.printNama();
    }
    }
    Simpan dengan nama Main.java
    public class Main{
    public static void main(String[] args]) {
    BeautyfullMahasiswa mhs = new BeautyfullMahasiswa();
    mhs.setNim(“09530524”);
    mhs.setNama(“Afrida Asna”);
    mhs.printNim();
    mhs.printNama();
    }
    }
    Kemudian compile dan run.
    C:\>javac BeautyfullMahasiswa.java
    C:\>javac Main.java
    C:\>java Main
    Kontruksi objek mahasiswa
    Nim:09530524
    Hallo, saya Mahasiswa yg cantik  n baik
    Nama: Afrida Asna
    C:\>
        Terlihat bahwa disini kita mengoverride method printNama(), dengan menambahkan beberapa teks tambahan, sehingga method printNama(), pada class BeautyfullMahasiswa, memiliki perilaku yang berbeda dengan class Mahasiswa.
     4.   INFORMATION HIDING
           Menyembunyikan informasi adalah fitur kunci dari java. Ketika mendeklarasikan variabel atau metode ini bisa menjadi salah satu dari empat hal: swasta, dilindungi, atau umum atau default. Cara Anda menentukan jenis ini menggunakan salah satu dari tiga kata kunci atau tidak sama sekali.
    Sebagai contoh :
    // Default
    Int i = 0;
    // public
    Public i = 0;
    • Public: Bila Anda mendeklarasikan variabel public itu berarti bahwa hal itu dapat diakses di mana saja dalam program. Jika Anda mewarisi dari kelas yang Anda akan memiliki akses ke semua variabel publik. 
    • Private: Ketika variabel bersifat pribadi itu tidak dapat dilihat di mana saja kecuali untuk kelas adalah instantiated masuk Jika Anda menggunakan kelas Anda tidak akan dapat melihat data pribadi. 
    • Protected: Jika variabel dilindungi Anda hanya memiliki akses paket (berguna ketika mengembangkan libs). Itu berarti bahwa Anda hanya akan melihat variabel dalam paket itu adalah instantiated di dan semua subclass. 
    • Default: akses default paket dicapai ketika tidak ada specifier (swasta, publik, atau dilindungi). Jalur akses default paket berarti bahwa variabel tersebut tersedia dalam paket yang dibuat di tetapi tidak dalam subclass paket. Pada dasarnya Anda dapat menganggapnya sebagai sebuah paket pribadi.




    Ketika membuat variabel dalam metode Anda hanya dapat menentukan satu kata kunci (final). Anda tidak dapat membuat publik, swasta, atau dilindungi, atau bahkan variabel default. Ketika Anda membuat sebuah Object dalam metode ini hanya tersedia dalam metode itu dibuat masuk
     

    Contoh Praktikum :


    dalam Pratikum ada beberapa contoh program :
             a.         Membuat Program Karyawan.php
      abstract class Karyawan {
                    int gaji;
                    Karyawan() {
                                    gaji=1000000;
                    }
                   
                    int getgaji() {
                                    return gaji;
                    }
                   
                    abstract void naikgaji();
    }
     
               b.        MainPersegi.php
          public class MainPersegi {
          public static void main(String[] args) {
                           Persegi pg = new Persegi();
                           pg.setPanjang(10);
                           pg.setLebar(20);
                           System.out.println("Panjang : "+pg.getPanjang());
                           System.out.println("Lebar : "+pg.getLebar());
                           System.out.println("Luas : "+pg.getLuas());
           }
          }
             c.         Manager.php
          class Manager extends Karyawan {
           Manager() {
                           gaji += 2000000;
           }
          
           void naikgaji() { gaji+=3000000; }
          }
              d.        Persegi.php
    public class Persegi {
                    private double panjang;                                //atribut yang disembunyikan
                    private double lebar;                                    //atribut yang disembunyikan
                    private double tinggi;                                 //atribut yang disembunyikan
                    public Persegi() {
                                    panjang = 0;
                                    lebar = 0;
                    }
                    private double luas(double p,double l) {
                                    return p*l;
                    }
                    public void setPanjang(double panjang1) {
                                    this.panjang = panjang;
                    }
                    public void setLebar(double lebar1) {
                                    this.lebar = lebar1;
                    }
                    public double getPanjang() {
                                    return panjang;
                    }
                    public double getLebar() {
                                    return lebar;
                    }
                    public double getLuas() {
                                    return luas(panjang, lebar);
                    }
    }
              e.        Polymorphism.php
           class Polymorphism {
           public static void main(String[] args) {
                           Karyawan K[] = new Karyawan[3];
                           K[0] = new Manager();
                           K[1] = new Receptionist();
                           K[2] = new Manager();
                           for (int i=0;i<3;i++)
                                           System.out.println("Gaji karyawan "+i+" adalah "+K[i].getgaji());
                           for (int i=0;i<3;i++)
                                           K[i].naikgaji();
                           for (int i=0;i<3;i++)
                                           System.out.println("Gaji sekarang "+i+" adalah "+K[i].getgaji());
           }
          }
                f.          Receptionist.php
    class Receptionist extends Karyawan {
                    Receptionist() {
                                    gaji += 1000000;
                    }
                   
                    void naikgaji() { gaji+=1000000; }
    }
       
                g.         DemoInheritance.php
           public class DemoInheritance {
           public static void main(String [] args) {
                           SubClass sc = new SubClass();
                           sc.methodSubClass();
           }
          }
               h.        SubClass.php
           public class SubClass extends SuperClass {
           public SubClass() {
                           super();
           }
           public void methodSubClass() {
                           super.methodSuperClass();
           }
          }
               i.          SuperClass.php
           public class SuperClass {
           public SuperClass(){
                           System.out.println("Ini Konstruktor milik SuperClass");
           }
           public void methodSuperClass() {
                           System.out.println("Ini method milik SuperClass");
           }
          }

Tidak ada komentar:

Posting Komentar