Bab 2. Elemen-elemen JSP [Java Web Development Untuk Pemula]

Halaman JSP terbuat dari template halaman, yang terdiri dari kode HTML dan elemen JSP seperti elemen scripting, unsur directive, dan unsur-unsur action. Dalam bab sebelumnya, setelah menjelaskan cara menginstal Java dan Tomcat, saya memperkenalkan Anda pada JSP dan menjelaskan peran JSP dalam aplikasi web. Dalam bab ini, saya akan menjelaskan secara rinci dua jenis pertama dari elemen JSP. Untuk unsur-unsur action/tindakan, lihat Bab 4.

Perkenalan

Elemen Scripting terdiri dari kode yang dibatasi dengan urutan karakter tertentu . Scriptlets, yang Anda temui dalam contoh-contoh di Bab 1 dan dibatasi oleh pasangan <% dan %>, adalah salah satu kemungkinan tiga jenis elemen scripting. Dua lainnya adalah deklarasi dan ekspresi.

Semua elemen scripting adalah fragmen Java yang mampu memanipulasi objek Java, menerapkan metode mereka dan menangkap eksepsi Java. Mereka dapat mengirim data ke output, dan mereka dieksekusi saat halaman diminta.

Dalam contoh hello.jsp dari Bab 1 (Listing 1-4), Anda melihat bahwa request.getHeader (“user-agent”) mengembalikan sebuah string yang menggambarkan web browser klien, meskipun faktanya variabel yang diminta tidak didefinisikan di mana saja. Ini bekerja karena Tomcat mendefinisikan beberapa objek secara implisit: application, config, exception, out, pageContext, request, response, dan session.

Elemen Directive adalah pesan untuk container JSP (yaitu, Tomcat). Tujuan mereka adalah untuk memberikan informasi tentang halaman itu sendiri yang diperlukan untuk menterjemahannya. Karena antar setiap permintaan tidak memiliki hubungan, unsur direktif tidak menghasilkan output teks apapun pada saat merespon dengan HTML.

Baris pertama dari contoh hello.jsp adalah direktif:

<%@page language="java" contentType="text/html"%>

Selain halaman, directive lain yang tersedia di halaman JSP adalah include dan taglib.

Elemen Action menetapkan kegiatan-kegiatan yang dilakukannya, seperti elemen scripting, ia perlu dilakukan saat halaman diminta, karena tujuan mereka adalah merangkum kegiatan yang Tomcat lakukan secara tepat ketika menangani permintaan HTTP dari klien. Elemen action dapat menggunakan, memodifikasi, dan / atau membuat objek, dan mereka dapat mempengaruhi cara data dikirim ke output. Ada lebih dari selusin tindakan/action standar: attribute, body, element, fallback, forward, getProperty, include, param, params, plugin, setProperty, text, dan useBean. Misalnya, elemen action berikut memasukkan ke dalam halaman JSP output dari halaman lain:

<jsp:include page="another.jsp"/>

Selain unsur-unsur tindakan standar, JSP juga menyediakan mekanisme yang memungkinkan Anda menentukan tindakan kustom, di mana awalan pilihan Anda menggantikan awalan tindakan jsp standar. Mekanisme ekstensi tag memungkinkan Anda membuat perpustakaan tindakan kustom, yang kemudian dapat digunakan dalam semua aplikasi Anda. Beberapa tindakan kustom menjadi begitu populer dalam komunitas pemrograman hingga Sun Microsystems (sekarang Oracle) memutuskan untuk membakukan mereka. Hasilnya adalah JSTL, Tag Library JSP Standard.

The Expression Language (EL) merupakan komponen JSP tambahan yang menyediakan akses secara mudah ke objek-objek eksternal (misalnya, Java Beans). EL diperkenalkan di JSP 2.0 sebagai alternatif elemen scripting, tetapi Anda juga dapat menggunakan EL dan elemen scripting bersama-sama. Saya akan menjelaskan EL dalam Bab 4, setelah menjelaskan elemen-elemen tindakan.

Java dan Elemen-elemen Scripting

Elemen Scripting mengijinkan Anda menanamkan kode Java dalam halaman HTML. Setiap “java executable” – apakah itu sebuah program yang berdiri sendiri yang berjalan secara langsung dalam lingkungan runtime, sebuah applet yang dieksekusi di dalam browser, atau servlet yang dieksekusi dalam sebuah container seperti Tomcat – bermuara pada menginstansiasi kelas menjadi objek dan melaksanakan metode mereka. Ini mungkin tidak begitu jelas dengan JSP, karena Tomcat membungkus setiap halaman JSP ke dalam kelas jenis Servlet di belakang layar, tapi masih berlaku.

Metode Java terdiri dari urutan operasi untuk menginstansiasi objek, mengalokasikan memori ke variabel, menghitung ekspresi, melakukan tugas, atau mengeksekusi metode lain.

Pada bagian ini, saya akan meringkas sintaks Java dalam perspektif JSP.

Scriptlets

Sebuah scriptlet adalah blok kode Java yang tertutup antara <% dan %>. Sebagai contoh, kode ini mencakup dua scriptlets yang memungkinkan Anda beralih ke elemen HTML atau menonaktifkannya tergantung pada kondisi:

<% if (condition) { %>
<p>This is only shown if the condition is satisfied</p>
<%   } %>

Expresion

Sebuah elemen scripting expression memasukkan ke halaman hasil ekspresi Java yang tertutup dalam pasangan <%= dan %>. Sebagai contoh, dalam potongan kode berikut, unsur ekspresi scripting memasukkan tanggal saat ini ke dalam halaman HTML yang dihasilkan:

<%@page import="java.util.Date"%>
Server date and time: <%=new Date()%>

Kamu dapat menggunakan dalam sebuah elemen scripting ekspresi setiap ekspresi Java, asalkan itu menghasilkan nilai. Dalam prakteknya, ini berarti bahwa setiap ekspresi Java akan melakukan, kecuali pelaksanaan metode tipe void. Sebagai contoh, <%= (kondisi)? “ya”: “no”%> adalah valid, karena menghasilkan string. Anda akan mendapatkan output yang sama dengan scriptlet <% if (kondisi) out.print(“ya”) else out.print(“tidak”);%>.

Declarations

Unsur scripting declarations adalah deklarasi variabel Java yang tertutup antara <%! dan %>. Ia menghasilkan instance variabel yang di share oleh semua permintaan pada halaman yang sama. Lihat bagian “Contoh: Pengujian Concurrency” sebagai contoh bagaimana Anda dapat menggunakannya.

Tipe Data Dan Variabel

Java membuat tipe data primitif tersedia mirip dengan tipe dasar C/C++ (lihat Tabel 2-1). Namun, ada satu yang penting, jika tidak begitu jelas, perbedaan. Ketepatan jenis numerik di C tergantung dari implementasi, tetapi dijamin akan konstan di lintas platform di Java.

Gambar 2.1.Tipe data java

Kolom kedua dari Tabel 2-1 memberikan nama-nama yang disebut wrapper class yang membuat Java tersedia untuk setiap tipe primitif. Kelas-kelas ini memberikan beberapa metode statis yang berguna untuk memanipulasi angka. Sebagai contoh, Integer.parseInt (String s, int radix) menafsirkan string sebagai angka di basis yang ditetapkan oleh argumen kedua dan mengembalikannya sebagai nilai int (misalnya, Integer.parseInt(“12”, 16) dan Integer.parseInt(“10010”, 2) keduanya mengembalikan 18).

Berikut adalah beberapa contoh bagaimana Anda dapat mendeklarasikan variabel dan menginisialisasi mereka:

String aString = "abcdxyz";
int k = aString.length();  // k is then set to 7
char c = aString.charAt(4);  // c is set to 'x'
static final NAME = "John Doe";

Kata kunci final dalam contoh terakhir dari deklarasi membuat variabel yang tidak bisa diubah. Ini adalah bagaimana Anda mendefinisikan konstanta di Java. Kata kunci static menunjukkan bahwa variabel adalah untuk digunakan bersama oleh semua objek dalam aplikasi yang sama yang dipakai dari kelas.

Penggunaan variabel statis di JSP memerlukan beberapa komentar lebih lanjut. Dalam JSP, Anda dapat mendeklarasikan variabel dalam tiga cara:

<% int k = 0; %>
<%! int k = 0; %>
<%! static int k = 0; %>

Deklarasi pertama berarti bahwa variabel baru dibuat untuk setiap permintaan HTTP client yang masuk, yang kedua berarti bahwa variabel baru dibuat untuk setiap instance baru dari servlet, dan yang ketiga berarti bahwa variabel dibagi di antara semua instance dari servlet.

Tomcat mengkonversi setiap halaman JSP menjadi subclass dari kelas HTTP Servlet (javax.servlet.http.HttpServlet). Biasanya, Tomcat menginstansiasi masing-masing dari kelas-kelas ini hanya sekali dan kemudian membuat thread Java untuk setiap permintaan yang masuk. Ini kemudian mengeksekusi objek servlet yang sama dalam setiap thread. Jika aplikasi berjalan pada lingkungan terdistribusi atau tingginya jumlah permintaan, Tomcat dapat menginstansiasi servlet yang sama lebih dari sekali. Oleh karena itu, hanya deklarasi ketiga yang menjamin bahwa variabel akan dibagi di antara semua permintaan.

Tomcat membuat kode servlet terpendam dalam folder bernama work. For example, Misalnya, servlet yang dihasilkan dari webapps\ROOT\tests\a.jsp adalah di work\Catalina\localhost\_\org\apache\jsp\tests\ dan dinamai a_jsp.java.

Untuk menggunakan karakter khusus dalam string, Anda perlu untuk mengescape mereka dengan garis miring terbalik, seperti yang ditunjukkan pada Tabel 2-2. Dengan \u diikuti oleh hingga empat digit heksadesimal, Anda dapat menentukan karakter Unicode. Misalnya, Anda dapat memasukkan huruf besar Yunani delta sebagai \u0394.

Gambar 2.2. Tabel karakter khusus

Objek Dan Arrray

Untuk membuat objek dengan tipe tertentu, gunakan keyword new, seperti contoh dibawah ini:

Integer integerVar = new Integer(55);

Ini akan membuat objek dengan tipe integer dengan nilai 55. Kamu bisa memiliki array dengan sembarang tipe objek atau tipe data primitif, seperti contoh deklarasi array dibawah ini:

int[] intArray1;
int[] intArray2 = {10, 100, 1000};
String[] stringArray = {"a", "bb"};

intArray1 bernilai null, intArray2 adalah array yang memiliki panjang 3 yang berisi 10, 100 dan 1000. dan stringArray adalah array berukuran 2 element dan berisi elemen “a” dan “bb”. Meskipun array tampaknya spesial, mereka hanyalah objek dan diperlakukan seperti itu. Oleh karenanya kamu bisa menginisialiasi array dengan kata kunci new. Sebagai contoh, baris kode ini mendeklarasikan array dengan 10 element, dan mengisinya dengan nol.

int[] array = new int[10];

Sebuah tabel dua dimensi adalah array di mana setiap elemen obyek itu sendiri adalah array. Hal ini tidak seperti di C, di mana satu blok memori berisi semua elemen dari tabel multidimensi. Misalnya, baris kode ini merupakan tabel dua baris, tapi baris pertama memiliki tiga unsur, sedangkan yang kedua hanya memiliki dua:

int[][] table1 = {{11, 12, 13}, {21, 22}};

Jika kamu mendefinisikan seperti ini:

int[][] table = new int[2][3];

kamu akan memiliki tabel dengan dua baris dan tiga kolom, dengan semua elemen diberi nilai awal nol. Ketika mendeklarasikan sebuah tabel, kamu bisa meninggalkan dimensi terakhir dengan kosong. Sebagai contoh, deklarasi ini menghasilkan tabel dengan dua baris, tetapi kolomnya belum didefinisikan dan masih di set ke null.

int[][] table = new int[2][];

Sebelum bisa memberikan nilai ke masing-masing elemen dari tabel yang telah didefinisikan, kamu harus mendeklarasikan barisnya atau memberikan nilai kepadanya jika sudah dideklarasikan sebagai array satu dimensi.

table[0] = new int[5];
int[] anArray = {10, 100};
table[1] = anArray;

Operator, Penugasan, dan Perbandingan

Tidak ada kejutan dengan operator biner-yaitu, operator yang memerlukan dua operan. Mereka termasuk operator penambahan, pengurangan, perkalian, pembagian, dan modulus (yaitu, sisa pembagian integer). Ketika diterapkan ke string, operator penambahan merangkai mereka.

Selain operator penugasan yang normal diwakili oleh tanda sama dengan, ada juga operator penugasan untuk masing-masing operator biner. Misalnya, baris kode berikut berarti bahwa Anda mengambil nilai saat ini dari variabel, menambahnya b, dan menyimpannya kembali ke dalam a:

a += b; // same as a = a + b;

Yang paling umum digunakan adalah operator unary (yaitu operator yang membutuhkan satu operan) termasuk tanda minus, yang mengubah tanda apa yang mengikutinya, operator kenaikan dan operatorpengurangan :

a = -b;
a++; // same as a += 1;
a--; // same as a -= 1;

Anda dapat menetapkan nilai dari sebuah ekspresi dari satu jenis variabel ke jenis lain, tetapi dengan beberapa pembatasan. Dengan tipe numerik, Anda hanya bisa memberikan nilai pada variabel yang dari jenis yang sama atau yang “lebih besar.” Sebagai contoh, Anda dapat menetapkan nilai int ke variabel dari tipe long, tetapi untuk menetapkan nilai long dari variabel int, Anda melakukan typecast nilainya menjadi int, seperti di int Ivar = (int) 1234567L;. Hati-hati dengan itu, karena Anda mungkin kehilangan presisi ketika melakukan downcasting dari angka floating point!

Anda dapat menetapkan objek untuk variabel jenis lain, tetapi hanya jika jenis variabel adalah superclass dari kelas yang anda pakai untuk membuat objek. Demikian pula dengan downcasting jenis numerik, Anda dapat melakukan typecast nilai superclass menjadi variabel tipe subclass.

Operator perbandingan mudah bila diterapkan pada tipe data primitif. Anda telah == untuk memeriksa kesetaraan,!= Untuk memeriksa ketidaksetaraan,> untuk memeriksa “lebih besar dari,”>= untuk memeriksa “lebih besar dari atau sama dengan,” < untuk memeriksa "kurang dari", dan <= untuk memeriksa "kurang dari atau sama dengan." tidak ada yang mengejutkan di sana. Namun, Anda harus berhati-hati ketika Anda membuat perbandingan antara objek, seperti contoh berikut:

String s1 = "abc";
String s2 = "abc";
String s3 = "abcd".substring(0,3);
boolean b1 = (s1 == "abc"); // parentheses not needed but nice!
boolean b2 = (s1 == s2);
boolean b3 = (s1 == s3);

Seperti yang mungkin Anda harapkan, B1 dan B2 berubah menjadi true, tetapi b3 adalah false, meskipun s3 ditetapkan bernilai "abc"! Masalahnya adalah bahwa operator perbandingan tidak melihat ke dalam objek. Mereka hanya memeriksa apakah objek instance dari kelas yang sama, bukan apakah mereka memegang nilai yang sama. Oleh karena itu, selama Anda menggeser sekitar string "abc", compiler terus mengacu pada contoh yang sama dari string literal, dan semuanya berperilaku seperti yang diharapkan. Namun, ketika Anda membuat contoh yang berbeda dari "abc," cek untuk kesetaraan gagal. Pelajaran yang bisa dipetik adalah bahwa jika Anda ingin membandingkan isi objek, Anda harus menggunakan metode yang sama. Dalam contoh ini, s1.equals(s3) akan mengembalikan nilai benar.

Untuk obyek, Anda juga memiliki operator perbandingan instanceof, yang tidak tersedia untuk tipe data primitif seperti int. Sebagai contoh, ("abc" instanceof String) memberikan nilai benar. Sadarilah bahwa obyek tidak hanya sebuah contoh dari kelas itu dipakai dari, tetapi juga sebuah contoh dari semua superclasses sampai dengan dan termasuk Object, yang merupakan superclass dari semua kelas. Masuk akal: String juga merupakan Object, bahkan jika sebaliknya sering tidak benar.

Dengan && untuk logika dan, || untuk logika atau, dan ! untuk logika tidak, Anda dapat menggabungkan perbandingan untuk membentuk kondisi yang lebih kompleks. Sebagai contoh, ((a1 == a2) &&! (B1 || b2)) menghitung dengan true hanya jika a1 sama dengan a2 dan kedua variabel boolean b1 dan b2 adalah false.

Selections

Pernyataan dibawah ini memberikan nilai variabel string s yang berbeda tergantung pada kondisi:

if (a == 1) {
s = "yes";
}
else {
s = "no";
}

Kamu bisa mengabaikan bagian else.
Kamu bisa mendapatakan hasil yang identik dengan kondisi ekspresi diatas dengan satu baris pernyataan berikut ini:

String s = (a== 1) ? "yes" : "no";

Kamu juga mendapatkan hasil yang sama dengan kode berikut ini:

switch(a) {
case 1:
s = "yes";
break;
default:
s = "no";
break;
}

Jelas, pernyataan switch hanya berguna ketika ada lebih dari hanya dua alternatif. Misalnya, alih-alih memiliki rantai pernyataan if/else yang lain, seperti dalam contoh berikut:

if (expression == 3) {...}
else if (expression == 10) {...}
else {...}
you would gain both in clarity and in concisiveness with:
switch (expression) {
case (3): ... break;
25CHAPTER 2   JSP ELEMENTS
case (10): ... break;
default: ... break;
}

Paling tidak, Anda akan menghitung ekspresi hanya sekali. Perhatikan bahwa jika Anda menghilangkan pernyataan break, eksekusi terus dilanjutkan ke case berikutnya. Dengan Java 7, variabel switch dapat berupa tipe String. Oleh karena itu, Anda dapat menulis switch seperti berikut ini:

String yn;
...
switch (yn) {
case ("y"): /* handle the yes case */ break;
case ("n"): /* handle the no case */ break;
default: /* is something fishy going on? */ break;
}

Perulangan

Pernyataan ini berulang kali mengeksekusi pernyataan dengan meningkatnya nilai k, mulai dari init-nilai:

for (int k = init-value; k < limit; k++) { statements; }

Format umumnya adalah

for (initial-assignment; end-condition; iteration-expression) { statements; }

Penugasan-awah hanya dijalankan sekali, sebelum memasuki loop. Laporan tersebut kemudian berulang kali dijalankan selama akhir kondisi-terpenuhi. Sebagai akhirnya kondisi-diperiksa sebelum mengeksekusi pernyataan, mereka tidak dieksekusi sama sekali jika akhir-kondisi adalah bernilai false dari awal. Iterasi ekspresi dijalankan pada akhir setiap iterasi, sebelum akhir kondisi-diperiksa untuk melihat apakah loop harus masuk kembali untuk iterasi baru.

Anda bisa menghilangkan salah satu penugasan-awal atau iterasi-ekspresi. Jika Anda mengabaikan keduanya, Anda harus menggantikan perulangan for dengan loop while. Dua baris berikut adalah sama:

while (end-condition) { statements; }
for (;end-condition;) { statements; }

Pernyataan do-while adalah alternative dari perulangan while:

do { statements; } while (end-condition);

Pernyataan do-while memeriksa kondisi di akhir iterasi bukan di awal, seperti perulangan for dan perulangan while lakukan. Akibatnya, pernyataan di dalam loop do-while selalu dijalankan minimal sekali, bahkan ketika akhir-kondisi adalah false dari awal.

Laporan iterasi dijelaskan sejauh ini identik dengan C, tetapi Java juga mendukung varian perulangan for yang disesuaikan untuk membuat penanganan koleksi lebih mudah. Misalkan Anda memerlukan metode yang menghasilkan gabungan dari satu set string. Mungkin terlihat seperti ini:

String concatenate(Set<String> ss) {
String conc = "";
Iterator<String> iter = ss.iterator();
while (iter.hasNext()) {
conc += iter.next();
}

return conc;
}

Dengan varian for-each java dari perulangan for, kamu bisa menjatuhkan definisi dari iterator dan menulis kode yang lebih jelas dibaca:

String concatenate(Set<String> ss) {
String conc = "";
for (String s : ss) {
conc += s;
}
return conc;
}
Iklan

Koverter Bilangan Komputer

Sebagai seorang pelajar maupun praktisi Teknologi Informasi, Sistem Bilangan Komputer tentu sudah sangat lekat di dunia kita. Komputer sendiri bekerja menggunakan sistem bilangan yang tidak sama dengan apa yang digunakan oleh manusia pada umumnya. Dalam sistem bilangan komputer kita mengenal adanya sistem bilangan biner, oktal, desimal, dan hexa.

Teori tentang sistem bilangan komputer sudah banyak tersedia di internet. Bagaimana melakukan konversi dari satu sistem bilangan ke sistem bilangan yang lain dapat dilakukan dengan mudah. Bahkan beberapa program kalkulator yang tersedia secara bebas, bisa membantu kita untuk melakukan konversi antar sistem bilangan. Namun bagaimana cara bekerjanya? tidak banyak program komputer yang memberikan penjelasan proses konversi tersebut.

Untuk itulah kali ini saya ingin memposting sebuah progam komputer berbasis java yang mampu untuk melakukan konversi antar bilangan komputer sekaligus menjelaskan bagaimana proses konversi tersebut terjadi.

konverter bilangan komputerProgram tersebut baru bisa melakukan konversi untuk bilangan bulat positif, jadi untuk bilangan pecahan dan negatif belum di implementasikan. Bagi kawan-kawan yang ingin menyumbangkan kode programnya guna menambah fungsionalitas aplikasi ini silahkan ke https://github.com/mujib-programmer/Konverter-Bilangan-Komputer-J2SE

Rencananya aplikasi ini akan dibuat semodular mungkin, sehingga kawan-kawan lainnya bisa menambah fungsionalitasnya melalui mekanisme plugin. Atau bagi kamu-kamu yang sekedar ingin mencoba menggunakan aplikasi ini silahkan download file jar berikut ini https://dl.dropboxusercontent.com/u/10525544/github/mujib.programmer%40gmail.com/Konverter-Bilangan-Komputer-J2SE/Konverter_Bilangan_Komputer.jar

Yang punya ide, saran, maupun kritikan, silahkan tuliskan dikomentar posting ini.

Bab 1. Perkenalan dengan JSP dan Tomcat [Java Web Development Untuk Pemula]

Untuk memahami JSP, Anda harus terlebih dahulu memiliki gagasan yang jelas tentang apa yang terjadi ketika Anda meminta browser Anda untuk melihat halaman web, baik dengan mengetik URL ke dalam kolom alamat browser Anda atau dengan mengklik hyperlink. Gambar 1-1 menunjukkan cara kerjanya.

Gambar 1.1. Melihat halaman HTML

Langkah-langkah berikut ini menjelaskan apa yang terjadi ketika kamu meminta browser kamu untuk melihat halaman web statik :

  1. Ketika Anda mengetik alamat seperti http://www.website.com/path/whatever.html ke dalam kolom alamat browser,  browser kamu terlebih dahulu menetapkan http://www.website.com (yaitu, nama server web) ke dalam alamat Internet Protocol (IP) yang sesuai, biasanya dengan meminta Domain Name Server yang disediakan oleh Internet Service Provider (ISP). Maka browser Anda mengirimkan permintaan HTTP ke alamat IP yang baru ditemukan untuk menerima isi dari file yang diidentifikasi oleh /path/whatever.html.
  2. Jawabannya, server web mengirimkan respon HTTP yang berisi halaman HTML plain-text. Gambar dan komponen non-tekstual lainnya, seperti suara dan klip video, yang ditampilkan di halaman itu sebagai referensi.
  3. Browser Anda menerima respon, menafsirkan kode HTML yang terkandung dalam halaman, meminta komponen non-tekstual dari server, dan menampilkannya.

JavaServer Pages (JSP) adalah teknologi yang membantu Anda membuat halaman yang dihasilkan secara dinamis dengan mengkonversi file script ke modul Java untuk dieksekusi, JavaServer Faces (JSF) adalah paket yang memfasilitasi interaktivitas dengan pengunjung halaman, dan Tomcat adalah sebuah aplikasi yang dapat mengeksekusi  kode kamu dan bertindak sebagai server web untuk halaman dinamis Anda.

Sebelum bisa menggunakan jsp dan jsf, terlebih dahulu beberapa software berikut ini harus sudah terinstall di komputer kamu. Setidaknya membutuhkan 300MB ruang harddisk untuk menginstal Java dan Tomcat. dan 300MB lagi untuk menginstal Eclipse Integrated Development Environtment.

1.1 Menginstal Java

Java bisa diinstall di berbagai sistem operasi seperti MS. Windows, Mac OSX, maupun Linux. Tanpa java semuanya tidak akan bisa dijalankan.

Kamu membutuhkan JRE (Java Runtime Environment) dan JDK (Java Development Kit) yang memungkinkan kamu mengkompile kode java menjadi Class yang bisa dieksekusi. Mereka bisa di download di website Oracle. Inilah yang perlu kamu lakukan :

  1. Pergi ke URL http://www.oracle.com/technetwork/java/javase/downloads/index.html .
    Klik pada tombol besar bertuliskan “Java Download” (versi terbaru pada saat menulis adalah 7u3). Ini akan membawa Anda ke halaman “Java SE Development Kit 7 Downloads.”
  2. Pilih “Terima Perjanjian Lisensi” dan kemudian klik pada link jdk-7u3-windows-i586.exe.
  3. Link yang sebenarnya mungkin merujuk ke versi selain “7u3,” tetapi Anda perlu men-download baik “Windows x86 (32-bit)” atau “Windows x64 (64-bit),” menurut jenis prosesor PC Anda. Meskipun saya menggunakan 64-bit PC, saya telah menguji semua contoh dalam buku ini dengan paket 32-bit karena aku tidak ingin menguji segala sesuatu dua kali.
  4. Jalankan file tersebut.
  5. Menerima perjanjian lisensi ketika diminta dan menginstal segalanya.

Untuk petunjuk mengenai cara menginstal java bisa kamu cari di internet yang sekarang ini telah banyak tertulis. Sebelum melanjutkan ke tahap berikutnya, pastikan jdk, dan jre telah terinstall dengan benar di komputer kamu.

1.2 Menginstal Tomcat

Ini adalah web server Java, yang merupakan wadah servlet yang memungkinkan Anda untuk menjalankan JSP. Jika Anda telah menginstal versi lama dari Tomcat, Anda harus menghapusnya sebelum menginstal versi yang baru.

Tomcat mendengarkan tiga port komunikasi PC Anda (8005, 8009, dan 8080). Sebelum Anda menginstal Tomcat, Anda harus memeriksa apakah beberapa aplikasi yang sudah diinstal mendengarkan satu atau lebih port tersebut. Untuk melakukannya, buka jendela DOS dan ketik perintah netstat /a. Ini akan menampilkan daftar sambungan aktif dalam bentuk tabel. Kolom kedua tabel akan terlihat seperti ini:

local Address
0.0.0.0:135
0.0.0.0:445
0.0.0.0:3306

Nomor port adalah nomor setelah titik dua. Jika Anda melihat satu atau lebih port yang akan digunakan Tomcat tampil disini, setelah menginstal Tomcat, Anda harus mengubah port yang akan didengarkan Tomcat, seperti dijelaskan pada Bab 10. Di sana, Anda juga akan mempelajari tujuan ketiga port.

Lebih lanjut mengenai Tomcat akan dibahas pada bab 9, namun bagi kamu yang masih kesulitan dalam menginstal, atau melakukan konfigurasi di tomcat, khususnya Tomcat 7, kamu bisa membaca buku Apache Tomcat 7 Essentials dari Packt Publishing.

1.3 Pemasalahan Umum dan Penyelesaiannya saat Istalasi

Ada beberapa masalah yang mungkin timbul selama instalasi Tomcat 7. Mari kita membahas masalah ini:

Error: Permission denied for the Java binary

Skenario 1: Instalasi Java tidak bekerja, saat mengeksekusi kode biner Java.

[root@localhost opt]# ./jdk-6u24-linux-i586.bin
-bash: ./jdk-6u24-linux-i586.bin: Permission denied

Issue: Java biner tidak memiliki izin eksekusi dengan pengguna tertentu.

Fix: Ubah izin menjadi 0755 untuk ./jdk-6u24-linux-i586.bin menggunakan perintah berikut:

[root@localhost opt]# chmod 0755 jdk-6u24-linux-i586.bin

Chmod 0755 file setara dengan u = rwx (4 +2 +1), go = rx (4 +1 & 4 +1). 0 menunjukkan tidak ada mode khusus.

Error: Tomcat is not able to find JAVA_HOME

Skenario 2: Saat memulai skrip startup Tomcat, error berikut terjadi:

[root@localhost bin]# ./startup.sh
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variables is needed to run this program

Fix: Periksa file .bash_profile dan cari tahu apakah entri yang disebutkan dibawah ini ada di dalam file tersebut:

JAVA_HOME=/opt/jdk1.6.0_24
PATH=$JAVA_HOME/bin:$PATH:$HOME/bin
export PATH JAVA_HOME

Error: Error in the logs showing port already in use

Skenario 3: layanan Tomcat tidak ditampilkan setelah menjalankan startup.sh.

Issue: Layanan ini sudah berjalan di server.

Fix: Periksa setiap proses Java yang berjalan di sistem menggunakan perintah berikut di Linux:

Ps -ef |grep tomcat

Perintah ini akan menampilkan semua proses Tomcat. Jika ada proses yang berjalan pada OS, matikan dan jalankan skrip startup lagi.

Pada Windows, pergi ke Task Manager dan periksa apakah ada proses Java berjalan untuk Tomcat. Jika ada proses sedang berjalan, kemudian matikan proses dan restart layanan Tomcat.

Java Web Development untuk Pemula (JSP, JSF dan Tomcat)

Hari ini saya ingin membahas tentang teknologi java untuk membuat website maupun aplikasi java berbasis web. Untuk keperluan ini, java telah menyediakan berbagai tools yang memudahkan programmer java ketika harus bekerja dengan media web. Meskipun masih kalah pamor dengan PHP yang notabene merupakan bahasa pemrograman web paling familiar, namun kemapanan java sebagai bahasa pemrograman tentu menarik untuk disimak, bagaimana programmer java harus bekerja ketika dihadapkan pada media web ini.

Disini  kita akan membagi materinya menjadi seperti berikut ini :

  • Bab 1. Perkenalan dengan JSP dan Tomcat
  • Bab 2. Elemen-elemen JSP
  • Bab 3. Arsitektur JSP
  • Bab 4. Praktek Penggunaaan JSP
  • Bab 5. XML dan JSP
  • Bab 6. Database
  • Bab 7. Java Server Faces 2.2
  • Bab 8. JSF dan Eshop
  • Bab 9. Tomcat
  • Bab 10. Pengembangan Eshop

Untuk diketahui saya menulis ini, hanyalah sebagai catatan ketika saya membaca buku Beginning JSP, JSF and Tomcat: Java Web Development (Second Edition) dari penerbit Apress. Saya berharap pembaca bisa turut mendapatkan manfaat dari buku ini, karena menurut penulis buku ini cukup mudah untuk dipahami dan dipelajari.

 

Ringkasan Bab 1 sampai Bab 6 [Automated Teller Machine (ATM)]

Bab 1. Memeriksa Dokumen Requirement

1.1. Dokumen Requirement

Mesin teller otomatis (ATM) harus memungkinkan pengguna (yaitu, nasabah bank) untuk melakukan transaksi keuangan dasar :

  1. Setiap user dapat memiliki satu rekening di bank.
  2. Pengguna ATM harus mampu melihat saldo rekening mereka
  3. Pengguna harus mampu menarik uang tunai (yaitu, mengambil uang dari rekening)
  4. Pengguna harus mampu menyetorkan dana tunai (yaitu, menyimpan uang ke rekening).

User interface dari mesin teller otomatis berisi:

  1. layar yang menampilkan pesan kepada pengguna.
  2. keypad numerik yang menerima input dari pengguna.
  3. Pemberi uang tunai (cash dispenser) yang membagikan uang tunai kepada pengguna. Cash Dispenser dimulai setiap hari diisi dengan 500 pecahan $20.
  4. slot deposit yang menerima setoran uang dari pengguna.

fig 12. automated teller machine user interface

Karena sistem ini dibuat untuk keperluan belajar mengajar, maka kami menetapkan Asumsi-asumsi yang digunakan sebagai berikut :

  1. Kami berasumsi bahwa bank berencana untuk membangun hanya satu ATM, jadi kita tidak perlu khawatir tentang beberapa ATM mengakses database ini pada waktu yang sama.
  2. kami mengasumsikan bahwa bank tidak membuat perubahan informasi apapun dalam database sementara pengguna mengakses ATM.
  3. Kami membuat asumsi penyederhanaan, bagaimanapun, bahwa bank mempercayai ATM untuk mengakses dan memanipulasi informasi dalam database tanpa langkah-langkah keamanan yang signifikan.
  4. ATM nyata biasanya berisi sebuah perangkat yang membaca nomor rekening pengguna dari kartu ATM, sedangkan ATM ini meminta pengguna untuk mengetik nomor rekening pada keypad.
  5. Sebuah ATM nyata juga biasanya mencetak tanda terima pada akhir sesi, tetapi semua keluaran dari ATM ini muncul di layar.

Setelah datang ke ATM (dengan asumsi tidak ada orang yang sedang menggunakannya), pengguna harus mengikuti urutan peristiwa berikut (ditunjukkan pada Gambar 12.1.):

  1. Layar menampilkan Selamat Datang! dan meminta pengguna untuk memasukkan nomor rekening.
  2. Pengguna memasukkan nomor rekening lima digit menggunakan keypad.
  3. Layar meminta pengguna untuk memasukkan PIN (nomor identifikasi pribadi) terkait dengan nomor rekening tertentu.
  4. Pengguna memasukkan PIN lima digit menggunakan keypad.
  5. Jika pengguna memasukkan nomor rekening yang valid dan PIN yang benar untuk akun tersebut, layar menampilkan menu utama (Gambar 12.2). Jika pengguna memasukkan nomor rekening valid atau PIN yang salah, layar menampilkan pesan yang sesuai, maka ATM kembali ke Langkah 1 untuk memulai kembali proses otentikasi.

fig 12.2. ATM main menuJika pengguna memasukkan 1 untuk meminta informasi saldo, layar menampilkan saldo rekening pengguna.

Langkah-langkah berikut menjelaskan apa yang terjadi ketika pengguna memasukkan 2 untuk melakukan penarikan:

  1. Layar menampilkan menu (Gambar 12.3) mengandung penarikan dalam jumlah standar: $20 (opsi 1), $40 (opsi 2), $60 (opsi 3), $100 (opsi 4) dan $200 (pilihan 5). Menu ini juga berisi opsi yang memungkinkan pengguna untuk membatalkan transaksi (pilihan 6).
  2. Pengguna memasukkan pilihan menu dengan menggunakan tombol.
  3. Jika jumlah penarikan yang dipilih lebih besar dari saldo account pengguna, layar menampilkan pesan yang menyatakan dan memberitahu pengguna untuk memilih jumlah yang lebih kecil. ATM kemudian kembali ke Langkah 1. Jika jumlah penarikan yang dipilih kurang dari atau sama dengan saldo akun pengguna (yaitu, jumlah yang diterima), ATM melanjutkan ke Langkah 4. Jika pengguna memilih untuk membatalkan transaksi (pilihan 6), ATM akan menampilkan menu utama dan menunggu input pengguna.
  4. Jika cash dispenser mengandung cukup uang tunai, ATM melanjutkan ke Langkah 5. jika tidak, layar menampilkan pesan yang menunjukkan masalah dan memberitahu pengguna untuk memilih jumlah penarikan yang lebih kecil. ATM kemudian kembali ke Langkah 1.
  5. ATM ini mendebit jumlah penarikan dari account pengguna dalam database bank (yaitu, mengurangi jumlah penarikan dari saldo akun pengguna).
  6. Cash Dispenser membagikan sejumlah uang yang diinginkan kepada pengguna.
  7. Layar menampilkan pesan yang mengingatkan pengguna untuk mengambil uang.

fig 12.3. ATM withdrawl

Langkah-langkah berikut menjelaskan tindakan yang terjadi ketika pengguna memasukkan 3 untuk melakukan deposit (ketika menampilkan menu utama Gambar 12.2.):

  1. Layar meminta pengguna untuk memasukkan jumlah deposit atau ketik 0 (nol) untuk membatalkan.
  2. Pengguna memasukkan jumlah setoran atau 0 menggunakan tombol. [Catatan: Tombol tidak tidak mengandung titik desimal atau tanda dolar, sehingga user tidak dapat mengetik dolar riil jumlah (misalnya, $ 27,25). Sebaliknya, pengguna harus memasukkan jumlah deposit sebagai nomor sen (mis. 2725). ATM kemudian membagi angka ini dengan 100 untuk mendapatkan angka yang mewakili jumlah dolar (misalnya, 2725 ÷ 100 = 27,25).]
  3. Jika pengguna menentukan jumlah deposit, ATM melanjutkan ke Langkah 4. Jika pengguna memilih untuk membatalkan transaksi (dengan memasukkan 0), ATM menampilkan utama menu dan menunggu input pengguna.
  4. Layar menampilkan pesan yang mengatakan pengguna untuk memasukkan amplop deposito.
  5. Jika slot deposito menerima amplop deposito dalam waktu dua menit, lakukan kredit dari ATM sejumlah deposit ke account pengguna dalam database bank (yaitu, menambahkan jumlah deposit ke saldo account pengguna). [Catatan: Uang ini tidak segera tersedia untuk penarikan. Bank harus terlebih dahulu memverifikasi jumlah uang tunai dalam amplop deposito, dan setiap cek dalam amplop harus jelas (yaitu, uang yang harus ditransfer dari rekening penulis cek untuk memeriksa penerima akun). Ketika salah satu dari peristiwa ini terjadi, bank mengupdate saldo pengguna yang disimpan dalam databasenya. Hal ini terjadi secara independen dari Sistem ATM.] Jika slot deposito tidak menerima amplop deposito dalam hal ini jangka waktu 2 menit, layar menampilkan pesan bahwa sistem telah membatalkan transaksi karena tidak aktif. ATM kemudian menampilkan menu utama dan menunggu input pengguna.

Setelah sistem berhasil mengeksekusi transaksi, harus kembali ke menu utama sehingga pengguna dapat melakukan transaksi tambahan. Jika pengguna keluar sistem, layar akan menampilkan pesan terima kasih, kemudian menampilkan pesan selamat datang untuk pengguna berikutnya.

1.2. Menganalisa Sistem ATM

Biasanya, dokumen requirement adalah hasil dari proses rinci pengumpulan persyaratan, yang mungkin termasuk wawancara dengan calon pengguna dari sistem dan Spesialis di bidang yang berkaitan dengan sistem. Analis akan menggunakan informasi yang diperoleh untuk mengkompilasi sebuah daftar persyaratan sistem untuk memandu sistem desainer saat mereka merancang sistem.

Proses pengumpulan persyaratan adalah tugas utama dari tahap pertama dari siklus hidup perangkat lunak. Tahap ini biasanya meliputi: analisis, desain, implementasi, pengujian dan debugging, penyebaran, pemeliharaan.

Tahap analisis berfokus pada mendefinisikan masalah yang harus dipecahkan. Analis sistem mengumpulkan persyaratan yang menunjukkan masalah khusus untuk dipecahkan.

Untuk menangkap sistem yang diusulkan seperti apa, pengembang sering menggunakan teknik yang dikenal sebagai pemodelan use case. Proses ini mengidentifikasi kasus penggunaan sistem. Setiap use case menggambarkan skenario saat pengguna menggunakan sistem.

1.3. Use Case Diagram

Tujuan dibuat diagram use case adalah untuk menunjukkan jenis interaksi dimiliki pengguna dengan sistem tanpa memberikan rinciannya. Dalam sistem yang lebih besar, menggunakan diagram use case adalah alat yang sangat diperlukan yang membantu desainer sistem tetap fokus pada memuaskan kebutuhan pengguna.

fig 12.4. use case diagram for the ATM system from the user's perspectiveGambar 12.4 menunjukkan salah satu aktor, yang namanya, Pengguna (User), muncul di bawah aktor dalam diagram. UML memodelkan setiap use case digambarkan sebagai oval terhubung ke aktor dengan garis yang solid.

Selama tahap analisis, sistem desainer fokus pada pemahaman dokumen persyaratan untuk menghasilkan spesifikasi tingkat tinggi yang menggambarkan apa yang seharusnya dilakukan sistem . Output dari tahapan desain — desain spesifikasi — harus menentukan dengan jelas bagaimana sistem harus dibangun untuk memenuhi persyaratan ini.

1.4. Mendesain Sistem

Sebuah sistem adalah seperangkat komponen yang berinteraksi untuk memecahkan masalah. Setiap sistem memiliki struktur dan perilaku — desainer harus menentukan keduanya. System structure menggambarkan objek sistem dan hubungan antar mereka. Perilaku sistem (system behaviour) menggambarkan bagaimana perubahan sistem sebagai obyek berinteraksi satu sama lain.

UML 2 menentukan 13 jenis standar diagram untuk mendokumentasikan model sistem. Kami menuliskan disini hanya enam jenis diagram yang digunakan dalam penelitian. satu untuk memodelkan sistem struktur pada kasus kami, lima untuk memodelkan perilaku sistem lainnya. Keenam diagram tersebut adalah sebagai berikut :

  1. Use Case Diagrams.
  2. Class Diagrams.
  3. State Machine Diagrams.
  4. Activity diagrams.
  5. Communication Diagrams .
  6. Sequence diagrams.

Bab 2. Mengidentifikasi class-class yang terlibat

kami mengidentifikasi class yang dibutuhkan untuk membangun sistem dengan menganalisis kata benda dan frase kata benda yang muncul dalam dokumen persyaratan.

2.1. Mengidentifikasi class dalam sistem

Kami akan menggambarkan classclass ini menggunakan diagram class UML dan menerapkan classclass di Java.

Gambar 12.5 berisi daftar kata benda dan frase kata benda yang ditemukan dalam dokumen persyaratan. Kami mendaftar mereka dari kiri ke kanan dalam urutan di mana kami pertama kali menemukan daftar mereka.Kami hanya mendaftar bentuk tunggal dari masing-masing.

fig 12.5. nouns and noun phrases in the atm requirement documentKami membuat class hanya untuk kata benda dan frase kata benda yang memiliki arti signifikansi dalam Sistem ATM.

Daftar kata benda yang tidak dikonversi menjadi class :

  1. bank, karena bank bukan merupakan bagian dari sistem-ATM bank yang hanya ingin kita untuk membangun ATM.
  2. Customer dan User, mereka mewakili entitas luar — mereka penting karena mereka berinteraksi dengan sistem ATM kami, tapi kami tidak perlu memodelkan mereka sebagai kelas dalam perangkat lunak ATM.
  3. $20 bill dan deposit envelope, Mereka adalah fisik benda di dunia nyata, tapi mereka bukan bagian dari apa yang diotomatisasikan.
  4. money/funds dan balance, Dalam sistem ATM yang disederhanakan, yang mewakili berbagai jumlah “uang,” termasuk “saldo” akun,  sebagai atribut kelas tampaknya paling tepat.
  5. account number dan PIN, merupakan potongan informasi yang signifikan dalam sistem ATM. Mereka atribut penting dari sebuah rekening bank. Mereka tidak menunjukkan perilaku. Dengan demikian, kita dapat paling tepat memodelkan mereka sebagai atribut dari kelas account.

Daftar kata benda yang dikonversi menjadi class :

  1. Balance Inquiry
  2. Withdrawal
  3. Deposit
  4. ATM
  5. Screen
  6. keypad
  7. cash dispenser
  8. deposit slot
  9. account
  10. bank database

Kami memanfaatkan nama class dalam desain UML seperti yang akan kita lakukan ketika kita menulis kode Java yang sebenarnya yang mengimplementasikan desain kami. Jika nama class berisi lebih dari satu kata, kita menuliskan kata-kata itu digabung tanpa spasi dengan diawali huruf besar pada setiap kata-katanya (misalnya, MultipleWordName).

2.2. Pemodelan Class

Gambar 12.6 merupakan class ATM. Setiap class dimodelkan sebagai persegi panjang dengan tiga kompartemen.

fig 12.6. Representing a class in the uml using class diagram

Gambar 12.7 menunjukkan bagaimana class ATM dan class Withdrawal berhubungan satu sama lain. UML memungkinkan peniadaan atribut kelas dan operasi dengan cara ini untuk membuat diagram lebih mudah dibaca, bila perlu.

fig 12.7. Class diagram showing association among classBagian ini dari diagram berbunyi “satu objek kelas ATM mengeksekusi nol atau satu objek kelas Withdrawal“.

fig 12.8. Multiplicity typesNama Asosiasi adalah terarah/directional, seperti yang ditunjukkan oleh panah terisi. Kata currentTransaction pada akhir garis asosiasi Withdrawal pada Gambar. 12,7 adalah nama peran, mengidentifikasi peran obyek Withdrawal bermain dalam hubungannya dengan ATM. Nama peran currentTransaction menunjukkan bahwa obyek Penarikan berpartisipasi dalam Melaksanakan hubungan dengan sebuah objek dari kelas ATM yang merupakan transaksi yang saat ini sedang diproses oleh ATM. Perhatikan bahwa kita tidak menentukan nama peran untuk akhir ATM dari asosiasi Executes. Nama Peran dalam diagram kelas sering diabaikan ketika makna asosiasi jelas tanpa mereka.

fig 12.9. Class diagram showing composition relationship

Komposisi pada Gambar. 12,9 menunjukkan bahwa obyek kelas ATM terbentuk dari satu objek kelas Screen, satu objek kelas CashDispenser,  satu objek kelas Keypad  dan satu objek kelas DepositSlot.

fig 12.10. Class diagram for the ATM system modelGambar 12.10 menyajikan model grafis struktur system ATM itu.

Bab 3. Mengidentifikasi Atribut-atribut Class

Class memiliki atribut (data) dan operasi (perilaku).

3. 1. Identifikasi Atribut Class

Kita dapat mengidentifikasi banyak atribut dari kelas dalam sistem kami dengan mencari kata deskriptif dan frase dalam dokumen persyaratan. Gambar 12.11 daftar kata atau frasa dari dokumen persyaratan yang menggambarkan masing-masing class. Kami membentuk daftar ini dengan membaca dokumen persyaratan dan mengidentifikasi kata-kata atau frase yang mengacu pada karakteristik class dalam sistem.

fig 12.11. Descriptive words and phrase from the ATM requirements documents

3. 2. Memodelkan Atribut Class

Diagram class dalam Gambar. 12.12 mendaftar beberapa atribut dari class dalam sistem kita — kata deskriptif dan frase dalam Gambar. 12.11 membawa kita untuk mengidentifikasi atribut ini.

fig 12.12. Classes with atributesKami mendaftar nama setiap atribut dan memisahkan tipenya dengan titik dua (:), diikuti (dalam beberapa kasus) oleh tanda sama dengan (=) dan nilai awal.

hints software engineering opservation

Jenis atribut referensi —  dimodelkan lebih jelas sebagai asosiasi antara class yang memegang referensi dan class obyek yang menjadi titik acuan. Sebagai contoh, diagram class pada Gambar. 12.10 menunjukkan bahwa class BankDatabase  berpartisipasi dalam hubungan dengan komposisi nol atau lebih objek Akun.

Bab 4. Mengidentifikasi State dan Activities Class

Kita sekarang menunjukkan bagaimana atribut-atribut ini merepresentasikan state objek. Kita mengidentifikasi beberapa kunci state objek kita yang mungkin dapat ditempatinya dan mendiskusikan bagaimana objek mengubah keadaan (state) dalam menanggapi berbagai peristiwa yang terjadi dalam sistem. Kami juga membahas alur kerja, atau kegiatan (activities), objek-objek yang muncul di sistem ATM, dan kami menyajikan activities dari objek BalanceInquiry dan Withdrawal.

4. 1. Diagram State Machine

Keadaan obyek ditunjukkan oleh nilai-nilai atributnya pada waktu tertentu. Diagram keadaan mesin (biasa disebut diagram state machine) memodelkan beberapa keadaan dari sebuah objek dan menunjukkan dalam kondisi apa obyek mengubah keadaannya.

Gambar 12.13 adalah diagram keadaan sederhana yang memodelkan beberapa keadaan dari suatu obyek class ATM.

fig 12.13. State diagram for the ATM ObjectAnak panah (->)  menunjukkan transisi antar keadaan. Sebuah objek dapat bertransisi dari satu keadaan ke keadaan lain dalam menanggapi berbagai peristiwa yang terjadi dalam sistem.

hints 12.2 software engineering opservation

4. 2. Diagram Activity

Tidak seperti state diagram, diagram aktivitas memodelkan alur kerja suatu objek (urutan kejadian) selama eksekusi program. Diagram aktivitas pada Gambar. 12.14 memodelkan tindakan yang terlibat dalam melaksanakan suatu transaksi cek saldo (balance-inquiry).

fig 12.14. Activity diagram for a BalanceInquiry object

Gambar 12.15 menunjukkan diagram aktivitas untuk transaksi penarikan. Kami berasumsi bahwa objek Withdrawal (Penarikan) telah diberikan nomor akun yang valid. Kita tidak memodelkan account pengguna yang valid yang memilih penarikan dari menu utama atau ATM mengembalikan pengguna ke menu utama karena ini bukan tindakan yang dilakukan oleh objek Withdrawal.

fig 12.15.Activity diagram for a withdrawal transactions

Bab 5. Mengidentifikasi Operasi/Method Class

Kita dapat memperoleh banyak operasi kelas dengan memeriksa kata kerja kunci dan frase kata kerja dalam dokumen persyaratan. Frase-frase kata kerja pada Gambar. 12.16 membantu kita menentukan operasi masing-masing kelas.

fig 12.16.Verbs and verb phrases for each class in the ATM system

5. 1. Memodelkan Operasi

Untuk mengidentifikasi operasi, kita meneliti frase kata kerja yang terdaftar untuk masing-masing kelas pada Gambar. 12.16. Frase  “executes financial transactions” yang terkait dengan kelas ATM menyiratkan bahwa kelas ATM menginstruksikan untuk mengeksekusi transaksi. Oleh karena itu, kelas BalanceInquiryWithdrawal dan Deposit masing-masing perlu operasi untuk menyediakan layanan ini ke ATM. Kami menempatkan operasi ini (yang kita namakan execute) dalam kompartemen ketiga dari tiga kelas transaksi di diagram kelas yang diperbarui pada Gambar. 12.17. Selama sesi ATM, obyek ATM akan memanggil operasi transaksi ini saat diperlukan.

fig 12.17.Classes in the ATM system with attributes and operations

UML merepresentasikan operasi (yaitu, metode) dengan daftar nama operasi, diikuti dengan daftar parameter yang dipisahkan tanda-koma dalam kurung, titik dua dan tipe kembalian:

operationName( parameter1, parameter2, …, parameterN ) : return type

Setiap parameter dalam daftar parameter yang dipisahkan tanda-koma terdiri dari nama parameter, diikuti dengan titik dua dan tipe parameter:

parameterName : parameterType

5. 2. Otentikasi Pengguna

Class BankDatabase membutuhkan operasi yang menyediakan layanan otentikasi ke ATM. Kami menempatkan operasi authenticateUser di kompartemen ketiga class BankDatabase (Gambar 12.17). Namun, sebuah objek class Account , bukan class BankDatabase, menyimpan nomor rekening dan PIN yang harus diakses untuk mengotentikasi pengguna, sehingga class Account harus menyediakan layanan untuk memvalidasi PIN yang diperoleh melalui input pengguna terhadap PIN yang disimpan dalam objek Account. Oleh karena itu, kita menambahkan operasi validatePIN ke class Account.

5. 3. Operasi Lainnya dari Class BankDatabase dan Class Account

Gambar 12.16 berisi daftar beberapa frase kata kerja tambahan untuk class BankDatabase: “retrieves an account balance (Mengambil saldo rekening),” “credits a deposit amount to an account” dan “debits a withdrawal amount from an account (mendebit jumlah penarikan dari akun).” Seperti “authenticates a user,”” ungkapan-ungkapan yang tersisa mengacu layanan yang database harus sediakan ke class ATM, karena database memegang semua data akun yang digunakan untuk otentikasi pengguna dan melakukan transaksi ATM. Rekening bank berisi informasi sensitif, kami tidak mengijinkan ATM untuk mengakses rekening secara langsung. Database bertindak sebagai perantara antara ATM dan data rekening, sehingga mencegah akses yang tidak sah. Seperti yang akan kita lihat dalam pembahasan berikutnya, class ATM memanggil operasi class BankDatabase, masing-masing yang pada gilirannya memanggil operasi dengan nama yang sama dalam class Account.

5. 4. Mendapatkan Saldo

Ungkapan “retrieves an account balance (mengambil saldo akun)” menunjukkan bahwa class BankDatabase dan Account masing-masing memerlukan operasi getBalance. Untuk memungkinkan objek dalam sistem mendapatkan setiap atribut balance secara individual, kita menambahkan operasi getAvailableBalance dan getTotalBalance ke kompartemen ketiga class BankDatabase dan Account (Gambar 12.17).

5. 5. Kredit dan Debet pada Akun

Frase “credits a deposit amount to an account (kredit sejumlah deposit ke akun)” dan “debits a withdrawal amount from an account (mendebit sejumlah penarikan dari akun)” menunjukkan bahwa class BankDatabase dan Account harus melakukan operasi untuk memperbarui account selama penyetoran dan penarikan.

5. 6. Konfirmasi Deposit Dilakukan Oleh Sistem Perbankan Lain

Jika ini adalah sistem ATM nyata, class BankDatabase dan Account juga akan menyediakan seperangkat operasi untuk memungkinkan sistem perbankan lain untuk memperbarui saldo account pengguna setelah mengkonfirmasi/menerima atau menolak seluruh atau sebagian dari deposit. Kami tidak memasukkan mereka dalam diagram class kami atau implementasi kami karena mereka berada di luar lingkup studi kasus.

5. 7. Menampilkan Pesan

Class Screen “menampilkan pesan kepada pengguna” beberapa kali dalam sesi ATM. Kami menyebut operasi ini (displayMessage) di kompartemen ketiga class Screen dalam diagram class kami (Gambar 12.17 ) .

5. 8. Input Keyboard

Dari frase “receives numeric input from the user (menerima input numerik dari pengguna)” yang terdaftar pada class Keypad pada Gambar 12.16. , kami menyimpulkan bahwa class Keypad harus melakukan operasi getInput. Karena tombol ATM , tidak seperti keyboard komputer , hanya berisi angka 0-9 , kita menetapkan bahwa operasi ini mengembalikan nilai integer .

5. 9. Pemberian Uang Tunai

Gambar 12.16 juga mendaftar “dispenses cash (membagikan uang tunai)” untuk class CashDispenser. Oleh karena itu, kita menciptakan operasi dispenseCash dan mendaftarnya di bawah class CashDispenser pada Gambar. 12.17. Class CashDispenser juga “indicates whether it contains enough cash to satisfy a withdrawal request. (menunjukkan apakah mengandung cukup uang untuk memenuhi permintaan penarikan).” Jadi, kami menyertakan operasi isSufficientCashAvailable, sebuah operasi yang mengembalikan nilai tipe Boolean pada UML, di class CashDispenser.

Gambar 12.16 juga mendaftar “receives a deposit envelope (menerima amplop deposit)” untuk class DepositSlot. Slot deposito harus menunjukkan apakah telah menerima amplop, jadi kami menempatkan operasi isEnvelopeReceived, yang mengembalikan nilai Boolean, di kompartemen ketiga class DepositSlot.

5. 10. Class ATM

Kami tidak mendaftar setiap operasi untuk class ATM untuk saat ini.

5. 11. Mengidentifikasi dan Memodelkan Parameter Operasi untuk Class BankDatabase

Kami mengidentifikasi parameter operasi dengan memeriksa data apa yang dibutuhkan operasi untuk melakukan tugasnya.

Gambar 12.18, menunjukkan daftar paramater yang diperlukan untuk masing-masing operasi pada class BankDatabase.

fig 12.18.Classes BankDatabase with operation parameters

5. 12. Mengidentifikasi dan Memodelkan Parameter Operasi untuk Class Account

Gambar 12.19 memodelkan parameter operasi class Account. Operasi class Account tidak memerlukan parameter nomor akun untuk membedakan antara  masing-masing Account, karena operasi ini dapat dipanggil hanya pada objek Account tertentu.

fig 12.19. Class Account with operation parameters

5. 13. Mengidentifikasi dan Memodelkan Parameter Operasi untuk Class Screen

Gambar 12.20 memodelkan class Screen dengan parameter yang ditentukan untuk operasi displayMessage.

fig 12.20.Class Screen with operation parameters

5. 14. Mengidentifikasi dan Memodelkan Parameter Operasi untuk Class Cash Dispenser

Gambar 12.21 menetapkan bahwa operasi dispenseCash pada class CashDispenser membutuhkan parameter amount bertipe Double untuk menunjukkan jumlah uang tunai ( dalam dolar ) untuk dibagikan. Operasi isSufficientCashAvailable juga membutuhkan parameter amount bertipe Double untuk menunjukkan jumlah uang tunai yang bersangkutan.

fig 12.21.Class CashDispenser with operation parameters

5. 15. Mengidentifikasi dan Memodelkan Parameter Operasi untuk Class Lain

Kami tidak membahas parameter untuk operasi execute pada class BalanceInquiry, Withdrawal  dan Deposit, operasi getInput dari class Keypad dan operasi isEnvelopeReceived dari class DepositSlot. Pada titik ini dalam proses desain, kami tidak dapat menentukan apakah operasi ini memerlukan data tambahan, sehingga kita meninggalkan parameter mereka dalam daftar kosong. Nanti, kita mungkin memutuskan untuk menambahkan parameter.

Bab 6. Menunjukkan Kolaborasi Antar Objek

Ketika dua benda saling berkomunikasi untuk menyelesaikan tugas, mereka mengatakan untuk berkolaborasi. Objek melakukan ini dengan menerapkan operasi satu sama lain. Kolaborasi terdiri dari obyek suatu kelas mengirim pesan ke sebuah objek dari kelas lain. Pesan yang dikirim di Java melalui pemanggilan metode.

6. 1. Mengidentifikasi Kolaborasi Dalam Sistem

Kami mengidentifikasi satu objek sebagai pengirim objek dan lain sebagai objek penerima. Kami kemudian memilih salah satu obyek yang menerima operasi ( diidentifikasi dalam Bab 5 ) yang harus dipanggil dengan mengirimkan objek untuk menghasilkan perilaku yang tepat.

Sebagai contoh, ATM menampilkan pesan selamat datang saat idle. Kita tahu bahwa obyek class Screen menampilkan pesan ke pengguna melalui operasi displayMessage. Jadi , kami memutuskan bahwa sistem dapat menampilkan pesan selamat datang dengan menggunakan sebuah kolaborasi antara ATM dan Screen di mana ATM mengirimkan pesan displayMessage kepada objek Screen dengan menerapkan operasi displayMessage pada class Screen.

Gambar 12.22 berisi daftar kolaborasi yang dapat diturunkan dari dokumen persyaratan. Untuk setiap pengiriman objek, kita mendaftar kolaborasi dalam urutan di mana mereka pertama kali terjadi selama sesi ATM (yaitu , urutan di mana mereka dibahas dalam dokumen persyaratan ). Kita mendaftar setiap kolaborasi yang melibatkan pengirim yang unik, pesan dan penerima hanya sekali, meskipun kolaborasi dapat terjadi di beberapa waktu yang berbeda sepanjang sesi ATM. Misalnya, baris pertama pada Gambar 12.22 menunjukkan bahwa ATM bekerja sama dengan Screen setiap kali ATM perlu untuk menampilkan pesan ke pengguna.

fig 12.22. Collaborations in the ATM System

6. 2. Diagram Interaksi

UML menyediakan beberapa jenis diagram interaksi yang memodelkan perilaku sistem dengan memodelkan bagaimana objek berinteraksi. Communication Diagram (Diagram komunikasi) menekankan objek yang berpartisipasi dalam kolaborasi. Seperti diagram komunikasi, Sequence Diagram (diagram urutan) menunjukkan kolaborasi antara objek-objek, tetapi menekankan pada pesan yang dikirim antara objek dari waktu ke waktu.

6. 3. Diagram Interaksi

Gambar 12.23 menunjukkan diagram komunikasi yang memodelkan ATM saat mengeksekusi BalanceInquiry. Obyek dimodelkan dalam UML sebagai persegi panjang yang berisi nama-nama dalam bentuk ObjectName: ClassName.

fig 12.23. Communication diagram of the ATM Executing a balance inquiry

Dalam Gambar. 12.23, ATM memanggil method execute dari BalanceInquiry dan tidak bisa mengirim pesan lain sampai selesai mengeksekusi dan mengembalikan kontrol ke ATM. [Catatan: Jika ini adalah panggilan asynchronous, diwakili oleh anak panah tidak terisi (->), obyek pengiriman tidak akan harus menunggu untuk objek penerima untuk mengembalikan kontrol – ia akan terus mengirimkan pesan tambahan segera setelah panggilan asynchronous. Panggilan Asynchronous diimplementasikan di Java menggunakan teknik yang disebut multithreading.

6. 4. Urutan Pesan Dalam Diagram Komunikasi

Gambar 12.24 menunjukkan diagram komunikasi yang memodelkan interaksi antara objek dalam sistem ketika sebuah objek dari class BalanceInquiry memanggil execute.

Nomor di sebelah kiri nama pesan menunjukkan urutan di mana pesan dilewatkan . Urutan pesan dalam diagram komunikasi berlangsung dalam urutan numerik dari yang terkecil ke yang terbesar.

fig 12.24. Communication diagram for executing a balance inquiry

Gambar 12.24 memodelkan dua pesan tambahan yang disampaikan dari BankDatabase ke sebuah Account ( pesan 1.1 dan pesan 2.1 ). Untuk menyediakan ATM dengan dua saldo Account pengguna( seperti yang diminta oleh pesan 1 dan 2 ) , BankDatabase harus melewatkan pesan getAvailableBalance dan getTotalBalance kepada Account pengguna. Pesan tersebut dilewatkan dalam penanganan pesan lain disebut pesan bersarang (nested messages).

Skema penomoran bersarang yang digunakan dalam diagram komunikasi membantu memperjelas tepatnya kapan dan dalam konteks apa setiap pesan dilewatkan.

6. 5. Sequence Diagram

Sebuah sequence diagram (diagram urutan) membantu memodelkan waktu kolaborasi lebih jelas. Gambar 12.25 menunjukkan diagram urutan untuk memodelkan urutan interaksi yang terjadi ketika Withdrawal dieksekusi. Garis putus-putus memanjang ke bawah dari persegi panjang objek adalah garis hidup objek, yang merepresentasikan perkembangan waktu. Aksi terjadi di sepanjang garis hidup objek, dalam urutan kronologis dari atas ke bawah, tindakan di bagian atas terjadi sebelum tindakan di bagian bawahnya.

Urutan pesan pada Gambar 12.25 dimulai ketika Withdrawal yang meminta pengguna untuk memilih jumlah penarikan dengan mengirimkan pesan displayMessage untuk Screen. Withdrawal kemudian mengirimkan pesan getInput ke Keypad, yang memperoleh masukan dari pengguna.

fig 12.25. Sequence diagram that models a Withdrawal executing

Setelah mendapatkan jumlah penarikan, Withdrawal mengirimkan pesan getAvailableBalance ke BankDatabase, yang pada gilirannya mengirim pesan getAvailableBalance ke Account pengguna. Dengan asumsi bahwa account pengguna memiliki cukup uang yang tersedia untuk memungkinkan transaksi, Withdrawal selanjutnya mengirimkan pesan isSufficientCashAvailable ke CashDispenser. Dengan asumsi bahwa ada cukup uang yang tersedia , Withdrawal mengurangi saldo akun pengguna (yaitu, totalBalance dan availableBalance) dengan mengirimkan pesan debit untuk BankDatabase tersebut. BankDatabase merespon dengan mengirimkan pesan debit ke Account pengguna. Akhirnya, Withdrawal mengirimkan pesan dispenseCash ke CashDispenser dan pesan displayMessage untuk Screen, memberitahu pengguna untuk mengambil uang tunai dari mesin.

File Diagram UML bisa didownload dari dropbox https://dl.dropboxusercontent.com/u/10525544/Diagram%20UML%20Sistem%20ATM.zip.

Saya membuatnya dengan software argoUML yang bisa didownload http://argouml.tigris.org/ file project bisa diimport dari file yang berekstensi .zargo didalam file zip yang disertakan.

Bab 6. Menunjukkan Kolaborasi antara Objek [Automated Teller Machine (ATM)] – Bagian 3

5. Sequence Diagram

Diagram komunikasi menekankan peserta dalam kolaborasi, tetapi untuk memodelkan waktu mereka sedikit canggung. Sebuah sequence diagram (diagram urutan) membantu memodelkan waktu kolaborasi lebih jelas. Gambar 12.25 menunjukkan diagram urutan untuk memodelkan urutan interaksi yang terjadi ketika Withdrawal dieksekusi. Garis putus-putus memanjang ke bawah dari persegi panjang objek adalah garis hidup objek, yang merepresentasikan perkembangan waktu. Aksi terjadi di sepanjang garis hidup objek, dalam urutan kronologis dari atas ke bawah, tindakan di bagian atas terjadi sebelum tindakan di bagian bawahnya.

Pesan yang lewat dalam diagram urutan mirip dengan pesan yang lewat dalam diagram komunikasi. Sebuah anak panah yang solid dengan panah diisi memanjang dari objek pengirim ke objek penerima merupakan pesan antara dua objek. Panah menunjuk ke suatu aktivasi pada garis hidup objek penerima. Aktivasi, ditampilkan sebagai persegi panjang vertikal tipis, menunjukkan bahwa obyek tersebut mengeksekusi. Ketika sebuah  mengembalikan kontrol, pesan kembalian, direpresentasikan sebagai garis putus-putus dengan anak (-> ) panah , memanjang dari aktivasi objek yang mengembalikan kontrol ke aktivasi dari objek yang awalnya mengirimkan pesan. Untuk menghilangkan kekacauan , kita menghilangkan panah pesan-kembalian, UML memungkinkan praktek ini untuk membuat diagram lebih mudah dibaca . Seperti diagram komunikasi, diagram urutan dapat menunjukkan parameter pesan antara tanda kurung setelah nama pesan.

Urutan pesan pada Gambar 12.25 dimulai ketika Withdrawal yang meminta pengguna untuk memilih jumlah penarikan dengan mengirimkan pesan displayMessage untuk Screen. Withdrawal kemudian mengirimkan pesan getInput ke Keypad, yang memperoleh masukan dari pengguna. Kita sudah memodelkan kontrol logika yang terlibat dalam Withdrawal pada diagram aktivitas Gambar 12.15, jadi kami tidak menunjukkan logika ini dalam diagram urutan Gambar 12.25 . Sebaliknya, kita memodelkan skenario terbaik – kasus di mana saldo akun pengguna adalah lebih besar dari atau sama dengan jumlah penarikan, dan dispenser tunai mengandung jumlah uang tunai yang cukup untuk memenuhi permintaan tersebut. Anda dapat memodelkan kontrol logika dalam urutan diagram UML dengan frame (yang tidak tercakup dalam studi kasus ini ). Untuk gambaran singkat dari frame UML , kunjungi http://www.agilemodeling.com/style/frame.htm

fig 12.25. Sequence diagram that models a Withdrawal executing

Setelah mendapatkan jumlah penarikan, Withdrawal mengirimkan pesan getAvailableBalance ke BankDatabase, yang pada gilirannya mengirim pesan getAvailableBalance ke Account pengguna. Dengan asumsi bahwa account pengguna memiliki cukup uang yang tersedia untuk memungkinkan transaksi, Withdrawal selanjutnya mengirimkan pesan isSufficientCashAvailable ke CashDispenser. Dengan asumsi bahwa ada cukup uang yang tersedia , Withdrawal mengurangi saldo akun pengguna (yaitu, totalBalance dan availableBalance) dengan mengirimkan pesan debit untuk BankDatabase tersebut. BankDatabase merespon dengan mengirimkan pesan debit ke Account pengguna. Akhirnya, Withdrawal mengirimkan pesan dispenseCash ke CashDispenser dan pesan displayMessage untuk Screen, memberitahu pengguna untuk mengambil uang tunai dari mesin.

Kami telah mengidentifikasi kolaborasi antara objek-objek dalam sistem ATM dan memodelkan beberapa dari mereka menggunakan UML diagram interaksi – diagram komunikasi dan sequence diagram. Dalam Bab selanjutnya , kita meningkatkan struktur model kita untuk menyelesaikan pendahuluan desain berorientasi obyek, maka kita mulai menerapkan sistem ATM di Java.

Bab 6. Menunjukkan Kolaborasi antara Objek [Automated Teller Machine (ATM)] – Bagian 2

2. Diagram interaksi

Sekarang kita telah mengidentifikasi kemungkinan kerjasama antara objek sistem ATM kita, mari memodelkan secara grafis interaksi ini menggunakan UML. UML menyediakan beberapa jenis diagram interaksi yang memodelkan perilaku sistem dengan memodelkan bagaimana objek berinteraksi. Communication Diagram (Diagram komunikasi) menekankan objek yang berpartisipasi dalam kolaborasi. Seperti diagram komunikasi, Sequence Diagram (diagram urutan) menunjukkan kolaborasi antara objek-objek, tetapi menekankan pada pesan yang dikirim antara objek dari waktu ke waktu.

3. Diagram komunikasi

Gambar 12.23 menunjukkan diagram komunikasi yang memodelkan ATM saat mengeksekusi BalanceInquiry. Obyek dimodelkan dalam UML sebagai persegi panjang yang berisi nama-nama dalam bentuk ObjectName: ClassName. [Catatan: Menentukan nama setiap objek dalam komunikasi diagram dianjurkan ketika memodelkan beberapa objek dari jenis yang sama.] Mengkomunikasikan benda yang terhubung dengan garis-garis yang solid, dan pesan yang lewat di antara objek di sepanjang garis-garis ini ke arah yang ditunjukkan oleh anak panah. Nama pesan yang muncul di samping panah, adalah nama suatu operasi (yaitu, suatu method dalam Java) termasuk objek penerima. Pikirkan nama ini sebagai “layanan” yang menyatakan bahwa objek penerima operasi (execute) menyediakan untuk mengirim objek (klien).

fig 12.23. Communication diagram of the ATM Executing a balance inquiryAnak panah dengan segitiga terisi mewakili pesan – atau panggilan sinkronisasi – di UML dan pemanggilan metode di Java. Panah ini menunjukkan bahwa aliran kontrol dari objek pengirim (ATM) ke objek penerima (BalanceInquiry). Karena ini adalah panggilan sinkron, obyek pengiriman tidak dapat mengirim pesan lain, atau melakukan apa-apa, sampai objek penerima memproses pesan dan mengembalikan kontrol ke objek pengirim. Pengirim hanya menunggu. Dalam Gambar. 12.23, ATM memanggil method execute dari BalanceInquiry dan tidak bisa mengirim pesan lain sampai selesai mengeksekusi dan mengembalikan kontrol ke ATM. [Catatan: Jika ini adalah panggilan asynchronous, diwakili oleh anak panah tidak terisi (->), obyek pengiriman tidak akan harus menunggu untuk objek penerima untuk mengembalikan kontrol – ia akan terus mengirimkan pesan tambahan segera setelah panggilan asynchronous. Panggilan Asynchronous diimplementasikan di Java menggunakan teknik yang disebut multithreading, yang dibahas dalam Bab 26.]

4. Urutan Pesan dalam Diagram Komunikasi

Gambar 12.24 menunjukkan diagram komunikasi yang memodelkan interaksi antara objek dalam sistem ketika sebuah objek dari class BalanceInquiry memanggil execute. Kami berasumsi bahwa atribut accountNumber pada objek berisi nomor rekening dari pengguna saat ini. Kolaborasi pada Gambar 12.24 dimulai setelah ATM mengirimkan pesan execute ke BalanceInquiry (yaitu, interaksi yangdimodelkan pada Gambar 12.23 ) . Nomor di sebelah kiri nama pesan menunjukkan urutan di mana pesan dilewatkan . Urutan pesan dalam diagram komunikasi berlangsung dalam urutan numerik dari yang terkecil ke yang terbesar . Dalam diagram ini, penomoran dimulai dengan message 1 dan berakhir dengan message 3. BalanceInquiry pertama mengirimkan pesan getAvailableBalance ke BankDatabase ( pesan 1 ) , kemudian mengirimkan pesan getTotalBalance ke BankDatabase ( pesan 2 ) . Dalam kurung setelah nama pesan , kita dapat menentukan daftar yang dipisahkan koma dari nama-nama parameter yang dikirim dengan pesan (yaitu , argumen dalam pemanggilan metode Java ) – BalanceInquiry melewatkan atribut accountNumber dalam pesannya untuk BankDatabase untuk menunjukkan informasi saldo Account mana yang harus diambil. Ingat dari Gambar 12.18 bahwa operasi getAvailableBalance dan getTotalBalance class BankDatabase masing-masing memerlukan parameter untuk mengidentifikasi akun. BalanceInquiry berikutnya menampilkan availableBalance dan totalBalance kepada pengguna dengan melewati pesan displayMessage ke Screen ( pesan 3 ) yang mencakup parameter yang menunjukkan pesan yang akan ditampilkan.

fig 12.24. Communication diagram for executing a balance inquiry

Gambar 12.24 memodelkan dua pesan tambahan yang disampaikan dari BankDatabase ke sebuah Account ( pesan 1.1 dan pesan 2.1 ). Untuk menyediakan ATM dengan dua saldo Account pengguna( seperti yang diminta oleh pesan 1 dan 2 ) , BankDatabase harus melewatkan pesan getAvailableBalance dan getTotalBalance kepada Account pengguna. Pesan tersebut dilewatkan dalam penanganan pesan lain disebut pesan bersarang (nested messages). UML merekomendasikan menggunakan skema penomoran desimal untuk menunjukkan pesan bersarang . Sebagai contoh, pesan 1.1 adalah pesan pertama bersarang dalam pesan 1, BankDatabase melewati pesan getAvailableBalance selama BankDatabase memproses pesan dengan nama yang sama. [ Catatan : Jika BankDatabase diperlukan untuk melewati pesan bersarang kedua saat memproses pesan 1, pesan kedua akan diberi nomor 1.2 . ] Sebuah pesan dapat diteruskan hanya jika semua pesan bersarang dari pesan sebelumnya telah berlalu . Misalnya, BalanceInquiry melewati 3 pesan hanya setelah pesan 2 dan 2,1 telah berlalu , dalam urutan itu.

Skema penomoran bersarang yang digunakan dalam diagram komunikasi membantu memperjelas tepatnya kapan dan dalam konteks apa setiap pesan dilewatkan. Sebagai contoh, jika kita menomori pesan pada Gambar 12.24 menggunakan penomoran skema datar ( yaitu , 1 , 2 , 3 , 4 , 5 ) , seseorang melihat diagram mungkin tidak dapat menentukan bahwa BankDatabase melewati pesan getAvailableBalance ( pesan 1.1 ) ke Account selama BankDatabase mengolah pesan 1 , sebagai lawan setelah menyelesaikan pengolahan pesan 1. Angka-angka desimal bersarang membuat jelas bahwa pesan getAvailableBalance kedua ( pesan 1.1 ) akan diteruskan ke Account dalam penanganan pesan getAvailableBalance pertama ( pesan 1 ) oleh BankDatabase tersebut .