113
Java Bootcamp 2011 1 UML dan Java Application Software yang dibutuhkan Java Development Kit 6 Tools o Visual Paradigm o Notepad/Netbeans/Eclipse/InteliJ Relational Database (ex MySQL 5) Optional o MySQL Workbench

UML dan Java Application - elearning.amikom.ac.idelearning.amikom.ac.id/index.php/download/materi/190302158-ST063-7...UML dan Java Application ... o Visual Paradigm o Notepad/Netbeans/Eclipse/InteliJ

Embed Size (px)

Citation preview

Java Bootcamp 2011 1

UML dan Java Application

Software yang dibutuhkan

Java Development Kit 6

Tools

o Visual Paradigm

o Notepad/Netbeans/Eclipse/InteliJ

Relational Database (ex MySQL 5)

Optional

o MySQL Workbench

Java Bootcamp 2011 2

Contents UML ......................................................................................................................................................... 5

Use Case Diagram ........................................................................................................................... 6

Contoh Kasus ................................................................................................................ 7

Menggambar UseCase dengan Visual Paradigm ....................................................... 8

Menggambar Actor .................................................................................................... 11

Generalization ............................................................................................................ 12

Use Case..................................................................................................................... 12

Association ................................................................................................................ 13

Include ........................................................................................................................ 14

Extend ......................................................................................................................... 16

Use Case Diagram Perpustakaan ............................................................................. 18

Activity Diagram ........................................................................................................................... 18

Menggambar Activity Diagram dengan Visual Paradigm ........................................ 20

Partition/Vertical Swinlane ........................................................................................ 20

Initial Node ................................................................................................................. 21

Action ......................................................................................................................... 21

Decision Node ............................................................................................................ 23

Activity Final Node ..................................................................................................... 24

Peminjaman oleh mahasiswa ....................................................................................... 26

Peminjaman oleh Karyawan......................................................................................... 27

Pengembalian oleh karyawan ...................................................................................... 27

Pengembalian Oleh Mahasiswa ................................................................................... 28

Class Diagram .................................................................................................................................... 29

Class ............................................................................................................................ 31

Generalisasi ................................................................................................................. 31

Aggregasi..................................................................................................................... 32

Multiplicity .................................................................................................................... 32

Composisi .................................................................................................................... 33

Asosiasi 1 Arah ............................................................................................................ 34

Class Diagram Perpustakaan....................................................................................... 36

Kode Program untuk Entity .......................................................................................... 37

Kelas Anggota ............................................................................................................. 37

Kelas Karyawan ........................................................................................................... 37

Kelas Mahasiswa ......................................................................................................... 38

Kelas PetugasPerpus .................................................................................................. 38

Java Bootcamp 2011 3

Kelas Denda ................................................................................................................ 39

Kelas Koleksi ............................................................................................................... 40

Kelas ItemTransaksi .................................................................................................... 40

Kelas Transaksi ........................................................................................................... 41

Kelas TransaksiPeminjaman ........................................................................................ 41

Kelas TransaksiPengembalian ..................................................................................... 42

DAO ............................................................................................................................. 42

Sequence Diagram ............................................................................................................................ 43

Actor ............................................................................................................................ 45

Boundary Life Line ....................................................................................................... 46

Message ...................................................................................................................... 47

Relasi Class Diagram dan Squence Diagram .............................................................. 48

LifeLine ........................................................................................................................ 50

Message dan Parameter .............................................................................................. 52

Return Message........................................................................................................... 55

Fragment ..................................................................................................................... 56

Operand didalam Fragment ......................................................................................... 57

Sequence Login ........................................................................................................... 63

Squence Peminjaman oleh Karyawan .......................................................................... 64

Sequence Diagram Pengembalian oleh Karyawan ...................................................... 65

Sequence Diagram Peminjaman oleh Mahasiswa ....................................................... 66

Sequence Diagram Pengembalian oleh mahasiswa .................................................... 67

Sequence Diagram Penambahan Data Mahasiswa ..................................................... 68

Sequence Diagram Load Data Mahasiswa .................................................................. 69

Diagram Database ....................................................................................................... 70

Object Oriented Programming .............................................................................................................. 71

Object ................................................................................................................................................ 71

Class .................................................................................................................................................. 71

Enkapsulasi ........................................................................................................................................ 72

Inheritance ........................................................................................................................................ 73

Interface ............................................................................................................................................ 77

Polymorphism ................................................................................................................................... 77

Visual Programming .............................................................................................................................. 78

Swing ................................................................................................................................................. 78

Form Login ................................................................................................................... 78

Form Main .................................................................................................................... 81

Java Bootcamp 2011 4

Form Data Mahasiswa ................................................................................................. 84

Form Input Mahasiswa ................................................................................................. 88

Form Transaksi Peminjaman ....................................................................................... 92

Controller .......................................................................................................................................... 97

Controller Login............................................................................................................ 97

Controller Mahasiswa................................................................................................... 98

Data Access Object .............................................................................................................................. 100

Kode Program untuk Kelas Database ........................................................................ 101

Kode Program untuk Dao ................................................................................................................ 102

Kelas AbstractDao ..................................................................................................... 102

Kelas DaoPetugasPerpus .......................................................................................... 105

Kelas DaoItemKoleksi ................................................................................................ 107

Kelas DaoKaryawan .................................................................................................. 108

Kelas DaoKoleksi ....................................................................................................... 109

Kelas DaoPeminjaman ............................................................................................... 110

Kelas DaoPengembalian ............................................................................................ 111

Java Bootcamp 2011 5

UML The Unifed Modeling Language adalah seperangkat aturan dan notasi untuk spesifikasi sistem perangkat lunak, dikelola dan dibuat oleh Object Management Group. notasi ini menyediakan satu set elemen grafis untuk pemodelan sistem. Beberapa diagram dari UML adalah

1. Use Case Diagram alat komunikasi tingkat tinggi untuk mewakili persyaratan sistem. Diagram menunjukkan interaksi antara pengguna dan entitas eksternal lainnya dengan sistem yang sedang dikembangkan.

2. Activity Diagram Menangkap alur dari sebuah sistem, termasuk tindakan utama dan poin keputusan. Diagram ini berguna untuk mendokumentasikan proses bisnis.

3. Class Diagram Class diagram menggambarkan struktur statis dari kelas dalam sistem anda dan menggambarkan atribut, operasi dan hubungan antara kelas.

4. Squence Diagram Squence diagram secara khusus menjabarkan sebuah Use Case. Diagram ini menunjukkan sejumlah objek dan pesan yang melewati suatu objek.

5. Component Diagram

Komponen diagram digunakan untuk menggambarkan bagaimana komponen suatu sistem yang terhubung bersama di tingkat yang lebih tinggi dari abstraksi dari diagram kelas. Sebuah komponen bisa dimodelkan oleh salah satu atau lebih kelas.

6. Deployment Diagram Adalah model arsitektur runtime dari sistem dalam pengaturan dunia nyata. Mereka menunjukkan entitas bagaimana perangkat lunak diterapkan ke perangkat fisik.

7. State Machine Diagram Digunakan untuk menggambarkan status transisi dari objek tunggal dalam menanggapi peristiwa.

8. Interaction Overview Diagrams Merupakan pencangkokan dari Activity Diagram dan Squence Diagram. Disini berupa squence diagram yang dipecah menggunakan notasi activity diagram untuk menunjukkan aliran kontrol

9. Communications Diagram Mendeskripsikan kumpulan objek yang berinteraksi untuk menjalankan suatu tingkah laku dalam sistem.

Case Tools Beberapa case tools yang bisa kita gunakan antara lain

1. Visual Paradigm (Komunity dan Komersil) 2. Violet 3. Tigris UML 4. UMLET 5. Rational Rose 6. JUDE 7. Poseidon UML 8. Visual Studio 2010 (Komersil)

Java Bootcamp 2011 6

Use Case Diagram

Alat komunikasi tingkat tinggi untuk mewakili persyaratan sistem. Diagram menunjukkan interaksi antara pengguna dan entitas eksternal lainnya dengan sistem yang sedang dikembangkan. Symbol

Use Case

Sebuah use case merupakan unit fungsi yang dapat berinteraksi dengan aktor atau terkait dengan use case lainnya. Penggunaannya diwakili dengan sebuah elips dengan nama use case didalamnya. Nama use case biasanya berupa suatu kata kerja Ex : Use Case Presensi

Actor

Aktor mewakili entitas eksternal dalam sistem dan dapat berupa manusia, perangkat keras atau sistem lain. Aktor diambil menggunakan sebuah figure tongkat. Hubungan yang terjadi antar aktor biasanya adalah generalisasi untuk menunjukkan perilaku terhadap sistem yang lebih spesifik Ex : Use Case Mahasiswa

Assosiasi

Ditunjukkan dalam diagram use case oleh garis padat. Sebuah asosiasi setiap kali ada seorang aktor yang terlibat dengan interaksi yang dijelaskan oleh use case. Asosiasi dimodelkan sebagai garis yang menghubungkan use case dan aktor untuk satu sama lain, dengan mata panah yang bersifat opsional(tidak harus ada) pada salah satu ujung baris. panah ini sering digunakan untuk menunjukkan arah seruan awal hubungan atau untuk menunjukkan aktor utama dalam use case. Ex : Mahasiswa melakukan presensi

Generalisasi

Digunakan ketika ada use case yang umum atau actor yang umun, digunakan untuk memberikan dasar fungsi yang dapat digunakan oleh use case/actor yang lebih khusus. Ex : Mahasiswa merupakan actor yang lebih umum daripada asisten, dimana tidak semua mahasiswa adalah asisten dan semua asisten adalah mahasiswa

Include Menggambarkan bahwa use case utama

Java Bootcamp 2011 7

mengincludkan use case yang lain, yang berefek use case yang diincludkan akan terisi kedalam perilaku dari use case utama. Ex : Setiap kali ada proses mengisi KRS maka proses pengecekan login pasti selalu dilakukan, jadi ketika Use Case mengisi KRS dieksekusi maka Use Case Cek Status Login akan ikut tereksekusi.

Extend

Menggambarkan bahwa use case tertentu menyediakan fungsionalitas tambahan kepada usecase induknya pada suatu aliran tertentu. Disini dapat diartikan bahwa use case yang mengextend tidak harus selalu tereksekusi ketika use case induknya dieksekusi Ex : Setiap kali use case memilih matakuliah belum tentu use case memilih kelas dieksekusi.

Contoh Kasus

Mari mencoba merancang sistem informasi dengan UML Perpustakaan STMIK AMIKOM Yogyakarta menyewakan buku dan CD kepada

mahasiswa, dosen, dan karyawan. Dimana seorang mahasiswa hanya diijinkan meminjam

buku berbahasa Indonesia, CD. Sementara itu dosen diijinkan meminjam semua koleksi di

perpustakaan termasuk buku asing, begitu juga karyawan. Seorang mahasiswa hanya

diijinkan meminjam maksimal 3 buah koleksi, berbeda dengan dosen dan karyawan yang

bisa meminjam tanpa batas. Para pengunjung perpustakaan dapat melakukan pencarian

koleksi berasarkan judul, pengarang atau penerbit, melihat daftar koleksi di komputer

pencarian.

Prosedur peminjaman adalah dengan membawa buku yang hendak dipinjam dan

menunjukkan KTM untuk mahasiswa, NIK untuk dosen dan karyawan kepada petugas

perpustakaan. Mahasiswa diperbolehkan meminjam selama satu minggu, selebihnya

didenda.

Petugas perpustakaan bertugas melakukan pendataan buku, mencatat peminjaman

dan pengembalian, menghitung denda, serta membantu mencarikan koleksi melalui mesin

pencari. Para pengunjung perpustakaan dapat meminjam buku, mencari koleksi di mesin

pencari dan membayar denda. Selain itu petugas perpustakaan juga dapat mencetak

laporan seperti Laporan Daftar Koleksi, Laporan Transaksi Harian, Bulanan, Laporan Daftar

Anggota, Laporan Pembayaran Denda.

Java Bootcamp 2011 8

Menggambar UseCase dengan Visual Paradigm

1. Silahkan anda jalankan Visual Paradigm

2. Maka anda akan mendapat tampilan seperti berikut

3. Silahkan buat project baru melalui menu File New Project

4. Maka akan muncul window dialog New Project, pada Project Name beri nama

Design System Perpustakaan kemudian klik Create Blank Project

Java Bootcamp 2011 9

5. Maka anda akan mendapatkan tampilan seperti berikut

6. Silahkan anda simpan dengan CTRL + S atau File Save Project

7. Maka akan muncul window berikut

Pilih Save to directory (dilingkari hijau)

Directory silahkan isikan direktory anda masing – masing (dilingkari biru)

Java Bootcamp 2011 10

8. Silahkan anda pilih Use Case Diagram

9. Silahkan anda klik kanan kemudian pilih New Use Case Diagram

10. Beri nama Use Case Petugas Perpus kemudian Enter

11. Tambahkan 1 buah actor, diambil dari sebelah kiri

Java Bootcamp 2011 11

Menggambar Actor

12. Silahkan anda drag ke lembar kosong

13. Silahkan rename Actor menjadi Karyawan dengan cara double click pada gambar

actor kemudian ubah namanya menjadi Karyawan

14. Silahkan tambahkan actor petugas perpus, sehingga diagram Use Case Petugas

Perpus seperti gambar berikut

Java Bootcamp 2011 12

Generalization

15. Silahkan anda cari Generalization

16. Silahkan anda klik kiri item Generalization, kemudian diikuti klik kiri di Karyawan lalu

klik kiri di Petugas Perpus, sehingga gambarnya tampil seperti berikut

Use Case

17. Sekarang silahkan anda tambahkan 1 buah use case yaitu mencatat transaksi

peminjaman, dengan cara pilih item Use Case

18. Sekarang silahkan anda drag ke tempat kosong dan beri nama “mencatat transaksi

peminjaman”.

Java Bootcamp 2011 13

19. Silahkan anda klik actor Petugas Perpus, kemudian pilih Association seperti gambar

Association

20. Silahkan anda drag association kemudian anda lepas di use case “Mencatat

transaksi peminjaman”.

21. Tambahkan use case mencatat transaksi pengembalian

Java Bootcamp 2011 14

22. Tambahkan use case mengecek keterlambatan pengembalian

Include

23. Silahkan anda tambahkan relasi include, yaitu use case mencatat transaksi

pengembalian menginclude use case mengecek keterlambatan pengembalian,

dengan cara :

a. cari relasi include

b. klik kiri pada relasi tersebut

c. Klik kiri pada use case mencatat transaksi pengembalian

d. Klik kiri pada use case mengecek keterlambatan pengembalian

Java Bootcamp 2011 15

24. Buat agar tercipta relasi bahwa petugas perpus memiliki pekerjaan mencatat

pengembalian, yaitu relasi asosiasi

25. Buat use case mencatat denda pengembalian

Java Bootcamp 2011 16

Extend

26. Silahkan tambahkan relasi extend, yaitu use case mencatat denda mengextend use

case mencatat transaksi pengembalian, dengan cara

a. Cari relasi extend

b. Klik kiri relasi extend

c. Klik kiri pada use case mencatat pengembalian

d. Klik kiri pada use case mencatat denda pengembalian

27. Klik kanan pada use case mentatat transaksi pengembalian, Presentation Options

Show Extendsion, hilangkan tanda check

Java Bootcamp 2011 17

28. Maka hasilnya seperti gambar berikut

29. Selamat anda sudah membuat sebuah diagram sederhana. Silahkan anda cermati

lagi materi diatas, tanyakan pada dosen atau asisten apabila ada yang tidak

dimengerti.

Java Bootcamp 2011 18

Use Case Diagram Perpustakaan

Activity Diagram

Activity Diagram menangkap alur dari system, termasuk tindakan utama dan titik keputusan.

Diagram ini berguna untuk mendokumentasikan proses bisnis.

Symbol

Action

Menggambarkan 1 langkah dalam alur

system.

Start Node/Initial Node

Digunakan untuk menggambarkan dimana

aliran berawal

Activity Final Node

Akhir dari banyak aliran dalam diagram

aktivitas

Flow Final Node

Menunjukkan akhir dari aliran tunggal dalam

diagram aktivitas

Control Flow

Menunjukkan aliran kendali dari satu aksi ke

aksi yang berikutnya lain.

Decision Node Digunakan untuk merepresentasikan

keputusan dalam alur kendali. Ini juga bisa

digunakan untuk menggabungkan alur.

Java Bootcamp 2011 19

Sebuah keputusan akan memiliki kondisi

yang harus ada untuk menentukan jalan atau

alur yang akan diambil

Dibaca :

Pada sebuah kegiatan mencari buku ada

proses penentuan keputusan, apabila buku

tidak ketemu pulang, ketemu maka

meminjam

Fork Node/Join Node

Fork

Digunakan untuk memecah alur yang

terjadi secara bersamaan (pararel)

Join

Digunakan untuk menggabungkan

alur yang terjadi secara bersamaan

(pararel)

Dibaca :

Pada proses membuka daftar peminjama

permahasiswa maka akan terjadi proses

untuk menampilkan 2 data yaitu daftar

koleksi yang dipinjam kemudian detail atau

informasi yang dipinjam

Partition

Dapat digunakan untuk mengilustrasikan

aktivitas yang dilakukan oleh actor yang

berbeda

Java Bootcamp 2011 20

Menggambar Activity Diagram dengan Visual Paradigm

Silahkan anda buka project visual paradigm anda, kemudian tambahkan 1 buah

activity diagram dengan nama activity diagram proses peminjaman

Partition/Vertical Swinlane

Tambahkan 1 buah Partition/Vertical Swimlane, untuk sebelah kiri beri nama

Mahasiswa, Kanan beri nama Petugas Perpus

Java Bootcamp 2011 21

Initial Node

Tambahkan 1 buah Initial Node dan tambahkan pada Mahasiswa

Action

Tambahkan 2 buah Action yaitu “Menyerahkan buku yang hendak dipinjam ke

petugas” dan “menyerahkan ktm” agar diagram seperti berikut, gunakan control flow

untuk menggambarkan aliran

Tambahkan 1 buah Action “cek apakah sudah pinjam”, letakkan di Petugas Perpus,

kemudian tambahkan control flow dari menyerahkan Action “menyerahkan KTM” ke

Action “Cek apakah masih pinjam”

Java Bootcamp 2011 22

Java Bootcamp 2011 23

Decision Node

Tambahkan 1 buah decision node di petugas perpus, kemudian tambahkan juga 2

buah action yaitu Catat peminjaman dan Gagalkan peminjaman

Tambahkan 2 buah action di petugas perpus, “Mengembalikan KTM” dan

“Menyerahkan buku yang hendak dipinjam ke mhs”

Java Bootcamp 2011 24

Activity Final Node

Tambahkan 1 buah activity final node untuk menandakan bahwa proses peminjaman

sudah selesai

Java Bootcamp 2011 25

Untuk memperjelas, silahkan beri panah dari decision, yang ke kanan adalah masih

ada peminjaman, yang kekiri tidak ada peminjaman sebelumnya

Java Bootcamp 2011 26

Peminjaman oleh mahasiswa

Java Bootcamp 2011 27

Peminjaman oleh Karyawan

Pengembalian oleh karyawan

Java Bootcamp 2011 28

Pengembalian Oleh Mahasiswa

Java Bootcamp 2011 29

Class Diagram Class diagram mendeskripsikan struktur statis dari kelas – kelas dalam system dan mengilustrasikan

attribute, operations dan relationship antara satu kelas dengan kelas yang lain.

Class

Rancangan dari objek yang mendefinisikan attribute dan method umum pada semua objek dari jenis tertentu Digambarkan dengan 3 tingkat, yaitu (dari atas ke bawah)

Name Nama dari kelas, aturan penulisan huruf pertama dari semua kata adalah huruf besar, selain dari itu huruf kecil

Attributes Mengambarkan attribute yang dimiliki oleh kelas, aturan penamaan huruf pertama dari kata kedua dan kata selanjutnya adalah huruf besar, selain dari itu huruf kecil Format modifier name : type = value

Operations Menggambarkan method yang dimiliki oleh kelas, aturan penamaan sama dengan penamaan attribute. Format modifier name(parameter:type):return type

Asscociation

Relasi yang kuat, relasi ini mengindikasikan bahwa suatu kelas mereferensikan kelas yang lain, menggambarkan interaksi yang mungkin terjadi antara 1 kelas dengan kelas yang lain selama kelas tersebut tidak saling memiliki atau bukan bagian dari.

Directional Association (1 arah) Menggambarkan bahwa pesan terjadi hanya dari satu kelas sedangkan kelas yang lain pasif

Bidirectional Association (2 arah) Menggambarkan bahwa pesan dari kedua kelas yang saling berelasi.

Aggregation

Lebih spesifik dari assosiasi, mengindikasikan bahwa suatu kelas merupakan bagian dari kelas yang lain namun bersifat tidak wajib. Relasi ini juga menyatakan bahwa suatu kelas yang menjadi bagian dari kelas yang lain tidak akan dihapus meskipus kelas yang memilikinya dihapus.

Composition Lebih spesifik daripada aggregation, mengindikasikan hubungan yang saling bergantung, dimana suatu kelas merupakan

Java Bootcamp 2011 30

bagian dari kelas yang lain dan bersifat wajib. Relasi ini juga mengindikasikan bahwa suatu kelas yang menjadi bagian kelas yang lain akan terhapus ketika kelas yang memilikinya dihapus.

Generalization

Juga dikenal sebagai inheritance. Mengindikasikan bahwa sebuah kelas adalah child class atau sub class lebih spesifik terhadap parent class / super kelasnya. Semua sub class akan memiliki apa yang dimiliki super class tapi super class tidak memiliki apa yang hanya dimiliki oleh sub class.

Multiplicity

Mengindikasikan berapa banyak objek dari suatu kelas terelasi ke objek yang lain

Multiplicity Arti

* Banyak

0 Nol

1 Satu (bisa tidak ditulis)

0..* 0 sampai banyak

1..* 1 sampai banyak

0..1 0 atau 1

Modifier Digunakan untuk menandakan bagaimana kelas lain menggunakan attribute, constructor dan method dari suatu kelas.

Notasi Keterangan Kegunaan

+ Membuat visible terhadap kelas lain

Visibility public

# Membuat visible terhadap turunannya

Visibility protected

- Membuat visible hanya dalam 1 kelas

Visibility private

~ Membuat visible untuk semua kelas dalam satu paket

Visibility package

Java Bootcamp 2011 31

1. Silahkan anda tambahkan 1 buah class diagram dengan nama Class Diagram Perpustakaan

Class

2. Tambahkan 1 buah Class dan beri nama koleksi

3. Tambahkan lagi kelas dengan nama Buku, Majalah, CD, Referensi, TugasAkhir

Generalisasi

4. Atur agar Buku adalah turunan dari Koleksi, Majalah turunan dari Buku, Referensi turunan

dari Buku, Tugas Akhir turunan dari Buku

5. Atur agar CD adalah turunan dari Koleksi

Java Bootcamp 2011 32

Aggregasi

6. Tambahkan relasi Aggregasi antara Buku dan CD

Multiplicity

7. Atur agar Aggregasi antara Buku dan CD memiliki arti bahawa 1 Buku bisa memiliki 0 sampai

banyak CD tetapi boleh juga tidak memiliki CD, dengan cara klik kanan relasi antara Buku dan

CD, klik didekat Class CD

Java Bootcamp 2011 33

8. Pilih Multiplicity 0..*

9. Tambahkan 1 buah kelas dengan nama Penulis

Composisi

10. Tambahkan 1 buah relasi Composition antara TugasAkhir dengan Penulis dan Referensi

dengan Penulis.

Java Bootcamp 2011 34

11. Tambahkan 2 buah kelas yaitu Anggota, Transaksi, TransaksiPeminjaman

12. Buat agar kelas TransaksiPeminjaman adalah subclass dari kelas Transaksi

13. Buat relasi Association antara kelas TransaksiPeminjaman dan Anggota

14. Silahkan anda klik kanan didekat kelas TransaksiPeminjaman pada relasi antara

TransaksiPeminjaman dan Anggota

Asosiasi 1 Arah

15. Pilih Navigable False

Java Bootcamp 2011 35

16. Buat relasi Association antara TransaksiPeminjaman dan Koleksi

17. Buat agar relasi antara transaksi peminjaman dan koleksi menjadi asosiasi 1 arah

Java Bootcamp 2011 36

18. Atur agar 1 transaksi peminjaman terdiri dari 1...* Koleksi

Class Diagram Perpustakaan

Java Bootcamp 2011 37

Kode Program untuk Entity

Kelas Anggota

Kelas Karyawan

package entity;

import java.util.Date;

public class Anggota {

private int id;

private String nama;

private String tmpLahir;

private Date tglLahir;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getNama() {

return nama;

}

public void setNama(String nama) {

this.nama = nama;

}

public String getTmpLahir() {

return tmpLahir;

}

public void setTmpLahir(String tmpLahir) {

this.tmpLahir = tmpLahir;

}

public Date getTglLahir() {

return tglLahir;

}

public void setTglLahir(Date tglLahir) {

this.tglLahir = tglLahir;

}

}

package entity;

public class Karyawan extends Anggota {

private String nik;

public String getNik() {

return nik;

}

public void setNik(String nik) {

this.nik = nik;

}

}

Java Bootcamp 2011 38

Kelas Mahasiswa

Kelas PetugasPerpus

package entity;

public class Mahasiswa extends Anggota {

private String nim;

private int tahunMasuk;

public String getNim() {

return nim;

}

public void setNim(String nim) {

this.nim = nim;

}

public int getTahunMasuk() {

return tahunMasuk;

}

public void setTahunMasuk(int tahunMasuk) {

this.tahunMasuk = tahunMasuk;

}

}

package entity;

public class PetugasPerpus extends Karyawan {

private String user;

private String pwd;

public String getUser() {

return user;

}

public void setUser(String user) {

this.user = user;

}

public String getPwd() {

return pwd;

}

public void setPwd(String pwd) {

this.pwd = pwd;

}

}

Java Bootcamp 2011 39

Kelas Denda

Kelas ItemKoleksi

package entity;

public class Denda {

private int idDenda;

private double nominalDenda;

private int lamaTerlambat;

public int getIdDenda() {

return idDenda;

}

public void setIdDenda(int idDenda) {

this.idDenda = idDenda;

}

public double getNominalDenda() {

return nominalDenda;

}

public void setNominalDenda(double nominalDenda) {

this.nominalDenda = nominalDenda;

}

public int getLamaTerlambat() {

return lamaTerlambat;

}

public void setLamaTerlambat(int lamaTerlambat) {

this.lamaTerlambat = lamaTerlambat;

}

}

package entity;

public class ItemKoleksi {

private String kode;

private Koleksi koleksi;

public Koleksi getKoleksi() {

return koleksi;

}

public void setKoleksi(Koleksi koleksi) {

this.koleksi = koleksi;

}

public String getKode() {

return kode;

}

public void setKode(String kode) {

this.kode = kode;

}

}

Java Bootcamp 2011 40

Kelas Koleksi

Kelas ItemTransaksi

package entity;

public class Koleksi {

private int id;

private String judul;

private boolean cd;

private boolean referensi;

private ItemKoleksi[] itemKoleksi;

public ItemKoleksi[] getItemKoleksi() {

return itemKoleksi;

}

public void setItemKoleksi(ItemKoleksi[] itemKoleksi) {

this.itemKoleksi = itemKoleksi;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getJudul() {

return judul;

}

public void setJudul(String judul) {

this.judul = judul;

}

public boolean isCd() {

return cd;

}

public void setCd(boolean cd) {

this.cd = cd;

}

public boolean isReferensi() {

return referensi;

}

public void setReferensi(boolean referensi) {

this.referensi = referensi;

}

}

package entity;

public class ItemTransaksi {

private ItemKoleksi itemKoleksi;

private Transaksi transaksi;

public ItemKoleksi getItemKoleksi() {

return itemKoleksi;

}

public void setItemKoleksi(ItemKoleksi itemKoleksi) {

this.itemKoleksi = itemKoleksi;

}

public Transaksi getTransaksi() {

return transaksi;

}

public void setTransaksi(Transaksi transaksi) {

this.transaksi = transaksi;

}

}

Java Bootcamp 2011 41

Kelas Transaksi

Kelas TransaksiPeminjaman

package entity;

import java.util.Date;

public class Transaksi {

private int idTransaksi;

private Date tanggal;

private PetugasPerpus petugasPerpus;

private Anggota anggota;

private ItemKoleksi[] itemKoleksi;

public int getIdTransaksi() {

return idTransaksi;

}

public void setIdTransaksi(int idTransaksi) {

this.idTransaksi = idTransaksi;

}

public Date getTanggal() {

return tanggal;

}

public void setTanggal(Date tanggal) {

this.tanggal = tanggal;

}

public PetugasPerpus getPetugasPerpus() {

return petugasPerpus;

}

public void setPetugasPerpus(PetugasPerpus petugasPerpus) {

this.petugasPerpus = petugasPerpus;

}

public Anggota getAnggota() {

return anggota;

}

public void setAnggota(Anggota anggota) {

this.anggota = anggota;

}

public ItemKoleksi[] getItemKoleksi() {

return itemKoleksi;

}

public void setItemKoleksi(ItemKoleksi[] itemKoleksi) {

this.itemKoleksi = itemKoleksi;

}

}

package entity;

public class TransaksiPeminjaman extends Transaksi{

@Override

public void setItemKoleksi(ItemKoleksi[] itemKoleksi) {

// TODO Auto-generated method stub

super.setItemKoleksi(itemKoleksi);

}

}

Java Bootcamp 2011 42

Kelas TransaksiPengembalian

DAO

package entity;

public class TransaksiPengembalian extends Transaksi{

private Denda denda;

@Override

public void setItemKoleksi(ItemKoleksi[] itemKoleksi) {

// TODO Auto-generated method stub

super.setItemKoleksi(itemKoleksi);

}

public Denda getDenda() {

return denda;

}

public void setDenda(Denda denda) {

this.denda = denda;

}

}

Java Bootcamp 2011 43

Sequence Diagram Sequence diagram mendeskripsikan bagaimana entitas dalam system berinteraksi, termasuk pesan

yang digunakan saat interaksi. Semua pesan dideskripsikan dalam urutan dari eksekusi. Sequence

diagram berhubungan erat dengan Use Case diagram, dimana 1 Use Case akan menjadi 1 Sequence

Diagram.

1. LifeLine

Sequence Diagram dibuat dengan banyak lifeline. Setiap lifeline mendapatkan tempat

sendiri – sendiri. Beberapa jenis lifeline antara lain

Actor Lifeline

Actor merepresentasikan entitas yang berada di luar system. Mereka bisa berupa manusia, perangkat keras atau system lain.

General Lifeline

Merepresentasikan entitas tunggal dalam sequence diagram, digambarkan dengan kotak. Entitas ini memiliki nama, stereotype atau berupa instance (menggunakan instance:class)

Boundary Lifeline

Boundary biasanya berupa tepi dari system, seperti user interface, atau suatu alat yang berinteraksi dengan system lain.

Control Lifeline Control element mengatur aliran dari informasi untuk sebuah scenario. Perilaku dan perilaku bisnis umumnya diatur oleh objek ini

Java Bootcamp 2011 44

Entity Lifeline

Entity biasanya elemen yang bertanggung jawab menyimpan data atau informasi. Ini dapat berupa beans atau model object

2. Message

Create Digunakan untuk melakukan inisialisasi suatu objek

Synchronous

Relasi ini digunakan untuk memaggil operasi atau ethod yang dimiliki oleh suatu objek. Synchronous mengharuskan kita menyelesaikan 1 proses baru kemudian memanggil proses berikutnya.

Asynchronous

Relasi ini digunakan untuk memanggil operasi atau method yang dimiliki oleh suatu objek. Asynchronous memberikan kita fasilitas untuk menjalankan proses lain ketika proses sebelumnya belum selesai.

Self message Relasi ini menunjukkan bahwa suatu objek hendak menanggil dirinya sendiri

3. Fragment

Alt Memodelkan if then else blok

Opt Memodelkan pernyataan switch loop Loop fragment

Java Bootcamp 2011 45

Ada 2 macam sequence diagram yaitu

1. High Level Sequence Diagram

Disini kita memfokuskan pada usecase, dimana sebuah diagram hanya terdiri dari actor dan

object yang mewakili system. Diagram ini hanya menampilkan 2 atau 3 object yang secara

graphics memperjelas use case.

2. Application Level Sequence Diagram

Untuk level ini, kita mengganti actor dengan controller atau manager semacam device yang

terpasang pada system.

Latihan

1. Pada materi Use Case kita pernah membuat Use Case diagram seperti berikut

2. Buat 1 buah sequence diagram, beri nama “Mencatat Transaksi Peminjaman”

Actor

3. Kembali pada dokumen Mencatat Transaksi Peminjaman, silahkan anda tambahkan Actor

Petugas perpus dari Usecase Petugas Perpus dengan cara drag dari Petugas Perpus di Use

Case Diagram ke Sequence Diagram Mencatat transaksi peminjaman

Java Bootcamp 2011 46

Boundary Life Line

4. Pilih create Boundary Life Line

5. Maka akan tampak seperti gambar berikut

Ubah nama Lifeline menjadi Form Peminjaman, disini menunjukkan bahwa

Java Bootcamp 2011 47

Message

6. Berikan message dari petugas perpus ke LifeLine, kemudian berinama memasukkan nim

7. Tambahkan 1 buah boundary Lifeline dengan nama Tombol Proses

Kemudian tambahkan 1 buah message dari Petugas perpus ke Tombol Proses dan beri nama

menekan tombol proses

Java Bootcamp 2011 48

Relasi Class Diagram dan Squence Diagram

8. Pertama tama akan kita hubungkan Sequence diagram Mencatat transaksi peminjaman

dengan Class Diagram Perpustakaan. Klik kanan pada tempat kosong kemudian open

specification

9. Pilih References, kemudian pilih Add Diagram

Java Bootcamp 2011 49

10. Pada Diagrams pilih Class Diagram kemudian beri tanda check pada Class Diagram

Perpustakaan lalu OK

11.

, kemudian pilih OK

Java Bootcamp 2011 50

LifeLine

12. Kemudian silahkan anda tambahkan Class Transaksi Peminjaman dari Class Diagram ke

sequence diagram yang sedang anda buat, apabila diminta memilih lifeline atau class pilih

life line, dengan cara Drag Transaksi Peminjaman dari Class Diagram Perpustakaan ke

Squence Diagram Mencatat transaksi peminjaman

Apabila anda pilih Lifeline maka tampak seperti gambar berikut

Java Bootcamp 2011 51

Pada toolbox silahkan anda ganti message dengan call message

14. Buat call message dari tombol proses ke lifeline TransaksiPeminjaman

15. Klik kanan pada call message dengan kode 2.1, Select Operation Create Operation

Java Bootcamp 2011 52

Message dan Parameter

16. Maka akan muncul window berikut

Pada Name beri nama cekBolehPinjam, pada Return type isikan Boolean

Java Bootcamp 2011 53

17. Kemudian pilih tab Parameters, tambahkan parameter dengan menekan tombol add

Pada name isikan nim, type isikan string, direction pilih in kemudian OK

18. Maka akan terdapat 1 buah parameter baru, pilih OK

Java Bootcamp 2011 54

19. Maka akan tampak seperti berikut

Untuk menampilkan info lengkap dari method bolehPinjam maka klik kanan pada tempat

kosong kemudian ikuti gambar berikut

Java Bootcamp 2011 55

20. Coba anda perhatikan lagi gambar yang barusan dihasilkan

Return Message

21. Silahkan klik message dengan kode 2.1, kemudian pilih Create Return Message

Java Bootcamp 2011 56

22. Maka akan menghasilkan gambar berikut

23. Tambahkan message dari Tombol Proses ke Form Peminjaman, kemudian beri nama

“munculkan pesan proses peminjaman tidak bisa dilanjutkan”

Fragment

24. Klik kanan pada message yang anda buat di nomor 2.3, kemudian pilih Create Combinet

Fragment Alt

Java Bootcamp 2011 57

25. Maka hasilnya akan seperti gambar berikut ini

Operand didalam Fragment

26. Silahkan anda klik kanan pada fragment kemudian Operand Add Operand, lalu

tambahkan 1 buah message lagi dari tombol proses ke form peminjaman, beri nama

pesannya “aktifkan input peminjaman koleksi ” , pastikan bahwa pesan ini terletak di

operand yang bawah

Java Bootcamp 2011 58

27. Klik kanan pada Fragment kemudian Open Spesification, pilih Iteraction Operand

Pilih Operand, kemudian Open Specification Guard. Pada Constraint isikan

bolehPinjam=false.

Untuk Operand2 klik Open Specification Guard. Pada Constraint isikan bolehPinjam=true

Pada Operand, apabila hasil dari pemanggilan method bolehPinjam adalah false maka akan

memunculkan pesan di form peminjaman yang berisi “Peminjaman tidak bisa dilanjutkan”,

bila true maka akan mengaktifkan input peminjaman koleksi

Java Bootcamp 2011 59

28. Buat message dari Petugas Perpus ke Form Peminjaman, kemudian beri nama “input kode

koleksi”

29. Tambahkan 1 buah Boundary Lifeline dengan nama Tombol Simpan Peminjaman

Java Bootcamp 2011 60

30. Buat message dari Petugas Perpus ke Tombol Simpan Peminjaman dengan nama

31. Tambahkan 1 buah message dari Tombol Simpan Peminjaman ke LifeLine

TransaksiPeminjaman

Type message

32. Pastikan message 4.1 typenya Call, dengan cara Klik kanan 4.1 Type Call Call

Java Bootcamp 2011 61

33. Klik kanan pada pesan 4.1 kemudian Select Operation Create Operation

34. Berinama operation ini dengan nama simpanPeminjaman, return type boolean

35. Pada parameter buat 2 buah parameter yaitu kodeKoleksi dan npm, kedua parameter

bertipe string, untuk parameter kodeKoleksi multiplicitynya beri nila 1..* dan

typeModifiernya []

Java Bootcamp 2011 62

36. Hasil akhirnya seperti berikut

Java Bootcamp 2011 63

Sequence Login

Java Bootcamp 2011 64

Squence Peminjaman oleh Karyawan

Java Bootcamp 2011 65

Sequence Diagram Pengembalian oleh Karyawan

Java Bootcamp 2011 66

Sequence Diagram Peminjaman oleh Mahasiswa

Java Bootcamp 2011 67

Sequence Diagram Pengembalian oleh mahasiswa

Java Bootcamp 2011 68

Sequence Diagram Penambahan Data Mahasiswa

Java Bootcamp 2011 69

Sequence Diagram Load Data Mahasiswa

Java Bootcamp 2011 70

Diagram Database

Java Bootcamp 2011 71

Object Oriented Programming

Object Pada dunia perangkat lunak, sebuah obyek adalah sebuah komponen perangkat lunak yang stukturnya mirip dengan obyek pada dunia nyata. Disekeliling kita ada banyak contoh dari objek, seperti meja, pena, kursi, televisi dan masih banyak lagi. Yang dimiliki oleh objek antar lain ◦ state Pada implementasinya berupa field dari kelas ◦ behaviour Implementasinya menjadi method dari kelas

Class Kelas adalah keluarga dari Objek. Apabila beberapa objek memiliki struktur yang sama, perilaku dan arti secara umum, maka bisa dikelompokkan menjadi sebuah kelas. Yang kemudian dapat digunakan untuk menciptakan sebuah objek yang memiliki keseragaman. Setiap kelas memberikan skema yang umum untuk satu atau lebih objek, dimana kelas dapat menjadi template dari satu atau banyak objek.

package entity;

import java.util.Date;

public class Anggota {

private int id;

private String nama;

private String tmpLahir;

private Date tglLahir;

public Anggota(){

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getNama() {

return nama;

}

public void setNama(String nama) {

this.nama = nama;

}

public String getTmpLahir() {

return tmpLahir;

}

public void setTmpLahir(String tmpLahir) {

this.tmpLahir = tmpLahir;

}

public Date getTglLahir() {

return tglLahir;

}

public void setTglLahir(Date tglLahir) {

this.tglLahir = tglLahir;

}

}

Deklarasi paket

Import kelas Date

Nama kelas

Attribut atau Field

Constructor

Salah satu setter

dan getter

Java Bootcamp 2011 72

Enkapsulasi Ini adalah salah satu fitur penting di OOP. Enkapsulation atau enkapsulasi adalah suatu cara untuk

menyembunyikan detail dari suatu proses atau cara untuk memberikan akses tidak langsung ke data.

Dengan enkapsulasi, data yang ada dalam sistem lebih aman dan konsisten. Enkapsulasi juga akan

membuat detail proses yang rumit tersembunyi sehingga para pengguna suatu Class atau obyek

akan menemukan suatu kemudahan dimana. Kemudahan itu didapat karena mereka tidak perlu

menyetahui detail suatu proses untuk dapat melakukan suatu proses, cukup dengan nama Method

yang dibutuhkan.

Contohnya diketahui bahwa kelas Database memiliki 4 buah method yaitu

1. connect

2. dml

3. getGeneratedKey

4. getRS

Ketika anda hendak melakukan Query ke database misalnya untuk mengambil data Mahasiswa yang

menjadi anggota perpus maka cukup dengan perintah seperti dibahwa ini

Coba anda perhatikan kode program yang dilingkari, disana tampak bahwa untuk mengirimkan

query ke database kita cukup memanggil method dml dari objek database dengan parameter ss yang

@Override

public Mahasiswa[] findAll() {

// TODO Auto-generated method stub

ss="select a.idAnggota,nim,nama,tmplahir,tgllahir,tahunmasuk ";

ss+="from mahasiswa m ";

ss+="inner join anggota a on m.idanggota=a.idanggota";

if(database.dml(ss, true)){

rs=database.getRs();

List<Mahasiswa> lstMahasiswa=new ArrayList<Mahasiswa>();

try {

while(rs.next()){

Mahasiswa mahasiswa=new Mahasiswa();

mahasiswa.setId(rs.getInt("idAnggota"));

mahasiswa.setNim(rs.getString("nim"));

mahasiswa.setNama(rs.getString("nama"));

mahasiswa.setTmpLahir(rs.getString("tmplahir"));

mahasiswa.setTglLahir(rs.getDate("tgllahir"));

mahasiswa.setTahunMasuk(rs.getInt("tahunmasuk"));

lstMahasiswa.add(mahasiswa);

}

rs.close();

return lstMahasiswa.toArray(

new Mahasiswa[lstMahasiswa.size()]);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

return null;

}

}

return null;

}

Java Bootcamp 2011 73

berisi query dan true yang berarti method tersebut akan mengirimkan select, padahal isi dari

method tersebut cukup panjang yaitu

Disini dapat kita ambil kesimpulan bahwa untuk mengirimkan perintah query, kita tidak perlu

memahami betul bagaimana perintahnya dari Java akan tetapi kita cukup memanggil method dml

dan mengisi parameter yang dibutuhkan.

Inheritance Inheritance atau pewarisan, di dalam OOP digunakan untuk mengklasifikasikan suatu obyek ke

dalam suatu karakteristik dan fungsi yang umum. Maka ini akan membuat bekerja dengan obyek

lebih mudah dan menguntungkan, karena hal ini memungkinkan kombinasi karakteristik umum pada

obyek induk dengan obyek anak dengan cara mewariskan karakteristik pada obyek induk pada obyek

anak. Misalnya suatu kelas Mahasiswa dan Karyawan adalah dua buah obyek yang memiliki

karakteristik berbeda, namun kedua obyek tersebut dapat mewarisi obyek induk misalnya Anggota.

Karena Mahasiswa dan Karyawan adalah dua obyek yang berbeda tapi keduanya adalah Anggota

dari suatu perpustakaan. Dapat dilihat di kode program untuk kelas Mahasiswa Berikut :

public boolean dml(String query, boolean getRow, Object... objects) {

try {

prep = con.prepareStatement(query);

int i = 1;

for (Object obj : objects) {

prep.setObject(i, obj);

i++;

}

if (getRow) {

rs = prep.executeQuery();

} else {

prep.executeUpdate();

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

return false;

}

return true;

}

package entity;

public class Mahasiswa extends Anggota {

private String nim;

private int tahunMasuk;

public String getNim() {

return nim;

}

public void setNim(String nim) {

this.nim = nim;

}

public int getTahunMasuk() {

return tahunMasuk;

}

public void setTahunMasuk(int tahunMasuk) {

this.tahunMasuk = tahunMasuk;

}

}

Java Bootcamp 2011 74

Dan untuk kelas Karyawan

Pada dua kelas diatas, yaitu kelas Mahasiswa dan Karyawan terdapat kode program yang dilingkari

yaitu

1. Mahasiswa extends Anggota

2. Karyawan extends Anggota

Dapat dibaca bahwa kelas Mahasiswa adalah turunan dari kelas Anggota dan kelas Karyawan adalah

turunan dari kelas Anggota. Apabila anda perhatikan lebih teliti misalnya pada kelas Karyawan maka

tampak disana hanya terdapat 1 buah attribut atau field (dilingkari warna merah). Untuk attribut id,

nama, tempat lahir dan tanggal lahir cukup dideklarasikan saja di kelas Anggota, sehingga tidak

terjadi proses deklarasi variabel yang sama berulang – ulang, berikut ini kode program kelas Anggota

package entity;

public class Karyawan extends Anggota {

private String nik;

public String getNik() {

return nik;

}

public void setNik(String nik) {

this.nik = nik;

}

}

package entity;

import java.util.Date;

public class Anggota {

private int id;

private String nama;

private String tmpLahir;

private Date tglLahir;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

/*-----setter dan getter attribut yang lain---*/

}

Java Bootcamp 2011 75

Kode program yang dilingkari warna ungu menunjukkan attribut yang dimiliki kelas Anggota seperti

id, nama, tmpLahir dan tglLahir. Attribut itu juga yang nantinya akan digunakan oleh kelas

Mahasiswa, Karyawan dan PetugasPerpus. Inheritance apabila diterapkan di database tampak

seperti gambar berikut

(Digambar dengan MySQL Workbench 5.2.31 CE)

Pada gambar diatas tampak bahwa

1. tabel Anggota memiliki 4 buah kolom yaitu idAnggota, nama, tmpLahir dan tglLahir dimana

idAnggota sebagai PrimaryKey.

2. tabel Mahasiswa memiliki 3 buah kolom yaitu idAnggota, nim dan tahunMasuk dimana

idAnggota sebagai foreign key yang mereferensikan kolom idAnggota di tabel Anggota.

3. tabel Karyawan memiliki 2 buah kolom yaitu nik dan idAnggota dimana idAnggota sebagai

foreign key yang mereferensikan kolom idAnggota di tabel Anggota.

Di UML tampak seperti gambar berikut (tanpa menunjukkan method setter dan getter)

Dari pola diatas dapat diambil suatu keuntungan bahwa yang dicatat di dalam transaksi

pengembalian buku dan peminjaman buku cukup idAnggota, tidak perlu nim, nik karena mahasiswa,

karyawan, petugas perpus memiliki primary key yang sama yaitu idAnggota.

Java Bootcamp 2011 76

Berikut ini contoh sederhana untuk keuntungan yang bisa kita ambil dari menerapkan konsep

inheritance

Keluaran dari program diatas adalah

Prinsip diatas sesuai dengan aturan Substitusi Liskov yang berbunyi seperti berikut “Since a subclass

inherits the behaviour of its superclass, you can substitue objects whenever a superclass object is

expected” (dikutip dari Object Oriented Design and Pattern second edition, Bab The Concept of

Inheritace, bagian The Substitution Principle halaman 219 karangan Cay Horstmann).

package example;

import entity.Anggota;

import entity.Mahasiswa;

import entity.PetugasPerpus;

public class TestingInheritance {

/**

* @param args

*/

public static void main(String[] args) {

/* TODO deklarasi objek anggota dengan Type Anggota

* menggunakan Contructor Anggota()

*/

Anggota anggota=new Anggota();

anggota.setNama("Ratno Kustiawan");

anggota.setTmpLahir("Purworejo");

/* TODO decklarasi objek anggota2 dengan Type Anggota dengan

* menggunakan Contructor Mahasiswa()

*/

Anggota anggota2=new Mahasiswa();

anggota2.setNama("Afif Syaifullah");

anggota2.setTmpLahir("Indonesia");

/* TODO deklarasi objek anggota3 dengan Type Anggota dengan

* menggunakan Contructor PetugasPerpus()

*/

Anggota anggota3=new PetugasPerpus();

anggota3.setNama("Afif");

anggota3.setTmpLahir("Indonesia");

/* TODO deklarasi objek karyawan dengan Type Karyawan dengan

* menggunakan Contructor PetugasPerpus() */

Anggota karyawan=new PetugasPerpus();

karyawan.setNama("Kustiawan");

karyawan.setTmpLahir("Indonesia");

/* TODO munculkan data dari objek yang sudah dibuat */

System.out.println("anggota =>" + anggota.getNama() + " =>" + anggota.getTmpLahir());

System.out.println("anggota2 =>" + anggota2.getNama() + " =>" + anggota2.getTmpLahir());

System.out.println("anggota3 =>" + anggota3.getNama() + " =>" + anggota3.getTmpLahir());

System.out.println("karyawan =>" + karyawan.getNama() + " =>" + karyawan.getTmpLahir());

}

}

anggota =>Ratno Kustiawan =>Purworejo

anggota2 =>Afif Syaifullah =>Indonesia

anggota3 =>Afif =>Indonesia

karyawan =>Kustiawan =>Indonesia

Java Bootcamp 2011 77

Interface Merupakan sebuah keyword untuk mendefinisikan sekumpulan method dan konstanta. Interface bisa digunakan apabila sudah dilakukan implementasi pada sebuah kelas non abstract. Interface dapat digunakan untuk

1. Mewakili suatu tingkah laku yang bisa dimiliki oleh suatu kelas tanpa memaksakan relasi antar kelas tersebut.

2. Menangani event atau action yang terjadi pada suatu kelas 3. Memudahkan penanganan objek dalam parameter 4. Multiple inheritace

Polymorphism Polimorphisme adalah kemampuan dari dua buah obyek untuk merespon suatu pesan yang

sama dengan cara yang tidak sama.Dalam OOP biasanya bisa diimplementasikan kedalam

dua proses yang disebut overloading dan overriding.

1. Overloading

Overloading adalah suatu kondisi ketika ditemukan beberapa Method yang memiliki nama

sama pada sebuah Class namun memiliki jumlah masukan dan tipe data masukan yang

berbeda – beda. Sehingga Method – Method itu dikenali sebagai Method yang berbeda

meskipun namanya sama.

Misalkan sebuah Class Anggota memiliki Method untuk mencari buku, namun satu Method

memiliki masukan pengarang buku dan satu Method tidak memiliki masukan apapun.

2. Overriding

Biasanya ditemukan pada sebuah Class yang merupakan sebuah Class turunan. Class turunan ini

memiliki satu atau lebih Method yang sama dengan Class induknya. Method di Class turunan inilah

yang melakukan overriding Method terhadap Method di Class induk. Misalkan diketahui Class

AnakAnak yang merupakan turunan Class Anggota, tetapi Class AnakAnak memiliki Method cariBuku

yang juga dimiliki oleh Class Induknya, maka digunakan overriding.

Java Bootcamp 2011 78

Visual Programming

Swing

Form Login

Form login akan digunakan oleh petugas perpus untuk masuk kedalam aplikasi perpustakaan,

susunan layout pada form login ini seperti langkah berikut

1. Atur agar layout dari Jframe adalah Border Layout Sehingga akan terbagi menjadi 5 buah

region seperti gambar berikut yaitu North,South,West dan East

2. Tambahkan 3 buah panel pada 3 posisi yaitu pada posisi North (berinama pnTop), South

(berinama pnBottom) dan Center (berinama pnCenter)

3. Atur agar layout dari pnTop dan pnBottom menjadi FlowLayout

4. Atur agar layout dari pnCenter menjadi GridBagLayout

5. Kode program untuk menghasilkan FrmLogin adalah sebagai berikut

Java Bootcamp 2011 79

package view;

import java.awt.BorderLayout;

public class FrmLogin extends JFrame implements ActionListener {

private JButton btnLogin;

private JButton btnTutup;

private JPasswordField txtPassword;

private JTextField txtUser;

private ControllerLogin cLogin;

/**

* Launch the application.

*/

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

public void run() {

try {

FrmLogin frame = new FrmLogin();

frame.setVisible(true);

} catch (Exception e) {

e.printStackTrace();

}

}

});

}

@Override

public void actionPerformed(ActionEvent arg0) {

// TODO Auto-generated method stub

if(arg0.getActionCommand().equals("Login")){

cLogin.login(

txtUser.getText(),String.valueOf(txtPassword.getPassword()));

}

else{

System.exit(0);

}

}

/**

* Create the frame.

*/

public FrmLogin() {

setLocationByPlatform(true);

setResizable(false);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setBounds(100, 100, 259, 188);

getContentPane().setLayout(new BorderLayout(0, 0));

Java Bootcamp 2011 80

JPanel pnTop = new JPanel();

getContentPane().add(pnTop, BorderLayout.NORTH);

pnTop.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));

JLabel lblLoginAplikasiPerpustakaan = new JLabel(

"Login Aplikasi Perpustakaan");

pnTop.add(lblLoginAplikasiPerpustakaan);

JPanel pnBottom = new JPanel();

getContentPane().add(pnBottom, BorderLayout.SOUTH);

pnBottom.setLayout(new FlowLayout(FlowLayout.RIGHT, 5, 5));

btnLogin = new JButton("Login");

btnLogin.addActionListener(this);

pnBottom.add(btnLogin);

btnTutup = new JButton("Tutup");

btnTutup.addActionListener(this);

pnBottom.add(btnTutup);

JPanel pnCenter = new JPanel();

getContentPane().add(pnCenter, BorderLayout.CENTER);

pnCenter.setLayout(new GridBagLayout());

JLabel lblUser = new JLabel("User");

GridBagConstraints gbcLblUser = new GridBagConstraints();

gbcLblUser.insets = new Insets(0, 0, 5, 5);

gbcLblUser.gridx = 0;

gbcLblUser.gridy = 0;

pnCenter.add(lblUser, gbcLblUser);

txtUser = new JTextField();

txtUser.setPreferredSize(new Dimension(120, 20));

GridBagConstraints gbcTxtUser = new GridBagConstraints();

gbcTxtUser.insets = new Insets(0, 0, 5, 5);

gbcTxtUser.fill = GridBagConstraints.HORIZONTAL;

gbcTxtUser.gridx = 1;

gbcTxtUser.gridy = 0;

pnCenter.add(txtUser, gbcTxtUser);

JLabel lblPassword = new JLabel("Password");

GridBagConstraints gbcLblPassword = new GridBagConstraints();

gbcLblPassword.insets = new Insets(0, 0, 5, 5);

gbcLblPassword.gridx = 0;

gbcLblPassword.gridy = 1;

pnCenter.add(lblPassword, gbcLblPassword);

txtPassword = new JPasswordField();

GridBagConstraints gbcTxtPassword = new GridBagConstraints();

gbcTxtPassword.insets = new Insets(0, 0, 5, 5);

gbcTxtPassword.fill = GridBagConstraints.HORIZONTAL;

gbcTxtPassword.gridx = 1;

gbcTxtPassword.gridy = 1;

pnCenter.add(txtPassword, gbcTxtPassword);

setLocationRelativeTo(null);

cLogin=new ControllerLogin(this);

}

Java Bootcamp 2011 81

Form Main

1. Atur agar Layout dari FrmMain adalah BorderLayout

2. Tambahkan menubar di North

3. Tambahkan panel sebagai status bar di Sourt dengan nama pnStatusBar

4. Tambahkan desktopPane di Center untuk meletakkan JinternalFrame

5. Kode program untuk FrmMain adalah sebagai berikut

package view;

import java.awt.BorderLayout;

import java.awt.EventQueue;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JMenuBar;

import javax.swing.JLabel;

import java.awt.FlowLayout;

import javax.swing.JDesktopPane;

import javax.swing.JMenu;

import java.awt.Color;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JMenuItem;

import entity.PetugasPerpus;

public class FrmMain extends JFrame implements ActionListener{

private JMenuBar menuBar;

private JPanel pnStatusBar;

private JLabel lblUser;

private JLabel lblNama;

private JDesktopPane desktopPane;

Java Bootcamp 2011 82

private JMenu mnMaster;

private JMenu mnTransaksi;

private JMenu mnLaporan;

private JMenu mnKeluar;

private JMenuItem mnuItemMahasiswa;

private JMenuItem mnuItemKaryawan;

private JMenuItem mnuItemBuku;

private JMenuItem mnuItemCD;

private JMenuItem mnuItemTransPeminjaman;

private JMenuItem mnuItemTransPengembalian;

private JMenuItem mnuItemLaporanAnggota;

private JMenuItem mnuItemLaporanDenda;

private JMenuItem mnuItemLaporanTransaksi;

private JMenuItem mnuItemLaporanKoleksi;

private JMenuItem mnuItemLogout;

private JMenuItem mnuItemKeluar;

private static PetugasPerpus petugasAktif;

public void setPetugasAktif(PetugasPerpus petugasPerpus){

FrmMain.petugasAktif=petugasPerpus;

lblUser.setText(petugasAktif.getUser());

lblNama.setText(petugasAktif.getNama());

}

public static PetugasPerpus getPetugasAktif(){

return FrmMain.petugasAktif;

}

/*

* (non-Javadoc)

* @see java.awt.event.ActionListener

* #actionPerformed(java.awt.event.ActionEvent)

*/

private FrmDataMahasiswa frmDataMahasiswa;

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

if(e.getSource().equals(mnuItemKeluar)){

System.exit(0);

}

else if(e.getSource().equals(mnuItemMahasiswa)){

if(frmDataMahasiswa==null){

frmDataMahasiswa=new FrmDataMahasiswa();

desktopPane.add(frmDataMahasiswa);

desktopPane.

getDesktopManager().

maximizeFrame(frmDataMahasiswa);

}

frmDataMahasiswa.setVisible(true);

}

}

Java Bootcamp 2011 83

/**

* Create the frame.

*/

public FrmMain() {

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setBounds(100, 100, 832, 513);

menuBar = new JMenuBar();

mnMaster = new JMenu("Master");

menuBar.add(mnMaster);

mnuItemMahasiswa = new JMenuItem("Mahasiswa");

mnuItemMahasiswa.addActionListener(this);

mnMaster.add(mnuItemMahasiswa);

mnuItemKaryawan = new JMenuItem("Karyawan");

mnuItemKaryawan.addActionListener(this);

mnMaster.add(mnuItemKaryawan);

mnuItemBuku = new JMenuItem("Buku");

mnuItemBuku.addActionListener(this);

mnMaster.add(mnuItemBuku);

mnuItemCD = new JMenuItem("CD");

mnuItemCD.addActionListener(this);

mnMaster.add(mnuItemCD);

mnTransaksi = new JMenu("Transaksi");

mnuItemTransPeminjaman = new JMenuItem("Peminjaman");

mnTransaksi.add(mnuItemTransPeminjaman);

mnuItemTransPengembalian = new JMenuItem("Pengembalian");

mnTransaksi.add(mnuItemTransPengembalian);

menuBar.add(mnTransaksi);

mnLaporan = new JMenu("Laporan");

mnuItemLaporanAnggota = new JMenuItem("Laporan Anggota");

mnLaporan.add(mnuItemLaporanAnggota);

mnuItemLaporanKoleksi = new JMenuItem("Koleksi");

mnLaporan.add(mnuItemLaporanKoleksi);

mnuItemLaporanDenda = new JMenuItem("Laporan Denda");

mnLaporan.add(mnuItemLaporanDenda);

mnuItemLaporanTransaksi = new JMenuItem("Transaksi");

mnLaporan.add(mnuItemLaporanTransaksi);

menuBar.add(mnLaporan);

mnKeluar = new JMenu("Keluar");

mnuItemLogout = new JMenuItem("Logout");

mnKeluar.add(mnuItemLogout);

mnuItemKeluar = new JMenuItem("Keluar");

mnuItemKeluar.addActionListener(this);

mnKeluar.add(mnuItemKeluar);

menuBar.add(mnKeluar);

setJMenuBar(menuBar);

getContentPane().setLayout(new BorderLayout(0, 0));

pnStatusBar = new JPanel();

pnStatusBar.setLayout(new FlowLayout(

FlowLayout.RIGHT, 5, 5));

lblUser = new JLabel("New label");

pnStatusBar.add(lblUser);

Java Bootcamp 2011 84

Form Data Mahasiswa

1. Atur agar JinternalFrame layoutnya menjadi BorderLayout

2. Tambahkan 1 buah panel dan letakkan di posisi North, beri nama pnTop

3. Tambahkan 1 buah panel dan letakkan di posisi South, beri nama pnBottom

4. Tambahkan 1 buah ScrollPane dan letakkan di posisi Center, beri nama scollPane,

tambahkan tabel ke scrollpane tersebut

5. Atur agar alignment dari pnTop adalah Left dan pnBottom adalah Right

6. Tambahkan 1 buah label dan 1 buah textbox pada pnTop, untuk label ubah textnya menjadi

Cari, untuk textbox ubah namanya menjadi txtCari

7. Tambahkan 4 buah Button dan ubah textnya menjadi Tutup, Hapus, Ubah dan Tambah,

untuk namanya tambahkan prefix btn sehingga menjadi btnTutup, btnHapus, btnUbah dan

btnTambah

8. Kode program lengkapnya adalah berikut

lblNama = new JLabel("New label");

pnStatusBar.add(lblNama);

getContentPane().add(pnStatusBar, BorderLayout.SOUTH);

desktopPane = new JDesktopPane();

desktopPane.setBackground(Color.GRAY);

getContentPane().add(desktopPane, BorderLayout.CENTER);

setMinimumSize(new java.awt.Dimension(844, 599));

}

Java Bootcamp 2011 85

package view;

import java.awt.BorderLayout;

import java.awt.EventQueue;

import javax.swing.JPanel;

import java.awt.FlowLayout;

import javax.swing.JButton;

import javax.swing.JInternalFrame;

import javax.swing.JLabel;

import javax.swing.JTextField;

import javax.swing.JTable;

import javax.swing.RowFilter;

import javax.swing.event.DocumentEvent;

import javax.swing.event.DocumentListener;

import javax.swing.table.DefaultTableModel;

import javax.swing.table.TableRowSorter;

import javax.swing.JScrollPane;

import controller.ControllerMahasiswa;

import javax.swing.JFrame;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

public class FrmDataMahasiswa extends JInternalFrame

implements ActionListener,DocumentListener {

private JTextField txtCari;

private JTable table;

private ControllerMahasiswa cMhs;

private TableRowSorter<DefaultTableModel> sorter;

public JTable getTable() {

return table;

}

/**

* Create the frame.

*/

public FrmDataMahasiswa() {

setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

setMaximizable(true);

setClosable(true);

setIconifiable(true);

setTitle("Data Mahasiswa");

setBounds(100, 100, 452, 300);

JPanel pnBottom = new JPanel();

getContentPane().add(pnBottom, BorderLayout.SOUTH);

pnBottom.setLayout(new FlowLayout(FlowLayout.RIGHT, 5, 5));

JButton btnTambah = new JButton("Tambah");

btnTambah.addActionListener(this);

pnBottom.add(btnTambah);

JButton btnUbah = new JButton("Ubah");

btnUbah.addActionListener(this);

pnBottom.add(btnUbah);

JButton btnHapus = new JButton("Hapus");

pnBottom.add(btnHapus);

Java Bootcamp 2011 86

JButton btnTutup = new JButton("Tutup");

btnTutup.addActionListener(this);

pnBottom.add(btnTutup);

JPanel pnTop = new JPanel();

pnTop.setLayout(new FlowLayout(FlowLayout.LEFT,5,5));

getContentPane().add(pnTop, BorderLayout.NORTH);

JLabel lblCari = new JLabel("Cari");

pnTop.add(lblCari);

txtCari = new JTextField();

pnTop.add(txtCari);

txtCari.setColumns(20);

txtCari.getDocument().addDocumentListener(this);

JScrollPane scrollPane = new JScrollPane();

getContentPane().add(scrollPane, BorderLayout.CENTER);

table = new JTable();

table.setModel(new DefaultTableModel(

new Object[][] {

},

new String[] {

"NPM", "Nama", "Tempat Lahir",

"Tanggal Lahir", "Tahun Masuk"

}

));

scrollPane.setViewportView(table);

sorter = new TableRowSorter<DefaultTableModel>(

(DefaultTableModel)table.getModel());

table.setRowSorter(sorter);

cMhs=new ControllerMahasiswa(this);

cMhs.findAll();

}

public void actionPerformed(ActionEvent e) {

if(e.getActionCommand().equals("Tutup")){

setVisible(false);

}

else if(e.getActionCommand().equals("Tambah")){

DialogInputMahasiswa inputMhs=new

DialogInputMahasiswa(cMhs,true);

inputMhs.setVisible(true);

}else if(e.getActionCommand().equals("Ubah")){

DialogInputMahasiswa inputMhs=new

DialogInputMahasiswa(cMhs,false);

int row=table.getSelectedRow();

if(row==-1)

return;

inputMhs.setData(

table.getValueAt(row, 0).toString(),

table.getValueAt(row, 1).toString(),

table.getValueAt(row, 2).toString(),

Java Bootcamp 2011 87

table.getValueAt(row, 3).toString(),

table.getValueAt(row, 4).toString());

inputMhs.setVisible(true);

}else if(e.getActionCommand().equals("Hapus")){

int row=table.getSelectedRow();

if(row==-1)

return;

cMhs.deleteMahasiswa(table.getValueAt(row, 0).toString());

}

}

@Override

public void changedUpdate(DocumentEvent arg0) {

// TODO Auto-generated method stub

newFilter() ;

}

@Override

public void insertUpdate(DocumentEvent arg0) {

// TODO Auto-generated method stub

newFilter() ;

}

@Override

public void removeUpdate(DocumentEvent arg0) {

// TODO Auto-generated method stub

newFilter() ;

}

private void newFilter() {

RowFilter<DefaultTableModel, Object> rf = null;

//If current expression doesn't parse, don't update.

try {

rf = RowFilter.regexFilter(txtCari.getText(), 0, 1);

} catch (java.util.regex.PatternSyntaxException e) {

return;

}

sorter.setRowFilter(rf);

}

}

Java Bootcamp 2011 88

Form Input Mahasiswa

1. Atur agar JDialog menggunakan layout BorderLayout

2. Tambahkan 2 buah panel, 1 panel di posisi South dan beri nama pnBottom

3. 1 panel lagi di posisi Center dan berinama pbContent

4. Atur agar pnBottom menggunakan FlowLayout yang alignmentnya di set Right

5. Atur agar pnContent menggunakan GridBagLayout

6. Tambahkan 2 buah button pada pnBottom, atur agar seperti gambar

7. Tambahkan komponen label dan textfield sesuai gambar

8. Berikut ini kode program lengkapnya

package view;

import java.awt.BorderLayout;

import javax.swing.JDialog;

import javax.swing.JFrame;

import javax.swing.JPanel;

import java.awt.FlowLayout;

import javax.swing.JButton;

import java.awt.GridBagLayout;

import javax.swing.JLabel;

import java.awt.GridBagConstraints;

import java.awt.Insets;

import javax.swing.JTextField;

import javax.swing.JFormattedTextField;

import controller.ControllerMahasiswa;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

import java.text.ParseException;

import java.text.SimpleDateFormat;

public class DialogInputMahasiswa extends JDialog

implements ActionListener {

Java Bootcamp 2011 89

private JTextField txtNim;

private JTextField txtNama;

private JTextField txtTempatLahir;

private JFormattedTextField txtFormatTglLahir;

private JFormattedTextField txtFormatTahunMasuk;

private ControllerMahasiswa cMhs;

public DialogInputMahasiswa(ControllerMahasiswa cMhs,

boolean insert) {

this.cMhs=cMhs;

setResizable(false);

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

setBounds(100, 100, 450, 300);

JPanel pnBottom = new JPanel();

getContentPane().add(pnBottom, BorderLayout.SOUTH);

pnBottom.setLayout(new FlowLayout(FlowLayout.RIGHT, 5, 5));

JButton btnSimpan = new JButton("Simpan");

btnSimpan.addActionListener(this);

pnBottom.add(btnSimpan);

JButton btnBatal = new JButton("Batal");

btnBatal.addActionListener(this);

pnBottom.add(btnBatal);

JPanel pnContent = new JPanel();

getContentPane().add(pnContent, BorderLayout.CENTER);

GridBagLayout gbl_pnContent = new GridBagLayout();

pnContent.setLayout(gbl_pnContent);

JLabel lblNim = new JLabel("NIM");

GridBagConstraints gbc = new GridBagConstraints();

gbc.anchor = GridBagConstraints.EAST;

gbc.insets = new Insets(0, 0, 5, 5);

gbc.gridx = 0;

gbc.gridy = 0;

pnContent.add(lblNim, gbc);

txtNim = new JTextField();

txtNim.setEnabled(insert);

GridBagConstraints gbc_5 = new GridBagConstraints();

gbc_5.insets = new Insets(0, 0, 5, 0);

gbc_5.fill = GridBagConstraints.HORIZONTAL;

gbc_5.gridx = 1;

gbc_5.gridy = 0;

pnContent.add(txtNim, gbc_5);

txtNim.setColumns(20);

JLabel lblNama = new JLabel("Nama");

GridBagConstraints gbc_1 = new GridBagConstraints();

gbc_1.anchor = GridBagConstraints.EAST;

gbc_1.insets = new Insets(0, 0, 5, 5);

gbc_1.gridx = 0;

gbc_1.gridy = 1;

pnContent.add(lblNama, gbc_1);

Java Bootcamp 2011 90

txtNama = new JTextField();

GridBagConstraints gbc_6 = new GridBagConstraints();

gbc_6.insets = new Insets(0, 0, 5, 0);

gbc_6.fill = GridBagConstraints.HORIZONTAL;

gbc_6.gridx = 1;

gbc_6.gridy = 1;

pnContent.add(txtNama, gbc_6);

txtNama.setColumns(10);

JLabel lblTempatLahir = new JLabel("Tempat Lahir");

GridBagConstraints gbc_2 = new GridBagConstraints();

gbc_2.anchor = GridBagConstraints.EAST;

gbc_2.insets = new Insets(0, 0, 5, 5);

gbc_2.gridx = 0;

gbc_2.gridy = 2;

pnContent.add(lblTempatLahir, gbc_2);

txtTempatLahir = new JTextField();

GridBagConstraints gbc_7 = new GridBagConstraints();

gbc_7.insets = new Insets(0, 0, 5, 0);

gbc_7.fill = GridBagConstraints.HORIZONTAL;

gbc_7.gridx = 1;

gbc_7.gridy = 2;

pnContent.add(txtTempatLahir, gbc_7);

txtTempatLahir.setColumns(10);

JLabel lblTanggalLahir = new JLabel("Tanggal Lahir");

GridBagConstraints gbc_3 = new GridBagConstraints();

gbc_3.anchor = GridBagConstraints.EAST;

gbc_3.insets = new Insets(0, 0, 5, 5);

gbc_3.gridx = 0;

gbc_3.gridy = 3;

pnContent.add(lblTanggalLahir, gbc_3);

txtFormatTglLahir = new JFormattedTextField();

GridBagConstraints gbc_8 = new GridBagConstraints();

gbc_8.insets = new Insets(0, 0, 5, 0);

gbc_8.fill = GridBagConstraints.HORIZONTAL;

gbc_8.gridx = 1;

gbc_8.gridy = 3;

pnContent.add(txtFormatTglLahir, gbc_8);

JLabel lblTahunMasuk = new JLabel("Tahun Masuk");

GridBagConstraints gbc_4 = new GridBagConstraints();

gbc_4.anchor = GridBagConstraints.EAST;

gbc_4.insets = new Insets(0, 0, 0, 5);

gbc_4.gridx = 0;

gbc_4.gridy = 4;

pnContent.add(lblTahunMasuk, gbc_4);

txtFormatTahunMasuk = new JFormattedTextField();

GridBagConstraints gbc_9 = new GridBagConstraints();

gbc_9.fill = GridBagConstraints.HORIZONTAL;

gbc_9.gridx = 1;

gbc_9.gridy = 4;

pnContent.add(txtFormatTahunMasuk, gbc_9);

setLocationRelativeTo(null);

}

Java Bootcamp 2011 91

public void clear(){

txtNim.setText("");

txtNama.setText("");

txtTempatLahir.setText("");

txtFormatTglLahir.setText("");

txtFormatTahunMasuk.setText("");

}

public void setData(String nim,String nama,String

tempatLahir,String tglLahir,String tahunMasuk){

txtNim.setText(nim);

txtNama.setText(nama);

txtTempatLahir.setText(tempatLahir);

txtFormatTglLahir.setText(tglLahir);

txtFormatTahunMasuk.setText(tahunMasuk);

}

public void actionPerformed(ActionEvent e) {

if(e.getActionCommand().equals("Batal")){

dispose();

}

else{

try {

cMhs.setDialogInputMahasiswa(this);

if(txtNim.isEnabled()){

cMhs.inputMahasiswa(

txtNim.getText(), txtNama.getText(),

txtTempatLahir.getText(),

new SimpleDateFormat("dd/MM/yyyy")

.parse(txtFormatTglLahir.getText()),

txtFormatTahunMasuk.getText());

}

else{

cMhs.updateMahasiswa(txtNim.getText(),

txtNama.getText(), txtTempatLahir.getText(),

new SimpleDateFormat("dd/MM/yyyy")

.parse(txtFormatTglLahir.getText()),

txtFormatTahunMasuk.getText());

}

} catch (ParseException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

}

}

Java Bootcamp 2011 92

Form Transaksi Peminjaman

1. Atur agar layout dari JinternalFrame ini menjadi BorderLayout

2. Tambahkan 1 buah panel dan Letakkan di South, kemudian atur agar alignmentnya menjadi

Right

3. Tambahkan 3 buah button di panel ini dan atur seperti gambar

4. Tambahkan 1buah TabPane, letakkan di Center kemudian isi dengan 2 buah panel, yaitu

pnMahasiswa dan pnKaryawan

5. Sekarang kita akan fokus ke pnMahasiswa

6. Atur agar pnMahasiswa ini menggunakan BorderLayout

7. Tambahkan 1 buah ScrollPane dan letakkan di Center, tambahkan tabel ke scroll panel

tersebut.

8. Tambahkan 1 buah panel dengan nama pnInputNim dan letakkan di North, atur agar

layoutnya menjadi GridBagLayout, tambahkan komponen ke panel ini dan atur agar seperti

gambar

9. Kode program lengkapnya seperti gambar berikut

Java Bootcamp 2011 93

package view;

import java.awt.BorderLayout;

import java.awt.EventQueue;

import javax.swing.JFrame;

import javax.swing.JPanel;

import java.awt.FlowLayout;

import javax.swing.JButton;

import javax.swing.JInternalFrame;

import javax.swing.JTabbedPane;

import javax.swing.JLabel;

import javax.swing.JTextField;

import java.awt.GridBagLayout;

import java.awt.GridBagConstraints;

import java.awt.Insets;

import javax.swing.JScrollPane;

import javax.swing.JTable;

import javax.swing.table.DefaultTableModel;

public class FrmTransaksiPeminjaman extends JInternalFrame {

private JTextField txtNama;

private JTextField txtNIM;

private JTextField txtKodeKoleksiMhs;

private JTable tbPeminjamanMahasiswa;

private JTextField txtNik;

private JTextField txtNamaKaryawan;

private JTextField txtKodeKoleksiKaryawan;

private JTable tbPeminjamanKaryawan;

public JTextField getTxtNama() {

return txtNama;

}

public JTextField getTxtNIM() {

return txtNIM;

}

public JTextField getTxtNik() {

return txtNik;

}

public JTextField getTxtNamaKaryawan() {

return txtNamaKaryawan;

}

public JTextField getTxtKodeKoleksiMhs() {

return txtKodeKoleksiMhs;

}

public JTextField getTxtKodeKoleksiKaryawan() {

return txtKodeKoleksiKaryawan;

}

public JTable getTbPeminjamanMahasiswa() {

return tbPeminjamanMahasiswa;

}

Java Bootcamp 2011 94

public JTable getTbPeminjamanKaryawan() {

return tbPeminjamanKaryawan;

}

public FrmTransaksiPeminjaman() {

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setBounds(100, 100, 582, 452);

getContentPane().setLayout(new BorderLayout(0, 0));

JPanel panel = new JPanel();

getContentPane().add(panel, BorderLayout.SOUTH);

panel.setLayout(new FlowLayout(FlowLayout.RIGHT, 5, 5));

JButton btnSimpan = new JButton("Simpan");

panel.add(btnSimpan);

JButton btnBatal = new JButton("Batal");

panel.add(btnBatal);

JButton btnTutup = new JButton("Tutup");

panel.add(btnTutup);

JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);

getContentPane().add(tabbedPane, BorderLayout.CENTER);

JPanel pnMahasiswa = new JPanel();

tabbedPane.addTab("Mahasiswa", null, pnMahasiswa, null);

pnMahasiswa.setLayout(new BorderLayout(0, 0));

JPanel pnInputNIM = new JPanel();

pnMahasiswa.add(pnInputNIM, BorderLayout.NORTH);

GridBagLayout gbl_pnInputNIM = new GridBagLayout();

pnInputNIM.setLayout(gbl_pnInputNIM);

JLabel lblNim = new JLabel("NIM");

GridBagConstraints gbc = new GridBagConstraints();

gbc.anchor = GridBagConstraints.WEST;

gbc.insets = new Insets(0, 0, 5, 5);

gbc.gridx = 0;

gbc.gridy = 0;

pnInputNIM.add(lblNim, gbc);

txtNIM = new JTextField();

GridBagConstraints gbc_1 = new GridBagConstraints();

gbc_1.insets = new Insets(0, 0, 5, 0);

gbc_1.fill = GridBagConstraints.HORIZONTAL;

gbc_1.gridx = 1;

gbc_1.gridy = 0;

pnInputNIM.add(txtNIM, gbc_1);

txtNIM.setColumns(10);

JLabel lblNama = new JLabel("Nama");

GridBagConstraints gbc_2 = new GridBagConstraints();

gbc_2.anchor = GridBagConstraints.WEST;

gbc_2.insets = new Insets(0, 0, 5, 5);

gbc_2.gridx = 0;

gbc_2.gridy = 1;

pnInputNIM.add(lblNama, gbc_2);

Java Bootcamp 2011 95

txtNama = new JTextField();

GridBagConstraints gbc_3 = new GridBagConstraints();

gbc_3.insets = new Insets(0, 0, 5, 0);

gbc_3.fill = GridBagConstraints.HORIZONTAL;

gbc_3.gridx = 1;

gbc_3.gridy = 1;

pnInputNIM.add(txtNama, gbc_3);

txtNama.setColumns(30);

JLabel lblInformasi = new JLabel("Informasi");

GridBagConstraints gbc_4 = new GridBagConstraints();

gbc_4.anchor = GridBagConstraints.WEST;

gbc_4.insets = new Insets(0, 0, 5, 5);

gbc_4.gridx = 0;

gbc_4.gridy = 2;

pnInputNIM.add(lblInformasi, gbc_4);

JLabel lblMessage = new JLabel("");

GridBagConstraints gbc_5 = new GridBagConstraints();

gbc_5.insets = new Insets(0, 0, 5, 0);

gbc_5.gridx = 1;

gbc_5.gridy = 2;

pnInputNIM.add(lblMessage, gbc_5);

JLabel lblKodeKoleksi = new JLabel("Kode Item Koleksi");

GridBagConstraints gbc_6 = new GridBagConstraints();

gbc_6.anchor = GridBagConstraints.EAST;

gbc_6.insets = new Insets(0, 0, 0, 5);

gbc_6.gridx = 0;

gbc_6.gridy = 3;

pnInputNIM.add(lblKodeKoleksi, gbc_6);

txtKodeKoleksiMhs = new JTextField();

txtKodeKoleksiMhs.setEnabled(false);

GridBagConstraints gbc_7 = new GridBagConstraints();

gbc_7.anchor = GridBagConstraints.WEST;

gbc_7.gridx = 1;

gbc_7.gridy = 3;

pnInputNIM.add(txtKodeKoleksiMhs, gbc_7);

txtKodeKoleksiMhs.setColumns(20);

JScrollPane scrollPane = new JScrollPane();

pnMahasiswa.add(scrollPane, BorderLayout.CENTER);

tbPeminjamanMahasiswa = new JTable();

tbPeminjamanMahasiswa.setModel(new DefaultTableModel(

new Object[][] {

},

new String[] {

"Kode Item Koleksi", "Judul", "Referensi"

}

));

scrollPane.setViewportView(tbPeminjamanMahasiswa);

JPanel pnKaryawan = new JPanel();

tabbedPane.addTab("Karyawan", null, pnKaryawan, null);

pnKaryawan.setLayout(new BorderLayout(0, 0));

JPanel pnInputNik = new JPanel();

pnKaryawan.add(pnInputNik, BorderLayout.NORTH);

GridBagLayout gbl_pnInputNik = new GridBagLayout();

pnInputNik.setLayout(gbl_pnInputNik);

Java Bootcamp 2011 96

JLabel lblNik = new JLabel("NIK");

GridBagConstraints gbc_8 = new GridBagConstraints();

gbc_8.anchor = GridBagConstraints.WEST;

gbc_8.insets = new Insets(0, 0, 5, 5);

gbc_8.gridx = 0;

gbc_8.gridy = 0;

pnInputNik.add(lblNik, gbc_8);

txtNik = new JTextField();

txtNik.setColumns(10);

GridBagConstraints gbc_9 = new GridBagConstraints();

gbc_9.fill = GridBagConstraints.HORIZONTAL;

gbc_9.insets = new Insets(0, 0, 5, 0);

gbc_9.gridx = 1;

gbc_9.gridy = 0;

pnInputNik.add(txtNik, gbc_9);

JLabel label_1 = new JLabel("Nama");

GridBagConstraints gbc_10 = new GridBagConstraints();

gbc_10.anchor = GridBagConstraints.WEST;

gbc_10.insets = new Insets(0, 0, 5, 5);

gbc_10.gridx = 0;

gbc_10.gridy = 1;

pnInputNik.add(label_1, gbc_10);

txtNamaKaryawan = new JTextField();

txtNamaKaryawan.setColumns(30);

GridBagConstraints gbc_11 = new GridBagConstraints();

gbc_11.fill = GridBagConstraints.HORIZONTAL;

gbc_11.insets = new Insets(0, 0, 5, 0);

gbc_11.gridx = 1;

gbc_11.gridy = 1;

pnInputNik.add(txtNamaKaryawan, gbc_11);

JLabel label_4 = new JLabel("Kode Item Koleksi");

GridBagConstraints gbc_14 = new GridBagConstraints();

gbc_14.anchor = GridBagConstraints.EAST;

gbc_14.insets = new Insets(0, 0, 5, 5);

gbc_14.gridx = 0;

gbc_14.gridy = 2;

pnInputNik.add(label_4, gbc_14);

txtKodeKoleksiKaryawan = new JTextField();

txtKodeKoleksiKaryawan.setEnabled(false);

txtKodeKoleksiKaryawan.setColumns(20);

GridBagConstraints gbc_15 = new GridBagConstraints();

gbc_15.insets = new Insets(0, 0, 5, 0);

gbc_15.anchor = GridBagConstraints.WEST;

gbc_15.gridx = 1;

gbc_15.gridy = 2;

pnInputNik.add(txtKodeKoleksiKaryawan, gbc_15);

JScrollPane scrollPane_1 = new JScrollPane();

pnKaryawan.add(scrollPane_1, BorderLayout.CENTER);

Java Bootcamp 2011 97

Controller

Controller Login

tbPeminjamanKaryawan = new JTable();

tbPeminjamanKaryawan.setModel(new DefaultTableModel(

new Object[][] {

},

new String[] {

"Kode Item Koleksi", "Judul", "Referensi"

}

));

scrollPane_1.setViewportView(tbPeminjamanKaryawan);

}

public void clearKaryawan() {

txtNik.setText("");

txtNama.setText("");

DefaultTableModel dtm=(DefaultTableModel)

tbPeminjamanKaryawan.getModel();

dtm.setRowCount(0);

}

}

package controller;

import javax.swing.JOptionPane;

import view.FrmLogin;

import view.FrmMain;

import dao.DaoPetugasPerpus;

import entity.PetugasPerpus;

public class ControllerLogin {

private DaoPetugasPerpus daoPetugasPerpus;

private FrmLogin frmLogin;

private FrmMain frmMain;

private PetugasPerpus petugasPerpus;

public ControllerLogin(FrmLogin frmLogin) {

// TODO Auto-generated constructor stub

daoPetugasPerpus=new DaoPetugasPerpus();

this.frmLogin=frmLogin;

frmMain=new FrmMain();

}

public void login(String user,String password) {

if(daoPetugasPerpus.cekUserPassword(user, password)){

frmLogin.setVisible(false);

petugasPerpus=daoPetugasPerpus.getPetugas(user);

Java Bootcamp 2011 98

Controller Mahasiswa

frmMain.setVisible(true);

frmMain.setPetugasAktif(petugasPerpus);

}

else{

JOptionPane.showMessageDialog(

frmLogin,"Login gagal",

"Perhatian",JOptionPane.WARNING_MESSAGE);

}

}

}

package controller;

import java.util.Date;

import javax.swing.JOptionPane;

import javax.swing.table.DefaultTableModel;

import view.DialogInputMahasiswa;

import view.FrmDataMahasiswa;

import dao.DaoMahasiswa;

import entity.Mahasiswa;

public class ControllerMahasiswa {

private DaoMahasiswa daoMahasiswa;

private FrmDataMahasiswa frmDataMahasiswa;

private DialogInputMahasiswa dialogInputMahasiswa;

public ControllerMahasiswa(FrmDataMahasiswa frmDataMahasiswa){

daoMahasiswa=new DaoMahasiswa();

this.frmDataMahasiswa=frmDataMahasiswa;

}

public void setDialogInputMahasiswa(DialogInputMahasiswa

dialogInputMahasiswa) {

this.dialogInputMahasiswa = dialogInputMahasiswa;

}

public void inputMahasiswa(String npm,String nama,String

tmpLahir,Date tglLahir,String tahunMasuk) {

Mahasiswa mahasiswa=new Mahasiswa();

mahasiswa.setNim(npm);

mahasiswa.setNama(nama);

mahasiswa.setTahunMasuk(Integer.parseInt(tahunMasuk));

mahasiswa.setTglLahir(tglLahir);

mahasiswa.setTmpLahir(tmpLahir);

if(daoMahasiswa.insert(mahasiswa)){

dialogInputMahasiswa.clear();

findAll();

}

Java Bootcamp 2011 99

else{

JOptionPane.showMessageDialog(dialogInputMahasiswa,

"Penyimpanan gagal",

"Perhatian",JOptionPane.WARNING_MESSAGE);

}

}

public void updateMahasiswa(String npm,String nama,String

tmpLahir,Date tglLahir,String tahunMasuk){

Mahasiswa mahasiswa=new Mahasiswa();

mahasiswa.setNim(npm);

mahasiswa.setNama(nama);

mahasiswa.setTahunMasuk(Integer.parseInt(tahunMasuk));

mahasiswa.setTglLahir(tglLahir);

mahasiswa.setTmpLahir(tmpLahir);

if(daoMahasiswa.update(mahasiswa)){

dialogInputMahasiswa.clear();

findAll();

}

else{

JOptionPane.showMessageDialog(dialogInputMahasiswa,

"Penyimpanan gagal",

"Perhatian",JOptionPane.WARNING_MESSAGE);

}

}

public void deleteMahasiswa(String npm) {

Mahasiswa mahasiswa=new Mahasiswa();

mahasiswa.setNim(npm);

if(daoMahasiswa.delete(mahasiswa)){

findAll();

}

else{

JOptionPane.showMessageDialog(dialogInputMahasiswa,

"Penghapusan gagal",

"Perhatian",JOptionPane.WARNING_MESSAGE);

}

}

public void findAll() {

Mahasiswa[] lstMahasiswa=daoMahasiswa.findAll();

DefaultTableModel dtm=(DefaultTableModel)

frmDataMahasiswa.getTable().getModel();

dtm.setRowCount(0);

for(Mahasiswa mahasiswa : lstMahasiswa){

dtm.addRow(new Object[]{

mahasiswa.getNim(),mahasiswa.getNama(),

mahasiswa.getTmpLahir(),

mahasiswa.getTglLahir(),mahasiswa.getTahunMasuk()

});

}

}

}

Java Bootcamp 2011 100

Data Access Object Salah satu aspek dari lapisan bisnis adalah lapisan akses data yang menghubungkan layanan dengan

database. Mengakses data bervariasi tergantung pada sumber data. Akses ke data persisten sangat

bervariasi tergantung pada jenis penyimpanan (database, flat file, file xml, dan sebagainya) dan

bahkan berbeda dari pelaksanaannya (misalnya berbeda-dialek SQL). Tujuannya adalah untuk

merangkum semua akses ke data dan menyediakan interface. Ini disebut pola DAO.

Dari sudut pandang aplikasi, tidak ada bedanya ketika mengakses sebuah database relasional atau

mem-parsing file xml (menggunakan DAO). DAO ini biasanya mampu menciptakan sebuah instance

dari objek data ("untuk membaca data") dan juga untuk menyimpan data sebagai sumber data.

Java Bootcamp 2011 101

Kode Program untuk Kelas Database

package helper;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

public class Database {

private Connection con;

private PreparedStatement prep;

private ResultSet rs;

public boolean connect() {

try {

Class.forName("com.mysql.jdbc.Driver");

con = DriverManager.getConnection(

"jdbc:mysql://localhost:3306/perpustakaan", "root", "");

} catch (SQLException ex) {

System.out.println("Error 1 : " + ex.getMessage());

return false;

} catch (ClassNotFoundException ex) {

System.out.println("Error 2 : " + ex.getMessage());

return false;

}

return true;

}

public Database(){

connect();

}

public ResultSet getRs() {

return rs;

}

public boolean dml(String query, boolean getRow, Object... objects) {

try {

prep = con.prepareStatement(query);

int i = 1;

for (Object obj : objects) {

prep.setObject(i, obj);

i++;

}

if (getRow) {

rs = prep.executeQuery();

} else {

prep.executeUpdate();

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

return false;

}

return true;

}

Java Bootcamp 2011 102

Kode Program untuk Dao

Kelas AbstractDao

public int getGeneratedKeys() {

int keys=0;

try{

if(dml("SELECT LAST_INSERT_ID();",true)){

rs.next();

keys=rs.getInt("LAST_INSERT_ID()");

rs.close();

return keys;

}

return -1;

}catch(SQLException e){

return -1;

}

}

}

package dao;

import java.sql.ResultSet;

import helper.Database;

public abstract class AbstractDao<T> {

protected Database database;

protected String ss="";

protected ResultSet rs;

public AbstractDao(){

database=new Database();

}

public abstract boolean insert(T obj);

public abstract boolean update(T obj);

public abstract boolean delete(T obj);

public abstract T[] findAll();

public abstract T findById(int id);

}

Java Bootcamp 2011 103

Kelas DaoMahasiswa

package dao;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import entity.Mahasiswa;

public class DaoMahasiswa extends AbstractDao<Mahasiswa> {

@Override

public boolean delete(Mahasiswa obj) {

// TODO Auto-generated method stub

obj.setId(findId(obj.getNim()));

ss="delete mahasiswa where idanggota=?";

if(!database.dml(ss, false, obj.getId()))

return false;

ss="delete anggota where idanggota=?";

if(!database.dml(ss, false, obj.getId()))

return false;

return true;

}@Override

public Mahasiswa[] findAll() {

// TODO Auto-generated method stub

ss="select a.idAnggota,nim,nama,tmplahir,tgllahir,tahunmasuk ";

ss+="from mahasiswa m ";

ss+="inner join anggota a on m.idanggota=a.idanggota";

if(database.dml(ss, true)){

rs=database.getRs();

List<Mahasiswa> lstMahasiswa=new ArrayList<Mahasiswa>();

try {

while(rs.next()){

Mahasiswa mahasiswa=new Mahasiswa();

mahasiswa.setId(rs.getInt("idAnggota"));

mahasiswa.setNim(rs.getString("nim"));

mahasiswa.setNama(rs.getString("nama"));

mahasiswa.setTmpLahir(rs.getString("tmplahir"));

mahasiswa.setTglLahir(rs.getDate("tgllahir"));

mahasiswa.setTahunMasuk(rs.getInt("tahunmasuk"));

lstMahasiswa.add(mahasiswa);

}

rs.close();

return lstMahasiswa.toArray(

new Mahasiswa[lstMahasiswa.size()]);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

return null;

}

}

return null;

}

@Override

public Mahasiswa findById(int id) {

// TODO Auto-generated method stub

return null;

}

Java Bootcamp 2011 104

@Override

public boolean insert(Mahasiswa obj) {

// TODO Auto-generated method stub

ss="insert into anggota(nama,tmplahir,tgllahir)values(?,?,?);";

if(!database.dml(ss, false,

obj.getNama(),obj.getTmpLahir(),obj.getTglLahir())){

return false;

}

obj.setId(database.getGeneratedKeys());

ss="insert into mahasiswa(idanggota,nim,tahunMasuk)values(?,?,?)";

if(!database.dml(ss, false,

obj.getId(),obj.getNim(),obj.getTahunMasuk())){

return false;

}

return true;

}

@Override

public boolean update(Mahasiswa obj) {

// TODO Auto-generated method stub

obj.setId(findId(obj.getNim()));

ss="update anggota set nama=?,tmplahir=?,tgllahir=? where idanggota=?";

if(!database.dml(ss, false,

obj.getNama(),obj.getTmpLahir(),obj.getTglLahir(),obj.getId())){

return false;

}

ss="update mahasiswa set tahunmasuk=? where idanggota=?";

if(!database.dml(ss, false, obj.getTahunMasuk(),obj.getId())){

return false;

}

return true;

}

private int findId(String nim){

int result=0;

try{

ss="select idAnggota from anggota a ";

ss+="inner join mahasiswa m on a.idanggota=m.idanggota ";

ss+="where nim=?";

if(database.dml(ss, true, nim)){

rs=database.getRs();

if(rs.next()){

result= rs.getInt("idAnggota");

}

rs.close();

}

return result;

}catch(SQLException ex){

ex.printStackTrace();

return result;

}

}

}

Java Bootcamp 2011 105

Kelas DaoPetugasPerpus

package dao;

import java.sql.SQLException;

import entity.PetugasPerpus;

public class DaoPetugasPerpus extends AbstractDao<PetugasPerpus> {

public boolean cekUserPassword(String user,String password){

ss="select count(*)jml from petugasperpus where user=? and password=?";

try{

if(database.dml(ss, true, user,password)){

rs=database.getRs();

rs.next();

if(rs.getInt("jml")>0){

rs.close();

return true;

}

else{

rs.close();

return false;

}

}

return false;

}catch(SQLException e){

e.printStackTrace();

return false;

}

}

@Override

public boolean delete(PetugasPerpus obj) {

// TODO Auto-generated method stub

return false;

}

@Override

public PetugasPerpus[] findAll() {

// TODO Auto-generated method stub

return null;

}

@Override

public PetugasPerpus findById(int id) {

// TODO Auto-generated method stub

return null;

}

@Override

public boolean insert(PetugasPerpus obj) {

// TODO Auto-generated method stub

return false;

}

@Override

public boolean update(PetugasPerpus obj) {

// TODO Auto-generated method stub

return false;

}

Java Bootcamp 2011 106

public PetugasPerpus getPetugas(String user) {

ss="select nama,user from petugasperpus p ";

ss+="inner join karyawan k on p.nik=k.nik ";

ss+="inner join anggota a on k.idanggota=a.idanggota ";

ss+="where user=?";

try{

if(database.dml(ss, true, user)){

rs=database.getRs();

rs.next();

PetugasPerpus petugasPerpus=new PetugasPerpus();

petugasPerpus.setNama(rs.getString("nama"));

petugasPerpus.setUser(rs.getString("user"));

rs.close();

return petugasPerpus;

}

return null;

}catch(SQLException e){

e.printStackTrace();

return null;

}

}

}

Java Bootcamp 2011 107

Kelas DaoItemKoleksi

package dao;

import entity.ItemKoleksi;

public class DaoItemKoleksi extends AbstractDao<ItemKoleksi> {

@Override

public boolean delete(ItemKoleksi obj) {

// TODO Auto-generated method stub

return false;

}

@Override

public ItemKoleksi[] findAll() {

// TODO Auto-generated method stub

return null;

}

@Override

public ItemKoleksi findById(int id) {

// TODO Auto-generated method stub

return null;

}

@Override

public boolean insert(ItemKoleksi obj) {

// TODO Auto-generated method stub

return false;

}

@Override

public boolean update(ItemKoleksi obj) {

// TODO Auto-generated method stub

return false;

}

public ItemKoleksi findByKode(String kode){

return null;

}

}

Java Bootcamp 2011 108

Kelas DaoKaryawan

package dao;

import entity.Karyawan;

public class DaoKaryawan extends AbstractDao<Karyawan> {

@Override

public boolean delete(Karyawan obj) {

// TODO Auto-generated method stub

return false;

}

@Override

public Karyawan[] findAll() {

// TODO Auto-generated method stub

return null;

}

@Override

public Karyawan findById(int id) {

// TODO Auto-generated method stub

return null;

}

@Override

public boolean insert(Karyawan obj) {

// TODO Auto-generated method stub

return false;

}

@Override

public boolean update(Karyawan obj) {

// TODO Auto-generated method stub

return false;

}

public Karyawan findByKode(String kode) {

return null;

}

}

Java Bootcamp 2011 109

Kelas DaoKoleksi

package dao;

import entity.Koleksi;

public class DaoKoleksi extends AbstractDao<Koleksi> {

@Override

public boolean delete(Koleksi obj) {

// TODO Auto-generated method stub

return false;

}

@Override

public Koleksi[] findAll() {

// TODO Auto-generated method stub

return null;

}

@Override

public Koleksi findById(int id) {

// TODO Auto-generated method stub

return null;

}

@Override

public boolean insert(Koleksi obj) {

// TODO Auto-generated method stub

return false;

}

@Override

public boolean update(Koleksi obj) {

// TODO Auto-generated method stub

return false;

}

}

Java Bootcamp 2011 110

Kelas DaoPeminjaman

package dao;

import entity.TransaksiPeminjaman;

public class DaoPeminjaman extends AbstractDao<TransaksiPeminjaman> {

@Override

public boolean delete(TransaksiPeminjaman obj) {

// TODO Auto-generated method stub

return false;

}

@Override

public TransaksiPeminjaman[] findAll() {

// TODO Auto-generated method stub

return null;

}

@Override

public TransaksiPeminjaman findById(int id) {

// TODO Auto-generated method stub

return null;

}

@Override

public boolean insert(TransaksiPeminjaman obj) {

// TODO Auto-generated method stub

return false;

}

@Override

public boolean update(TransaksiPeminjaman obj) {

// TODO Auto-generated method stub

return false;

}

}

Java Bootcamp 2011 111

Kelas DaoPengembalian

Untuk melihat pola DAO dalam tindakan, lihatlah JdbcObjectStudentDAO kelas (sangat

didokumentasikan) dalam contoh dasar.

Penerapan / Penggunaan

Gunakan Obyek Akses Data apabila:

Anda perlu untuk mengakses penyimpanan persisten lebih dari satu kali, terutama jika Anda ingin

bertukar sumber data nanti.

package dao;

import entity.TransaksiPengembalian;

public class DaoPengembalian extends AbstractDao<TransaksiPengembalian>

{

@Override

public boolean delete(TransaksiPengembalian obj) {

// TODO Auto-generated method stub

return false;

}

@Override

public TransaksiPengembalian[] findAll() {

// TODO Auto-generated method stub

return null;

}

@Override

public TransaksiPengembalian findById(int id) {

// TODO Auto-generated method stub

return null;

}

@Override

public boolean insert(TransaksiPengembalian obj) {

// TODO Auto-generated method stub

return false;

}

@Override

public boolean update(TransaksiPengembalian obj) {

// TODO Auto-generated method stub

return false;

}

}

Java Bootcamp 2011 112

Anda ingin memisahkan antarmuka klien data sumber daya dari mekanisme akses datanya

Anda ingin menyesuaikan data sumber daya khusus dari akses API untuk antarmuka klien generik

dalam proyek yang lebih besar, tim yang berbeda bekerja pada bagian yang berbeda dari aplikasi:

pola DAO memungkinkan pemisahan bersih dari keprihatinan.

Diagram DAO sesudah melewati proses dari Sequence Diagram

Java Bootcamp 2011 113

Kelas Diagram sesudah melewati proses dari Sequence Diagram