MODUL XII,PBO 1

NESTED CLASS (KELAS DI DALAM KELAS)
 

TUJUAN:
Membuat kelas di dalam kelas danpenerapanya dalam aplikasi
TEORI SINGKAT:
Bentuk umum script program adalah sebagai berikut:
class OuterClass{
     …..
     Class NestedCalss{
     ….}
     }
}
PELAKSANAAN PRAKTIKUM:
Listing program 1. StrukturData.java
public classStrukturData{
//Ciptakan array
  private final static int SIZE=15;
  private int[] larikBulat=new int[SIZE];
  public StrukturData(){
       //Isi array dengan nilai bulat urut naik
       for (int i=0; i
             larikBulat[i]=i;
       }
  }
  public void printGenap(){
       //cetak nilai dari indeks genap dari array
       InnerIteratorGenap iterator=this.new InnerIteratorGenap();
       while (iterator.hasNext()){
             System.out.print(iterator.getNext() + ” “);
       }
       System.out.println();
  }
//inner class untukimplementasi pola Iterator
  private class InnerIteratorGenap{
       //Star mulai dari awal array
       private int lanjut=0;
       public boolean hasNext(){
             //cek apakah elemen sekaranga dalah elemen terakhirarray
             return (lanjut<=SIZE-1);
       }
       public int getNext(){
             //ambil nilai dalam indeks genap dari array
             int hasil=larikBulat[lanjut];
             //teruska ke elemen indeks genap selanjutnya
             lanjut +=2;
             return hasil;
       }
  }
  public static void main(String[]args){
       //isi array dengan nilai bulat urut naik
       //dan cetak nilai pada indeks genap
       StrukturData sd=new StrukturData();
       sd.printGenap();
  }
}
Listing di atas adalah  contoh sebuahprogram java yang di dalamnya terdapat kelas juga. Ini mengartikan bahwa javaselain memfasilitasi sub program / sub kelas juga memfasilitasinya dengan yanglebih besar lagi yaitu tidak hanya sub kelas tetapi memasilitasi releaseprogram di dalam program. Karena di dalam kelas ini juga terdapat variabel,konstruktor dan method yang berlainan.  Jika di dalam java ini ada method di dalammethod maka juga ada kelas di dalam kelas. Adapun listing di atas dapatdijelaskan sebagai berikut:
Kelas luas yang ciciptakan adalah class strukturData yang mempunyaivariabel private bertipe static yaitu SIZE dan private non static bertipelarikBulat. Mempunyai satu konstruktor yang digunakan untuk menentukan isivariabel array yang bernama larikBulat[] dengan angka dari 0 s/d 14.Kemudianada satu buah method yang berfungsi sebagai method pencetak dengan namaprintGenap(). Di dalam method ini terdapat satu fungsi pemanggil yangdiinstanisasi dari kelas inner (nested class) bernama InnerIteratorGenap.
Membuat kelas inner tersebut sama seperti halnya pembuatan kelas-kelasbiasa. Di dalam kelas inner tersebut terdapat variabel lanjut, method hasNext() dengan return value boolean, danmethod getNext() dengan return value integer bernama hasil.
Ternyata method-method inilah yang kemudian dipanggil dengan instaniasiobjek yang diciptakan dari kelas inner yaitu objek iterator. Method  hasNext pada inner class dipanggil untukmenentukan suatu syarat while yang menyatakan bahwa apabila fungsi whilebermakna benar maka operasi System.out.print dijalankan. Yang dicetak darimethod ini adalah dari hasil return values method getNext() pula dna tentunyaini harus menggunakan objek iterator yang diisntaniasi oleh kelasInnerIteratorGenap sebagai inner kelas tersebut. Dengan demikian kita dapatmengetahui bahwa method di dalam kelas inner dengan mudahnya dapat kita panggildi dalam kelas luar.
Hasilnya adalah
Menambahkan kelas baru di dalam kelas:
//tambahan kelas static nested class (KELAS DIDALAM KELAS)
     staticclass Size{
       publicint getSize(){
            returnSIZE;
       }
           }
Menambah statemen penggunaan kelas di dalam kelas tersebut:
public static void main(String[]args){
       //isiarray dengan nilai bulat urut naik
       //dancetak nilai pada indeks genap
       StrukturData2sd=new StrukturData2();
       sd.printGenap();
       //tambahanuntuk memanggil kelas di dalam kelas
       StrukturData2.Sizesd2=new StrukturData2.Size();
       System.out.println(sd2.getSize());
           }
Hasilnya adalah:
Menghilangkan modifier static pada kelas variabel SIZE
Dari:
           private final static int SIZE=15;
Menjadi:
           Private final int SIZE=15;
Hasilnya adalah:
E:\Semester 2\Object Oriented Programming1\Modul12-Nested Class\StrukturData2.java:57: non-static variable SIZE cannotbe referenced from a static context
            returnSIZE;
                   ^
1 error
Tool completed with exitcode 1
Membuat kelas InnerIteratorGanjil:
public class StrukturData2{
//Ciptakan array
     privatefinal static int SIZE=15; //Hilangkan staticnya mejadi:
     //privatefinal int SIZE=15; (hasilnya Error)
     privateint[] larikBulat=new int[SIZE];
     publicStrukturData2(){
       //Isiarray dengan nilai bulat urut naik
       for(int i=0; i
            larikBulat[i]=i;
       }
     }
     publicvoid printGenap(){
       //cetaknilai dari indeks genap dari array
       InnerIteratorGenapiterator=this.new InnerIteratorGenap();
       while(iterator.hasNext()){
            System.out.print(iterator.getNext()+ ” “);
       }
       System.out.println();
     }
       publicvoid printGanjil(){
            //cetaknilai dari indeks ganjil dari array
            InnerIteratorGanjiliterator=this.new InnerIteratorGanjil();
            while(iterator.hasNext()){
                  System.out.print(iterator.getNext()+ ” “);
            }
            System.out.println();
       }
//inner class untuk implementasi pola Iterator
     privateclass InnerIteratorGenap{
       //Starmulai dari awal array
       privateint lanjut=0;
       publicboolean hasNext(){
            //cekapakah elemen sekaranga dalah elemen terakhir array
            return(lanjut<=SIZE-1);
       }
       publicint getNext(){
            //ambilnilai dalam indeks genap dari array
            inthasil=larikBulat[lanjut];
            //teruskake elemen indeks genap selanjutnya
            lanjut+=2;
            returnhasil;
       }
     }
//Membuat Kelas InnerIteratorGanjil
     privateclass InnerIteratorGanjil{
       //Starmulai dari awal array
       privateint lanjut=1;
       publicboolean hasNext(){
            //cekapakah elemen sekarang adalah elemen terakhir array
            return(lanjut<=SIZE-1);
       }
       publicint getNext(){
            //ambilnilai dalam indeks ganjil dari array
            int hasil=larikBulat[lanjut];
            //teruskake elemen indeks ganjil selanjutnya
            lanjut+=2;
            returnhasil;
       }
     }
//Membuat Kelas InnerIteratorString
     privateclass InnerIteratorString{
       //Starmulai dari awal array
       privateint lanjut=1;
       publicboolean hasNext(){
            //cekapakah elemen sekarang adalah elemen terakhir array
            return(lanjut<=SIZE-1);
       }
       publicint getNext(){
            //ambilnilai dalam indeks genap dari array
            inthasil=larikBulat[lanjut];
            //teruskake elemen indeks genap selanjutnya
            lanjut+=2;
            returnhasil;
       }
     }
//===================================================
     publicstatic void main(String[]args){
       //isiarray dengan nilai bulat urut naik
       //dancetak nilai pada indeks genap
       StrukturData2sd=new StrukturData2();
       sd.printGenap();
       sd.printGanjil();
       //tambahanuntuk memanggil kelas di dalam kelas
       StrukturData2.Sizesd2=new StrukturData2.Size();
       System.out.println(sd2.getSize());
     }
     //tambahankelas static nested class (KELAS DI DALAM KELAS)
     staticclass Size{
       publicint getSize(){
            returnSIZE;
       }
     }
}
Hasilnya adalah:
TUGAS:
public classStrukturDataTugas{
//Ciptakan array
     private final static int SIZE=15; //Hilangkan staticnya mejadi:
     //private final int SIZE=15; (hasilnya Error)
     private static String NAMA[]={“1. Arief”,”2.Satejo”,”3. Muhammad”,”4. Kinady”,”5.Dika”,”6. Arman”,”7. Ari”,”8.Setyo”,”9. Dodik”,   “10.Jaka”,”11. Ira”,”12. Asad”,”13.Yandi”,”14. Adek”,”15. Dian”};
     private int[] larikBulat=new int[SIZE];
     public StrukturDataTugas(){
        //Isi array dengan nilai bulat urut naik
        for (int i=0; i
              larikBulat[i]=i;
        }
     }
     public void printGenap(){
        //cetak nilai dari indeks genap dari array
        System.out.println(“”);
        System.out.println(“Daftar Bilangan Genap dalam ArrayBilangan”);
        System.out.println(“===========================================”);
        InnerIteratorGenap iterator=this.new InnerIteratorGenap();
        while (iterator.hasNext()){
              System.out.print(iterator.getNext() + ” “);
        }
        System.out.println();
     }
        public void printGanjil(){
              //cetak nilai dari indeks ganjil dari array
        System.out.println(“”);
        System.out.println(“Daftar Bilangan Ganjil dalam ArrayBilangan”);
        System.out.println(“===========================================”);
              InnerIteratorGanjil iterator=this.newInnerIteratorGanjil();
              while (iterator.hasNext()){
                     System.out.print(iterator.getNext() + “”);
              }
              System.out.println();
        }
public void printNama(){
        //cetak nilai dari indeks genap dari array
        InnerIteratorNama iterator=this.new InnerIteratorNama();
        System.out.println(“”);
        System.out.println(“Daftar nama-nama dengan nomorGanjil”);
        System.out.println(“=======================================”);
        while (iterator.hasNext()){
              System.out.println(iterator.getNext() + ” “);
        }
        System.out.println();
     }
//inner class untukimplementasi pola Iterator
     private class InnerIteratorGenap{
        //Star mulai dari awal array
        private int lanjut=0;
        public boolean hasNext(){
              //cek apakah elemen sekaranga dalah elemen terakhirarray
              return (lanjut<=SIZE-1);
        }
        public int getNext(){
              //ambil nilai dalam indeks genap dari array
              int hasil=larikBulat[lanjut];
              //teruska ke elemen indeks genap selanjutnya
              lanjut +=2;
              return hasil;
        }
     }
//Membuat KelasInnerIteratorGanjil
     private class InnerIteratorGanjil{
        //Star mulai dari awal array
        private int lanjut=1;
        public boolean hasNext(){
              //cek apakah elemen sekarang adalah elemen terakhirarray
              return (lanjut<=SIZE-1);
        }
        public int getNext(){
              //ambil nilai dalam indeks ganjil dari array
              int hasil=larikBulat[lanjut];
              //teruska ke elemen indeks ganjil selanjutnya
              lanjut +=2;
              return hasil;
        }
     }
//Membuat KelasInnerIteratorString
     private class InnerIteratorString{
        //Star mulai dari awal array
        private int lanjut=1;
        public boolean hasNext(){
              //cek apakah elemen sekarang adalah elemen terakhirarray
              return (lanjut<=SIZE-1);
        }
        public int getNext(){
              //ambil nilai dalam indeks genap dari array
              int hasil=larikBulat[lanjut];
              //teruska ke elemen indeks genap selanjutnya
              lanjut +=2;
              return hasil;
        }
     }
//inner class untukimplementasi pola Iterator untuk String
     private class InnerIteratorNama{
        //Star mulai dari awal array
        private int lanjut=0;
        public boolean hasNext(){
              //cek apakah elemen sekarang adalah elemen terakhirarray
              return (lanjut<=SIZE-1);
        }
        public String getNext(){
              //ambil nilai dalam indeks genap dari array
              String hasil=NAMA[lanjut];
              //teruska ke elemen indeks genap selanjutnya
              lanjut +=2;
              return hasil;
        }
     }
//===================================================
     public static void main(String[]args){
        //isi array dengan nilai bulat urut naik
        //dan cetak nilai pada indeks genap
        StrukturDataTugas sd=new StrukturDataTugas();
        sd.printGenap();
        sd.printGanjil();
        sd.printNama();
        System.out.println(“”);
        System.out.println(“Banyaknya Data Array : “);
        System.out.println(“=======================================”);
        //tambahan untuk memanggil kelas di dalam kelas
        StrukturData2.Size sd2=new StrukturData2.Size();
        System.out.println(sd2.getSize());
     }
     //tambahan kelas static nested class (KELAS DI DALAM KELAS)
     static class Size{
        public int getSize(){
              return SIZE;
        }
     }
}
KESIMPULAN:
1.      Ketentuan dasar yang berlaku pada variabel, konstruktor danmethod pada program di java berlaku pula pada inner class tersebut, yaitu:
a.      Variabel dan method pada kelas luar dapat diakses oleh kelasinner (nested class)
b.     Variabel dan method non static tidak dapat diakses oleh innerkelas static namun variabel dan method static dapat diakses oleh kelas nonstatic.
2.      Dalam menciptakan objek sama seperti halnya dalam menciptakanobjek pada kelas-kelas biasa.

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.