Artikel Pemrograman Berorientasi Objek

Enkapsulasi, Inheritas, Polimorphisme, Package


Enkapsulasi adalah suatu cara untuk meyembunyikan implementasi detil dari class untuk mencegah akses yang ilegal. Ada dua hal yang  mendasar dari enkapsulasi yaitu information hiding dan interface to access data. Berikut sedikit penjesalan dari hal diatas. Information hiding adalah menyembunyikan informasi dari suatu class agar tidak bisa diakses dari luar class, caranya hanya dengan memberikan modifier private pada varibel yang ingin kita hiding. Selanjutnya mengenai interface to acces data, ialah cara kita untuk mengubah nilai pada suatu variabel yang telah dilakukan information hiding. Cara yang biasa dilakukan adalah melalui method, lewat method ini kita bisa merubah nilai suatu variabel yang telah mengalami information hiding.

Enkapsulasi tersebut terdiri dari tiga jenis yaitu publicprotected, dan private.

1. Public
Merupakan kata kunci yang digunakan dalam java yang memungkinkan setiap variabel dan method
yang di deklarasikan dalam class public dapat di akses oleh semua class yang sama, subclass atau non subclass yang sama di package yang sama, subclass dan non subclass di package yang berbeda.

2. Protected
Merupakan kata kunci yang di deklarasikan untuk memproteksi suatu class agar setiap variabel dan method yang dideklarasikan tidak dapat di akses oleh non subclass di dalam package yang sama. Dalam class protected, yang dapat mengakses variabel dan method nya adalah jika methodnya berada pada classnya sama, subclass dan non sub yang sama di package yang sama, dan subclass di package yang berbeda.

3. Private
Merupakan kata kunci yang dideklarasikan dalam suatu class agar setiap variabel dan method yang berada dalam class private ini hanya dapat diakses oleh class yang sama. Didalam bahasa pemgrograman java class yang bersifat private memproteksi agar semua variabel dan methodnya tidak dapat di akses oleh semua subclass dan non subclass di package yang sama, dan subclass dan non subclass di package yang berbeda.

Berikut ini sebuah program Java Tentang enkapsulasi yang terdiri dari 3 jenis diatas.

1. Berikut ini berupa class class yang dibutuhkan pada program tersebut,
    Terdiri dari class main.java dan website.java.


2. Selanjutnya berikut ini script yang ada pada class main.java, disitu tertera beberapa script yang dibutuhkan untuk memanggil atau bisa dikatakan untuk outputnya, biasanya langkah ini dilakukan ketika setelah selesai membuat script intinya dahulu


3. Ini adalah script yang ada pada class website.java, ini merupakan class intinya, dimana kita mendeklarasikan string yang dibutuhkan , serta menentukan jenis enkapsulasi yang diperlukan, baik itu public, protected maupun private.


4.Berikut ini outputnya dari package website tersebut, di outputnya tertera nama nic admin, nama aslinya , serta passwordnya


Untuk catatan, ketika akan memanggil string maupun integer yang berjenis enkapsulasi private, kita harus menuliskan pada script mainnya seperti ini.
System.out.println("Nama Asli Admin     :"+data.getnama());
Agar bisa class main tersebut mengambil data pada class website.
Untuk ynag protected, seperti yang dijabarkan diatas 
" yang dapat mengakses variabel dan method nya adalah jika methodnya berada pada classnya sama, dst ".

sumber : http://yaitumacam.blogspot.co.id/2014/09/enkapsulasi-java-serta-contoh-programnya.html

Inheritance


Inheritance adalah konsep pemrograman berorientasi object yang memungkinkan membuat hubungan di mana ada class yang mewarisi semua attribute dan method dari class lain. Class baru yang lebih spesifik disebut subclass atau class turunan, sedangkan class yang diturunkan disebut superclass. Untuk menguji suatu kasus disebut inheritance atau tidak, dapat menggunakan kata kunci “IS A”. (Namun, pengujian ini hanya berlaku searah (dari subclass ke superclass))
Contoh :

Mamalia: (berdaun teling, beranak, menyusui). Contohnya: Anjing, kucing, marmut
Pengujiaannya: marmut IS A mamalia.
Kendaraan (mempunyai kemudi) contohnya: mobil, motor, pesawat terbang
            Pengujiannya: motor IS A kendaraan

Praktek 1 (Extends)

Untuk membuat class turunan, digunakan keyword extends. Strukturnya seperti dibawah ini:
public class [nama SubClass] extends [nama SuperClass]{}

Contoh: public class Kamus extends Buku{}

Saat ini, kita akan mencoba membuat program yang menerapkan prinsip inheritance

1. Program yang menjadi subClass dengan menggunakan kata kunci extends.

class B extends A {
int z;
void getJumlah(){
System.out.println(“jumlah:”+ (x+y+z));
}
}
3. Buatlah class testernya

class InheritanceTest{
public static void main(String [] args)
{
A ortu = new A();
B anak = new B();
System.out.println(“superclass”);
ortu.x=10;
ortu.y=20;
ortu.getNilai();
System.out.println(“sub Class”);
anak.x=5;
anak.y=4;
anak.getNilai();
anak.z=50;
                    anak.getJumlah();
      }
      }

 Dari kode program diatas, kita dapat melihat bahwa bahwa method getNilai() muncul pada class B. Padahal kita tidak melihat adanya method getNilai() di class B. Hal ini membuktikan bahwa terdapat proses inheritance dari class A ke class B. Hubungan ini bersifat generalization dimana ClassChild mempunyai semua sifat dari ClassParent. Oleh karena itu, pada ClassChild cukup ditambahkan bagian yang memang merupakan spesifik milik classChild. Dari program sederhana ini pula, kita mendapatkan keuntungan dari inheritance. Kita tidak perlu menambah atribut x dan y ataupun method getHasil() pada class B. Kita hanya cukup menggunakan apa yang sudah ada di class A , atau dengan kata lain,kita telah menerapkan prinsip “reuse of code”. Perlu diketahui: Java tidak mengizinkan pewarisan berganda. Misalkan class aku diturunkan dari class ayah dan class ibu. Pewarisan berganda ini bisa dilakukan di C++.

Praktek 2 (Hak Akses)

Pada program diatas, setiap atribut yang digunakan bertipe default. Dengan kata lain, atribut pada program diatas tidak terenkapsulasi sehingga dengan mudah kita dapat mengisi nilai x dan y tanpa mengakses method apapun dari luar class A maupun B. Pada pertemuan sebelumnya, kita diajarkan untuk melakukan enkapsulasi dengan menggunakan hak akses yang bertipe private. Sekarang, ubahlah program diatas menjadi seperti dibawah ini:

class B extends A {
private int z;
public void getJumlah(){
System.out.println(“jumlah:”+ (x+y+z));
}
public void setZ(int z){
this.z = z;
}
}
class A {
private int x;
private int y;public void setX(int x){
this.x = x;
}
public void setY(int y){
this.y = y;
}
public void getNilai(){
System.out.println(“nilai x:”+ x +” nilai y:” + y);
}
class InheritanceTest{
public static void main(String [] args)
{
A ortu = new A();
B anak = new B();
System.out.println(“superclass”);
ortu.setX(10);
ortu.setY(20);
ortu.getNilai();
System.out.println(“sub Class”);
anak.setX(5);
anak.setY(4);
anak.getNilai();
anak.setz(50);
anak.getJumlah();
}
}

Compile program!

                        Seperti yang telah kita bahas kemarin, terdapat 5 jenis hak akses. Error tersebut terjadi karena kita mendefinisikan atribut x dan y sebagai private. Ingat, private hanya bisa diakses di classnya. Tetapi tidak di class lain, bahkan di class turunannya sendiri. Coba ganti hak akses dari atribut2 A dan B menjadi protected. Kemudian compile program yang Anda buat tadi. Catatan: Agar tetap menjaga konsistensi enkapsulasi, maka akses terhadap super class dari sub class pada bagian attribute-nya tidak terlepas dari access control protected. Hal ini digunakan untuk menjaga agar attribute hanya dapat diakses oleh class yang menjadi turunannya saja.
Praktek 3

1. Sebuah class lagi yang mewarisi class B, misalkan class C:

class C extends B {
protected int w;
public void setW( int w){
this.w = w;
}
public void getW(){
System.out.println(“nilai w :”+ w);
}
}

2. Ubah class InheritanceTest menjadi seperti dibawah ini:

class InheritanceTest{
public static void main(String [] args)
{
A ortu = new A();
B anak = new B();
C cucu = new C();
System.out.println(“superclass”);
ortu.setX(10);
ortu.setY(20);
ortu.getNilai();
System.out.println(“sub Class”);
anak.setX(5);
anak.setY(4);
anak.getNilai();
anak.setz(50);
anak.getJumlah();
System.out.println(“sub Class2”);
cucu.setX(5);
cucu.setY(4);
cucu.getNilai();
cucu.setz(50);
cucu.getJumlah();
cucu.setW();
cucu.getW();
}
}
Praktek 4 (Super)

Jika keyword this digunakan untuk membedakan variabel local dengan atribut suatu objek, maka untuk membedakan atribut superclass dengan atribut subclass digunakan keyword super.

Contoh program

class Bentuk {
protected int p,l;
}
class Persegi extends Bentuk {
protected int p,l;
public void setSuperP(int p){
super.p = p;
}
public void setSuperL(int l){
super.l = l;
}
public void setP(int p){
this.p = p;
}
public void setL(int l){
this.l = l;
}
public void getLuas(){
System.out.println("Luas super:"+(super.l*super.p));
System.out.println("Luas:"+ (this.l*this.p));
}
}
class PersegiTest {
public static void main(String[] args){
Persegi kotak=new Persegi();
kotak.setSuperP(5);
kotak.setSuperL(10);
kotak.setP(3);
kotak.setL(13);
kotak.getLuas();
}
}
Catatan :
Keyword super digunakan untuk merefer ke superclass dari class yang bersangkutan.  Terlihat di output bahwa luas super dengan luas subclassnya berbeda.
Praktek 5 (super constructor)

Untuk pengaksesan constructor method dari super class, digunakan bentuk sebagai berikut :

super (argumen1, argumen2, …) ;
contoh  program
class A{
A(){
System.out.println("konstruktor A dieksekusi");
}
}
class B extends A{
B(){
System.out.println("konstruktor B dieksekusi");
}
}
class C extends B{
C(){
System.out.println("konstruktor C dieksekusi");
}
}
class ConstructorTest{
public static void main(String[] args){
C coba=new C();
}
}

Compile ulang class A, B dan C serta ConstructorTest.

Dari percobaan diatas, ada beberapa hal yang perlu diingat dalam penggunaan super constructor, yaitu :
1. Sebenarnya, java menambahkan pemanggilan super secara default ketika kita tidak             memanggil constructor super di subclassnya tetapi, jika pada superclass tidak    terdapat constrructor default atau constructor yang tidak menggunakan parameter, maka kita harus melakukan pemanggilan salahasatu constructor pada subclassnya, sesuai dengan constructor yang ada pada superclassnya.
2. Pemanggilan super() harus terletak pada pernyataan baris pertama dalam sebuah                 constructor.
3. Pemanggilan super() hanya bisa dilakukan pada constructor.
4. Hal ini mengimplikasikan bahwa this() dan super() yang dipanggil tidak dapat dinyatakan dalam constructor yang sama.

Praktek 6 (overriding method)

Buatlah class

class A{
public void show(){
System.out.println("Method show milik class A dipanggil");
}
}
class B extends A{
public void show(){
System.out.println("Method show milik class B dipanggil");
}
}
class OverridingTest{
public static void main(String[] args){
B coba = new B();
coba.show();
}
}

Compile ketiga program diatas.

method mana yang dipanggil oleh class B?
Dalam program tersebut terdapat 2 method dengan nama yang sama walaupun dalam class yang berbeda. Contoh program tersebut merupakan aplikasi dari Overriding. Ketika dalam suatu subclass, kita mendefinisikan method yang sama dengan superclassnya, maka, method dalam subclass tersebut dikatakan meng-override superclassnya. Sehingga, method yang dipanggil bukan lagi method milik superclass, tetapi miliknya sendiri (subclass)
Lalu, bagaimana cara memanggil method superclassnya?
Ubah code class B menjadi seperti berikut:

class B extends A {
public void show(){
super.show();
System.out.println("Method show milik class B dipanggil");
}
}

Praktek 7 (Final)

Contoh program  class 

class Lingkaran{
final public double PI = 3.14;
protected double r;
public void setR( double r){
this.r=r;
}
public void getLuas(){
System.out.println("Luas Lingkaran="+(this.PI*r*r));
}
}
class LingkaranTest{
public static void main(String[] args){
Lingkaran bunder=new Lingkaran();
bunder.PI=4;
bunder.setR(10);
bunder.getLuas();
}
}

Compile kedua program.

Final keyword, adalah penentu akses yang dapat diterapkan pada instance variable atau pada method, di mana akan menjadikan : Suatu instance variable, akan dibuat menjadi konstanta. Suatu method, akan dibuat menjadi tidak dapat di-override pada sublassnya.
Jadi, final keyword dalam hal ini dapat digunakan untuk memberikan batasan  lebih (selain akses control) terhadap pengaksesan attribute maupun method suatu class terhadap class turunannya.

sumber : http://sudoel-programmer.blogspot.co.id/2012/05/inheritance.html

Polimorfisme
Polymorphism sering dikaitkan dengan penggunaan lebih dari satu metoda dengan nama sama. Penggunaan metoda dengan nama sama dapat diterapkan dengan method overloading dan method overriding. Peran polymorphism sebenarnya tidak terbatas hanya pada hal tersebut. Ada keterkaitan antara polymorphism dan inheritance (turunan).

Dalam konsep turunan, saat obyek dari subclass dikonstruksi, obyek dari superclass juga ikut dikonstruksi. Jadi setiap instance dari subclass adalah juga instance dari superclass. Apabila Anda mendeklarasikan metoda dengan parameter dari tipe superclass, Anda diperbolehkan untuk memberi argumen berupa obyek subclass yang merupakan turunan dari superclass tersebut.

Berikut ini adalah contoh program yang dapat memberikan gambaran berkaitan dengan konsep polymorphism. Perlu dipahami dan dimengerti bahwa kelas Object merupakan akar dari semua kelas Java dan menduduki puncak tertinggi dalam hirarkhi kelas. Program akan mendefinisikan kelas yang berkaitan dengan bidang datar secara sederhana termasuk beberapa kelas turunannya (kelas PersegiPanjang dan Balok) dan membatasi hanya pada penerapan method overriding.

// Nama file : Polimorphism.java
// Contoh penerapan konsep polimorphism

public class Polimorphism {

public static void main(String[ ] args) {

cetakObyek(new Balok());
cetakObyek(new PersegiPanjang());
cetakObyek(new BangunDatar());
cetakObyek(new Object());
}

public static void cetakObyek(Object obyek) {
System.out.println(obyek);
}

} // Akhir kelas Polimorphism

class Balok extends PersegiPanjang {
public String toString() {
return “Mempunyai sisi panjang, lebar dan tinggi”;
}
}

class PersegiPanjang extends BangunDatar {
public String toString() {
return “Mempunyai sisi panjang dan lebar”;
}
}

class BangunDatar extends Object {
public String toString() {
return “Mempunyai berbagai bentuk”;
}
}

Baris nomor 14 -16 adalah deklarasi metoda cetakObyek yang mempunyai satu parameter dengan tipe kelas Object. Kelas Object merupakan akar dari semua kelas di Java. Langsung maupun tidak langsung, semua kelas di Java merupakan turunan dari kelas Object. Anda dapat memanggil atau menggunakan metoda cetakObyek dengan argumen berupa obyek yang dibuat dari kelas turunan superclass Object.

Ketika metoda cetakObyek dipanggil (baris nomor 8 – 11), argumen obyek akan diminta. obyek sebagai argumen metoda dapat berupa obyek yang merupakan kelas turunan dari kelas Object yaitu kelas BangunDatar, kelas PersegiPanjang maupun kelas Balok. Masing-masing kelas turunan mendeklarasikan ulang metoda toString yang mempunyai implementasi berbeda. Java Virtual Machine (JVM) akan menentukan secara dinamis implementasi metode toString yang digunakan saat program dijalankan. Kemampuan menentukan secara dinamis ini disebut dengan dynamic binding.

Dari gambaran program di atas, apabila argumen parameter sebuah metoda adalah tipe superclass, maka argumen metoda yang diberikan dapat berupa tipe dari subclass-nya. Kemampuan seperti inilah yang dimaksud dengan polymorphism. Dari gambaran tersebut, dapat didefinisikan kembali bahwa polymorphism adalah kemampuan untuk menghasilkan sesuatu yang berbeda dengan cara yang sama. Pemberian obyek dari subclass ke obyek dari superclass dapat dilakukan tanpa perlu melakukan konversi.

sumber : http://www.termasmedia.com/pemrograman/java/250-memahami-konsep-polimorfisme-polymorphism-di-java.html


Package

Java class library (Java API) memiliki banyak sekali kelas (Java predefined classes) yang diletakkan di paket (package) untuk dapat dipergunakan kembali di program. Paket tersebut digunakan untuk mengelompokkan kelas-kelas yang mempunyai kemiripan fungsi (related class). Kelas-kelas Java yang akan digunakan di dalam program, terlebih dahulu harus diimpor beserta dengan nama paket di mana kelas tersebut berada, kecuali untuk kelas Java yang berada di paket java.lang seperti kelas JOptionPane yang berada di paket javax.swing dan kelas DecimalFormat yang berada di paket java.text. Berikut ini adalah daftar beberapa paket Java yang sering dipergunakan di program Java:

Tabel Beberapa Paket Java

Paket

Keterangan

javax.swing

Paket ini berisi kelas-kelas dan interface untuk komponen GUI swing Java yang menyediakan dukungan untuk tampilan grafis yang portabel.

javax.swing.event

Paket ini berisi kelas-kelas dan interfes yang memperbolehkan penanganan event untuk komponent grafis yang terletak di paketjavax.swing.

java.lang

Paket ini berisi kelas-kelas dan interfes yang diperlukan oleh banyak program Java. Paket ini diimpor oleh kompiler ke semua program Java secara otomatis.

java.applet

Paket ini berisi kelas-kelas Applet dan juga beberapa interfes yang memperbolehkan interaksi applet dan browser serta untuk memainkan klip audio. Kelasjavax.swing.JAppletdigunakan untuk menetapkan applet yang menggunakan komponen GUI swing.

java.text

Paket ini berisi kelas-kelas dan interfes yang memperbolehkan program Java untuk memanipulasi angka, tanggal, karakter dan juga string.

java.net

Paket ini berisi kelas yang memperbolehkan program untuk berkomunikasi melalui jaringan.

KEUNTUNGAN MENGGUNAKAN PAKET.

Ada kemungkinan, programer Java membuat kelas sendiri yang mempunyai nama sama dengan kelas yang sudah ada di Java API tanpa sengaja. Konflik penamaan kelas bisa saja terjadi. Untuk mengatasi masalah terkait penamaan kelas, Anda dapat meletakkan kelas yang mempunyai nama sama ke dalam paket berbeda dan mengakses kelas tersebut beserta dengan nama paketnya. Kelas-kelas Java yang mempunyai kemiripan fungsi seharusnya diletakkan di paket yang sama sehingga akan mempermudah penempatan dan pendistribusian. Paket juga berfungsi memberi proteksi pada kelas dan interface yang ada di dalamnya. Sebagai contoh, kelas yang dideklarasikan dengan kata kunci private, hanya dapat diakses oleh kelas-kelas lain yang berada dalam paket yang sama.

DIREKTORI PAKET.

Sebuah paket sebenarnya adalah direktori yang digunakan untuk menyimpan file-file bytecode (file berekstensi .class). Paket Java disusun secara berjenjang (hierarchical). Anda bisa mempunyai paket yang berada di dalam paket lain. Sebagai contoh,javax.swing.JOptionPane menunjukkan bahwa kelas JOptionPane berada di paket swing dan paket swing sendiri berada di paket javax. Level jenjang paket digunakan untuk memastikan keunikan dari nama paket.

Semua kelas yang dibuat akan tersimpan di direktori yang sekarang aktif (current directory atau default package) ketika program sumber Java dikompilasi. Karena program sumber Java terletak di direktori, misalnya c:\hindro\javasc dan proses kompilasi juga dilakukan di direktori tersebut, maka file bytecode hasil kompilasi juga akan tersimpan di direktori yang sama.

MELETAKKAN KELAS KE DALAM PAKET.

Setiap kelas Java akan diletakkan (dikelompokkan) ke dalam paket. Kelas-kelas tersebut diletakkan ke dalam paket saat program sumber Java (Java source program) dikompilasi. Untuk meletakkan sebuah kelas hasil kompilasi ke dalam paket yang dituju, Anda dapat menyertakan pernyataan package diikuti nama paket di program sumber Java. Pernyataan package yang diikuti nama peket adalah pernyataan Java yang paling pertama. Berikut ini adalah sintak pernyataan package untuk meletakkan hasil kompilasi ke dalam paket:

package nama-paket;

Untuk mendemonstrasikan penggunaan pernyataan package di atas, terlebih dahulu Anda dapat membuat direktori baru. Misalnya c:\filejava\javaapp\kelas\bangun\datar adalah direktori yang digunakan untuk menyimpan file bytecode Java (berekstensi .class). Dari direktori tempat menyimpan kelas, Anda dapat menentukan c:\filejava\javaapp\kelas sebagai class path dan bangun\datar sebagai nama paket (package name). Agar Java mengetahui letak kelas yang sudah dibuat di dalam sistem file (file system), Anda perlu memodifikasi nilai variabel CLASSPATH di kotak dialok Edit System Variable.

Modifikasi nilai variabel CLASSPATH dilakukan dengan menambahkan ;c:\filejava\javaapp\kelas ke nilai yang sudah ada di variabel CLASSPATH. Untuk menambahkan beberapa path lain ke dalam nilai variabel CLASSPATH, Anda harus memberikan pemisah berupa titik koma. Umumnya, variabel CLASSPATH sudah terisi dengan dot (.) yang mengacu ke direktori yang sedang aktif (current directory) atau lokasi dari pustaka kelas Java. Berikut ini adalah kotak dialok Edit System Variable dari variabel CLASSPATH:

https://cuepricornz.wordpress.com/tutorial/pemrograman-berorientasi-obyek/

Semoga Bermanfaat !


- Copyright © A Dreamers - Hatsune Miku - Powered by Blogger - Designed by Nizma Rahmita -