Sabtu, 03 Desember 2011

Piranti I/O [Input/Output] dan Komputer

PIRANTI INPUT/OUTPUT DAN KOMPUTER

Input / Output

Pengertian :

          Input/Output (I/O) adalah bagian dari sistem mikroprosesor yang digunakan oleh mikroprosesor itu untuk berhubungan dengan dunia luar. Unit input adalah unit luar yang digunakan untuk memasukkan data dari luar ke dalam mikroprosesor ini, contohnya data yang berasal dari keyboard atau mouse. Sementara unit output biasanya digunakan untuk menampilkan data, atau dengan kata lain untuk menangkap data yang dikirimkan oleh mikroprosesor, contohnya data yang akan ditampilkan pada layar monitor atau printer.

Beberapa contoh input :
ALAT INPUT LANGSUNG:
-          Keyboard
-          Pointing device contoh mouse, ligh pen, digitizer graphic tablet
-          Scanner, contoh micr, magnetic strip, optical data reader(ocr reader, ocr tag reader, bar code wand, omr reader).
-          Sensor, contoh camera
-          Voice recognizer atau speech recognizer
ALAT INPUT TAK LANGSUNG:
-          Key to card
-          Key to tape
-          Key to disk

Beberapa contoh output
:

HARD COPY DEVICE.
-          Berupa alat yang digunakan untuk mencetak tulisan serta image pada media kertas seperti kertas, plastic atau film.
-          Contoh: printer, plotter, computer output to microfilm (com)
SOFT COPY DEVICE.
-          Berupa alat yang dignakan untuk menampilkan tulisan serta image pada media lunak yang berupa signal elektronik.
-          Contoh: video display (CRT), flat panel display (LCD), seaker
DRIVE DEVICE.
-           Berupa alat yang digunakan untuk merekam symbol dalam bentuk yang hanya dapat dibaca oleh mesin dan berfungsi sebagai alat input maupun output.
-          Contoh : disk drive, tape drive, optical drive, CD-ROM.

Pengaksesan I/O terdiri dari 2 cara :

  1. MEMORY MAPPED I/O
Piranti I/O dihubungkan sebagai lokasi memori virtual dimana port I/O tergantung memori utama.
Karakteristik:
-          Port I/O dihubungkan ke bus alamat.
-          Piranti input sebagai bagian memori yang memberikan data ke bus data. Piranti output sebagai bagian memori yang memiliki data yang tersimpan di dalamnya.
-          Port I/O menempati lokasi tertentu pada ruang alamat
dan diakses seolah-olah adalah lokasi memori.
  1. I/O MAPPED I/O (I/O ISOLATED)
Piranti I/O dihubungkan sebagai lokasi terpisah dengan lokasi memori, dimana port I/O tidak tergantung pada memori utama.
Karakteristik:
-          Port I/O tidak tergantung memori utama.
-          Transfer informasi dilakukan di bawah kendali sinyal kontrol yang menggunakan instruksi INPUT dan OUTPUT
-          Operasi I/O tergantung sinyal kendali dari CPU.
-          lnstruksi I/O mengaktifkan baris kendali read/write pada port I/O, sedangkan instruksi memori
akan mengaktifkan baris kendali read/write pada memori.
-          Ruang memori dan ruang alamat I/O menyatu, sehingga dapat memiliki alamat yang sama.
Kelebihan dan kekurangan:
-          I/O mapped I/O Iebih cepat dan efisien, karena lokasi I/O terpisah dengan lokasi memori.
-          I/O mapped I/O mempunyai keterbatasan jumlah instruksi yang dapat digunakan untuk operasi I/O.
Operasi I/O terbagi menjadi 3 metode :
  1.  I/O TERPROGRAM
Metode di mana CPU mengendalikan operasi I/O secara
keseluruhan dengan menjalankan serangkaian instruksi
I/O dengan sebuah program.
Karakteristik:
-          Program tersebut digunakan untuk memulai, mengarahkan dan menghentikan operasi-operasi I/O.
-          Membutuhkan sejumlah perangkat keras (register)
yaitu:
  • Register status, berisi status piranti I/O dan data yang akan dikirimkan.
  • Register buffer, menyimpan data sementara sampai CPU siap menerimanya
  • Pointer buffer, menunjuk ke lokasi memori di mana sebuah karakter harus ditulis atau dan mana karakter tersebut harus dibaca.
  • Counter data, tempat penyimpanan jumlah karakter dan akan berkurang nilainya jika karakter ditransfer.
-          Membutuhan waktu proses yang lama dan tidak efesien dalarn pemanfaatan CPU.
  1.  I/O INTERUPSI
Metode di mana CPU akan bereaksi ketika suatu piranti mengeluarkan permintaan untuk pelayanan.
Karakteristik:
-          Lebih efisien dalam pemanfaatan CPU, karena tidak harus menguji status dari piranti.
-          Interupsi dapat berasal dari piranti I/O, interupsi perangkat keras misalnya : timer, memori, power supply, dan Interupsi perangkat lunak misalnya :
  • overflow, opcode/data yang ilegal, pembagian dengan nol.
Ada 2 jenis interupsi:
  1.  lnterupsi maskable
Interupsi yang dapat didisable (dimatikan) untuk sementara dengan sebuah instruksi disable interupsi khusus.
2.  Interupsi nonmaskable
Interupsi yang tidak dapat didisable dengan instruksi perangkat lunak.
Metode Interupsi:
- Polling/polled interupt
Berdasarkan urutan prioritas yang telah ditentukan sebelum piranti memerlukan interupsi.
Misal: piranti A dan B mempunyai urutan prioritas A lebih Iebih dulu dari B, maka jika A dan B secara bersamaan memerlukan pelayanan interupsi, maka piranti A akan didahulukan.
- Vector Interupt
Peralatan yang berinterupsi diidentifikasikan secara Iangsung dan dihubungkan routine pelayanan vector interupt.
INTR  = Sinyal yang dikeluarkan oleh peralatan.
INTA = Sinyal kendali yang digunakan CPU untuk menyiapkan pelayanan interrupt. Cara yang biasa digunakan dengan metode daisy chain dan encoder prioritas.
3. Direct Memory Access (DMA)
Metode transfer data secara langsung antara memori dengan piranti tanpa pengawasan dan pengendalian CPU.
• Skema transfer blok DMA dual port CPU dan DMA controller mengakses memori utama melalui MAR dan MBR dengan menggunakan sebuah memori utama dual port (2 port).
Port I —-> melayani CPU
Port II —-> melayani DMA controller
• Skema transfer blok DMA cycle stealing (pencurian siklus)
Hanya memerlukan sebuah memori port tunggal dimana CPU dan piranti I/O beradu cepat pada basis asinkron, prioritas utama akan diberikan pada piranti I/O.
Interfacing
Adalah peralatan yang digunakan untuk menghubungkan suatu piranti dengan CPU melalui bus.

Keterangan:
• Register kendali (CR) digunakan untuk mencatat berbagai perintah dan informasi lainnya dalam peripheral.
• Register status (SR) digunakan untuk menyimpan status piranti dan memberitahukan pesan-pesan kesalahan
• Register data input (IDR) dan register data output (ODR) masing-masing berfungsi sebagai bufer data untuk operasi input dan output.
Urutan operasi interface:
- Unit logika handshaking memasok unit kendali dengan empat sinyal.
- Dua sinyal, register kendali penulisan (WCR atau write control register) dan register status pembacaan (RSR atau read status register), masing-masing berhubungan dengan CR dan SR.
- Sedangkan dua sinyal lainnya adalah register pembacaan data input (RIDR atau read input data register) dan register penulisan data output (WODR atau write output data register ), masing-masing mengendalikan IDP dan ODR.
Transfer data
Format transfer:
- Paralel : semua bit pada karakter (word dengan panjang tertentu) dikirim secara bersamaan dalam batas waktu yang diberikan.
- Serial : Data dikirim secara berurutan dalam satu saluran.
Transfer data secara paralel lebih cepat daripada secara serial karena saluran transmisinya banyak, kelemahannya kalau terlalu panjang akan terjadi interferensi antar saluran.
Mode transfer data:
1. Synchronous mode
Baris kendali digunakan untuk mengsinkronkan waktu pada semua kejadian yang terjadi selama periode waktu tertentu.
Kelemahan:
• Tiap piranti I/O berbeda-beda kecepatan operasinya, sehingga harus diturunkan pada kecepatan yang paling rendah.

Gambar 2. Sinyal Pengaturan waktu mode sinkron
2. Asynchronous mode
Menggunakan teknik jabat tangan (hand shaking) untuk menyakinkan transfer data antara pengirim dan penerima tidak ada kesalahan (data valid)

Gambar 3. Sinyal Pengaturan waktu mode asinkron
Kelemahan :
- memerlukan lebih banyak kendali
- kecepatan transfer lebih rendah dari yang sebenarnya.
Kelebihan :
- memungkinkan penggunaan piranti I/O yang memiliki berbagai varasi kecepatan dalama system yang sama.
Sistem Prosesor I/O
  1. Saluran I/O:
Merupakan sebuah prosesor khusus dengan kemampuan terbatas yang disusun untuk interface beberapa piranti I/O ke memori.
- Saluran I/O dapat melakukan pendeteksian dan pembetulan kesaIahan dan beroperasi dalam basis cycle stealing.
- Saluran I/O berkomunikasi dengan CPU sebagai suatu fasiIitas DMA dan berkomunikasi dengan piranti I/O seolah-olah sebuah CPU.
3 pelayanan saluran:
- Saluran Multiplexer : Digunakan untuk menghubungkan piranti yang berkecepatan rendah dan sedang serta serta mengoperasikannya secara bersamaan dengan multiplexing.
- Saluran Selektor : Digunakan untuk menghubungkan piranti I/O yang berkecepatan tinggi tanpa multiplexing.
Contoh: pita magnetis, disk
-Saluran Multiplexer Blok Merupakan kombinasi dari dua pelayanan diatas.
  1. Prosesor I/O (IOP)
Merupakan komputer umum yang berkomunikasi dengan memori utama melalui fasilitas DMA system bus dan dengan piranti I/O atas satu atau lebih bus I/O.
Ada 2 mode yaitu :
-           Single Shared bus
Setiap IOP mengendalikan sejumlah piranti I/O tertentu yang tetap.

Gambar 4. Model Single Shared bus
-           Switching matriks bus
Setiap IOP mengendalikan satu piranti I/O
Gambar 5. Model Switching matriks bus
Konfigurasi Multiprosesor:
Di dalam satu komputer seakan-akan terdapat beberapa mikroprosesor, meskipun sebenarnya mikroprosesor utamanya hanya satu, sedangkan yang Iainnya berupa prosesor I/O (lOP). Hubungan yang paling sederhana menggunakan common bus.
Gambar 6. Model common bus pada multiprosesor
• Bus umum bersifat membagi waktu (time shared) oleh semua prosesor dan hanya satu prosesor yang dapat mengakses memori pada waktu tertentu.Tetapi dapat juga menggunakan bus umum ke dalam organisasi multiprosesor dual bus.
• Setiap komputer dihubungkan suatu pengendali sistem ke bus umum
• Komunikasi interkomputer ini dilakukan pada sistem bus melalui memori umum.

Gambar 7. Model system bus pada multiprosesor
Kernel I/O Subsystem:
  1. Scheduling :
-          Permohonan I/O dilakukan berdasarkan antrian perangkat
-          Beberapa sistem operasi berusaha untuk seadil mungkin
  1. Buffering : menyimpan data di memori selama proses transfer antar perangkat
-          Solusi perbedaan kecepatan dari perangkat yang ada
-          Solusi perbedaan ukuran transfer perangkat
Caching
  1. Cache : area memori yang cepat, yang berisikan kopian-kopian data.
  2. Beda BUFFER dan CACHE :
-          Buffer dapat menyimpan satu-satunya copy dari sebuah item data yang ada.
-          Cache hanya menyimpan sebuah salinan dari data di tempat lain pada storage sehingga lebih cepat diakses.
  1. Peningkatan performa I/O, terutama untuk:
-          berkas yang digunakan secara bersama oleh beberapa aplikasi,
-          berkas yang sedang di baca/tulis secara berulang-ulang.
Spooling
  1. Spool : buffer yang menyimpan output device
-          Tidak dapat menerima interleaved data stream.
  1. 1 device memenuhi 1 permintaan, tapi aplikasi bisa minta bersamaan.
  2. Sistem operasi meng-intercept semua output ke device.
Masing-masing output aplikasi di-spooled ke berkas disk yang berbeda.
  1. Setiap Sistem Operasi menyediakan control interface yang :
-          Membuat users dan administrator sistem menampilkan antrian,
-          Menyingkirkan pekerjaan yang tidak diinginkan.
-          dll.
Error Handling
  1. Sistem Operasi dengan pelindung memori dapat bertahan dari berbagai jenis error dari perangkat keras dan aplikasi.
  2. Sistem Operasi sulit memperbaiki kesalahan permanen bila
terjadi pada komponen penting,.
  1. Umumnya akan me-return sebuah error number atau kode
ketika permintaan I/O gagal.
  1. Log system error menyimpan laporan masalah yang ada.
Struktur Data Kernel
  1. Kernel menyimpan informasi penggunaan komponen I/O, termasuk tabel open-file, koneksinetworking, informasi karakter device.
  2. Struktur data yang rumit dapat digunakan untuk memeriksa buffer, alokasi memori, dan menentukan batasan sektor/blok.
  3. 3.      Beberapa sistem operasi menggunakan tehnik object oriented untuk mengkapsulasikan perbedaan-perbedaan semantik yang ada.
Transformasi I/O Menjadi Operasi H/W
Proses:
  1. Blocking read system call diberikan pada pendeskripsi data
dari data yang sudah terbuka sebelumnya.
  1. Kode di kernel memeriksa parameter. Dalam proses input, jika data sudah ada di buffer, data dikembalikan ke proses dan permintaan I/O selesai
Contoh:
  1. membaca data dari disk untuk di proses.
  2. Menentukan device yang mengandung data,
  3. 3.      Menerjemahkan nama ke perwakilan device
  4. 4.      Secara fisik memindahkan data dari disk ke buffer
  5. Mempersiapkan data untuk proses permintaan I/O
  6. Mengembalikan kontrol ke proses
I/O Stream (1)
I/O stream adalah suatu mekanisme pengiriman data secara
bertahap dan terus menerus melalui suatu aliran data (dua arah). Biasa digunakan dalam network protocol.Asynchronous.
-          Menggunakan message passing dalam men-transfer data.
-          Untuk memasukkan ke dalam stream digunakan ioctl system call
-          Untuk menuliskan data ke device digunakan write / putmsg system call
-          Untuk membaca data dari device digunakan read / getmsg system call

Kinerja I/O
  1. Pembuat CPU melaksanakan kode device-driver
  2. Memberitahukan ke-tidak efisien-an pada mekanisme penanganan interrupt dalam kernel
  3. Me-load memory bus sewaktu menyalin data yang dilakukan di controller dan physical memory
Meningkatkan Kinerja I/O
  1. Memperkecil jumlah context switch
  2. Memperkecil jumlah penyalinan data yang dilakukan sewaktu pengoperan data antara device dan aplikasi
  3. Memperkecil jumlah interrupt dengan menggunakan transfer secara besar-besaran, smart controllersdan polling (jika busywaiting bisa diminimalisir)
  4. Menambah konkurensi dengan menggunakan DMA controllers atau channels yang telah diketahui untuk meng-offload penyalin sederhana dari CPU
  5. Memindahkan proses-proses primitif ke perangkat keras, untuk membuat operasinya dalam device controllers konkuren dengan CPU dan operasi Bus
  6. Menyeimbangkan CPU, memory subsystem, bus, dan I/O performance, karena kelebihan di salah satu area akan membuat keterlambatan pada yang lain
Baca selengkapnya fbachtiar TI_A: 2011

Rabu, 23 Maret 2011

Menghitung Luas Segitiga

Mau tahu contoh caranya membuat program luas segitiga,
ini dia contoh coodingnya..

inputannya..,,



and, inilah hasil outputnya..,,



 selamat mencoba dan semoga berhasil..,,
Baca selengkapnya fbachtiar TI_A: 2011

Rabu, 16 Maret 2011

Program Java Menghitung Luas Lingkaran

Package lingkaran;
import java.util.Scanner;
public class luaslingkaran
{
public static void main (String args [] )
{
Scanner masuk=new Scanner (System.in);
double phi =3.14;
int r;
double luas;
System.out.println(“Nama : fuad bachtiar”);
System.out.println(“input jari-jari lingkaran:”);
r=masuk.nextInt();
luas=phi * r * r;
System.out.println(“luas lingkaran: “ +luas);
}
}
kita dapat jalankan dari menu run->run file ( tombol Shift+F6)
Program yang telah dijalankan

Kesimpulan
Apa yang kita lakukan pada latihan ini, sama persis dengan latihan kita sebelumnya
, perbedaannya hanya pada implementasi rumus matematik saja. Sehingga kita bisa simpulkan untuk inti dari pelajaran ini adalah :

1. Bagaimana membuat variabel di java
2. Bagaimana melakukan perhitungan di java


Beberapa hal yang juga perlu diperhatikan :
1. Bagaimana cara menulis komentar dengan menggunakan tanda //
2. Bagaimana menulis ke layar dengan menggunakan System.out.println();



Yah!, memang belum banyak yang kita dapat, tapi ingat dengan semangat untuk memulai hal yang kecil maka yang besar akan dapat dicapai. Happy Programming!


double pi = 3.14;
int jari = 10; //
double luaslingkaran = pi*(jari*jari);

//print out ke layar
System.out.println("Luas lingkaran : " + luas lingkaran);
Pengertian Class dan Object
Pengertian Class dan Object
Didalam Java kita mengenal yang namanya Object Oriented Programming (OOP). Java adalah bahasa yang murni berorientasi object sehingga kita tidak bisa mendefinisikan object diluar class atau memakai class itu secara langsung.

Mungkin Anda pernah mendengar kata class sebelumnya dalam bahasa pemrograman.Class diumpamakan seperti cetakan yang berguna untuk mencetak suatu object. Contoh dari sebuah cetakan/class tersebut misalnya cetakan dari sebuah mobil sedan. Mobil sedan tentunya mempunyai konsep. Konsep inilah yang akan dipakai untuk membentuk/mencetak hingga menjadi mobil sedan. Oleh karena itu konsep bisa berarti class atau cetakan.

Contoh cetakan/class/konsep dari mobil sedan adalah sebagai berikut :
Mempunyai mesin
Mempunyai roda sebanyak 4 yaitu 2 didepan dan 2 dibelakang
Mempunyai setir
Mempunyai body atau kerangka dengan panjang, lebar dan tinggi
Mempunyai warna
Mempunyai perseneling
Mempunyai knalpot

Sampai akhirnya didalam pabrik, cetakan/class/konsep tersebut dapat digunakan untuk membuat banyak object baru tentunya dengan berbeda nama/merk.

Class juga bisa diilustrasikan atau diumpamakan dengan makhluk hidup. Contohnya adalah hewan mamalia yaitu kucing. Didalam ilmu biologi, kucing tergolong dalam class hewan pemakan daging atau karnivora dan tentunya mempunyai bentuk atau konsep. Tuhan Yang Maha Kuasa sudah sudah menentukan bentuk daripada class kucing tersebut.

Class Dog mempunyai konsep sebagai berikut :
Mempunyai kaki sebanyak 4 yaitu 2 didepan dan 2 dibelakang
Mempunyai suara yaitu“gug...gug...”
Mempunyai golongan/family yaitu hewan bertulang belakang atau vertebrata dan termasuk golongan mamalia pemakan daging atau karnivora

Nah didalam Java, class mempunyai makna yang sama dengan ilustrasi diatas. Didalam Java kita tidak bisa sembarangan membuat, menciptakan atau mewujudkan suatu object tanpa didasarkan pada konsep/cetakan/class. Oleh karena itu Java adalah bahasa pemrograman yang murni berorientasi object atau dengan kata lain semua pekerjaan yang dikerjakan menggunakan bahasa Java harus dilakukan didalam class.

JAVA CLASS DAN OBJECT

4.1 Mendefinisikan Class
Sebelum menulis class, pertama pertimbangkan dimana akan menggunakan class
dan bagaimana class tersebut akan digunakan. Pertimbangkan pula nama yang tepat
dan tuliskan seluruh informasi atau properti yang ingin diisikan pada class. Jangan
sampai terlupa untuk menuliskan secara urut method yang akan digunakan dalam
class.
Dalam pendefinisian class, dituliskan :
class {
*
*
*
}
dimana :
adalah sebuah access modifier, yang dapat dikombinasikan dengan tipe
modifier lain.
Pada bagian ini, kita akan membuat sebuah class yang berisi record dari siswa. Jika
kita telah mengidentifikasikan tujuan dari pembuatan kelas, maka dapat dilakukan
pemberian nama yang sesuai. Nama yang tepat pada class ini adalah StudentRecord.
Untuk mendefinisikan class, kita tuliskan :
public class StudentRecord
{
//area penulisan kode selanjutnya
}
dimana,
Public - Class ini dapat diakses dari luar package
Class - Keyword yang digunakan di pembuatan class Java
StudentRecord - Identifier yang menjelaskan class

4.2 Deklarasi Atribut
Dalam pendeklarasian atribut, kita tuliskan :
[= ];

Langkah selanjutnya adalah mengurutkan atribut yang akan diisikan pada class.
Untuk setiap informasi, urutkan juga tipe data yang yang tepat untuk digunakan.
Contohnya, tidak mungkin menginginkan untuk menggunakan tipe data integer
untuk nama siswa, atau tipe data string pada nilai siswa.
Berikut ini adalah contoh informasi yang akan diisikan pada class StudentRecord :
name - String
address - String
age -Int
math grade - double
english grade - double
science grade - double
average grade – double

4.3 Instance Variable
Jika kita telah menuliskan seluruh atribut yang akan diisikan pada class, selanjutnya
kita akan menuliskannya pada kode. Jika kita menginginkan bahwa atribut – atribut
tersebut adalah unik untuk setiap object (dalam hal ini untuk setiap siswa), maka kita
harus mendeklarasikannya sebagai instance variable :
Sebagai contoh :
public class StudentRecord
{
private String name;
private String address;
private int age;
private double mathGrade;
private double englishGrade;
private double scienceGrade;
private double average;
//area penulisan kode selanjutnya
}
dimana,
private disini menjelaskan bahwa variabel tersebut hanya dapat diakses oleh class itu
sendiri. Object lain tidak dapat menggunakan variabel tersebut secara langsung.

4.4 Class Variable atau Static Variables
Disamping instance variable, kita juga dapat mendeklarasikan class variable atau
variabel yang dimiliki class sepenuhnya. Nilai pada variabel ini sama pada semua
object di class yang sama. Anggaplah kita menginginkan jumlah dari siswa yang
dimiliki dari seluruh kelas, kita dapat mendeklarasiakan satu static variable yang

akan menampung nilai tersebut. Kita beri nama variabel tersebut dengan nama
studentCount.
Berikut penulisan static variable :
public class StudentRecord
{
//area deklarasi instance variables
private static int studentCount;
//area penulisan kode selanjutnya
}
Kita gunakan keyword : ’static’ untuk mendeklarasikan bahwa variabel tersebut
adalah static.
Maka keseluruhan kode yang dibuat terlihat sebagai berikut :
public class StudentRecord
{
private String name;
private String address;
private int age;
private double mathGrade;
private double englishGrade;
private double scienceGrade;
private double average;
private static int studentCount;
//area penulisan kode selanjutnya
}

4.5 Deklarasi Methods
Sebelum kita membahas method apa yang akan dipakai pada class, mari kita
perhatikan penulisan method secara umum.
Dalam pendeklarasian method, kita tuliskan :
(*) {
*
}
dimana,
dapat menggunakan beberapa modifier yang berbeda

dapat berupa seluruh tipe data, termasuk void
identifier atas class
::= [,]

4.6 Accessor Methods
Untuk mengimplementasikan enkapsulasi, kita tidak menginginkan sembarang
object dapat mengakses data kapan saja. Untuk itu, kita deklarasikan atribut dari
class sebagai private. Namun, ada kalanya dimana kita menginginkan object lain
untuk dapat mengakses data private. Dalam hal ini kita gunakan accessor methods.
Accessor Methods digunakan untuk membaca nilai variabel pada class, baik berupa
instance maupun static. Sebuah accessor method umumnya dimulai dengan
penulisan get. Method ini juga mempunyai sebuah return
value.
Sebagai contoh, kita ingin menggunakan accessor method untuk dapat membaca
nama, alamat, nilai bahasa Inggris, Matematika, dan ilmu pasti dari siswa.
Mari kita perhatikan salah satu contoh implementasi accessor method.
public class StudentRecord
{
private String name;
::
public String getName(){
return name;
}
}
dimana,
public - Menjelaskan bahwa method tersebut dapat diakses object luar kelas
String - Tipe data return value dari method tersebut
getName - Nama dari method
() - Menjelaskan bahwa method tidak memiliki parameter apapun
Pernyataan berikut, return name; dalam program kita menandakan akan ada
pengembalian nilai dari instance variable name pada pemanggilan method.
Perhatikan bahwa return type dari method harus sama dengan tipe data terhadap data
pada pernyataan return. Akana didapatkan pesan kesalahan sebagai berikut bila tipe
data yang digunakan tidak sama :

StudentRecord.java:14: incompatible types
found : int
required: java.lang.String
return age;
^
1 error
Contoh lain dari penggunaan accessor method adalah getAverage,
public class StudentRecord
{
private String name;
::
public double getAverage(){
double result = 0;
result = ( mathGrade+englishGrade+scienceGrade )/3;
return result;
}
}
Method getAverage() menghitung rata – rata dari 3 nilai siswa dan menghasilkan
nilai return value dengan nama result.

4.7 Mutator Methods
Bagaimana jika kita menghendaki object lain untuk mengubah data? Yang dapat kita
lakukan adalah membuat method yang dapat memberi atau mengubah nilai variable
dalam class, baik itu berupa instance maupun static. Method semacam ini disebut
dengan mutator methods. Sebuah mutator method umumnya tertulis set
.
Mari kita perhatikan salah satu dari implementasi mutator method :
public class StudentRecord
{
private String name;
::
public void setName( String temp ){
name = temp;
}
}
dimana,
public - Menjelaskan bahwa method ini dapat dipanggil object luar kelas

void - Method ini tidak menghasilkan return value
setName - Nama dari method
(String temp) - Parameter yang akan digunakan pada method
Pernyataan berikut :
name = temp; mengidentifikasi nilai dari temp sama dengan name dan
mengubah data pada instance variable name.
Perlu diingat bahwa mutator methods tidak menghasilkan return value. Namun berisi
beberapa argumen dari program yang akan digunakan oleh method.

4.8 Multiple Return Statements
Sebuah method dapat mempunyai banyak return values selama tidak pada blok
program yang sama. Dapat juga menggunakan konstanta disamping variabel sebagai
return value.
Sebagai contoh, perhatikan method berikut ini :
public String getNumberInWords( int num ){
String defaultNum = "zero";
if( num == 1 ){
return "one"; //mengembalikan sebuah konstanta
}
else if( num == 2){
return "two"; //mengembalikan sebuah konstanta
}
// mengembalikan sebuah variabel
return defaultNum;
}

4.9 Static Methods
Kita menggunakan static method untuk mengakses static variable studentCount.
public class StudentRecord
{
private static int studentCount;
public static int getStudentCount(){
return studentCount;
}
}

dimana,
public - Menjelaskan bahwa method ini dapat diakses object luar kelas
static - Method ini adalah static dan pemanggilannya menggunakan [namaKelas].
[namaMethod].
Sebagai contoh :
studentRecord.getStudentCount
Int - Tipe return dari method. Mengindikasikan method tersebut harus mempunyai
return value berupa integer
getStudentCount - Nama dari method
public - Menjelaskan bahwa method ini dapat diakses object luar kelas
( ) - Method ini tidak memiliki parameter apapun
Pada deklarasi di atas, method getStudentCount() akan selalu menghasilkan return
value 0 jika kita tidak mengubah apapun pada kode program untuk mengatur
nilainya. Kita akan membahas pengubahan nilai dari studentCount pada pembahasan
constructor.
Berikut ini adalah kode untuk class StudentRecord :
public class StudentRecord
{
private String name;
private String address;
private int age;
private double mathGrade;
private double englishGrade;
private double scienceGrade;
private double average;
private static int studentCount;
/**
* Menghasilkan nama dari Siswa
*/
public String getName(){
return name;
} /**
* Mengubah nama siswa
*/
public void setName( String temp ){
name = temp;
} // area penulisan kode lain

/**
* Menghitung rata – rata nilai Matematik, Bahasa Inggris, * * Ilmu Pasti
*/
public double getAverage(){
double result = 0;
result = ( mathGrade+englishGrade+scienceGrade )/3;
return result;
} /**
* Menghasilkan jumlah instance StudentRecord
*/
public static int getStudentCount(){
return studentCount;
}
}
Berikut ini contoh kode dari class yang mengimplementasikan class StudentRecord :
public class StudentRecordExample
{
public static void main( String[] args ){
//membuat 3 object StudentRecord
StudentRecord annaRecord = new StudentRecord();
StudentRecord beahRecord = new StudentRecord();
StudentRecord crisRecord = new StudentRecord();
//Memberi nama siswa
annaRecord.setName("Anna");
beahRecord.setName("Beah");
crisRecord.setName("Cris");
//Menampilkan nama siswa “Anna”
System.out.println( annaRecord.getName() );
//Menampilkan jumlah siswa
System.out.println("Count="+StudentRecord.getStudentCount());
}
}
Output dari program adalah sebagai berikut :
Anna
Student Count = 0

4.10 Referensi this
Referensi this digunakan untuk mengakses instance variable yang dibiaskan oleh
parameter. Untuk pemahaman lebih lanjut, mari kita perhatikan contoh pada method
setAge. Asumsikan kita mempunyai kode deklarasi berikut pada method setAge.
public void setAge( int age ){
age = age; //SALAH!!!
}

Nama parameter pada deklarasi ini adalah age, yang memiliki penamaan yang sama
dengan instance variable age. Parameter age adalah deklarasi terdekat dari method,
sehingga nilai dari parameter tersebut akan digunakan. Maka pada pernyataan :
age = age;
kita telah mengidentifikasi nilai dari parameter age kepada parameter itu sendiri. Hal
ini sangat tidak kita hendaki pada kode program kita. Untuk menghindari kesalahan
semacam ini, kita gunakan metode referensi this. Untuk menggunakan tipe referensi
ini, kita tuliskan :
this.
Sebagai contoh, kita dapat menulis ulang kode hingga tampak sebagai berikut :
public void setAge( int age ){
this.age = age;
}
Method ini akan mereferensikan nilai dari parameter age kepada instance variable
dari object StudentRecord.

4.11 Overloading Methods
Dalam class yang kita buat, kadangkala kita menginginkan untuk membuat method
dengan nama yang sama namun mempunyai fungsi yang berbeda menurut parameter
yang digunakan. Kemampuan ini dimungkinkan dalam pemrograman Java, dan
dikenal sebagai overloading method.
Overloading method mengijinkan sebuah method dengan nama yang sama namun
memiliki parameter yang berbeda sehingga mempunyai implementasi dan return
value yang berbeda pula. Daripada memberikan nama yang berbeda pada setiap
pembuatan method, overloading method dapat digunakan pada operasi yang sama
namun berbeda dalam implementasinya.
Sebagai contoh, pada class StudentRecord kita menginginkan sebuah method yang
akan menampilkan informasi tentang siswa. Namun kita juga menginginkan operasi
penampilan data tersebut menghasilkan output yang berbeda menurut parameter yang
digunakan. Jika pada saat kita memberikan sebuah parameter berupa string, hasil
yang ditampilkan adalah nama, alamat dan umur dari siswa, sedang pada saat kita
memberikan 3 nilai dengan tipe double, kita menginginkan method tersebut untuk
menampilkan nama dan nilai dari siswa. Untuk mendapatkan hasil yang sesuai, kita
gunakan overloading method di dalam deklarasi class StudentRecord.
38
public void print( String temp ){
System.out.println("Name:" + name);
System.out.println("Address:" + address);
System.out.println("Age:" + age);
}
public void print(double eGrade, double mGrade, double sGrade){
System.out.println("Name:" + name);
System.out.println("Math Grade:" + mGrade);
System.out.println("English Grade:" + eGrade);
System.out.println("Science Grade:" + sGrade);
}
Jika kita panggil pada method utama (main) :
public static void main( String[] args )
{
StudentRecord annaRecord = new StudentRecord();
annaRecord.setName("Anna");
annaRecord.setAddress("Philippines");
annaRecord.setAge(15);
annaRecord.setMathGrade(80);
annaRecord.setEnglishGrade(95.5);
annaRecord.setScienceGrade(100);
//overloaded methods
annaRecord.print( annaRecord.getName() );
annaRecord.print( annaRecord.getEnglishGrade(),
annaRecord.getMathGrade(),
annaRecord.getScienceGrade());
}
Kita akan mendapatkan output pada panggilan pertama sebagai berikut :
Name:Anna
Address:Philippines
Age:15
Kemudian akan dihasilkan output sebagai berikut pada panggilan kedua :
Name:Anna
Math Grade:80.0
English Grade:95.5
Science Grade:100.0
Jangan dilupakan bahwa overloaded method memiliki property sebagai berikut :
1. Nama yang sama
2. Parameter yang berbeda
3. Nilai kembalian (return) bisa sama ataupun berbeda

4.12 Deklarasi Constructor
Telah tersirat pada pembahasan sebelumnya, Constructor sangatlah penting pada
pembentukan sebuah object. Constructor adalah method dimana seluruh inisialisasi
object ditempatkan.
Berikut ini adalah property dari Constructor :
1. Constructor memiliki nama yang sama dengan class
2. Sebuah Constructor mirip dengan method pada umumnya, namun hanya
informasi –informasi berikut yang dapat ditempatkan pada header sebuah
constructor, scope atau identifikasi pengaksesan (misal: public), nama dari
konstuktor dan parameter.
3. Constructor tidak memiliki return value
4. Constructor tidak dapat dipanggil secara langsung, namun harus dipanggil
dengan menggunakan operator new pada pembentukan sebuah class.
Untuk mendeklarasikan constructor, kita tulis,
(*) {
*
}

4.12.1 Default Constructor
Setiap kelas memiliki default constructor. Sebuah default constructor adalah
constructor yang tidak memiliki parameter apapun. Jika sebuah class tidak memiliki
constructor apapun, maka sebuah default constructor akan terbuat secara implisit :
Sebagai contoh, pada class StudentRecord, bentuk default constructor akan terlihat
seperti dibawah ini :
public StudentRecord()
{
//area penulisan kode
}

4.12.2 Overloading Constructor
Seperti telah kita bahas sebelumnya, sebuah constructor juga dapat dibentuk menjadi
overloaded. Dapat dilihat pada 4 contoh sebagai berikut :
public StudentRecord(){
//area inisialisasi kode;
}
public StudentRecord(String temp){
this.name = temp;
}

public StudentRecord(String name, String address){
this.name = name;
this.address = address;
}
public StudentRecord(double mGrade, double eGrade, double sGrade){
mathGrade = mGrade;
englishGrade = eGrade;
scienceGrade = sGrade;
}

4.12.3 Menggunakan Constructor
Untuk menggunakan constructor, kita gunakan kode – kode sebagai berikut :
public static void main( String[] args )
{
//membuat 3 objek
StudentRecord annaRecord=new StudentRecord("Anna");
StudentRecord beahRecord=new StudentRecord("Beah","Philippines");
StudentRecord crisRecord=new StudentRecord(80,90,100);
//area penulisan kode selanjtunya
}
Sebelum kita lanjutkan, mari kita perhatikan kembali deklarasi static variable
studentCount yang telah dibuat sebelumnya. Tujuan deklarasi studentCount adalah
untuk menghitung jumlah object yang dibentuk pada class StudentRecord. Jadi, apa
yang akan kita lakukan selanjutnya adalah menambahkan nilai dari studentCount
setiap kali setiap pembentukan object pada class StudentRecord. Lokasi yang tepat
untuk memodifikasi dan menambahkan nilai studentCount terletak pada constructornya,
karena selalu dipanggil setiap kali objek terbentuk. Sebagai contoh :
public StudentRecord(){
//letak kode inisialisasi
studentCount++; //menambah student
}
public StudentRecord(String temp){
this.name = temp;
studentCount++; //menambah student
}
public StudentRecord(String name, String address){
this.name = name;
this.address = address;
studentCount++; //menambah student
}

public StudentRecord(double mGrade, double eGrade, double sGrade){
mathGrade = mGrade;
englishGrade = eGrade;
scienceGrade = sGrade;
studentCount++; //menambah student
}

4.12.4 Pemanggilan Constructor Dengan this()
Pemanggilan constructor dapat dilakukan secara berangkai, dalam arti dapat
memanggil constructor di dalam constructor lain. Pemanggilan dapat dilakukan
dengan referensi this(). Perhatikan contoh kode sebagai berikut :
1: public StudentRecord(){
2: this("some string");
3:
4: }
5:
6: public StudentRecord(String temp){
7: this.name = temp;
8: }
9:
10: public static void main( String[] args )
11: {
12:
13: StudentRecord annaRecord = new StudentRecord();
14: }
Dari contoh kode diatas, pada saat baris ke 13 dipanggil akan memanggil constructor
dasar pada baris pertama. Pada saat baris kedua dijalankan, baris tersebut akan
menjalankan constructor yang memiliki parameter String pada baris ke-6.
Beberapa hal yang patut diperhatikan pada penggunaan this() :
1. Harus dituliskan pada baris pertama pada sebuah constructor
2. Hanya dapat digunakan pada satu definisi constructor. Kemudian metode ini dapat
diikuti dengan kode – kode berikutnya yang relevan

4.13 Access Modifiers
Pada saat membuat, mengatur properties dan class methods, kita ingin untuk
mengimplementasikan beberapa macam larangan untuk mengakses data. Sebagai
contoh, jika diinginkan beberapa atribut hanya dapat diubah hanya dengan method
tertentu, jika diinginkan menyembunyikannya dari object lain pada class. Di JAVA,
implementasi tersebut disebut dengan access modifiers.
Terdapat 4 macam access modifiers di JAVA, yaitu : public, private, protected dan
default. 3 tipe akses pertama tertulis secara ekplisit pada kode untuk
mengindikasikan tipe akses, sedangkan yang keempat yang merupakan tipe default,
tidak diperlukan penulisan keyword atas tipe.

4.13.1 Akses Default (Package Accessibility)
Tipe ini mempersyaratkan bahwa hanya class dalam package yang sama yang
memiliki hak akses terhadap variabel dan methods dalam class. Tidak terdapat
keyword pada tipe ini.
Sebagai contoh :
public class StudentRecord
{
//akses dasar terhadap variabel
int name;
//akses dasar terhadap metode
String getName(){
return name;
}
}
Pada contoh diatas, variabel nama dan method getName() dapat diakses dari object
lain selama object tersebut berada pada package yang sama dengan letak dari file
StudentRecord.

4.13.2 Akses Public
Tipe ini mengijinkan seluruh class member untuk diakses baik dari dalam dan luar
class. Object apapun yang memiliki interaksi pada class memiliki akses penuh
terhadap member dari tipe ini. Sebagai contoh :
public class StudentRecord
{
//akses dasar terhadap variabel
public int name;
//akses dasar terhadap metode
public String getName(){

return name;
}
}
Dalam contoh ini, variabel name dan method getName() dapat diakses dari object
lain.

4.13.3 Akses Protected
Tipe ini hanya mengijinkan class member untuk diakses oleh method dalam class
tersebut dan elemen – elemen subclass. Sebagai contoh :
public class StudentRecord
{
//akses pada variabel
protected int name;
//akses pada metode
protected String getName(){
return name;
}
}
Pada contoh diatas, variabel name dan method getName() hanya dapat diakses oleh
method internal class dan subclass dari class StudentRecord. Definisi subclass akan
dibahas pada bab selanjutnya.

4.13.4 Akses Private
Tipe ini mengijinkan pengaksesan class hanya dapat diakses oleh class dimana tipe
ini dibuat. Sebagai contoh :
public class StudentRecord
{
//akses dasar terhadap variabel
private int name;
//akses dasar terhadap metode
private String getName(){
return name;
}
}
Pada contoh diatas, variabel name dan method getName() hanya dapat diakses oleh
method internal class tersebut. Baca selengkapnya fbachtiar TI_A: 2011