Sabtu, 18 Mei 2013

Membuat program menggunakan pewarisan lebih dari 2 class

Pertama kita membuat class yang pertama dengan nama "adik".
kemudian tuliskan sintaks berikut pada class adik



public class adik  {
   
    public static void bulan(){System.out.println(" Laporan Penjualan PT YAI");}
    public static void tabel(){System.out.println("======================================================================");
                        System.out.println("| No. |    Nama Barang    |    Jumlah    |    Harga    |    Total    |");
                        System.out.println("======================================================================");}
    void garis(){System.out.println("======================================================================");}

}

Kedua buat clas ang kedua dengan nama "kakak"
kemudian tuliskan sintaks berikut pada class kakak

import java.util.Scanner;
public class kakak extends adik {
public void menghitung(){
    Scanner entri1= new Scanner(System.in);
    Scanner entri2= new Scanner(System.in);
    System.out.println("");
    System.out.print("Masukkan Bulan Penjualan : ");
    int bulan =entri1.nextInt();
    System.out.print("Jumlah data : ");
    int jumlah =entri1.nextInt();
    int jumlah_barang[]=new int[jumlah+1];
    int harga_barang[]=new int [jumlah+1];
    String nama_barang[]=new String[jumlah+1];
    int total[]=new int [jumlah+1];
    int total1=0;
    for (int i=1;i<=(jumlah);i++){
        System.out.print("Nama Barang ke-"+i+":");
        nama_barang[i]=entri2.nextLine();
        System.out.print("Jumlah Barang:");
        jumlah_barang[i]=entri1.nextInt();
        System.out.print("Harga Rp. : ");
        harga_barang[i]=entri1.nextInt();
        System.out.println("");
        total[i]= harga_barang[i]*jumlah_barang[i];
        total1=total1+total[i];
       
    }
    adik.bulan();
    System.out.println("Bulan ke-"+bulan);
    adik.tabel();
    for (int i=1;i<=jumlah;i++){
        System.out.println(" "+i+"\t\t"+nama_barang[i]+"\t\t"+jumlah_barang[i]+"\t\t"+harga_barang[i]+"\t\t"+total[i]);
       
   
    }
    kakak ayah=new kakak();
    ayah.garis();
    System.out.println("Total Barang : "+jumlah);
    System.out.println(" Total Penjualan : "+total1);
   
}

}
ketiga buat class utamanya dengan nama "ibu"
kemudian tuliskan sintaks berikut pada class ibu

import javax.swing.JOptionPane;
public class ibu {
    public static void main (String args[]){
        kakak rusma =new kakak();
        do{
        rusma.menghitung();
        System.out.println("");
        System.out.println("******** T E R I M A   K A S I H********");}
        while (JOptionPane.showConfirmDialog(null,"ulang lagi kah")==JOptionPane.YES_OPTION);   
        }
    }


kemudia run sintak tersebut maka akan muncul output seperti dibawah ini

Tentang OOP java



Enkapsulasi merupakan pernyataan untuk pembungkusan sesuatu (capsulate). Kalo dalam dunia nyata seperti ini : Kalo kita mau bikin rekening di salah satu bank, maka kita akan memberikan data diri dan “uang pangkal”. Lalu tanpa kita tahu apa yang terjadi, kita dikasih buku tabungan yang merupakan bukti kalo rekening kita udah dibikin. Nah gitu kira-kira enkapsulasi. Kita hanya memberi data, apa yang kita mau, dan akhirnya tanpa tahu urusan apa yang terjadi dalam pihak internal, kita menerima apa yang kita mau.
Dalam implementasinya di java, enkpasulasi ditandai dengan memberikan private ke semua variabel yang ada di dalam suatu kelas (bukan kelas Main/Driver pastinya), dan pengaksesan terhadap variabel tersebut digunakan ‘setter’ dan ‘getter’ bagi variabel yang memerlukan (kan gak semua variabel perlu nilai balikan/masukan).
Satu hal yang perlu diingat dalam konsep OOP, setiap satu program yang merepresentasikan suatu sistem/model minimal memiliki 2 kelas, yaitu kelas pemrosesan dan kelas Main/Driver untuk memanggil kelas pemrosesan. Dan berikut aturan lainnya (Cuma sebagai bentuk standar dan bukan keharusan):

  • Nama Kelas ditulis dalam huruf kapital untuk huruf pertama dari nama tersebut, contoh jika ingin menuliskan kelas ‘mobil mewah’ maka nama kelas nantinya ditulis ‘MobilMewah’
  • Variabel dalam konsep OOP disebut atribut yang diakses dengan setter dan getter-nya. (lebih jelas lihat contoh implementasi)
  • Satu kelas terdiri dari banyak prosedur pemrosesan, setter dan getter termasuk dalam prosedurnya. Prosedur dalam konsep OOP disebut metode atau method.
  • Penulisan method diawali huruf kecil, contoh untuk ‘setter atribut nomor plat mobil’ diberikan nama ‘setNoPlatMobil’.
Sekarang contoh implementasi :
Kita akan membuat sebuah prosedur penentuan nilai genap/ganjil atau bilangan prima(tidak terlalu merepresentasikan konsep OO, tapi untuk belajar kayaknya cocok2 aja menurut gw). Berarti kita harus membuat satu kelas penghitung dan satu kelas driver (Main). Implementasi berikut menggunakan Netbeans, ok silahkan diikuti langkah2nya.
  • Pertama, bikin project dengan nama AngkaPrima di Netbean File –> New Project –> Pilih Kategori Java, dan Java Application
  • Kedua, buat sebuah kelas OlahAngka seperti gambar :
(Klik Kanan pada Paket angkaprima, lalu pilih New –> Java Class, Isi nama Kelas dengan nama ‘OlahAngka’ dan tekan Finish dan terbentuklah kelas OlahAngka)
  • Ketiga, sebagai langkah selanjutnya, kita harus membuat method untuk menentukan apakah angka yang diolah adalah bilangan genap/ganjil. Tapi sebelumnya buatlah atribut angka yang akan diolah lengkap dengan setter-getter nya. Cara membuat seperti ini :
  1. Ketik ‘private int angka’ yang berarti kita akan membentuk suatu atribut angka bertipe data integer dengan karakter private (hanya bisa diakses oleh kelas itu saja)
  2. Buatlah setter getter dari atribut ini (kali ini netbeans sangat membantu karena tidak usah ditulis manual cukup lakukan seperti ini : klik kanan di nama atribut tersebut lalu klik )
  3. Ketika muncul pilihannya, pilih set dan get untuk membuat keduanya. Seperti gambar kedua dibawah :

  • Setelah terbentuk method set dan get, berarti kita akan membuat satu method untuk menentukan apakah bilangan itu genap atau ganjil. Logikanya gini, Kalo dibagi 2 gak ada sisanya berarti bilangan tersebut adalah bilangan ganjil, dan sebaliknya untuk genap.
  • Karena ada 2 kondisi, maka kita bikin dengan menggunakan sebuah fungsi (method yang mengembalikan nilai). Fungsi yang kita gunakan bertipe boolean. Artinya jika mengembalikan nilai benar/true, maka berarti nilai genap, sedangkan jika mengembalikan nilai salah berarti bilangan tersebut merupakan bilangan ganjil.
  • Fungsi tersebut kita namakan isGenap yang akan mengembalikan nilai true jika bilangan dapat dibagi 2, dan mengembalikan false jika tidak bisa dibagi 2. Pembagian 2 ini dilakukan dengan menggunakan operator mod. Operator mod akan mengembalikan nilai sisa dari hasil operasi. Jadi contohnya gini :
- 5 mod 2 = 1 (Sisa 5 dibagi 2 itu 1)
- 10 mod 4 = 2
- 10 mod 2 = 0
  • Dengan keterangan diatas, berarti kita dapat membuat fungsi isGenap dengan kode berikut : (mod dalam java dituliskan dengan %)
public boolean isGenap() {
   if (this.angka % 2 == 0) {
      return true;
   } else {
      return false;}
}
  • Setelah itu, untuk menentukan bilangan prima atau tidak kita tambahkan kode seperti berikut :

  • Kode diatas dimaksud untuk menentukan bilangan prima dengan langkah seperti ini :
- Bilangan prima merupakan bilangan yang tidak habis dibagi bilangan lain kecuali oleh dirinya sendiri dan 1.
- Karna itu, untuk setiap bilangan yang dimasukkan, di cek satu persatu dari satu hingga bilangan tersebut. Jika ditemukan hasil pembagian bersisa 0, berarti bilangan itu habis dibagi.
- Bilangan prima dengan definisi diatas, berarti mempunyai jumlah habis dibagi (status_nol) bernilai 2, yaitu untuk pembagian terhadp dirinya sendiri dan angka 1.
- Karena itu setiap status_nol bernilai 2, maka akan dikembalikan nilai true yang berarti bilangan input adalah bilangan prima, dan sebaliknya.
  • Setelah itu, kita tinggal memanggil fungsi2 tersebut di kelas Main dengan kode :
  • Baris pertama berarti membetntuk objek dari kelas OlahAngka, yang nantinya method dari kelas tersebut dipanggil pada pengkondisian.
  • Baris Kedua merupakan kelas Scanner yang meminta input user, silahkan lihat posting-an sebelumnya.
  • Baris kelima merupakan pemanggilan setter untuk memasukkan angka ke dalam atribut bilangan yang ada di kelas OlahAngka. Dan seterusnya
  • Nah, mengapa gw pake getAngka untuk mengambil nilai dari angka yang udah kita input sebelumnya? Hal ini karena sifat dari object oriented programming yang memang hanya memberikan akses terhadap setter dan getter (enkapsulasi). Lalu mengapa tidak menuliskan angka yang ada seperti dibaris kelima? Hal ini dikarenakan bisa jadi ada pengolahan dari angka tersebut yang mengubah nilainya. Jadi kita harus mengambilnya dari kelas tempat diolahnya angka tersebut, dan bukan angka aslinya sebelum dilakukan pengolahan.
Oh, dan hasil running seperti yang tercantum :
Kode Selengkapnya Seperti ini :
//OlahAngka.java

public class OlahAngka {
 private int angka;
 public int getAngka() {
     return angka;
 }
 public void setAngka(int angka) {
     this.angka = angka;
 }
 public boolean isGenap() {
     if (this.angka % 2 == 0) {
         return true;
     } else {
         return false;
     }
 }
     public boolean isPrima() {
       int status_nol = 0;
       for (int i = 1; i <= this.angka; i++) {             if (this.angka % i == 0) {                 status_nol++;             }         }         if (status_nol == 2) {             return true;         }         else return false;     } }




//Main.java
import java.util.Scanner;

/**
 *
 * @author Arby
 */
public class Main {
    public static void main(String[] args) {
        // TODO code application logic here
        OlahAngka oa = new OlahAngka();
        Scanner s = new Scanner(System.in);
        System.out.println("Masukkan angka yang ingin di-cek : ");
        int angka = s.nextInt();
        oa.setAngka(angka);
        if (oa.isGenap()&&oa.isPrima()){
            System.out.println("Angka "+oa.getAngka()+" adalah bilangan genap prima");
        }
        else if (!oa.isGenap()&&oa.isPrima()){
            System.out.println("Angka "+oa.getAngka()+" adalah bilangan ganjil prima");
        }
        else if (oa.isGenap()&&!oa.isPrima()){
            System.out.println("Angka "+oa.getAngka()+" adalah bilangan genap");
        }
        else if (!oa.isGenap()&&!oa.isPrima()){
            System.out.println("Angka "+oa.getAngka()+" adalah bilangan ganjil");
Bahasa prosedural mengatur program dalam mode barisan linier yang bekerja dari atas ke bawah. Dengan kata lain, program adalah kumpulan dari tahapan yang dijalankan setelah yang lain berjalan. Programming tipe ini bekerja dengan baik untuk program kecil yang berisi code relative sedikit, tetapi pada saat program menjadi besar, mereka cenderung susah untuk di-manage dan di-debug. Dalam usaha untuk me-manage program, struktur programming diperkenalkan cara untuk mem-break down code-code tersebut melalui functions dan procedures.
Ini adalah sebuah langkah perbaikan, namun pada saat program dijalankan dalam sebuah fungsi bisnis yang kompleks dan berinteraksi dengan sistem lain, maka kelemahan dari struktur metodologi programming muncul kepermukaan meliputi:
Program menjadi lebih susah untuk dimaintain. Fungsi yang tersedia, susah untuk diubah tanpa harus mempengaruhi fungsi sistem secara keseluruhan.
Programming tidak baik untuk team development. Programmers harus mengetahui setiap aspek bagaimana program itu bekerja dan tidak menyebabkan terisolasi usaha mereka atas aspek yang lain dari sistem.
Butuh usaha yang keras untuk menterjemahkan Business Modelsdalam programming models.
Mungkin dapat bekerja dengan baik pada saat terisolasi tapi tidak pada saat terintegrasi dengan sistem lain.
Istilah-istilah pada OOP antara lain :
  • Kelas (Class)
Kumpulan atas definisi data dan fungsi-fungsi dalam suatu unit untuk suatu tujuan tertentu. Sebagai contoh ‘class of dog‘ adalah suatu unit yang terdiri atas definisi-definisi data dan fungsi-fungsi yang menunjuk pada berbagai macam perilaku/turunan dari anjing. Sebuah class adalah dasar dari modularitas dan struktur dalam pemrograman berorientasi objectSebuah class secara tipikal sebaiknya dapat dikenali oleh seorang non-programmer sekalipun terkait dengan domain permasalahan yang ada, dan kode yang terdapat dalam sebuah class sebaiknya (relatif) bersifat mandiri dan independen (sebagaimana kode tersebut digunakan jika tidak menggunakan OOP). Dengan modularitas, struktur dari sebuah program akan terkait dengan aspek-aspek dalam masalah yang akan diselesaikan melalui program tersebut. Cara seperti ini akan menyederhanakan pemetaan dari masalah ke sebuah program ataupun sebaliknya.
  • Objek (Object)
Membungkus data dan fungsi bersama menjadi suatu unit dalam sebuah program komputer, objekmerupakan dasar dari modularitas dalam sebuah program komputer berorientasi objek.
  • Abtraksi (Abstraction)
Kemampuan sebuah program untuk melewati aspek informasi yang diproses olehnya, yaitu kemampuan untuk memfokus pada inti. Setiap objek dalam sistem melayani sebagai model dari “pelaku” abstrak yang dapat melakukan kerja, laporan dan perubahan keadaannya, dan berkomunikasi dengan objek lainnya dalam sistem, tanpa mengungkapkan bagaimana kelebihan ini diterapkan. Proses, fungsi atau metode dapat juga dibuat abstrak, dan beberapa teknik digunakan untuk mengembangkan sebuah pengabstrakan.
  • Enkapsulasi (Encapsulation)
Memastikan pengguna sebuah objek tidak dapat mengganti keadaan dalam dari sebuah objek dengan cara yang tidak layak, hanya metode dalam objek tersebut yang diberi ijin untuk mengakses keadaannya. Setiap objek mengakses interface yang menyebutkan bagaimana objek lainnya dapat berinteraksi dengannya. Objek lainnya tidak akan mengetahui dan tergantung kepada representasi dalam objek tersebut.
  • Polimorfisme (Polymorphism)
Melalui pengiriman pesan. Tidak bergantung kepada pemanggilan subrutin, bahasa orientasi objek dapat mengirim pesan, metode tertentu yang berhubungan dengan sebuah pengiriman pesan tergantung kepada objek tertentu di mana pesa tersebut dikirim. Contohnya, bila sebuah burung menerima pesan “gerak cepat”, dia akan menggerakan sayapnya dan terbang. Bila seekor singa menerima pesan yang sama, dia akan menggerakkan kakinya dan berlari. Keduanya menjawab sebuah pesan yang sama, namun yang sesuai dengan kemampuan hewan tersebut. Ini disebut polimorfisme karena sebuah variabel tungal dalam program dapat memegang berbagai jenis objek yang berbeda selagi program berjalan, dan teks program yang sama dapat memanggil beberapa metode yang berbeda di saat yang berbeda dalam pemanggilan yang sama. Hal ini berlawanan dengan bahasa fungsional yang mencapai polimorfisme melalui penggunaan fungsi kelas-pertama.
  • Inheritas (inheritance)
Mengatur polimorfisme dan enkapsulasi dengan mengijinkan objek didefinisikan dan diciptakan dengan jenis khusus dari objek yang sudah ada objek-objek ini dapat membagi (dan memperluas) perilaku mereka tanpa haru mengimplementasi ulang perilaku tersebut (bahasa berbasis objek tidak selalu memiliki inheritas.)
Dengan menggunakan OOP maka dalam melakukan pemecahan suatu masalah kita tidak melihat bagaimana cara menyelesaikan suatu masalah tersebut (terstruktur) tetapi objek-objek apa yang dapat melakukan pemecahan masalah tersebut. Sebagai contoh anggap kita memiliki sebuah departemen yang memiliki manager, sekretaris, petugas administrasi data dan lainnya. Misal manager tersebut ingin memperoleh data dari bag administrasi maka manager tersebut tidak harus mengambilnya langsung tetapi dapat menyuruh petugas bag administrasi untuk mengambilnya. Pada kasus tersebut seorang manager tidak harus mengetahui bagaimana cara mengambil data tersebut tetapi manager bisa mendapatkan data tersebut melalui objek petugas administrasi. Jadi untuk menyelesaikan suatu masalah dengan kolaborasi antar objek-objek yang ada karena setiap objek memiliki deskripsi tugasnya sendiri.
Pemrograman Berorientasi Objek (Object Oriented Programming) merupakan teknik membuat suatu program berdasarkan objek. Pengembangan program OOP dapat dilakukan dengan mudah karena dapat mengurangi duplikasi kode dan mengurangi kesalahan program.
Program Java dapat dibedakan menjadi dua jenis :
- Applet, adalah program yang dibuat dengan Java, dapat diletakkan pada web server dan di akses melalui web browser.
- Aplikasi, adalah program yang dibuat dengan Java yang bersifat umum dan dapat dijalankan secara langsung.
Versi Java yang telah dirilis oleh Sun Microsystems atau yang lebih dikenal dengan J2SDK (Java 2 System Development Kit) antara lain:
1. J2ME (Java Micro Edition)
2. J2SE ( Java Standard Edition)
3. J2EE (Java 2 Entrprise Edition)
dimana urutan dari yang tertinggi adalah J2EE, J2SE, J2ME
Selain J2SDK ada pengembangan yang lain tergolong sebagai IDE (Integrated Development Environment), contohnya adalah Semantic Cafe, Borland Jbuilder.
Untuk mendownload software Java Development Kit (JDK)
Pada OOP ada dua istilah yang sering digunakan yaitu class dan objek.
Class berisi kumpulan dari objek-objek, sedangkan objek merupakan sebuah bentuk model yang tergantung dari cara pandang terhadap objek yang dimaksud.
Untuk lebih memudahkan pemahaman tentang class dan objek, sebagai contoh: sebuah class Kereta api mempunyai objek antara lain gerbong, rel, rem, tempat duduk dan yang lainnya. Setiap objek memiliki atribut dan metode. Atribut adalah segala sesuatu yang berhubungan dengan karakteristik dari objek misalnya warna, bentuk atau fasilitas dari Kereta Api tersebut. Sedangkan Metode dari Kereta Api tersebut adalah kecepatan sehingga dapat berjalan dengan cepat di tengah kemacetan. Jadi metode merupakan fungsi atau segala sesuatu yang dapat dilakukan Kereta Api sebagai objek.
contoh : 
public class KrtApi {
int gerbong;
String fasilitas;
}
public class KeretaApi {
public static void main(String[] args)
{
// membuat object
KrtApi kereta=new KrtApi();
// memanggil atribut dan memberi nilai
kereta.gerbong= 4;
kereta.fasilitas= “AC” ;
System.out.println(“Jumlah Gerbong:”+ kereta.gerbong);
System.out.println(“Fasilitas :”+ kereta.fasilitas);
}
}
Karakteristik Pemrograman Berorientasi Objek
1. Abstraction
Yaitu kumpulan objek yang saling berinteraksi.
2. Enkapsulasi
Yaitu menyembunyikan suatu proses dalam sistem untuk menghindari interferensi dan
menyederhanakan penggunaan sistem itu sendiri
3. Inheritance (Pewarisan)
Suatu class dapat mewariskan atribut dan metode kepada class lain.
4. Polymorphism
Suatu objek dapat memiliki berbagai bentuk sebagai objek dari classnya sendiri.
Contoh Program Inheritance (Pewarisan)
public class KeretaEkonomi extends KeretaApi {
public void setTarif(int tarif) {
System.out.println(“Tarif :”+ tarif);
}
}
public class KeretaEkonomiBeraksi {
public static void main(String[] args) {
KeretaEkonomi kereta = new KeretaEkonomi();
// Memanggil method di object
System.out.println(“Tarif Kereta Ekonomi jakarta – Bogor”);
kereta.setTarif(2500);
}
}
Sumber :
1. Abdul Kadir, Dasar Pemrograman Java 2, Penerbit Andi, 2005
2. Didik Dwi Prasetyo, 150 Rahasia Pemrograman Java, Elex Media Komputindo, 2007
3. http://university.romisatriawahono.net/file.php?file=/2/romi-oop-01-oopconcepts-18nov2008.pdf