Minggu, 20 Mei 2012

Class dan Objects


Pengertian Class dan Object

A. Class

Class adalah struktur dasar dari OOP (Object Oriented Programming). Terdiri dari dua tipe yaitu : field (attribute/property) dan method (behavior). Class digunakan untuk mendeklarasikan sebuah variabel yang berupa objek atau dinamakan “referensi objek  (object reference)”

 1. Attribute

Berlaku sebagai data, didefinisikan oleh class,individu, berbeda satudengan lainnya.
Menggambarkan tampilan, status, kualitas dari object.
Contoh :class motorcycleattribute-nya = color [red, green, silver]style [cruiser, sport bike, standart]make [Honda, BMW]
Didefinisikan dalam class dengan menggunakan variabel.

2. Behavior

Berlaku sebagai method (operasi).
Menggambarkan bagaimana sebuah instance class beroperasi misalbagaimana reaksi dari class jika diminta untuk melakukan sesuatu hal.
Contoh :class motorcyclebehavior-nya = start the enginestop the enginechange gear
Untuk menentukan behavior dari object harus membuatMethods.

B. Object

Setiap Object (obyek) dibangun dari sekumpulan data (atribut) yang disebut"variabel" (untuk menjabarkan karakteristik khusus dari obyek) dan juga terdiri darisekumpulan method (menjabarkan tingkah laku dari obyek) atau Obyek adalah = sebuah perangkat lunak yg berisi sekumpulan variabel dan method yg berhubungan. Obyek merupakan sebuah instance (keturunan) dari class. Variabel dan method diketahuisebagai variabel.


Instansiasi Objek

Kita membuat objek dari kelas dengan cara instansiasi. Objek yang akan diciptakan nantilah yang akan menjadi acuan utama dalam pemrograman berorientasi objek (OOP).

Bentuk umum instansiasi :

<nama_kelas> <objek> = new <konstruktor>();

Contoh:
Tabung drum = new Tabung();


Konstruktor

Konstruktor adalah method khusus yang dipanggil saat object di-create.

Contoh:
Mahasiswa mhs = new Mahasiswa();

Pada code diatas, maka akan dipanggil konstruktor Mahasiswa()  yang merupakan konstruktor default.

Karakteristik konstruktor :
  1. Nama method konstruktor harus sama dengan nama Class.
  2. Satu class dapat memiliki lebih dari satu konstruktor (dengan parameter yang berbeda-beda).
  3. Konstruktor tidak memiliki return.
  4. Konstruktor dipanggil dengan new.

Atribut & Method

Deklarasi Atribut Dalam pendeklarasian atribut, kita tuliskan : 

[= ];

Langkah selanjutnya adalah mengurutkan atribut yang akan diisikan pada class. Untuk setiap informasi, urutkan juga tipe data yang yang tepat untuk digunakan. Contohnya, tidak mungkin menginginkan untuk menggunakan tipe data integer untuk nama siswa, atau tipe data string pada nilai siswa. Berikut ini adalah contoh informasi yang akan diisikan pada class StudentRecord :
  • name - String 
  • address - String 
  • age -Int 
  • math grade - double 
  • english grade - double 
  • science grade - double 
  • average grade – double
Deklarasi Methods Sebelum kita membahas method apa yang akan dipakai pada class, mari kita perhatikan penulisan method secara umum. Dalam pendeklarasian method, kita tuliskan :
(*)
{
*
}
dimana, dapat menggunakan beberapa modifier yang berbeda dapat berupa seluruh tipe data, termasuk void identifier atas class
::= [,]



Konsep Interface


Pada Java juga dikenal konsep interface, yang merupakan device yang digunakan untuk komunikasi antar objek berbeda yang tidak memiliki hubungan apapun. Interface bisa dikatakan sebagai protokol komunikasi antar objek tersebut.

Contoh Interface.java

interface Control {
public void pindahChannel(int channel);
public void PerbesarVolume(int intensitas);
public void PerkecilVolume(int intensitas);
}

class TelevisiA implements Control {
String[] channelTv = {“RCTI”,”SCTV”,”INDOSIAR”,”TRANS TV”,”TPI”};
public void pindahChannel(int channel) {
System.out.println(“Pindah channel pada tv A ke : ” + channelTv[channel]);
}

public void PerbesarVolume(int intensitas) {
System.out.println(“Perbesar intensitas volume pada tv A sebanyak : ” + intensitas);
}

public void PerkecilVolume(int intensitas) {
System.out.println(“Perkecil intensitas volume pada tv A sebanyak : ” + intensitas);
}

}

class TelevisiB implements Control {
String[] chanTv = {“TVRI”,”LA TV”,”TV 7,”RCTI”,”SCTV”};
public void pindahChannel(int channel) {
System.out.println(“Perintah pindah channel pada tv B ke : ” + chanTv[channel]);

}

public void PerbesarVolume(int intensitas) {
System.out.println(“Perbesar intensitas volume pada tv B sebanyak : ” + intensitas);
}


public void PerkecilVolume(int intensitas) {
System.out.println(“Perkecil intensitas volume pada tv B sebanyak : ” + intensitas);
}
}

class RemoteControl {
public static final int PINDAH_CHANNEL = 1;
public static final int PERBESAR_VOLUME = 2;
public static final int PERKECIL_VOLUME = 3;
public void kirimPerintahKeTv(int aksi,Control tv,int tombol) {

switch(aksi) {
case PINDAH_CHANNEL:
tv.pindahChannel(tombol);
break;
case PERBESAR_VOLUME:
tv.PerbesarVolume(tombol);
break;
case PERKECIL_VOLUME:
tv.PerkecilVolume(tombol);
}
}
}

class Interface {
public static void main(String[] args) {
TelevisiA tvA = new TelevisiA();
TelevisiB tvB = new TelevisiB();
RemoteControl rc = new RemoteControl();

//Kirim perintah ke tvA
rc.kirimPerintahKeTv(RemoteControl.PINDAH_CHANNEL,tvA,2);
rc.kirimPerintahKeTv(RemoteControl.PERBESAR_VOLUME,tvA,5);

//Kirim perintah ke tvB
rc.kirimPerintahKeTv(RemoteControl.PINDAH_CHANNEL,tvB,1);
rc.kirimPerintahKeTv(RemoteControl.PERKECIL_VOLUME,tvB,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.
Contoh program java nya : Simpan
public class CoolMahasiswa extends Mahasiswa
{
public void printNama()
  {
      System.out.println(“Hallo, saya Mahasiswa yang baik”);
      Super.printNama();
   }
}

Simpan dengan nama Main.java
public class Main
{
public static void main(String[] args]) 
    {
       CooltMahasiswa mhs = new CoolMahasiswa();
       mhs.setNim(“09530518”);
       mhs.setNama(“Nadia Kharisma Ulfah”);
       mhs.printNim();
       mhs.printNama();
     }
}

Abstract Class

Abstract Class / Kelas Abstrak, sesuai namanya adalah kelas yang belum jelas spesifikasinya contohnya :

 hitungLuas(int sisi)
{
 int luas = 0;
  luas = sisi*sisi;
System.out.println(luas);
}

Jika kelas Bangun Datar adalah abstrack, maka kelas Persegi karena sudah jelas dapat disebut sebagai kelas kongkret. Kelas Abstrak digunakan untuk membuat sebuah kelas yang memiliki method yang belum jelas implementasinya. berikut ini aturan nya :
  • jika sebuah kelas memiliki method abstrak maka kelas itu harus menjadi kelas abstrak.
  • sebuah kelas abstrak dapat saja memiliki method yang tidak abstrak.
  • jika sebuah kelas abstrak diturunkan menjadi kelas konkret, maka semua method abstrak dari kelas abstrak haruslah ditulis ulang / dibuat ulang di kelas konkretnya dan diberi detail dari methodnya.
  • jika method abstrak di turunkan dan kelas turunannya adalah kelas abstrak, maka tidak perlu menulis ulang method yang abstrak.
Sementara itu dulu aturan yang harus dipahami ketika anda membuat kelas abstrak dan menggunakan kelas abstrak, aturan – aturan lain akan anda temui ketika anda mulai membuatnya.
jika kelas BangunDatar kita buat kodenya kira – kira akan menjadi seperti ini :

public abstract class abstrack 
{
  abstract int hitungLuas();
}

lalu kita akan membuat kelas turunannya yaitu Persegi
class Persegi extends abstrack{

  int sisi;
  public Persegi(int s)
 {
   this.sisi = s;
  }

  public int hitungLuas() 
 {
    //method ini harus diberi implementasi
    int luas = sisi*sisi;
    return luas;
  }

public static void main(String[] args)
{
 Persegi p = new Persegi(5);
int luas = p.hitungLuas();
System.out.println(luas);
}

}

Inheritance

Salah satu konsep dasar dari pemrograman berbasis objek pada java adalah Inheritance, berikut ini sedikit gambaran tentang inheritance. 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.


Contoh implementasi inheritance :
public class Pegawai {
public String nama;
public double gaji;
}

public class Manajer extends Pegawai {
public String departemen;
}


Pada saat class Manajer menurunkan atau memperluas (extend) class Pegawai, maka ia mewarisi data member yang dipunyai oleh class Pegawai. Dengan demikian, class Manajer mempunyai data member yang diwarisi oleh Pegawai (nama, gaji), ditambah dengan data member yang ia punyai (departemen).

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). 
4. Kata kunci super dipakai untuk merujuk pada member dari parent class, sebagaimana kata kunci this yang dipakai untuk merujuk pada member dari class itu sendiri. Adapun format penulisannya adalah sebagai berikut :
super.data_member -> merujuk pada data member pada parent class
super.function_member() -> merujuk pada function member pada parent class
super() -> merujuk pada konstruktor pada parent class

Percobaan 1 : Menggunakan kata kunci super

Berikut ini listing penggunaan kata kunci super.

class Parent {
public int x = 5;
}

class Child extends Parent {
public int x = 10;
public void Info(int x) {
System.out.println("Nilai x sebagai parameter = " + x);
System.out.println("Data member x di class Child = " + this.x);
System.out.println("Data member x di class Parent = " +
super.x);
}

}
public class NilaiX {
public static void main(String args[]) {
Child tes = new Child();
tes.Info(20);
}
}

Ketika program tersebut dijalankan, akan tampak hasil seperti dibawah ini :
Nilai x sebagai parameter = 20
Data member x di class Child = 10
Data member x di class Parent = 5

Percobaan 2 : Kontrol pengaksesan
Buatlah class Pegawai seperti dibawah ini:

public class Pegawai {
private String nama;
public double gaji;
}
Kemudian buatlah class Manajer seperti ini dibawah ini.
public class Manajer extends Pegawai {
public String departemen;
public void IsiData(String n, String d) {
nama=n;
departemen=d;
}
}

Sekarang cobalah untuk mengkompilasi class Manajer diatas. Apa yang terjadi?.
Pesan kesalahan akan muncul seperti ini:

Manajer.java:5: nama has private access in Pegawai
nama=n;

Ini membuktikan bahwa class Manajer tidak mewarisi data member nama dari parent
class-nya(Pegawai).

Encapsulation

Encapsulasi adalah salah satu dari empat konsep OOP mendasar. Tiga lainnya adalah pewarisan, polimorfisme, dan abstraksi.

Encapsulasi adalah teknik pembuatan ladang di kelas swasta dan menyediakan akses ke ladang melalui metode publik. Jika bidang ini dideklarasikan swasta, tidak dapat diakses oleh siapa pun di luar kelas, sehingga menyembunyikan bidang dalam kelas. Untuk alasan ini, enkapsulasi juga disebut sebagai persembunyian data.

Encapsulasi dapat digambarkan sebagai lapisan pelindung yang mencegah kode dan data yang secara acak diakses oleh kode lain didefinisikan di luar kelas. Akses ke data dan kode yang dikontrol ketat oleh interface.

Manfaat utama dari encapsulasi adalah kemampuan untuk mengubah kode kita dilaksanakan tanpa melanggar kode orang lain yang menggunakan kode kita. Dengan fitur Encapsulasi memberikan rawatan, fleksibilitas dan diperpanjang untuk kode kita.

Contoh:

Mari kita lihat contoh yang menggambarkan encapsulasi:

 / * File name: EncapTest.java * /
 public class EncapTest {

    swasta String nama;
    swasta String idNum;
    swasta int umur;

    publik getAge int () {
       kembali usia;
    }

    public String getName () {
       kembali nama;
    }

    public String getIdNum () {
       kembali idNum;
    }

    public void setAge (int NewAge) {
       umur = NewAge;
    }

    public void setName (String newname) {
       name = newname;
    }

    public void setIdNum (String newid) {
       idNum = newid;
    }
 }
Metode akses publik poin untuk bidang ini class.s dari dunia java luar. Biasanya metode ini disebut sebagai getter dan setter. Oleh karena itu setiap kelas yang ingin mengakses variabel harus mengaksesnya melalui getter dan setter.

Variabel kelas EncapTest dapat diakses sebagai berikut ::

 / * File name: RunEncap.java * /
 public class RunEncap {

    public void static main (String args []) {
       EncapTest encap = new EncapTest ();
       encap.setName ("James");
       encap.setAge (20);
       encap.setIdNum ("12343ms");

       System.out.print ("Nama:" + encap.getName () +
                              "Umur:" + encap.getAge ());
     }
 }

Hal ini akan menghasilkan hasil sebagai berikut:

Nama: James Umur: 20
Manfaat Encapsulasi:

Bidang kelas dapat dibuat hanya-baca atau menulis saja.

Kelas A dapat memiliki total kontrol atas apa yang disimpan dalam bidangnya.

Para pengguna dari kelas tidak tahu bagaimana kelas menyimpan data. Kelas A dapat mengubah tipe data dari field, dan pengguna kelas tidak perlu mengubah salah satu kode mereka.

Abstraction


Abstraction adalah salah satu yang tidak dapat instantiated. Semua fungsi lain dari kelas masih ada, dan bidang, metode, dan konstruktor semuanya diakses dengan cara yang sama. Anda hanya tidak dapat membuat instance dari kelas abstrak.

/ * File name: Employee.java * /
 masyarakat kelas Karyawan abstrak
 {
    swasta String nama;
    swasta String alamat;
    private int nomor;
    publik Karyawan (String nama, alamat String, nomor int)
    {
       System.out.println ("Membangun Karyawan");
       this.name = nama;
       this.address = alamat;
       this.number = jumlah;
    }
    public double computePay ()
    {
      System.out.println ("Inside Karyawan computePay");
      kembali 0,0;
    }
    public void MAILCHECK ()
    {
       System.out.println ("mengirimkan cek untuk" + this.name
        + "" + This.address);
    }
    public String toString ()
    {
       kembali nama "" + alamat + "+" + nomor;
    }
    public String getName ()
    {
       kembali nama;
    }
    public String getAddress ()
    {
       kembali alamat;
    }
    public void setAddress (String newAddress)
   {
       alamat = newAddress;
   }
   public int getNumber ()
   {
      kembali nomor;
   }
 }



Perhatikan bahwa tidak ada yang berbeda di kelas Karyawan. Kelas ini sekarang abstrak, tetapi masih memiliki tiga bidang, tujuh metode, dan satu konstruktor.
Sekarang jika Anda akan mencoba sebagai berikut:

/ * File name: AbstractDemo.java * /
 masyarakat kelas AbstractDemo
 {
    public void static main (String [] args)
    {
  
       / * Berikut ini tidak diperbolehkan dan akan menimbulkan kesalahan * /
       Karyawan e = Karyawan baru ("George W.", "Houston, TX", 43);

       System.out.println ("\ n Panggil MAILCHECK menggunakan
                                    Referensi karyawan - ");
       e.mailCheck ();
     }
 }


Ketika Anda akan mengkompilasi kelas di atas maka Anda akan mendapatkan error berikut:

Employee.java: 46: Karyawan adalah abstrak, tidak dapat instantiated
       Karyawan e = Karyawan baru ("George W.", "Houston, TX", 43);
                    ^
 1 error1

Memperluas Kelas Abstrak:

Kita bisa memperpanjang kelas karyawan dengan cara yang normal sebagai berikut:

 / * File name: Salary.java * /
 Gaji kelas publik meluas Karyawan
 {
    pribadi ganda gaji, gaji / / Tahunan
    Gaji publik (String nama, alamat String, nomor int, double
       gaji)
    {
        super (nama, alamat, nomor);
        setSalary (gaji);
    }
    public void MAILCHECK ()
   {
        System.out.println ("Dalam MAILCHECK kelas Gaji");
        System.out.println ("Mailing memeriksa untuk" + getName ()
        + "Dengan gaji" + gaji);
    }
    public double getSalary ()
    {
        kembali gaji;
    }
    public void setSalary (newSalary ganda)
    {
        if (newSalary> = 0,0)
        {
           gaji = newSalary;
        }
    }
    public double computePay ()
    {
       System.out.println ("Computing gaji membayar untuk" + getName ());
       kembali salary/52;
    }
 }

Di sini kita tidak bisa instantiate Karyawan baru, tetapi jika kita instantiate objek Gaji baru, objek Gaji akan mewarisi tiga bidang dan tujuh metode dari Karyawan.

 / * File name: AbstractDemo.java * /
 masyarakat kelas AbstractDemo
 {
    public void static main (String [] args)
    {
       Gaji s = new Gaji ("Mohd Mohtashim", "Ambehta, UP",
                                  3, 3600,00);
       Gaji e = new Gaji ("John Adams", "Boston, MA",
                                  2, 2400,00);

       System.out.println ("Panggilan MAILCHECK menggunakan
                                    Referensi Gaji - ");
       s.mailCheck ();
       System.out.println ("\ n Panggil MAILCHECK menggunakan
                                    Referensi karyawan - ");
       e.mailCheck ();
     }
 }

Hal ini akan menghasilkan hasil sebagai berikut:

 Membangun Karyawan
 Membangun Karyawan
 Panggil MAILCHECK menggunakan referensi Gaji -
 Dalam MAILCHECK kelas Gaji
 Mailing memeriksa untuk Mohtashim Mohd dengan gaji 3600.0

 Panggil MAILCHECK menggunakan referensi Karyawan -
 Dalam MAILCHECK kelas Gaji
 Mailing memeriksa untuk John Adams dengan gaji 2400.
Abstrak Metode:
Jika Anda ingin kelas berisi metode tertentu tetapi Anda ingin implementasi aktual dari metode yang akan ditentukan oleh kelas anak, Anda dapat mendeklarasikan metode pada kelas induk sebagai abstrak.

Kata kunci abstrak juga digunakan untuk menyatakan sebuah metode sebagai metode abstract.An abstrak terdiri dari metode tanda tangan, tetapi tidak ada metode tubuh.

Metode abstrak akan memiliki definisi tidak, dan tanda tangan diikuti dengan titik koma, bukan kurung kurawal sebagai berikut:

 Masyarakat kelas Karyawan abstrak
 {
    swasta String nama;
    swasta String alamat;
    private int nomor;
  
    publik computePay ganda abstrak ();
  
    / / Sisa definisi kelas
 }

Mendeklarasikan metode sebagai abstrak memiliki dua hasil:

Kelas ini juga harus dinyatakan abstrak. Jika kelas berisi metode abstrak, kelas harus abstrak juga.

Setiap kelas anak harus baik mengganti metode abstrak atau mendeklarasikan sendiri abstrak.

Sebuah kelas anak yang mewarisi metode abstrak harus menimpanya. Jika tidak, mereka harus abstrak, dan setiap anak-anak mereka harus menimpanya.

Akhirnya, kelas keturunan harus menerapkan metode abstrak, jika tidak, Anda akan memiliki hierarki kelas abstrak yang tidak dapat instantiated.

Jika Gaji adalah memperluas kelas karyawan maka diperlukan untuk melaksanakan computePay () metode sebagai berikut:

 / * File name: Salary.java * /
 Gaji kelas publik meluas Karyawan
 {
    pribadi ganda gaji, gaji / / Tahunan
 
    public double computePay ()
    {
       System.out.println ("Computing gaji membayar untuk" + getName ());
       kembali salary/52;
    }

    / / Sisa definisi kelas
 }