Sunday, November 26, 2017

Kelas dan Objek Dalam Java 15: Pewarisan Hierarkis


Konsep pewarisan hierarkis ditunjukkan seperti gambar di bawah ini:


Ini berarti bahwa KelasB mewarisi KelasA, dan KelasC juga mewarisi KelasAPewarisan hierarkis, secara sederhana, dapat dilakukan oleh kode berikut:

======================================================================
Hal ini diilustrasikan pada kode ini:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package tugasPBO;

class Orang{
 void makan(){System.out.println("sedang makan...");}
}

class Remaja extends Orang{
 void bohong(){System.out.println("suka berbohong...");}
}

class Balita extends Orang{
 void nangis(){System.out.println("menangis...");}
}

public class PewarisanHierarkis {
 public static void main(String args[]){
  Bayi d = new Bayi();
  d.makan();
  d.nangis();
  
  //d.bohong();  Error!
 }
}

KELUARAN PROGRAM:

sedang makan...
menangis...

========================================================================

Dari kode di atas dapat dilihat bahwa kelas Remaja mewarisi kelas Orang. Jadi, objek-objek dari kelas Remaja dapat menggunakan metode maupun data dari kelas yang diwarisinya (kelas Orang). Begitu pula, kelas Balita mewarisi kelas OrangJadi, objek-objek dari kelas Balita dapat menggunakan metode maupun data dari kelas yang diwarisinya (kelas Orang).

Pada kasus di atas, sebuah objek Balita, yaitu d, dapat memanggil metode  makan() dari kelas Orang, dalam hal ini kelas Orang


========================================================================
Untuk kasus yang lebih kompleks, berikut dituliskan kode untuk menerapkan konsep pewarisan hierarkis. Pada kasus ini, kelas KelasVariansi mewarisi KelasArray, dan KelasRerata juga mewarisi KelasArray


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package PBO1;
import java.util.*;

public class KelasArray {
 ArrayList<Double> arr = new ArrayList<Double>();
 int ukuran;
 
 // Ini adalah konstruktor tanpa argumen dari kelas KelasRerata
 public KelasArray() {
  this.ukuran = 10;
  arrayAcak(10,this.ukuran);
 }
 
 // Ini adalah konstruktor satu-argumen dari kelas KelasRerata
 public KelasArray(int ukuran) {
  arrayAcak(10,ukuran);
 }
 
 
 /* Ini adalah metode helper untuk membangkitkan
  * array acak yang dipakai untuk konstruktor
  */
 public void arrayAcak(int pengali, int ukuran) {
  ArrayList<Double> arrayKu = new ArrayList<Double>();

        for (int i=0; i<ukuran; i++)
        {
            Random rand = new Random();
            rand.setSeed(System.currentTimeMillis());
            Double r = rand.nextDouble()*1000;
            arrayKu.add(r);

        }
  
  this.arr = arrayKu;
 }
 
 public void inisialisasiArray() {
  // Metode untuk menginisialisasi array
  Scanner s=new Scanner(System.in);

  System.out.println("Masukkan banyak elemen array: ");
  int n=s.nextInt();
 
  // Menciptakan array dengan ukuran dinamis
  ArrayList<Double> arrayKu = new ArrayList<Double>();

  //Membaca array
  System.out.println("Masukkan elemen-elemen array: ");
  int i=0; double temp = 0.0;

  while(i<n){
   temp =s.nextDouble();
   arrayKu.add(temp);
   i++;
  }
  
  this.arr = arrayKu;
 }
 
 //Metode untuk menampilkan array
 public void tampilkanArray(ArrayList<Double> arrayKu) {
  System.out.println("Elemen-elemen array: ");
  System.out.println(arrayKu);
 }
}


========================================================================


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package PBO1;
import java.util.*;

public class KelasRerata extends KelasArray {
 double rerata;
 
 // Ini adalah konstruktor tanpa argumen dari kelas KelasRerata
 public KelasRerata() {
  this.rerata = 0.0;
 }
 
    //Metode untuk menghitung rerata
 //Menghitung dan menampilkan rerata array
 public void hitungRerata(ArrayList<Double> arrayKu) {
  //Menghitung rerata array dinamis dengan memanfaatkan iterator
  double jum = 0.0; double rerata = 0.0;
  Iterator<Double> itr = arrayKu.iterator();
 
  while(itr.hasNext()){
   jum += itr.next();
  }
  rerata = jum/arrayKu.size();
  this.rerata = rerata;
 }
}
========================================================================


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package PBO1;
import java.util.*;

public class KelasVariansi extends KelasArray {
 double variansi;
 
 // Ini adalah konstruktor tanpa argumen dari kelas KelasVariansi
 public KelasVariansi() {
  this.variansi = 0.0;
 }
  
    // Metode untuk menghitung dan menampilkan variansi array
 public void hitungVariansi(ArrayList<Double> arrayKu, double rerata) {
  // Menghitung dan menampilkan variansi array dengan memanfaatkan iterator
  double variansi = 0.0; double var = 0.0; double temp2 = 0.0;
  Iterator<Double> itr2 = arrayKu.iterator();
 
  while(itr2.hasNext()){
   temp2 = itr2.next();
   var += (temp2-rerata)*(temp2-rerata);
  }
  variansi = var / arrayKu.size();
  this.variansi = variansi;
 }
 
}

========================================================================


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package PBO1;

public class PewarisanHierarkis {
 public static void main(String args[]){
  //Menciptakan sebuah objek superkelas (KelasArray)
  //Ini juga berarti memanggil konstruktor default
  //tanpa-argumen dari superkelas
  KelasArray objekSuper = new KelasArray();
  
  //Objek superkelas dipakai untuk memanggil metode dari superkelas (KelasArray)
  System.out.println("Nilai-nilai data pada objek objekSuper (superkelas): ");
  objekSuper.tampilkanArray(objekSuper.arr);
  
  //Menciptakan sebuah objek superkelas (KelasArray) lain
  //Ini juga berarti memanggil konstruktor
  //satu-argumen dari superkelas
  KelasArray objekSuper2 = new KelasArray(15);
  
  //Objek superkelas objekSuper2 dipakai untuk memanggil metode dari superkelas (KelasArray)
  System.out.println("\n");
  System.out.println("Nilai-nilai data pada objek objekSuper2 (superkelas): ");
  objekSuper2.tampilkanArray(objekSuper2.arr);

  
  //========KONSEP PEWARISAN HIERARKIS SUBKELAS KELASRERATA======
  //Menciptakan objek dari subkelas KelasRerata
  //Ini berarti memanggil konstruktor default dari
  //superkelas KelasArray
  System.out.println("\n");
  System.out.println("====KONSEP PEWARISAN HIERARKIS SUBKELAS KELASRERATA===");
  System.out.println("Nilai-nilai data pada objek1 (subkelas KelasRerata): ");
  KelasRerata objek1 = new KelasRerata();
  System.out.println("Array pada objek1 adalah: "+objek1.arr);
  
  /* Objek subkelas dipakai untuk memanggil metode subkelas KelasRerata
   * untuk menghitung rerata menggunakan pewarisan
   */
  System.out.println("\n");
  objek1.hitungRerata(objek1.arr);
  System.out.println("Rerata pada objek1 adalah: "+objek1.rerata);
  
  //Objek subkelas objek1 dipakai untuk memanggil metode dari
  //superkelas (KelasArray) yaitu metode inisialisasiArray()
  //dan metode tampilkanArray()
  System.out.println("\n");
  System.out.println("Nilai-nilai data pada objek objek1 (subkelas KelasRerata): ");
  objek1.inisialisasiArray();
  objek1.tampilkanArray(objek1.arr);
  System.out.println("=================================================");
  //================================================================
  
  
  //=======KONSEP PEWARISAN HIERARKIS SUBKELAS KELASVARIANSI=====
  //Menciptakan objek dari subkelas KelasVariansi
  //Ini berarti memanggil konstruktor default dari
  //superkelas KelasArray
  System.out.println("\n");
  System.out.println("=====KONSEP PEWARISAN HIERARKIS SUBKELAS KELASVARIANSI======");
  System.out.println("Nilai-nilai data pada objek2 (subkelas KelasVariansi): ");
  KelasVariansi objek2 = new KelasVariansi();
  System.out.println("Array pada objek2 adalah: "+objek2.arr);
  
  /* Objek subkelas dipakai untuk memanggil metode subkelas KelasVariansi
   * untuk menghitung rerata menggunakan pewarisan
   */
  System.out.println("\n");
  objek2.hitungVariansi(objek2.arr,objek1.rerata);
  System.out.println("Variansi pada objek2 adalah: "+objek2.variansi);
  
  //Objek subkelas objek2 dipakai untuk memanggil metode dari
  //superkelas (KelasArray) yaitu metode inisialisasiArray()
  //dan metode tampilkanArray()
  System.out.println("\n");
  System.out.println("Nilai-nilai data pada objek objek2 (subkelas KelasVariansi): ");
  objek2.inisialisasiArray();
  objek2.tampilkanArray(objek2.arr);
  System.out.println("=================================================");
  //============================================================== 
  
 }
}
========================================================================

KELUARAN PROGRAM:

Nilai-nilai data pada objek objekSuper (superkelas):
Elemen-elemen array:
[200.38069285421145, 200.38069285421145, 200.38069285421145, 200.38069285421145, 200.38069285421145, 200.38069285421145, 200.38069285421145, 200.38069285421145, 200.38069285421145, 200.38069285421145]


Nilai-nilai data pada objek objekSuper2 (superkelas):
Elemen-elemen array:
[200.02238066655275, 200.02238066655275, 200.02238066655275, 200.02238066655275, 200.02238066655275, 200.02238066655275, 200.02238066655275, 200.02238066655275, 200.02238066655275, 200.02238066655275, 200.02238066655275, 200.02238066655275, 200.02238066655275, 200.02238066655275, 200.02238066655275]


========KONSEP PEWARISAN HIERARKIS SUBKELAS KELASRERATA==============
Nilai-nilai data pada objek1 (subkelas KelasRerata):
Array pada objek1 adalah: [199.9327839931866, 199.9327839931866, 199.9327839931866, 199.9327839931866, 199.9327839931866, 199.9327839931866, 199.9327839931866, 199.9327839931866, 199.9327839931866, 199.9327839931866]


Rerata pada objek1 adalah: 199.9327839931866


Nilai-nilai data pada objek objek1 (subkelas KelasRerata):
Masukkan banyak elemen array:
5
Masukkan elemen-elemen array:
1.1
2.2
3.3
4.4
5.5
Elemen-elemen array:
[1.1, 2.2, 3.3, 4.4, 5.5]
========================================================================


========KONSEP PEWARISAN HIERARKIS SUBKELAS KELASVARIANSI==============
Nilai-nilai data pada objek2 (subkelas KelasVariansi):
Array pada objek2 adalah: [190.7130499742572, 190.7130499742572, 190.7130499742572, 190.7130499742572, 190.7130499742572, 190.7130499742572, 190.7130499742572, 190.7130499742572, 190.7130499742572, 190.7130499742572]


Variansi pada objek2 adalah: 85.00349537980435


Nilai-nilai data pada objek objek2 (subkelas KelasVariansi):
Masukkan banyak elemen array:
3
Masukkan elemen-elemen array:
6.6
7.7
8.8
Elemen-elemen array:
[6.6, 7.7, 8.8]
=======================================================================

No comments: