Download Modul Praktikum Pemrograman Berorientasi Objek

Document related concepts
no text concepts found
Transcript
Modul Praktikum
Pemrograman Berorientasi Objek
Oleh:
Dedi Gunawan, S.T., M.Sc.
Arkham Zahri R , S.Kom., M.Eng.
Program Studi Informatika
Fakultas Komunikasi dan Informatika
Universitas Muhammadiyah Surakarta
PENGANTAR
Pemrograman berorientasi objek merupakan konsep pemrograman yang menggambarkan suatu proses yang terlibat di dalam program dianalogikan sebagai sebuah objek
yang saling berinteraksi satu sama lain.
Objek adalah kata kunci untuk memahami konsep pemrograman berorientasi objek
(PBO). Objek di dalam PBO sendiri diciptakan berdasarkan deskripsi dan sifat-sifat dari
Objek nyata yang ada di kehidupan nyata kita. Seperti kita ketahui bersama, di dalam
lingkungan sekitar, kita dapat dengan mudah menemukan suatu objek semisal : Mobil,
Sepeda, Kucing, atau Pohon.
Kesemua Objek riil di atas sama-sama meiliki memiliki dua hal yang melekat padanya, yaitu berupa: kondisi (state) dan perilaku (behavior). Perilaku identik dengan
kata kerja dan kondisi identik dengan kata sifat, atau kata benda dari objek yang bersangkutan. Mobil memiliki kondisi berupa warna, umur, posisi persneling, kecepatan,
dll, dan perilaku berupa injak gas, injak rem, ganti persneling, ganti warna cat, dll.
Serupa dengan mobil, Objek sepeda memiliki kondisi berupa posisi gigi, kecepatan, dll
dan perilaku berupa ganti gigi, naikan kecepatan, pengereman, dll . Sedangkan Objek
kucing memiliki kondisi berupa warna bulu, jenis, nama, dll dan perilaku berupa meong,
mencakar, dll.
Objek yang digunakan di dalam pemrograman (Software Objek) secara konsep memiliki kesamaan dengan objek riil. Objek di dalam OOP memiliki variabel (field) dan
fungsi (method). Variabel sebagai padanan dari kondisi dan fungsi sebagai padanan dari
perilaku. Gambar 2.1 di bawah ini mengambarkan secara visual suatu Software Objek
dan contoh dari Objek Sepeda yang telah dimodelkan ke dalam Software Objek. Salah
satu bahasa pemrograman yang mendukung konsep pemrograman berorientasi objek dan
yang paling banyak digunakan adalah Java. Java sendiri sebenarnya merupakan sebuah
platform dimana program-program lain yang akan dijalankan harus menggunakan fitur
dari java itu sendiri. Java memiliki arsitektur yang tidak memiliki dependencies atau
i
ii
ketergantungan terhadap sistem operasi, sehingga apapun jenis sistem operasi yang digunakan kita masih bisa menjalankan program java tanpa harus mengganti kode program
java-nya. Arsitektur dari JAVA Environment bisa dilihat pada Gambar 1.1.
Java Platform
Java platform merupakan nama plaform komputer yang diberikan oleh oracle yang
bisa membantu para pengguna dalam mengembangkan dan menjalankan aplikasi yang
berbasis java. selain itu java platform juga menyediakan berbagai perlengkapan yang
memberikan kemudahan bagi para programmer dalam membuat program sehingga pekerjaan merekan menjadi lebih efisien.
Komponen java platform
1. Java Runtime Environmental (JRE) merupakan lingkungan komputasi yang diperlukan untuk menjalankan aplikasi java dan applets.
2. JAVA Development Kit (JDK) merupakan perlengkapan yang digunakan untuk
membuat aplikasi berbasis java dan applets. ketikan kita melakukan instalasi JDK
ke dalam sistem komputer maka secara otomatis JRE juga akan terinstal.
Tools Praktikum
1. Java SDK 7 (http://www.oracle.com/technetwork/java/javase/downloads/jdk7downloads-1880260.html)
2. Eclipse IDE (http://www.eclipse.org/downloads/packages/)
3. Netbeans IDE (https://netbeans.org/downloads/)
4. DIA (http://sourceforge.net/projects/dia-installer/)
Daftar Isi
1 Pengenalan Java
2 Class dan Object
2.1 Landasan Teori . . . . . . .
2.1.1 CLASS . . . . . . .
2.1.2 Objek . . . . . . . .
2.1.3 UML Class diagram
2.2 Latihan . . . . . . . . . . .
2.3 Pekerjaan Rumah . . . . .
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3 Class Members : Variabel dan Method
3.1 Variabel/Field dan Method . . . . . .
3.2 Variabel . . . . . . . . . . . . . . . .
3.2.1 Local variabel . . . . . . . . .
3.2.2 Instance Variable . . . . . . . .
3.2.3 Static Variable . . . . . . . . .
3.3 Method / Fungsi . . . . . . . . . . . .
3.3.1 Method dengan nilai return . .
3.3.2 Method Void . . . . . . . . . .
4 Penentu Akses / Access Modifier
4.1 Default Modifier . . . . . . . .
4.1.1 Latihan . . . . . . . . .
4.2 Public Modifier . . . . . . . . .
4.2.1 Latihan . . . . . . . . .
4.3 Protected Modifier . . . . . . .
.
.
.
.
.
.
.
.
.
.
iii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
5
6
7
9
10
.
.
.
.
.
.
.
.
12
12
12
13
14
15
15
16
18
.
.
.
.
.
19
20
20
20
21
21
DAFTAR ISI
4.4
iv
4.3.1 Latihan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Private Modifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.4.1 Latihan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5 Constructor
5.1 Default constructor . . .
5.1.1 Latihan . . . . . .
5.2 Parameterized constructor
5.2.1 Latihan . . . . . .
5.3 Overloading constructor .
5.3.1 Latihan . . . . . .
6 Inheritance / Pewarisan
6.1 Tipe inheritance . . . . .
6.2 Single inheritance . . . .
6.3 Multilevel Inheritance . .
6.4 Hierarchical inheritance .
6.4.1 Overriding Method
6.5 Latihan . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
23
23
24
24
25
25
26
.
.
.
.
.
.
27
28
29
29
30
31
32
7 Encapsulation / Enkapsulasi
33
7.1 Private modifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
7.2 Latihan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
8 Polymorphism
36
8.1 Runtime Polymorphism . . . . . . . . . . . . . . . . . . . . . . . . . . 37
8.2 Tugas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
9 Abstract Class
9.1 Objek abstract class
9.2 Method abstract . .
9.3 Latihan . . . . . . .
9.4 Tugas . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
10 Interface
10.1 Mendeklarasikan Interface
10.2 Implementasi Interface . .
10.2.1 Percobaan . . . .
10.3 Latihan . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
40
40
42
43
43
.
.
.
.
44
44
45
46
47
DAFTAR ISI
11 Nested Class
11.1 Inner Class (Non-Static Nested Class) . . . .
11.1.1 Mengakses Private Member/Variabel
11.2 Static Nested Class . . . . . . . . . . . . .
11.3 Latihan . . . . . . . . . . . . . . . . . . . .
v
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
48
49
50
51
51
12 Java Swing
53
12.1 Komponen Swing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
12.2 Setting Up Top-Level Containers . . . . . . . . . . . . . . . . . . . . . 54
BAB
1
Pengenalan Java
Pemrograman berorientasi objek merupakan konsep pemrograman yang menggambarkan suatu proses yang terlibat di dalam program dianalogikan sebagai sebuah objek
yang saling berinteraksi satu sama lain.
Objek adalah kata kunci untuk memahami konsep pemrograman berorientasi objek
(PBO). Objek di dalam PBO sendiri diciptakan berdasarkan deskripsi dan sifat-sifat dari
Objek nyata yang ada di kehidupan nyata kita. Seperti kita ketahui bersama, di dalam
lingkungan sekitar, kita dapat dengan mudah menemukan suatu objek semisal : Mobil,
Sepeda, Kucing, atau Pohon.
Kesemua Objek riil di atas sama-sama meiliki memiliki dua hal yang melekat padanya, yaitu berupa: kondisi (state) dan perilaku (behavior). Perilaku identik dengan
kata kerja dan kondisi identik dengan kata sifat, atau kata benda dari objek yang bersangkutan. Mobil memiliki kondisi berupa warna, umur, posisi persneling, kecepatan,
dll, dan perilaku berupa injak gas, injak rem, ganti persneling, ganti warna cat, dll.
Serupa dengan mobil, Objek sepeda memiliki kondisi berupa posisi gigi, kecepatan, dll
dan perilaku berupa ganti gigi, naikan kecepatan, pengereman, dll . Sedangkan Objek
kucing memiliki kondisi berupa warna bulu, jenis, nama, dll dan perilaku berupa meong,
mencakar, dll.
Objek yang digunakan di dalam pemrograman (Software Objek) secara konsep memiliki kesamaan dengan objek riil. Objek di dalam OOP memiliki variabel (field) dan
fungsi (method). Variabel sebagai padanan dari kondisi dan fungsi sebagai padanan dari
perilaku. Gambar 2.1 di bawah ini mengambarkan secara visual suatu Software Objek
dan contoh dari Objek Sepeda yang telah dimodelkan ke dalam Software Objek. Salah
satu bahasa pemrograman yang mendukung konsep pemrograman berorientasi objek dan
yang paling banyak digunakan adalah Java. Java sendiri sebenarnya merupakan sebuah
1
BAB 1. PENGENALAN JAVA
2
platform dimana program-program lain yang akan dijalankan harus menggunakan fitur
dari java itu sendiri. Java memiliki arsitektur yang tidak memiliki dependencies atau
ketergantungan terhadap sistem operasi, sehingga apapun jenis sistem operasi yang digunakan kita masih bisa menjalankan program java tanpa harus mengganti kode program
java-nya. Arsitektur dari JAVA Environment bisa dilihat pada Gambar 1.1.
Java Platform
Java platform merupakan nama plaform komputer yang diberikan oleh oracle yang
bisa membantu para pengguna dalam mengembangkan dan menjalankan aplikasi yang
berbasis java. selain itu java platform juga menyediakan berbagai perlengkapan yang
memberikan kemudahan bagi para programmer dalam membuat program sehingga pekerjaan merekan menjadi lebih efisien.
Komponen java platform
1. Java Runtime Environmental (JRE) merupakan lingkungan komputasi yang diperlukan untuk menjalankan aplikasi java dan applets.
2. JAVA Development Kit (JDK) merupakan perlengkapan yang digunakan untuk
membuat aplikasi berbasis java dan applets. ketikan kita melakukan instalasi JDK
ke dalam sistem komputer maka secara otomatis JRE juga akan terinstal.
Gambar 1.1: Arsitektur JAVA
Untuk melakukan pengecekan apakah komputer yang kita gunakan sudah memiliki
java platform atau belum, kita bisa mengetikkan kata java pada command prompt dan
tekan enter. Jika JDK sudah terinstal maka tampilan command prompt akan seperti
berikut
BAB 1. PENGENALAN JAVA
3
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\Dell>java
Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
where options include:
-d32 use a 32-bit data model if available
-d64 use a 64-bit data model if available
-server to select the "server" VM
The default VM is server.
Salah satu komponen dari JRE yang paling penting adalah Java Virtual Machine
(JVM). JVM berfungsi sebagai interpreter yang mentransformasikan byte-code menjadi
seperti native kode bagi sistem operasi. Byte-code merupakan file hasil kompilasi dari
file .java yang berekstensi .class, dimana file .class ini akan bisa terkompilasi disemua
sistem operasi sehingga programmer tidak perlu menulis ulang kode program pada sistem operasi yang berbeda. untuk melakukan kompilasi kode program java, kita perlu
membuka command prompt dan ketikkan perintah
javac namaprogram.java
Setelah kode java terkompilasi maka akan muncul satu file byte-code yang nama
filenya sama dengan nama file kode programmnya yaitu Program.class yang letaknya
berada pada folder yang sama dengan program java-nya.
Contoh kode java Ketikkan kode program di bawah ini dan simpan dengan nama
Program.java. Catatan : Nama file java harus sama dengan nama kelas yang ada di
kode program.
1
2
3
4
5
6
7
package modul.praktikum.pbo;
public class Program {
public static void main(String[] args) {
System.out.println("Assalamualaikum");
}
}
Kompile kode java yang sudah anda tulis dengan cara seperti gambar di bawah ini.
Jika kompilasi berhasil maka tampilan command prompt akan seperti gambar di atas
dimana command prompt tidak menampilkan adanya error. Untuk memastikan apakan
BAB 1. PENGENALAN JAVA
4
Gambar 1.2: Kompilasi Kode JAVA
file byte-code sudah tercipta atau belum kita bisa melakukan pengencekan pada folder
dimana file java disimpan. Buka command prompt dan ketikkan perintah dir atau buka
melalui windows explorer untuk melihat file.class.
Gambar 1.3: File class berhasil dibuat
Pada gambar di atas terlihat bahwa file yang bernama Program.class berada pada lokasi folder yang sama, yang berarti proses kompilasi program berhasil. File Program.class
inilah yang nantinya bisa dijalankan diberbagai jenis sistem operasi tanpa perlu mengubah atau menulis ulang kode Program.java. Proses kompilasi dari byte code menjadi
program yang bisa dilihat hasilnya melibatkan JVM interpreter.
Gambar 1.4: Proses pembacaan byte code
BAB
2
Class dan Object
2.1
2.1.1
Landasan Teori
CLASS
Class adalah cetak biru ( blueprint ) dari objek. Dengan kata lain, suatu objek dapat
dibuat/diturunkan dari suatu model rancangan yang disebut dengan class. Berdasarkan
definisi ini, maka suatu class cukup dibuat hanya satu buah saja dan dari class tersebut
dapat dibuat/diciptakan beberapa objek (puluhan atau bahkan ratusan) yang memiliki
sifat yang sama.
Gambar 2.1: Model Objek
Jadi sebuah kelas bisa kita analogikan seperti cetakan roti, dari cetakan roti tersebut
kita bisa membuat berbagai jenis roti yang beraneka rasa dan warna.
5
BAB 2. CLASS DAN OBJECT
2.1.2
6
Objek
Objek merupakan representasi nyata dari sebuah kelas, yang bisa kita artikan sebagai
contoh nyata dari kelas. Kita tidak bisa membuat objek kalau tidak ada kelas yang bisa
dijadikan sebagai panduan, sehingga kelas harus diciptakan terlebih dahulu sebelum suatu
objek dibuat . Untuk membuat ”objek” roti dari kelas roti di atas, kita harus membuat
cetakan roti terlebih dahulu dan kita hanya memerlukan satu cetakan roti saja. Bentuk
umum dari sebuah roti biasanya memiliki warna, rasa, harga dan berat, sehingg semua
roti yang kita buat pasti akan memiliki karakter yang sama. Di dalam pemrograman
berorientasi objek, bentuk, ukuran dan berat disebut sebagai properti atau field. Setiap
field memiliki tipe yang berbeda satu sama lain, misalnya berat yang nantinya berisi
angka, warna yang berisi nama-nama warna dan lain sebagainya.
Untuk lebih jelasnya silahkan tulis dan jalankan contoh kode dibawah ini :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class Rotiku {
String warna;
String rasa;
int berat;
double harga;
void beriWarna(String warnaRoti){
warna = warnaRoti;
}
void beriRasa(String rasaRoti){
rasa = rasaRoti;
}
void timbangBerat (int beratRoti){
berat = beratRoti;
}
void hargaJual (double hargaRoti){
harga = hargaRoti;
}
void infoRoti (){
System.out.println(
"Warna Roti : "+warna+"\n"+
"Rasa Roti : "+rasa+"\n"+
"Berat Roti : "+berat+"\n"+"gr"+
"Harga Roti : Rp."+harga);
}
}
BAB 2. CLASS DAN OBJECT
7
Kode di atas merupakan template atau bentuk abstrak dari roti akan tetapi kode
diatas tidak bisa dijalankan untuk menampilkan informasi dari objek roti, sehingga ketika
kita ingin menampilkan informasi dari objek roti menggunakan kelas di atas kita harus
membuat sebuah fungsi main atau fungsi utamanya. Fungsi main bisa dibuat di dalam
kelas tersebut ataupun dibuat dikelas lain dengan terlebih dahulu kita membuat objek
baru. Pembuatan objek baru dari suatu kelas memiliki sintax sebagai berikut
1
NamaKelas namaObjek = new NamaKelas ():
Kata kunci new mengindikasikan bahwa objek akan diciptakan dari kelas java dengan
nama objek yang sudah dituliskan setelah nama kalas java. Untuk membuat objek roti
dari kelas Rotiku, kita bisa membuat kelas baru atau bisa juga membuat objek roti di
kelas yang sama. Contoh kali ini, kita akan membuat kode program untuk membuat
objek Rotiku. Ketik dan jalankan kode program di bawah ini.
1
2
3
4
5
6
7
8
9
10
public class RotiEnak {
public static void main(String[] args) {
Rotiku rotienak = new Rotiku();
roti.beriWarna("Cokelat");
roti.beriRasa("Pisang Coklat");
roti.timbangBerat(50);
roti.hargaJual(5000);
roti.infoRoti();
}
}
Class Rotiku di halaman sebelumnya tidak memiliki fungsi utama (main method)
dikarenakan class tersebut bukan merupakan Program Applikasi melainkan hanyalah
sebuah cetak biru untuk menciptakan objek roti. Untuk menjalankan suatu program
applikasi, maka harus membuat suatu class yang memiliki sebuah fungsi utama main
method. Seperti yang kita lihat bahwa kode diatas merupakan kode program aplikasi
untuk membuat satu buah objek roti dengan nama rotienak yang mana kode diatas bisa
kita jalankan dan bisa menampilkan informasi tentang roti yang sudah kita buat.
2.1.3
UML Class diagram
UML (Unified Modeling Language) merupakan diagram yang biasa digunakan untuk
mengilustrasikan sebuah kelas dan sekaligus hubungan antar kelas. Didalam satu class
diagram terdapat tiga row atau baris dimana masing-masing row memiliki kegunaan yang
berbeda-beda diantaranya :
1. Baris Pertamana menunjukkan nama class
BAB 2. CLASS DAN OBJECT
8
2. Baris kedua digunakan untuk menyatakan variabel yang terdapat pada class, dan
3. Baris ketiga digunakan untuk menyatakan method-method yang ada pada suatu
class
Selain itu UML juga bisa digunakan untuk memberikan indikasi tentang akses modifier
dari sebuah variabel atau method antara lain :
1. + : Tanda ini menunjukkan bahwa suatu variabel atau method memiliki akses
modifier public
2. - : Tanda ini menunjukkan bahwa suatu variabel atau method memiliki akses
modifier private
3. # : Tanda ini menunjukkan bahwa suatu variabel atau method memiliki akses
modifier protected
Akses modifier akan kita pelajari lebih dalam pada modul 4. Contoh class diagram
Gambar 2.2: Class Diagram
2.1.3.1
Tujuan penggunaan class diagram
Tujuan dari penggunaan UML class diagram sebenarnya untuk menggambarkan model dari aplikasi yang akan kita buat. Class diagram merupakan satu-satunya diagram
yang dapat menggambarkan dengan detail bentuk kelas yang akan dibuat. Berikut adalah tujuan utama penggunaan class diagram
1. Untuk membuat analisis dan desain statis dari aplikasi
2. Menggambarkan kemampuan program yang akan kita buat
3. Sebagai dasar komponen pengembangan sistem
2.1.3.2
Aturan pembuatan class diagram
1. Nama dari class harus memiliki arti yang bisa mewakili fungsi sesungguhnya dari
aplikasi
BAB 2. CLASS DAN OBJECT
9
2. Atribut (Variabel dan Method) harus disebutkan dengan jelas
3. Gunakan catatan tambahan untuk mendeskripsikan beberapa aspek pada diagram
Berikut adalah contoh penggnaan class diagram dalam pemrograman berorientasi objek
Gambar 2.3: Penggunaan Class Diagram dalam PBO
2.2
Latihan
1. Silahkan modifikasi kelas RotiEnak dan buatlah 3 objek baru di dalamnya
2. Gambarkan class diagram dari kelas RotiEnak
3. Buatlah satu kelas yang bisa digunakan sebagai template/blueprint dari kelas BicycleDemo di mana kelas tersebut tidak memiliki fungsi main. Di bawah ini adalah
kode untuk BicycleDemo
1
2
3
4
5
6
7
8
9
10
public class BicycleDemo {
public static void main(String[] args) {
Bicycle bike1 = new Bicycle();
Bicycle bike2 = new Bicycle();
bike1.changeCadance(50);
bike1.speedUp(20);
bike1.changeGear(2);
bike1.printInfo();
BAB 2. CLASS DAN OBJECT
11
12
13
14
15
16
17
18
19
10
bike1.changeCadance(50);
bike1.speedUp(20);
bike1.changeGear(2);
bike1.changeCadance(40);
bike1.speedUp(10);
bike1.changeGear(1);
bike1.printInfo();
}
}
4. Buatlah suatu class yang dapat merepresentasikan sifat-sifat dari objek Kucing.
Objek ini memiliki field/variable/properties berupa umur, warna bulu dan fungsi
berupa meong dan umur.
5. Salah satu applikasi PBO yang sangat umum adalah berupa aplikasi keuangan.
Bank Account (Rekening Bank) adalah salah satu hal yang dapat dijadikan sebagai
suatu objek di dalam PBO.
(a) Buatlah suatu class yang dapat merepresentasikan Objek Rekening tersebut.
Variabel dari objek ini adalah saldo, no rekening, nama dan fungsi berupa
cek saldo, menabung, menarik, dan transfer.
(b) Buatlah suatu class yang memiliki sebuah fungsi utama yang digunakan untuk
mendemokan pembuatan objek tersebut.
6. Perhatikan Class String yang ada di dalam dokumentasi Java. Sebutkan daftar
variable dan fungsi/method yang dimiliki oleh Class String tersebut.
2.3
Pekerjaan Rumah
1. Buatlah suatu class Kalimat yang merupakan program aplikasi untuk menghitung
jumlah huruf dari suatu kalimat yang kita inputkan. Hasil eksekusi program haruslah sesuai dengan gambar berikut ini.
1
2
3
Tuliskan sebuah kalimat
Assalamualaikum
Jumlah karakter = 15
2. Buatlah kelas Hewan dan juga ciptakan objek dari kelas tersebut sehingga kita
bisa membuat berbagai macam objek hewan dengan karakternya masing-masing.
Kode program akan menghasilkan output seperti berikut.
BAB 2. CLASS DAN OBJECT
1
2
3
4
5
6
7
8
9
11
Nama Hewan : Harimau
Jumlah Kaki : 4
Makanan : Daging
Type Hewan : Karnivora
Nama Hewan : Kerbau
Jumlah Kaki : 4
Makanan : Rumput
Type Hewan : Karnivora
3. Buatlah kelas dari class diagram berikut ini
Gambar 2.4:
BAB
3
Class Members : Variabel dan Method
3.1
Variabel/Field dan Method
Dalam pemrograman objek, setiap objek memiliki propertis dan behaviour atau perlilaku yang menunjukkan karakter dari objek tersebut. Selain itu, setiap objek juga
mampu berkomunikasi satu dengan yang lainnya melalui sebuah fungsi/method dengan
cara mengirimkan pesan tertentu dimana setiap pesan yang dikirim oleh suatu objek
akan diterima dan dikenali oleh objek lain jika pesan tersebut memiliki tipe data yang
dikenali oleh objek lain.
3.2
Variabel
Variabel atau disebut juga field merupakan member dari kelas dimana setiap variabel
harus memiliki tipe data tertentu. Ketika kita membuat suatu variabel maka akan ada
memori komputer yang disediakan untuk menyimpan variabel tersebut. Tipe data di
dalam pemrograman java bisa berupa tipe data primitif dan tipe data reference atau
tipe data objek. Tipe data primitif artinya tipe data ini sudah didefinisikan oleh bahasa pemrograman dengan kata kunci (Keyword) khusus, sedangkan tipe data reference
merupakan tipe data yang merujuk pada suatu class objek. Tipe data primitif bisa kita
lihat di tabel 3.1 Untuk menggunakan tipe data pada variabel penulisan harus sesuai
dengan syntax pemrograman java
1 tipe data namaVariable = nilai/Value ;
2 tipe data namaVariabel;
3 namaVariabel = nilai/value ;
12
BAB 3. CLASS MEMBERS : VARIABEL DAN METHOD
13
Tabel 3.1: Tipe data primitif
Data Type Default Value Default Size
boolean
false
1 bit
char
\u’0000
2 byte
byte
0
1 byte
short
0
2 byte
int
0
4 byte
long
0L
8 byte
float
0.0f
5 byte
double
0.0d
8 byte
Contoh
1
2
3
4
int a,
byte B
double
char a
b, c, d = 10;
= 22;
pi = 3.14159;
= ’a’;
Ada beberapa jenis variabel yang biasa digunakan dalam pemrograman berorintasi
objek yaitu local variabel, instance variabel dan class/static variabel. Ketiga jenis variabel
tersebut memiliki karakteristik yang berbeda-beda.
3.2.1
Local variabel
Variabel lokal merupakan variabel yang dideklarasikan di dalam sebuah method, konstruktor ataupun dalam suatu blok program. Variabel jenis ini akan diciptakan ketika
method dijalankan dan akan dihapus dari memori komputer ketika method tersebut
dihentikan. Sehingga lokal variabel hanya bisa digunakan oleh fungsi/method yang
mendeklarasikannya dan blok atau fungsi lain tidak bisa menggunakan variabel lokal
dari method lain. Hal yang perlu diperhatikan adalah lokal variabel tidak memiliki nilai
default sehingga setiap variabel harus di deklarasikan nilai awalnya
Contoh penerapan variabel lokal Tuliskan kode program di bawah ini dan amati
hasilnya
1
2
3
4
5
6
7
8
9
public class VariabelLokal {
public void usia() {
int umur = 0;
int tahunSekarang = 2015;
int tahunLahir = 1995;
umur = tahunSekarang - tahunLahir;
System.out.println("Usia saya : " + umur);
}
}
BAB 3. CLASS MEMBERS : VARIABEL DAN METHOD
14
Latihan 1
1. Buatlah method baru untuk menghitung berat badan dengan nama void beratBadan, di dalam method tersebut buatlah variabel lokal beratLahir, isikan nilai
awal pada berat lahir kemudian hitunglah berat badan dengan rumus
beratBadan = beratLahir + (usia/2)
2. Bisakah nilai dari variabel umur dipanggil dari method void beratBadan ? berilah
alasannya !
3.2.2
Instance Variable
Variabel isntance atau bisa kita sebut dengan variabel global merupakan variabel
yang dimiliki oleh suatu kelas dan berada diluar blok atau method tertentu. Variabel
jenis ini bisa diakses dari semua method yang menjadi member dari class, sehingga semua
metode bisa memanipulasi nilai atau value dari variabel instance tersebut. Berbeda
dengan variabel lokal, variabel instance bisa memiliki akses modifier.
Contoh penerapan variabel Instance
1
2
3
4
5
6
7
8
9
10
public class VariableInstance {
int nilai; /*variable instance*/
void methodSatu(){
//detail method
}
void methodDua(){
//detail method
}
}
Latihan 2
1. Modifikasi kelas VariabelLokal, dengan menambahkan satu variabel instance untuk
menampung nilai dari umur
2. Gunakan nilai umur untuk menyelesaikan permasalahan pada method menghitung
berat badan yang ada di Latihan 1
3. Analisa hasilnya dan bandingkan dengan hasil percobaan sebelumnya !
BAB 3. CLASS MEMBERS : VARIABEL DAN METHOD
3.2.3
15
Static Variable
Static variabel merupakan variabel yang disimpan di dalam memori statis dan hanya
memiliki satu nilai di mana nilai tersebut akan dipakai oleh semua objek yang dibuat
tanpa ada batasan jumlah objek dan biasanya digunakan untuk membuat nilai konstanta.
Static variabel juga bisa diakses oleh semua method yang ada pada suatu kelas dengan
cara memanggil nama dari kelas dan variabelnya seperti ClassN ame.V ariableN ame.
Tulis dan jalankan kode program di bawah ini :
1
2
3
4
5
6
7
8
9
10
public class StaticVariabel {
public static char akreditasi;
public static final String jurusan = "Informatika";
void methodSatu(){
System.out.println(jurusan);
}
void methodDua(){
System.out.println("Akreditasi : "+akreditasi);
}
}
Static variabel tidak bisa dijadikan sebagai variabel lokal. Sehingga untuk membuatnya,
static variabel harus dituliskan di bagian kode paling atas dan untuk mengakses variabel
static kita tidak perlu membuat objek dari kelas yang memiliki variabel static.
Perhatikan contoh dibawah ini
1
2
3
4
5
6
7
8
public class AksesVariabelStatic {
public static void main(String[] args) {
StaticVariabel.akreditasi=’B’;
StaticVariabel sv = new StaticVariabel();
sv.methodSatu();
sv.methodDua();
}
}
Perhatikan baris kode ke 3 pada class AksesVariabelStatic. Di situ kita mengakses
variabel akreditasi dari kelas StaticVariabel tanpa pelu membuat objek dari kelas tersebut.
3.3
Method / Fungsi
Method/fungsi merupakan blok kode program yang menggambarkan perilaku atau
perintah suatu program. Method memiliki dua kategori, yang pertama adalah method
dengan tipe data tertentu yang memiliki nilai return dan yang kedua adalah method
BAB 3. CLASS MEMBERS : VARIABEL DAN METHOD
16
dengan kata kunci void. Selain itu method juga bisa memiliki parameter. Parameter
di dalam method sifatnya tidak wajib dan itu sangat tergantung pada kegunaan dari
method tersebut. Akan tetapi setiap parameter di dalam method harus memiliki tipe
data tertentu Secara umum bentuk sebuah method adalah seperti blok berikut.
1
2
3
Tipemethod Nama method (parameter){
*/Some code */
}
3.3.1
Method dengan nilai return
Method jenis ini adalah method yang harus memiliki type data pada body method.
Dengan demikian maka Method harus memiliki nilai return dimana nilai retur akan
digunakan oleh method lain. Nilai return yang dihasilkan oleh method ini memiliki tipe
data yang sama dengan tipe data yang dituliskan sebelum nama method.
Contoh :
1
2
3
4
5
6
public String nama (){
return nama;
}
public double nilai (){
return nilai;
}
Dari contoh kode di atas terlihat bahwa nilai return yang dihasilkan oleh method nama
akan bertipe data String dan method nilai akan menghasilkan nilai return dengan tipe
data double
Tulis ulang kode di bawah ini
1
2
3
4
5
6
7
8
public class MethodReturn {
public String getNama (){
return nama;
}
public String getNIM (){
return id;
}
}
Cobalah untuk memodifikasi code di atas dengan menambahkan dua variabel nama
dan nim, kemudian buatlah fungsi main yang bisa menampilkan nama dan nim anda.
Tunjukkan hasilnya kepada Asisten
BAB 3. CLASS MEMBERS : VARIABEL DAN METHOD
3.3.1.1
17
Parameter Method
Parameter pada method merupakan sebuah variabel lokal yang hanya bisa diakses
oleh method tersebut. Sebuah method boleh memiliki parameter ataupun tidak bahkan
bisa memiliki lebih dari satu parameter, tergantung dari kegunaan method yang kita buat.
Karena parameter merupakan variabel lokal maka setiap parameter yang dituliskan dalam
method harus memiliki tipe data tertentu.
Contoh
1
2
3
4
5
6
public class MethodParameter {
String nama;
public String setNama (String beriNama){
return this.nama=beriNama;
}
}
Dari kode diatas terlihat bahwa baris ke-2 merupakan sebuah variabel global yang
bertipe data String, kemudian pada baris ke-3 sampai 4 merupakan sebuah blok method.
Di dalam method tersebut terdapat parameter yang bertipe String. Ketika kita akan
menggunakan atau mengirimkan nilai dari suatu parameter ke parameter lain, maka
parameter tersebut harus memiliki tipe data yang sama. Baris ke-4 pada kode di atas
akan mengembalikan nilai dari beriNama dan kemudian akan disimpan ke dalam variabel
nama. Tambahkan kode berikut ini kedalam kelas MethodParameter untuk melihat
proses kerja dari method setNama
1
2
3
4
5
public static void main (String[]args){
MethodParameter mp = new MethodParameter();
mp.setNama("Fulan");
System.out.println(mp.nama);
}
Latihan 3
Lengkapilah kode di bawah ini dengan menambahkan method yang memiliki parameter kemudian tampilkan hasilnya. Buatlah minimal 5 Objek pegawai dengan nama,
nim dan gaji yang berbeda-beda.
1
2
3
4
5
public class Pegawai {
String nama;
int nip;
double gaji;
}
BAB 3. CLASS MEMBERS : VARIABEL DAN METHOD
3.3.2
18
Method Void
Method void merupakan method yang tidak menghasilkan nilai kembalian atau return
value. Method dengan tipe void juga bisa memiliki parameter ataupun tidak, tergantung
dari tujuan penggunaannya. Tuliskan kode di bawah ini dan amati perbedaannya dengan
method return.
1
2
3
4
5
6
7
8
9
10
11
public class VoidMethod {
int jam;
int menit;
int detik;
public void durasi (int jam, int menit, int detik){
this.jam = jam;
this.menit = menit;
this.detik = detik;
}
public void infoDurasi(){
System.out.println("Total Waktu \n"+jam +" Jam : "+menit+" Menit
: "+ detik +" detik" );
12
}
13
public static void main(String[] args) {
14
VoidMethod vm = new VoidMethod();
15
vm.durasi(1, 30, 15);
16
vm.infoDurasi();
17
}
18 }
Pekerjaan Rumah
1
2
3
4
5
public class TugasRumah {
int nilaiMID;
int nilaiTugas;
int nilaiUAS;
}
1. Lengkapilah kode di atas dengan menambahkan method void dan method return
yang mengembalikan nilai dari setiap parameter method void.
2. Ubahlah tipe data dari int ke double dan tambahkan satu variabel double nilaiTotal, kemudian hitung nilai total dengan rumus berikut
nilaiT otal = (nilaiM ID + nilaiT ugas + nilaiU AS)/3
BAB
4
Penentu Akses / Access Modifier
Setiap variabel atau field dalam kode java, sebaiknya memiliki penentu akses. Maksud
dari pentu akses adalah untuk mengijinkan apakah variable/field dan method/fungsi boleh diakses oleh kelas lain atau tidak atau dikenal dengan encapsulation. Akses terhadap
suatu variabel instan di luar kelas biasanya tidak diperkenankan dengan maksud untuk
menjaga data dari akses kelas lain yang bisa mengaibatkan kesalahan. Sebagai penggantinya, disediakan metode yang diperlukan untuk mengakses variabel instan. Berkaitan
dengan boleh tidaknya suatu variabel instan diakses dari luar kelas, Java menyediakan
beberapa penentu akses antara lain: Default (Tanpa penent akses), Public, Protected
dan Private. Untuk bisa memahami perbedaan dari masing-masing tipe akses, kita perlu
memahami sedikit tentang package atau paket terlebih dahulu. Package, merupakan suatu folder tempat menyimpan class java, sehingga program yang kita buat bisa tersusun
dengan rapi. Selain itu package juga berfungsi untuk mengelompokan class java sesuai
dengan grupnya masing-masing sehingga bisa meminialisir kesalah dalam pengaksesan
kelas.
Contoh package di dalam kode java
1
package modul.praktikum.pbo;
Perbedaan public, private, dan tanpa penentu akses pada variabel atau
method
1. Default. Tanpa penentu akses, setiap Variabel atau method dapat diakses oleh
kelas yang berada dalam package yang sama.
2. Public. Variabel atau method dapat diakses pada semua kelas yang menggunakan
kelas yang berisi variabel tersebut meskipun berada pada package yang berbeda.
19
BAB 4. PENENTU AKSES / ACCESS MODIFIER
20
3. Private. variabel atau method hanya dapat diakses dari dalam kelas itu sendiri
4. Protected. hanya bisa diakses oleh kelas turunannya meskipun kelas turunannya
berada dalam package yang berbeda dengan kelas induk
4.1
Default Modifier
Default modifier atau tipe akses default bisa diterapkan baik dalam variabel maupun
method. Pada default modifier kita tidak perlu memuliskan secara eksplisit pada variabel atau method, karena secara otomatis java akan mengeksekusinya sebagai default
modifier. Sehingga, yang perlu kita tuliskan adalah tipe data kemudian nama variabel
atau nama method-nya saja.
Perhatikan contoh kode di bawah ini dan kerjakan latihannya
1
2
3
4
5
6
7
8
9
class DefaultModifier{
int a=1;
int b=2;
int c;
void jumlah(){
c=a+b;
System.out.println(c);
}
}
4.1.1
Latihan
1. Untuk membuktikan bahwa Variabel-variabel di atas hanya bisa diakses oleh kelas
yang berada di dalam package yang sama, silahkan buat satu package dengan
nama praktikum.pbo.package1, kemudian buat file java lainnya untuk mengakses
variabel dan method dari kelas diatas dan tampilkan hasilnya.
2. Butlah package baru dan satu file kelas java di package tersebut, kemudian cobalah
untuk mengakses variabel yang ada di kelas DefaultModifier dan perhatikan
hasilnya
4.2
Public Modifier
Public modifier merupakan penanda bahwa suatu method atau variabel bisa diakses
dari berbagai kelas dan package. Public modifier biasanya dipakai oleh kode program
BAB 4. PENENTU AKSES / ACCESS MODIFIER
21
yang memang mengijinkan semua kelas bisa mengaksesnya. Perhatikan contoh kode
program berikut ini
1
2
3
4
5
6
7
8
9
public class PublicModifier {
public int a=2;
public int b=5;
public int c=9;
public void kali(){
int d = a*b*c;
System.out.println("Hasil kali = "+d);
}
}
4.2.1
Latihan
1. Lakukan percobaan seperti pada latihan 4.1.1 dan bandingkan hasilnya
2. Tambahkan Method tambah, kurang, bagi, dan nilai rata-rata
4.3
Protected Modifier
Protected modifier merupakan hak akses yang diberikan oleh suatu kelas ke kelas
turunannya saja, meskipun kelas turunannya berada dalam package yang berbeda. sehingga kelas-kelas lain yang tidak memiliki hubungan turunan tidak akan bisa mengakses
method protected. Perhatikan contoh kode program di bawah ini.
1
2
3
4
5
6
7
8
class ProtectedModifier {
protected void printInfo(){
System.out.println("Protected Modifier");
}
protected void sendMessage(){
System.out.println("this is a message");
}
}
4.3.1
Latihan
Buatlah kelas dan objek untuk mengakses method dari kelas di atas, dan bandingkan
dengan dua modifier sebelumnya
BAB 4. PENENTU AKSES / ACCESS MODIFIER
4.4
22
Private Modifier
Private modifier merupakan akses modifier dimana kelas lain tidak diijinkan untuk
mengakses variabel atau method dari kelas tersebut, meskipun kelas-kelas tersebut berada dalam package yang sama.
1
2
3
4
5
6
7
public class PrivateModifier {
private String nama;
private int umur;
private void printInfo(){
System.out.println("private modifier");
}
}
4.4.1
Latihan
Tuliskan kode di atas dan buatlah file java untuk mengakses variabel ataupun method
dari kelas di atas. Apakah variabel ataupun method bisa diakses dari kelas lain ? Berilah
penjelasannya.
BAB
5
Constructor
Konstruktor adalah metode yang dapat digunakan untuk memberikan nilai awal saat
objek diciptakan. Metode ini akan dipanggil secara otomatis oleh java ketika new dipakai
untuk menciptakan objek dari suatu kelas.
Konstruktor memiliki beberapa karakteristik antara lain :
1. Nama constructor sama dengan nama kelas
2. Tidak memiliki nilai balik atau return value
Konstruktor memiliki beberapa tipe diantaranya :
1. Default constructor
2. Parameterized constructor
5.1
Default constructor
Default constructor merupakan konstruktor yang secara otomatis dibuatkan oleh java
compiler, sehingga meskipun kita tidak menuliskan atau membuat constructor secara
eksplisit java sudah menyediakannya.
1
2
3
4
5
public class Konstruktor {
public Konstruktor(){
System.out.println("default konstructor");
}
}
23
BAB 5. CONSTRUCTOR
24
Baris kode ke 3-5 merupakan konstruktor yang tidak memiliki detail implementasi, konstruktor yang seperti ini disebut dengan default konstruktor, kita boleh menuliskannya
maupun tidak. Tujuan sebenarnya dari default constructor adalah untuk memberikan
nilai awal pada objek seperti 0, NULL, dan sebagainya.
Dari contoh program sebelumnya nilai default dari objek yang diciptakan melalui konstruktor adalah melakukan print out yang berisi ”default constructor”. Untuk mengeceknya silahkan tulis kode di bawah ini dan perhatikan hasilnya
1
2
3
4
5
public class AksesKonstructor {
public static void main(String[] args) {
Konstruktor konstruktor = new Konstruktor();
}
}
5.1.1
Latihan
1. Buatlah kelas baru dengan menambahkan variabel nama, nim dan alamat serta
sebuah konstruktor default yang dapat menampilkan nama, nim dan alamat anda.
Selanjutnya buatlah kelas baru dengan fungsi main untuk menampilkan hasilnya.
5.2
Parameterized constructor
Parameterized constructor sebenarnya merupakan method, yang mana sebuah method bisa memiliki beberapa parameter atau bahkan tidak memiliki parameter (default
constructor). Constructor bisa memiliki beberapa parameter sebagai penentu nilai awal
dari sebuah objek. Seperti layaknya method, parameter di dalam constructor juga harus
memiliki tipe data tertentu. Tipe data disini bisa berupa tipe data reference ataupun
tipe data primitive. Tulis contoh parameterized constructor berikut
1
2
3
4
5
6
7
8
9
10
public class ParamConstructor {
String nama;
int semester;
String nim;
public ParamConstructor(String namaKu, int semesterKu, String
nimKu){
this.nama = namaKu;
this.nim = nimKu;
this.semester = semesterKu;
}
public void infoKu(){
BAB 5. CONSTRUCTOR
11
12
13
25
System.out.println("Nama : "+nama +"\nNim : "+ nim
+"\nSemester : "+ semester);
}
}
Pada kode program di atas kita memiliki konstruktor dengan tiga parameter yaitu :
namaKu, semesterKu dan nimKu dengan tipe data tertentu. Ketika kita membuat
objek baru dari kelas tersebut, maka kita harus mengisikan ketiga parameter tersebut
pada setiap objek yang dibuat. Untuk melihat hasilnya silahkan tulis dan jalankan code
program di bawah ini.
1
2
3
4
5
6
public class AksesKonstructor {
public static void main(String[] args) {
ParamConstructor pc = new ParamConstructor("Fulan", 3,
"L2001400xy");
pc.infoKu();
}
}
Pada baris ke-3, terlihat jelas bahwa ketika kita membuat objek baru kita diwajibkan mengisikan nilai dari masing-masing parameter sesuai dengan tipe datanya masingmasing, dimana nilai dari parameter inilah yang kita sebut sebagai isi dari objek.
5.2.1
Latihan
1. Buatlah class Buku dengan variabel String namaPengarang, String judulBuku, int
tahunTerbit, int cetakanKe dan double hargaJual. Selanjutnya buatlah constructornya serta sebuah method untuk menampilkan informasi buku.
2. Buatlah 10 objek buku dengan fungsi main yang dapat menampilkan nilai dari
semua parameter Buku tersebut.
5.3
Overloading constructor
Overloading merupakan suatu mekanisme untuk mengembangkan fungsi dari suatu
method, dimana beberapa method memiliki nama yang sama tetapi parameter yang
dimiliki berbeda-beda. Overloading juga bisa berlaku terhadap constructor karena pada
dasarnya konstruktor merupakan sebuah method. Overloading terhadap konstruktor
merupakan suatu mekanisme pembuatan konstruktor yang memiliki bentuk lebih dari
satu. Dalam hal ini pembeda antara satu konstruktor dengan konstruktor yang lain
berupa jumlah parameter atau tipe parameter. Ketika kita melakukan overloading, java
BAB 5. CONSTRUCTOR
26
compiler akan membedakan masing-masing constructor berdasarkan jumlah parameter
dan tipe datanya. Sehingga sangat mungkin jika kita memiliki constructor dengan jumlah
parameter yang sama tetapi memiliki tipe data yang berbeda atapun sebaliknya.
Perhatikan contoh berikut
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.Date;
public class OverloadingCons {
int idUser;
String userName;
int level;
Date lastLogin;
public OverloadingCons(){
}
public OverloadingCons(int iduser, String userName){
this.idUser = iduser;
this.userName = userName;
}
}
Dari kode di atas terdapat dua constructor yang memiliki jumlah parameter berbeda.
Ketika kita membuat objek dari kelas diatas maka nilai default dari objek tersebut bisa
memiliki dua kemungkinan yaitu NULL atau id user dan nama user.
5.3.1
Latihan
1. Modifikasi kode di atas dengan menambahkan 3 constructor baru dengan parameter yang berbeda.
2. Buatlah kelas baru dengan method main untuk membuat objek dari kelas sebelumnya.
3. Buatlah kelas baru dengan nama CustomerData, tambahkan variabel nama, alamat, tanggal lahir, pekerjaan dan gaji. Selanjutnya buatlah overloading constructor
dari kelas tersebut.
4. Buatlah kelas baru dengan method main serta membuatlah 10 objek customer dari
kelas CustomerData.
BAB
6
Inheritance / Pewarisan
Inheritance (pewarisan) adalah salah satu ciri utama dari PBO dan merupakan fitur
yang sangat memudahkan bagi programmer untuk membuat dan mengatur program.
Sepertihalnya dalam kehidupan riil, sifat seoran anak secara umum mirip dengan sifat
orang tuanya. Demikian juga pada kasus pemrograman. Suatu class yang diturunkan
(inherited from) dari induknya (parent class) akan mewarisi semua atau sebagian sifat
(variable dan fungsi) dari class induknya. Dengan inheritance kita tidak perlu membuat
(mengimplementasikan) ulang suatu Class jika kita sudah memiliki Class lain yang serupa. Inheritance dapat digambarkan pada contoh diagram di bawah ini.
Gambar 6.1: Inheritance
Gambar di atas mengilustrasikan bahwa MountainBike, Roadbike dan TandemBike pastilah memiliki banyak kesamaan sifat dengan sepeda pada umumnya, sehingga untuk
27
BAB 6. INHERITANCE / PEWARISAN
28
membuat ketiga jenis sepeda tersebut kita cukup mengambil karakter dari sepeda secara
umum semisal semua sepeda pasti memiliki gear, peda, rem, dan lain sebagainya. Oleh
karena itu kita hanya perlu menurunkan sifat sepeda (bicycle) kemudian kita terapkan
pada Mountainbike, Roadbike dan Tandembike.
Untuk menggunakan inheritance kata kunci yang diperlukan adalah extends. Secara
umum sintax dari inheritance adalah seperti berikut
1
2
class SubClass extends SuperClass {
}
Class SubClass merupakan kelas turunan dari SuperClass, oleh karena itu properties
yang dimiliki oleh SuperClass seperti variabel dan method akan bisa juga dimiliki oleh
SubClass.
6.1
Tipe inheritance
Dalam pemrograman berorientasi objek inheritance memiliki 3 tipe antara lain
1. Single inheritance
Dimana suatu kelas hanya memiliki satu turunan
2. Multilevel inheritance
Dimana suatu kelas memiliki kelas turunan dan kelas turunan tersebut juga memiliki kelas turunan lain
3. Hierarchical inheritance
Dimana suatu kelas memiliki lebih dari satu kelas turunan
Gambar 6.2: Tipe inheritance
BAB 6. INHERITANCE / PEWARISAN
6.2
29
Single inheritance
Perhatikan contoh single inheritance berikut. Tulis dan analisa kodenya.
1
2
3
public class Pegawai {
double gajiPokok = 100000;
1
2
3
4
5
6
7
8
9
public class Programmer extends Pegawai{
public static void main(String[] args) {
double lemburPerJam = 50000;
double gajiPerBulan;
Pegawai p = new Pegawai();
}
gajiPerBulan = p.gajiPokok+lemburPerJam;
System.out.println(gajiPerBulan);
}
}
Kode di atas menunjukkan bahwa kelas Programmer merupakan kelas turunan dari kelas
Pegawai, sehingga kita bisa menggunakan variabel dari kelas Pegawai dan menggunakannya ke dalam kelas Programmer. Pada baris ke-6 terlihat bahwa kelas programmer
menggunakan variabel gajiPokok dari kelas pegawai dan menjumlahkannya dengan variabel yang ada pada kelas programmer.
6.3
Multilevel Inheritance
Dari kelas pegawai di atas kita bisa membuat beberapa kelas turunan yang lainnya
sehingga kelas pegawai nantinya memiliki beberapa kelas turunan, inilah yang disebut
dengan multilevel inheritance. Silahkan tulis dan analisa kode program berikut.
1
2
3
4
5
6
7
8
9
public class SistemAnalis extends Pegawai{
public static void main(String[] args) {
double lemburPerJam = 70000;
double gajiPerBulan;
Pegawai p = new Pegawai();
gajiPerBulan = p.gajiPokok+lemburPerJam;
System.out.println(gajiPerBulan);
}
}
BAB 6. INHERITANCE / PEWARISAN
30
Kode diatas menunjukkan bahwa variabel dari kelas Pegawai bisa dipakai oleh kelas-kelas
turunannya tanpa perlu kita membuat variabel sendiri di masing-masing kelas turunannya.
6.4
Hierarchical inheritance
Hierarchical inheritance merupakan model kelas turunan dimana suatu sub-class memiliki sub-class lain. sub-class dari sub-class juga memiliki akses ke kelas induk yang
paling atas. Jika kita ilustrasikan dalam kehidupannyata seperti seorang cucu yang memiliki orang tua dan kakek, dimana cucu tersebut boleh menggunakan barang milik
ayahnya sekaligus barang milik kakeknya. Tulislah contoh berikut kemudian jalankan
1
2
3
4
5
public class A {
public void messageA (){
System.out.println("Info dari Kelas A");
}
}
1 public class B extends A{
2
public void messageB (){
3
System.out.println("Info dari Kelas B");
4
}
5 }
1 public class C extends B{
2
public void messageC (){
3
System.out.println("Info dari Kelas C");
4
}
5 }
Untuk melihat apakah kelas turunan yang paling bawah (class C) bisa mengakses properti
dari kelas A dan kelas B silahkan tulis kode dibawah ini dan jalankan.
1
2
3
4
5
6
7
8
public class TesInheritance {
public static void main(String[] args) {
A a = new A();
B b = new B();
C c = new C();
a.messageA();
b.messageA();
b.messageB();
BAB 6. INHERITANCE / PEWARISAN
9
10
11
12
13
31
c.messageA();
c.messageB();
c.messageC();
}
}
Pada kode TesInheritance terlihat bahwa objek dari kelas A hanya bisa menggunakan
method yang ada pada kelas A sendiri, akan tetapi objek dari kelas B bisa menggunakan
method dari kelas A dan halnyang sama juga ada pada kelas C dimana objek dari kelas
C memiliki akses ke method yang ada pada kelas A dan B. Dengan demikian berarti
bahwa induk kelas (Super class) tidak bisa mengakses variabel atau method dari anak
kelas (sub class), tetapi sub-class memiliki akses pada variabel atau method dari super
class selama variabel atau class tersebut tidak bersifat private.
6.4.1
Overriding Method
Overriding method merupakan fitur yang dimiliki oleh java untuk memanfaatkan
method-method dari super kelas agar bisa digunakan oleh sub kelas dengan implementasi yang berbeda. Overriding berbeda dengan Overloading, Overriding hanya bisa diterapkan pada kelas yang memiliki hubungan turunan atau inheritance. Perhatikan contoh
penggunaan overriding method berikut. Tulis dan Jalankan kode program di bawah ini
1
2
3
4
5
class Hewan{
public void gerak(){
System.out.println("Hewan bisa berjalan");
}
}
1 class Kucing extends Hewan{
2
public void gerak(){
3
System.out.println("Kucing bisa berjalan dan berlari");
4
}
5 }
Jika kita perhatikan kode program diatas, kita akan menemukan method gerak pada
kelas Hewan dan juga method gerak pada kelas Kucing, akan tetapi implementasi
yang diterapkan berbeda. Hewan bisa berjalan tetapi belum tentu bisa berlari namun
Kucing yang merupakan inheritance dari Hewan bisa berjalan sekaligus berlari.
1. Buatlah kelas dengan fungsi main untuk menampilkan hasil dari kode diatas.
2. Buatlah kelas Elang yang memiliki method gerak namum memiliki implementasinya berbeda dari kedua kelas di atas.
BAB 6. INHERITANCE / PEWARISAN
6.5
32
Latihan
Buatlah kode program untuk mengimplementasikan inheritance berikut ini. Gunakan
method overriding pada masing-masing kelas turunan.
Gambar 6.3: UML Class Diagram
BAB
7
Encapsulation / Enkapsulasi
7.1
Private modifier
Encapsulation merupakan teknik untuk melindungi atau membungkus data yang berupa variabel ataupun method dari akses kelas lain. Dengan menggunakan encapsulation
maka data bisa disembunyikan dari kelas-kelas lain yang tidak berhak memiliki akses.
Untuk menerapkan teknik enkapsulsi ada beberapa hal yang harus dilakukan antara lain:
1. Mendeklarasikan variabel dengan akses modifier private
2. Menyediakan akses public setter dan getter untuk menampilkan atau memodifikasi
nilai variabel
Contoh penggunaan private modifier dalam enkapsulasi
1
2
3
4
5
6
7
8
9
10
11
12
public class Enkapsulasi {
private String nama;
private String nim;
private int umur;
public String getNama() {
return nama;
}
public void setNama(String nama) {
this.nama = nama;
}
public String getNim() {
return nim;
33
BAB 7. ENCAPSULATION / ENKAPSULASI
13
14
15
16
17
18
19
20
21
22
23
34
}
public void setNim(String nim) {
this.nim = nim;
}
public int getUmur() {
return umur;
}
public void setUmur(int umur) {
this.umur = umur;
}
}
Variabel-variabel yang terdapa pada kelas Enkapsulasi di atas tidak bisa diakses oleh
kelas lain, meskipun kelas lain tersebut adalah kelas turunannya. Sehingga dalam hal
ini untuk memanipulasi data kita harus memanfaatkan method-method yang disediakan
oleh kelas tersebut. Berikut ini adalah contoh penggunaan method untuk memodifikasi
data suatu kelas
1
2
3
4
5
6
7
8
9
10
11
public class EnkapsulasiApp {
public static void main(String[] args) {
Enkapsulasi en = new Enkapsulasi();
en.setNama("Fulan bin Fulan");
en.setNim("L200111222");
en.setUmur(20);
System.out.println(en.getNama());
System.out.println(en.getNim());
System.out.println(en.getUmur());
}
}
Selain itu enkapsulasi juga bisa diterapkan pada kelas yang mempunyai kelas turunan.
Tujuan penggunaan dari kelas inheritance adalah agar kelas turunan tidak perlu memodifikasi data yang ada pada kelas induk atau super class melainkan yang dimodifikasi
adalah data dari kelas turunan itu sendiri.
1
2
3
4
5
6
public class Karyawan {
private String nama;
private String nik;
private String jabatan;
private double gaji;
public String getNama() {
BAB 7. ENCAPSULATION / ENKAPSULASI
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
35
return nama;
}
public void setNama(String nama) {
this.nama = nama;
}
public String getNik() {
return nik;
}
public void setNik(String nik) {
this.nik = nik;
}
public String getJabatan() {
return jabatan;
}
public void setJabatan(String jabatan) {
this.jabatan = jabatan;
}
public double getGaji() {
return gaji;
}
public void setGaji(double gaji) {
this.gaji = gaji;
}
}
Sekarang buatlah kelas Programmer yang merupakan turunan dari kelas Karyawan
seperti berikut
1
2
3
4
5
6
public class Programmer extends Karyawan{
int jamKerja=8;
public int jamKerja(){
return jamKerja;
}
}
7.2
Latihan
1. Buatlah Kelas dengan fungsi main dan 5 objek berbeda untuk menampilkan data
dari class Programmer
BAB
8
Polymorphism
Salah satu kekuatan dari pemrograman berorientasi objek selain inheritance dan encapsulation ada juga istilah polymorphism. Polymorphism (polimorpisme) merupakan
salah satu kemampuan pemrograman berorientasi objek untuk membuat berbagai jenis
bentuk dari suatu objek. Salah satu penggunaan polimorpisme yang paling sering dipakai
adalah ketika suatu induk kelas (Super class) melakukan referensi terhadap anak kelas
(sub-class).
Perlu diketahui bahwa salah satu cara untuk mengakses suatu objek adalah dengan membuat reference variabel. Ketika suatu reference variabel diciptakan maka hal itu tidak
bisa dirubah menjadi bentuk yang lain. Reference variabel itu sendiri bisa dideklarasikan
sebagai atau interface.
Perhatikan contoh berikut
1
2
3
public interface Herbivora{}
public class Hewan{}
public class Kuda extends Hewan implements Herbivora{}
Penggalan kode di atas menunjukkan bahwa kelas Kuda merupakan suatu bentuk polimorpisme karena kelas tersebut memiliki multiple inheritance diantaranya :
1. Seekor Kuda adalah seekor Hewan
2. Seekor Kuda adalah Herbivora
3. Seekor Kuda termasuk Kuda
4. Seekor Kuda merupakan sebuah Objek
Sehingga kita bisa membuat objek reference seperti berikut
36
BAB 8. POLYMORPHISM
1
2
3
4
37
Kuda k = new Kuda();
Hewan h = k;
Herbivora hb = k;
Object o = k;
8.1
Runtime Polymorphism
Runtime Polymorphism merupakan proses pemanggilan method dengan cara melakukan overiding pada saat kode program berjalan.
Contoh runtime polymorphism. Pada contoh ini kita membuat dua kelas yang pertama
adalah kelas Sepeda dan yang kedua adalah kelas SepedaAir, selanjutnya kita akan
melakukan overriding terhadap method yang dimiliki oleh sepeda. Ketika kita memanggil
method yang ada pada induk kelas dengan cara membuat objek reference maka hal ini
dilakukan oleh JVM bukan compiler sehingga ini disebu dengan runtime polymorphism.
1
2
3
4
5
1
2
3
4
5
6
7
8
9
10
class Sepeda{
void run(){
System.out.println("Bisa berjalan");
}
}
class SepedaAir extends Sepeda{
void run(){
System.out.println("Hanya bisa berjalan di atas Air");
}
public static void main(String args[]){
Sepeda s = new SepedaAir();//upcasting
s.run();
}
}
Pada kelas SepedaAir terlihat bahwa disitu terdapat method run yang merupakan method overriding dari kelas Sepeda. Namun pada saat implementasinya objke dari kelas
Sepeda melakukan referensi ke kelas SepedaAir bukan ke kelas Sepeda itu sendiri,
sehingga hal ini disebut dengan upcasting.
Silahkan tulis dan jalankan kode berikut serta kerjakan latihan berikut ini
1
2
Publc clas Pet{
private String nama;
BAB 8. POLYMORPHISM
3
4
5
6
7
8
9
10
11
12
13
14
38
public void beriNama(String berinama){
this.nama = berinama;
}
public String panggilNama(){
return this.nama;
}
public String perilaku(){
return "Hewan Penurut";
}
}
Latihan
1. Buatlak kelas Kucing dan Anjing kemudian dimana masing-masing kelas tersebut
melakukan overriding terhadap method perilaku(), dan tambahkan satu method
pada masing-masing kelas yang secara khusus hanya berlaku pada masing-masing
kelas tersebut. Selanjutnya buat kelas baru TestPolimorpisme untuk menampilkan hasilnya. Tampilan hasil
1
2
3
4
5
6
8.2
TOM
Menykai Ikan
Meeooww...Meeooww
BULL
Menyukai Daging dan Tulang
Guk..Guk..Guk..
Tugas
Buatlah class berdasarkan Class diagram berikut ini, terapkan teknik polimorpisme
dan tampilkan hasilnya dengan print screen
BAB 8. POLYMORPHISM
Gambar 8.1: UML Class Diagram
39
BAB
9
Abstract Class
Java menyediakan suatu mekanisme yang memungkinkan suatu method ditentukan didalam kelas tetapi tidak disertai degnan definisinya. Method seperti ini dikenal
dengn method abstract dan kelasnya dinamakan kelas abstract. Definisi kelas ditentukan
masing-masing kelas turunan. Dalam hal ini setiap keas turunan dari kelas abstrak harus
mendefinisikan method-method yang tegolong sebagai mehtode abstrak. Kelas abstract biasa dibuat sekiranya di depan telah diketahui bahwa subkelas-subkelas merupakan
operasi yang sesuai dengan method tersebut tetapi antara satu subkelas denga subkelas
yang lain memiliki tindakan yang berbeda.
Abstrak class di dalam java selalu ditandai dengan kata kunci abstract. Ciri-ciri
abstract kelas memiliki ciri-ciri sebagai berikut
1. Abstract class tidak bisa dibuat instance objeknya
2. Abstract class bisa memiliki abstract method maupun tidak
3. Jika kita membuat abstract method maka kita harus membuatkan implementasi
dari method tersebut
9.1
Objek abstract class
Seperti yang sudah di sebutkan sebelumnya bahwa abstract class tidak bisa digunakan untuk membuat instance objek. Sehingga untuk mengguanakan fitur dari abstract
class maka kita perlu membuat kelas yang merupakan kelas turunan dari kelas abstrak
tersebut. Perhatikan dan cobalah contoh program berikut
1 abstract class AbstrakClass {
40
BAB 9. ABSTRACT CLASS
2
3
4
5
6
7
8
9
10
11
12
13 }
41
int a;
int b;
int c;
public AbstrakClass (int a, int b, int c){
this.a = a;
this.b = b;
this.c = c;
}
public int kali (){
return a*b*c;
}
Kode program di atas merupakan sebuah abstract class yang memiliki konstruktor
dengan tiga parameter. Untuk membuktikan bahwa suatu abstract class tidak dapat
dibuat instance objeknya, silahkan tulis kode program di ini
1 public class ObjekAbstrakClass {
2
public static void main(String[] args) {
3
AbstrakClass ac = new AbstrakClass(2, 3, 4);
4
}
5 }
Jika kita menjalankan kode di atas maka bisa dipastikan terjadi error. Error yang muncul disebabkan karena ada pembuatan objek dari kelas AbstrakClass. Sehingga untuk
menggunakan abstrak class agar bisa diimplentasikan kita perlu membuat kode program
yang merupakan turunan dari kelas abstract tersebut.
Perhatikan dan tulis ulang kode berikut
1 public class TurunanAbstrakClass extends AbstrakClass{
2
int x;
3
4
public TurunanAbstrakClass (int a, int b, int c){
5
super(a,b,c);
6
x = a+b+c;
7
}
8
9
public void printX(){
10
System.out.println(x);
11
}
12 }
BAB 9. ABSTRACT CLASS
42
Kode TurunanAbstrakClass merupakan turunan dari AbstrakClass, dengan cara seperti ini kita bisa mengguanakan variabel atau method dari abstract class.
Tulis dan amati kode berikut
1 public class ObjekAbstrakClass {
2
public static void main(String[] args) {
3
TurunanAbstrakClass tac = new TurunanAbstrakClass(2, 3, 2);
4
tac.printX();
5
System.out.println(tac.kali());
6
}
7 }
9.2
Method abstract
Sebuah kelas abstrak boleh memiliki method abstrak maupun method non-abstrak.
Method abstrak merupakan method yang hanya memiliki nama method saja tanpa menjelaskan rutin atau fungsi detail implementasi dari method tersebut. Sedangkan method
non-abstrak merupakan method yang memiliki detail implementasi didalamnya.
Perhatikan kelas abstrak berikut
1 public abstract class MethodAbstrak {
2
public abstract int luas();
3
public abstract int keliling();
4
5
public int getLuas(){
6
return luas();
7
}
8
public int getKeliling(){
9
return keliling();
10
}
11 }
Kode kelas abstrak di atas memiliki dua method abstrak yaitu luas dan keliling, dimana
method tersebut tidak memiliki detail implementasi tentang bagaimana menentukan
nilai luas dan keliling. Untuk mengimplementasikannya cara yang dilakukan adalah sama
seperti pada sub-bab sebelumnya, yaitu kita harus membuat suatu kelas yang merupakan
kelas turunan dari abstrak kelas. Dengan cara seperti ini kita bisa menetukan detail dari
method abstrak yang ada pada kelas abstrak. Misalkan dalam hal ini kita akan membuat
kelas Persegi. Tulis kode berikut ini dan analisa hasilnya.
1 public class Persegi extends MethodAbstrak{
BAB 9. ABSTRACT CLASS
2
3
4
5
6
7
8
9 }
43
int sisi = 5;
public int luas() {
return sisi*sisi;
}
public int keliling() {
return 4*sisi;
}
1 public class MethodMain {
2
public static void main(String[] args) {
3
Persegi psg = new Persegi();
4
System.out.println("Keliling = "+psg.getKeliling());
5
System.out.println("Luas = "+psg.getLuas());
6
}
7 }
9.3
Latihan
1. Dengan menggunakan kelas MethodAbstrak buatlah kelas PersegiPanjang, JajaranGenjang, Lingkaran, dan SegiTiga. Selanjutnya implementasikan method luas
dan keliling pada masing-masing kelas tersebut.
9.4
Tugas
1. Buatlah abstract class untuk bangun ruang, dengan ketentuan memiliki method
abstrak volume, dan luasSelimut/luasPermukaan. Berikutnya buatlah kelas Balok,
Kubus, Bola, Kerucut, dan PrismaSegiTiga untuk mengimplementasikan method
abstrak tesebut.
BAB
10
Interface
Interface merupakan suatu mekanisme yang disediakan oleh java yang memungkinkan
berbagi konstanta atau menentukan bentuk method yang dapat digunakan oleh sejumlah
kelas. Sekilas interface mirip dengan abstract class, karena interface juga menentukan
method untuk kelas yang mereferensi namun detail dari method diserahkan atau ditentukan oleh masing-masing kelas tersebut. Sama halnya dengan abstrak kelas, interface
juga bisa memiliki konstanta, method defaul, static method dan juga perilaku yang bisa diimplementasikan oleh kelas implennya. Akan tetapi interface memiliki beberapa
perbedaan dengan kelas pada umumnya seperti :
1. Interface tidak bisa digunakan untuk membuat objek
2. Interface tidak bisa memiliki konstruktor
3. Secara defaul semua method di dalam interface bersifat abstrak
4. Variabel pada interface harus bertipe static final
5. Interface tidak bisa diturunkan kepada kelas lain, melainkan interface hanya bisa
di implement-kan
6. Sebuah interface bisa mengeksten beberapa interface.
10.1
Mendeklarasikan Interface
Kata kunci interface digunakan untuk mendeklarasikan sebuah interface.
44
BAB 10. INTERFACE
45
1 public interface NamaInterface {
2
//Variabel static final
3
//Method abstract
4 }
Secara default interface bersifat abstrak sehingga kita tidak perlu menuliskan kata kunci
abstrak ketika membuat interface, semua method pada interface juga bersifat abstrak
sehingga tidak perlu menuliskan kata kunci abstrak dan semua method bersifat public.
Contoh interface
1 interface Animal {
2
public void eat();
3
public void travel();
4 }
10.2
Implementasi Interface
Ketika sebuah kelas mengimplementasikan interface, kita bisa berasumsi bahwa kelas tersebut memiliki kontrak kerja dengan interface untuk mengimplementasikan seluruh
method yang ada pada interface. Ketika suatu kelas tidak mengimplementasikan method dari interface maka akan terjadi error. Agar interface bisa digunakan kita perlu
menggunakan kata kunci implement yang mengindikasikan bahwa kelas tersebut mengimplementasikan sebuah interface.
1 public class Mamalia implements Animal{
2
public void eat(){
3
System.out.println("Mammal eats");
4
}
5
6
public void travel(){
7
System.out.println("Mammal travels");
8
}
9
10
public int noOfLegs(){
11
return 0;
12
}
13
14
public static void main(String args[]){
15
MammalInt m = new MammalInt();
BAB 10. INTERFACE
46
16
m.eat();
17
m.travel();
18
}
19 }
Kode program diatas merupakan implementasi dari interface Animal, dimana kelas mamalia mengimplementasikan semua method yang dimiliki oleh interface Animal.
10.2.1
Percobaan
1. Buat interface baru dengan nama “IntLampu.java”, tuliskan kode program seperti
berikut
1
2
3
4
5
6
public interface IntLampu {
public static final int LAMPU_HIDUP=1;
public static final int LAMPU_MATI=0;
public abstract void matikanLampu();
public abstract void hidupkanLampu();
}
2. Selanjutnya buatlah kelas Lampu.java yang merupakan implement dari interface
IntLampu seperti kode berikut ini
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Lampu implements IntLampu{
public int statusLampu;
public void matikanLampu() {
if(statusLampu==0){
System.out.println("Lampu sudah dalam kondisi mati");
}else if(statusLampu==1){
statusLampu=-1;
System.out.println("Lampu sudah dimatikan");
}
}
public void hidupkanLampu() {
if(statusLampu==1){
System.out.println("Lampu sudah dinyalakan\n***");
}else{
statusLampu=+1;
System.out.println("Lampu sudah dalam kondisi menyala");
}
}
BAB 10. INTERFACE
19
20
21
22
47
public int setSaklar(int saklar){
return statusLampu=saklar;
}
}
3. Buat Kelas dengan fungsi main untuk menjalankan kode diatas
1
2
3
4
5
6
public class ApplikasiLampu {
public static void main(String[] args) {
Lampu lampu = new Lampu();
Scanner sc = new Scanner(System.in);
lampu.statusLampu = lampu.setSaklar(0);
System.out.println("Status Lampu =
"+lampu.statusLampu+"\nketikkan");
System.out.println("1 untuk Menyalakan lampu\n0 untuk
mematikan lampu");
7
8
9
10
11
12
13
14
15
10.3
if(lampu.setSaklar(sc.nextInt())==0){
lampu.matikanLampu();
}else {
lampu.hidupkanLampu();
}
}
}
Latihan
Modifikasi kelas Lampu di atas dengan menambahkan satu variabel static final
REDU P KAN LAM P U , dan tambahkan method untuk meredupkan lampu. Selanjutnya buat kelas dengan fungsi main untuk menjalankannya.
BAB
11
Nested Class
Nested class merupakan fasilitas yang disediakan oleh java untuk mengelompokkan
kelas secara virtual sehingga lebih mudah dibaca dan dimaintenance. Selain itu hal ini
juga memungkinkan outer class bisa mengakses private variabel dan method dari inner
class.
Contoh kode di atas menunjukkan bahwa di dalam suatu kelas sangat memungkinkan
untuk kita membuat kelas lain, dimana kelas-kelas tersebut memiliki kaitan fungsi atau
kegunaan.
Nested class sendiri dikategorikan menjadi dua bagian yaitu : Non-Static Nested class
dan Static Nested class. Struktur dari pengelompokan inner kelas dapat dilihat dari
gambar berikut ini
Gambar 11.1: Kategori Nested Class
48
BAB 11. NESTED CLASS
11.1
49
Inner Class (Non-Static Nested Class)
Non-static nested class lebih sering disebut sebagai inner class. Secara umum suatu
kelas tidak boleh memiliki akses modifier private, akan tetapi jika kita menggunakan inner
class maka suatu kelas bisa kita buat private. Inner class bisa dibuat secara sederhana
dengan membuat suatu kelas di dalam kelas lain. Syntax Inner class
1 class Outer_Demo{
2
class Nested_Demo{
3
}
4 }
Berikut adalah contoh penggunaan inner class dan cara melakukan akses terhadap method pada inner class. Tulis dan jalankan contoh kode program berikut.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
class OuterDemo{
int num;
//inner class
private class InnerDemo{
public void print(){
System.out.println("Ini merupakan method inner class");
}
}
//Mengakses method inner class dari method outer class
void displayInner(){
InnerDemo inner = new InnerDemo();
inner.print();
}
}
public class Myclass{
public static void main(String args[]){
//Membuat objek outer class
OuterDemo outer=new OuterDem();
//mengakses method outer class.
outer.displayInner();
}
BAB 11. NESTED CLASS
50
Dari kode program sebelumnya terlihat bahwa OuterDemo merupakan kelas paling
luar yang di dalamnya memiliki inner class yaitu InnerDemo, dan satu variabel dengan
nama displayInner untuk mengakses variabel dari kelas InnerDemo. Mehod displayInner
merupakan method yang akan kita gunakan untuk mengakses method dari inner class,
disitu terlihat bahwa kita harus membuat objek atau instance dari inner class untuk
mengakses method di dalamnya.
11.1.1
Mengakses Private Member/Variabel
Seperti yang sudah disebutkan sebelumnya bahwa inner class bisa juga memiliki tipe
akses private. Untuk mengakses variabel private dari inner class proses yang dilakukan
sedikit berbeda. Kita harus membuat instance dari outer kelasnya kemudian dari outer
class kita buat instance dari inner class dengan menggunakan instance dari outer classnya.
1
2
OuterDemo outer = new OuterDemo();
OuterDemo.InnerDemo inner = outer.new InnerDemo();
Berikut ini adalah contoh program untuk mengakses private member dari inner class
1 class OuterDemo {
2
private int num= 175;
3
public class Inner_Demo{
4
public int getNum(){
5
System.out.println("Ini adalah nilai dari variabel private
outerDemo");
6
return num;
7
}
8
}
9 }
1 public class OuterDemoMain {
2
public static void main(String args[]){
3
4
//Membuat Objek OuterDemo
5
OuterDemo outer=new OuterDemo();
6
7
//Membuat Objek InnerDemo
8
OuterDemo.InnerDemo inner=outer.new InnerDemo();
9
System.out.println(inner.getNum());
10
}
11 }
BAB 11. NESTED CLASS
11.2
51
Static Nested Class
Static nested class merupakan inner class yang bertipe static. Kelas dengan tipe ini
bisa diakses oleh outer class tanpa harus membuat instance atau objek dari outer class.
Seperti halnya dengan static member (variabel,method) static member tidak memiliki
akses kedalam instance variabel dan method dari outer class. Syntax dari Static nested
class seperti berikut
1
2
3
4
class MyOuter {
static class Nested_Demo{
}
}
Membuat objek static nested class sedikit berbeda dengan membuat objek dari inner
class. Berikut adalah contoh membuat instance dari Static nested class.
1
2
3
4
5
6
7
8
9
10
11
12
public class Outer{
static class NestedDemo{
public void myMethod(){
System.out.println("Ini adalah method static nested class");
}
}
public static void main(String args[]){
Outer.NestedDemo nested=new Outer.NestedDemo();
nested.myMethod();
}
}
11.3
Latihan
1. Isikan nama dan nim kalian, kemudan buatlah method di dalam StaticNestedClass untuk mengakses method printNama
2. Buatlah method di dalam InnerClass untuk mengakses variabel jurusan.
3. Buatlah kelas dengan fungsi main untuk menampilkan hasil dari kode program
1
2
3
class NestedClass {
String nama="";
String nim="";
BAB 11. NESTED CLASS
4
5
6
7
8
9
10
11
12
13
14
15
16
public void printNama(){
System.out.println (nama +" : "+ nim);
}
static class StaticNestedClass {
static String jurusan="informatika";
}
class InnerClass {
}
}
52
BAB
12
Java Swing
Swing merupakan suatu cara untuk pembuatan aplikasi yang berbasis GUI (Graphical
User Interface) di Java. Sebenarnya terdapat dua cara untuk pembuatan aplikasi yang
berbasis GUI di Java selain menggunakan Swing, Cukup banyak paket di java untuk
melakukan pemrograman GUI, tetapi sebagai pengenalan anda cukup memahami paket
yang berada di javax.swing.
12.1
Komponen Swing
Tidak seperti beberapa komponen AWT yang menggunakan native code, keseluruhan
Swing ditulis menggunakan bahasa pemrograman Java. Swing menyediakan implementasi platform-independent dimana aplikasi yang dikembangkan dengan platform yang
berbeda dapat memiliki tampilan yang sama.
Seperti pada package AWT, package dari Swing menyediakan banyak kelas untuk
membuat aplikasi GUI. Package tersebut dapat ditemukan di javax.swing. Perbedaan
utama antara keduanya adalah komponen Swing ditulis menyeluruh menggunakan Java
mengingat yang belakangan tidak. Kesimpulannya, program GUI ditulis menggunakan
banyak kelas dari package Swing yang mempunyai tampilan look and feel yang sama
meski dijalankan pada beda paltform. Lebih dari itu, Swing menyediakan komponen
yang lebih menarik seperti color chooser dan option pane.
Nama dari komponen GUI milik Swing hampir sama persis dengan komponen GUI
milik AWT. Perbedaan jelas terdapat pada penamaan komponen. Pada dasarnya, nama
komponen Swing sama dengan nama komponen AWT tetapi dengan tambahan huruf
J pada prefixnya. Sebagai contoh, satu komponen dalam AWT adalah button class.
Sedangkan pada Swing, nama komponen tersebut menjadi Jbutton class.
53
BAB 12. JAVA SWING
54
Berikut adalah beberapa contoh komponen swing dan penjelasan dari Swing
1. JComponent : Kelas induk untuk semua komponen Swing, tidak termasuk toplevel container checkbox class dalam package AWT
2. JButton : Tombol “push”. Korespondesi pada button class dalam package AWT
3. JCheckBox : Item yang dapat dipilih atau tidak oleh pengguna. Korespondensi
pada
4. JFileChooser : Mengijinkan pengguna untuk memilih sebuah file. Korespondensi
pada cfilechooser class dalam package AWT
5. JTextField : Mengijinkan untuk mengedit text satu baris. Korespondensi pada
textfield class dalam package AWT.
6. JFrame : Turunan dan korepondensi pada frame class dalam package AWT tetapi
keduanya sedikit tidak cocok dalam kaitannya dengan menambahkan komponen
pada kontainer. Perlu mendapatkan content pane yang terbaru sebelum menambah sebuah komponen.
7. JPanel : Turunan Jcomponent. Kontainer class sederhana tetapi bukan top-level.
Korespondensi pada panel class dalam package AWT.
8. JApplet : Turunan dan korepondensi ke Applet class dalam package AWT. Juga
sedikit tidak cocok dengan applet class dalam kaitannya dengan menambahkan
komponen pada container
9. JOptionPane : Turunan Jcomponent. Disediakan untuk mempermudah menampilkan pop- up kotak dialog.
10. JDialog : Turunan dan korespondensi pada dialog class dalam package AWT. Biasanya digunakan untuk menginformasikan sesuatu kepada pengguna atau prompt
pengguna untuk input.
11. JColorChooser : Turunan Jcomponent. Mengijinkan pengguna untuk memilih
warna
12.2
Setting Up Top-Level Containers
Seperti disebutkan diatas, top-level containers seperti JFrame dan JApplet dalam
Swing sangat tidak cocok dengan AWT. Ini adalah syarat menambahkan komponen ke
dalam kontainer. Jika Anda ingin menambahkan langsung sebuah komponen kedalam
BAB 12. JAVA SWING
55
kontainer sebagai kontainer AWT, pertama-tama Anda telah mendapatkan content pane dari kontainer. Untuk melakukan hal tersebut, Anda akan menggunakan metode
getContentPane dari kontainer.
Perlu diperhatikan pada package java.awt masih saja diimpor karena layout manager
yang digunakan terdapat pada package tersebut. Juga, memberi judul pada frame dan
mengepack komponen di dalam frame dapat juga dilakukan untuk frame AWT.
Latihan
Tulis dan jalankan kode program berikut ini :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package java_swing;
import javax.swing.*;
public class Coba_GUI {
public static void main(String[] args) {
GUI g = new GUI();
}
}
class GUI extends JFrame {
final JTextField fnama = new JTextField(10);
JLabel lnama = new JLabel(" Nama Lengkap ");
JLabel ljeniskelamin = new JLabel(" Jenis Kelamin ");
JRadioButton rbPria = new JRadioButton(" Laki-Laki ");
JRadioButton rbWanita = new JRadioButton(" Perempuan ");
JLabel lagama = new JLabel(" Agama ");
String[] namaAgama =
{"Islam","Kristen","Katolik","Hindu","Budha"};
JComboBox cmbAgama = new JComboBox(namaAgama);
JLabel lhobby = new JLabel(" Hobby ");
JCheckBox cbSepakbola = new JCheckBox(" Sepak Bola ");
JCheckBox cbBasket = new JCheckBox(" Basket ");
BAB 12. JAVA SWING
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
JButton btnSave = new JButton("Ok");
public GUI() {
setTitle("Mencoba kombinasi kompunen GUI");
setDefaultCloseOperation(3);
setSize(350, 200);
ButtonGroup group = new ButtonGroup();
group.add(rbPria);
group.add(rbWanita);
setLayout(null);
add(lnama);
add(fnama);
add(ljeniskelamin);
add(rbPria);
add(rbWanita);
add(lagama);
add(cmbAgama);
add(lhobby);
add(cbSepakbola);
add(cbBasket);
add(btnSave);
lnama.setBounds(10, 10, 120, 20);
fnama.setBounds(130, 10, 150, 20);
ljeniskelamin.setBounds(10, 35, 120, 20);
rbPria.setBounds(130, 35, 120, 20);
rbWanita.setBounds(230, 35, 120, 20);
lagama.setBounds(10, 60, 150, 20);
cmbAgama.setBounds(130, 60, 150, 20);
lhobby.setBounds(10, 85, 120, 20);
cbSepakbola.setBounds(130, 85, 100, 20);
cbBasket.setBounds(230, 85, 150, 20);
btnSave.setBounds(100, 130, 120, 20);
setLocationRelativeTo(null);
setVisible(true);
}
}
56
BAB 12. JAVA SWING
57
Selain itu kita dapat menggabungkannya dengan AWT seperti pada contoh program
berikut
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class Login {
public static void main(String[] args) {
final JFrame frame = new JFrame("Login");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setSize(255, 150);
final JPanel panel = new JPanel();
frame.getContentPane().setLayout(new GridLayout());
final JLabel usertxt = new JLabel("Username :");
final JLabel passtxt = new JLabel("Password :");
final JTextField user = new JTextField(10);
final JPasswordField pass = new JPasswordField(10);
JButton blogin = new JButton("Login");
JButton bclose = new JButton("Cancel");
panel.add(usertxt);
panel.add(user);
panel.add(passtxt);
panel.add(pass);
panel.add(blogin);
panel.add(bclose);
frame.add(panel);
frame.setVisible(true);
blogin.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
String usr = user.getText();
String pas = pass.getText();
if (usr.equals("") && pas.equals("")) {
JOptionPane.showMessageDialog(null, "Maaf Username/password
tidak boleh kosong");
} else {
if (usr.equals("admin") && pas.equals("admin")) {
JOptionPane.showMessageDialog(null, "Berhasil login sebagai
: " + usr);
BAB 12. JAVA SWING
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
user.setText("");
pass.setText("");
frame.setTitle("Login");
frame.setVisible(true);
} else {
JOptionPane.showMessageDialog(null, "Maaf User/password Anda
Salah");
user.setText("");
pass.setText("");
}
}
}
});
bclose.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
frame.setVisible(false);
}
});
}
}
Pekerjaan Rumah
1. Buatlah Sebuah form dengan swing yang memiliki 3 buah tombol, dimana setiap
tombol akan merubah warna dari form ketika tombol tersebut diklik
2. Tambahkan Icon pada setiap tombol pada form
3. Buatlah aplikasi untuk menghitung Luas bangun datar seperti Segi tiga, Persegi,
Persegi Panjang, Jajaran Genjang dan Layang-layang.