Home » Java » Encapsulation di Java: Object Oriented (4) :

Encapsulation di Java: Object Oriented (4) :

by Bagus Dharma Iswara
by Bagus Dharma Iswara

Enkapsulasi adalah salah satu dari empat konsep OOP dasar. Tiga lainnya adalah pewarisan, polimorfisme, dan abstraksi. Enkapsulasi di Java adalah mekanisme membungkus data (variabel) dan kode yang bekerja pada data (metode) bersama-sama sebagai satu kesatuan.

Dalam enkapsulasi, variabel kelas akan disembunyikan dari kelas lain, dan hanya dapat diakses melalui metode kelas mereka saat ini. Oleh karena itu, ini juga dikenal sebagai penyembunyian data. Data “sensitif” disembunyikan dari pengguna. Untuk mencapai ini, maka Anda harus melakukan

  1. Mendeklarasi kelas variabel atau atribut sebagai private.
  2. Menyediakan metode publik get dan set untuk mengakses dan memperbarui nilai variabel private.

Get dan Set

Anda telah belajar bahwa variabel privat hanya dapat diakses di dalam kelas yang sama (kelas luar tidak memiliki akses ke sana).

Namun, dimungkinkan untuk mengaksesnya jika kami menyediakan metode get dan set publik. Metode get mengembalikan nilai variabel, dan metode set menetapkan nilainya.

Sintaks untuk keduanya adalah bahwa keduanya dimulai dengan get atau set, diikuti dengan nama variabel, dengan huruf pertama dalam huruf besar. Contoh dari get dan set pada Java adalah

public class Person {
  private String name; // private = restricted access

  // Getter
  public String getName() {
    return name;
  }

  // Setter
  public void setName(String newName) {
    this.name = newName;
  }
}

Contoh diatas dapat menjelaskan yaitu

  • Metode get mengembalikan nilai nama variabel.
  • Metode set mengambil parameter (newName) dan menugaskannya ke variabel name. Kata kunci this digunakan untuk merujuk ke objek saat ini.
  • Namun, karena variabel name dideklarasikan sebagai private, kita tidak dapat mengaksesnya dari luar kelas ini, seperti
public class MyClass {
  public static void main(String[] args) {
    Person myObj = new Person();
    myObj.name = "John";  // error
    System.out.println(myObj.name); // error 
  }
}

Jika variabel dideklarasikan sebagai publik, kita akan mengharapkan output berikut:

John

Namun, saat kami mencoba mengakses variabel private, kami mendapatkan kesalahan:

MyClass.java:4: error: name has private access in Person
    myObj.name = "John";
         ^
MyClass.java:5: error: name has private access in Person
    System.out.println(myObj.name);
                  ^
2 errors

Sebagai gantinya, kami menggunakan metode getName () dan setName () untuk mengakses dan memperbarui variabel:

public class MyClass {
  public static void main(String[] args) {
    Person myObj = new Person();
    myObj.setName("John"); // Set the value of the name variable to "John"
    System.out.println(myObj.getName());
  }
}

// Outputs "John"

Contoh Encapsulation pada Java

Berikut ini adalah contoh yang menunjukkan bagaimana membuat Enkapsulasi di Java

/* File name : EncapTest.java */
public class EncapTest {
   private String name;
   private String idNum;
   private int age;

   public int getAge() {
      return age;
   }

   public String getName() {
      return name;
   }

   public String getIdNum() {
      return idNum;
   }

   public void setAge( int newAge) {
      age = newAge;
   }

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

   public void setIdNum( String newId) {
      idNum = newId;
   }
}

Metode setXXX publik () dan getXXX () adalah titik akses dari variabel instan dari kelas EncapTest. Biasanya, metode ini disebut getter dan setter. Oleh karena itu, setiap kelas yang ingin mengakses variabel harus mengaksesnya melalui getter dan setter ini.

Variabel kelas EncapTest dapat diakses dengan menggunakan program berikut

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

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

      System.out.print("Name : " + encap.getName() + " Age : " + encap.getAge());
   }
} // Output yang dihasilkan adalah
  // Name : James Age : 20

Keuntungan Menggunakan Encapsulation pada Java

Dengan hanya menyediakan metode penyetel atau pengambil, Anda dapat membuat kelas hanya-baca atau hanya-tulis. Dengan kata lain, Anda dapat melewati metode pengambil atau penyetel. Ini memberi Anda kendali atas data. Misalkan Anda ingin menyetel nilai id yang harus lebih besar dari 100 saja, Anda dapat menulis logika di dalam metode setter. Anda dapat menulis logika untuk tidak menyimpan angka negatif dalam metode penyetel.

Ini adalah cara untuk mencapai penyembunyian data di Java karena kelas lain tidak akan dapat mengakses data melalui anggota data pribadi. Kelas encapsulate mudah untuk diuji. Jadi, lebih baik untuk pengujian unit. IDE standar menyediakan fasilitas untuk menghasilkan getter dan setter. Jadi, mudah dan cepat untuk membuat kelas yang dienkapsulasi di Java.

Java Package

Package java adalah sekelompok kelas, antarmuka dan sub-paket yang serupa.Paket di java dapat dikategorikan dalam dua bentuk, paket built-in dan paket yang ditentukan pengguna. Ada banyak paket bawaan seperti java, lang, awt, javax, swing, net, io, util, SQL . Di sini, kita akan mempelajari cara membuat dan menggunakan package yang ditentukan pengguna secara mendetail.

Keuntungan Java Package

  1. Package Java digunakan untuk mengkategorikan kelas dan antarmuka sehingga dapat dengan mudah dipelihara.
  2. Paket Java menyediakan perlindungan akses.
  3. Paket Java menghapus benturan penamaan.

Contoh Penggunaan Package pada Java

Kata kunci package digunakan untuk membuat package di java

//save as Simple.java  
package mypack;  
public class Simple{  
 public static void main(String args[]){  
    System.out.println("Welcome to package");  
   }  
}  

Bagaimana Mengakses Package dari Package Lain ?

Ada tiga cara untuk mengakses package dari luar package.

  1. import package.*;
  2. import package.classname;
  3. fully qualified name.

1. Menggunakan packagename.*

Jika Anda menggunakan package. * Maka semua kelas dan antarmuka dari paket ini akan dapat diakses tetapi tidak subpaket. Kata kunci import digunakan untuk membuat kelas dan antarmuka dari paket lain dapat diakses oleh paket saat ini. Kita dapat melihat kode dibawah untuk dapat lebih jelas

//save by A.java  
package pack;  
public class A{  
  public void msg(){System.out.println("Hello");}  
}  
//save by B.java  
package mypack;  
import pack.*;  
  
class B{  
  public static void main(String args[]){  
   A obj = new A();  
   obj.msg();  
  }  
}  // output hasil adalah Hello

2. Menggunakan packagename.classname

Jika Anda mengimpor package.classname maka hanya kelas yang dideklarasikan dari paket ini yang dapat diakses. Kita dapat melihat kode dibawah untuk dapat lebih jelas

//save by A.java  
  
package pack;  
public class A{  
  public void msg(){System.out.println("Hello");}  
}  
//save by B.java  
package mypack;  
import pack.A;  
  
class B{  
  public static void main(String args[]){  
   A obj = new A();  
   obj.msg();  
  }  
} // output hasil adalah Hello

3. Menggunakan Fully Qualified Name

Jika Anda menggunakan nama yang sepenuhnya memenuhi syarat maka hanya kelas yang dideklarasikan dari paket ini yang dapat diakses. Sekarang tidak perlu mengimpor. Tetapi Anda perlu menggunakan nama yang sepenuhnya memenuhi syarat setiap kali Anda mengakses kelas atau antarmuka. Ini umumnya digunakan ketika dua paket memiliki nama kelas yang sama mis. java.util dan paket java.sql berisi kelas Date.

Kita dapat melihat kode dibawah untuk dapat lebih jelas

//save by A.java  
package pack;  
public class A{  
  public void msg(){System.out.println("Hello");}  
}  
//save by B.java  
package mypack;  
class B{  
  public static void main(String args[]){  
   pack.A obj = new pack.A();//using fully qualified name  
   obj.msg();  
  }  
}  // output hasil adalah Hello

Subpackage pada Java

Paket di dalam paket disebut subpaket. Ini harus dibuat untuk mengkategorikan paket lebih lanjut. Mari kita ambil contoh, Sun Microsystem telah mendefinisikan paket bernama java yang berisi banyak kelas seperti System, String, Reader, Writer, Socket dll.

Kelas-kelas ini mewakili grup tertentu mis. Kelas Reader dan Writer adalah untuk operasi Input / Output, kelas Socket dan ServerSocket untuk jaringan dll dan seterusnya.

Jadi, Sun telah mensubkategorikan paket java ke dalam sub-paket seperti lang, net, io. Dan meletakkan kelas terkait Input / Output dalam paket io, kelas Server dan ServerSocket dalam paket net dan seterusnya. contohnya adalah pada kode dibawah

package com.javatpoint.core;  
class Simple{  
  public static void main(String args[]){  
   System.out.println("Hello subpackage");  
  }  
}  // output hasil adalah Hello subpackage

You may also like