BAB I - elista:.

advertisement
BAB I
STRUKTUR PROGRAM JAVA
I. Kompetensi :
Pengenalan struktur program JAVA sebagai suatu model pemrograman
yang berorientasi objek secara penuh. Pada percobaan ini diharapkan
mahasiswa telah dapat melakukan editing code program JAVA sederhana yang
hanya memuat satu class, melakukan kompilasi program dan mengeksekusi
program JAVA. Diharapkan pula dalam percobaan ini dikuasai pemahaman
Tipe data sederhana, operator, statemen kondisi dan komunikasi dengan layar
serta masukan dari keyboard dengan class Console.
II. Teori Singkat :
Program JAVA dirancang sebagai suatu pemrograman berorientasi objek
(OOP=Object Orientation Programming) secara penuh. Dalam pemrograman
PASCAL yang untuk TURBO PASCAL versi 5 ke atas telah mendukung OOP
atau C++ yang telah penuh mendukung OOP namun dalam kedua bahasa yang
terakhir tersebut masih dimungkinkan untuk membuat program dengan
pendekatan program terstruktur, yang dalam lingkup pemrograman JAVA hal ini
tidak dapat lagi dilakukan.
Struktur program JAVA dibuat dengan mendefinisikan suatu class
dengan syntax :
[public] class <NamaKelas>
{ // definisi atribut dari kelas tersebut
// definisi method yang memanipulasi atribut
}
Keterangan :
[public] = menunjukkan bahwa class tersebut dapat diases oleh class yang
lain. Apabila kata public tidak dicantumkan menunjukkan bahwa class tersebut
hanya dapat diases oleh class tertentu.
NamaKelas = adalah nama dari programer sesuai dengan persoalan.
Selanjutnya didalam suatu class dapat didefinisikan atribut-atribut class tersebut
dan juga method-method yang memanipulasi atribut class tersebut.
Suatu class dapat dieksekusi apabila didalam class tersebut didefinisikan suatu
method yang disebut main(), yaitu :
public static void main(String[] args)
2.1. Mengedit Source code program JAVA :
Suatu kode program dalam JAVA yang berupa definisi suatu class dapat
diketik dan diedit menggunakan editor teks, baik yang berbasis DOS ataupun
WINDOWS. Sebagai contoh pada gambar 1.1. ditunjukkan mengedit code
dengan NOTEPAD dari WINDOWS untuk suatu kode program JAVA yaitu class
FirstSample yang hanya mengandung satu method dan sama sekali tidak
mendefinisikan atribut sebagai berikut :
public class FirstSample
BAB I: Loop dan Array
2
{ public static void main(String[] args)
{System.out.println(“Hello INFORMATIKA !!!”);
}
}
Gambar 1.1. Mengetik code JAVA dengan NOTEPAD
Keterbatasan pengetikan dengan NOTEPAD adalah hanya dapat diketikan satu
dokumen dalam suatu waktu. Untuk pengetikan beberapa kode sekaligus dapat
dipilih editor teks seperti MS-WORD atau editor teks berbasis DOS yaitu
program EDIT. Gambar 1.2 berikut menunjukkan proses pengeditan dengan
program EDIT dari DOS. Salah satu kelebihan program EDIT dapat dibuka
beberapa file sekaligus.
Gambar 1.2. Mengedit code dengan program EDIT dari DOS
2.2. Meng-compile dan mengeksekusi program JAVA :
Setelah suatu code program diketikkan, maka kode program tersebut
disimpan dengan nama file HARUS SAMA DENGAN NAMA class utama
dengan ekstension .java . Untuk nama class FirstSample maka nama filenya
adalah FirstSample.java.
Untuk meng-compile code tersebut digunakan compiler JAVA yang
tersimpan dalam JDK (Java Development Kit) dalam subdirectory bin. Compiler
tersebut merupakan file berukuran cukup kecil 4.608 byte yaitu javac.exe.
Untuk isi subdirectory bin dapat dilihat dalam Gambar 1.3.
BAB I: Loop dan Array
3
Gambar 1.3. Isi directory bin
Meng-compile code program JAVA adalah meng-compile class yang telah
disimpan dalam Namafile.java. Contoh untuk class FirstSample.java
dicompile dengan baris perintah :
>javac FirstSample.java
Hasil compilasi ini adalah file:
FirstSample.class
Perlu diingat bahwa JAVA adalah suatu progam yang termasuk CASE
SENSITIF seperti C++ sehingga apabila dalam meng-compile diketik :
>javac firstSample.java
atau
>javac Firstsample.java
maka akan terjadi error dalam nama file, karena yang benar adalah file dengan
F besar dan sample dengan S besar. Hati-hati dalam meng-compile!
File hasil compilasi berupa file berekstension *.class yang biasa dikenal
sebagai JAVA BYTE CODE, yang merupakan suatu kode byte yang bebas
platform. Perlu diingat bahwa apabila dalam file *.java ada beberapa definisi
class maka hasil compilasi akan menghasilkan beberapa file yang berekstensi
*.class pula.
Selanjutnya untuk eksekusi kode byte ini digunakan suatu interpereter yang
tergantung pada paltform tertentu. Untuk sistem yang digunakan dalam
pembahsan ini (SO WINDOWS) interpreter adalah file :java.exe. Untuk
menjalankan java byte code digunakan baris perintah :
>java FirstSample
BAB I: Loop dan Array
4
hasil adalah :
Hello INFORMATIKA !!!
Untuk urutan compilasi dan eksekusi program dari jendela MS-DOS prompt
dapat dilihat pada Gambar 1.4.
Gambar 1.4. Compilasi dan eksekusi code JAVA
2.3. Tipe Data dan Operator dalam JAVA
JAVA mengenal tipe data yang mirip dengan C++. Untuk data numerik dimiliki
beberapa tipe, yaitu :
Integer :
int
short
long
4 byte
2 byte
8 byte
byte
1 byte
Floating point
float
4 byte
double
8 byte
kisaran nilai :-2.147.486.648 s/d 2.147.486.647
kisaran nilai :-32.768 s/d 32.767
kisaran nilai :-9.223.372.036.854.775.808L s/d
9.223.372.036.854.775.807L
kisaran nilai :-128 s/d 127
kisaran nilai :+3.40282347E+38F (7 digit ignifikan)
kisaran nilai :+1.79769313486231570E+308 (15
digit signifikan)
Karakter dan string
char
1 byte
1 karakter
String
sebuah objek string dan manipulasinya
Satu hal yang berbeda dengan C++ adalah untuk String dalam JAVA adalah
sebuah objek, yang mengandung beberapa method untuk manipulasi objek
tersebut. Meskipun demikian suatu objek String dapat diisi suatu nilai string
sebagaimana layaknya variabel biasa.
Contoh :
String Nama=”JON SHOLEH”;
atau :
String Nama;
Nama = “JON SHOLEH”;
Beberapa method dari objek string Nama antara lain :
Nama.length() akan menghasilkan : 10
Nama.substring(0,3) akan menghasilkan : “JON”
BAB I: Loop dan Array
5
Contoh program yang melibatkan data adalah sebagai berikut :
class OperasiDATA
{ public static void main(String args[])
{
int
a;
float b;
double c;
String d;
a=(int)1/3;
b=(float)1/3 ;
c=(double)1/3 ;
d="JON SHOLEH";
System.out.println("a = " +a);
System.out.println("b = " +b);
System.out.println("c = " +c);
System.out.println("d = " +d);
System.out.println("d.length() = " +d.length());
System.out.println("d.substring(0,3) = " +d.substring(0,3));
}
}
Output dari program tersebut adalah :
a = 0
b = 0.333333
c = 0.333333
d = JON SHOLEH
d.length() = 10
d.substring(0,3) =JON
JAVA mengenal operator sama dengan C++ antara lain :
Operator aritmatik :
+, - , * dan / untuk : penambahan, pengurangan, perkalian dan pembagian
+= , yakni : x+=4 ekivalen dengan operasi : x=x+4
-= ; *= dan /= memiliki ekivalensi yang sama dengan -=
++ yaitu : n++ ekivalen dengan n=n+1 (increment by one)
-- yaitu : n-- ekivalen dengan n=n-1 (decrement by one)
% untuk MODULO, yaitu : 5 % 3 sama dengan 2
Operator relational dan logika
< , > , <= dan >= adalah : lebih kecil, lebih besar, lebih kecil atau sama dan
lebih besa atau sama
==
untuk SAMA DENGAN
!=
untuk TIDAK SAMA DENGAN
&&
untuk operator AND
||
untuk operator OR
2.5. Masukan program dari Keyboard
Untuk aplikasi berbasis DOS dengan command line interaktif, salah satu
yang selalu menarik untuk dibahas dalam kebanyakan pemrograman adalah
masukan dari Keyboard. Untuk masukan berbagai tipe data dari keyboard JAVA
BAB I: Loop dan Array
6
tidak menyediakan satu kelas khusus. Tetapi dari package java.io telah
didefinisikan suatu class abstract InputStream yang menyediakan beberapa
method untuk membaca aliran byte data antara lain method read() untuk
membaca sejumlah byte dari keyboard. Arthur van Hoff (1995) mendefinisikan
suatu class final yang dinamakan class System yang didalamnya didefinisikan
beberapa objek, yaitu :in untuk standard masukan keyboard dan out untuk
output ke layar. Untuk selanjutnya method yang diturunkan beberapa method
untuk input beberapa type data dari keyboard adalah dari :
System.io.read()
Sedangkan untuk output ke layar digunakan :
System.io.println(String s)
Cay Horstmann (1996) mendefinisikan suatu package corejava yang antara
lain mendefinisikan class Console yang didalamnya terdifinisi beberapa method
untuk masukan keyboard yang memanfaatkan method System.in.read(),
antara lain :
Console.readString(string prompt) : untuk masukan string dari keyboard
Console.readInt(string prompt ) : untuk masukan integer dari keyboard
Console.readDouble(string prompt) : untuk masukan double dari keyboard
Untuk menggunakan class Console perlu dilakukan import package
corejava.* Apabila tidak didahului dengan import maka penggunaan methodmethod diatas akan memunculkan message berikut :
Error : undefined variabel Console !
Selain dengan class Console dari Cay Horstmann, Julio Sanchez dan Maria
Canton (2002) mendefinisikan klass Keyin yang memanfaatkan method dari
kelas InputSream, yaitu antara lain method :
Keyin.inChar(String prompt) : untuk input karakter
Keyin.inString(String prompt) : untuk input string
Keyin.inInt(String prompt) : untuk input integer
Keyin.inDouble(String prompt) : untuk input double
Dengan demikian untuk membaca beberapa jenis data dari keyboard kita tinggal
memilih akan menggunakan method dari class Consoel atau method dari class
Keyin, hasilnya sama.
Program berikut ini memperagakan masukan nama, umur dan gaji yang masingmasing mewakili tipe :string, integer dan float
import corejava.*;
public class CobaBaca
{ public static void main(String[] args)
{ int u;
String Nm;
float Gj;
BAB I: Loop dan Array
7
Nm=Console.readString("Siapa namamu ?");
u =Console.readInt("Berapa umurmu ?");
Gj=(float)Console.readDouble("Sekarang Gajimu berapa Rp ?");
System.out.println("Hallo "+ Nm);
System.out.println("Kau lahir tahun "+(2002-u));
System.out.println("Sekarang kau kaya ya!!! Gajimu :"+Gj);
}
}
Pernyataan import corejava.* dapat tidak disertakan dengan catatan kita
memiliki definisi class Console (file Console.java) dalam diretori program yang
dikompile. Atau membaca dengan Keyin.IntString dengan menyiapkan
dulu definisi class Keyin dalam directori program kita.
Output dari program tersebut adalah :
Siapa namamu ? JON SALEH <enter>
Berapa umurmu ? 25 <enter>
Sekarang Gajimu berapa Rp ? 100000 <enter>
Hallo JON SALEH
Kau lahir tahun 1977
Sekarang kau kaya ya!!! Gajimu : 100000
2.6. Statemen Kondisional
Statemen kondisional dalam JAVA memiliki 4 macam syntax :
If (kondisi) statemen ;
atau
If (kondisi) {blok statemen} ;
atau
If (kondisi) statemen1 else statemen2;
atau
If (kondisi) {blok statemen -1} else {blok statemen-2} ;
Contoh program :
//
//
//
//
//
//
-------------------------------------------Membaca dari keyboard :string dan double
menggunakan method inString() dan inDouble()
dari klass Keyin
sehingga tidak diperlukan import :corejava.*
---------------------------------------------
public class Sales
{ public static void main(String[] args)
{
String NAMA,PESAN;
double JUAL,BONUS;
NAMA=Keyin.inString("Nama Sales :");
JUAL=Keyin.inDouble("Hasil Penjualan :");
BAB I: Loop dan Array
8
if (JUAL>100000)
{BONUS=0.1*JUAL; PESAN="SELAMAT !!";}
else
{BONUS=0; PESAN="ANDA HARUS LEBIH GIAT LAGI";};
System.out.println("Saudara "+NAMA );
System.out.println("Bonus Anda sebesar : "+BONUS );
System.out.println(PESAN);
}
}
Output program :
Nama Sales : BAMBANG <enter>
Hasil Penjualan : 99000 <enter>
Saudara BAMBANG
Bonus Anda sebesar : 0
ANDA HARUS LEBIH GIAT LAGI
III. Tugas
1. Buatlah suatu program JAVA untuk menghitung LUAS dan KELILING
suatu empat persegi panjang. Masukan dari keyboard berupa PANJANG
dan LEBAR, keluaran ke layar adalah luas dan keliling.
2. Buatlah suatu program JAVA untuk menentukan nilai huruf dari suatu
ujian dari nilai bilangan dengan ketentuan :
Nilai angka <40
nilai huruf : ‘E’
40<=Nilai angka < 55
nilai huruf : ‘D’
55<=Nilai angka < 75
nilai huruf : ‘C’
75<=Nilai angka < 85
nilai huruf : ‘B’
85<=Nilai
nilai huruf : ‘A’
masukan : Nilai angka dari keyboard
keluaran : nilai huruf
3. Buatlah suatu program JAVA untuk menentukan MODAL akhir dari suatu
tabungan dengan bunga berbunga dengan rumus :
MAK =(MAW + B)N
MAK=modal akhir
MAW=modal awal
N = periode penabungan
Catatan : Untuk memangkatkan bilangan dalam JAVA digunakan method
dari class Math, yaitu :
Math.pow(x,n) adalah xn
Masukan : MAW dan N
Keluaran MAK
BAB I: Loop dan Array
9
BAB II
LOOP DAN ARRAY
I. Kompetensi :
Pengenalan statemen loop dalam JAVA, seleksi multiple dan konsep
array sebagai objek.
II. Teori Singkat :
Statemen loop dalam Program JAVA seperti program umumnya dibedakan
menjadi loop takhingga dan loop terhingga:
1. Loop takhingga :
while (kondisi) { blok instruksi } ;
dalam hal ini blok instruksi akan dieksekusi apabila kondisi bernilai benar.
Dalam loop ini ada kemungkinan blok instruksi sama sekali tidak dieksekusi
apabila pada pengecekan kondisi pertama kali dijumpai kondisi bernilai salah.
Apabila diinginkan blok instrtuksi minimal dilakukan satu kali dapat
digunakan loop do while dengan sintaks :
do {blok isntruksi} while (kondisi) ;
Contoh program :
Program berikut membaca suatu nilai bilangan real dari keyboard dan mencari
akar kuadrat dengan rumusan : akar kuadrat dari a adalah :
xnew=(xold+a/xold)/2
selama |xold-xnew| cukup besar.
Flowchart pemecahan adalah :
START
Baca a
xnew=a/2
xold=xnew
xnew=(xold+a/xold)/2
Cetak xnew
a
|xnew-xold|>1e-4
STOP
Gambar 2.1. Bagan Alir mencari akar kuadrat bilangan
BAB I: Loop dan Array
10
Program JAVA adalah sebagai berikut :
import corejava.*;
// untuk membaca data dari keyboard perlo class Console
// tanda // berarti komentar
//
public class Akar
{ public static void main(String[] args)
{
double a;
a=Console.readDouble("Masukkan angka real:");
double xnew=a/2;
double xold;
do {
xold=xnew;
xnew=(xold+a/xold)/2;
System.out.println("xnew : "+xnew);
}
while (Math.abs(xnew-xold)>1e-4);
System.out.println("AKAR KUADRAT DARI "+a+"adalah "+xnew);
}
}
hasil output program adalah :
Masukkan angka real : 9 <enter>
xnew = 3.25
xnew=3.00962
xnew=3.00002
xnew=3
AKAR KUADRAT DARI 9 adalah 3
2. Loop terhingga :
for(nilaiawalCounter ; NilaiAkhirCounter ; perubahanCounter)
{ blok instruksi } ;
Blok instruksi akan dikerjakan selama NilaiAkhirCounter belum benar. Dalam hal
ini perubahanCOunter harus merubah counter dari nilai awal menjadi memenuhi
nilai akhir counter.
Contoh 1 :
Program mencetak HELLO INFORMATIKA! 10 kali
class Hello2
{
public static void main(String args[])
{
for (int Counter=1 ; Counter<=10; Counter++)
System.out.println("HELLO INFORMATIKA!!");
}
}
Contoh 2 :
Program menghitung n! = 1*2*3*..*n dengan n diinputkan dari keyboard.
BAB I: Loop dan Array
11
import corejava.*;
class Faktor
{ public static void main(String args[])
{ int n,fak, i;
// baca n dari keyboard
n=Console.readInt("Masukkan n :");
// tentukan n faktorial
fak=1;
for (i=1 ; i<=n ; i++) fak=fak*i;
System.out.println("Hasil "+n+" ! = "+fak);
}
}
Hasil kompilasi dan eksekusi program adalah sebagai Gambar 2.2. berikut :
Gambar 2.2. Kompilasi dan eksekusi Faktor.java
3. Seleksi multiple dengan swicth dan case :
Untuk melakukan pilihan ganda dengan beberapa kondisi dapat digunakan
pernyataan switch dan case, yang dapat diikuti dengan pernyataan break
untuk keluar dari seleksi. Tata tulis pernyataan ini adalah :
switch ( variabelSeleksi)
{ case nilai1:
statemen;
statemen;
....
[break]
case nilai2:
statemen;
statemen;
....
[break]
...
[default :]
statemen;
statemen;
...
[break]
}
BAB I: Loop dan Array
12
Statemen-statemen akan dijalankan apabila variabel seleksi bernilai dari salah
satu nila1, nilai2 dan seterusnya atau nilai default. Setelah statemen dijalankan
apabila dijumpai statemen break, maka kontrol program akan keluar dari blok
seleksi switch ..case.
Contoh :
import corejava.*;
class Menu
{ public static void main(String args[])
{ int pil;
System.out.println("MENU TERSEDIA :");
System.out.println("[1]. NASI GORENG");
System.out.println("[2]. NASI RAWON ");
System.out.println("[3]. SOTO");
pil=Console.readInt("Masukkan Pilihan anda :");
switch(pil)
{ case 1 :
System.out.println("Anda pilih NASI GORENG!");
break;
case 2 :
System.out.println("Anda pilih NASI RAWON!");
break;
case 3 :
System.out.println("Anda pilih SOTO");
break;
default:
System.out.println("Pilihan anda bukan 1,2,3,..!!");
break;
}
}
}
Hasil program adalah seperti Gambar 2.2.
Perlu dicermati bahwa statemen break paad akhir statemen dalam suatu kasus
nilai adalah penting. Apabila steteman break ini tidak dicantumkan maka seteleh
deretan statemen dijalankan untuk suatu nilai1 maka deretan statemen setelah
nilai2, nilai3 dst samapi nila defaulty akan tetap dijalankan. Hal ini terjadi karena
kontrol program tidak diarahkan keluar seleksi.
Gambar 2.2. hasil seleksi dengan statemen : switch case
BAB I: Loop dan Array
13
4. Array
Dalam JAVA array adalah sebuah objek. Dua langkah awal yang diperlukan
sebelum dapat mengakses array adalah :
- mendefinisikan
- mengalokasikan memeory untuk array tersebut
Array 1 Dimensi
- Array satu dimensi didefinisikan dengan bentuk umum :
tipedata[ ] namaArray; atau tipedata namaArray[ ];
Contoh :
String[]
int[]
Nama;
Umur;
atau String Nama[];
atau int Umur[];
- Untuk mengalokasikan memory tersebut digunakan kata kunci new:
Nama =new String[N];
Umur =new int[N];
Dalam hal ini N adalah kapasitas array tersebut, yang selanjutnya berindek
mulai dari 0 sampai N-1.
Kedua langkah tersebut dapat digabungkan menjadi :
String[] Nama=new String[N];
int[]
Umur=new int[N];
Selanjutnya Nama dan Umur sebagai objek array dapat diakses, misalnya
diiskan data kedalam elemen array sebagai berikut :
Nama[0]=”JON”;
Umur[0]=25;
Nama[1]=”ALI”
Umur[1]=30;
.... dst
Apabila diinginkan inisialisasi data langsung bersamaan dengan deklarasi array,
maka langkah alokasi memory dapat tidak dilakukan, misalnya sebagai berikut :
String[] Nama={“JON”, “ALI”, “SALEH”, “PUTRI”, “DEDI”};
Int[]
Umur={25, 30, 55, 35, 40};
Contoh program berikut menggunakan array Nama dan umur dan mencetaknya
dengan loop.
class DemoArray1
{
public static void main(String args[])
{
String[] Nama={"JON", "ALI", "SALEH", "PUTRI", "DEDI"};
int[]
Umur={25, 30, 55, 35, 40};
for (int i=0; i<Nama.length; i++)
System.out.println(Nama[i]+" " +Umur[i]);
}
}
BAB I: Loop dan Array
14
Output program adalah :
JON 25
ALI
30
SALEH
55
PUTRI
35
DEDI
40
Panjang (jumlah elemen) suatu array dapat diketahui dengan menggunakan
properti length, seperti terlihat pada program :
Nama.length
artinya jumlah elemen dari array Nama.
Array 2 Dimensi
- Array dua dimensi didefinisikan dan dialokasikan dengan cara :
tipedata[n][m] namaArray atau tipedata NamaArray[n][m];
Contoh:
Dibawah ini contoh program dengan array 2 dimensi dari string untuk simulasi
kamus inggris indonesia. Kata dalam program adalah suatu array dua dimensi
dari string yang digunakan untuk menyimpan data kata inggris dan indonesia
seperti gambar berikut :
baris 0
baris 1
baris 0
baris 1
baris 0
Kolom 0
ONE
COW
RUN
RED
MEN
kolom 1
SATU
SAPI
LARI
MERAH
ORANG
import corejava.*;
class DemoArray2
{ //demo array 2 dimensi untuk simulasi kamus
//inggris indonesia
public static void main(String args[])
{ String[][] Kata={ {"ONE", "SATU"},
{"COW", "SAPI"},
{"RUN", "LARI"},
{"RED", "MERAH"},
{"MAN", "ORANG"}};
String KataDicari;
int i, k;
KataDicari=Console.readString("Ketik Kata Inggris :");
//cari kata
k=-1;
for (i=0; i<5; i++)
if (Kata[i][0].equals(KataDicari) ) k=i;
//cek ketemu atau tidak , jika k=-1 tidak ketemu
if (k==(-1))
System.out.println("KATA TERSEBUT TIDAK ADA");
else
System.out.println("KATA INDONESIA = "+Kata[k][1]);
}
}
BAB I: Loop dan Array
15
Apabila program dijalankan hasilnya sebagai berikut :
Gambar 2.3. Eksekusi program kamus
INGAT !!! : Untuk menguji kesamaan suatu string dalam JAVA tidak dapat
digunakan tanda operator relasi == tetapi menggunakan salah satu method dari
object string yaitu equals,dengan tatatulis :
s.equals(t)
yang akan mengembalikan nilai true apabil string s sama dengan string t.
III. TUGAS
1. Buat program JAVA untuk membaca bilangan bulat n. Dengan loop program
menentukan deret FIBBONACCI untuk nilai suku-suku yang tidak lebih dari
n. Deret FIBBONACCI adalah :
0 1 1 2 3 5 8 13 ... yang berlaku Un=Un-1 + Un-2
dengan U1=0 U2 = 1
Misal : INPUT : n = 40
OUTPUT : 0 1 1 2 3 5 8 13 21 34
2. Buat program JAVA untuk memperbaiki unjuk kerja program simulasi kamus
dengan loop while, karena simulasi Kamus dengan loop for pada contoh
program sebenarnya kurang efisien, yaitu : pada proses pencarian kata
apabila kata sudah ditemukan pada langkah ke i, dengan i< jumlah kata
maka program tetap meneruskan pencarian sampaiberputar sebanyak
jumlah kata. Dengan loop while program akan berhenti apabila proses
pencarian sudah ditemukan.
3. Buat program dengan menggunakan array satu dimensi untuk membaca dan
menyimpan data sebanyak n. Program mencari rata-rata dan standard
deviasi dari n buah data tersebut.
Rumus : untu n data , yaitu : x1, x2, ..., xn
Rata-rata = x / n
Standard deviasi =  [ { x2- (x)2 }/(n-1) ]
BAB I: Loop dan Array
16
BAB III
PENGANTAR OOP : CLASS DAN METHOD
I. Tujuan :
Memahami lebih jauh mengenai konsep pemrograman berorientasi objek
(Object Orientation Programming = OOP) dalam JAVA. Stuktur data dalam
class, method, objek, instance, dan pemahaman modifier : public, private,
static, final dan lain-lain.
II. Teori Singkat :
Konsep pemrograman terstruktur memandang data dan prosedur untuk
mengolah data tersebut sebagai sesuatu yang terpisah. Sedangkan dalam OOP
data dan fungsi/prosedur pengolah data dikemas dalam suatu class. Fungsi dan
prosedur pengolah data dalam JAVA disebut sebagai method, sedangkan data
dalam hal ini diistilahkan sebagai properti. Gambar 3.1. menunjukkan perbedaan
konsep pemrograman prosedural dan OOP.
function
function
function
function
Global data
Pemrograman prosedural
method
method
data
data
method
method
method
method
class
Pemrograman OOP
Gambar 3.1. Pendekatan prosedural dan OOP
Dari gambar 3.1. dapat dijelaskan bahwa suatu class pada prinsipnya
adalah suatu kemasan data dengan method pemroses data tersebut. Konsep
inilah yang sering disebut juga sebagai peng-kapsulan (encapsulation). Dalam
JAVA tidak ada data global, tetapi ada adlam suatu kelas. JAVA sendiri sebagai
bangunan pemrograman mendefinisikan banyak class siap pakai dengan class
java sebagai class induk yang memiliki banyak sub-class misalnya :
java.lang,
java.util,
java.awt,
java.io,
java.net,
java.applet dan lain-lain.
Kelas, sub-kelas dan objek :
Pada prinsipnya membuat program JAVA adalah mendefinisikan class
bersama dengan data dan method. Suatu kelas adalah abstraksi untuk frame
yang berisi properti dan method. Suatu kelas dapat memiliki banyak sub-kelas.
BAB I: Loop dan Array
17
Suatu kelas Buah misalnya dapat memiliki sub kelas BuahJeruk, BuahMangga
dan lain-lain. Sementara sub-kelas BuahJeruk dapat memiliki sub-sub-kelas lagi
:BuahJerukBali, BuahJerukPurut dst.
Apabila kelas adalah suatu abstraksi maka objek atau instance adalah
bentuk real dari suatu kelas. Analogi dalam bahasa program adalah sebagai
berikut : Objek adalah variabel dan class adalah tipe data. Deklarasi suatu objek
juga mengikuti analogi tersebut, misalnya :
Deklarasi variabel :
int
X,Y,Z;
double P,Q ;
Deklarasi objek dari suatu kelas:
NamaKelas Namaobjek;
Mahasiswa M1, M2 ;
Mahasiswa M[12];
M1 dan M2 adalah objek-objek dari
kelas Mahasiswa
M adalah array dari objek
Objek yang merupakan bentuk konkret dari kelas memiliki identifikasi :
- Status dari objek tersebut : dimaksudkan adalah setting data/properti dari
objek tersebut
- Kemampuan (behavior) dari suatu objek
Untuk kelas Anjing : misalnya ada dua atribut, No dan Nama dan memiliki dua
kemampuan (behavior), yaitu : Gonggong dan SayHello.
class Anjing
{
String Nama;
int No;
public void SetData(String m, int o)
{Nama=m; No=o; }
public void Gonggong(String S)
{ System.out.println(S+"! " + S + "!! " + S + " !!!");
}
public void SayHello()
{ System.out.println("Hello Saya Anjing No:" +No+ " Nama saya :
"+Nama);
}
}
class TesAnjing
{ public static void main(String args[])
{
Anjing AnjingKU=new Anjing();
Anjing AnjingMU=new Anjing();
AnjingKU.SetData("PLEKI",10);
AnjingMU.SetData("HELI",77);
BAB I: Loop dan Array
18
AnjingKU.Gonggong("GUG");
AnjingKU.SayHello();
AnjingMU.Gonggong("KAING");
AnjingMU.SayHello();
}
}
Hasil program adalah :
GUG! GUG!! GUG!!!
Hello Saya Anjing No:10 Nama saya : PLEKI
KAING! KAING!! KAING!!!
Hello Saya Anjing No:77 Nama saya : HELI
Properti dan method dari suatu kelas
Suatu kelas didalamnya memiliki data yang sering disebut sebagai
properti. Kelas juga memiliki fungsi atau prosedur untuk memanipulasi data
tersebut yang disebut sebagi method atau yang telah disebutkan sebagai
perilaku. Sebagai contoh kelas Mahasiswa memiliki atribut Nama, Umur ; dan
memiliki method untuk mengisi Nama dan Umur , misalnya dinamakan SetData,
method untuk mencetak misalnya dinamakan CetakInfo. Definisi dari kelas
seperti itu dapat dituliskan sebagai :
class Mahasiswa
{ String Nama;
int Umur;
public void SetData(String n, int u)
{ Nama=n; Umur=u;};
public void CetakInfo()
{ System.out.println("Namaku : "+Nama);
System.out.println("Umur
: "+Umur);
}
}
Selanjutnya suatu method akan dipanggil dengan tata tulis :
Namaobjek.Namamethod
Misalnya apabila objeknya adalah M, maka dapat dipanggil method dengan :
M.CetakInfo()
Untuk memanfaatkan kelas Mahasiswa tersebut dalam program dapat
didefinisikan suatu class yang mengandung program utama yang mendefinisikan
objek bertipe kelas Mahasiswa, misalnya objek tersebut Mhs1 dan Mhs2.
Program sebagai berikut :
class TesMhs
{ public static void main(String orgs[])
{ Mahasiswa Mhs1=new Mahasiswa();
Mahasiswa Mhs2=new Mahasiswa();
Mhs1.SetData("JON SALEH",20);
Mhs2.SetData("SITI KAMAR MANDI",17);
BAB I: Loop dan Array
19
Mhs1.CetakInfo();
Mhs2.CetakInfo();
}
}
Selanjutnya secara teknis kedua kelas tersebut diketik dalam satu kesatuan
dokumen (dapat didefinisikan class Mahasiswa diikuti class TesMhs, atau dapat
juga dibalik : class TesMhs diikuti class Mahasiswa). Program disimpan dengan
nama file sesuai dengan nama class yang didalamnya terdapat program utama,
yaitu : TesMhs.java.
Hasil program adalah :
Namaku
Umur
Namaku
Umur
:
:
:
:
JON SALEH
20
SITI KAMAR MANDI
17
Acces modifier : public, static dan private dalam definisi method
Dalam JAVA definisi method harus dilakukan didalam class. Dalam
definisi class method dapat dipilih beberapa pengenal scope sperti : public,
static atau private.
Public method :
Suatu method dari suatu kelas A dedefiniskan sebagai public berarti sembarang
method dari sembarang kelas yang memiliki asses ke objek dari kelas A tersebut
dapat memanggil (call) method tersebut.
Suatu method sendiri didefiniskan dengan tata tulis :
[public] [static] [return value] NamaMethod(daftar argumen)
{
....
...
}
ReturnValue dapat berupa tipe-tipe data :int, double, Stirng, atau tipe-tipe lain.
Apabila method tersebut tidak mengembalikan nilai ReturnValue adalah void.
private method:
Dalam implementasi class umumnya data selalu dideklarasikan sebagai
private, yaitu hanya dikenal oleh objek dari kelas tersebut. Untuk implementasi
method apabila didefinisikan sebagai public berarti dapat diases oleh kelas lain,
maka apabila didefinisikan sebagai private berarti method tersebut hanya dapat
diases dari dalam kelas tersebut.
Contoh :
Untuk kelas Mahasiswa didifnisikan method
public void SetData(String n, int u)
{ Nama=n; Umur=u;};
method ini dapat diases dari kelas lain, yaitu kelas : TesMhs melalui
Mhs1.SetData("JON SALEH",20);
Apabila kata public dari method tersebut diganti menjadi private :
BAB I: Loop dan Array
20
private void SetData(String n, int u)
pada saat program dikompile akan terjadi kesalahan dengan pesan :
TesMhs.java:6:No method matching SetData(java.lang.String, int) found in class
Mahasiswa
Mhs1.SetData(“JON SALEH”,20);
Nampak bahwa method SetData() menjadi tidak “terlihat” dari kelas TesMhs
yang memangghil method tersebut. Method SetData() yang bersifat private
dapat diases oleh method lain dari kelas tersebut, misalkan dalam kelas
Mahasiswa ditambahkan method baru ISIDATA() yang bersifat public. Method
ISIDATA memanggil method SetData() yang secara lengkap definisi kelas
Mahasiswa menjadi sebagai berikut :
class Mahasiswa
{ String Nama;
int Umur;
private void SetData(String n, int u)
{ Nama=n; Umur=u;};
public void CetakInfo()
{ System.out.println("Namaku : "+Nama);
System.out.println("Umur
: "+Umur);
}
public void ISIDATA(String NN, int II)
{ SetData(NN,II);};
}
Maka dalam class TesMhs method ISIDATA yang memanggil digunakan dengan
:
Mhs1.ISIDATA("JON SALEH",20);
Mhs2.ISIDATA("SITI KAMAR MANDI",17);
Hasil program adalah seperti program semula.
Static method:
Suatu data atau method dari suatu kelas yang menggunakan modifier
static memiliki makna bahwa nilainya tetap tidak berubah untuk objek yang
berbeda-beda dalam kelas tersebut. Apabila data bersifat static dalam suatu
kelas, maka untuk semua objek dari kelas tersebut akan memiliki data yang
sama.
Contoh:
Lihat kembali definisi kelas Mahasiswa:
class Mahasiswa
{ String Nama;
int Umur;
...
Jika sekarang atribut Nma diberi pengeal static menjadi:
class Mahasiswa
{ static String Nama;
int Umur;
...
BAB I: Loop dan Array
21
meskipun dari class TesMhs objek Mhs1 dan objek Mhs2 mengeset atribut
Nama dengan :
Mhs1.ISIDATA("JON SALEH",20);
Mhs2.ISIDATA("SITI KAMAR MANDI",17);
Ternyata menarik !!!, hasil output program adalah :
Namaku
Umur
Namaku
Umur
:
:
:
:
SITI KAMAR MANDI
20
SITI KAMAR MANDI
17
Terbukti bahwa ernyata untuk objek yang berbeda, atribut Nama yang static
nilainya sama.
Sama halnya dengan data static, method static memiliki pengertian bahwa
method tersebut adalah milik suatu kelas, bukan milik suatu objek dari kelas
tersebut. Hal ini mengangapa method main() dalam program selalu didefinisikan
sebagai public static. Contoh method static adalah method yang dimiliki oleh
kelas Console
Console.readInt(paramter)
Console.readDouble(parameter)
Adapun bentuk umum menggunakan method static dari suatu kelas adalah :
NamaKelas.NamaMethodStatic(parameter)
Contoh Apllikasi :
Seandainya data Mahsiswa dikembangkan sehingga disamping nama dan umur
ditambah data : Nilai, suatu array (misalnya berukuran 3) dan RATA untuk
mengetahui rata-rata nilai.
Selanjutnya dapat didefinisikan suatu method statis CariRata yang berguna
untuk mencari rata-rata nilai dari seorang mahasiswa. Method ini merupakan
method miliknya klas Mahasiswa. Modifikasi program menjadi sebagai berikut :
class Mhs
{ public static void main(String orgs[])
{ DataMhs O1=new DataMhs();
DataMhs O2=new DataMhs();
O1.SetData("JON SALEH",20, 50,60,70);
O2.SetData("SITI KAMAR MANDI",17, 80,90,80 );
O1.RATA=DataMhs.CariRata(O1.Nilai) ;
O2.RATA=DataMhs.CariRata(O2.Nilai);
O1.Cetak();
O2.Cetak();
}
}
Nama kelas
Nama method
static
argumen
class DataMhs
{ String Nama;
int Umur;
double RATA;
double Nilai[]=new double[3];
public void SetData(String n,int u,double a1,double a2,double a3)
BAB I: Loop dan Array
{
22
Nama=n; Umur=u;
Nilai[0]=a1 ; Nilai[1]=a2; Nilai[2]=a3; };
public void Cetak()
{ System.out.println("Namaku : "+Nama);
System.out.println("Umur
: "+Umur);
System.out.print("Nilai
: ");
for (int i=0; i<Nilai.length; i++)
System.out.print(Nilai[i]+" ");
System.out.println(" ");
System.out.println("Rata-ratanya ="+RATA);
}
public static double CariRata(double x[])
{ double jum=0;
int i;
for (i=0; i<3; i++) jum=jum+x[i];
return (jum/3);
}
}
Hasil program adalah sebagai berikut :
Namaku : JON SALEH
Umur
: 20
Nilai = 50 60 70
Rata-ratanya = 60
Namaku : SITI KAMAR MANDI
Umur
: 17
Nilai
= 80 90 80
Rata-ratanya = 83.3333
III. TUGAS
1. Definisikan suatu kelas Barang yang memiliki properti : KodeBarang,
NamaBarang (String) dan HargaBarang (double). Kelas Barang memiliki
method SetData (untuk men-set properti) dan method Cetak untuk
mencetak KodeBarang, NamaBarang dan HargaBarang dalam posisi satu
baris.
Definisikan suatu kelas Belanja yang mendeklarasikan Array dari objek
barang dan men-set nilai-nilai properti serta mencetaknya dalam bentuk
tabel.
DAFTAR HARGA BARANG
No
KodeBarang NamaBarang
...
Data Barang dicadangkan sebanyak N
Buat dua tipe program
1. Data-data ada dalam program
2. Data-data dientrikan dari papan ketik
HargaBarang
BAB IV : Constructor, Inheritance & Polymorphism
23
BAB IV
CONSTRUCTOR, INHERITANCE & POLYMORPHISM
I. Tujuan :
Memahami beberapa pilihan inisialisasi objek dengan mengenal konsep
constructors dan method overloading. Memahami pula salah satu kunci
kekuatan OOP yakni konsep inheritance (pewarisan sifat), pengembangan
kelas. Di dalam pengembangan suatu kelas dimungkinkan merancang suatu
method dengan nama yang sama dengan method class induk. Hal ini dikenal
dengan konsep polymorphism.
II. Teori Singkat :
Constructor dan Overloading pada constructor
Pada saat suatu kelas didefinisikan, tentunya pasti memiliki atribut (data).
Atribut atau data ini pada contoh-contoh terdahulu diisi dengan mendefinisikan
method SetData(), yang akan dipanggil sesaat setelah suatu objek dari kelas
tersebut diciptakan. Perhatikan kembali contoh definisi objek pada kelas
TesAnjing pada BAB III :
Anjing AnjingKU=new Anjing()
Nama kelas
nama objek
alokasi memory tanpa inisialisasi data
Selanjutnya atribut dalam objek AnjingKU di set dengan memanggil method
SetData() sebagai berikut :
AnjingKU.SetData("PLEKI",10);
Cara praktis yang sering digunakan untuk menginisialisasi atribut pada
objek saat objek tersebut diciptakan adalah dengan mendefinisikan method yang
disebut constructor. Method ini memiliki nama sama dengan nama kelas dan
dapat dipilih semua, sebagian atau tanpa parameter.
Apabila dalam mendifinisikan suatu kelas sekaligus didefinisikan
beberapa jenis constructor, yang sebagai akibatnya constructor tersebut
merupakan method-method dengan nama yang sama. Pendefinisian constructor
seperti ini dikenal dengan istilah constructor overloading.
Contoh:
Untuk kelas Anjing seperti pada BAB III dapat diubah definisinya dengan
menambah beberapa definisi konstructor :
class Anjing
{
private String Nama="NoName";
private int NoAnjing;
private static int Urut=0;
// constructor tanpa paramater
public Anjing()
{NoAnjing=++Urut;};
// data default
BAB IV : Constructor, Inheritance & Polymorphism
24
// constructor dengan 1 parameter
public Anjing(String n)
{this.Nama=n;
this.NoAnjing=++Urut;};
// constructor dengan 2 parameter
public Anjing(String n, int u)
{this.Nama=n;
this.NoAnjing=u;};
public void Gonggong(String S)
{ System.out.println(S+"! " + S + "!! " + S + " !!!");
}
public void SayHello()
{ System.out.println("Hello Saya Anjing No:" +NoAnjing+ " Nama
saya : "+Nama);
System.out.println(" ");
}
}
//untuk menguji unjuk kerja kelas Anjing
class Tes2Anjing
{ public static void main(String args[])
{
// memanggil constructor default
Anjing AnjingKU=new Anjing();
Anjing AnjingMU=new Anjing();
AnjingKU.Gonggong("GUG");
AnjingKU.SayHello();
AnjingMU.Gonggong("KAING");
AnjingMU.SayHello();
// memanggil constructor dengan 1 parameter
Anjing AnjingNYA=new Anjing("BULDOCK");
AnjingNYA.Gonggong("GHERR");
AnjingNYA.SayHello();
// memanggil constructor dengan 2 parameter
Anjing AnjingKITA=new Anjing("HERDER",700);
AnjingKITA.Gonggong("KOANG");
AnjingKITA.SayHello();
}
}
Selanjutnya program disimpan dengan nama file : Tes2Anjing.java.
Apabila program dicompile dan dijalankan hasilnya adalah :
GUG! GUG!! GUG!!!
Hello Saya Anjing No:1 Nama saya : NoName
KAING! KAING!! KAING!!!
Hello Saya Anjing No:2 Nama saya : NoName
BAB IV : Constructor, Inheritance & Polymorphism
25
GHERR! GHERR!! GHERR!!!
Hello Saya Anjing No:3 Nama saya : BULDOCK
KOANG! KOANG!! KOANG!!!
Hello Saya Anjing No:700 Nama saya : HERDER
Penjelasan:
Untuk definisi objek AnjingKU dan AnjingMU alokasi objek tanpa inisialisasi
sehingga digunakan data default, yang nampak paa nama :NoName. Untuk
definisi objek AnjingNYA digunakan pemanggilan constructor dengan satu
parameter yaitu nama anjing :”BULDOCK” sehingga nomor urut adalah 3. Setiap
objek diciptakan dengan construktor default atau 1 parameter maka atribut
NoANjingh akan naik 1. Perlu dicermati NoAnjing akan berurut sesuai dengan
berapa jumlah objek yang telah diciptakan, dengan memanfaatkan bantuan
atribut Urut yang bertipe static. Akhirnya untuk objek AnjingKITA digunakan 2
parameter yaitu nama dan nomor urut anjing. Dalam hal ini NoANjing tidak lagi
sesuai dengan o bjek yang diciptakan tetapi diset oleh parameter.
Objek this
Dalam difinisi constructor dijumpai kata kunci this.Nama dan
this.NoAnjing yang merupakan suatu cara untuk mengacu kepada atribut
dari objek yang sedang dikerjakan.
Inheritance
Salah satu kemampuan besar yang merupakan inovasi monumental
dalam teknik pemrograman berorientasi objek (OOP) adalah kemampuan suatu
kelas untuk mewariskan sifat (atribut) dan kemampuan (method) yang dimiliki
pada kelas turunannya. Hal ini memungkinkan pemrogram tidak perlu menulis
ulang program yang telah dibuat sebelumnya jika akan mengembangkan
programnya cukup dengan menambah kemampuan melalui proses pewarisan.
Konsep ini mengambil analogi pada biologi yang mengelompokkan binatang
atau tumbuhan berdasarkan kesamaan sifat dan perilakunya dalam :ORDO,
GENUS, SPECIES dan beberapa pembagian lain. Untuk lebih jelasnya simak
Gambar 4.1.
Pada kelas ANIMAL memiliki kemampuan : breathes (bernafas), moves
(dapat bergerak) dan reproduces (dapat memiliki keturunan) dan satu atribut
:mouth (punya mulut). Kelas ANIMAL memilki tiga kelas turunan, yaitu : BIRD,
FISH dan REPTILE. Kelas turunan ini kan mewarisi kemampuan kelas induknya
dan (umumnya) memilki kemampuan tambahan atau atribut tambahan, misalnya
untuk BIRD disamping memiliki kemampuan breathes, moves dan reproduces
juga memiliki kemampuan tambahan flies dan atribut tambahan has feathers.
Kelas BIRD masih memiliki sub-kelas CANARY yang memiliki tambahan
atribut isyellow dan tambahan kemampuan sing.
BAB IV : Constructor, Inheritance & Polymorphism
26
ANIMAL
breathes
moves
reproduces
mouth
BIRD
CANARY
flies
has feathers
FISH
swims
has scales
REPTILE ....
sing
isyellow
Gambar 4.1. Analogi inheritance OOP dalam biologi
Dalam OOP dua hal yang dapat diwariskan adalah :atribut dan method. Jika
diagram kelas dapat digambarkan sebagai Gambar 4.2.
ClasName
Dog
Attributes
Name
Weight
Color
Methods()
Bark()
Jump()
( a)
(b)
Gambar 4.2. (a) Diagram kelas, (b) model kelas Dog
Contoh :
Untuk memperjelas konsep pewarisan daimbil contoh dari buku CoreJava
definisi class Employee yang memiliki atribut :
name, salary dan hireDay
dan memiliki method :
constructor
print()
raiseSalary()
hireYear()
Selanjutnya dari class Employee akan didefinisikan suatu kelas turunannya,
yaitu kelas Manager yang memiliki tambahan atribut secretaryName, juga mengoverloading method print() dan method raiseSalary().
Definisi kelas (kelas Employee sebagai super class) dan sub kelas (kelas
Manager sebagai sub class) adalah sebagai berikut :
import corejava.*;
public class ManagerTest
BAB IV : Constructor, Inheritance & Polymorphism
{
public static void main(String[] args)
{ Employee[] staff = new Employee[3];
Manager boss =new Manager("Harry Hacker",100000,new
Day(1982,10,1));
boss.setSecretaryName("JEANET JACKSON");
staff[0] = boss;
staff[1] = new Employee("Carl Cracker", 75000,
new Day(1987,12,15));
staff[2] = new Employee("Tony Tester", 38000,
new Day(1990,3,15));
int i;
for (i = 0; i < 3; i++) staff[i].print();
System.out.println(" ");
for (i = 0; i < 3; i++) staff[i].raiseSalary(10);
for (i = 0; i < 3; i++) staff[i].print();
}
}
class Employee
{ public Employee(String n, double s, Day d)
{ name = n;
salary = s;
hireDay = d;
}
public void print()
{ System.out.println(name + " " + salary + " "
+ hireYear());
}
public void raiseSalary(double byPercent)
{ salary *= 1 + byPercent / 100;
}
public int hireYear()
{ return hireDay.getYear();
}
private String name;
private double salary;
private Day hireDay;
}
class Manager extends Employee
{ public Manager(String n, double s, Day d)
{ super(n, s, d);
secretaryName = "";
}
public void raiseSalary(double byPercent)
{ // add 1/2% bonus for every year of service
Day today = new Day();
double bonus = 0.5 * (today.getYear() - hireYear());
super.raiseSalary(byPercent + bonus);
}
public void setSecretaryName(String n)
{ secretaryName = n;
}
27
BAB IV : Constructor, Inheritance & Polymorphism
28
public void print()
{ super.print();
System.out.println("his secretary is : "+secretaryName);
}
public String getSecretaryName()
{ return secretaryName;
}
private String secretaryName;
}
Hasil program adalah sebagai berikut :
Harry Hacker 100000 1982
his secretary is : JEANET JACKSON
Carl Cracker 75000
1987
Tony Tester 38000 1990
Print() dari class Manager
Print() dari class Employee
Harry Hacker 120000 1982
his secretary is : JEANET JACKSON
Carl Cracker 825000 1987
Tony Tester 41800 1990
Polymorphism:
Satu lagi konsep penting dalam OOP adalah konsep polymorphism.
Dalam OOP polymorphism dimaksudkan bahwa perancang dapat mendifinisikan
suatu method dalam suatu kelas dengan nama yang sama dengan method
yang telah didefinisikan pada kelas induknya. Pendefinisian method pada kelaskelas turunan ini dapat dilakukan sepanjang garis “silsilah” pewarisan kelas,
sehingga suatu nama method dapat muncul berkali-kali pada suatu kelas, subkelas, sub-sub-kelas dan seterusnya. Pendefinisian method seperti ini juga
dikenal dengan istilah method overriding. Apabila method tersebut dipanggil
maka objectlah yang akan menentukan method mana yang harus dikerjakan.
Sebagai contoh dalam class Employee didefinisikan method print() :
class Employee
{ ...
public void print()
{ System.out.println(name + " " + salary + " "
+ hireYear());
}
Selanjutnya dalam class Manager yang merupakan turunan (lebih dikenal
dengan istilah sub-klas) juga didefinisikan method print() yang isinya berbeda
dengan method print() pada kelas Employee sbb :
class Manager extends Employee
{ ...
public void print()
{ super.print();
System.out.println("his secretary is : "+secretaryName);
}
BAB IV : Constructor, Inheritance & Polymorphism
29
Perhatikan isi method print() pada kelas Manager baris pertama memanggil
method print() dari object super (dalam hal ini objek super adalah objek
Employee, yang merupakan super kelas atau induk dari kelas Manager).
Setelah melaksanakan print() dari objek super dilanjtkan dengan mencetak
nama sekretaris. Dengan demikian pada saat pemanggilan method print() maka
kompiler akan melihat objek mana yang dimaksud, misalnya :
Manager boss =new Manager("Harry Hacker",100000,new
Day(1982,10,1));
boss.setSecretaryName("JEANET JACKSON");
staff[1] = new Employee("Carl Cracker", 75000,
new Day(1987,12,15));
Perhatikan bagian program: staff[i].print() dalam main()
Untuk i=0 maka staff[i] adalah objek dari kelas Manager sehingga method
print() yang dikerjakan adalah dari kelas Manager (dengan mencetak nama
sekretaris)
Untuk i=1 dan i=2 maka staff[i] adalah objek dari kelas Employee sehingga
method print() yang dikerjakan adalah method print() dari kelas Employee. Hal
ini ditunjukkan oleh output program.
Satu konsep yang menaraik adalah bahwa suatu objek dari super-kelas
Dapat diassign (diberikan )pada objek dari sub-kelas, seperti pernyataan :
staff[0]=boss ;
class Employee
class Manager
Hal ini tidak dapat berlaku sebaliknya. Pernyataan boss=staff[0] akan
menimbulkan error.
Dalam contoh program class Manager dan class Employee juga ada
polymorphism untuk method raiseSalary(double byPercent), dimana
untuk kelas Employee perhitungan adalah kenaikan salary adalah sebesar
(byPercent/100)*salary awal, sedangkan rumus untuk kelas Manager
(byPercent+bonus)/100 * salary awal. Sedangkan untk bonus dihitung
sebesar setengah masa kerja (bonus = 0.5 * (today.getYear() –
hireYear());
BAB IV : Constructor, Inheritance & Polymorphism
30
III. TUGAS
1. Definisikan suatu kelas Lingkaran dengan atribut R dan Luas serta method
Cetak() yang menghasilkan output :
LINGKARAN DENGAN JEJARI ... R LUASNYA ADALAH ....
Definisikan kelas turunan dari kelas Lingkaran yaitu kelas Tabung dengan
atribut tambahan TinggiTabung dan VolumeTabung serta overriding method
Cetak() dengan menghasilkan output :
“TABUNG DENGAN LUAS ALAS ... DAN TINGGI ... VOLUMENYA ADALAH
...
Testlah kemampuan kelas tesebut dengan class TesTab simpan dalam file
TesTab.java
Deklarasi objek lingkaran dan objek tabung adalah :
Lingkaran L1=new Lingkaran(2); /// lingkaran jejari 2
Tabung T1 = new tabung(2,4); // tabung Jejari alas 2 tinggi 4
Untuk memanggil method Cetak()
L1.Cetak()
T1.Cetak()
BAB V : Abstract Class dan Package
38
BAB V
ABSTRACT CLASS DAN PACKAGE
I. Tujuan :
Memahami dan mampu membedakan konsep class dan abstract class,
serta abstract method dan kapan konsep ini harus dipergunakan. Beberapa
pustaka dari class-class java didefinisikan sebagai class abstract yang
memberikan peluang kepada programmer untuk menurunkan sendiri class-class
dari class abstract yang tersedia.
II. Teori Singkat :
Pengertian abstract class :
Pada BAB II, III dan IV apabila kita mendefinisikan suatu kelas maka
kelas tersebut akan digunakan sebagai basis untuk pendefinisian objek-objek
dari class tersebut. Pada BAB III definisikan class Anjing dan class Mahasiswa
yang digunakan untuk menciptakan objek-objek dari kelas Anjing dan kelas
Mahasiswa. Pada BAB IV kita mendefinisikan class Employee dan sub-klass
turunannya yaitu class Manager yang masing-masing digunakan untuk
menciptakan objek.
Suatu kelas sangat mungkin didefinisikan sebagai super class yang
darinya diturunkan sub-klas sub-klas turunannya, akan tetapi kita tidak
bermaksud mendefinisikan objek dari super class tersebut. Dengan demikian
super class tersebut didefinisikan semata-mata hanya sebagai “payung” atau
“induk” dari klas-klas turunannya. Dari klas-klas turunan ini lah objek yang
sebenarnya akan diciptakan. Suatu super klass yang didefinisikan seperti ini
dinamakan sebagai class abstract.
Pengertian abstract method :
Di dalam class abstract dapat didefinisikan atribut-atribut dan methodmethod. Atribut dan method yang didefinisikan dalam klass abstract
dimaksudkan merupakan sesuatu yang umum dan terdapat pada sub-kelas subkelas turunannya. Suatu abstract method didefinisikan dengan cukup
mendeklarasikan namanya pada class abstract dan meng-override pada
masing-masing kelas turunannya dengan menyesuaikan dengan kebutuhan
kelas turunannya tersebut. Suatu class harus didefinisikan sebagai class
abstract apabila minimal ada satu method yang didefinisikan sebagai abstract
method.
Sebagai gambaran diambilkan contoh suatu class Message, yang
memiliki sub-class :textMessage, voiceMessage dan faxMessage. Pada setiap
jenis sub-klas ada common atribut, yang sama dan berlaku pada setiap subclass yaitu atribut :sender (pengirim). Pada setiap sub-class juga ada common
method yang berlaku sama yaitu :getSender(). Untuk method play(), yang
ada pada setiap sub-class tetapi memiliki implementasi yang berbeda
BAB V : Abstract Class dan Package
39
Message
sender
getSender()
play( )
TextMessage
VoiceMessage
text
filename
FaxMessage
Gambar 5.1. Hierarchi class abstract Message dan turunannya
Kode program untuk implementasi adalah sebagai berikut (Horstmann, 1996)
/**
* @version 1.00 07 Feb 1996
* @author Cay Horstmann
*/
import java.io.*;
import sun.audio.*;
import corejava.*;
public class MailboxTest
{ public static void main(String[] args)
{ Mailbox mbox = new Mailbox();
while (true)
{ System.out.println(mbox.status());
String cmd = Console.readString
("play, text, voice, quit> ");
if (cmd.equals("play"))
{ Message m = mbox.remove();
if (m != null)
{ System.out.println("From: " + m.getSender());
m.play();
}
}
else if (cmd.equals("text"))
{ String from = Console.readString("Your name: ");
boolean more = true;
String msg = "";
System.out.println
("Enter message, 'exit' when done");
while (more)
{ String line = Console.readString();
if (line.equals("exit"))
more = false;
else msg = msg + line + "\n";
}
mbox.insert(new TextMessage(from, msg));
}
else if (cmd.equals("voice"))
{ String from = Console.readString("Your name: ");
BAB V : Abstract Class dan Package
String msg
= Console.readString("Audio file name: ");
mbox.insert(new VoiceMessage(from, msg));
}
else if (cmd.equals("quit"))
System.exit(0);
}
}
}
abstract class Message
{ public Message(String from) { sender = from; }
public abstract void play();
public String getSender() { return sender; }
private String sender;
}
class TextMessage extends Message
{ public TextMessage(String from, String t)
{ super(from); text = t; }
public void play() { System.out.println(text); }
private String text;
}
class VoiceMessage extends Message
{ public VoiceMessage(String from, String f)
{ super(from); filename = f; }
public void play()
{ AudioPlayer ap = AudioPlayer.player;
try
{ AudioStream as
= new AudioStream(new FileInputStream(filename));
ap.start(as);
}
catch(IOException e) {}
}
private String filename;
}
class Mailbox
{ public Message remove()
{ if (nmsg == 0) return null;
Message r = messages[out];
nmsg--;
out = (out + 1) % MAXMSG;
return r;
}
public void insert(Message m)
{ if (nmsg == MAXMSG) return;
messages[in] = m;
nmsg++;
in = (in + 1) % MAXMSG;
}
40
BAB V : Abstract Class dan Package
41
public String status()
{ if (nmsg == 0) return "Mailbox empty";
else if (nmsg == 1) return "1 message";
else if (nmsg < MAXMSG) return nmsg + " messages";
else return "Mailbox full";
}
private
private
private
private
private
final int MAXMSG = 10;
int in = 0;
int out = 0;
int nmsg = 0;
Message[] messages = new Message[MAXMSG];
}
Bila program dijalankan hasilnya adalah :
Gambar 5.2. Hasil output program MailboxTest
Program diatas belum mengimplementasikan class faxMessage dan hanay
mengimplementasikan class textMessage dan voiceMessage serta class
program utamanya. Jika definisi klas-klas dianalisis terlihat bahwa untuk kelas
abstract Message memiliki method abstract play() yang belum
diimplementasikan dan dicadangkan untuk diimplementasikan (di-override) dari
sub-klas turunannya, mengingat play bagi message text cukup dengan
mencetak text tersebut sedang play bagi message bagi voice perlu
mendefinisikan objek Audioplayer dan memainkan file audio tersebut.
Package :
Suatu package adalah “bendel” atau pengelompokan kelas-kelas
berdasarkan kesamaan atau kemiripan fungsi. Program java memiliki enam
paket dalam java class libraray. Pada puncak hierarchi :java adalah suatu kelas
BAB V : Abstract Class dan Package
42
teratas yang darinya semua kelas diturunkan. Kelas-kelas yang diturunkan
dikelompokkan menjadi 6 package besar , yaitu :
java.io
java.lang
java.applet
java.awt
java.net
java.util
Pada beberapa percobaan terdahulu telah dijumpai beberapa definisi
class yang diawali dengan kata kunci :import. Kata kunci ini memberitahukan
bahwa definisi class yang kita buat akan melibatkan kelas-kelas lain yang
terhimpun didalam package yang kita import. Hal ini telah kita lakukan misalnya
:import corejava.*
Pelibatan kelas dari package dapat hanya sebagian kelas (atau sub klas)
atau semuanya, seperti contohnya :
import java.io.*;
(semua kelas dari package java.io dapat diugunakan)
import java.util.Properties; (hanya class Properties dari package
java.util)
import java.awt.image.ColorModel ; (sub klas ColorModel dari class
image dari package awt).
Pembuatan suatu package dianjurkan untuk pemrograman skala besar,
dimana kita mendefinisikan banyak kelas dengan pengelompokan sesuai tujuan.
Pada saat pembuatan suatu package maka kata package harus menjadi
statemen pertama, misalnya :
package MyFirstpackage
public class MyFirstClass {
....}
setiap class yang menjadi anggota paket didefinisikan dengan diawali dengan
kata package dilanjutkan dengan definisi kelas seperti biasa. Kelas-kelas yang
menjadi anggota paket dapat disimpan dalam file-file yang terpisah. File-file java
yang merupakan definisi class dari anggota package disimpan dalam satu
directori yang sama dengan nama directori adalah nama package tersebut.
Contoh:
Akan didefinisikan suatu package bernama : geometri
Berisi dua kelas : lingkaran dan kelas :epp (empat persegi panjang)
Definisi kelas lingkaran :
package geometri;
public class lingkaran
{
public lingkaran(double r)
{jari=r;
luas=3.14*jari*jari;
keliling=2*3.14*jari;
}
BAB V : Abstract Class dan Package
43
public double getLuas() {return luas;}
public double getKeliling(){return keliling ;}
public void CetakLuas()
{System.out.println("Luas LINGKARAN = "+luas);
}
public void CetakKeliling()
{System.out.println("Keliling LINGKARAN = "+keliling);
}
private double jari;
private double luas;
private double keliling;
}
Sedangkan definisi kelas : epp
package geometri;
public class epp
{ double panjang;
double lebar;
double luas;
double keliling;
public epp(double p, double l)
{panjang=p; lebar=l;
luas=p*l;
keliling=(p+l)*2;}
public double getLuas() {return luas;}
public double getKeliling(){return keliling;}
public void CetakLuas()
{System.out.println("Luas EPP = "+luas); }
public void CetakKeliling()
{System.out.println("Keliling EPP = "+keliling);
}
}
Selanjutnya kedua file disimpan dalam satu directori bernama :geometri
Untuk menggunakan paket tersebut didefinisikan kelas utama dengan nama
tesGeo.java sebagai berikut :
import geometri.*;
class tesGeo
{ public static void main(String args[])
{
lingkaran R1 = new lingkaran(1);
epp E1=new epp(5,10);
R1.CetakLuas();
R1.CetakKeliling();
E1.CetakLuas();
E1.CetakKeliling();
}
}
BAB V : Abstract Class dan Package
44
Hasil program adalah seperti gambar 5.3.
Gambar 5.3. Hasil penggunaan package geometri
III. TUGAS
1. Definisikan suatu class abstract bernama :class Orang dengan ketentuan
:
Dalam kelas tersebut ada atribut :Nama (String: yaitu nama orang
tersebut) dan Umur (int :yaitu umur orang tersebut).
Constructor dari class Orang didefinisikan dalam class Orang
menginisialisasi Nama dan Umur.
Didefinisikans method abstract Cetak(), yang akan di-override
dalam kelas turunannya.
Definisikan dua buah kelas turunan dari class Orang yaitu class :Pegawai
dan class Mahasiswa.
Untuk class Pegawai dengan ketentuan :
Dalam kelas Pegawai ada atribut tambahan yaitu NIP dan Gaji
Mendefinisikan method NaikGaji(), yaitu untuk menaikkan gaji
sebesar :10%
Mendefinisikan method Cetak() untuk mencetak :NIP, Nama,
Umur (int) dan Gaji (double)
Untuk class Mahasiswa dengan ketentuan :
Dalam kelas Mahasiswa ada atribut tambahan yaitu NoMhs
(String), Masa studi (int) dan IP (double)
Mendefinisikan method Cetak() untuk mencetak :NoMhs, Nama,
Umur, Masa studi dan IP
Ujilah kemampuan klas tersebut dengan mendefinisikan klass
TestOrang.java untuk program utamanya.
BAB V : Abstract Class dan Package
39
PERCOBAAN VI
PEMROGRAMAN DENGAN awt
I. Tujuan :
Pengenalan dasar mengenai suatu paket yang sangat luas penerapannya
yang dimiliki oleh program JAVA, yaitu package java.awt. Paket ini,
AWT=Abstract Window Toolkit, memungkinkan pemrogram merancang aplikasi
atau aplet dengan basis grafik, termasuk didalamnya Image, dan intensif
menggunakan prosedur-prosedur standard window dan antar muka grafis
seperti komponen-komponen button, textedit, checkbox, slider dan lain-lain.
Dengan AWT dimungkinkan pula kita untuk merancang animasi. Dalam
percobaan ini hanya akan dikenalkan beberapa komponen dasar grafis.
II. Teori Singkat :
AWT=Abstract Window Toolkit adalah paket JAVA yang didalamnya
terdefinisi banyak kelas antara lain : Frame, Graphics, Font, Image dan lainlain.
Class Frame
Kelas Frame merupakan class yang darinya dapat diturunkan sebuah
frame (jendela). Di atas jendela ini dapat dilakukan berbagai pekerjaan grafis
seperti membuat garis, kotak, lingkaran, elips, poligon, menulis teks atau
menempatkan komponen antar muka grafis seperti button, check box, radio
button dan lain-lain. Contoh berikut program untuk menciptakan frame tersebut.
import java.awt.*;
public class g1 extends Frame
{
public static void main(String args[])
{
Frame f = new Frame();
f.resize(300,200);
f.show();
}
}
Hasil dari program adalah seperti gambar 6.1
Gambar 6.1. Frame atau windows ( 300 point x 200 point)
Windows tersebut belum dapat ditutup dengan mengklik mouse pada tanda x
dipojok layar. Agar windows tersebut dapat ditutup dengan Ctrl-Alt-Del diakhiri
dengan EndTask.
Agar suatu window dapat ditutup dengan normal (dengan mengklik x dipojok
kanan atas), perlu didefinisikan suatu method handleEvent() dari windows
sebagai berikut :
BAB V : Abstract Class dan Package
40
public boolean handleEvent(Event evt)
{ if (evt.id == Event.WINDOW_DESTROY) System.exit(0);
return false;
}
Class Font dan class Graphics
Kelas Font memungkinkan kita mengatur jenis huruf, ukuran huruf, model
huruf (tebal,italic dan lain-lain). Contoh pengaturan huruf adalah :
setFont(new Font("Times", Font.BOLD, 18)
model huruf Times New Romans, huruf tebal 18 point (huruf normal 12
point)
Kelas Graphics merupakan class yang memungkinkan kita untuk menulis
teks, menggambar garis, kotak lingkaran dan lain-lain. Beberapa method dalam
class Graphics antara lain :
drawString(String s, x,y) : cetak string dikoordinat x,y
drawLine(x1,y1,x2,y2)
: cetak garis
drawRect(x1,y1,x2,y2)
: cetak kotak
fillRect(x1,y1,x2,y2)
: mengisikotak
drawOval(x1,y1,width,height) : cetak lingkaran atau oval
drawRoundRect(x1,y1,x2,y2): cetak kotak pojoknya bulat
fillRoundRect(x1,y1,x2,y2):mengisi kotak
drawPolygon(x1,y1,x2,y2): mencetak poligon
drawArc(x,y,widht,height,startangle,stopangle)
Untuk menuliskan suatu string di windows pada posisi kolom x dan baris y.
Koordinat layar windows adalah :0,0 berada pada pojok kiri atas; x=jumlah point
kearah kanan dan y=jumlah point kearah bawah (vertikal), seperti ti pada
gambar 6.2.
width (x)
(0,0)
height (y)
Gambar 6.2. Koordinat layar grafik
Untuk drawOval apabila widht dan height sama akan menghasilkan lingkaran
dan apabila tidak sama akan menghasilkan bentuk oval.
Contoh porgram yang melibatkan method tersebut adalah seperti class g2
berikut :
import java.awt.*;
public class g2 extends Frame
{ public g2()
{setTitle("Kotak bertulisan");}
public void paint(Graphics g)
//untuk judul windows
BAB V : Abstract Class dan Package
41
{ g.drawRect(10,10,100,60);
g.drawRect(8,8,104,64);
g.drawString("HELLO MAS ",30,30);
g.setFont(new Font("Times", Font.BOLD, 18));
g.drawString("JAVA ",30,50);
}
public boolean handleEvent(Event evt)
{ if (evt.id == Event.WINDOW_DESTROY) System.exit(0);
return false;
}
public static void main(String args[])
{ Frame f = new g2();
f.resize(300,200);
f.show();
}
}
Hasil program g2.java adalah sebagai gambar 6.3. berikut :
Gambar 6.3. Hasil program g2.java
Class Image
Salah satu class yang menarik dalam awt adalah class abstract Image
yang memungkinkan kita untuk menampilkan dan memanipulasi data Image
dalam berbagai format, seperti GIF, SPEG,BMP dan lain-lain
Beberapa method yang penting yang berhubungan dengan class Image antara
lain :
Toolkit.getDefaultToolkit().getImage(nmFILE)
yaitu untuk mengambil gambar yang tersimpan dalam file nmFILE.
Dalam nmFILE termuat lengkap dengan nama directori dan subdirectory, kecuali
file gambar kita ada pada directory yang sama dengan file program.
drawImage(objekgambar,x,y,skalaX,skalaY,pengamatGambar);
Parameter pertama objekgambar adalah nama objek gambar yang telah
diambil dari file ke memory dengan method getImage(). Parameter kedua dan
ketiga :x,y adalah koordinat pojok kiri atas dari peletakan gambar pada windows.
Paramater kempat dan kelima adalah sekala horisontal dan vertikal dalam
satuan point dari gambar.
Contoh berikut adalah penggunaan method tersebut :
import java.awt.*;
import java.awt.Image.*;
BAB V : Abstract Class dan Package
42
public class Poto extends Frame
{
String nmFILE="Sylvestr.GIF";
Image gb=Toolkit.getDefaultToolkit().getImage(nmFILE);
public void paint(Graphics g)
{ setTitle("Gambar Bintang Pilm RAmbo");
g.setColor(Color.magenta);
g.drawString("HELLO MAS ",50,260);
g.drawImage(gb,20,20,this);
setFont(new Font("Times", Font.BOLD, 18));
g.setColor(Color.red);
g.drawString("RAMBO !!" ,50,280);
}
public boolean handleEvent(Event evt)
{ if (evt.id == Event.WINDOW_DESTROY) System.exit(0);
return false;
}
public static void main(String args[])
{
Frame f = new Poto();
f.resize(250,350);
f.show();
}
}
Dalam progfram di atas drawImage() tidak menentukan skala gambar, sehingga
gambar yang ditampilkan adalah sesuai dengan ukuran asli filenya.
Adapun output program adalah sebagai dalam Gambar 6.4.
Gambar 6.4. Hasil image
BAB V : Abstract Class dan Package
43
Untuk melihat efek penskalaan program diatas dapat dimodifikasi dengan
mengganti gambar dan mencetak dengan beberapa penskalaan.
import java.awt.*;
import java.awt.Image.*;
public class Poto extends Frame
{
String nmFILE="Dessyrat.GIF";
Image gb=Toolkit.getDefaultToolkit().getImage(nmFILE);
public void paint(Graphics g)
{ setTitle("Gambar 5 buah Dessy");
g.drawImage(gb,20,20,50,60,this);
g.drawImage(gb,80,20,50,60,this);
g.drawImage(gb,140,20,70,90,this);
g.drawImage(gb,20,110,90,120,this);
g.drawImage(gb,120,130,90,50,this); // skala tak imbang
}
public boolean handleEvent(Event evt)
{ if (evt.id == Event.WINDOW_DESTROY) System.exit(0);
return false;
}
public static void main(String args[])
{ Frame f = new Poto();
f.resize(250,300);
f.show();
}
}
Hasil program terlihat seperti pada gambar 6.5.
Gambar 6.5. Hasil penskalaan image
Hal yang perlu diperhatikan dalam pensklaan adalah keseimbangan antara lebar
(width) dan tinggi (height) darai gambar, apabila ini tidak seimbang akan dapat
BAB V : Abstract Class dan Package
44
“merusak” gambar seperti tampak pada Gambar 6.5. untuk skala yang terakhir,
lebar lebih besar dari tinggi, yang tidak sesuai dengan gambar aslinya.
Antar Muka Grafis
Kelas awt disamping menyediakan kemampuan untuk menggamabr bentukbentuk geometris dan foto juga menyediakan kemampuan untuk antar muka
grafis. Karena keterbatasan ruang pada kesempatan ini dicoba beberapa
komponen yang akan dicoba adalah komponen :Botton, Menu dan EditText.
Button :
Program untuk peragaan button adalah :
import java.awt.*;
public class ButtonTest extends Frame
{ public ButtonTest()
{ setTitle("ButtonTest");
setLayout(new FlowLayout());
add(new Button("Yes"));
add(new Button("No"));
add(new Button("Ok"));
add(new Button("Cancel"));
add(new Button("Abort"));
add(new Button("Retry"));
add(new Button("Ignore"));
}
public boolean handleEvent(Event evt)
{ if (evt.id == Event.WINDOW_DESTROY) System.exit(0);
return super.handleEvent(evt);
}
public boolean action(Event evt, Object arg)
{ if (arg.equals("Yes")) setBackground(Color.yellow);
else if (arg.equals("No")) setBackground(Color.blue);
else if (arg.equals("Ok")) setBackground(Color.orange);
else if (arg.equals("Cancel"))
setBackground(Color.cyan);
else if (arg.equals("Abort"))
setBackground(Color.pink);
else if (arg.equals("Retry"))
setBackground(Color.red);
else if (arg.equals("Ignore"))
setBackground(Color.white);
else return false;
repaint();
return true;
}
public static void main(String[] args)
{ Frame f = new ButtonTest();
f.resize(320, 200);
f.show();
}
}
Hasil adalah sebagai berikut :
BAB V : Abstract Class dan Package
45
Gambar 6.6. Hasil program ButtonTest
Setiap tombol apabila di klik akan menyebabkan warna Frame berubah, tombol
“Yes” adalah kuning, tombol “No” adalah biru, tombol “Ok” orange dan
seterusnya.
III. Tugas
1. Buatlah program untuk menggambar mobil sebagai berikut :
2. Buatlah program dengan komponen antar muka grafis untuk membaca
Panjang dan Lebar suatu empat persegi panjang dengan EditText dan
menampilkan Luas dan Keliling. Layout sebagai berikut :
Kotak untuk memasukkan Panjang dan Lebar adalah EditText. Tombol
HitungLuas dan HitungKell apabila diklik maka pada kotak luas dan kotak
keliling akan muncul hasilnya apabila dalam kotak Panjnag dan Lebar ada
datanya. Bila tombol Clear di klik semua EditText dibersihkan.
PROGRAM HITUNG LUAS DAN KELILING
PANJANG:
:
LEBAR:
LUAS :
KELILING:
:
HitungLuas
HitungKell
Clear
Download