i
Pada dasarnya komputer merupakan alat untuk menyimpan dan memproses data. Komputer
terdiri dari perangkat keras (hardware) dan perangkat lunak (software). Perangkat keras
merupakan perangkat yang terlihat secara fisik yang merupakan elemen penting komputer.
Perangkat keras tidak dapat bekerja tanpa adanya perangkat lunak. Perangkat lunak
menyediakan instruksi-instruksi yang digunakan untuk mengendalikan perangkat keras dan
membuatnya melakukan sesuatu tugas (penyelesaian masalah) tertentu. Perangkat lunak
dikembangkan dengan cara di program. Jadi bagaimana cara untuk membuat program
(melakukan pemrograman)? Kembali pada perangkat lunak, pada dasarnya program juga
demikian, berisi instruksi-instruksi yang diberikan kepada komputer atau perangkat komputer
tentang tugas apa yang akan/dapat dilakukan.
Meskipun demikian, komputer tidak dapat secara langsung menerima instuksi-instruksi yang
diberikan oleh programmer. Programmer merupakan istilah bagi seseorang yang membuat
program komputer. Komputer hanya sebuah mesin dan mesin hanya mengetahui angka 0 (on)
dan 1 (off). Seorang programmer tidak dapat membuat instruksi-instruksi pemrograman
dengan deretan angka 0 dan 1. Programmer memerlukan alat atau tool yang dapat digunakan
sebagai “penerjemah” antara bahasa manusia dengan bahasa mesin. Alat tersebut dikenal
dengan istilah bahasa pemrograman. Jadi selain membutuhkan instruksi-instruksi yang
diberikan pada komputer, programmer juga membutuhkan bahasa pemrograman.
Setiap programmer memiliki pendekatan atau cara yang berbeda untuk menuliskan instruksi-
instruksi tersebut. Secara umum, ada empat pendekatan pemrograman yaitu,
prosedural/imperatif, deklaratif, fungsional, dan berorientasi objek. Pendekatan prosedural
merupakan pendekatan pemrograman tradisional yang dikembangkan dengan cara membuat
urutan-urutan instruksi diikuti dengan manipulasi data untuk suatu tujuan atau tugas tertentu.
Pendekatan deklaratif berfokus pada pendeskripsian masalah yang akan diselesaikan
dibandingkan dengan membuat urutan atau langkah-langkah yang akan dilakukan. Pada
pendekatan fungsional, program dilihat sebagai entitas yang menerima input dan
menghasilkan output. Program dibagi-bagi pada unit kecil yang disebut dengan fungsi dan
2
fungsi tersebut dapat digunakan pada fungsi yang lainnya. Pendekatan berorientasi objek
memungkinkan program sebagai set unit yang disebut dengan istilah objek. Setiap objek
memiliki kemampuan untuk melakukan suatu aksi dan saling terkait antar satu objek dengan
yang lainnya untuk mencapai tujuan tertentu.
Fokus yang akan dibahas secara mendalam pada Buku ini adalah pendekatan berorientasi
objek. Pendekatan ini dapat disebut dengan istilah “Pemrograman Berorientasi Objek”.
Pendekatan ini merupakan pendekatan yang paling modern jika dibandingkan dengan
pendekatan yang lainnya. Kenapa bisa dikatakan modern? Kenapa programmer harus
menggunakan pendekatan ini? Program merupakan representasi dari sistem yang dibangun
oleh developer (sekumpulan organisasi atau perusahaan yang berisi programmer, analis
sistem, dll) atau programmer. Semakin besar sistem yang dibangun maka program akan
menjadi semakin kompleks. Berikut adalah alasan kenapa programmer membutuhkan
pemrograman berorintasi objek:
Memiliki kemampuan pemeliharaan program yang cepat dan efisien (tanpa merombak
sistem) dibandingkan dengan paradigma pemrograman yang lain,
Mempercepat waktu pengembangan,
Mendukung kerja sama tim saat memprogram,
Mudah menerjemahkan dari model bisnis dalam model pemrograman,
Paradigma pemrograman selain berorientasi objek akan bekerja dengan baik pada
sistem dengan lingkup yang terisolasi, tetapi tidak jika sistem terintregasi,
Mendukung sistem operasi modern dan dapat dengan mudah beradaptasi dengan
program pihak ketiga (third-party program),
Kemampuan untuk dapat membuat Graphical User Interface (GUI) yang mudah
dimengerti.
Jadi apa definisi dari pemrograman berorientasi objek? Pemrograman berorientasi objek
merupakan pendekatan pengembangan perangkat lunak/program yang memiliki struktur
berbasis objek yang dapat berinteraksi satu sama lain untuk memenuhi suatu tujuan. Sebagian
besar bahasa pemrograman modern saat ini mendukung pendekatan berbasis objek ini. Akan
3
tetapi, pada buku ini, akan digunakan bahasa pemrograman Java untuk melakukan
pemrograman berorientasi objek.
1.2 Berpikir Objek
Pada pemrograman prosedural kita dapat mengatakan suatu cara menyelesaikan masalah
berdasarkan oleh aksi (action-driven) dan data berada terpisah dari aksi-aksi yang ada.
Didalam pendekatan berorientasi objek, data dan aksi berada dalam satu tempat yang disebut
dengan objek. Misalnya kita dapat membayangkan sebuah sistem besar yang akan dibangun
yaitu Sistem Informasi Akademik. Didalam sistem tersebut ada entitas yang
merepresentasikan bagian kecil dari sistem yang terlibat dalam sistem yang besar itu,
katakanlah objek Mahasiswa. Pada objek Mahasiswa ada attribut data nama, nomor
induk mahasiswa, jenis kelamin, dll. Selain itu, objek Mahasiswa juga memiliki aksi seperti
mengambil mata kuliah, melihat data diri, dll.
Ketika melihat aksi yang ada dalam objek Mahasiswa tersebut, dapat dilihat bahwa untuk
melakukan aksi mengambil mata kuliah diperlukan setidaknya data nim untuk membedakan
antara mahasiswa satu dengan yang lain. Disamping itu, ada objek lain yang terkait yaitu
Mata Kuliah. Didalam objek Mata Kuliah ada attribut data seperti nama mata kuliah,
jadwal, dan ruang. Dari contoh yang sudah diceritakan sebelumnya dapat dilihat bahwa
sistem terbagi dalam sistem yang lebih kecil dengan direpresentasikan oleh objek-objek yang
saling terkait satu sama lain. Dengan demikian, cara berpikir seperti ini dapat digunakan
sebagai acuan untuk memulai memprogram dengan pendekatan berorientasi objek.
1.3 UML Class Diagram
UML merupakan singkatan dari Unified Modelling Language yang merupakan bahasa
spesifikasi yang terstkitarisasi untuk pemodelan objek. UML ditemukan pada tahun 1990-an
oleh James Rumbaugh, Grady Booch, dan Ivar Jacobson. UML juga dapat dikatakan sebagai
jembatan dari kode program kedalam model bisnis. Didalam UML ada bagian kecil yang
dikenal dengan istilah “Class Diagram” yang dapat membuat representasi visual dari class
objek saat membuat program yang berbasis objek. Class merupakan bentuk rancangan
program dari sebuah objek. Jadi objek merupakan representasi langsung dari class. Class
akan dibahas lebih lanjut di BAB 3. Pada buku ini kita akan fokus kepada bagian class
diagram untuk merepresentasikan objek-objek yang diprogram.
4
Satu class diagram berbentuk kotak dengan tiga bagian yang ditumpuk seperti pada Gambar
1.1. Bagian tumpukan pertama yang paling atas berisi nama class. Bagian tumpukan kedua
atau tengah merupakan bagian untuk data atau properti. Bagian tumpukan ketiga atau paling
bawah berisi method-method atau fungsi-fungsi. Properti dan method merupakan anggota
didalam struktur anatomi class. Properti merupakan atribut data yang dimiliki oleh suatu
class atau dapat dikatakan sebagai variabel. Method merupakan bentuk tingkah laku atau aksi
yang dimiliki oleh suatu class. Seperti hal.nya pada pemrograman fungsional, method juga
mirip dengan fungsi yang dapat memiliki nilai pengembalian ataupun tidak memiliki nilai
pengembalian. Properti dan method akan dijelaskan lebih lanjut pada BAB 3.
Gambar 1.1 Contoh class diagram Mahasiswa
1.4 Kesimpulan
Pada BAB ini memberikan penjelasan umum tentang paradigma pemrograman berorientasi
objek. Dimana ketika akan membangun program, seorang programmer akan berpikir semua
entitas yang terkait sebagai suatu objek-objek yang saling terkait. Selain itu, ada UML
class diagram yang dapat menerjemahkan dari bahasa pemrograman menjadi bahasa bisnis.
Pada BAB 2, akan dibahas cara memprogram dengan bahasa pemrograman Java dimulai dari
pemrogramman dasar. Pemrograman berorientasi objek dengan bahasa pemrograman java
akan mulai dibahas dari BAB 3.
1.5 Latihan Soal
Jawablah pertanyaan-pertanyaan dibawah ini dengan tepat!
1. Apa perbedaan antara pendekatan pemrograman prosedural dengan pendekatan
berorientasi objek?
2. Mengapa programmer membutuhkan pemrograman berorientasi objek?
3. Apa kaitannya antara class dengan objek?
5
4. Siapa yang menemukan UML?
5. Mengapa dalam memprogram berorientasi objek juga dibutuhkan UML class
diagram?
6
BAB 2 DASAR PEMROGRAMAN DENGAN JAVA
2.1 Sejarah Bahasa Pemrograman
Komputer tidak dapat mengerti dengan mudah instruksi yang dimasukkan oleh manusia.
Komputer butuh alat untuk menerjemahkan bahasa manusia kedalam bahasa “mesin”. Istilah
“mesin” digunakan karena pada dasarnya komputer adalah mesin yang dapat menerima
instruksi, memproses, dan mengeluarkan keluaran output kedalam perangkat lain yang
terhubung (monitor). Alat yang digunakan untuk memudahkan komputer memahami instruksi
yang dimasukkan adalah bahasa pemrograman. Ada banyak sekali bahasa pemrograman yang
dikembangkan untuk mempermudah manusia dalam memprogram di komputer. Komputer
memiliki bahasa dasar (native) yang dikenal dengan bahasa mesin. Bahasa mesin terdiri dari
rangkaian urutan angka biner. Berikut adalah contoh penulisan bahasa mesin:
1011101010111010101011110111110111101
Dapat dibayangkan ketika programmer harus memprogram dengan bahasa mesin, hal tersebut
sangatlah tidak menyenangkan. Program yang ditulis akan sulit untuk dibaca dan
dimodifikasi. Dengan alasan tersebut muncul bahasa pemrograman assembly. Assembly
memungkinkan programmer untuk memasukkan instruksi dengan kata-kata singkat atau tidak
lagi rangkaian angka biner. Kata-kata singkat tadi juga dikenal dengan istilah “mnemonic”.
Berikut adalah contoh kode yang berisi instruksi sederhana dengan bahasa assembly:
add 2, 3, result
Menulis dengan bahasa assembly lebih mudah dibandingkan dengan bahasa mesin. Meskipun
demikian, bahasa ini merupakan bahasa yang paling dekat dengan bahasa mesin. Untuk
memprogram dengan assembly programmer harus sudah memahami cara kerja CPU secara
terperinci. Karena kedekatan bahasa assembly dengan mesin sehingga bahasa ini termasuk
dalam kategori bahasa tingkat-rendah.
Pada tahun 1950-an, generasi baru pemrograman muncul dengan kategori bahasa tingkat-
tinggi. Bahasa tingkat-tinggi mendukung penulisan program dengan bahasa inggris dan
mudah untuk digunakan. Selain itu, bahasa tingkat-tinggi ini dapat dijalankan dibeberapa
jenis mesin (tidak hanya pada satu mesin tertentu). Instruksi-instruksi perintah yang
7
dimasukkan dengan bahasa tingkat-tinggi ini dikenal dengan istilah statement. Berikut adalah
contoh statement dengan bahasa tingkat-tinggi untuk menghitung luas lingkaran:
area = 7 * 7 * 3.14;
ada banyak sekali bahasa pemrograman yang masuk dalam kategori bahasa tingkat-
tinggi. Tabel 2.1 menunjukkan beberapa bahasa pemrograman yang populer saat ini yang
termasuk dalam kategori bahasa tingkat-tinggi.
Tabel 2.1 Bahasa Tingkat-Tinggi yang Populer
Bahasa Deskripsi singkat
C Merupakan bahasa pemrograman yang dikembankan dari laboratorium Bell.
Berisi kombinasi dari bahasa assembly dengan bahasa yang sudah
dikembangkan kedalam bahasa tingkat-tinggi yang mudah dipahami.
C++ Bahasa pemrograman yang mendukung pemrograman berorientasi objek
yang dikembangkan dari bahasa C.
C# Bahasa pemrograman yang mendukung pemrograman berorientasi objek
yang dikembangkan oleh Microsoft.
Java Bahasa pemrograman yang mendukung pemrograman berorientasi objek
yang dikembangkan oleh Sun Microsystems yang saat ini bagian dari Oracle.
Javascript Bahasa pemrograman berbasis web yang dikembangkan oleh Netscape.
Python Bahasa pemrograman yang dapat berguna untuk apa saja (genera purpose
language). Sangat efektif untuk menulis program-program singkat.
Visual Basic Bahasa pemrograman yang dikembangkan oleh Microsoft dan sebagian besar
penerapannya digunakan dalam produk-produk aplikasi dari Microsoft.
2.2 Karakteristik dan Kelebihan Java
Java merupakan bahasa pemrograman yang sangat powerfull yang dapat dikembangkan pada
berbagai platform seperti, komputer desktop, perangkat mobile, dan server (web). Pada buku
ini, akan digunakan bahasa pemrograman java untuk membuat program berorientasi objek.
Java dikembangkan oleh tim dari Sun Microsystems yang dipimpin oleh James Gosling. Pada
8
tahun 2010, perusahaan Sun Microsystem sudah dibeli oleh Oracle. Bahasa java atau dahulu
dikenal dengan Oak di desain mulai dari tahun 1991 untuk bahsa pemrograman pada alat-alat
elektronik.
Nama java baru muncul pada tahun 1995 dimana fokusnya adalah mengembangkan aplikasi
berbasis web. Java muncul dan menjadi populer dikalangan programmer karena
kemudahaannya dan dapat berjalan dibanyak platform. Bahkan saat ini, java digunakan
sebagai dasar program aplikasi dengan platform Android. Platform Android merupakan
platform yang paling populer dan besar dikalangan perangkat mobile. Java memiliki beberapa
kelebihan diantaranya adalah sebagai berikut:
Bahasa pemrograman yang sederhana,
Mendukung pemrograman berorientasi objek,
Mendukung pemrograman yang terdistribusi,
Mudah untuk ditafsirkan (intepreted).
Bahasa pemrograman yang kuat yang berarti bahwa compiler dapat menanggapi
kesalahan program dengan baik.
Bahasa pemrograman yang memiliki mekanisme keamanan kusus.
Memiliki arsitektur yang netral atau tulis sekali dijalankan dimana saja.
Portabel atau dapat digunakan untuk mengembangkan aplikasi pada berbagai
platform.
Memiliki performa tinggi.
Mendungkung pemrograman banyak thread atau multithreaded.
Bahasa pemrograman yang dinamis (dapat langsung ter-compile).
2.3 Instalasi Java dan IDE
Bahasa pemrograman memiliki kebijakan masing-masing dalam aturan tata-bahasanya atau
syntax. Untuk dapat memulai memprogram dengan java dibutuhkan Java Application
Programming Interface (API) atau dikenal dengan istilah Java Library. Didalam Java API
berisi beberapa class dan interface yang dapat digunakan untuk mengembangkan aplikasi
9
dengan Java. Java API dapat diakses dengan mengunduh aplikasi JDK (Java Development
Toolkit). Java datang dengan tiga edisi, yaitu:
Java Stkitard Edition (Java SE) untuk mengembangkan aplikasi disisi klien (client
side). Aplikasi-aplikasi di edisi ini dapat berjalan pada aplikasi desktop.
Java Enterprise Edition (Java EE) untuk mengembangkan aplikasi disisi server (server
side).
Java Micro Edition (Java ME) untuk mengembangkan aplikasi pada perangkat
mobile.
Buku ini menggunakan edisi Java SE untuk memperkenalkan pemrograman java dengan
berorientasi objek. ada beberapa versi Java SE, tetapi pada buku ini kita akan
menggunakan Java SE 8 yang dirilis oleh Oracle. Java SE sudah termasuk didalam aplikasi
JDK 1.8. JDK 1.8 atau JDK 8 dapat diunduk di https://www.oracle.com/technetwork/
java/javase/downloads/jdk8-downloads-2133151.html. Ketika mengunduh perhatikan bahwa
kita harus menyetujui persetujuan lisensi yang harus diterima. Selain itu juga harus
diperhatikan sistem operasi yang digunakan. Gambar 2.1 memperlihatkan halaman unduhan
ketika akan mengunduh JDK 8u201.
Gambar 2.1 Halaman unduhan JDK 8u201
JDK berisi beberapa set program yang terpisah. Setiap set program tersebut memiliki fungsi
masing-masing seperti memanggil beberapa isntruksi yang sudah ditentukan melalui
command line, kompilasi, menjalankan program, dan pengetesan program Java. Program
untuk menjalankan aplikasi Java dikenal dengan nama JRE (Java Runtime Environment).
Intinya JDK digunakan untuk kompilasi dan menjalankan program Java. Meskipun demikian,
10
kita dapat menggunakan aplikasi selain JDK seperti, Netbeans dan Eclipse. Untuk dapat
menjalankan JDK tentu saja JDK harus terinstal terlebih dahulu. Setelah itu kita harus
mendaftarkan perintah untuk kompilasi dan menjalankan program pada sistem operasi.
Berikut adalah cara untuk mendaftarkan perintah tersebut pada sistem operasi Windows 10.
1. Klik logo Windows 10 cari “Edit the system environment variable” atau cari “Control
Panel” System and Security System Advanced System Settings (di tab
Advanced klik tombol “Environment Variables..”. Gambar 2.2 memperlihatkan
halaman environment variables.
Gambar 2.2 Halaman environment variables
2. Fokus pada bagian System variables, tarik kebawah dan cari variable dengan nama
“path” kemudian klik tombol Edit (yang bawah/bagian system variable). Perhatikan
bahwa JANGAN menghapus variable atau environment variables didalam path
karena itu dapat menyebabkan kerusakan pada sistem operasi! Gambar 2.3
memperlihatkan halaman edit environment variable didalam path.
11
Gambar 2.3 Halaman edit environment varible pada path
Setelah itu, seperti pada Gambar 2.3 klik pada tombol New maka akan ada tambahan
isian kosong dibagian bawah. Klik tombol Browse dan cari alamat direktori JDK yang
sudah di instal sebelumnya dan masuk pada folder bin. Contohnya: C:\Program
Files\Java\jdk1.8.0_181\bin. Gambar 2.4 menunjukkan penambahan direktori JDK
pada environment variable yang sudah benar.
Gambar 2.4 Penambahan direktori JDK pada environment variable
Jika sudah seperti pada Gambar 2.4 langkah berikutnya adalah klik tombol “OK” dan
keluar dari halaman environment variable.
3. Buka command prompt pada windows atau ketik cmd pada pencarian di Windows 10.
Ketikkan “javac”, jika muncul keluaran pada command prompt seperti Gambar 2.5,
berarti instalasi berhasil.
12
\
Gambar 2.5 Instalasi JDK yang berhasil
Untuk software aplikasi Netbeans atau Eclipse menyediakan IDE (Integrated Development
Environment) untuk mengembangkan aplikasi berbasis Java dengan cepat. Misalnya pada
Netbeans, menyediakan Graphical User Interface (GUI) yang dapat membantu programmer
(drag-and-drop) tanpa harus memprogram semua komponen GUI yang ada. Netbeans dapat
di unduh di halaman https://netbeans.org/downloads/8.2/ dan dapat di instalasi dengan mudah
dengan mengikuti petunjuk (next-next saja). Pada buku ini hanya digunakan Netbeans dengan
Java SE.
2.4 Struktur Anatomi dan Sintak Program Java
Pemrograman di Java setidaknya membutuhkan satu class dan satu main method.
Programmer diperbolehkan untuk membuat class baru dengan nama yang diinginkan oleh
programmer itu sendiri. Namun demikian ada aturan sintak seperti berikut:
public class <Nama Class> { }
Nama class disini hanya boleh dimulai oleh huruf (biasanya programmer menggunakan
stkitar dengan dimulai dari huruf besar) dan tidak boleh ada spasi. Boleh ada angka dan
karakter khusus seperti “_” tetapi tetap diawali dengan huruf. Berikut adalah contoh
penamaan class yang benar:
public class Hello { }
Selain itu, diperlukan main method sebagai acuan pertama kali program akan mengeksekusi
instruksi yang kita berikan atau statement. Pembuatan main method yang benar adalah
sebagai berikut:
public static void main(String[] args){ }
13
Perhatikan bahwa kurung kurawal buka “{“ dan kurung kurawal tutup “}” merupakan bentuk
blok dari beberapa komponen program. Komponen program dapat berisi satu atau banyak
statement. Misalnya pada sebuah class memiliki blok komponen program yaitu data dan
method. Demikian halnya dengan method yang memiliki blok komponen program berisi
beberapa statement. Blok juga dapat bersarang atau nested, artinya didalam satu blok bisa
berisi blok-blok lain. Begitu juga dengan blok-blok lain tersebut bisa berisi beberapa blok
lainnya. Berikut adalah contoh program utuh yang berisi satu class bernama Hello dan satu
main method:
public class Hello {
public static void main(String[] args) {
System.out.println(“Selamat datang Java!”);
}
}
Pada saat memprogram Java, statement diakhiri dengan karakter “;”. Semua yang ditulis di
Java mengikuti aturan penulisan yang sensitif atau dikenal dengan istilah case-sensitive.
Misalnya ketika menuliskan “main” diganti dengan “Main”, hal ini akan menyebabkan
kesalahan sintak. Kesalahan sintaksis akan muncul ketika programmer tidak mematuhi aturan
sintak.
2.5 Kompilasi dan Menjalankan Program
Ketika akan membuat program java pertama kali pastikan bahwa program java disimpan
dengan ekstensi file “.java”. Setelah menyimpan file dengan ekstensi tersebut, dilanjutkan
dengan proses kompilasi yang akan menghasilkan file dengan ekstensi file “.class”. Dari file
hasil kompilsi tersebut akan dijalankan oleh Java Virtual Machine (JVM). Proses kompilasi
dan menjalankan tersebut akan diulang terus menerus selama memprogram dengan Java. Apa
yang terjadi sebetulnya dan apa itu JVM? Jadi file .class pada dasarnya merupakan bahasa
yang mirip (tidak sama persis) dengan bahasa mesin atau dapat disebut dengan bytecode yang
dapat di jalankan pada platform apapun selama memiliki JVM. Java memiliki JVM yang
dapat menerjemahkan bytecode pada apapun platform dan/atau sistem operasi dari pada
menggunakan mesin fisik. Gambar 2.6 merupakan proses pengembangan program Java
dengan studi kasus class Hello pada sub bab sebelumnya.
Blok
Main
Blok
Class
14
Gambar 2.6 Siklus kompilasi dan menjalankan program Java.
Ketika programmer membuat program java untuk pertama kali menggunakan editor (notepad
misalnya), programmer akan menyimpan pada direktori tertentu didalam harddisk. Misalnya
programmer menyiapkan dengan nama “LatihanJava” di drive C dan kemudian akan
menyimpan file Hello.java didalam folder tersebut. Maka mekanisme untuk melakukan
kompilasi dan menjalankan aplikasi dilakukan melalui command prompt windows seperti
pada Gambar 2.7 (perhatikan bahwa jdk sudah di instal seperti pada BAB 2.3). Program java
dapat ditulis menggunakan editor teks sederhana, seperti notepad misalnya. Jika notepad
terasa monoton dan kurang bewarna programmer bisa mengunduh dan menginstal notepad++
(https://notepad-plus-plus.org/download/v7.6.4.html) atau visual studio code
(https://code.visualstudio.com/download).
15
Gambar 2.7 Proses kompilasi dan menjalankan program Java.
Dalam pemrograman dengan Java, ada tiga jenis kesalahan program atau error yang
umum, yaitu syntax error, runtime error, dan logic error. Syntax error atau compile error
merupakan kesalahan yang sering sekali dilakukan oleh programmer pemula. Kesalahan ini
dikarenakan penulisan program yang tidak tepat atau tidak sesuai dengan sintak
pemrograman yang seharusnya. Sebagai contoh, programmer lupa menambahkan titik-koma
“;” di akhir statement. Kesalahan tersebut akan muncul ketika kita meng-kompile (saat
menjalankan javac). Bentuk kesalahannya adalah sebagai berikut:
Hello.java:3:error: ‘;’ expected
Kesalahan tersebut diatas terjadi pada Hello.java baris ke 3 dengan keterangan kesalahan
“dibutuhkan titik-koma”. Systax error merupakan bentuk kesalahan program yang sangat
mudah untuk dideteksi.
Kesalahan program yang kedua adalah runtime error. Runtime error akan mengakibatkan
program berhenti secara tidak normal. Artinya program berhasil di kompile tetapi saat
dijalankan program akan menjadi berhenti secara tiba-tiba. Contoh dari error ini adalah
pembagian suatu nilai dengan nilai 0. Maka akan muncul kesalahan yang dikenal dengan
“Exception” saat ketika menjalankan program. Kesalahan program seperti ini muncul karena
saat program dijalankan, lingkungan pemrograman Java (sistem Java) tidak mungkin dapat
menangani masalah tersebut.
Kesalahan jenis ketiga adalah logic error. Logic error atau dapat disebut dengan istilah “bug”
merupakan jenis kesalahan yang cukup sulit dideteksi. Program berhasil di kompile dan di
Pindah antar drive
Pindah ke direktori
sebelumnya
Pindah ke direktori
LatihanJava
Kompilasi/compile
Menjalankan/running
16
jalankan, tetapi ada kesalahan yang dilakukan program saat program tersebut berjalan
(program tidak berjalan semestinya). Contohnya, ketika kita membuat program untuk
mendeteksi suhu mendidih dan normal pada air. User mencoba untuk memasukkan angka
110 untuk melihat suhunya normal atau mendidih. Suhu mendidih seharusnya diatas 100
derajat celcius. Tetapi output yang dihasilkan program adalah suhu normal. Untuk menangani
masalah ini, programmer harus melakukan proses debugging. Debugging merupakan proses
untuk mencari bug program dengan mencari pada setiap baris program yang menyebabkan
bug tersebut muncul.
2.6 Input Output Console
Console merupakan istilah jaman dulu yang memiliki arti memasukkan teks dan
menampilkan dilayar. Console input artinya kode program yang digunakan untuk
memasukkan apa yang diketikkan oleh keyboard. Console output artinya kode program yang
digunakan untuk menampilkan yang diketikkan tadi di layar monitor. Seperti program
Hello.java yang sebelumnya sudah dijelaskan, disana ada kode statement untuk console
output yaitu System.out.println. Secara umum Java memiliki dua console output yaitu
System.out.println dan System.out.print. Keduanya memberikan output teks atau
dikenal dengan tipe data String. Perbedaanya adalah output teks yang dihasilkan oleh
println dimulai dari baris yang baru sedangkan pada print tidak demikian. Kode 2.1
merupakan contoh kode program yang menerapkan console output println dan print.
Kode 2.1 Hello.java
1
2
3
4
5
6
public class Hello {
public static void main(String[] args) {
System.out.print(“Nama saya Budi!”);
System.out.println(“Selamat datang Java!”);
}
}
Console input pada Java sedikit memerlukan mekanisme khusus. Java memiliki
System.out untuk mendefinisikan output dan System.in untuk mendefinisikan input.
Untuk melakukan console input tidak bisa langsung memanggil System.in, melainkan
17
dengan menggunakan Scanner class. Scanner digunakan untuk membuat objek dari
pembacaan input oleh System.in seperti kode berikut:
Scanner input = new Scanner(System.in);
Scanner merupakan class yang didefinisikan oleh java.util.Scanner sehingga dapat dipanggil
dengan menambahkan import java.util.Scanner; terlebih dahulu. Variabel input
merupakan Objek dari scanner yang terbentuk dari System.in. Untuk membuat input
menjadi suatu tipe data yang kita ingginkan kita harus lakukan pemanggilan method khusus.
Misalnya, ketika kita ingin tipe data input menjadi double maka kita panggil method
nextDouble() seperti pada kode berikut:
double beratbadan = input.nextDouble();
Variabel beratbadan dapat menerima apapun masukan user dengan tipe angka pecahan
atau tipe data double. Kode 2.2 menjelaskan tentang penggunaan console input dan output
untuk perhitungan luas persegi.
Kode 2.2 HitungLuasPersegi.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.Scanner;
public class c {
public static void main(String[] args) {
// Buat objek Scanner
Scanner input = new Scanner(System.in);
// Kabari user untuk memasukkan angka sisi persegi
System.out.print (“Masukkan sisi persegi: ”);
double sisi = input.nextDouble();
// hitung luas
double luas = sisi * sisi;
// tampilkan hasil
System.out.print (“Luas persegi: ”+luas);
}
}
18
Simpan kode 2.1 dengan nama HitungLuasPersegi.java dan lakukan kompilasi. Setelah itu
jalankan program dan coba ketikkan 12 lalu tekan enter. Hasil yang akan ditampilkan
program yaitu Luas persegi: 144.
2.7 Identifier, Variabel, dan Assignment
Identifier merupakan nama-nama yang dibuat sendiri untuk mengidentifikasi variabel,
method, atau class. Perhatikan bahwa penamaan identifier di Java adalah case-sensitive.
Semua identifier di Java harus mengikuti kaidah-kaidah aturan sebagai berikut:
Terdiri dari urutan karakter yang terdiri dari huruf, angka, garis bawah “_”, dan
penkita dollar “$”.
Identifier harus dimulai dari huruf, garis bawah, atau penkita dollar. Tidak boleh
dimulai dengan angka.
Identifier tidak boleh memuat kata-kata yang sudah disiapkan oleh Java. Misalnya
menamai variabel dengan class.
Bisa terdiri dari satu atau lebih karakter.
Variabel pada Java digunakan untuk merepresentasikan suatu nilai yang mungkin akan
berubah-ubah didalam program. Nilai tersebut mengikuti suatu tipe data tertentu atau objek
tertentu. Perlu mekanisme pengenalan variabel yang disebut dengan deklarasi variabel.
Deklarasi variabel meminta kompiler untuk mengalokasikan ruang memori yang benar
berdasarkan kepada tipe data/objek dari variabel tersebut. Deklarasi variabel dapat dilakukan
dengan cara berikut:
<tipe data> <nama variabel>
int x;
double rata2;
Kita dapat memberikan nilai awal dari sebuah variabel dengan cara inisialisasi variabel.
Berikut adalah cara inisialisasi variabel:
int y = 10;
double panjang;
panjang = 9.5;
19
Setelah deklarasi variabel, kita dapat membuat assignment statement. Assignement dilakukan
varibel dengan cara memerintah (assign) suatu nilai yang ditujukan ke variabel tersebut.
Assignment statement dapat digunakan sebagai ekspresi. Ekspresi mewakili komputasi
perhitungan yang melibatkan nilai, variabel, dan operator untuk mengevaluasi suatu nilai
tertentu. Jadi aturan sintak untuk assigment adalah sebagai berikut:
variabel = ekspresi
Assignment diwakili oleh simbol sama dengan “=”. Berikut adalah contoh assignment kepada
nilai langsung, varibel lain, dan ekspresi aritmatika:
double x = 10;
double sisi = x;
double luas = sisi * sisi;
Perhatikan bahwa yang di-assign berada pada sisi sebelah kanan dan tidak boleh terbalik.
Selain itu kita juga bisa melakukan assignment pada banyak variabel sekaligus dalam satu
statement. Berikut adalah contoh dari assignment pada banyak variabel:
i = j = k = 100;
sama dengan,
i = 100;
j = 100;
k = 100;
Programmer juga dapat melakukan assignment pada statement atau method. Berikut adalah
contoh penerapannya pada console output:
System.out.print(a = 10);
Sama dengan,
a = 10;
System.out.print(a);
2.8 Tipe data dan Operasi
Pada deklarasi variabel, variabel harus memiliki tipe data sebagai bentuk representasi dari
nilai variabel tersebut. Java memiliki beberapa tipe data numerik, karakter, dan bolean. Selain
itu, setiap tipe data memiliki jangkauan nilai yang berbeda-beda. Compiler akan
20
mengalokasikan memori dari variabel sesuai dengan tipe data-nya. Tabel 2.2 memperlihatkan
tipe data numerik yang didukung lengkap dengan jangkauan nilai dan ukuran
penyimpanannya.
Tabel 2.2 Tipe data numerik di Java
Nama Jangkauan nilai Ukuran penyimpanan
int -231 s/d 231-1 32-bit signed (4 byte)
short -215 s/d 215-1 16-bit signed (2 byte)
long -263 s/d 263-1 64-bit signed (8 byte)
float Negatif : -3.4028235E + 38 s/d -1.4E -45
Positif: 1.4E -45 s/d 3.4028235E+38
32-bit IEEE 754 (4 byte)
double Negatif : -1.7976931348623157E+308 s/d -4.9E -324
Positif: 4.9E -324 s/d 1.7976931348623157E+308
64-bit IEEE 754 (8 byte)
byte -27 s/d 27-1 8-bit signed
Tipe data yang lain (selain numerik) yaitu, karakter diwakili dengan char, urutan karakter
diwakili dengan String, dan logika boolean dengan boolean. Tipe data char memiliki
ukuran 1 byte. Tipe data String memiliki ukuran banyaknya karakter dikalikan dengan 1
byte. Tipe data boolean memiliki ukuran 1 byte. Kembali ke tipe data numerik, untuk
membaca dari keyboard (atau melakukan console input), programmer akan menggunakan
Scanner. Pada Kode 2.1, kita telah membuat scanner dan menerapkan method
nextDouble() untuk mendapatkan input dengan tipe data double. Untuk input yang lain
disajikan pada Tabel 2.2.
21
Tabel 2.3 Method untuk objek scanner
Method Deskripsi
nextInt() Membaca bilangan bulat dari tipe data int
nextShort() Membaca bilangan bulat dari tipe data short
nextLong() Membaca bilangan bulat dari tipe data long
nextFloat() Membaca bilangan riil dari tipe data float
nextDouble () Membaca bilangan riil dari tipe data double
nextByte() Membaca bilangan bulat dari tipe data byte
Tipe data numerik memiliki operasi dasar aritmatika, sehingga membutuhkan operator dasar
seperti: penjumlahan “+”, pengurangan “-”, pembagian “/”, perkalian ”*”, dan sisa bagi “%”.
Istilah operan merupakan nilai yang dioperasikan oleh operator. Ketika kedua operan bertipe
bilangan bulat (integer) dan kemudian akan dilakukan operasi pembagian, jika hasilnya
bilangan riil maka angka dibelakang koma akan dihilangkan. Misalnya 5 / 2 akan
menghasilkan nilai 2 bukan 2,5. Agar hasilnya menjadi 2,5 kedua operan harus diganti
dengan tipe bilangan riil (misalnya float). Kode 2.2 merupakan contoh penggunaan operasi
pada variabel yang telah ditentukan.
Kode 2.3 CetakWaktu.java
1
2
3
4
5
6
7
8
9
import java.util.Scanner;
public class CetakWaktu {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print (“Masukkan waktu dalam detik: ”);
int detik = input.nextInt();
int menit = detik / 60;
int sisadetik = detik % 60;
System.out.print (detik+ “ detik adalah ”+menit+
” menit ”+sisadetik+” detik.”);
22
10
11
}
}
ada operator khusus yang digunakan untuk menaikkan 1 nilai variabel atau increment
dan menurunkan 1 nilai variabel atau decrement. Misalnya ada variabel int x = 2; dan
kemudian ada operasi increment x++;. Operasi increment tersebut sama dengan x = x +
1;. Begitu juga dengan operator decrement, misalnya: x--; sama dengan x = x -1;.
Meskipun demikian kita dapat menuliskan ++ atau -- sebelum variabelnya, contoh ++x; atau
--x;. Dengan demikian increment atau decrement yang dilakukan setelah variabel disebut
dengan postincrement atau postdecrement. Kemudian untuk increment atau decrement yang
dilakukan sebelum variabel disebut dengan preincrement atau predecrement. Berikut adalah
perbedaan keduanya.
int x = 10;
int xa = 100 * x++;
int y = 10;
int ya = 100 * (++y);
Jika nilai xa dan ya dioutputkan, mereka memiliki hasil yang berbeda, yaitu xa = 1000 dan
ya = 1100.
Programmer dapat melakukan konversi bilangan bulat (integer) ke bilangan riil (float atau
double) atau sebaliknya dengan cara explicit casting. Misalnya, ada variabel double x =
90.5;, kita dapat melakukan assigment ke variabel yang bertipe integer dengan cara int y =
(int) x; sehingga y akan memiliki nilai 90 bukan 90,5.
2.9 Seleksi Pengambilan Keputusan
Program dapat memilih statement yang mana yang akan di eksekusi berdasarkan suatu
kondisi. Misalnya, programmer membuat program untuk menentukan air mendidih atau air
yang tidak mendidih. ada variabel suhu air yang dimasukkan oleh user. Untuk dapat
int xa = 100 * x;
x = x + 1;
y = y + 1;
int ya = 100 * y;
23
mengoutputkan air mendidih atau air tidak mendidih berdasarkan nilai suhu yang dimasukkan
oleh user, program harus memiliki mekanisme untuk memilih atau mengambil keputusan.
Lalu bagaimana mekanismenya? Java menyediakan selection statement yang dapat
membiarkan kita untuk membuat pilihan aksi dengan berbagai alternatif jawaban. Berikut
adalah contoh kode selection statement:
double suhuair = 205.1;
if(suhuair > 100)
System.out.println(“mendidih”);
else
System.out.println(“tidak mendidih”);
Perhatikan pada kode sebelumnya boleh untuk tidak menggunakan blok kurung-kurawal jika
hanya ada satu statement didalamnya. Selection statement menggunakan kondisi dari ekspresi
boolean (true atau false). Ekspresi boolean biasanya berkaitan dengan operator relasional.
Tabel 2.3 merupakan operator relasional dengan disertai simbol.
Tabel 2.4 Operator relasional
Simbol Java Simbol Matematika Keterangan
== = Sama dengan
!= ≠ Tidak sama dengan
> > Lebih dari
>= ≥ Lebih dari sama dengan
< < Kurang dari
<= ≤ Kurang dari sama dengan
Setiap penerapan dari ekspresi boolean akan menghasilkan nilai true atau false. Misalnya,
pada kode sebelumnya if (suhuair > 100) jika menggunakan output console, akan
mengembalikan nilai true.
double suhuair = 205.1;
System.out.println(suhuair > 100); //true
System.out.println(suhuair <= 100); //false
24
Secara umum kerangka untuk pengambilan keputusan dengan statement IF terdiri dari
beberapa jenis. Jenis pertama adalah one-way IF, two-way IF, multi-way IF, dan nested IF.
Pada jenis one-way IF, statement didalam IF akan dieksekusi jika dan hanya jika kodisinya
bernilai true. Berikut adalah kerangka sintak dari one-way IF:
if (ekspresi boolean)
{
statement;
}
Pada jenis two-way IF, statement didalam IF akan dieksekusi jika kodisinya bernilai true jika
tidak maka akan mengeksekusi statement didalam ELSE. Berikut adalah kerangka sintak dari
two-way IF:
if (ekspresi boolean)
{
Statement untuk kasus true;
}
else
{
Statement untuk kasus false;
}
Jenis lebih lanjut untuk IF adalah multi-way IF. Multi-way IF memiliki banyak alternatif
pilihan kondisi (lebih dari satu) dengan masing-masing statement didalamnya. Berikut adalah
kerangka sintak dari multi-way IF:
if (ekspresi boolean kasus 1)
{
Statement untuk kasus 1 bernilai true;
}
else if (ekspresi boolean kasus 2)
{
Statement untuk kasus 2 bernilai true;
}
else
25
{
Statement untuk kasus selain yang disebutkan sebelumnya;
}
Jenis IF yang lain adalah nested IF. Nested IF memungkinkan programmer untuk dapat
membuat statement IF yang lain berada didalam statement IF (bersarang). Dengan demikian,
IF yang ada didalam statement IF disebut dengan inner IF dan IF yang diluar adalah outer IF.
Tidak ada batasan inner IF pada praktiknya di Java. Berikut adalah kerangka sintak dari
nested IF:
if (ekspresi boolean kasus 1)
{
if (ekspresi boolean kasus 2)
Statement untuk kasus 1 dan 2 bernilai true;
}
else
{
Statement untuk kasus selain yang disebutkan sebelumnya;
}
Kode 2.3 merupakan contoh penerapan semua jenis statement IF. Perhatikan bahwa pada
Kode 2.3, user diminta untuk memasukkan nilai. Setiap nilai yang dimasukkan oleh user akan
ditanggapi oleh program dengan membuat output A atau B atau C atau D. Saat user
memasukkan nilai 100 maka statement IF pertama bernilai true dan kemudian dilanjutkan
pada inner IF. Pada inner IF juga bernilai true sehingga program akan menghasilkan output
A. Jika user memberikan input 99, output yang dihasilkan adalah B karena pada inner IF
bernilai false sehingga yang dieksekusi adalah bagian ELSE didalam outer IF. Bagaimana
jika user memberikan input 10 dan 50? Apa hasil outputnya?
Kode 2.4 TestIF.java
1
2
3
4
5
import java.util.Scanner;
public class TestIF{
public static void main(String[] apa)
{
Scanner input = new Scanner(System.in);
26
6
7
8
9
10
11
12
11
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
System.out.print("Masukkan nilai: ");
int angka = input.nextInt();
if(angka > 60)
{
if(angka%2 == 0)
{
System.out.println("A");
}
else
{
System.out.println("B");
}
}
else if(angka > 30)
{
System.out.println("C");
}
else
{
System.out.println("D");
}
}
}
Terkadang programmer menginginkan suatu eksekusi program yang dihasilkan dari
kombinasi lebih dari satu kondisi. Misalnya, saat programmer akan membuat konversi nilai
huruf dari nilai angka yang didapatkan oleh mahasiswa. Mahasiswa akan mendapatkan nilai
B jika memiliki nilai pada kisaran angka 70 sampai 84. Bagaimana caranya memasukkan
kondisi nilai angka minimal 70 sampai dengan 84 pada program? Kita dapat melakukan
konversi kondisi tersebut dengan operasi logika. Misalnya, nilai angka disimbolkan x
sehingga ada dua kondisi x ≥ 70 dan x < 85. Kata “dan” disini disebut dengan operasi
27
logika. Pada bahasa pemrograman Java, ada beberapa operasi logika yang disajikan pada
Tabel 2.4.
Tabel 2.5 Operator logika
Simbol Java Nama Deskripsi
&& Dan Logika Konjungsi
|| Atau Logika Disjungsi
! Tidak Logika Negasi
^ Eksklusif Atau (XOR) Logika Eksklusif
Contoh penerapan operator logika di Java disajikan pada Kode 2.3. Kode 2.3 merupakan
penyelesaian masalah untuk konversi nilai angka kedalam nilai huruf dengan aturan: A
didapatkan dari nilai angka lebih dari 85, B didapatkan dari nilai angka 70-84, C didapatkan
dari nilai angka 60-69, D didapatkan dari nilai angka 50-59, dan E didapatkan dari nilai
angka kurang dari 50.
Kode 2.5 TestNilaiHuruf.java
1
2
3
4
5
6
7
8
9
10
11
12
11
import java.util.Scanner;
public class TestNilaiHuruf{
public static void main(String[] apa)
{
Scanner input = new Scanner(System.in);
System.out.print("Masukkan nilai angka: ");
int angka = input.nextInt();
if(angka > 85)
{
System.out.println("A");
}
else if(angka >= 70 && angka <= 84)
{
28
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
System.out.println("B");
}
else if(angka >= 60 && angka <= 69)
{
System.out.println("C");
}
else if(angka >= 50 && angka <= 59)
{
System.out.println("D");
}
else
{
System.out.println("E");
}
}
}
2.10 Perulangan
Perulangan merupakan cara menuliskan statement secara berulang-ulang. Hal ini sangat
memudahkan programmer, misalnya ketika ingin memberikan output “aku bisa” selama 1000
kali. Apakah programmer akan menuliskan console output selama 1000 kali?
System.out.println(“aku bisa”);
System.out.println(“aku bisa”);
System.out.println(“aku bisa”);
.....
System.out.println(“aku bisa”);
Tentu hal tersebut akan membutuhkan tenaga dan waktu yang besar. Java menyediakan
mekanisme untuk menulis statement sekali (atau dalam kasus lain bisa beberapa kali tetapi
tidak banyak) dalam satu metode perulangan. Secara sederhana bentuk dari statement
perulangan tersebut adalah sebagai berikut:
int count = 0;
while(count < 1000)
29
{
System.out.println(“aku bisa”);
count++;
}
Variabel count di berikan nilai awal (inisialisasi) dengan nilai 0. Kemudian kode while akan
melakukan pengecekan apakah count < 1000 bernilai true. Jika benar bernilai true, maka
program akan mengeksekusi statement console output “aku bisa” dan akan melakukan
pembaharuan nilai count dengan ditambah satu (increment). Sehingga, console output “aku
bisa” akan terus dieksekusi berulang-ulang sampai nilai count menjadi 1001 dan kondisi
pengecekan didalam while menjadi false.
Di java bentuk perulangan tidak hanya dapat dilakukan dengan blok statement while, tetapi
ada do-while, dan for. Seperti contoh sebelumnya, while mengeksekusi statement secara
berulang-ulang selama kondisi didalam while terpenuhi atau bernilai true. Sintak dari
perulangan dengan while di Java adalah sebagai berikut:
while (kondisi didalam perulangan)
{
Statement s;
Tambahan statement untuk mengendalikan perulangan; (opsional)
}
Variasi dari perulangan while adalah do-while. Berikut adalah sintak dari perulangan
dengan do-while di Java:
do {
Statement s;
} while (kondisi didalam perulangan)
Pada perulangan do-while, didalam blok do merupakan isi utama dari badan perulangan.
Dimana didalam do tersebut bisa disisi beberapa statement. Kode 2.4 merupakan contoh
penerapan do-while untuk membuat user memasukkan apapun angka kecuali 0 untuk
menghitung nilai penjumlahan dari yang sudah dihitung sebelumnya.
30
Kode 2.6 TestPenjumlahanDoWhile.java
1
2
3
4
5
6
7
8
9
10
11
12
11
13
14
import java.util.Scanner;
public class TestPenjumlahanDoWhile {
public static void main(String[] apa)
{
int angka;
int sum = 0;
Scanner input = new Scanner(System.in);
do {
System.out.println(“Masukkan angka kecuali 0”);
data = input.nextInt();
sum += data;
} while(data != 0);
System.out.println(“Hasil Penjumlahannya adalah ”+sum);
}
}
Perulangan terakhir dapat dilakukan dengan mekanisme for. Perulangan dengan for
merupakan cara yang dapat dipahami dengan mudah oleh programmer pemula. Pada
perulangan sebelum yaitu dengan while atau do-while, terkadang programmer lupa untuk
mengendalikan varibel yang akan di ulang-ulang dan akhirnya akan berakhir pada perulangan
tidak terhingga. Secara sederhana perulangan for dapat dibandingkan dengan perulangan
while seperti berikut:
Gambar 2.8 Perulangan
For (i = nilaiAwal; i < nilaiAkhir; i++){
//perulangan
...
}
i = nilaiAwal
while(i < nilaiAkhir) {
//perulangan
...
i++;
}
31
Secara umum, sintak dari perulangan for adalah sebagai berikut:
for (aksi-awal; kondisi didalam perulangan;
aksi setelah setiap iterasi) {
Statement s;
}
Perulangan juga dapat dibuat bersarang atau dikenal dengan istilah nested loop. Program
akan mengeksekusi lebih dahulu pada perulangan terdalam (inner loop) baru perulangan yang
luar (outer loop). Kode 2.5 merupakan contoh penggunaan perulangan bersarang pada tabel
perkalian.
Kode 2.7 TabelPerkalian.java
1
2
3
4
5
6
7
8
9
10
11
12
11
13
14
15
16
17
18
19
20
public class TabelPerkalian {
public static void main(String[] apa)
{
// Judul dan heading tabel
System.out.println(" Multiplication Table");
// Angka judul
System.out.print(" ");
for (int j = 1; j <= 9; j++)
System.out.print(" " + j);
System.out.println("\n --------------------------");
// isi tabel
for (int i = 1; i <= 9; i++) {
System.out.print(i + " | ");
for (int j = 1; j <= 9; j++) {
// tampilkan perkalian
System.out.printf("%4d", i * j);
}
System.out.println();
}
}
}
32
2.11 Kesimpulan
BAB ini merupakan BAB untuk mengulas kembali materi-materi tentang pemrograman dasar
dengan bahasa pemrograman Java. Materi-materi dasar pemrograman tersebut meliputi
input/output console, identified, variabel, assignment, tipe data, operasi, logika pengambilan
keputusan, dan perulangan. Dengan pengantar ini, diharapkan pada BAB-BAB berikutnya
akan lebih mudah untuk memahami sintak dalam memprogram dengan pendekatan
berorientasi objek pada bahasa pemrograman Java.
2.12 Latihan Soal
Jawablah pertanyaan-pertanyaan dibawah ini dengan tepat!
1. Sebutkan kelebihan bahasa pemrograman Java?
2. Sebutkan apa saja tipe data primitif yang didukung oleh Java?
3. Sebutkan operator relasional di Java?
4. Sebutkan dan jelaskan jenis-jenis statement IF yang didukung oleh Java?
5. Sebutkan apa saja mekanisme perulangan yang didukung oleh Java?
2.13 Praktikum
Lakukan praktik dibawah ini sesuai dengan permintaan input dan output yang telah diberikan
dengan bahasa pemrograman Java!
1. Kasus 1: Ganjil-Genap
ada kasus plat nomer ganjil genap yang diterapkan di Kota XXX. Dari plat
nomor tersebut, ganjil genap ditentukan oleh angkanya saja, tidak dengan huruf. Buat
program untuk mengotputkan lajur yang dipilih, jika genap lajur kiri, jika ganjil lajur
kanan.
Contoh Input/Output:
Input #1: 1234
Output #1: Lajur kiri
Input #2: 1231
33
Output #2: Lajur kanan
2. Kasus 2: Palindrom
Palindrom merupakan suatu rangkaian kata yang sama ketika dibaca baik dari depan
ataupun dari belakang. Misalnya, “katak”, “malam”,”makam” merupakan contoh dari
kata palindrom. Pada praktikum ini, programmer diminta untuk mengecek apakah
kata yang di masukkan merupakan palindrom atau bukan.
Contoh Input/Output:
Input #1: makan
Output #1: makan bukan palindrom
Input #2: malam
Output #2: malam merupakan palindrom
3. Kasus 3: Segitiga sama siku
Gambarkan segitiga sama siku dengan rangkaian karakter ‘*’. Alas dari segitiga sama
siku tersebut ditentukan oleh angka yang dimasukkan oleh user.
Contoh Input/Output:
Input #1: 3
Output #1: *
**
***
Input #2: 4
Output #2: *
**
***
****
34
BAB 3 CLASS DAN OBJEK DALAM PBO
3.1 Mendefinisikan Class dari Objek
Pemrograman berbasis objek (PBO) adalah pemrograaman yang menggunakan konsep objek.
Objek sendiri mewaliki representasi entitas di dunia nyata dapat diidentifikasi secara jelas.
Contoh seorang mahasiswa, TV, persegi panjang, lingkaran, dan bahkan pembayaran dapat
dilihat sebagai objek. Objek memiliki identitas, status, dan perilaku yang unik. Class adalah
blueprint, cetak biru, atau kontrak yang menentukan apa yang akan menjadi bidang data dan
metode objek. Objek adalah turunan dari kelas. Hubungan antar class dan objek dapat
dianalogikan dengan hubungan antara resep bakso dan bakso. Artinya Kita dapat membuat
bakso sebanyak yang Kita inginkan dari satu resep. Di dalam class ada property, method,
dan konstruktor.
3.2 Property dan Method
3.2.1 Property
Property atau keadaan objek (sering juga disebut atribut atau variabel) diwakili oleh bidang
data dengan nilai saat itu. Contohnya adalah objek mahasiswa yang memiliki property NIM,
nama, jenis kelamin, dan lain-lain. Objek persegi panjang memiliki bidang data panjang dan
lebar. Panjang dan lebar tersebut merupakan property yang menjadi ciri sebuah persegi
panjang. Cara penulisan dalam kode program sebagai berikut:
Gambar 3.1 Cara mendefinisikan property
3.2.2 Method
Method atau bisa disebut sebagai fungsi di pemrograman fungsional merupakan perilaku dari
suatu objek. Misalnya kita dapat mendefinisikan method bernama getLuas() dan
getKeliling() untuk objek persegi panjang. Sebuah objek persegi panjang dapat
memanggil getLuas() untuk mengembalikan nilai luas dan getKeliling() untuk
public int panjang; public int lebar;
Modifier tipeData namaProperty;
35
mengembalikan nilai keliling. Selain itu, kelas menyediakan method khusus, yang dikenal
sebagai konstruktor, yang dipanggil untuk membuat objek baru. Konstruktor dirancang untuk
melakukan tindakan inisialisasi, seperti menginisialisasi bidang data objek. Penjelasan
tentang konstruktor yang lebih lengkap ada pada Bab 3.4. Cara penulisan method yang
sederhana dalam kode program sebagai berikut:
modifier tipeNilaiKembalian namaMethod(parameter masukan){
//badan method
}
Kepala method mendefinisikan modifier, tipe nilai kembalian, nama method, dan parameter
masukan. Badan method berisi kode program untuk melaksanakan suatu tujuan. Modifier
yang digunakan pada gambar 3.2 adalah public static. Modifier selengkapnya akan dijelaskan
pada bab 3.6.
(a)
(b)
Gambar 3.2 Cara mendefinisikan (a) dan memanggil (b) method dengan nilai kembalian
modifier tipeNilaiKembalian namaMethod parameter masukan
kepala
method public static int max( int angka1, int angka2 ){
if(angka1 > angka2)
badan return angka1;
method else
return angka2;
}
namaMethod parameter aktual
int x = max(5, 2);
System.out.println("Angka terbesar dari 3 dan 9 adalah "+max(3, 9));
36
Method bisa saja memiliki atau tidak memiliki nilai kembalian. Gambar 3.2 merupakan
method yang dapat mengembalikan suatu nilai. Sedangkan method yang tidak memiliki nilai
kembalian menggunakan kata kunci void seperti pada Gambar 3.3.
(a)
(b)
Gambar 3.3 Cara mendefinisikan (a) dan memanggil (b) method tanpa nilai kembalian
Parameter masukan pada method bekerja seperti placeholder. Ketika method tersebut
dipanggil, Kita dapat memasukkan suatu nilai ke dalam parameter. Nilai tersebut dikenal
dengan istilah parameter aktual. Jumlah parameter masukan sangat beragam sesuai
kebutuhan, bahkan yang tidak mencantumkan parameter masukan juga tidak apa-apa.
Kembali pada PersegiPanjang, Gambar 3.3 adalah contoh UML class diagram dimana
PersegiPanjang memiliki 2 objek. Class PersegiPanjang sendiri memiliki 2 property bertipe
data integer yaitu panjang dan lebar. Memiliki 2 konstuktor dan 2 method.
namaMethod parameter aktual
printHello();
modifier void namaMethod parameter inputan
kepala
method public static void printHello(){
badan method System.out.println("Hello”);
}
37
PersegiPanjang
panjang: int
lebar: int
PersegiPanjang()
PersegiPanjang(panjangBaru: int, lebarBaru: int)
getLuas(): int
getKeliling(): int
Gambar 3.3 Class dan objek dalam UML class diagram
Implementasi dari UML Gambar 3.3 tersebut disajikan pada Kode 3.1 dan Kode 3.2.
Kode 3.1 PersegiPanjang.java
1
2
3
4
5
6
7
8
9
10
11
12
11
13
14
public class PersegiPanjang {
//panjang dan lebar dari persegi panjang
int panjang;
int lebar;
//konstruktor dari objek PersegiPanjang
PersegiPanjang(){
}
//konstruktor dari objek PersegiPanjang
PersegiPanjang(int panjangBaru, int lebarBaru){
panjang = panjangBaru;
lebar = lebarBaru;
}
persegiPanjang2: PersegiPanjang
panjang = 8
lebar = 5
persegiPanjang1: PersegiPanjang
panjang = 0
lebar = 0
Property
Konstruktor
38
15
16
17
18
19
20
21
22
23
24
25
//mengembalikan nilai luas persegi panjang
int getLuas(){
return panjang*lebar;
}
//mengembalikan nilai keliling persegi panjang
int getKeliling(){
return 2*(panjang+lebar);
}
}
Kode 3.2 PersegiPanjangDemo.java
1
2
3
4
5
6
7
8
9
10
11
12
11
12
13
public class PersegiPanjangDemo {
/* Main Method */
public static void main(String[] args){
//membuat objek peregi panjang dengan panjang=0 dan lebar=0
PersegiPanjang persegiPanjang1 = new PersegiPanjang();
//memanggil variabel dari class
//memanggil method dari class
System.out.println("Luas persegi panjang 1 ="+
persegiPanjang1.panjang+" * "+persegiPanjang1.lebar+" =
"+persegiPanjang1.getLuas());
//membuat objek peregi panjang dengan panjang=8 dan lebar=5
PersegiPanjang persegiPanjang2 = new PersegiPanjang(8, 5);
System.out.println("Luas persegi panjang 2 = "+
persegiPanjang2.panjang+" * "+persegiPanjang2.lebar+
" = "+persegiPanjang2.getLuas());
}
}
Method
39
Output:
Luas persegi panjang 1 = 0 * 0 = 0
Luas persegi panjang 2 = 8 * 5 = 40
Berdasarkan Kode 3.1 ada template atau cetak biru persegi panjang yang didalamnya
terdiri dari property, konstruktor, dan method. Sedangkan untuk membuat objek ada
pada file PersegiPanjangDemo.java. Sintaks penulisan objek sebagai berikut:
NamaClass namaObjek = new NamaClass(parameter masukan);
Gambar 3.4 Sintak penulisan objek
Saat objek pertama kali diinisialisasi, otomatis memanggil method konstruktor. ada 2
konstruktor di class Persegi, konstruktor pertama tidak memiliki parameter masukan dan
konstruktor ke-2 memiliki 2 parameter masukan. Memiliki nama method yang sama namun
parameter yang berbeda disebut dengan overloading method. Penjelasan tentang overloading
method yang lebih lengkap ada pada Bab 3.3.
Pada Gambar 3.4, menunjukkan bahwa objek persegiPanjang1 memanggil konstruktor
pertama (PersegiPanjang.java baris ke-7). Konstruktor tersebut tidak melakukan tindakan apa
pun, jadi property panjang dan lebar memiliki nilai awal yaitu 0. Sedangkan persegiPanjang2
memanggil konstruktor kedua. Konstruktor kedua ini menginisialisasi property panjang
dengan nilai masukan panjangBaru dan menginisialisasi property lebar dengan nilai masukan
lebarBaru.
Gambar 3.4 dan Kode 3.1 sama-sama menunjukkan pemanggilan method, namun dengan
cara berbeda. Gambar 3.4 memanggil method biasa sedangkan kode 3.1 memanggil method
dari class. Jika method biasa hanya menggunakan sintak namaMethod(parameter
masukan). Jika method dari class menggunakan sintak namaObjek.namaMethod(parameter
NamaClass namaObjek NamaClass parameter inputan
PersegiPanjang persegiPanjang1 = new PersegiPanjang();
NamaClass namaObjek NamaClass parameter inputan
PersegiPanjang persegiPanjang2 = new PersegiPanjang(8, 5);
40
masukan). Begitu pula cara memanggil variabel dari class menggunakan sintak
namaObjek.namaVariabel sedangkan variabel biasa menggunaan sintak namaVariabel. Lihat
Gambar 3.5 untuk mendapatkan informasi yang lebih jelas.
Pemanggilan method biasa Pemanggilan method dari Class
namaMethod(parameter masukan)
printHello(); max(5, 2)
namaObjek.namaMethod(parameter masukan)
persegiPanjang1.getLuas()
Pemanggilan variabel biasa Pemanggilan variabel dari Class
namaVariabel
lebar = lebarBaru;
namaObjek.namaVariabel
persegiPanjang1.panjang persegiPanjang2.lebar
Gambar 3.5 Sintak pemanggilan method dan variabel dari class
3.3 Overloading Method
Overloading method adalah method-method yang memiliki nama yang sama namun berbeda-
beda parameter masukannya. Dengan ini, akan membuat program lebih jelas dan lebih mudah
dibaca. Tidak hanya dapat diterapkan pada konstruktor, overloading method juga dapat
diterapkan pada method biasa. Contoh pada method max yang berfungsi untuk
mengembalikan nilai terbesar.
public static int max(int angka1, int angka2){
if(angka1 > angka2)
return angka1;
else
return angka2;
}
Kode program method max diatas bekerja hanya untuk tipe data integer dengan 2 parameter
masukan. Namun bagaimana jika ingin membuat method max yang bekerja untuk tipe data
double atau lebih dari 2 parameter masukan? Solusinya adalah membuat method dengan
41
nama yang sama namun berbeda parameter masukannya. Berikut contoh kode program yang
terdiri dari 3 method dengan nama yang sama namun dengan beberapa variasi parameter
masukan.
Kode 3.3 MethodOverloadingDemo.java
1
2
3
4
5
6
7
8
9
10
11
12
11
13
14
15
16
17
18
19
20
21
22
23
24
public class MethodOverloadingDemo {
/* Main Method */
public static void main(String[]args){
/* Memanggil method max dengan parmeter masukan integer */
System.out.println("Angka terbesar dari 3 dan 9 adalah
"+max(3, 9));
/* Memanggil method max dengan parmeter masukan double */
System.out.println("Angka terbesar dari 4.25 dan 4.0 adalah
"+max(4.25, 4.0));
/* Memanggil method max dengan parmeter masukan 3 double */
System.out.println("Angka terbesar dari 4.25, 4.0, dan 5.6
adalah "+max(4.25,4.0,5.6));
}
// Mengembalikan nilai terbesar dari 2 parameter masukan integer
public static int max(int angka1, int angka2){
if(angka1 > angka2)
return angka1;
else
return angka2;
}
// Mengembalikan nilai terbesar dari 2 parameter masukan double
public static double max(double angka1, double angka2){
if(angka1 > angka2)
return angka1;
42
25
26
27
28
29
30
31
32
33
else
return angka2;
}
// Mengembalikan nilai terbesar dari 3 parameter masukan double
public static double max(double angka1, double angka2, double
angka3){
return max(max(angka1, angka2), angka3);
}
}
Ketika memanggil max(3, 9), method max yang digunakan adalah method max yang
memiliki 2 parameter masukan integer. Ketika memanggil max(4.25, 4.0), method max
yang digunakan adalah method max yang memiliki 2 parameter masukan double. Ketika
memanggil max(4.25, 4.0, 5.6), method max yang digunakan adalah method max yang
memiliki 3 parameter masukan double.
Misal, jika kita memanggil max(2, 3.0) apakah bisa dijalankan? Jawabannya adalah bisa.
Ketika memanggil max(2, 3.0), method max yang digunakan adalah method max yang
memiliki 2 parameter masukan double. Masukan 2 akan otomatis berubah menjadi nilai
double dan memenuhi method ini.
Kenapa method max(double, double) tidak digunakan untuk max(3, 9), sedangkan baik
max(double, double) dan max(int, int) dapat digunakan? Karena compiler Java
menemukan bahwa method yang cocok untuk max(3, 9) adalah max(int, int) dibanding
max(double, double).
3.4 Konstruktor dan Destruktor
Konstruktor merupakan method khusus yang dirancang dan dipanggil untuk melakukan
tindakan inisialisasi, seperti menginisialisasi bidang data objek. Dalam satu class,
memungkinkan untuk memiliki lebih dari satu konstruktor namun memiliki parameter yang
berbeda-beda yang disebut dengan overloading method. Sintak penulisan konstruktor sebagai
berikut:
43
modifier NamaClass(parameter masukan){
//badan konstruktor
}
PersegiPanjang(){
}
PersegiPanjang(int panjangBaru, int lebarBaru){
panjang = panjangBaru;
lebar = lebarBaru;
}
Gambar 3.6 Sintak penulisan konstruktor
Destruktor merupakan method khusus yang akan dipanggil saat objek dihapus dari
memori. Pada bahasa pemrograman Java yang sekarang kita gunakan, tidak memiliki method
destructor karna Java memiliki garbage collector untuk mengelola memori. Garbage
collector dapat menghapus objek yang tidak terpakai dengan otomatis.
3.5 Static Variable dan Constant
Property panjang dan lebar dalam class persegiPanjang dikenal sebagai variabel
instance. Variabel instance terkait dengan instance spesifik dari kelas, variabel tersebut tidak
dibagikan di antara objek dari kelas yang sama. Misalnya, pada objek di bawah ini:
PersegiPanjang persegiPanjang1 = new PersegiPanjang();
PersegiPanjang persegiPanjang2 = new PersegiPanjang(8, 5);
Panjang dan lebar pada persegiPanjang1 tidak tergantung pada panjang dan lebar di
persegiPanjang2 dan disimpan di lokasi memori yang berbeda. Perubahan yang dilakukan
pada panjang atau lebar persegiPanjang1 tidak memengaruhi panjang atau lebar
persegiPanjang2, dan sebaliknya.
Jika Kita ingin semua variable instance dapat berbagi data, gunakan variabel static
atau dikenal juga sebagai variabel class. Variabel static menyimpan nilai untuk variabel di
lokasi memori umum. Karena lokasi umum ini, jika satu objek mengubah nilai variabel static,
semua objek dari kelas yang sama akan terpengaruh. Java mendukung variabel static dan juga
method static. Method static dapat dipanggil tanpa membuat turunan dari kelas.
Mari kita modifikasi class PersegiPanjang dengan menambahkan variabel-variabel
jumlahObjek untuk menghitung jumlah objek PersegiPanjang yang dibuat. Ketika objek
pertama class ini dibuat, jumlahObjek adalah 1. Ketika objek kedua dibuat, jumlahObjek
menjadi 2. UML dari class PersegiPanjang yang baru ditunjukkan pada Gambar 3.7. Class
44
PersegiPanjang mendefinisikan variabel panjang dan lebar sebagai variabel instance dan
metode getLuas(), getKeliling() sebagai method instance sedangkan variabel
jumlahObjek sebagai variabel static dan method getJumlahObjek sebagai method static.
(Perhatikan variabel dan metode statis digarisbawahi dalam diagram kelas UML.)
PersegiPanjang
+panjang: int
+lebar: int
+jumlahObjek: int= 0
+PersegiPanjang()
+PersegiPanjang(panjangBaru: int, lebarBaru: int)
+getJumlahObjek(): int
+getLuas(): int
+getKeliling(): int
Setelah 2 object PersegiPanjang dibuat, maka jumlahObjek = 2
Gambar 3.7 UML class diagram dengan variabel dan method static
Kode 3.4 merupakan implementasi dari Class PersegiPanjang setelah ditambahkan variabel
static dan method static. Kode 3.5 merupakan kode untuk pengetesan Class PersegiPanjang
yang telah dimodifikasi sebelumnya.
Kode 3.4 PersegiPanjang.Java
1
2
public class PersegiPanjang {
//panjang dan lebar dari persegi panjang
persegiPanjang1: PersegiPanjang
panjang = 0
lebar = 0
jumlahObjek = 2
persegiPanjang2: PersegiPanjang
panjang = 8
lebar = 5
jumlahObjek = 2
45
3
4
5
6
7
8
9
10
11
12
11
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public int panjang;
public int lebar;
public static int jumlahObjek = 0;
//konstruktor dari objek PersegiPanjang
public PersegiPanjang(){
jumlahObjek++;
}
//konstruktor dari objek PersegiPanjang
public PersegiPanjang(int panjangBaru, int lebarBaru){
panjang = panjangBaru;
lebar = lebarBaru;
jumlahObjek++;
}
//mengembalikan nilai getJumlahObjek
public static int getJumlahObjek(){
return jumlahObjek;
}
//mengembalikan nilai luas persegi panjang
public int getLuas(){
return panjang*lebar;
}
//mengembalikan nilai keliling persegi panjang
public int getKeliling(){
return 2*(panjang+lebar);
}
}
Method Static
Menambah nilai 1 pada
variabel jumlahObjek
Menambah nilai 1 pada
variabel jumlahObjek
Variabel static
46
Kode 3.5 PersegiPanjangDemo.java
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 PersegiPanjangDemo {
/* Main Method */
public static void main(String[] args){
System.out.println("Sebelum membuat objek");
//memanggil variabel static
System.out.println("Jumlah objek = "+
PersegiPanjang.jumlahObjek);
//Membuat objek persegiPanjang1
PersegiPanjang persegiPanjang1 = new PersegiPanjang();
System.out.println("\nSetelah membuat objek persegiPanjang1");
//memanggil variabel instance
System.out.println("Panjang = "+persegiPanjang1.panjang+
“\nLebar = “+persegiPanjang1.lebar);
//memanggil method static
System.out.println("Jumlah objek = "+
PersegiPanjang.getJumlahObjek());
//Membuat objek persegiPanjang2
PersegiPanjang persegiPanjang2 = new PersegiPanjang(8, 5);
System.out.println("\nSetelah membuat objek persegiPanjang1");
//memanggil variabel instance
System.out.println("Panjang = "+ persegiPanjang2.panjang +
"\nLebar="+persegiPanjang2.lebar);
//memanggil variabel static
System.out.println("Jumlah objek = "+
PersegiPanjang.jumlahObjek);
}
47
27 }
Output:
Sebelum membuat objek
Jumlah objek = 0
Setelah membuat objek persegiPanjang1
Panjang = 0
Lebar = 0
Jumlah objek = 1
Setelah membuat objek persegiPanjang2
Panjang = 8
Lebar = 5
Jumlah objek = 2
Berdasarkan Kode 3.4 dan Kode 3.5, variabel instance (panjang dan lebar) milik
instance dan memiliki penyimpanan memori yang tidak tergantung satu sama lain. Variabel
static (jumlahObjek) dibagikan oleh semua instance dari kelas yang sama.
3.6 Visibility Modifiers
Visibility modifiers dapat digunakan untuk menentukan visibilitas kelas dan
anggotanya. Kita dapat menggunakan visibility modifier public untuk class, method, dan
property untuk menyatakan bahwa mereka dapat diakses dari kelas lain. Jika tidak ada
visibility modifiers yang digunakan, maka visibility modifiers nya default yang berarti class,
method, dan property dapat diakses oleh kelas apa pun dalam package yang sama, dikenal
sebagai package-private atau package-access. Gambaran modifier public dan default untuk
package ada pada gambar 3.8.
Gambar 3.8 Gambaran modifier public dan default untuk package
package p1;
class C1{
…..
}
package p1;
public class C2{
/*dapat mengakses C1*/
}
package p2;
public class C3{
/*tidak dapat mengakses p1.C1*/
/*dapat mengakses p1.C2*/
}
48
Selain visibility modifier public dan default, Java menyediakan visibility modifier
private dan protected untuk anggota kelas. Modifier private membuat method dan property
hanya dapat diakses dari dalam kelasnya sendiri. Untuk modifier protected, Kita dapat
mengakses bidang data yang dilindungi atau metode dalam superclass dari subclassnya.
Modifier protected mengizinkan subclass untuk mengakses property atau metode yang
didefinisikan dalam superclass, tetapi tidak mengizinkan non subclass dalam package yang
berbeda untuk mengakses itu. Materi superclass dan subclass akan dibahas selengkapnya
pada Bab 7. Skema visibility modifier meningkat dalam urutan di bawah ini, sesuai Gambar
3.9.
Cakupan visibility modifiers
private, default (no modifier), protected, public
Gambar 3.9 Cakupan visibility modifier
Dari gambar 3.9 menjelaskan bahwa cakupan paling kecil adalah private, dimana
modifier private hanya dapat diakses pada class yang sama. Selanjutnya adalah modifier
default, dimana modifier default hanya dapat diakses pada class dan package yang sama.
Disusul modifier protected, dimana modifier protected dapat diakses pada class dan
package yang sama serta subclass baik di package yang berbeda atau package yang sama.
Terakhir, cakupan paling besar adalah public, dimana modifier public dapat diakses pada
class dan package yang sama maupun berbeda serta subclass baik di package yang berbeda
atau package yang sama. Ringkasan cakupan visibilitas ke-empat modifier dapat dilihat pada
Tabel 3.1
49
Tabel 3.1 Visibilitas property dan method
Modifier pada
anggota class
Akses dari
class yang
sama
Akses dari
package yang
sama
Akses dari
subclass di
luar package
Akses dari
luar
package
Public (+) v v v v
Protected (#) v v v -
Default/ no modifier v v - -
Private (-) v - - -
3.7 Kesimpulan
1. Class adalah template, cetak biru, atau kontrak yang menentukan apa yang akan
menjadi bidang data dan metode objek.
2. Objek adalah turunan dari kelas. Kita dapat menggunakan kata kunci new untuk
membuat objek baru dan operator titik (.) untuk mengakses property dan method dari
objek tersebut.
3. Overloading method adalah method-method yang memiliki nama yang sama namun
berbeda-beda parameter masukannya.
4. Konstruktor merupakan method khusus yang dirancang dan dipanggil untuk
melakukan tindakan inisialisasi. Destruktor merupakan method khusus yang akan
dipanggil saat objek dihapus dari memori. Bahasa pemrograman Java tidak memiliki
method destructor karna Java memiliki garbage collector untuk mengelola memori.
5. ada 2 macam property/ method antara lain:
a. Property/ method instance terkait dengan instance spesifik dari kelas, property/
method tersebut tidak dibagikan di antara objek dari kelas yang sama. Cara
pemanggilannya yaitu NamaObjek.property atau NamaObjek.namaMethod.
b. Property/ method statis dapat digunakan bersama oleh semua instance dari
kelas yang sama. Cara pemanggilannya menggunakan NamaClass.property
atau NamaClass.namaMethod.
50
6. Visibility modifiers dapat digunakan untuk menentukan visibilitas kelas dan
anggotanya. ada 4 variasi visibility modifiers antara lain:
a. Visibility modifier public untuk class, method, dan property untuk menyatakan
bahwa mereka dapat diakses dari kelas lain.
b. Jika tidak ada visibility modifiers yang digunakan, maka visibility modifiers
nya default (no modifier) yang berarti class, method, dan property dapat
diakses oleh kelas apa pun dalam package yang sama.
c. Modifier private membuat method dan property hanya dapat diakses dari
dalam kelasnya sendiri.
d. Modifier protected mengizinkan subclass untuk mengakses property atau
metode yang didefinisikan dalam superclass, tetapi tidak mengizinkan non
subclass dalam package yang berbeda untuk mengakses itu.
3.8 Kuis dan Latihan Soal
1. Template, cetak biru, atau kontrak yang menentukan apa yang akan menjadi bidang
data dan metode objek disebut ...
2. Jelaskan apa perbedaan property dan method!
3. Mengapa diperlukan overloading method?
4. Apakah pada pemrograman Java ada destructor? Jelaskan penyebabnya!
5. Property/ method yang dapat digunakan bersama oleh semua instance dari kelas yang
sama disebut ...
6. Jelaskan masing-masing perbedaan dari ke-4 visibility modifier!
3.9 Praktikum
1. Buatlah program class Lingkaran yang merepresentasikan template lingkaran. Di
dalam class tersebut ada :
a. Property jari_jari dengan tipe data double
b. Property phi dengan tipe data double bernilai 3.14
c. Property static jumlahLingkaran dengan tipe data integer bernilai 0
d. Konstruktor pertama tanpa ada masukan dan tidak melakukan apa-apa
e. Konstruktor kedua memiliki 1 masukan yaitu jari_jari_baru bertipe data
double
f. Method getLuas, mengembalikan nilai luas lingkaran
51
g. Method getKeliling, mengembalikan nilai keliling lingkaran
h. Method static getJumlahLingkaran, mengembalikan nilai jumlah lingkaran
yang dibuat
Gunakan modifier default untuk semua property dan method. Buat juga 3 objek,
objek pertama tanpa inisialisasi jari_jari, objek kedua dengan inisialisasi jari_jari
dari property, dan objek ketiga dengan inisialisasi jari_jari dari konstuktor.
Gambar pula UML class diagramnya.
2. Buatlah program class Piramida yang merepresentasikan bentuk piramida. Kreasikan
konten property, method, dan objek sesuai keinginan Anda.
3. Buatlah program class Mahasiswa berdasarkan UML class diagram di bawah ini
Mahasiswa
+nim: string
+nama: string
+alamat: string
+ipk: double
+Mahasiswa()
+Mahasiswa(nim: string)
+Mahasiswa(nimBaru: string, namaBaru: string, alamatBaru: string, ipkBaru: string)
+predikat(ipk: double): string
+cetak(): void
Penjelasan UML class diagram Mahasiswa
Atribut
nim bertipe data string dengan modifier public
nama bertipe data string dengan modifier public
alamat bertipe data string dengan modifier public
ipk bertipe data double dengan modifier public
Konstruktor
Mahasiswa()
Tidak melakukan apapun
Mahasiswa(nim: string)
o Beri nilai property nim milik class diisi dengan nilai nim masukan method
52
Mahasiswa(nimBaru: string, namaBaru: string, alamatBaru: string, ipkBaru:
string)
o Beri nilai property nim milik class diisi dengan nilai nimBaru masukan
method
o Beri nilai property nama milik class diisi dengan nilai namaBaru masukan
method
o Beri alamat property nama milik class diisi dengan nilai alamatBaru
masukan method
o Beri nilai property ipk milik class diisi dengan nilai ipkBaru masukan
method
Method
predikat(ipk: double): String
Jika ipk diantara 2.0 sampai 2.75, kembalikan string “Memuaskan”
Jika ipk diantara 2.76 sampai 3.5, kembalikan string ‘Sangat memuaskan”
Jika ipk diantara 3.51 sampai 4.0, kembalikan string “Dengan pujian”
Jika tidak, kembalikan string “-“
cetak(): void
o Menampilkan nim, nama, alamat, ipk dan predikat dalam susunan vertical
Contoh output:
Nama = Dilan
Alamat = Bandung
NIM = 1
IPK = 3.51
Predikat = Dengan Pujian
53
BAB 4 ENKAPSULASI
4.1 Konsep Enkapsulasi
Konsep enkapsulasi adalah membuat property menjadi modifier private sehingga dapat
melindungi data dan membuat kelas mudah dikelola. Encapsulasi ini memungkinkan
programmer untuk aturan membuat kode program seperti: read-only atau write-only. Sebagai
contoh, ketika programmer Google membuat API Google Map, tidak mungkin Google
memberikan akses untuk satelit secara langsung kepada programmer third-party
(programmer biasa yang mengunakan API Google Map untuk mengakses peta). Hal tersebut
dapat dilindungi dengan membuat beberapa akses terbatas pada method atau property
sehingga programmer third-party hanya dapat membaca atau mengambil nilainya saja tanpa
bisa merubah nilainya. Lebih sederhananya, perhatikan pemberian nilai pada property
panjang dan lebar pada class PersegiPanjangDemo sebelumnya.
persegiPanjang2.panjang = 6;
persegiPanjang2.lebar = 7;
Pemberian nilai tersebut dilakukan secara langsung ke property. Cara seperti itu merupakan
contoh yang tidak bagus karena dua alasan, yaitu:
1. Data dapat dirusak. Misalnya, property jumlahObjek berfungsi untuk menampung nilai
jumlah objek yang dibuat, tetapi bisa saja diset dengan manual misalnya,
Lingkaran.jumlahObjek = 10;
2. Class menjadi sulit dipertahankan dan rentan terhadap bug. Misalkan kita ingin
memodifikasi class PersegiPanjang untuk memastikan bahwa nilai panjang tidak negatif
setelah yang lain program sudah menggunakan class tersebut. Kita harus mengubah tidak
hanya class Circle tetapi juga program yang menggunakannya karena klien mungkin telah
memodifikasi nilai panjang secara langsung misalnya
persegiPanjang2.panjang = -6;
Untuk mencegah modifikasi property secara langsung, Kita harus mendeklarasikan property
dengan modifier private. Cara tersebut dikenal sebagai enkapsulasi. Property dengan
modifier private tidak dapat diakses oleh objek dari luar class. Namun, klien sering
mengambil dan memodifikasi property. Untuk membuat sebuah property private dapat
diakses, Kita perlu menyediakan method setter dan getter.
54
4.2 Setter-Getter Method
Method setter berfungsi untuk memperbarui nilai dari property private sedangkan
method getter berfungsi untuk mengambil nilai dari property private. Method setter juga
dikenal dengan nama mutator dan method getter dikenal dengan nama accesor. Kedua
method tersebut memiliki sintak sebagai berikut:
Method setter
public void setNamaProperty(parameter masukan)
public void setPanjang(int panjang)
Method getter
public tipeDataKembalian getNamaProperty()
public int getPanjang()
Gambar 4.1 Sintak method setter dan getter
Mari kita buat class PersegiPanjang biasa pada Gambar 3.7 pada Bab sebelumnya ke
dalam bentuk enkapsulasi dengan dilengkapi method setter dan getter.
PersegiPanjangEnkapsulasi
-panjang: int
-lebar: int
-jumlahObjek: int= 0
+PersegiPanjang()
+PersegiPanjang(panjangBaru: int, lebarBaru: int)
+setPanjang(panjangBaru: int): void
+getPanjang(): int
+setLebar(lebar: int): void
+getLebar(): int
+getJumlahObjek(): int
+getLuas(): int
+getKeliling(): int
55
Gambar 4.2 Class dan Objek PersegiPanjangEnkapsulasi dalam UML Class Diagram
Pada gambar UML class diagram di atas, ada beberapa perbedaan. Pertama pada
property, lambang + diganti dengan – agar modifier public berganti dengan private. Kedua
bertambahnya 4 method, yaitu method setter dan getter untuk panjang serta method setter
dan getter untuk lebar. Dari Gambar 4.2 kita bisa membuat kode program seperti pada Kode
4.1 dan pengetesannya pada Kode 4.2.
Kode 4.1 PersegiPanjangEnkapsulasi.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class PersegiPanjangEnkapsulasi {
//panjang, lebar, dan jumlahObjek dengan modifier private
private int panjang;
private int lebar;
private int jumlahObjek = 0;
//konstruktor dari objek PersegiPanjang
public PersegiPanjangEnkapsulasi(){
jumlahObjek++;
}
//konstruktor dari objek PersegiPanjang
public PersegiPanjangEnkapsulasi(int panjangBaru, int
lebarBaru){
panjang = panjangBaru;
lebar = lebarBaru;
pp3: PersegiPanjangEnkapsulasi
panjang = 8
lebar = 5
pp1: PersegiPanjangEnkapsulasi
panjang = 0
lebar = 0
pp2: PersegiPanjangEnkapsulasi
panjang = 6
lebar = 7
Property private
56
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
jumlahObjek++;
}
//method setter untuk property panjang
public void setPanjang(int panjangBaru){
panjang = panjangBaru;
}
//method getter untuk property panjang
public int getPanjang(){
return panjang;
}
//method setter untuk property lebar
public void setLebar(int lebar){
//gunakan kata kunci this karena nama masukan parameter
//lebar sama dengan nama property lebar
this.lebar = lebar;
}
//method getter untuk property lebar
p