BAB 5 - Constructor - TeachMeSoft

BAB 5 - Constructor

BAB 5 - Constructor

Capaian dan Indikator


1. Capaian Pembelajaran

Setelah mempelajari bab ini, mahasiswa diharapkan:
  1. Mengetahui konsep constructor
  2. Mengetahui implemtasi constructor dalam program


2. Indikator

  1. Mampu menjelaskan konsep constructor
  2. Mampu mengimplementasikan constructor di dalam program

Uraian Materi




Setiap manusia pasti memiliki nama. Sadar atau tidak, anda akan memperkenalkan diri anda dengan menyebutkan nama, alamat, tanggal lahir, hobi, dan sebagainya. Namun, pernahkah anda berpikir mengapa banyak orang suka menghapal nama anda ketimbang alamat, tanggal lahir, hobi, dan sebagainya? Padahal terkadang nama banyak dipakai juga pada orang lain? Bahkan nama lengkap saya sendiri pun juga ada yang menggunakannya meskipun ejaannya berbeda. ltu semua karena nama anda adalah unik. Sekali lagi, coba anda bayangkan bagaimana kalau anda tidak mempunyai nama? Orang lain pasti akan kebingu ngan memanggil anda. Bisa-bisa anda akan dipanggil "Anonymous" sebagai seseorang tanpa nama. Demikian pula dalam pembuatan constructor. Ketika anda membuat sebuah objek dari  class  manusia (sebut saja "Orang l"), kemudian anda dapat menge-set nilai berupa nama, alamat, tanggal lahir, dan hobi menggunakan method setter(). Berbeda halnya dengan constructor. Ketika objek "Orang 1" telah terbentuk, anda langsung memberikan nilai berupa nama, alamat, tangal lahir, dan hobi. Hal itu ibarat anda baru lahir di dunia ini dan langsung diberi nama. ltu lah merupakan konsep dari Constructor.

A. Constructor
Constructor adalah method yang berfungsi untuk menginisialisasi variabelvariabel instans yang akan dimiliki oleh objek. Constructor dipanggil pada saat proses instansiasi kelas menjadi objek. Jika kelas tidak memil iki method constructor, maka selu ru h variabel objek akan diinisialisasi kepada nilai defau lt, sesuai dengan tipe datanya masing-masing. Berikut adalah struktur constructor.

class Nama_Kelas
{
 Nama_Kelas();
 {
  //isi constructor
 }
 
 //is dari kelas
}

Contoh penggunaan constructor:
class Login
{
 Login();
 {
  //isi constructor
 }
 
 //is dari kelas
}

B. Karakteristik Constructor
Berikut ini adalah beberapa karakteristik yang dimiliki oleh constructor:
  1. Method constructor harus memiliki nama yang sama dengan nama class
  2. Tidak mengembalikan suatu nilai (tidak ada keyword return)
  3. Satu kelas memiliki lebih dari constructor (overloading constructor)
  4. Dapat ditambah access modifier public, private, protected mau pun default"
  5. Suatu constructor bisa dipanggil oleh constructor lain dalam satu kelas



C. Overloading Constructor
Seperti yang telah dijelaskan poin 3 pada karakteristik constructor bahwa dalam sebuah
class dapat memiliki lebih dari satu constructor. Yang mem bedakan antara constructor yang satu  dengan  yang  lainnya  adalah jumlah  parameter dan tipe data di dalamnya. Struktut Overload ing Constructor adalah sebagai berikut.
class Nama_Kelas
{
 Nama_Kelas();
 {
  //isi constructor
 }
 Nama_Kelas(parameter);
 {
  //isi constructor
 }
 //is dari kelas
}


Contoh penggunaan constructor:

class Login
{
 private String username; password;
 
 Login();
 {
  username = "admin";
  password = "12345";
 }
 Login(String username, String password);
 {
  this.username = username;
  this.password = password;
 }
 //is dari kelas
}

Pada contoh di atas, anda melihat class Login dimana memiliki 2 constructor. Selain itu, terdapat perbedaaan cara membuat objek (instance of class) dengan menggunakan overloading constructor di class Utama. Jika anda ingin membuat instance of class dengan method Login tanpa parameter adalah sebagai berikut:

Login user1 = new Login():

Pembuatan objek di atas akan memberikan nilai set default username dan password
berupa admin dan 12345. Sedangkan jika anda ingin membuat user sendiri  (misal: usemame=edo, password=pb0) melalui instance of class dengan method Login menggunakan parameter adalah sebagai berikut:

Login user1 = new Login("edo", "pb0");

D.  Overloading
Overloading merupakan suatu mekanisme yang memungkinkan kita untuk membuat lebih dari satu method dengan nama yang sama. Namun dengan ketentuan bahwa setiap method harus memiliki parameter yang berbeda, baik berbeda dari nama parameternya, atau berbeda dari tipe datanya, atau bahkan berbeda jumlah parameternya. Overload dapat dilakukan terhadap constructor dan juga method.

Overload pada Constructor
Pada kenyataannya, suatu kelas pada umumnya justru  memil iki lebih dari satu constructor. Artinya,  kita dapat melakukan instansiasi objek dengan menggunakan salah satu dari constructor yang ada pada kelas yang dirujuk.

Overload pada Method
Sama halnya dengan constructor, method juga dapat dikenai overload dengan syarat bahwa kedua dua method yang namanya sama harus memiliki parameter yang berbeda


E. Perbedaan menggu nakan Constructor dengan method Setter()
Jika anda melihat dengan teliti, anda pasti akan bertanya-tanya ""lalu apa perbedaan"
"penggunaan setter() dengan constructor?". Dalam method setter(), pertama kali obyek dibuat dari sebuah kelas (instance of class). Setelah objek terbentuk , kemudian objek tersebut di beri atribut. Berbeda dengan constructor.

Dalam constructor, obyek yang dibuat dari sebuah kelas (instance of class) langsung diberi atribut. Berikut adalah analogi perbedaan setter() dan constructor.




Latihan


Berdasarkan contoh di atas tentang login, buatlah 2 buah class yang terdiri dari class

Login dan class utama.
Class Login harus memiliki beberapa ketentuan sebagai berikut:
  • Atribut berisi username dan password
  • Terdapat 2 buah constructor Login. Constructor pertama tidak memi liki parameter dan memiliki nilai default usemame="admin" dan password="l 2345". Sedangkan constructor kedua memiliki parameter untuk mengeset nilai username dan password berdasarkan inputan user.
  • Terdapat method setter dan getter untuk mengeset/merubah dan mengam bil nilai dari username dan password

Sedangkan pada Class utama digunakan untuk memanggil class Login.

Ketika class utama dijalankan, hasilnya akan tampak seperti di bawah ini:


Jika pilihan = 1, maka akan tampil sebagai berikut:


Jika pi lihan = 2, maka akan tampil sebagai berikut:



Jika pilihan = 3, maka akan tampil sebagai berikut:


Jika pilihan = 4, maka akan tam pil sebagai berikut:


Jika pilihan = 5, maka akan tampil sebagai berikut:"


Jawabannya adalah ...
Langkah 1: Membuat skema
Skema diagram digunakan untuk membantu anda dalam membantu logika anda untuk pembuatan  program. Tanda "-" dilambangkan  sebagai private. Sedangkan tanda "+" dilambangkan sebagai public. Berikut adalah skema diagramnya.


Langkah 2: class Login (ketikkan script berikut)
a. Membuat kerangka class Login
class Login
{
 //deklarasi
 
 //constructor
 
 //setter
 
 //getter
 
}

Setelah anda mem buat class Login, simpan fi le tersebut dengan nama Login.java. Di dalam  class  Login, saya juga menyediakan tempat untuk mendeklarasikan variabel , setter dan getter.

b. Mendeklarasi variabel yang dibutuhkan
Setelah kita membuat kerangka class, maka diperlukan pendeklarasian variabei yang nantinya    digunakan sebagai tempat menyimpan data yang bersifat sementara (temporary). Garnbar di bawah ini menunjukkan pendeklarasian  variabel.
class Login
{
 //deklarasi
 private String username, password;
 
 //constructor
 
 //setter
 
 //getter
 
}



c.  Mendeklarasi constructor
Setelah membuat variabel yang dibutuhkan pada class Login, langkah selanjutnya anda membuat constructor login. Constructor ini nantinya akan digunakan dalam class Utama. Garnbar di bawah ini menunjukkan deklarasi constructor.

class Login
{
 //deklarasi
 private String username, password;
 
 //constructor
 public Login()
 {
  username = "admin";
  password = "12345";
 }
 
 public Login(String username, String password)
 {
  this.username = username;
  this.password = password;
 }
 
 //setter
 
 //getter
 
}



Coba perhatikan kembali script yang telah anda buat seperti gambar di atas. Seperti halnya dengan penggunaan method setter(), di dalam pembuatan constructor Login dengan parameter, anda juga dapat menggu nakan keyword this. Penggunaan  keyword this akan mengacu kepada variabel yang dideklarasikan pada class Login (lihat script yang diberi kotak berwarna biru pada gambar di bawahnya). Apabila variabel tersebut tersebut tidak diberi keyword this, maka variabel tersebut aka  mengacu kepada variabel yang dideklarasikan pada parameter constructor (lihat script yang di beri kotak berwarna hijau pada gambar di bawahnya). Penggunaan keyword this dapat digunakan atau tidak (optional) apabila ada perbedaan deklarasi nama variabel pada class Login (untuk Jebih jelas mengenai keyword this, anda dapat meli hat modul).



d. Membuat method setter
Setelah membuat variabel  yang dibutuhkan  pada class Login, langkah selanjutnya anda buat  method setter untuk masing-masing variabel. Hal ini bertujuan untuk mengeset atau merubah nilai  variabel username dan password sesuai dengan  permintaan soal

pada menu yang ke-2 di class Utama nanti. Perlu diketahui pula, bahwa dalam pembuatan variabel pada parameter di method setter, harus sesuai dengan tipe data pada variabel yang dideklarasikan di  kelas. Gambar di bawah ini menunjukkan deklarasi setter.



e. Membuat method getter
Setelah membuat method setter, anda tinggal membuat method getter untuk mengambil nilai dari masing-masing variabel. Hal ini bertujuan untuk mengambil nilai dari variabel pada class Login yang nantinya akan kita kem balikan ke dalam class Utama. Perlu diketahui pula, bahwa dalam pembuatan variabel pada parameter di method getter, harus sesuai dengan tipe data pada variabel yang dideklarasikan di kelas. Gambar di bawah ini menunjukkan deklarasi getter.


class Login
{
 //deklarasi
 private String username, password;
 
 //constructor
 public Login()
 {
  username = "admin";
  password = "12345";
 }
 
 public Login(String username, String password)
 {
  this.username = username;
  this.password = password;
 }
 
 //setter
 public void setUsername(String username)
 {
  this.username = username;
 }
 public void setPassword(String password)
 {
  this.password = password;
 } 
 
 //getter
 public String getUsername()
 {
  return username;
 }
 public String getPassword()
 {
  return password;
 }
}



Langkah 3: class Utama (ketikkan script berikut)
a. Membuat kerangka class Utama


Setelah anda mem buat class Utama, simpan file tersebut dengan nama Utama.java. Didalam class inilah, program anda akan dijalankan. Sebagai catatan, dalam pembuatan class di atas, saya sudah menam bahkan class BufferedReader (line 6) yang berada pada package java.io.* (line 1) yang digunakan untuk menerima inputan user.

b. Membuat instance of class
Setelah anda membuat class Utama, langkah berikutnya yang anda lakukan adalah membuat sebuah objek yang bertipe class Login. Pembuatan variabel dengan berti perkelas itulah yang dinamakan instance of class (untuk penjelasannya, dapat anda lihat pada modul 1). Misalkan, objek yang saya buat adalah userl dan user2, dimana userl menggunakan constructor Login tanpa parameter, sedangkan user2  menggunakan constructor Login dengan parameter .

Coba perhatikan kembali pembuatan instance of class. Pada line 9, objek "userl " yang telah terbentuk akan mereferens ke constructor Login tanpa parameter. Sedangkan pada line 10, kita mendeklarasikan objek "user2" bertipe class Login, dimana nilai yang kita berikan masih belum diketahui. Karena tipe data username dan password bertipe String, maka saya menggunakan tanda petik ganda (" ") untuk memberi nilai awal berupa kosong. Variabel user 2 yang telah dibuat nantin ya akan digunakan pada case 3.

c. Membuat menu dan perulangan menu
Menu digunakan untuk memperm udah user dalam melakukan transaksi, sepeiti halnya buku menu yang disajikan seorang pelayan di sebuah restoran. Dalam pembuatan menu, diperlukan tombol  "next" dan  "back" sehingga user dapat leluasa memposisikan diri pada transaksi yang ingin dia lakukan. Untuk itulah, diperlukan perulangan menu guna mengantisi pasi hal itu. Gambar di bawah  ini menunjukkan pembuatan menu dan perulangan menu.



Line15-23 menunjukkan menu yang kita butuhkan dalam contoh soal di atas. Sedangkan proses  perulangan menu, saya menggunakan while yang berada di luar menu (bagianda yang tidak terbiasa menggunakan "while", anda juga bisa menggunakan  "do...while" maupun  "for" dalam perulangannya). Di dalam "while", saya menggunakan kondisi bemilai "true", dimana program tersebut akan mengulang menu tersebut berulang kali. Untuk keluar dari menu tersebut, akan saya bahas nanti pada langkah poin (h).

d. Membuat inputan yang diisi user
Setelah menu dan perulangan menu selesai kita buat, maka kita membutuhkan inputan user untuk memilih menu tersebut. Berikut adalah contoh script-n ya.



Sekedar tambahan, "System.outprintln();" pada line 29 hanya digunakan untuk memberikan jarak antara proses dengan inputan dari user.

e. Mengecek inputan user
Inputan user yang nantinya akan di isi, akan menentukan pilihan yang dieksekusi  (kayak teroris aja ya ...   ). Untuk itu, dibutuhkan, pengecekan inputan user dengan menu yang dipilih. Di sini, saya menggunakan switch ...case... dikarenakan penggu naannya lebih mudah dalam mengecek sebuah menu.



Sekedar tambahan, dalam setiap case jangan lupa menambahkan break yang bertugas untuk menghentikan proses pengecekan menu apabila salah satu case sudah terpenuhi dan telah dieksekusi. Penggunaan default ditujukan apabila pilihan 1,2,3 atau 4 tidak sesuai dengan inputan user. Jika anda perhatikan baik-baik, "System.exit(0);" pada line 54 bertujuan untuk keluar dari menu dan mengakhiri program.

f.  Mengisi Case 1(Login Admin)
Ketika user memilih inputan menu no.1, maka dilakukan beberapa proses sebagai berikut:

  • Line 36-39: berisi permintaan inputan usemame dan password yang nantinya akan di isi oleh user
  • Line 44-51 : berisi pengecekan apakah user dan password yang diinputkan sesuai dengan isi data user dan password pada class Login. Jika hasilnya bernilai true, maka program akan mencetak tul isan *** Login Sukses ***. Jika hasilnya bemilai false, maka program akan mencetak tul isan *** Login Gagal ***"



g. Mengisi Case 2 (Ubah Password Admin)
Ketika user memilih inputan menu no. 2, maka dilakukan beberapa proses sebagai berikut:

  • Line 60-63: berisi permintaan inputan password lama dan password baru yang nantinya akan diisi oleh user
  • Line 67-75: berisi pengecekan apakah password lama yang diinputkan sesuai dengan isi password yang sudah ada pada class Login. Jika hasilnya bernilai true, maka program  akan  merubah password lama dengan password baru dan kemudian mencetak tu lisan *** Password berhasil dirubah***. Jika hasil nya bernilai false, maka program akan mencetak tulisan  ***  Anda salah memasukkan password lama ***



Full coding
import java.io.*;

class Login
{
 //deklarasi
 private String username, password;
 
 //constructor
 public Login()
 {
  username = "admin";
  password = "12345";
 }
 
 public Login(String username, String password)
 {
  this.username = username;
  this.password = password;
 }
 
 //setter
 public void setUsername(String username)
 {
  this.username = username;
 }
 public void setPassword(String password)
 {
  this.password = password;
 } 
 
 //getter
 public String getUsername()
 {
  return username;
 }
 public String getPassword()
 {
  return password;
 }
}

class Utama
{
 public static void main (String [] args) throws Exception
 {
  BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
  
  //instance of class
  Login user1 = new Login();
  Login user2 = new Login("","");
  
  while(true)
  {
   //menu
   System.out.println("===============");
   System.out.println("MENU LOGIN");
   System.out.println("===============");
   System.out.println("1. Login admin");
   System.out.println("2. Ubah password admin");
   System.out.println("3. Buat user");
   System.out.println("4. Lihat data user");
   System.out.println("5. Keluar");
   System.out.println("===============");
  
   //input
   System.out.print("Masukan pilihan = ");
   int pilih = Integer.parseInt (br.readLine());
   
   //proses + output
   switch(pilih)
   {
    //jika pilih = 1
    case 1:
     //isi pilihan bernilai 1 ketika dijalankan
     System.out.print("Masukan username = ");
     String my_user = br.readLine();
     System.out.print("Masukan password = ");
     String my_password = br.readLine();
     
     System.out.println();
     
     //cek apakah user dan password yang diinputkan sesuai dengan isi data user dan password pada class login
     if(my_user.equals(user1.getUsername())&& my_password.equals(user1.getPassword()))
     {
      System.out.println("*** Login Sukses ***");
     }
     else
     {
      System.out.println("*** Login Galgal***");
     }
     break;
     
    //jika pilih = 2
    case 2:
     //isi pilihan bernilai 2 ketika dijalankan
     System.out.print("Masukan password lama = ");
     String old_password = br.readLine();
     System.out.print("Masukan password baru = ");
     String new_password = br.readLine();
     
     System.out.println();
     
     //cek apakah user dan password yang diinputkan sesuai dengan isi data user dan password pada class login
     if(old_password.equals(user1.getPassword()))
     {
      user1.setPassword(new_password);
      System.out.println("*** Password berhasil dirubah ***");
     }
     else
     {
      System.out.println("*** Anda salah memasukkan password lama ***");
     }    
     break;
     
    //jika pilih = 3
    case 3:
     //isi pilihan bernilai 3 ketika dijalankan
     break;
    //jika pilih = 4
    case 4:
     //isi pilihan bernilai 4 ketika dijalankan
     break;
    //jika nilai pilih yang dimasukan bukan 1,2,3 atau 4, maka program akan keluar secara otomatis
    default:
     System.exit(0);
   }
  }
 }
}

Output:

Tugas


Dari latihan diatas:
1. Mengisi Case 3 (Buat User) Ketika user memilih inputan menu no. 3, maka dilakukan  beberapa proses sebagai berikut:
Permintaan inputan username dan password yang nantinya akan diisi oleh user
Setelah anda membuat username dan password baru, program akan mencetak tulisan *** User telah berhasil dibuat *** (line 91 ).

case 3:
 //isi pilihan bernilai 3 ketika dijalankan
 System.out.print("Masukan username = ");
 String create_user = br.readLine();
 System.out.print("Masukan password = ");
 String create_password = br.readLine();
     
 user2 = new Login(create_user, create_password);
     
 System.out.println();
     
 System.out.println("*** User telah berhasil dibuat ***");
 break;

2.   Mengisi Case 4 (Lihat Data User)
Untuk dapat mengetahui apakah username dan password yang anda buat berhasil masuk ke dalam class Login, anda dapat memilih case 4 untuk melihat data user.

Ketika user memilih inputan menu no. 4, maka dilakukan beberapa proses sebagai berikut:
  • a. mencetak isi data username dan password yang sudah ada pada variabel user 1. Apabila anda melaku kan perubahan password admin dari nilai default-nya adalah 12345 pada case 2, berarti data user yang ditampilkan adalah username admin dengan password yang sudah anda rubah."
  • b.   mencetak  isi data username dan password  yang sudah anda buat pada case 3







Disqus comments