Kamis, 07 Oktober 2010

Java Fundamental : Bagian 5

Membaca Input dari User

Java bukan bahasa pemrograman untuk Console (seperti DOS atau Linux), sehingga untuk mengambil input dari user diperlukan sedikit trik yang tidak sesederhana readln pada bahasa pemrograman lain.

Di sini saya akan menjelaskan untuk membuat program yang bisa mengambil input dari konsol teks. Di bagian lain, setelah kita belajar pemrograman berorientasi objek, kita akan menggunakan GUI untuk mendapatkan interaksi dari user.

Membaca String yang diketik oleh user di konsol

Kita membutuhkan kelas yang beberapa kelas, yaitu BufferedReader, InputStreamReader, dan System.in (lawan dari System.out yang kita gunakan untuk menampilkan pesan di layar).

Dua kelas pertama terdapat dalam package yang dinamakan java.io. Untuk itu, kita harus menambah satu baris perintah

import java.io.*

yang berarti mengimport semua kelas dalam paket java.io (tanda * berarti semua).

Kemudian kita harus juga membuat suatu objek dari kelas BufferedReader. Kelas BufferedReader adalah kelas abstrak yang menangani baca tulis ke suatu media.

Kelas ini membutuhkan kelas lain sebagai pekerjanya, yaitu InputStreamReader. Dan InputStreamReader membutuhkan media tempat baca tulis dilakukan, yaitu System.in.

Semua ini bisa dituliskan dalam satu perintah yaitu :

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

Di sini variabel br merupakan objek yang merupakan jelmaan dari kelas BufferedReader.

Untuk memerintahkan Java mengambil input dari user, kita gunakan fungsi readline() yang terdapat pada kelas BufferedReader, dalam hal ini terealisasi pada objek br.

nama = br.readLine();

Karena kita berhubungan langsung dengan sistem IO (input-output) komputer yang harus diasumsikan tidak pasti (misalnya ada masalah pada sistem keyboard, atau komputer sedang bekerja berat sehingga input dari user tidak bisa diambil), kita harus menempatkan fungsi readLine() pada klausa

try {
    ...
} catch (IOException ioe) {
    ...
}

Perintah di dalam try { ... } adalah perintah yang kita ingin jalankan pada situasi yang "mungkin" tidak berhasil.

Parameter pada catch, yaitu IOException ioe adalah jenis kesalahan yang ingin kita tangkap. Dalam hal ini kita ingin menangkap adanya kesalahan IO, yaitu kesalahan yang bertipe IOException.

Perintah di dalam catch { ... } adalah perintah yang akan dilakukan apabila kesalahan ditangkap. Jika tidak ada kesalahan IO yang ditemukan, maka bagian ini akan dilewatkan (tidak dijalankan).

Mari kita lihat program akhir untuk mengambil input dari user.

package ambilinputkonsol;

import java.io.*;

public class AmbilInputKonsol {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        System.out.print("Masukkan nama Anda : ");

        // buat objek baru untuk mengambil input
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // tempat di mana input dari user akan diletakkan
        String nama = null;

        try {
            nama = br.readLine();
        } catch(IOException ioe) {
            System.out.println("Kesalahan IO pada saat menanyakan nama Anda");
            System.exit(1);
        }

        System.out.println("Terima kasih, " + nama);
    }
}

Output :



String Buffer Java

Kali ini membahas String Buffer memungkinkan kita menciptakan objek String yang dapat berubah. String Buffer dapat beroprasi langsung pada buffer yang berisi String. dan String Buffer ini sangat berguna sekali untuk mengetahui panjang String dan nilai String.


import javax.swing.*;

public class contohstringbuffer{

    public static void main(String [] args){

        // 1. inisialisasi String
              StringBuffer kalimat=new StringBuffer();

        // 2. Menambahkan String
              kalimat.append("Selamat ");
              System.out.println("\nHasil Append = "+kalimat);

        // 3. Membaca karakter secara individu dalam string
        //    int length(); dan charAt(int index);
              System.out.println(kalimat + " \njumlah hurufnya = "+ kalimat.length());
              System.out.println("\nkarakter pada index ke 4 = "+ kalimat.charAt(4));

        // 4. Menambahkan  dan Menyisipkan String
              kalimat.append("Kapten Teknologi");
              System.out.println("\nHasil Append ke 2 = "+ kalimat);
              kalimat.insert(8,"\nDatang ");
              System.out.println("\nHasil Insert      = "+ kalimat);

        // 5. Menghapus karakter
              kalimat.deleteCharAt(6);
              System.out.println("\nHasil Delete index ke 6  = "+ kalimat);
              kalimat.delete(0,3);
              System.out.println("\nHasil Delete index ke 0-3= "+ kalimat);

        //. 6 Replace
              kalimat.replace(0,3,"Selamat");
              System.out.println("\nHasil replace = "+ kalimat);


        //  7. Mengekstrak/Mengambil suatu Substring
              StringBuffer ambil=new StringBuffer();
              ambil.append(kalimat.substring(0,7));
              System.out.println("\nHasil substring = "+ambil);

        //  8. Membalikan urutan karakter
              ambil.reverse();
              System.out.println("\nHasil reverse = "+ambil);

    }
}

Output :



Enkapsulasi Java


Enkapsulasi adalah suatu cara untuk menyembunyikan informasi detail dari suatu class. Dua hal yang mendasar dalam enkapsulasi yakni :
  • Information hiding.
  •  Interface to access data.
  • Information hiding
Sebelumnya kita dapat mengakses anggota class baik berupa atribut maupun method secara langsung dengan menggunakan objek yang telah kita buat. Hal ini dikarenakan akses kontrol yang diberikan kepada atribut maupun method yang ada di dalam class tersebut adalah 'public'. Kita dapat menyembunyikan informasi dari suatu class sehingga anggota class tersebut tidak dapat diakses dari luar, caranya adalah hanya dengan memberikan akses kontrol 'private' ketika mendeklarasikan atribut atau method. Proses ini disebut dengan information hiding.
Interface to access data
Jika kita telah melakukan information hiding terhadap suatu atribut pada suatu class, lalu bagaimana cara melakukan perubahan terhadap atribut yang kita sembunyikan tersebut, caranya adalah dengan membuat suatu interface berupa method untuk menginisialisasi atau merubah nilai dari suatu atribut tersebut.

Implementasi UML
Berikut ini kita akan coba untuk lebih memahami penggunaan konsep enkapsulasi dengan mengimplementasikan UML berikut :
UML Vehicle class with no hiding
Vehicle class berisi atribut yang mempunyai modifier public(+), sehingga TestVehicle1 sebagai test program mempunyai akses langsung terhadap atribut pada Vehicle.

Compile Vehicle.java dan TestVehicle.java lalu jalankan TestVehicle.java. Seharusnya akan keluar tampilan sebagai berikut :


public class Vehicle{

public double load, maxLoad;
public Vehicle (double maxLoad){
maxLoad = maxLoad + load;

}
public double getLoad(){
return load;

}
public double getMaxLoad(){
return maxLoad;

 }
}

class TestVehicle{
public static void main(String[] args){

System.out.println("Creating a vehicle with a 10,000kg maximum load.");
Vehicle vehicle = new Vehicle(10000.0);
System.out.println("Add box #1 (500kg)");
vehicle.load = vehicle.load + 500.0;
System.out.println("Add box #2 (250kg)");
vehicle.load = vehicle.load + 250.0;
System.out.println("Add box #3 (5000kg)");
vehicle.load = vehicle.load + 5000.0;
System.out.println("Add box #4 (4000kg)");
vehicle.load = vehicle.load + 4000.0;
System.out.println("Add box #4 (300kg)");
vehicle.load = vehicle.load + 300.0;
System.out.println("Vehicle load is = " +vehicle.getLoad() + "kg");

 }
}


Output :




Karena saya kesulitan memakai Texpad maka saya gunakan Netbeans yang baru saja selesai didownload
sekalian mau coba Netbeans 6.9.1


Analisa program :

Kita lihat bahwa pada output program tersebut kita menginisialisasi batas maximum load 10,000 kg, 
Vehicle vehicle = new Vehicle(10000.0);
akan tetapi dengan memberikan akses kontrol / modifier public pada atribut class Vehicle
public double load, maxLoad;
kita dapat mengakses langsung atribut class yang seharusnya perlu diberi pengecekan agar tidak sampai melebihi maxload
vehicle.load = vehicle.load + 500.0;
maka dapat mengakibatkan masalah(trouble) yakni batas maximum load yang kita buat tidak berpengaruh apapun sehingga terdapat penambahan boxes yang melebihi kapasitas(10050.0kg) dikaernakan tidak ada pengecekan kapasitas maksismum.


Sumber Artikel :

http://www.kaptenteknologi.com/2010/04/string-buffer-java.html
http://java.lyracc.com/artikel/java-untuk-pemula/intermezzo-membaca-input-dari-user
http://littlebro-note.blogspot.com/2008/10/java-enkapsulasi.html

Tidak ada komentar:

Posting Komentar