Kelas, Objek dan Hubungannya Part 1

Tulisan ini ditujukan buat diri sendiri, yang kali2 gw amnesia tentang coding pake bahasa java. Jadi bukan penjelasan detil dan yang konsep banget. Cuma gw di masa lalu yang pengen ngejelasin ke gw di masa depan, kali2 gw butuh referensi buat refresh memori.

Jadi gini…

Kalo bicara tentang kelas dan objek pas belajar bahasa pemrograman java ataupun konsep pemrograman berorientasi objek, pastinya banyak teori yang bisa kita dapatkan. Semuanya…. Paling gak, pasti ada kata-kata yang menyuarakan bahwa kelas adalah representasi benda dari dunia nyata.

Nah, kalo gw c cendrung agak kurang mau tau konsep begituan. Sebagai orang yang lebih ngeliat sisi best practice, gw selalu belajar cara menggunakan bahasa pemrograman, dibandingkan konsep pemrograman yang diusung oleh suatu bahasa pemrograman. Kalo seandainya dibilangin gw bakal kesulitan pas coding yang bener2 (contohnya pas disuru bikin project), yaaa itu pasti! Tapi dengan informasi yang tersebar di dunia maya, pelan2 kalo gw mau nyari tau, ntar jadi tau jugak maksudnya.

Jadi… Sekarang gw mau ngebahas dari sisi praktis-nya ajah. Karena konsep kelas dan objek itu bisa lo dapat di kelas, dan memang itulah gunanya kelas kursus java atau kelas di kuliah java sekalipun.

Kelas… apa itu kelas?! Kelas itu ditulisnya gini:

class NamaKelas{

}

Kelas itu nantinya punya beberapa modifier, yang terkenal ada 3, yaitu public, private dan protected. Modifier ini diletakkan sebelum kata-kata “class”. Jadi ditulisnya:

public class NamaKelas {

}

Dalam class ada yang disebut sebagai atribut. Atribut ini kayak variabel di bahasa pemrograman procedural (pascal dan sejenisnya). Yang namanya variabel, pastinya punya isi masing-masing kan?! Untuk menentukan jenis isi dari setiap variabel, diperlukan deklarasi (penulisan) tipe data untuk setiap atribut tersebut. Variabel itu kayak huruf x di pelajaran matematika. Isinya bisa macam-macam. Simbol sebagai hal yang tidak diketahui ataupun symbol buat sesuatu yang berubah-ubah nilainya. Konsepnya sendiri sebenernya lebih ribet dari itu. Jadi ini gampangnya ajah c….

Balik ke tipe data tadi, ada yang namanya tipe data “int” kalo variabel-nya mau dimasukin nilai angka, tipe double kalo variabelnya mau dimasukin nilai angka yang panjaaaang banget (ratusan ribu, jutaan, miliaran gitu). Atau tipe data “String” kalo mau dimasukin sebuah kata. Yap! Kata atau nilai huruf. Contohnya:

public class NamaKelas {
      int atribut; //1 atribut bernama “atribut” bertipe int
      double x, y, z; //ada 3 variabel bertipe double
      String kata; //1 atribut bernama “kata”
}

Variabel ini bisa juga punya modifier layaknya kelas. Jadi yang di atas itu bisa ditulisin gini:

public class NamaKelas {
      public int atribut; 
      private double x, y, z; 
      protected String kata; 
}

Selain variabel, ada juga yang disebut method. Method ini berfungsi buat naruh logika pemrograman yang bergantung ke kelas tersebut. Kalo di buku-buku text book method tuh semacam behavior gitu. Gw gak bisa jelasin yang lebih jelas dari itu. Contohnya gini:

public class NamaKelas {
      public int atribut; 
      private double x, y, z; 
      protected String kata;

      void hitungNilai(){
             x = y + z;
      }
}

Di atas, ada sebuah method bernama “hitungNilai” yang ternyata bertugas untuk menghitung nilai y+z dan hasil dari perhitungan tersebut dimasukkan ke dalam variabel x. Ada berbagai macam aturan dari method. Coba lihat bagian prosedur sama fungsi di buku algoritma pemrograman dasar. Pasti kerasa mirip2nya.

Method terbagi 2, ada prosedur dan ada juga yang disebut fungsi. Lihat syntax “void” di contoh di atas?! Itu menandakan kalo method-nya bertugas sebagai prosedur. Sedangkan kalo fungsi, harus punya syntax return, dan nantinya void musti diganti. Diganti jadi suatu tipe data, sesuai tipe data yang ada di syntax return. Contohnya:

public class NamaKelas {
      public int atribut; 
      private double x, y, z; 
      protected String kata;

      int hitungNilai(){
             x = y + z;
             return x;
      }
}

Atau

public class NamaKelas {
      public int atribut; 
      private double x, y, z; 
      protected String kata;

      int hitungNilai(){
             return 0;
      }
}

Atau

public class NamaKelas {
      public int atribut; 
      private double x, y, z; 
      protected String kata;

      String hitungNilai(){
             return “Kosong”;
      }
}

Lihat kan, kalo yang dibalikin adalah angka, maka void diganti “int” (bisa juga double) dan kalo setelah return ada suatu kata, maka diu bah void jadi “String”. Jadi intinya tergantung yang di belakang syntax return. Setelah “return” ditulisinnya apa… sesuaikan buat jadi pengganti syntax void di sebuah method. O iya, method juga bisa punya modifier. Jadi bisa ditambahin public, private ataupun protected.

Kelas/Class ini erat hubungannya sama objek/object. Objek itu semacam kelas yand dijalankan. jadi kalo ada kelas buku, kita bisa mendapatkan banyak objek buku. Setiap objek bisa memiliki nilai yang sama ataupun berbeda. Kelas bentukan itu biasa dibentuk di kelas Main.

Kelas Main ini bertugas untuk menjalankan kelas2 yang ada. Sebenernya gak musti c yah ini. Tapi kebiasaan beberapa orang, kelas ini jadi pemanggil atau pembuat objek dari suatu kelas. Bentuk umum kelas Main ini (atau ada juga yang nyebut sebagai kelas Driver), adalah sebagai berikut:

public class Main{
    public static void main(String args){
        //bentuk objek di sini….
    }
}

Objek dibentuk dari sebuah kelas di kelas Main dengan menggunakan syntax “new”. Contohnya,

public class Main{
    public static void main(String args){
        NamaKelas a = new NamaKelas();
        NamaKelas b = new NamaKelas();
    }
}

Dari contoh di atas, terdapat 2 objek (a dan b), yang dibentuk dari kelas bernama “NamaKelas”. Kalo masalah musti gitu yah bikinnya?! Sebenernya enggak… tapi dasarnya yaaa gitu. Kalo udah kenal yang namanya inheritance/pewarisan, cara membuat objek bakal lebih aneh lagi. Lo bakal bertanya2 kalo terlalu saklek ama yang gw tulisin di mari sekarang.

Terus, setiap atribut dan method, diakses via nama objek yang udah dibentuk. Contohnya… ada sebuah kelas:

public class NamaKelas {
      int atribut; //1 atribut bernama “atribut” bertipe int
      double x, y, z; //ada 3 variabel bertipe double
      String kata; //1 atribut bernama “kata”

      void hitungNilai(){
             x = y + z;
      }
}

Maka di Main-nya bisa ditulis gini buat mengakses atribut “x”, “y” dan “z” serta buat mengakses method “hitungNilai”.

public class Main{
    public static void main(String args){
        NamaKelas a = new NamaKelas();
        //mengakses x, y dan z
        System.out.println(a.x);
        System.out.println(a.y);
        System.out.println(a.z);
        a.hitungNilai();
    }
}

Tapi ada kalanya kita gak mau mengakses method atau atribut via objek-nya. Kalo di kasus ini, kita bisa pake syntax static. Jadi seandainya ada kelas gini:

public class SebuahKelas {
      static int x; 

      public static void tampilkan(){
             System.out.println(“Tampilkan”);
      }

}

Maka, di Main, bisa dibuat sebagai berikut:

public class Main{
    public static void main(String args){
        System.out.println(SebuahKelas.x);
        SebuahKelas.tampilkan();
    }
}

Lihat?! Method sama atributnya, diakses pake nama kelas dan gak ada syntax new sama sekali. Tambahannya, baik method ataupun atribut static, sama sekali gak bisa mengakses atribut ataupun method non-static. Contohnya:

public class SebuahKelas {
      static int x; 
      int y;

      public static void hitungNilai(){
             x = x+y; //ini bakal error karena y tidak static,
                             //sedangkan method yang mengaksesnya static
      }
}

Terkait modifier, ada yang namanya private. Ketika sebuah atribut dikasi modifier “private”, terus dikasi fungsi set dan get untuk atribut tersebut, maka prinsip enkapsulasi sudah diterapkan untuk atribut itu. Contohnya:

public class SebuahKelas {
      private int atribut;

      public int getAtribut (){
             return this.atribut;
      }
      public void setAtribut(int atribut){
             this.atribut = atribut;
      }

}

Bentuk umumnya selalu kayak gitu. Get pastinya merupakan sebuah fungsi dengan nama “get” diikuti nama atribut yang dikenai get. Gak musti gini jugak c, tapi ini demi kesepakatan ajah. Kayak kesepakatan kalo nama kelas tuh harus capital buat huruf pertama, diikuti sama huruf kecil. Terus set merupakan prosedur dengan nama “set” dan diikuti nama atribut. Sama jugak, gak musti gini. Ini semua ada filosofisnya c… Cuma gw gak jelasin, coz gw bukan dosen lo. Jawaban bakal beda per-dosen. Gw udah buktiin ini ama dosen PBO di kampus gw (walo pake pembuktian gak langsung)—buat info ajah, kode dosen mata kuliah java gw “COK”, kode dosen mata kuliah konsep objek gw “WTT”.

Secara garis besar, mungkin itu cakupan konsep pemrograman java kalo pake objek2an. Ini belum semuanya, coz 1 hal penting yang gak gw cantumin, yaitu tentang konstruktor. Tapi sengaja c. Bukannya kenapa2. Konstruktor tuh pemabahasannya bisa panjang. Bisa ajah c disingkat, tapi gw gak mau….

Okeh.. gitu ajah… cukup kali yah… Mungkin emang gak terlalu detil. Dan penuh ketidakjelasan, tapi lumayan lhah buat review+refresh dikit.

Oh iyaaa,, buat latihan ada gini nih, gw ingat banget soalnya. Si bapak (yang ngajar java) suka naruto, jadi gw anggap itu menarik dan gw hapalin dah, kata2 ampe solusinya. Walo contohnya c agak2 gak sesuai gitu ama komik naruto yang asli.

Buatlah sebuah kelas “Ninja”, yang memiliki atribut nama, tingkat dan umur dengan method (fungsi) mencari nilai faktorial dari umur si ninja. Selain itu terdapat method (prosedur) untuk menggabungkan umur ninja serta sebuah kata random yang menjadi masukan bagi prosedur tersebut. Method (prosedur) tersebut akan menampilkan hal-hal yang sudah ia gabungkan. Terapkanlah prinsip enkapsulasi dalam pembuatan kelas ini (class diagram tercantum… tapi gak gw cantumin di post ini)

Dari soal di atas, diminta buat dibikin 2 objek di kelas Main. Datanya:

  • Ninja 1
    • Nama: Naruto
    • Tingkat: Hokakge
    • Umur: 12
    • Huruf Random: XyZ
  • Ninja 2
    • Nama: Jiraiya
    • Tingkat: Chunnin
    • Umur: 6
    • Huruf Random: hk6

Hasil akhir menampilkan:
– Data Ninja 1
– Nama: Naruto
– Tingkat: Hokage
– Umur: 12! = 479001600
– Sandi: 12XyZ

– Data Ninja 2
– Nama: Jiraiya
– Tingkat: Chunnin
– Umur: 6! = 720
– Sandi: 6hk6

Solusinyaaa…. postingan selanjutnya yah… gw males naro di mari… :p

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s