Professional Documents
Culture Documents
oleh:
UNIVERSITAS JAMBI
1
DAFTAR ISI
Daftar Isi.....................................................................................................................2
Rencana Pembelajaran Semester................................................................................3
2
RENCANA PEMBELAJARAN SEMESTER
Capaian Pembelajaran :
4
5
6 Kelas dan Objek Mahasiswa memahami dan mampu menerapkan
7 konsep kelas dan objek.
8 UTS
Inheritance Mahasiswa memahami konsep Inheritance dalam
9
Objek Oriented
Overloading dan Overriding Mahasiswa memahami tujuan dan manffat
10 Overloading dan Overriding pada pemograman
berorientasi objek
Polymorph Mahasiswa memahami konsep Polymorph dalam
11
Objek Oriented
Abstraction Mahasiswa memahami abstract class dan abstract
12
method dalam Objek Oriented Programming
Encapsulation Mahasiswa memahami konsep Encapsulation dalam
13
Objek Oriented
Interface Mahasiswa memahami kelas Interface dan
14
perbedaannya dengan class dan abstract
15 Design Patterns Mahasiswa memahami konsep dasar Design Pattern.
16 UAS
3
BAB I
Kelebihan java:
1. Multiplatform: dapat dijalankan di beberapa platform/sistem operasi komputer.
4
2. OOP (Object Oriented Programming):semua aspek yang terdapat di Java adalah
Objek.
3. Perpustakaan Kelas yang lengkap: Java terkenal dengan kelengkapan library/
perpustakaan (kumpulan program yang disertakan dalam pemrograman java) yang
sangat memudahkan dalam penggunaan oleh para pemrogram untuk membangun
aplikasinya.
4. Bergaya C++: memiliki sintaks seperti bahasa pemrograman [C++] sehingga menarik
banyak pemrogram C++ untuk pindah ke Java.
5
2. Kurung kurawal{} : symbol menandai awal dan akhir suatu blok program
3. Komentator : diawali tanda // atau tanda /*……*/ titik koma (;) : setiap pernyataan
diakhiri dengan symbol titk-koma
Hello World.java
Tipe data referensi : terbentuk dari tipe data sederhana dan tipe data referensi.
Operator
Operator digunakan untuk melakukan pengolahan data, melibatkan konstanta dan variabel
yang telah kita buat.
6
1.3 Percabangan dan Perulangan
if - else
Statement if akan menentukan sebuah blok kode mana yang akan di eksekusi jika ada
persyaratan yang bernilai true (benar).
if(kondisi){
//Kode disini akan dieksekusi jika kondisi true
}
dimana, kondisi adalah sebuah penyataan logika (true atau false) pada variabel bertipe
boolean.
Contoh.
7
}
}
}
swicth – case
Ketika pernyataan switch ditemukan pada potongan kode program, java pertama kali
akan memeriksa switch_expression dan menuju ke case yang akan menyamakan nilai yang
dimiliki oleh switch_expression. Selanjutnya program akan mengeksekusi pernyataan pada
kode setelah case yang ditemukan sampai menemui pernyataan break. Jika tidak ditemui case
yang cocok, maka program akan mengeksekusi default. Bagian default adalah opsional.
Sebuah pernyataan switch bisa jadi tidak memiliki kode default. Ada 2 penggunaan keyword
break, untuk keluar dari kendali percabangan switch, untuk keluar dari kendali perulangan.
Dengan keyword ini berarti percabangan/perulangan akan diakhiri, kemudian eksekusi
dilanjutkan ke pernyataan setelah blok percabangan/perulangan tersebut. Tidak seperti
statement if, pada struktur switch statement dieksekusi tanpa memerlukan tanda kurung
kurawal ({}). Ketika sebuah case pada statement switch menemui kecocokan, semua
statement pada case tersebut akan dieksekusi. Untuk menghindari program mengeksekusi
statement pada case berikutnya, kita menggunakan statement break sebagai statement akhir.
Contoh swicth – case
While
Statemen perulangan (looping) adalah blok perintah yang akan mengulangulang statemen di
dalam blok perintah selama kondisi menghasilkan nilai true dan akan berhenti jika kondisi
bernilai false.
Syntax
while (kondisi) {
statement
counter
8
}
Contoh.
Do – while
Perulangan dengan bentuk do while adalah perulangan dengan membalikkan logika
perulangan dengan teknik while.Dalam perulangan do while, pernyataan dieksekusi dulu,
baru kemudian kondisi variabel kontrol perulangannya diperiksa apakah memenuhi syarat
atau tidak.
Syntax
do {
statement
counter
} while (kondisi)
9
Contoh.
For
Perulangan dengan teknik ini dikontrol oleh tiga bagian yang ada dalam tanda kurung
dan masing-masing bagian ini dipisahkan oleh titik-koma. Pada bagian pertama(inisialisasi
ekspresi), sebuah variabel akan di deklarasikan sebagai sebuah titik awal dari perulangan,
biasanya variable ini mempunyai tipe data integer atau float. Sementara pada bagian kedua
disinilah perulangan akan diperiksa apakah masih memenuhi syarat atau tidak, jika masih
memenuhi syarat maka statement dibawahnya akan di eksekusi. Sedangkan bagian ketiga
adalah bagian dimana jika bagian kedua masih memenuhi syarat maka nilai variabel akan
ditambahkan sesuai dengan syarat yang dituliskan. Bagian ketiga ini secara otomatis akan
tidak dibaca oleh program jika kondisi pada bagian kedua sudah tidak lagi memenuhi syarat,
dan perulangan pun menjadi terhenti.
Syntax
10
Contoh
Array
Dalam pendeklarasian variabel, kita sering menggunakan sebuah tipe data beserta
nama variabel atau identifier yang unik. Apabila kita ingin menggunakan variabel tersebut,
kita akan memanggil dengan nama identifier-nya. Sebagai contoh, kita memiliki tiga variabel
dengan tipe data int yang memiliki identifier berbeda untuk tiap variabel.
int number1;
int number2;
int number3;
number1 = 1;
number2 = 2;
number3 = 3;
Seperti yang dapat Anda perhatikan pada contoh diatas, kode tersebut akan sia-sia
karena harus menginisialisasi dan menggunakan setiap variabel padahal sebenarnya variabel-
11
variabel tersebut digunakan untuk tujuan yang sama. Pada bahasa pemrograman Java maupun
di bahasa pemrograman yang lain, terdapat sebuah kemampuan untuk menggunakan satu
variabel yang dapat menyimpan beberapa data dan memanipulasinya dengan lebih efektif.
Tipe variabel inilah yang disebut sebagai array.
Sebuah array akan menyimpan beberapa item data yang memiliki tipe data sama didalam
sebuah blok memori yang berdekatan yang kemudian dibagai menjadi beberapa ruang. Array
adalah sebuah variabel/sebuah lokasi tertentu yang memiliki satu nama sebagai identifier,
namun identifier ini dapat menyimpan lebih dari sebuah nilai.
Deklarasi array:
Array harus dideklarasikan seperti layaknya sebuah variabel. Pada saat mendeklarasikan
array, anda harus membuat sebuah daftar dari tipe data, yang diikuti oleh sepasang tanda
kurung [], lalu diikuti oleh nama identifier-nya. Sebagai contoh,
int []ages;
int ages[];
Untuk mengakses sebuah elemen dalam array, atau mengakses sebagian dari array, Anda
harus menggunakan sebuah angka atau yang disebut sebagai indeks atau subscript.
Pada saat memasukkan nilai ke dalam array, sebuah nomor indeks atau subscript telah
diberikan kepada tiap anggota array, sehingga program dan programmer dapat mengakses
setiap nilai pada array apabila dibutuhkan. Nilai indeks selalu dalam tipeinteger, dimulai dari
angkanol dan dilanjutkan ke angka berikutnya sampai akhir array. Sebagai catatan bahwa
indeks didalam array dimulai dari 0 sampai dengan (ukuranArray-1).
Sebagai contoh, pada array yang kita deklarasikan tadi, kita mempunyai,
12
System.out.print(ages[99]);
Perlu diperhatikan bahwa sekali array dideklarasikan dan dikonstruksi, nilai yang disimpan
dalam setiap anggota array akan diinisialisasi sebagai nol. Oleh karena itu, apabila Anda
menggunakan tipe data seperti String, array tidak akan diinisalisasi menjadi string kosong “”.
Untuk itu Anda tetap harus membuat String array secara eksplisit.
Berikut ini adalah contoh kode untuk mencetak seluruh elemen didalam array. Dalam contoh
ini digunakanlah pernyataan for loop, sehingga kode kita menjadi lebih pendek.
Panjang Array
Untuk mengetahui berapa banyak elemen didalam sebuah array, Anda dapat menggunakan
atribut length dari array. Atribut ini akan mengembalikan ukuran dari array itu sendiri.
Sebagai contoh,
arrayName.length
Pada contoh sebelumnya, kita dapat menuliskannya kembali seperti berikut ini,
Array Multidimensi:
Array multidimensi diimplementasikan sebagai array yang terl etak di dalam array. Array
multidimensi dideklarasikan dengan menambahkan jumlah tanda kurung setelah nama array.
Sebagai contoh,
// karakter array 8 x 16 x 24
char[][][] threeD = new char[8][16][24];
13
// String array 4 baris x 2 kolom
String[][] dogs = {{ "terry", "brown" },
{ "Kristin", "white" },
{ "toby", "gray"},
{ "fido", "black"}
};
Untuk mengakses sebuah elemen didalam array multidimensi, sama saja dengan mengakses
array satu dimensi. Misalnya saja, untuk mengakses elemen pertama dari baris pertama
didalam array dogs, kita akan menulis,
System.out.print( dogs[0][0] );
14
BAB II
Dalam dunia nyata , kita dapat menjumpai banyak objek di sekitar kita seperti, kucing,
anjing, manusia dan lain-lain. Setiap objek memiliki state dan behavior. Misalkan seekor
anjing, dengan state-nya adalah nama, makanan, warna, dan behavior-nya menggongong,
menggigit ekor, dan berlari. Jika membandingkan software objek dengan objek di dunia
nyata, mereka memiliki karakteristik yang sama. Objek pada software juga memiliki state dan
behavior. State pada objek software disimpan pada field dan behavior ditunjukkan melalui
method. Jadi pada pengembangan software, method dioperasikan pada internal state dari
sebuah objek dan komunikasi antar objek dapat dilakukan melalui method.
Class adalah struktur dasar dari OOP (Object Oriented Programming). Terdiri dari dua
tipe yaitu : field (attribute/property) dan method (behavior). Class digunakan untuk
mendeklarasikan sebuah variabel yang berupa objek atau dinamakan “referensi objek (object
reference)”.
1. Attribute
Berlaku sebagai data, didefinisikan oleh class,individu, berbeda satu dengan lainnya.
Menggambarkan tampilan, status, kualitas dari object.
Contoh :
class motorcycle
attribute-nya = color [red, green, silver]
style [cruiser, sport bike, standart]
make [Honda, BMW]
2. Behavior
Berlaku sebagai method (operasi). Menggambarkan bagaimana sebuah instance class
beroperasi misal bagaimana reaksi dari class jika diminta untuk melakukan sesuatu hal.
Contoh :
class motorcycle behavior-nya = start the engine
stop the engine
change gear.
Contoh
void barking() {
15
}
void hungry() {
}
void sleeping() {
}
}
Konstruktor:
Salah satu hal yang penting dalam kelas adalah kontruktor. Setiap kelas memiliki contruktor.
Jika kita tidak secara langsung membuat sebuah kontruktor, compiler java secara otomatis
akan membuat contruktor. Setiap kali objek baru dibuat dari sebuah kelas, paling tidak satu
contruktor akan dieksekusi. Sarat utama dari sebuah konstruktor adalah harus memuliki nama
yang sama dengan nama kelas. Sebuah kelas dapat memiliki lebih dari satu kontruktor.
Contoh:
Ketika sebuah objek dimbuat dari sebuah kelas, maka koden kontruktor akan langsung
dieksekusi.
pada contoh diatas sebuah objek dibuat dari kelas Puppy dengan memasukkan parameter
yang dibutuhkan oleh kelas yakni parameter name dengan nilai tommy.
Variable dan method dapat diakses melalui objek yang telah dibuat melalui sebuah kelas.
16
Contoh:
17
Statement Import: merupakan suatu cara yang digunakan untuk mengacu suatu lokasi,
sehingga compiler dapat menemukan class yang ingin digunakan. Sebagai contoh, baris kode
berikut akan memerintahkan compiler untuk men-load semua kelas yang tersedia pada
direktoru java_installation/java/io
import java.io.*;
2.3 Method
Method adalah fungsi atau prosedur yang dibuat oleh seorang programmer didalam
suatu Class. Dengan kata lain, method pada sebuah kelas hampir sama dengan fungsi atau
prosedur pada pemrograman prosedural. Pada sebuah method di dalam sebuah kelas juga
memiliki izin akses seperti halnya atribut pada kelas, izin akses itu antara lain private, public
dan protected yang memiliki arti sama pada izin akses atribut yang telah dibahas sebelumnya.
Sebuah kelas boleh memiliki lebih dari satu method dengan nama yang sama asalkan
memiliki parameter masukan yang berbeda sehingga kompiler atau interpreter dapat
mengenali method mana yang dipanggil. Hal ini dinamakan overloading.
Di dalam sebuah kelas, terdapat juga yang disebut sebagai method atau atribut statis
yang memiliki kata kunci static. Maksud dari statis di sini adalah method yang dapat diakses
secara berbagi dengan semua objek lain tanpa harus membuat objek yang memiliki method
statis tadi (tanpa proses new), tapi sebuah method statis mempunyai keterbatasan yaitu hanya
dapat mengakses atribut atau method lain di dalam kelas yang membungkusnya yang juga
bersifat statis. Method statis biasanya diimplementasikan untuk method main.
Didalam suatu class, behavior disimpan dalam bentuk Method. Method merupakan
serangkaian statemen / perintah (perintah = baris program) dalam suatu class yang
menghandle task tertentu. Method merupakan hal-hal yang bisa dilakukan oleh object dari
suatu class. Method didefinisikan pada class akan tetapi dipanggil melalui object.
Method memiliki peranan diantaranya :
a. merubah nilai atribut dari suatu object,
b. menerima informasi dari object lain, dan
c. mengirim informasi ke obyek lain untuk melakukan suatu task (cara obyek
berkomunikasi dengan obyek lain adalah dengan menggunakan method).
a, b → formal parameters
18
Secara umum sintak method dapat digambarkan sebagai berikut.
method body → Statemen dan kode yang akan dieksekusi ketika method di akses
Sebagai contoh studi kasus, kita akan membuat dua kelas, yakni kelas Employee dan
EmployeeTest. Kelas employee terdiri dari empat variabel, yakni name, age, designation dan
salary.
Employee.java
import java.io.*;
public class Employee {
String name;
int age;
String designation;
double salary;
19
/* Assign the salary to the variable salary.*/
public void empSalary(double empSalary) {
salary = empSalary;
}
Pada Java proses dimulai pada main class, untuk menggunakan class Employee diatas
sebagai contoh, kita buat pada kelas terpisah dengan nama EmployeeTest.java yang memiliki
main kelas.
EmployeeTest.java
import java.io.*;
public class EmployeeTest {
empTwo.empAge(21);
empTwo.empDesignation("Software Engineer");
empTwo.empSalary(500);
empTwo.printEmployee();
}
}
Name:James Smith
Age:26
Designation:Senior Software Engineer
Salary:1000.0
20
Name:Mary Anne
Age:21
Designation:Software Engineer
Salary:500.0
Java membolehkan menyisipkan suatu kelas ke dalam kelas lainnya. Kelas sisipan ini
disebut kelas Inner. Kelas Inner berguna untuk mendukung suatu proses yang akan dijalankan
oleh kelas luarnya. Beberapa ketentuan kelas Inner:
1. Kelas Luar yang mengandung kelas Inner, bila dikompilasi akan menghasilkan dua
file *.class, yaitu Luar.class dan Luar$Inner.class.
2. Kelas Inner boleh tidak diberi nama, yang disebut Anonymous Inner.
3. Kelas Inner dapat diberi modifier akses public, atau protected, atau default, ataupun
private.
4. Untuk mengakses referensi this dari kelas luar digunakan bentuk NamaKelasLuar.this.
5. Kelas Luar ikut bertanggung-jawab dalam instansiasi kelas Inner (yang non static).
6. Kalau objek kelas Luar adalah a, dan objek kelas Inner adalah b, maka sintaks yang
benar adalah :
Luar a = new Luar(); Luar.Inner b = a.new Inner();
Jika kelas Inner bersifat static, maka objek milik kelas Inner dapat dibuat
sendiri tanpa melalui kelas Luarnya, (Artinya kelas Inner tidak dapat
mengakses attribute ataupun method non static milik kelas Luarnya).
Inner Class adalah kelas yang disisipkan di dalam kelas yang lain. Fungsi kelas sisipan ini
adalah mendukung suatu proses yang akan dijalankan oleh kelas utamanya. Inner Class
bersifat tersarang terhadap kelas – kelas utamanya, seperti halnya blok penyeleksian (if, for)
yang tersarang pada blok penyeleksian lainnya atau method yang tersarang pada method
lainnya. Analogi Inner Class Inner Class dapat dianalogikan sebagi hubungan antara manusia
dan paru – paru. Setiap manusia pasti bernafas dengan menggunakan paru – paru. Dalam hal
ini berarti kinerja dari paru – paru turut mendukung/menetukan kinerja dari manusia. Dalam
bahasa pemrograman berorientasi objek manusia dapat dikatakan sebagai outer class dan paru
– paru sebagai inner class-nya.
class Outer_Demo {
int num;
// inner class
private class Inner_Demo {
public void print() {
System.out.println("This is an inner class");
}
}
21
void display_Inner() {
Inner_Demo inner = new Inner_Demo();
inner.print();
}
}
22
BAB III
INHERITANCE
3.1 Inheritance
Inheritance (Pewarisan) merupakan salah satu dari tiga konsep dasar OOP. Konsep
inheritance ini mengadopsi dunia riil dimana suatu entitas/obyek dapat mempunyai
entitas/obyek turunan. Dengan konsep inheritance, sebuah class dapat mempunyai class
turunan. Suatu class yang mempunyai class turunan dinamakan parent class atau base class.
Sedangkan class turunan itu sendiri seringkali disebut subclass atau child class. Suatu
subclass dapat mewarisi apa-apa yang dipunyai oleh parent class.
Karena suatu subclass dapat mewarisi apaapa yang dipunyai oleh parent class-nya,
maka member dari suatu subclass adalah terdiri dari apa-apa yang ia punyai dan juga apa-apa
yang ia warisi dari class parent-nya. Kesimpulannya, boleh dikatakan bahwa suatu subclass
adalah tidak lain hanya memperluas (extend) parent class-nya. Dengan menambahkan kata
kunci extends setelah deklarasi nama class, kemudian diikuti dengan nama parent class-nya.
Kata kunci extends tersebut memberitahu kompiler Java bahwa kita ingin melakukan
perluasan class.
Kita baru perlu menerapkan inheritance pada saat kita jumpai ada suatu class
yang dapat diperluas dari class lain.
Deklarasi Inheritance
extends merupakan keyword yang digunakan untuk mewariskan properties sebuah kelas.
class Super {
.....
.....
}
class Sub extends Super {
.....
.....
}
Contoh:
Misalkan terdapat kelas pegawai
23
public class Manajer {
public String nama;
public double gaji;
public String departemen;
}
Dari 2 buah class diatas, kita lihat class Manajer mempunyai data member yang
identik sama dengan class Pegawai, hanya saja ada tambahan data member departemen.
Sebenarnya yang terjadi disana adalah class Manajer merupakan perluasan dari class Pegawai
dengan tambahan data member departemen. Disini perlu memakai konsep inheritance,
sehingga class Manajer dapat kita tuliskan seperti berikut.
1. Untuk membedakan antara anggota dari superclass dari anggota subclass, jika mereka
memiliki nama yang sama
2. Digunakan untuk memanggil contruktor superclass dari subclass
Jika class mewariskan properties dari class yang lain, dan jika member superclass memiliki
nama yang sama dengan subclass, untuk membedakan variabel keduanya bisa menggunakan
keyword super seperti dibawah ini.
super.variable
super.method();
contoh:
class Super_class {
int num = 20;
24
}
super(values);
Contoh:
class Superclass {
int age;
Superclass(int age) {
this.age = age;
}
25
public void getAge() {
System.out.println("The value of the variable named age in super class is: " +age);
}
}
Is – a meruapakan suatu cara yang digunakan untuk menyatakan: suatu objek merupakan
salah satu tipe dari objek lain. Berikut contoh, bagaimana keyword extends digunakan untuk
melakukan pewarisan tersebut.
Maka dengan menggunakan hubungan IS- A, maka kita dapat menyatakan bahwa.
26
Reptile IS-A Animal
Dog IS-A Mamal
dan Juga : Dog IS-A Animal
Selain hubungan IS -A dalam menerapkan Inheritance pada java, HAS – A juga dapat
menjelaskan hubungan dalam inheritance yang didasarkan pada penggunaan. Hubungan ini
menjelaskan apakah suatu kelas tertentu MEMILIKI sesuatu hal tertentu dari superclassnya.
Hubungan ini dapat membantu mengurangi duplikasi kode dan bugs.
Contoh:
27
BAB IV
Suatu class boleh memiliki lebih dari satu contruktor. Contruktor yang terdiri dari dua
atau lebih disebut dengan overloading contructor. Overloading contructor termasuk salah satu
dari ciri program OOP yaitu polimorfisme. Polimorfisme berarti berbeda-beda bentuk. Syarat
pada overloading constructor adalah signature dari constructor-constructor tersebut tidak
sama. Signature adalah informasi yang membedakan method seperti nama method, jumlah
parameter, tipe data, dan tipe kembalian (return type).
class Titik3D{
double x;
double y;
double z;
Titik3D(double ax){
x = ax;
y = 1;
z = 1;
}
class ContohTitik3D{
public static void main(String args[]){
Titik3D p = new Titik3D(1,1);
System.out.println(“p.x = “+p.x);
System.out.println(“p.y = “+p.y);
System.out.println(“p.z = “+p.z);
28
System.out.println(“p.y = “+p.y);
System.out.println(“p.z = “+p.z);
}
}
4.2 Overloading
Overloading adalah suatu keadaan dimana beberapa method memiliki nama yang
sama tetapi fungsionalitasnya berbeda. Contoh:
- titik(x,y);
- titik (x,y,z)
Ciri-ciri Overloading:
import java.awt.Point;
public void buatSegiempat(int x1, int y1, int x2, int y2){
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
}
public void buatSegiempat(Point topLeft, Point bottomRight){
x1 = topLeft.x;
y1 = topLeft.y;
x2 = bottomRight.x;
y2 = bottomRight.y;
}
29
x1 = topLeft.x;
y1 = topLeft.y;
x2 = (x1 + w);
y2 = (y1 + h);
}
void cetakSegiempat(){
System.out.print(“Segiempat: <”+x1+”, “+ y1);
System.out.println(“, “ + x2+”,”+y2+”>”);
}
System.out.println();
System.out.println(“Buat segiempat dengan point (10,10) dan point (20,20):”);
rect.buatSegiempat(new Point(10,10), new Point(20,20));
rect.cetakSegiempat();
System.out.println();
System.out.println(“Buat segiempat dengan 1 point (10,10),
koordinat(50,50)”);
rect.buatSegiempat(new Point(10,10), 50,50);
rect.cetakSegiempat();
}
}
4.3 Overriding
Contoh overriding
class Parent{
public void Info(){
System.out.println(“ini class parent”);
}
30
class Child extends Parent{
public void Info(){
System.out.println(“ini class child”);
}
}
}
Method yang terkena Override (overriden method) tidak boleh mempunyai modifier yang
lebih luas aksesnya daripada mehod yang meng-override (overriding method).
Contoh lain
class Animal {
public void move() {
System.out.println("Animals can move");
}
}
31
BAB V
POLIMORPISM
dimana Manager() adalah kontruktor pada class Manager yang merupakan subclass dari class
Employee.
Virtual Method Invocation (VMI) bisa terjadi jika terjadi polimorfisme dan
overriding. Pada saat obyek yang sudah dibuat tersebut memanggil overridden method pada
parent class, kompiler Java akan melakukan invocation (pemanggilan) terhadap overriding
method pada subclass, dimana yang seharusnya dipanggil adalah overridden method. Berikut
contoh terjadinya VMI:
class Parent {
int x = 5;
public void Info() {
System.out.println(“Ini class Parent”);
}
}
Nilai x = 5
Ini class Child
Polymorphic arguments adalah tipe suatu parameter yang menerima suatu nilai yang
bertipe subclass-nya. Berikut contoh dari polymorphics arguments:
32
class Pegawai {
…
}
Pernyataan instanceof sangat berguna untuk mengetahui tipe asal dari suatu
polymorphic arguments. Untuk lebih jelasnya, misalnya dari contoh program sebelumnya,
kita sedikit membuat modifikasi pada class Tes dan ditambah sebuah class baru Kurir, seperti
yang tampak dibawah ini:
…
class Kurir extends Pegawai {
…
}
33
Seringkali pemakaian instanceof diikuti dengan casting object dari tipe parameter ke tipe
asal. Misalkan saja program kita sebelumnya. Pada saat kita sudah melakukan instanceof dari
tipe Manajer, kita dapat melakukan casting object ke tipe asalnya, yaitu Manajer. Caranya
adalah seperti berikut:
…
if (peg instanceof Manajer) {
Manajer man = (Manajer) peg;
…lakukan tugas-tugas manajer…
}
…
1. Agar komunikasi antar obyek satu dengan lainnya dapat terjadi secara dinamis,
dimana “message”/permintaan yang disampaikan dari satu obyek ke obyek lain bisa
berbeda-beda tanggapannya dengan obyek lainnya.
2. Diimplementasikan dalam respon yang berbeda-beda, melalui pewarisan dan
implementasi interface.
3. Digunakan juga untuk standarisasi
Kemampuan obyek-obyek yang berbeda untuk memberi respon terhadap permintaan yang
sama, sesuai dengan cara masing-masing obyek.
1. Polymorfisme melalui inheritance (extends)
2. Polymorfisme melalui interface (implements)
1. Overriding Method
2. Overloading Method
34
A contoh = new B()
• Maka obyek contoh sebenarnya bertipe class A namun berperilaku secara class B
• Atribut dan method pada obyek contoh akan mengikuti class A, bukan class B
Review: Overriding
1. Subclass yang berusaha memodifikasi tingkah laku yang diwarisi dari superclass.
2. Tujuan: subclass memiliki tingkah laku yang lebih spesifik.
3. Dilakukan dengan cara mendeklarasikan kembali method milik parent class di
subclass.
Contoh Overriding
class Animal {
35
public String bersuara() {
return "Suara binatang";
}
}
Review – Overloading
Aturan overloading:
1. Nama method harus sama
2. Daftar parameter harus berbeda
3. Return type boleh sama, juga boleh berbeda
36
BAB VI
ABSTRACTION
Bila subclass yang diturunkan dari abstract class tidak mengimplementasikan isi
semua method abstrak parent class, maka subclass tersebut harus tetap dideklarasikan
abstract. Dan deklarasi method abstract pada subclass tersebut boleh tidak dituliskan kembali.
1. Class Abstract berisi beberapa method dan beberapa method abstract. Class Abstract
berisi sebagian implementasi, dan subclass yang melengkapi implementasinya.
Dengan kata lain Class Abstract memiliki beberapa kesamaan (Bagian yang
diimplementasikan oleh subclass) dan memiliki perbedaan (method yang dimiliki
sendiri oleh class abstract )
2. Deklarasikan method abstract, jika ada satu atau lebih subclass yang diharapkan
mempunyai fungsionalitas yang sama tapi implementasi berbeda.
3. Gunakan class abstract untuk mendefinisikan behavior secara umum sebagai
superclass, sedangkan subclass menyediakan implementasi detail.
37
4. Jika class abstract semua method merupakan method abstract, sebaiknya class abstract
tersebut diganti menjadi Interface.
Bentuk umum:
/* kode lainnya*/
}
Misalnya kita ingin membuat superclass yang mempunyai method tertentu yang berisi
implementasi, dan juga beberapa method yang akan di-overridden oleh subclasses nya.
Sebagai contoh, kita akan membuat superclass bernama LivingThing. class ini mempunyai
method tertentu seperti breath, eat, sleep, dan walk. Akan tetapi, ada beberapa method di
dalam superclass yang sifatnya tidak dapat digeneralisasi. Kita ambil contoh, method walk.
Tidak semua kehidupan berjalan(walk) dalam cara yang sama. Ambil manusia sebagai misal,
kita manusia berjalan dengan dua kaki, dimana kehidupan lainnya seperti anjing berjalan
dengan empat kaki. Akan tetapi, beberapa ciri umum dalam kehidupan sudah biasa, itulah
kenapa kita inginkan membuat superclass umum dalam hal ini.
38
Sekarang mari membuat contoh class abstract.
Ketika class meng-extend class abstract LivingThing, dibutuhkan untuk override method
abstract walk(), atau lainnya, juga subclass akan menjadi class abstract, oleh karena itu tidak
dapat di-instantiate. Contohnya,
Jika class Human tidak dapat overridde method walk, kita akan menemui pesan error berikut
ini,
39
BAB VII
ENCAPTULATION
Encapsulation yang terkadang disebut juga dengan information hiding pada dasarnya
adalah kombinasi antara data dan method pada sebuah class yang ditujukan untuk
menyembunyikan detail dari user (pengakses class) terhadap suatu object. Jika kita ambil
contoh, maaf, yang agak sedikit vulgar tentang bagaimana orang lain “mengakses data” milik
kita. Anggaplah orang ingin tahu apakah kita mempunyai penyakit panu yang merupakan
suatu “data” pada diri kita. Sudah barang tentu, secara umum, kita tidak akan mengijinkan
orang lain melihat langsung kulit kita karena itu adalah bagian “pribadi”. Akan tetapi orang
lain dapat mengetahuinya menggunakan “metode” penyampaian yang kita berikan: “Saya
tidak panuan”. Jadi ada bagian “publik” dan juga ada bagian “pribadi”.
Dengan menggunakan encapsulation kita dapat membatasi akses langsung suatu class atau
program kecuali melalui suatu method yang sudah diberikan.
Perhatikan class Mahasiswa dan class MahasiswaTest berikut ini. Perhatikan pula cara
deklarasi atribut dan methodmethod yang terdapat dalam class Mahasiswa.
Contoh:
40
//mengakses atribut alamat
public String getAlamat() {
return alamat;
}
//mengakses atribut nama
public String getNama() {
return nama;
}
//mengakses attribut nim
public String getNim() {
return nim;
}
//mengisi atribut alamat
public void setAlamat(String alamat) {
this.alamat = alamat;
}
}
class MahasiswaTest{
public static void main(String[] args){
Mahasiswa objMhs;
String localNama, localNim;
objMhs=new Mahasiswa("Andriani","123456");
objMhs.setAlamat("Watugong 212 Malang");
localNama=objMhs.getNama();
localNim=objMhs.getNim();
}
}
Bukankah lebih sederhana jika pada class Mahasiswa kita deklarasikan data nama,
nim, dan alamat dengan acces modifier public daripada harus membuat method-method
khusus untuk mengaksesnya. Demikian pula cara penggunaannya class MahasiswaTest,
mengambil dan mengubah isi data akan lebih sederhana.
class Mahasiswa{
//deklarasi private attribute
public String nama;
public String nim;
public String alamat;
}
class MahasiswaTest{
public static void main(String[] args){
Mahasiswa objMhs;
String localNama, localNim;
objMhs=new Mahasiswa("Andriani","123456");
41
localNim=objMhs.nim;
}
}
Saat membuat object objMhs yang bisa dianggap sebagai proses “membuat seorang
mahasiswa”, maka data nama dan nim tidak boleh diubah selama mahasiswa tersebut ada
sehingga kita harus membuat data nama dan nim sebagai data read only. Jika data-data ini
dibuat tidak readonly yang dapat memberikan peluang akses penuh, maka kemungkinan akan
terdapat masalah tersendiri. Dengan demikian kita perlu melindungi data nama dan nim dari
perubahan-perubahan dari luar class, sehingga perlu diberikan modifier private. Kita akan
buktikan pada kasuskasus berikutnya.
Method getNama, getNim, dan getAlamat disebut sebagi accesor method karena
method tersebut memberikan kembalian nilai data yang sederhana. Sedangkan setAlamat
disebut sebagai mutator method karena digunakan untuk memberikan suatu nilai yang
sederhana. Langkah-langkah di atas selanjutnya dapat kita gunakan untuk menerapkan sifat
encapsulation atau information hiding. Jadi pada dasarnya encapsulation dapat kita lakukan
dengan :
42
BAB VIII
INTERFACE
Interface adalah jenis khusus dari blok yang hanya berisi method signature(atau
constant ). Interface mendefinisikan sebuah(signature) dari sebuah kumpulan method tanpa
tubuh. Interface mendefinisikan sebuah cara standar dan umum dalam menetapkan sifat-sifat
dari class-class. Mereka menyediakan class-class, tanpa memperhatikan lokasinya dalam
hirarki class, untuk mengimplementasikan sifat-sifat yang umum. Dengan catatan bahwa
interface-interface juga menunjukkan polimorfisme, dikarenakan program dapat memanggil
method interface dan versi yang tepat dari method yang akan dieksekusi tergantung dari tipe
object yang melewati pemanggil method interface.
Kita akan menggunakan interface jika kita ingin class yang tidak berhubungan
mengimplementasikan method yang sama. Melalui interface-interface, kita dapat menangkap
kemiripan diantara class yang tidak berhubungan tanpa membuatnya seolaholah class yang
berhubungan.
Misalkan class Line dimana berisi method yang menghitung panjang dari garis dan
membandingkan object Line ke object dari class yang sama. Sekarang, misalkan kita punya
class yang lain yaitu MyInteger dimana berisi method yang membandingkan object
MyInteger ke object dari class yang sama. Seperti yang kita lihat disini, kedua class-class
mempunyai method yang mirip dimana membandingkan mereka dari object lain dalam tipe
yang sama, tetapi mereka tidak berhubungan sama sekali. Supaya dapat menjalankan cara
untuk memastikan bahwa dua class-class ini mengimplementasikan beberapa method dengan
tanda yang sama, kita dapat menggunakan sebuah interface untuk hal ini. Kita dapat
membuat sebuah class interface, katakanlah interface Relation dimana mempunyai deklarasi
method pembanding. Relasi interface dapat dideklarasikan sebagai,
43
Satu ciri umum dari sebuah interface dan class adalah pada tipe mereka berdua. Ini
artinya bahwa sebuah interface dapat digunakan dalam tempat-tempat dimana sebuah class
dapat digunakan. Sebagai contoh, diberikan class Person dan interface PersonInterface,
berikut deklarasi yang benar:
PersonInterface pi = new Person();
Person pc = new Person();
Bagaimanapun, Anda tidak dapat membuat instance dari sebuah interface. Contohnya:
Membuat Interface:
Sebagai contoh, mari kita membuat sebuah interface yang mendefinisikan hubungan antara
dua object menurut urutan asli dari object.
/**
* Class ini mendefinisikan segmen garis
*/
public class Line implements Relation{
private double x1;
private double x2;
private double y1;
private double y2;
public Line(double x1, double x2, double y1, double y2){
this.x1 = x1;
this.x2 = x2;
this.y1 = y1;
this.y2 = y2;
}
public double getLength(){
double length = Math.sqrt((x2-x1)*(x2-x1) +
(y2-y1)* (y2-y1));
return length;
}
44
public boolean isGreater( Object a, Object b){
double aLen = ((Line)a).getLength();
double bLen = ((Line)b).getLength();
return (aLen > bLen);
}
Ketika class Anda mencoba mengimplementasikan sebuah interface, selalu pastikan bahwa
Anda mengimplementasikan semua method dari interface, jika tidak, Anda akan menemukan
kesalahan.
Seperti yang telah kita lihat dalam bagian sebelumnya, class dapat mengimplementasikan
sebuah interface selama kode implementasi untuk semua method yang didefinisikan dalam
interface tersedia. Hal lain yang perlu dicatat tentang hubungan antara interface ke class-class
yaitu, class hanya dapat mengEXTEND SATU superclass, tetapi dapat
mengIMPLEMENTASIkan BANYAK interface. Sebuah contoh dari sebuah class yang
mengimplementasikan interface adalah,
Contoh lain dari class yang meng-extend satu superclass dan mengimplementasikan sebuah
interface adalah,
Catatan bahwa sebuah interface bukan bagian dari hirarki pewarisan class. Class yang tidak
berhubungan dapat mengimplementasikan interface yang sama.
45
Pewarisan Antar Interface:
Interface bukan bagian dari hirarki class. Bagaimanapun, interface dapat mempunyai
hubungan pewarisan antara mereka sendiri. Contohnya, misal kita punya dua interface
StudentInterface dan PersonInterface. Jika StudentInterface meng-extend PersonInterface,
maka ia akan mewariskan semua deklarasi method dalam PersonInterface.
46
BAB IX
Design pattern merupakan best practice yang digunakan oleh pengembang perangkat
lunak yang telah berpengalaman dalam melakukan pengembangan perangkat lunak dengan
menerapkan konsep objek oriented. Design pattern merupakan solusi untuk masalah-masalah
umum yang dihadapi oleh pengembang perangkat lunak selama mengembangkan perangkat
lunak. Ada beberapa design pattern yang biasa digunakan beberapa diantaranya seperti
berikut ini.
Tipe-tipe pattern:
Creational patterns:
Menginisialisasi dan mengkonfigurasi kelas dan objek. Beberapa diantaranya:
Structural patterns:
Memisahkan interface dan implementasi kelas dan objek.Susunan jumlah kelas atau
objek.
1. Adapter: Translator yang beradaptasi terhadap suatu server interface untuk suatu
client.
2. Bridge: Abstraksi yang digunakan untuk mengikat menjadi satu dari banyak
implementasi yang dibuat.
3. Composite: Struktur untuk membangun agregasi rekursif.
4. Decorator: Dekorator memperluas suatu obyek secara terbuka.
5. Facade: Menyederhanakan interface untuk subsistem.
6. Flyweight: Banyak objek kecil/spesifik yang di-share secara efisien.
7. Proxy: Satu objek yang mendekati objek lain
Behavioral patterns:
Interaksi dinamis antara kumpulan semua kelas dan objek. Bagaimana Pattern
mendistribusikan tanggung jawab/ tugasnya masing-masing.
1. Chain of Responsibility: Me-request yang didelegasikan kepada penyedia layanan
yang menjadi tugas dan tanggung jawabnya.
2. Command: Me-request objek first-class.
3. Iterator: Menggabungkan elemen-elemen yang diakses secara skuensial.
4. Interpreter:Language interpreter for a small grammar (kompiler skala kecil).
5. Mediator: Mengkoordinasi interaksi antar asosiasi yang ada.
6. Memento: Gambaran melakukan captures dan restores keadaan suatu objek secara
47
7. private.
8. Observer: Ketergantungan untuk update secara otomatis ketika seorang programmer
melakukan perubahan pada kodenya.
9. State: Obyek yang perilakunya tergantung pada keadaannya.
10. Strategy: Abstraksi untuk memilih salah satu dari sekian banyak algoritma.
11. Template Method: Algoritma dengan beberapa langkah yang telah disediakan oleh
suatu
12. kelas turunan.
Visitor: Operasi yang diterapkan pada elemen-elemen dari struktur objek yang heterogen/
sangat beragam
Factory Pattern
Merupakan salah satu design pola yang sering digunakan pada java. Berikut contoh
dari factory pattern.
48
Tahap 1: Buat sebuah interface
Shape.java
Rectangle.java
@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}
Square.java
@Override
public void draw() {
System.out.println("Inside Square::draw() method.");
}
}
Circle.java
49
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Inside Circle::draw() method.");
}
}
Tahap 3: Buat sebuah Factory untuk menghasilkan kelas berdasarkan informasi yang
diberikan
ShapeFactory.java
} else if(shapeType.equalsIgnoreCase("RECTANGLE")){
return new Rectangle();
} else if(shapeType.equalsIgnoreCase("SQUARE")){
return new Square();
}
return null;
}
}
Tahap 4: Gunakan Factory untuk mendapatkan objek dari class dengan memasukkan
informasi yang dibutukan seperti tipe.
FactoryPatternDemo.java
50
//call draw method of Circle
shape1.draw();
51