You are on page 1of 121

PENDAHULUAN

Java adalah bahasa pemrograman yang dapat dijalankan di berbagai komputer termasuk telepon genggam. Bahasa ini awalnya dibuat oleh James Gosling saat masih bergabung di Sun Microsystems saat ini merupakan bagian dari Oracle dan dirilis tahun 1995. Bahasa ini banyak mengadopsi sintaksis yang terdapat pada C dan C++ namun dengan sintaksis model objek yang lebih sederhana serta dukungan rutin-rutin aras bawah yang minimal. Aplikasi-aplikasi berbasis java umumnya dikompilasi ke dalam p-code (bytecode) dan dapat dijalankan pada berbagai Mesin Virtual Java (JVM). Java merupakan bahasa pemrograman yang bersifat umum/nonspesifik (general purpose), dan secara khusus didisain untuk memanfaatkan dependensi implementasi seminimal mungkin. Karena fungsionalitasnya yang memungkinkan aplikasi java mampu berjalan di beberapa platform sistem operasi yang berbeda, java dikenal pula dengan slogannya, "Tulis sekali, jalankan di mana pun". Saat ini java merupakan bahasa pemrograman yang paling populer digunakan, dan secara luas dimanfaatkan dalam pengembangan berbagai jenis perangkat lunak aplikasi ataupun aplikasi berbasis web. SEJARAH PERKEMBANGAN JAVA Bahasa pemrograman Java terlahir dari The Green Project, yang berjalan selama 18 bulan, dari awal tahun 1991 hingga musim panas 1992. Proyek tersebut belum menggunakan versi yang dinamakan Oak. Proyek ini dimotori oleh Patrick Naughton, Mike Sheridan, James Gosling dan Bill Joy, beserta sembilan pemrogram lainnya dari Sun Microsystems. Salah satu hasil proyek ini adalah maskot Duke yang dibuat oleh Joe Palrang. Pertemuan proyek berlangsung di sebuah gedung perkantoran Sand Hill Road di Menlo Park. Sekitar musim panas 1992 proyek ini ditutup dengan menghasilkan sebuah program Java Oak pertama, yang ditujukan sebagai pengendali sebuah peralatan dengan teknologi layar sentuh (touch screen), seperti pada PDA sekarang ini. Teknologi baru ini dinamai "*7" (Star Seven).

Rangkuman Aplikasi dan Basis Data

Page 1

Setelah era Star Seven selesai, sebuah anak perusahaan Tv kabel tertarik ditambah beberapa orang dari proyek The Green Project. Mereka memusatkan kegiatannya pada sebuah ruangan kantor di 100 Hamilton Avenue, Palo Alto. Perusahaan baru ini bertambah maju: jumlah karyawan meningkat dalam waktu singkat dari 13 menjadi 70 orang. Pada rentang waktu ini juga ditetapkan pemakaian Internet sebagai medium yang menjembatani kerja dan ide di antara mereka. Pada awal tahun 1990-an, Internet masih merupakan rintisan, yang dipakai hanya di kalangan akademisi dan militer. Mereka menjadikan perambah (browser) Mosaic sebagai landasan awal untuk membuat perambah Java pertama yang dinamai Web Runner, terinsipirasi dari film 1980-an, Blade Runner. Pada perkembangan rilis pertama, Web Runner berganti nama menjadi Hot Java.Pada sekitar bulan Maret 1995, untuk pertama kali kode sumber Java versi 1.0a2 dibuka. Kesuksesan mereka diikuti dengan untuk pemberitaan pertama kali pada surat kabar San Jose Mercury News pada tanggal 23 Mei 1995. Sayangnya terjadi perpecahan di antara mereka suatu hari pada pukul 04.00 di sebuah ruangan hotel Sheraton Palace. Tiga dari pimpinan utama proyek, Eric Schmidt dan George Paolini dari Sun Microsystems bersama Marc Andreessen, membentuk Netscape. Nama Oak, diambil dari pohon oak yang tumbuh di depan jendela ruangan kerja "Bapak Java", James Gosling. Nama Oak ini tidak dipakai untuk versi release Java karena sebuah perangkat lunak lain sudah terdaftar dengan merek dagang tersebut, sehingga diambil nama penggantinya menjadi "Java". Nama ini diambil dari kopi murni yang digiling langsung dari biji (kopi tubruk) kesukaan Gosling. Konon kopi ini berasal dari Pulau Jawa. Jadi nama bahasa pemrograman Java tidak lain berasal dari kata Jawa (bahasa Inggris untuk Jawa adalah Java).

Rangkuman Aplikasi dan Basis Data

Page 2

BAB I Latar Belakang Java

1. Platform Independent Platform independent berarti program yang ditulis dalam bahasa Java dapat dengan mudah dipindahkan antar berbagai jenis sistem operasi dan berbagai jenis arsitektur komputer. Aspek ini sangat penting untuk dapat mencapai tujuan Java sebagai bahasa pemrograman Internet di mana sebuah program akan dijalankan oleh berbagai jenis komputer dengan berbagai jenis sistem operasi. Sifat ini berlaku untuk level source code dan binary code dari program Java. Berbeda dengan bahasa C dan C++, semua tipe data dalam bahasa Java mempunyai ukuran yang konsisten di semua jenis platform. Dengan kelebihan ini pemrogram cukup menulis sebuah program Java dan dikompilasi (diubah, dari bahasa yang dimengerti manusia menjadi bahasa mesin / bytecode) sekali lalu hasilnya dapat dijalankan di atas beberapa platform tanpa perubahan. Kelebihan ini memungkinkan sebuah program berbasis java dikerjakan diatas operating system Linux tetapi dijalankan dengan baik di atas Microsoft Windows. Platform yang didukung sampai saat ini adalah Microsoft Windows, Linux, Mac OS dan Sun Solaris. Penyebanya adalah setiap sistem operasi menggunakan programnya sendiri-sendiri (yang dapat diunduh dari situs Java) untuk meninterpretasikan bytecode tersebut. Source code program Java sendiri tidak perlu dirubah sama sekali jika Anda ingin mengkompile ulang di platform lain. Hasil dari mengkompile source code Java bukanlah kode mesin atau instruksi prosesor yang spesifik terhadap mesin tertentu, melainkan berupa bytecode yang berupa file berekstensi .class. Bytecode tersebut dapat langsung Anda eksekusi di tiap platform yang dengan menggunakan Java Virtual Machine (JVM) sebagai interpreter terhadap bytecode tersebut. JVM sendiri adalah sebuah aplikasi yang berjalan di atas sebuah sistem operasi dan menerjemahkan bytecode program Java dan mengeksekusinya, sehingga secara konsep bisa

Rangkuman Aplikasi dan Basis Data

Page 3

dianggap sebagai sebuah interpreter. Dengan cara ini, sebuah program Java yang telah dikompilasi akan dapat berjalan di platform mana saja, asalkan ada JVM di sana. Kompiler dan interpreter untuk program Java berbentuk Java Development Kit (JDK) yang diproduksi oleh Sun Microsystems. JDK ini dapat didownload gratis dari situs java.sun.com. Interpreter untuk program Java sendiri sering juga disebut Java Runtime atau Java Virtual Machine. Interpreter Java, tanpa kompilernya, disebut Java Runtime Environment (JRE) dapat didownload juga di situs yang sama. Untuk mengembangkan program Java dibutuhkan JDK, sementara jika hanya ingin menjalankan bytecode Java cukup dengan JRE saja. Namun untuk mengeksekusi applet (sebuah bytecode Java juga) Anda biasanya tidak perlu lagi mendownload JRE karena browser yang Java-enabled telah memiliki JVM sendiri. 2. OOP (Object Oriented Programming - Pemrogram Berorientasi Objek)

Java adalah bahasa pemrograman berorientasi objek. Pemrograman berorientasi objek secara gamblang adalah teknik untuk mengorganisir program dan dapat dilakukan dengan hampir semua bahasa pemrograman. Namun Java sendiri telah

mengimplementasikan berbagai fasilitas agar seorang programer dapat mengoptimalkan teknik pemrograman berorientasi objek. Sedikit perbandingan tambahan dengan bahasa C dan C++, Java banyak mewarisi konsep orientasi objek dari C++ namun dengan menghilangkan aspek-aspek kerumitan dalam bahasa C++ tanpa mengurangi kekuatannya. Hal ini mempermudah programer pemula untuk mempelajari Java namun mengurangi keleluasaan programer berpengalaman dalam mengutak-atik sebuah program. Di balik kemudahan yang ditawarkan Java, luasnya fasilitas library Java sendiri membuat seorang programer membutuhkan waktu yang tidak singkat untuk dapat menguasai penggunaan library-library tersebut.

3. Library

Rangkuman Aplikasi dan Basis Data

Page 4

Selain kompiler dan interpreter, bahasa Java sendiri memiliki library yang cukup besar yang dapat mempermudah Anda dalam membuat sebuah aplikasi dengan cepat. Library ini sudah mencakup untuk grafik, desain user interface, kriptografi, jaringan, suara, database, dan lain-lain. Kelengkapan perpustakaan ini ditambah dengan keberadaan komunitas Java yang besar yang terus menerus membuat perpustakaan-perpustakaan baru untuk melingkupi seluruh kebutuhan pembangunan aplikasi.

4. Bergaya C++ Memiliki sintaks seperti bahasa pemrograman C++ sehingga menarik banyak pemrogram C++ untuk pindah ke Java. Saat ini pengguna Java sangat banyak, sebagian besar adalah pemrogram C++ yang pindah ke Java. Universitas-universitas di Amerika Serikat juga mulai berpindah dengan mengajarkan Java kepada murid-murid yang baru karena lebih mudah dipahami oleh murid dan dapat berguna juga bagi mereka yang bukan mengambil jurusan komputer.

5. Tulis sekali, jalankan di mana saja Masih ada beberapa hal yang tidak kompatibel antara platform satu dengan platform lain. Untuk J2SE, misalnya SWT-AWT bridge yang sampai sekarang tidak berfungsi pada Mac OS X.

6. Mudah didekompilasi Dekompilasi adalah proses membalikkan dari kode jadi menjadi kode sumber. Ini dimungkinkan karena kode jadi Java merupakan bytecode yang menyimpan banyak atribut bahasa tingkat tinggi, seperti nama-nama kelas, metode, dan tipe data. Hal yang sama juga terjadi pada Microsoft .NET Platform. Dengan demikian, algoritma yang digunakan program akan lebih sulit disembunyikan dan mudah dibajak/direverse-engineer.

Rangkuman Aplikasi dan Basis Data

Page 5

7. Penggunaan memori yang banyak Penggunaan memori untuk program berbasis Java jauh lebih besar daripada bahasa tingkat tinggi generasi sebelumnya seperti C/C++ dan Pascal (lebih spesifik lagi, Delphi dan Object Pascal). Biasanya ini bukan merupakan masalah bagi pihak yang menggunakan teknologi terbaru (karena trend memori terpasang makin murah), tetapi menjadi masalah bagi mereka yang masih harus berkutat dengan mesin komputer berumur lebih dari 4 tahun.

1.1.

TEKNOLOGI JAVA

Sebagai sebuah bahasa pemrograman, Java dapat membuat seluruh bentuk aplikasi, desktop, web dan lainnya, sebagaimana dibuat dengan menggunakan bahasa pemrograman konvensional yang lain. Java adalah bahasa pemrograman yang berorientasi objek(OOP) dan dapat dijalankan pada berbagai platform sistem operasi. Perkembangan Java tidak hanya terfokus pada satu sistem operasi, tetapi dikembangkan untuk berbagai sistem operasi dan bersifat open source.

Sebuah Development Environment Sebagai sebuah peralatan pembangun, teknologi Java menyediakan banyak tools: compiler(penyusun/penghimpun), interpreter(penerjemah), documentation generator(generator pendokumentasian), class file packaging tool(alat pengemasan file class), dan sebagainya.

Sebuah Aplikasi Aplikasi dengan teknologi Java secara umum adalah aplikas serba guna yang dapat dijalankan pada seluruh mesin yang memiliki Java Runtime Environment(JRE).

Java Deployment Environment


Rangkuman Aplikasi dan Basis Data Page 6

Terdapat dua komponen utama dari Deployment Environment. Yang pertama adalah JRE, yang terdapat pada paket J2SDK, mengandung kelas-kelas untuk semua paket teknologi Java yang meliputin kelas dasar dari Java, komponen GUI dan sebagainya. Komponen yang lain terdapat pada Web Browser. Hamper seluruh Web Browser komersial menyediakan interpreter dan runtime environment dari teknologi Java.

1.2.

FITUR-FITUR JAVA

Beberapa fitur yang ditawarkan Java API antara lain sebagai berikut:

a. Java Virtual Machine (JVM) JVM adalah sebuah mesin imajiner (maya) yang bekerja dengan menyerupai aplikasi pada sebuah mesin nyata. JVM menyediakan spesifikasi hardware dan platform dimana kompilasi kode Java terjadi. Spesifikasi inilah yang membuat aplikasi berbasis Java menjadi bebas dari platform manapun karena proses kompilasi diselesaikan oleh JVM. Aplikasi program Java diciptakan dengan file teks berekstensi .java. Program ini dikompilasi menghasilkan satu berkas bytecode berekstensi .class atau lebih. Bytecode adalah serangkaian instruksi serupa instruksi kode mesin.

Perbedaannya adalah kode mesin harus dijalankan pada sistem komputer dimana kompilasi ditujukan, sementara bytecode berjalan pada java interpreter yang tersedia di semua platform sistem komputer dan sistem operasi.Java Networking

b. Garbage Collection Banyak bahasa pemrogaman lain yang mengijinkan seorang programmer mengalokasikan memori pada saat dijalankan. Namun, setelah menggunakan alokasi memori tersebut, harus terdapat cara untuk menempatkan kembali blok memori tersebut supaya program lain dapat menggunakannya. Dalam C, C++ dan bahasa
Rangkuman Aplikasi dan Basis Data Page 7

lainnya, adalah programmer yang mutlak bertanggung jawab akan hal ini. Hal ini dapat menyulitkan bilamana programmer tersebut alpa untuk mengembalikan blok memori sehingga menyebabkan situasi yang dikenal dengan nama memory leaks. Program Java melakukan garbage collection yang berarti program tidak perlu menghapus sendiri objekobjek yang tidak digunakan lagi. Fasilitas ini mengurangi beban pengelolaan memori oleh programmer dan mengurangi atau mengeliminasi sumber kesalahan terbesar yang terdapat pada bahasa yang memungkinkan alokasi dinamis.

c. Code Security Code Security terimplementasi pada Java melalui penggunaan Java Runtime Environment (JRE). Java menggunakan model pengamanan 3 lapis untuk melindungi sistem dari untrusted Java Code. 1. Pertama, class-loader menangani pemuatan kelas Java ke runtime interpreter. Proses ini menyediakan pengamanan dengan memisahkan kelaskelas yang berasal dari local disk dengan kelaskelas yang diambil dari jaringan. Hal ini membatasi aplikasi Trojan karena kelaskelas yang berasal dari local disk yang dimuat terlebih dahulu. 2. Kedua, bytecode verifier membaca bytecode sebelum dijalankan dan menjamin bytecode memenuhi aturanaturan dasar bahasa Java. 3. Ketiga, manajemen keamanan menangani keamanan tingkat aplikasi dengan mengendalikan apakah program berhak mengakses sumber daya seperti sistem file, port jaringan, proses eksternal dan sistem windowing. Setelah seluruh proses tersebut selesai dijalankan, barulah kode program dieksekusi. Java juga menyediakan beragam teknik pengamanan lain :

3.1. Bahasa dirancang untuk mempersulit eksekusi kode perusak. Peniadaan pointer merupakan langkah besar pengamanan. Java tidak mengenal operasi pointer. Di tangan programmer handal, operasi pointer merupakan hal yang luar biasa untuk optimasi dan pembuatan program yang efisien
Rangkuman Aplikasi dan Basis Data Page 8

serta mengagumkan. Namun mode ini dapat menjadi petaka di hadapan programmer jahat. Pointer merupakan sarana luar biasa untuk pengaksesan tak diotorisasi. Dengan peniadaan operasi pointer, Java dapat menjadi bahasa yang lebih aman. 3.2. Java memiliki beberapa pengaman terhadap applet. Untuk mencegah program bertindak mengganggu media penyimpanan, maka applet tidak diperbolehkan melakukan open, read ataupun write terhadap berkas secara sembarangan. Karena Java applet dapat membuka jendela browser yang baru, maka jendela mempunyai logo Java dan teks identifikasi terhadap jendela yang dibuka. Hal ini mencegah jendela pop-up menipu sebagai permintaan keterangan username dan password. Java Security menyediakan sekumpulan API untuk mengatur security dari aplikasi Java baik secara high level atau low level, seperti public/private key management dan certificates. Java Security Technology mencakup seperangkat besar API, peralatan, dan implementasi dari algoritma keamanan yang umum digunakan, mekanisme, dan protokol. Java API keamanan rentang berbagai bidang, termasuk kriptografi, infrastruktur kunci publik, komunikasi yang aman, otentikasi, dan kontrol akses. Java Security Technology memberikan pengembang dengan kerangka keamanan

komprehensif untuk aplikasi penulisan dan juga menyediakan pengguna atau administrator dengan satu set alat untuk aman mengelola aplikasi.

1.3.

Fase-fase pemrograman Java

Tiap program berbasis Java biasanya melewati 5 fase dari tahap awal sampai tahap akhir. Kelima tahap itu adalah : 1. Edit / build 2. Compile 3. Load
Page 9

Rangkuman Aplikasi dan Basis Data

4. Verify 5. Execute

1. Fase Editing / Building

Tahap ini merupakan tahap awal dari pembuatan program, yaitu tahap penulisan program pada teks editor dan disimpan di disk dengan akhiran berekstensi .java. Program sumber harus berekstensi (berakhiran) .java untuk identifikasi. Ekstensi .java mengindikasikan file merupakan kode sumber di bahasa Java. Editor teks apapun dapat digunakan asal menghasilkan teks ASCII/Unicode. Editor teks di Unix/Linux adalah vi dan emace. Di Windows dapat digunakan edit (di MSDOS), notepad, atau textpad. Kita juga dapat menggunakan teks editor di lingkungan pengembangan terpadu (IDE) seperti NetBeans, Eclipse, JBuilder, dan sebagainya.

2. Fase Compiling

Pada fase ini program yang kta tulis tadi dikompilasi oleh Kompulator. Kompulator menciptakan bytecode dan menyimpannya di disk di file dengan akhiran .class . Pada fase ini pemrograman memberikan perintah berupa teks :

javac <file kode sumber>

Perintah di atas memanggil kompilator javac untuk menerjemahkan program sumber menjadi bytecode, yaitu serangkaian instruksi yang dipahami Java Interpreter. Untuk mengkompilasi file program bernama maskalsaintek.java maka kita akan mengetikkan perintah javac maskalsaintek.java pada MSDOS atau Command Prompt pada Windows. Jika javac mengkompilasi dengan benar maka

Rangkuman Aplikasi dan Basis Data

Page 10

kompilator javac tersebut menghasilkan file bernama maskalsaintek.class. File ini berisikan bytecode yang akan diinterpretasikan selama fase eksekusi.

3. Fase Loading

Program yang dieksekusi (.class) harus lebih dahulu berada di memori sebelum dieksekusi. Aktivitas pemuatan ke memori dilakukan class loader dengan mengambil file .class yang berisi bytecode dan mentransfer ke memori utama. File .class dapat dimuatkan dari disk sistem lokal atau jaringan.

4. Fase Verify

Begitu kelas di memori, bytecode diverifikasi bytecode verifier. Verifikasi ini untuk menjamin bytecode sah dan tidak melanggar batasan keamanan Java. Java memaksakan keamanan secara ketat agar program dari jaringan tidak merusak sistem lokal milik kita (sebagaimana virus dapat melakukannya).

5. Execute

Pada fase ini interpreter membaca bytecode dan menerjemahkannya menjadi bahasa yang dipahami komputer. Interpreter di bawah kendali sistem operasi menginterpretasikan satu bytecode satu saat, dan melakukan aksi-aksi yang disfesifikasi bytecode.

Rangkuman Aplikasi dan Basis Data

Page 11

BAB II Komentar Pada Java

Dasar pemrograman pada JAVA


Dasar pemrograman pada JAVA meliputi : Komentar pada Java, Pernyataan dalam blok dan Java, Java indentifier, keyword dalam Java, Java literals, type data primitive, variable, dan operator.

2.1 Komentar Pada Java Komentar pada Java adalah catatan yang ditulis pada kode dengan tujuan sebagai bahan dokumentasi. Teks tersebut bukan bagian dari program dan tidak mempengaruhi jalannya program. Pada bahasa pemrograman manapun komentar program biasa digunakan untuk memberikan penjelasan baris atau blok program suapaya pembaca program atau programer lainnya supaya bisa mengerti bagianbagian program tersebut. Ada 3 (tiga) cara memberikan komentar program pada Java, yaitu:

a. End Of Line Comment ( // ) Komentar comment, dengan tanda slash ganda ( // ) disebut dengan end-of-line karena semua perintah program, komentar-komentar atau

penjelasan program berada setelah tanda slash ganda, semua dianggap sebagai komentar dan komentar hanya satu baris saja. Sebagai contoh:

b. Multiple Line Comment ( /* */) Komentar dengan tanda slash dan asterik ( / * */) disebut dengan MultipleLine Comment, karena ini, perintah program, komentar-komentar
Rangkuman Aplikasi dan Basis Data

atau

Page 12

penjelasan program berada dalam apitan tanda slash dan asterik, semua dianggap sebagai komentar, Sebagai contoh : dan komentar bisa lebih dari satu baris.

c. Javadoc Comment ( /** */) Komentar dengan tanda slash ganda didepan dan asterik ( /** */) disebut dengan Javadoc Comment. Penggunaannya sama seperti Multiple Line Comment, akan tetapi penggunaannya untuk dokumentasi-dokumentasi

didalam program. Sebagai contoh : Semua komentar program atau penjelasan program pada saat program java dicompile tidak ikut serta dicompile, karena tidak dianggap sebagai suatu baris program.

Rangkuman Aplikasi dan Basis Data

Page 13

2.2 Pernyataan dalam Blok Pernyataan dalam Blok adalah satu atau lebih baris kode yang diakhiri oleh semicolon. Contoh : System.out.println(Hello World); Sedangkan Blok adalah satu atau lebih pernyataan yang terbentang antara kurung kurawal buka dan kurung kurawal tutup yaitu sekumpulan pernyataan sebagai satu unit kesatuan. Blok adalah satu atau lebih pernyataan yang terbentang antara kurung kurawal buka dan kurung kurawal tutup yaitu sekumpulan pernyataan sebagai satu unit kesatuan. Blok pernyataan dapat dikumpulkan akan tetapi tidak secara pasti mempunyai keterkaitan fungsi.Beberapa jumlah spasi kosong diijinkan terdapat didalamnya, sebagai contoh dari suatu blok adalah : public static void main( String[] args ){ System.out.println("Hello"); System.out.println("world"); } Petunjuk Penulisan Program: 1. Pada saat pembuatan blok, Anda dapat meletakkan kurung kurawal buka pada baris dengan pernyataan seperti contoh sebagai berikut: public static void main( String[] args ){ atau Anda dapat meletakkan kurung kurawal pada baris selanjutnya, seperti, public static void main( String[] args ) {

2.

Anda harus memberi jarak (indent) pernyataan selanjutnya setelah awal dari blok , seperti contoh berikut,

Rangkuman Aplikasi dan Basis Data

Page 14

public static void main( String[] args ){ System.out.println("Hello"); System.out.println("world"); }

2.3 Java Indentifier Java Identifier adalah suatu tanda yang mewakili nama nama variable, method, class, dll. Contoh : Hello, main, System, out. Pendeklarasian Java adalah case-sensitive. Hal ini berarti bahwa pengidentifikasi : Hello tidak sama dengan hello. Pengidentifikasi harus dimulai dengan salah satu huruf, underscore _, atau tanda dollar $. Hurufnya dapat berupa huruf besar maupun huruf kecil. Karakter selanjutnya dapat menggunakan nomor 0 smpai 9.Pengidentifikasi tidak dapat menggunakan kata kunci dalam java seperti class, public, void, dsb.

Pedoman Penulisan Program: a. Untuk pemberian nama dai class java, diberikan huruf kapital untuk huruf pertama pada nama class. Untuk nama method dan variabel, huruf pertama dari kata harus dimulai dengan huruf kecil. Sebagi contoh: ThisIsAnExampleOfClassName thisIsAnExampleOfMethodName b. Pada kasus untuk pengidentifikasi labih dari satu kata , menggunakan huruf

kapital untuk mengindikasikan awal dari kata kecuali kata pertama. Sebagai contoh, charArray, fileNumber, ClassName. c. Hindari menggunakan underscores pada awal pengidentifikasian seperti _read

atau _write.

Rangkuman Aplikasi dan Basis Data

Page 15

2.4 Keyword dalam Java Keyword dalam Java ( Kata Kunci ) adalah indentifier yang telah dipesan untuk didefinisan sebelumnya oleh Java untuk tujuan tertentu. Keyword

adalahpengidentifikasi yang telah dipesan untuk didefinisikan sebelumnya oleh java untuk tujuan tertentu. Anda tidak dapat menggunakan keyword sebagai nama variabel anda, class, method dsb. Berikut ini adalah daftar dari kata kunci dalam java (Java Keywords).
Abstract Assert Boolean Break Byte Case Catch Char Class Const Continue Default Do Double Else Enum Extends Final Finally Float For Goto If Implements Import Instanceof Int Interface Long Native New Package Private Protected Public Return Short Static Strictfp Super Switch Synchronized This Throw throws Transirnts Try Void Volatile while

2.5 Java Literals Java Literals adalah tanda bahwa tidak terjadi perubahan atau konstan.Macam macam literals dalam Java : integer literals, float-point literals, Boolean literals, character literals dan string literals. a. Integer Literals Integer literals dibedakan dalam beberapa format yang berbeda: desimal (berbasis 10), heksadesimal (berbasis 16), and oktal (berbasis 8). Dalam penggunaan tipe data integer pada program, kita harus mengikuti aturan penggunaan beberapa notasi khusus. Untuk angka desimal, kita tidak memerlukan notasi khusus. Kita hanya menulis angka desimal seperti apa adanya. untuk angka heksadesimal, hal itu harus ditandai oleh
Rangkuman Aplikasi dan Basis Data Page 16

0x atau 0X. untuk oktal, ditandai oleh0. Sebagai contoh, mewakili angka 12. Penulisan dalam bentuk desimalnya adalah 12, Sementara dalam heksadesimal, menjadi 0xC, dan dalam oktal, nilai tersebut sama dengan 014. Default tipe data untuk integer literals adalah int. Int adalah signed 32-bit value. Pada kasus-kasus tertentu Anda dapat berharap untuk memaksa integer iteral untuk menjadi tipe data long dengan menambahkan karakter l or L. tipe data long ditandai oleh ditampilkannya data dalam 64-bit. Kita akan membahas mengenai tipe data pada kesempatan selanjutnya. b. Floating-Point Literals Floating point literals mewakili bentuk desimal dengan bagian yang terpisah. Sebagai contoh adalah 3.1415. Floating point literals dapat dinyatakan dalam notasi standard atau scientific. Sebagai contoh, 583.45 dinyatakan dalam notasi standard, Sementara 5.8345e2 dinyatakan dalam notasi scientific. Default Floating point literals mempunyai tipe data double yang dinyatakan dalam 64-bit. Untuk menggunakan ketelitian yang lebih kecil (32-bit) float, hanya dengan menambahkan karakter f atau F. c. Boolean Literals Boolean literals hanya memiliki dua nilai, true atau false. d.Character Literals Character Literals diwakili oleh karakter single Unicode. Karakter Unicode adalah 16-bit character set yang menggantikan 8-bit ASCII character set. Unicode memungkinkan pengunaan simbol dan karakter khusus dari bahasa lain. Untuk menggunakan character literals, karakter tersebut di dalam tanda single pute (' ') (single quote delimiters). Sebagai contoh huruf a, diwakili sebagai a. Untuk menggunakan karakter khusus seperti karakter baris baru, backslash digunakan diikuti

Rangkuman Aplikasi dan Basis Data

Page 17

dengan karakter kode. Sebagai contoh, \n untuk karakter baris baru atau ganti baris, \r untuk menyatakan nilai balik (carriage return), \b untuk backspace. e. String Literals String literals mewakili beberapa karakter dan dinyatakan dalam tanda double pute( ) (double quotes). Sebagai contoh string literal adalah, Hello World. 2.6 Tipe Data Primitif Tipe Data Primitif adalah tipe data dasar yang dikenali oleh Java dan bukan merupakan class. Walaupun kelihatan sepele, tetapi dengan memahami cara penggunaan dan mengetahui nilai-nilai yang dapat ditampung oleh variabel data ini dapat mempermudah pekerjaan kita.Terutama sekali bagi seorang programmer Java yang sehari-harinya berhadapan dengan berbagai macam data dan manipulasinya. Data ini bisa berasal dari database server, text, web, dsbnya. Tipe data primitif ini dapat dikenali dengan ciri sebagai berikut : Memiliki keyword huruf kecil semuanya

Memiliki wrapper class, yaitu class yang membantu untuk mewakili dan mengolah lebih lanjut nilai dari tipe data bersangkutan. Misalkan int dengan, class Integer.

Karena bukan suatu class, untuk inisialisasi variabel tidak menggunakan keyword new

Pada pemrograman Java didefinisikan menjadi 8 yaitu : Boolean ( untuk bentuk logika ), char ( untuk bentuk tekstual ), byte, short, int, long ( integral ), double dan float ( floating point ).

Rangkuman Aplikasi dan Basis Data

Page 18

No Tipe Data 1 2 3 4 5 6 7 8 byte short int long float double boolean char

Range Nilai dan Panjang Bit -128 s/d 127 (8 bit) -32,768 s/d 32,767 (16 bit) -2,147,483,648 s/d 2,147,483,647 (32 bit) -9,223,372,036,854,775,808 s/d 9,223,372,036,854,775,807 (64 bit) Nilai pecahan (32 bit) Nilai pecahan (64 bit) true / false (1 bit) '\u0000' (0) s/d '\uffff' (65,535) (16 bit)

Keterangan : Secara praktis, hampir semua penggunaan bilangan pecahan dapat dilakukan dengan menggunakan float dan double. Untuk pada tipe data char adalah merupakan nilai bertipe unicode Nilai Default

No 1 2 3 4 5 6 7 8

Tipe Data byte short int long float double boolean char

Nilai Default 0 0 0 0L 0.0f 0.0d false '\u0000' (0)

Keterangan: Semua angka bilangan bulat secara default adalah bertipe int. Oleh sebab itu perlu digunakan suffix L untuk menyatakan bilangan bulat yang bertipe long , apalagi jika nilai bilangan bulat yang digunakan sudah melewati jangkauan nilai int.Sebaliknya untuk bilangan pecahan, secara
Rangkuman Aplikasi dan Basis Data Page 19

default tipenya adalah double. Sehingga untuk semua nilai pecahan yang akan dimasukkan sebagai nilai untuk tipe data float ini, maka perlu diberikan suffix f.

Contoh Penggunaan Yang Benar


1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. boolean kondisi = true; char nilai12 = '\u0003'; char nilai11 = 'b'; char nilai10 = 0; long nilai_maks_long = 9223372036854775807L; double nilai9 = 11.2d; double nilai8 = 2.0109311e3; //sama dengan nilai7 (2.0109311 dikalikan 10 pangkat 3) double nilai7 = 2010.9311; double nilai6 = 100; float nilai5 = 1.24f; float nilai4 = 90; long nilai3 = 23000L; long nilai2 = 1000; int nilai1 = 20;

Rangkuman Aplikasi dan Basis Data

Page 20

Contoh Penggunaan Yang Salah

1. t 2. 3. 4. 5.

long nilai_maks_long = 9223372036854775807; //harus menggunakan suffix L karena sudah di luar range in

float nilai13 = 0.03; //harus menggunakan suffix f

char nilai14 = '\u01'; //harus menggunakan format '\u9999' (\u diikuti 4 digit hexadecimal)

2.7 Variabel Variabel sebenarnya berarti lebih kompleks. Variabel bukan isi dari data, tapi lokasi di memori yang menyimpan data tersebut. Variabel bisa diibaratkan sebagai kotak penyimpanan data, bukan isi kotaknya. Karena data di dalam kotak bisa berubah, variabel hanya dapat dipercaya pada satu saat saja, walaupun tempatnya selalu sama. Dalam bahasa Java, satu-satunya cara untuk memasukkan data ke dalam variabel adalah dengan menggunakan assignment statement, atau pernyataan pemberian nilai. Pernyataan ini berbentuk: variable = ekspresi; Di mana ekspresi menyatakan apapun yang berhubungan dengan nilai suatu data. Ketika komputer menjalankan instruksi ini, komputer akan menghitung dan menyimpan hasilnya ke dalam variabel. Contoh: kecepatan = 40; Variable dalam pernyataan di atas adalah kecepatan dan ekspresinya adalah angka 40. Komputer menghitung pernyataan ini dan menyimpan 40 ke dalam variabel kecepatan, dan mengganti apapun yang telah disimpan sebelumnya.Sekarang misalnya kita ingin melakukan perhitungan yang lebih kompleks: jarak = kecepatan * waktu
Rangkuman Aplikasi dan Basis Data Page 21

Di sini, * merupakan operasi perkalian. Komputer mengambil data yang disimpan dalam variabel kecepatan dan waktu, melakukan perkalian, dan menyimpan hasilnya dalam jarak.Variabel dalam bahasa Java didesign untuk menyimpan hanya 1 jenis tipe data. Kompiler akan menampilkan kesalahan sintax apabila variabel ini dicoba untuk diberi tipe data jenis lain. Oleh karena itu Java disebut bahasa pemrograman bertipe kuat atau strongly typed language. 2.8 Operator dalam Java Operator dalam Java berfungsi untuk mengoperasikan (memanipulasi, mengolah) satu atau lebih variabel. Variabel yang dioperasikan disebut operand. Secara garis besar operator dalam java bisa dikelompokkan menjadi : 1. Operator assignment adalah tanda = (sama dengan), berguna untuk memberi literal pada suatu variabel tertentu. Berikut contoh operator assigment : int testInt = 0; 2. Operator aritmatika adalah operator yang digunakan untuk melakukan operasi aritmatika (perhitungan). Operator ini ada lima macam yaitu : - Operator penambahan (+) - Operator penguranan (-) - Operator perkalian (*) - Operator pembagian (/) - Operator sisa mod (%). Berikut contoh penggunaan operator arimatika : int hasil = 1 + 2; // hasil = 3 hasil = hasil 1; // hasil = 2 hasil = hasil * 2; // hasil = 4 hasil = hasil / 2; //hasil = 2 hasil = hasil + 8; // hasil = 10 hasil = hasil % 7; //hasil = 3

Rangkuman Aplikasi dan Basis Data

Page 22

Operator penjumlahan (+) bisa juga diterapkan pada objek string (seperti pada contoh penjelasan kelas String).

3. Operator unary meliputi operator unary positif (+) untuk menandakan suatu bilangan positif (setiap bilangan tanpa tanda negatif, berarti termasuk bilangan positif). Operator unary negatif (-) untuk menandakan suatu bilangan negatif. Operator unary increment (++), berguna menambah menambah literal bilangan dengan literal bilangan satu. Operator unary decrement (), berguna mengurangi literal bilangan dengan bilangan satu. Dan operator unary komplemen logika (!), berguna untuk mengkomplemenkan suatu logika yang bernilai true atau false. Berikut contoh penggunaan operator unary : int hasil = +1; // hasil = 1 hasil; //hasil = 0 hasil++; // hasil = 1 hasil = -hasil; // hasil = -1 boolean success = false; //success = false; success = !success; //success =true; 4. Operator equality digunakan untuk membandingkan dua variabel, apakah nilainya sama, lebih besar, lebih kecil, lebih besar atau sama dengan, lebih kecil atau sama dengan dan tidak sama dengan. Operator-operator tersebut adalah sebagai berikut : == sama dengan > lebih besar < lebih kecil >= lebih besar atau sama dengan <= lebih kecil atau sama dengan != tidak sama dengan Berikut contoh pemakaian operator equality :
Rangkuman Aplikasi dan Basis Data Page 23

class ComparisonDemo { public static void main(String[] args){ int value1 = 1; int value2 = 2; if(value1 == value2) System.out.println(value1 == value2); if(value1 != value2) System.out.println(value1 != value2); if(value1 > value2) System.out.println(value1 > value2); if(value1 <> if(value1 <= value2) System.out.println(value1 <= value2); } }

Output program tersebut sbb: value1 != value2 value1 < value2 value1 <= value2

5. Operator kondisional digunakan pada dua atau lebih ekspresi boolean. Operator ini terdiri dari operator kondisional AND (&&) dan operator kondisional OR (||). Selain itu ada juga operator kondisional and (&) dan operator kondisional or (|). Bedanya pada operasional kondisional && dan || jika ekspresi sudah memenuhi syarat, ekspresi setelahnya tidak dicek, sedangkan pada operator kondisional & dan | akan mengecek seluruh ekspresi. Berikut contoh penggunaan operator ini : class ConditionalDemo { public static void main(String[] args){ int value1 = 1;
Rangkuman Aplikasi dan Basis Data Page 24

int value2 = 2; if((value1 == 1) && (value2 == 2)) System.out.println(value1 is 1 AND value2 is 2); if((value1 == 1) || (value2 == 1)) System.out.println(value1 is 1 OR value2 is 1); } } Output program di atas adalah : value1 is 1 AND value2 is 2 value1 is 1 OR value2 is 1

6. Operator komparasi digunakan untuk mengecek apakah suatu objek merupakan instance dari suatu kelas tertentu. Operator komparasi adalah operator instanceof. Jika suatu objek yang kita tes merupakan instance dari suatu kelas yang kita tentukan, ekspresi ini bernilai true, false jika sebaliknya. Berikut contoh sederhana pemakaian operator komparasi: KelasA a = new KelasA(); KelasB b = new KelasB(); if(a instanceof KelasA) Sytem.out.println(objek adalah instance dari KelasA); Karena a merupakan instance dari KelasA maka statement

System.out.println(objek adalah instance dari KelasA) dieksekusi.

7. Operator bitwise Digunakan untuk operasi bit per bit pada nilai integer. Terdiri dari operator NOT, AND, OR, XOR, Shl, Shr. Type : int atau char Bitwise operator, dari namanya sudah jelas diketahui pasti berhubungan dgn bit. Biasanya digunakan utk memanipulasi data bertipe bit dari tipe data integer atau byte. Bitwise ini sering dipakai dalam kasus
Rangkuman Aplikasi dan Basis Data Page 25

enkripsi,kompresi,formatfile,jaringan(protokol),processing, audio/video,dll. 2.9 Blok Blok adalah satu atau lebih pernyataan yang terbentang antara kurung kurawal buka dan kurung kurawal tutup yaitu sekumpulan pernyataan sebagai satu unit kesatuan. Tujuannya untuk mengelompokkan beberapa perintah sehingga lebih dimengerti. contoh penggunaan blok pada pemrograman java. { System.out.println("Hello"); System.out.println("Dunia"); }

{ // blok ini digunakan untuk menukar isi variable x dan y int temp; temp = x; x = y; y = temp;

Rangkuman Aplikasi dan Basis Data

Page 26

BAB III PEMILIHAN,PERULANGAN DAN PERCABANGAN

3.1. Struktur Kontrol Pemilihan Struktur kontrol pemilihan adalah pernyataan dari Java yang mengijinkan user untuk memilih dan mengeksekusi blok kode spesifik dan mengabaikan blok kode yang lain. Java menyediakan dua buah perintah untuk proses pemilihan, yaitu if dan switchcase. Kedua perintah ini digunakan untuk mengontrol eksekusi tergantung pada kondisi yang ditentukan sebelumnya. Pernyataan percangan memungkinkan suatu pernyataan di eksekusi , hanya jika suatu kondisi terpenuhi atau tidak terpenuhi. Artinya tidak setiap baris atau langkah dikerjakan. Suatu baris algoritma akan dikerjakan jika kondisinya memenuhi syarat. Struktur pemilihan adalah struktur algoritma yang melakukan proses pengujian untuk mengambil suatu keputusan atau tindakan mengenai di proses atau tidaknya suatu baris intruksi atau blok intruksi.

a. Statement If Kontruksi ini untuk memeriksa sebuah kondisi dan mengeksekusi satu intruksi atau blok intruksi, jika dan hanya jika kondisinya terpenuhi. Bentuk pernyataan if if([kondisi])

statement;

atau

if([kondisi])

{
Rangkuman Aplikasi dan Basis Data Page 27

statement1;

statement2;

...

Contoh pernyataan if public class Lat07

public static void main(String[] args)

int a=1,b=10;

if (a<5)

Rangkuman Aplikasi dan Basis Data

Page 28

System.out.println(Nilai a lebih kecil dari 5);

if (b<5)

System.out.println(Nilai b lebih kecil dari 5);

} b.Statement If-else . Pernyataan if-else digunakan apabila kita ingin mengeksekusi beberapa pernyataan dengan kondisi true dan pernyataan yang lain dengan kondisi false.

Rangkuman Aplikasi dan Basis Data

Page 29

Bentuk dari pernyataan if-else if([kondisi])

statement;

else

statement;

atau

if([kondisi])

statement1;

statement2;

...

else

statement1;

Rangkuman Aplikasi dan Basis Data

Page 30

statement2;

...

} Contoh pernyataan if-else public class Lat08

public static void main(String[] args)

int a=1,b=10;

if (a<5)

System.out.println(a+ lebih kecil dari 5);

else

System.out.println(a+ lebih besar dari 5);


Rangkuman Aplikasi dan Basis Data Page 31

if (b<5)

System.out.println(b+ lebih kecil dari 5);

else

System.out.println(b+ lebih besar dari 5);

c.Statement If-else-if Pernyataan pada bagian kondisi else dari blok if-else dapat menjadi struktur ifelse yang lain. Kondisi struktur seperti ini mengijinkan kita untuk membuat seleksi persyaratan yang lebih kompleks.

Rangkuman Aplikasi dan Basis Data

Page 32

Bentuk pernyataan if-else-if if([kondisi])

statement1;

else if

statement2;

else

statement3;

atau

if([kondisi])

{
Rangkuman Aplikasi dan Basis Data Page 33

statement1;

statement2;

...

else if

statement1;

statement2;

...

else

statement1;

statement2;

Rangkuman Aplikasi dan Basis Data

Page 34

...

Contoh pernyataan if-else-if public class Lat09

public static void main(String[] args)

char nh;

double na=75.33;

if (na>=80)

nh=A';

else if (na>=70)

Rangkuman Aplikasi dan Basis Data

Page 35

nh=B';

else if (na>=50)

nh=C';

else if (na>=30)

nh=D';

else

nh=E';

System.out.println(Nilai Akhir\t : +na);


Rangkuman Aplikasi dan Basis Data Page 36

System.out.println(Nilai Huruf\t : +nh);

d.Statement Switch Perintah switch merupakan pemilihan alternatif, yang biasanya digunakan untuk penyederhanaan perintah if yang banyak mengandung kondisi. Switch

mengkonstruksikan cabang untuk beberapa kondisi dari nilai. Bentuk dari Switch-case merupakan pernyataan yang dirancangan khusus untuk menangani pengambilan keputusan yang melibatkan sejumlah atau banyak alternatif penyelesaian. Pernyataan switch - case ini memiliki kegunaan sama seperti if else bertingkat.

Kontruksi If-Else yang bertingkat-tingkat seringkali membingungkan pembacaan alur program. Java menyediakan intruksi Switch untuk memudahkan pembacaan alur program bercabang yang sangat banyak. meskipun Switch didesain untuk mengganti IfElse, akan tetapi Switch memiliki batasan: 1. 2. Data yang diperiksa haruslah bertipe Integer (int) atau Karakter (char). Range data yang diperiksa bernilai 0 s/d 255.

Rangkuman Aplikasi dan Basis Data

Page 37

Bentuk pernyataan switch switch ([nama_variable])

case [nilai1] :

perintah1;

perintah2;

...

break;

case [nilai2] :
Rangkuman Aplikasi dan Basis Data Page 38

perintah1;

perintah2;

...

break;

case [nilaiN] :

perintahN;

...

break;

default

perintahDefault;

...

break;

} Contoh pernyataan switch public class Lat011

Rangkuman Aplikasi dan Basis Data

Page 39

{ public static void main(String[] args)

int grade = 82;

switch(grade)

case 100:

System.out.println(Excellent!);

break;

case 90:

System.out.println(Good Job! );

break;

case 80:

System.out.println(Study Harder! );

break;

Rangkuman Aplikasi dan Basis Data

Page 40

default:

System.out.println(Sorry, You Failed!);

3.2. Struktur Kontrol Pengulangan

Struktur kontrol pengulangan adalah berupa pernyataan dari Java yang mengijinkan kita untuk mengeksekusi blok code berulang-ulang sesuai dengan jumlah tertentu yang diinginkan. Ada tiga macam jenis dari struktur kontrol pengulangan yaitu :

1. 2. 3.

While Do-while For loops

Pernyataan-pernyataan di atas menciptakan loop. Loop secara berulang mengeksekusi sebarisan instruksi yang sama sampai kondisi akhir ditemui. Dengan kata lain, looping atau loop artinya mengulangi eksekusi blok program tertentu sampai tercapai kondisi untuk menghentikannya (terminasi). Setiap perulangan memiliki 4 bagian yaitu : inisialisasi (initialization), badan program (body) / statement, iterasi (iteration), dan termination
Page 41

Rangkuman Aplikasi dan Basis Data

a.Struktur while Struktur perulangan while adalah jenis perulangan yang mendefinisikan kondisi di awal blok. Artinya jika kondisi tidak terpenuhi (bernilai false) maka proses perulangan tidak akan pernah dieksekusi. Inisialisasi nilai ditulis sebelum penulisan struktur while itu sendiri, sedangkan iterasi ditulis di dalam blok perulangan. Bentuk dari struktur pengulangan while : inisialisasi;

while(kondisi)

perintah_perintah yang akan diulang; ...

} Contoh pernyataan while class while1 { public static void main (String[[] args] { int i = 0; while (i<10) { System.out.println ( java); I++; } } }

Rangkuman Aplikasi dan Basis Data

Page 42

b.Struktur do-while Struktur perintah do-while sebenarnya mirip dengan struktur while.

Perbedaannya terletak pada penempatan kondisinya saja, yaitu diletakkan pada bagian akhir blok perulangan. Sehingga pada struktur jenis ini, blok perulangan akan dilakukan minimal satu kali meskipun ternyata kondisinya tidak terpenuhi.Bentuk dari struktur pengulangan do-while : inisialisasi;

do

perintah_perintah yang akan diulang;

...

while(kondisi); Contoh penyataan do-while int x = 0; do { System.out,println(x); X++; } while (x<10);

c.Struktur for Struktur ini biasanya digunakan untuk melakukan pengulangan yang banyaknya sudah pasti atau sudah diketahui sebelumnya.
Rangkuman Aplikasi dan Basis Data Page 43

Bentuk dari struktur pengulangan for : for(inisialisasi; kondisi; iterasi)

perintah_perintah yang akan diulang;

...

} Contoh pernyataan for class for1 { public static void main (String[] args) { for ( int i = 0 ; i < 10 ; i++ ) { System.out.println(java); } } } Maka outputnya akan tercetak teks java sebanyak 10 kali.

3.3 Statement Peloncatan Statement peloncatan digunakan untuk mengontrol jalannnya program. Lebih tepatnya, untuk memindahkan eksekusi program ke baris kode yang kita kehendaki. Dalam Java, terdapat 3 buah statement peloncatan, yaitu : break, continue dan return.

a.Menggunakan break. Dalam Java, statement break memiliki 3 kegunaan yaitu : 1. 2. Menghentikan runtunan pemilihan pada statement switch. Menghentikan proses pengulangan (keluar dari blok pengulangan).

Rangkuman Aplikasi dan Basis Data

Page 44

Dengan menggunakan statement break, kita dapat menghentikan proses pengulangan tertentu tanpa memperdulikan lagi kondisi yang didefinisikan ataupun sisa statement-statement yang terdapat pada blok pengulangan tersebut. Contoh pernyataan break public class Lat015

public static void main(String[] args)

for(int i=0;i<10;i++)

if(i==5)

break;

System.out.println(Baris ke-+i);

System.out.println(Statement setelah blok pengulangan);


Rangkuman Aplikasi dan Basis Data Page 45

Keluar dari blok label tertentu.

b.Menggunakan continue. Statement continue berguna untuk memaksa program agar melanjutkan proses pengulangan. Secara mudahnya, statement continue dapat dikatakan sebagai kebalikan dari statement break. Contoh pernyataan continue public class Lat017

public static void main(String[] args)

for(int i=0;i<10;i++)

System.out.print(i+ );

if(i%2==0)

{
Rangkuman Aplikasi dan Basis Data Page 46

continue;

System.out.println();

Statement continue diatas berguna untuk melanjutkan proses pengulangan tanpa mengeksekusi statement-statement yang terdapat dibawahnya. Artinya, pada saat i bernilai genap, program tidak akan mengeksekusi statement System.out.println( );.Seperti halnya statement break, yang dapat digunakan untuk keluar dari suatu blok label tertentu, statement continue juga dapat digunakan untuk memaksa program agar kembali atau melanjutkan ke suatu label tertentu.

c.Menggunakan return. Dalam Java, statement return digunakan untuk keluar dari eksekusi kode program yang terdapat dalam sebuah method. Contoh pernyataan return public class Lat018

public static void main(String[] args)


Rangkuman Aplikasi dan Basis Data Page 47

int bnyk=3;

tulis(bnyk);

//Mendefinisikan method tulis()

private static void tulis(int n)

if(n<1)

System.out.println(Nilai i tidak boleh lebih kecil dari 1);

return; //keluar dari method tulis()

//Statement ini tidak akan dilakukan bila n < 1

for(int i=0;i<n;i++)

Rangkuman Aplikasi dan Basis Data

Page 48

System.out.println(Baris ke-+i);

Karena nilai n yang dilewatkan kedalam method tersebut lebih kecil dari 1, maka program pun akan memanggil statement return yang berarti program keluar dari method tulis( ), dan statement-statement yang terdapat pada blok pengulangan pun tidak akan dieksekusi.

Rangkuman Aplikasi dan Basis Data

Page 49

BAB IV ARRAY
4.1 Pengertian Array merupakan objek yang dapat digunakan untuk menyimpan sejumlah data. Data yang dapat ditampung pada array dapat berupa tipe data ataupun kelas (objek). Data di sebuah program dapat tersusun berupa array. Array adalah sekumpulan data yang mempunyai tipe data yang sama dan lebar field yang sama. Array di Java dapat dideklarasikan a=new int[10] yang artinya dibuat array dengan tipe integer sebanyak 10 record. Untuk lebih detailnya silahkan dicoba program kecil ini dengan menggunakan jendela editor JCreator. Contoh : import java.io.*; class array1 { public static void main(String[] args) throws IOException { int[] a; a=new int[10]; String str; for (int b=0; b<10; b++) { System.out.print(Bilangan +b+=); BufferedReader m = new BufferedReader(new InputStreamReader(System.in)); str=m.readLine(); try { a[b]=Integer.parseInt(str); } catch(NumberFormatException nfe) { System.out.println(Input bukan bilangan bulat); System.exit(1);

Rangkuman Aplikasi dan Basis Data

Page 50

} } System.out.println(); for (int b=0;b<10;b++){ System.out.println(a[b]); } } } 4.1.1 Membuat Array Setelah mendeklarasikan Array, maka perlu dibuat arraynya terlebih dahulu, sebelum array tersebut digunakan, caranya dengan menggunakan perintah new. TipeArray namaArray [];

namaArray = new TipeArray [jumlah];

Dimana jumlah array merupakan jumlah data yang dapat ditampung oleh array.

Jika sekumpulan data digabungkan dalam satu unit, hasilnya adalah suatu struktur data. Data struktur dapat berupa struktur yang sangat kompleks, akan tetapi dalam banyak aplikasi, data struktur yang cocok hanya terdiri dari kumpulan data berurutan. Struktur data sederhana seperti ini bisa berupa array atau record. Istilah "record" sebetulnya tidak digunakan pada Java. Suatu record pada intinya mirip dengan objek pada Java yang hanya memiliki variabel instansi tanpa metode instansi. Beberapa bahasa pemrograman lain yang tidak mendukung objek biasanya mendukung record. Dalam bahasa C yang bukan bahasa berorientasi objek, misalnya, memiliki tipe data record, dimana pada C disebut "struct". Data pada record -- dalam Java, adalah variabel instansi suatu objek -- disebut field suatu record. Masing-masing item disebut nama field. Dalam Java, nama field adalah nama variabel instansi. Perbedaan sifat dari
Page 51

Rangkuman Aplikasi dan Basis Data

suatu record adalah bahwa item pada record dipanggil berdasarkan namanya, dan field yang berbeda dapat berupa tipe yang berbeda. Misalnya, kelas Orangdidefisikan sebagai : class Orang { String nama; int nomorID; Date tanggalLahir; int umur; } maka objek dari kelas Orang bisa disebut juga sebagai record dengan 4 field. Nama fieldnya adalah nama, nomorID,tanggalLahir dan umur. Lihat bahwa tipe datanya berbeda-beda yaitu String, int, dan Date. Karena record hanya merupakan bagian lebih kecil dari objek, kita tidak akan bahas lebih lanjut di sini. Seperti record, suatu array adalah kumpulan item. Akan tetapi, item pada record dipanggil dengan nama, sedangkan item pada array dinomori, dan masing-masing item dipanggil besarkan nomor posisi pada array tersebut. Semua item pada array harus bertipe sama. Definisi suatu array adalah : kumpulan item bernomor yang semuanya bertipe sama. Jumlah item dalam suatu array disebut panjang array. Nomor posisi dari array disebut indeks item tersebut dalam array. Tipe dari item tersebut disebut tipe dasar dari array.

Tipe dasar suatu array bisa berupa tipe Java apa saja, baik berupa tipe primitif, nama kelas, atau nama interface. Jika tipe dasar suatu array adalah int, maka array tersebut disebut "array int". Suatu array bertipe String disebut "array String". Akan tetapi array bukan urutan int atau urutan String atau urutan nilai bertipe apapun. Lebih baik jika array adalah urutan variabelbertipe int atau String atau tipe lainnya. Seperti biasa, ada dua kemungkinan kegunaan variabel : sebagai nama suatu lokasi di memori, dan nama suatu nilai yang disimpan pada lokasi memori. Setiap posisi
Rangkuman Aplikasi dan Basis Data Page 52

pada array bersifat seperti variabel. Setiap posisi dapat menyimpan nilai dengan tipe tertentu (yaitu tipe dasar array). Isinya bisa diganti kapanpun. Nilai tersebut disimpan di dalam array. Array merupakan kontainer bukan kumpulan nilai. Item pada array (maksudnya setiap anggota variabel dalam array tersebut) sering juga disebut elemen array. Dalam Java, elemen array selalu dinomori mulai dari nol. Yaitu, indeks dari elemen pertama suatu array adalah nol. Jika panjang array adalah N, maka indeks elemen terakhir adalah N-1. Sekali array dibuat, maka panjangnya tidak bisa diubah lagi. Dalam Java, array adalah objek. Ada beberapa konsekuensi yang lahir dari fakta ini. Array harus dibuat dengan operator new. Variabel tidak bisa menyimpan array; variabel hanya bisa merujuk pada array. Variabel lain yang bisa merujuk array juga bisa bernilainull yang berarti ia tidak merujuk pada lokasi memori apapun. Seperti objek lain, array juga bagian dari suatu kelas, di mana seperti kelas lain adalah kelas turunan dari kelas Object. Elemen array pada dasarnya adalah variabel instansi dalam objek array, kecuali mereka dipanggil dalam indeksnya bukan namanya. Meskipun array berupa objek, ada beberapa perbedaan antara array dan objek lainnya, dan ada beberapa fitur khusus Java untuk membuat dan menggunakan array. Misalnya A adalah variabel yang merujuk pada suatu array. Maka indeks k di dalam A bisa dipanggil dengan A[k]. Item pertama adalah A[0], yang kedua adalah A[i], dan seterusnya. A[k] adalah suatu variabel dan bisa digunakan seperti variabel lainnya. Kita bisa memberinya nilai, bisa menggunakannya dalam ekspresi, dan bisa diberikan sebagai parameter pada subrutin. Semuanya akan didiskusikan di bawah nanti. Untuk sekarang ingat sintaks berikut variabel_array [ekspresi_integer] untuk merujuk pada suatu array. Meskipun setiap array merupakan suatu objek, kelas array tidak harus didefinisikan sebelumnya. Jika suatu tipe telah ada, maka kelas array dari tipe tersebut otomatis ada. Jika nama suatu tipe adalah TipeDasar, maka nama kelas arraynya adalahTipeDasar[]. Artinya, suatu objek yang diciptakan dari kelas TipeDasar[] adalah
Rangkuman Aplikasi dan Basis Data Page 53

array dari item yang tiap itemnya bertipeTipeDasar. Tanda kurung "[]" dimaksudkan untuk mengingat sintaks untuk mengambil item di dalam suatu array. "TipeDasar[]" dibaca seperti "array TipeDasar". Mungkin perlu juga dijelaskan bahwa jika KelasA adalah kelas turunan dariKelasB maka KelasA[] otomatis menjadi kelas turunan KelasB[]. Tipe dasar suatu array dapat berupa tipe apapun yang ada atau sudah didefinisikan pada Java. Misalnya tipe primitif int akan diturunkan kelas array int[]. Setiap elemen di dalam array int[] adalah variabel yang memiliki tipe int dan bisa diisi dengan nilai dengan tipe int. Dari kelas yang bernama String diturunkan tipe array String[]. Setiap elemen di dalam array String[]adalah variabel dengan tipe String, yang bisa diisi dengan nilai bertipe String. Nilai ini bisa null atau referensi ke objek yang bertipe String (dan juga kelas turunan dari String) Mari kita lihat contoh lebih konkrotnya menggunakan array bilangan bulat sebagai contoh pertama kita. Karena int[] adalah sebuah kelas, maka kita bisa menggunakannya untuk mendeklarasikan variabel. Misalnya, int[] daftar; yang membuat variabel bernama daftar dengan tipe int[]. Variabel ini bisa menunjuk pada array int, akan tetapi nilai awalnya adalah null (jika merupakan variabel anggota suatu kelas) atau tak tentu (jika merupakan variabel lokal di dalam suatu metode). Operator new digunakan untuk membuat objek array baru, ayng kemudian bisa diberikan kepada daftar. Sintaksnya sama seperti sintaks sebelumnya, yaitu : daftar = new int[5]; membuat array 5 buah integer. Lebih umum lagi, konstruktor "new TipeDasar[N]" digunakan untuk membuat array bertipeTipeDasar[]. Nilai N di dalam kurung menyatakan panjang array, atau jumlah elemen yang bisa ditampung. Panjang array adalah variabel instansi di dalam objek array, sehingga array tahu berapa panjangnya. Kita bisa mendapatkan panjang suatu array, misalnya daftar menggunakan daftar.length (akan tetapi kita tidak bisa mengubahnya) Hasil dari pernyataan "daftar = new int[5];" dapat diilustrasikan sebagai berikut

Rangkuman Aplikasi dan Basis Data

Page 54

Perlu dicatat bahwa array integer secara otomatis diisi dengan nol. Dalam Java, array yang baru dibuat akan selalu diisi dengan nilai tertentu: nol untuk angka, false untuk boolean, karakter dengan nilai Unicode 0 untuk char dan null untuk objek. Elemen di dalam array daftar dapat dirujuk dengan daftar[0], daftar[1], daftar[2], daftar[3], dan daftar[4] (ingat juga bahwa nilai indeks terbesar adalah panjangnya array dikurang satu). Akan tetapi, referensi array sebetulnya lebih umum lagi. Tanda kurung di dalam referensi array bisa berisi ekspresi apapun yang nilainya suatu integer. Misalnya jika idks adalah variabel bertipe int, maka daftar[idks] dan daftar[2*idks+3] secara sintaks benar. Contoh berikut akan mencetak semua isi integer di dalam array daftar ke layar : for (int i = 0; i < daftar.length; i++) { System.out.println( daftar[i] ); } Perulangan pertama adalah ketika i = 0, dan daftar[i] merujuk pada daftar[0]. Jadi nilai yang disimpan pada variabeldaftar[0] akan dicetak ke layar. Perulangan kedua adalah i = 1, sehingga nilai daftar[i] dicetak. Perulangan berhenti setelah mencetak daftar[4] dan i menjadi sama dengan 5, sehingga kondisi lanjutan "i < daftar.length" tidak lagi benar. Ini adalah contoh umum dari menggunakan perulangan untuk mengolah suatu array. Penggunaan suatu variabel dalam suatu program menyatakan lokasi di memori. Pikirkan sesaat tentang apa yang akan komputer lakukan ketika ia menemukan referensi ke elemen suatu array daftar[k] ketika program berjalan. Komputer harus menentukan
Page 55

Rangkuman Aplikasi dan Basis Data

lokasi memori di mana ia dijadikan referensi. Untuk komputer, daftar[k] berarti : "Ambil pointer yang disimpan di dalam variabeldaftar. Ikuti pointer ini untuk mencari objek array. Ambil nilai k. Pergi ke posisi ke-k dari array tersebut, dan di sanalah alamat memori yang Anda ingin." Untuk suatu variabel array, seperti variabel lainnya, kita bisa mendeklarasikan dan mengisinya dengan satu langkah sekaligus, misalnya : int[] daftar = new int[5]; Jika daftar merupakan variabel lokal dalam subrutin, maka perintah di atas akan persis sama dengan dua perintah : int[] daftar; daftar = new int[5]; (Jika daftar adalah variabel instansi, tentukan kita tidak bisa mengganti "int[] daftar = new int[5];" dengan "int[]daftar; daftar = new int[5];" karena ini hanya bisa dilakukan di dalam subrutin) Array yang baru dibuat akan diisi dengan nilai awal yang tergantung dari tipe dasar array tersebut seperti dijelaskan sebelumnya. Akan tetapi Java juga menyediakan cara untuk memberi isi array baru dengan daftar isinya. Dalam pernyataan yang untuk membuat array, ini bisa dilakukan dengan menggunakan penginisialiasi array (array initializer), misalny : int[] daftar = { 1, 4, 9, 16, 25, 36, 49 }; akan membuat array baru yang berisi 7 nilai, yaitu 1, 4, 9, 16, 25, 36, dan 49, dan mengisi daftar dengan referensi ke array baru tersebut. Nilai daftar[0] berisi 1, nilai daftar[1] berisi 4, dan seterusnya. Panjang daftar adalah 7, karena kita memberikan 7 nilai awal kepada array ini. Suatu penginisialisasi array memiliki bentuk daftar angka yang dipisahkan dengan koma dan diapit dengan tanda kurung kurawal {}. Panjang array tersebut tidak perlu diberikan, karena secara implisit sudah bisa ditentukan dari jumlah daftar angkanya. Elemen di dalam penginisialisasi array tidak harus selalu berbentuk konstanta. Juga bisa merupakan variabel atau ekspresi apa saja, asalkan nilainya bertipe
Rangkuman Aplikasi dan Basis Data Page 56

sama dengan tipe dasar array tersebut. Misalnya, deklarasi berikut membuat array dari delapan jenis Colorbeberapa warna telah dibentuk dengan ekspresi "new Color(r,g,b);" Color[] palette = { Color.black, Color.red, Color.pink, new Color(0,180,0), // hijau gelap Color.green, Color.blue, new Color(180,180,255), // biru muda Color.white }; Inisialisasi array bentuk seperti ini hanya bisa digunakan dalam deklarasi suatu variabel baru, akan tetapi tidak bisa digunakan seperti operator pemberi nilai (=) di tengah-tengah suatu program. Akan tetapi ada cara lain yang bisa digunakan sebagai pernyataan pemberian nilai atau diberikan ke dalam subrutin. Yaitu menggunakan jenis lain dari operator new untuk membuat atau menginisialisasi objek array baru. (Cara ini agak kaku dengan sintaks aneh, seperti halnya sintaks kelas anonim yang telah didiskusikan sebelumnya). Misalnya untuk memberi nilai kepada suatu variabel daftar, kita bisa menggunakan : daftar = new int[] { 1, 8, 27, 64, 125, 216, 343 }; Sintaks umum dari bentuk operator new seperti ini adalah new TipeDasar [ ] { daftar_nilai_nilai } Ini adalah suatu ekspresi yang isinya merupakan objek, dan bisa digunakan untuk banyak situasi di mana suatu objek dengan tipeTipeDasar dipentingkan. Misalnya buatTombol merupakan metode yang mengambil array String sebagai parameter, maka kita bisa menuliskan buatTombol( new String[] { "Stop", "Jalan", "Berikut", "Sebelum" } );
Rangkuman Aplikasi dan Basis Data Page 57

Catatan terakhir : untuk alasan sejarah, maka deklarasi int[] daftar; akan bernilai sama dengan int daftar[]; di mana sintaks tersebut digunakan dalam bahasa C dan C++. Akan tetapi sintaks alternatif ini tidak begitu masuk akan dalam Java, atau mungkin lebih baik dihindari. Lagian, maksudnya adalah mendeklarasikan variabel dengan tipe tertentu dan namanya adalah int[]. Akan lebih masuk akan untuk mengikuti siintaks "nama_tipe nama_variabel" seperti pada bentuk bertama.

4.1.2 Array Multidimensi Java mendukung pembuatan array multidimensi, maksudnya kita dapat menambahkan data array ke dalam sebuah array, cara pembuatanya adalah sebagai berikut : TipeArray namaArray [] [] = new TipeArray [jumlah] [jumlah];

Tipe apapun bisa digunakan sebagai tipe dasar suatu array. Kita bisa membuat array int, array String, array Object dan seterusnya. Terutama, karena array adalah tipe Java kelas satu, kita bisa membuat array yang bertipe array. Misalnya suatu array bertipe int[], juga otomatis memiliki array bertipe int[][], yaitu "array bertipe array int". Array tersebut disebut array 2 dimensi. Tentunya, dengan tipe int[][], kita juag bisa membuat arraynya dengan tipe int[][][], yang merupakan array 3 dimensi, dan seterusnya. Tidak ada batasan berapa dimensi array yang kita buat, akan tetapi bukan sesuatu yang biasa dilakukan untuk membuat array lebih dari 3 dimensi. Pembahasan kita akan lebih dikhususkan pada array 2 dimensi. Tipe TipeDasar[][] biasanya dibaca "array 2 dimensi bertipe TipeDasar" atau "array dari array TipeDasar". Deklarasi pernyataan "int[][] A;" adalah membuat variabel bernama A dengan tipe int[][]. Variabel ini berisi objek yang bertipe int[][]. Pernyataan pemberian nilai "A = new

Rangkuman Aplikasi dan Basis Data

Page 58

int[3][4];" akan membuat objek array 2 dimensi dan mengisi A ke objek yang baru dibuat tersebut. Seperti biasa, deklarasi dan pemberian nilai bisa digabung menjadi satu pernyataan, seperti "int[][] A = new int[3][4];". Objek yang baru dibuat adalah objek yang merupakan array dari array int. Bagian int[3][4] menyatakan bahwa ada 3 array int di dalam array A, dan di setiap array int tersebut terdapat 4 int. Cara seperti itu mungkin sedikit membingungkan, akan tetapi akan lebih mudah apabila kita bayangkan array tersebut seperti matriks. Istilah "int[3][4]" bisa disebut sebagai matriks dengan 3 baris dan 4 kolom, seperti pada ilustrasi berikut ini :

Untuk banyak hal, kita bisa mengabaikan kenyataan di atas, dan membayangkan bentuk matriks seperti di atas. Kadang-kadang kita juga harus ingat bahwa setiap baris sebenarnya juga merupakan suatu array. Array-array ini bisa dirujuk dengan A[0], A[1], dan A[2]. Setiap baris bertipe int[]. Pernyataan A[1] merujuk pada salah satu baris pada array A. Karena A[1] itu sendiri sebenarnya adalah array int, kita bisa menambah indeks lain untuk merujuk pada
Rangkuman Aplikasi dan Basis Data Page 59

posisi pada baris tersebut. Misalnya A[1][3] adalah elemen nomor 3 pada baris 1. Seperti biasa, ingat bahwa posisi baris dan kolom dimulai dari 0. Jadi pada contoh di atas, A[1][3] bernilai 5. Lebih umum lagi,A[i][j] adalah posisi pada baris i dan kolom j. Seluruh elemen pada A bisa dinamakan seperti berikut : A[0][0] A[0][1] A[1][0] A[1][1] A[2][0] A[2][1] A[i][j] adalah A[0][2] A[1][2] A[2][2] variabel A[0][3] A[1][3] A[2][3] bertipe int. Kita bisa mengisi nilainya atau

menggunakannya seperti variabel bertipe int biasa.Perlu juga diketahui bahwa A.length akan memberikan jumlah baris pada A. Untuk mendapatkan jumlah kolom pada A, kita harus mencari jumlah int dalam setiap baris, yaitu yang disimpan pada A[0]. Jumlah kolom ini bisa didapatkan dengan menggunakan A[0].length, atau A[1].length atau A[2].length. (Tidak ada aturan baku yang menyatakan bahwa pada setiap baris suatu array harus memiliki panjang yang sama, dan sebenarnya pada beberapa aplikasi, juga digunakan array dengan panjang yang berbeda-beda pada setiap barisnya. Akan tetapi apabila kita membuat array dengan perintah seperti di atas, maka kita akan selalu mendapatkan array dengan panjang array yang sama.) Array 3 dimensi juga dibuat dan diolah dengan cara yang sama. Misalnya, array 3 dimensi bertipe int bisa dibuat dengan pernyataan "int[][][] B = new int [7][5][11];". Kita juga bisa mengilustrasikannya sebagai kubus 3-dimensi. Masing-masing bloknya bertipe int yang bisa dipanggil dalam bentuk B[i][j][k]. Array dimensi lain yang lebih tinggi juga mengikuti pola yang sama, akan tetapi akan sangat sulit untuk membuat visualisasi struktur arraynya.

Kita bisa mengisi array multi dimensi sekaligus pada saat dideklarasikan. Ingat sebelumnya bagaimana array 1 dimensi biasa dideklarasikan, dan bagaimana isinya diinisialisasikan, yaitu seperti daftar nilai-nilainya yang dipisahkan dengan koma, dan diletakkan di dalam tanda kurung kurawal { dan }.

Rangkuman Aplikasi dan Basis Data

Page 60

Inisialisasi array bisa juga digunakan untuk array multi dimensi, yang terdiri dari beberapa inisialisasi array 1 dimensi, masing-masing untuk setiap barisnya. Misalnya, array A pada gambar di atas dapat dibuat dengan perintah : int[][] A = { { 1, 0, 12, -1 }, { 7, -3, 2, 5 }, { -5, -2, 2, 9 } }; Jika tidak ada inisialisasi yang diberikan untuk suatu array, maka nilainya akan diisi dengan nilai awal tergantung pada tipenya : nol untuk bilangan, false untuk boolean dan null untuk objek.

Seperti halnya array 1 dimensi, array 2 dimensi juga sering diolah dengan menggunakan perulangan for. UNtuk mengolah semua elemen pada array 2 dimensi, kita bisa menggunakan pernyataan for bertingkat. Jika array A dideklarasikan seperti int[][] A = new int[3][4]; maka kita bisa mengisi 0 untuk semua elemen pada A dengan menggunakan for (int baris = 0; baris < 3; baris++) { for (int kolom = 0; kolom < 4; kolom++) { A[baris][kolom] = 0; } } Pertama kali perulangan for bagian luar akan memproses dengan baris = 0. Bagian dalamnya akan mengisi keempat kolom pada baris pertama, yaitu A[0][0] = 0, A[0][1] = 0, A[0][2] = 0, dan A[0][3] = 0. Kemudian perulangan for bagian luar akan mengisi baris kedua, dan seterusnya. Dan juga, kita bisa menjumlah semua elemen pada A dengan int jml = 0; for (int i = 0; i < 3; i++) for (int j = 0; j < 4; i++)
Rangkuman Aplikasi dan Basis Data Page 61

jml = jml + A[i][j]; Untuk mengolah array 3 dimensi, tentunya kita harus menggunakan perulangan for bertingkat 3. Suatu array 2 dimensi bisa digunakan untuk menyimpan data yang secara alami memang tersusun sebagai baris dan kolom. Misalnya papan catur terdiri dari 8 baris dan 8 kolom. Jika suatu kelas dinamakan PapanCatur untuk merepresentasikan papan catur, maka kita bisa deklarasikan dengan perintah PapanCatur[][] papan = new PapanCatur[8][8]; Kadang-kadang array 2 dimensi juga digunakan untuk masalah yang tidak terlalu jelas matriksnya. Misalnya perusahaan yang memiliki 25 toko. Anggap masing-masing toko memiliki keuntungan yang didapat pada masing-masing toko tersebut setiap bulan pada tahun 2009. Jika toko-toko tersebut memiliki nomor 0 hingga 24, dan 12 bulan dari Januari 09 hingga Desember 09 dinomori 0 hingga 11, maka data keuntungan dapat disimpan dalam array untung yang dideklarasikan seperti : double[][] untung = new double[25][12]; untung[3][2] adalah keuntungan yang dibuat oleh toko nomor 3 di bulan Maret. Atau secara umum,untung[noToko][noBulan] adalah keuntungan toko noToko pada bulan noBulan. Dalam contoh ini array 1 dimensiuntung[noToko] memiliki arti : Data keuntungan satu toko selama satu tahun. Anggap array untung telah diisi dengan data. Data ini bisa diolah lebih lanjut. Misalnya, total keuntungan seluruh perusahaan -- sepanjang tahun dari seluruh toko -dapat dihitung dengan menjumlahkan semua elemen pada array : double totalUntung; // Total keuntungan perusahaan tahun 2009

totalUntung = 0; for (int toko = 0; toko < 25; toko++) { for (int bulan = 0; bulan < 12; bulan++) totalUntung += untung[toko][bulan]; }
Rangkuman Aplikasi dan Basis Data Page 62

Kadang-kadang kita juga perlu menghitung hanya satu baris atau satu kolom saja, bukan keseluruhan array. Misalnya, kita ingin menghitung keuntungan total perusahaan pada bulan Desember, yaitu bulan nomor 11, maka kita bisa gunakan perulangan : double untungDesember = 0.0; for (noToko = 0; noToko < 25; noToko++) untungDesember += untung[noToko][11]; Sekarang mari kita buat array 1 dimensi yang berisi total keuntungan seluruh toko setiap bulan : double[] untungBulanan; // Keuntungan setiap bulan untungBulanan = new double[12];

for (int bulan = 0; bulan < 12; bulan++) { // hitung total keuntungan semua toko bulan ini untungBulanan[bulan] = 0.0; for (int toko = 0; toko < 25; toko++) { untungBulanan[bulan] += profit[toko][bulan]; } } Sebagai contoh terakhir untuk mengolah array keuntungan, misalnya kita ingin tahu toko mana yang menghasilkan keuntungan terbesar sepanjang tahun. Untuk menghitungnya, kita harus menjumlahkan keuntungan setiap toko sepanjang tahun. Dalam istilah array, ini berarti kita ingin mengetahui jumlah setiap baris pada array. Kita perlu mencatat hasil perhitungannya untuk mencari mana toko dengan keuntungan terbesar. double untungMaks; // Keuntungan terbesar suatu toko int tokoTerbaik; // Nomor toko yang memiliki keuntungan terbesar

double total = 0.0; // Total keuntungan suatu toko


Rangkuman Aplikasi dan Basis Data Page 63

// Pertama-tama hitung keuntungan dari toko nomo 0

for (int bulan = 0; bulan < 12; bulan++) total += untung[0][bulan];

tokoTerbaik = 0; // Mulai dengan anggapan toko nomor 0 untungMaks = total; // adalah toko paling menguntungkan

// Sekarang kita lihat seluruh toko, dan setiap kali // kita melihat toko dengan keuntungan lebih besar dari // untungMaks, kita ganti untungMaks dan tokoTerbaik // dengan toko tersebut

for (toko = 1; toko < 25; toko++) {

// Hitung keuntungan toko tersebut sepanjang tahun total = 0.0; for (bulan = 0; bulan < 12; bulan++) total += untung[toko][bulan];

// Bandingkan keuntungan toko ini dengan untungMaks if (total > untungMaks) { untungMaks = total; // keuntungan terbesar saat ini tokoTerbaik = toko; // datang dari toko ini }

} // akhir for

Rangkuman Aplikasi dan Basis Data

Page 64

// Di sini, untungMaks adalah keuntungan terbesar dari 25 toko // dan tokoTerbaik adalah toko dengan keuntung tersebut // (Mungkin juga ada toko yang menghasilkan keuntungan // yang persis sama.) 4.1.3 Memanipulasi Data dalam Array Setelah membuat Array, maka untuk melakukan proses manipulasi seperti menambahkan data ke Array, mengubah data di Array ataupun mengakses data dalam Array, maka diperlukan sebuah indeks, dimana saat membuat sebuah array dengan jumlah data 5, maka hasilnya akan terlihat seperti ini.

No 1 2 3 4 5

Indeks 0 1 2 3 4

Artinya data ke 1 dapat diakses menggunakan indeks 0 dan seterusnya. Dan untuk melakukan proses manipulasi data dalam array menggunakan indeks dapat digunakan dengan perintah :

namaArray [indeks];

Misal :

int a[] = new int [5];

a[0] = 234; a[1] = 6867;


Rangkuman Aplikasi dan Basis Data Page 65

a[2] = 4234; a[3] = 564; a[4] = 2423;

System.out.println (a[0]); System.out.println (a[1]); System.out.println (a[2]); System.out.println (a[3]); System.out.println (a[4]);

Array merupakan jenis struktur data yang sangat dasar dan sangat penting. Teknik pengolahan array merupakan teknik pemrograman yang paling penting yang kita harus kuasai. Dua jenis teknik pengolahan array -- pencarian dan pengurutan -- akan dibahas kemudian. Bagian ini akan memperkenalkan beberapa ide dasar pengolahan array secara umum. Dalam banyak hal, pengolahan array berarti menggunakan operasi yang sama kepada setiap elemen di dalam array. Biasanya sering dilakukan dengan perulangan for. Perulangan untuk mengolah semua elemen dalam array A dapat ditulis dalam bentuk : // lakukan inisialiasi yang diperlukan sebelumnya for (int i = 0; i < A.length; i++) { . . . // proses A[i] } Misalnya, A adalah array dengan tipe double[]. Misalnya kita ingin menjumlah semua nilai dalam array tersebut. Algoritma umum untuk melakukannya adalah : Mulai dengan 0; Tambah A[0]; (proses elemen pertama di dalam A) Tambah A[1]; (proses elemen kedua di dalam A)
Rangkuman Aplikasi dan Basis Data Page 66

. . . Tambah A[ A.length - 1 ]; (proses elemen terakhir di dalam A) Dengan menggunakan pengetahuan yang kita telah pelajari tentang perulangan, kita bisa ubah algoritma di atas menjadi bentuk perulangan for seperti berikut: double jumlah; // Jumlah nilai di dalam A jumlah = 0; // Mulai dengan 0 for (int i = 0; i < A.length; i++) jumlah += A[i]; // tambah A[i] ke dalam jumlah untuk i = 0, 1, ..., A.length - 1 Lihat bahwa kondisi kelanjutan "i < A.length" menyatakan bahwa nilai i terakhir yang akan diolah adalah A.length - 1 yaitu elemen terakhir dalam array. Ingat bahwa kita menggunakan "<" bukan "<=" karena dengan "<=" komputer akan memberikan kesalahan indeks di luar batas. Pada akhirnya, nanti Anda akan bisa membuat perulangan seperti di atas di luar kepala. Kita akan lihat beberapa contohnya. Di sini perulangan akan menghitung banyaknya elemen di dalam array A yang nilainya kurang dari nol : int hitung; // Untuk menghitung elemen hitung = 0; // Mulai dengan nol for (int i = 0; i < A.length; i++) { if (A[i] < 0.0) // Jika elemen ini kurang dari nol hitung++; } // Di sini nilai "hitung" adalah banyaknya elemen yang kurang dari 0. Kita bisa mengganti "A[i] < 0.0" jika kita ingin menghitung banyaknya elemen di dalam array yang memiliki sifat tertentu. Variasinya akan memiliki tema yang sama. Misalnya kita ingin menghitung banyaknya elemen di dalam array A yang sama dengan elemen sesudahnya. Elemen setelah A[i] adalah A[i+1], sehingga kita bisa mengganti klausa if dengan "if (A[i] ==A[i+1])". Akan tetapi tunggu dulu : Tes ini tidak bisa digunakan apabila
Rangkuman Aplikasi dan Basis Data Page 67

// tambah hitung dengan 1

A[i] adalah elemen terakhir dalam array, karena tidak ada lagi array sesudahnya. Komputer akan menolak pernyataan ini. Sehingga kita harus berhenti satu elemen sebelum array terakhir, sehingga menjadi int hitung = 0; // lihat kondisi for berubah dibandingkan dengan contoh sebelumnya for (int i = 0; i < A.length - 1; i++) { if (A[i] == A[i+1]) hitung++; } Masalah umum lainnya adalah mencari nilai terbesar di dalam array A. Strateginya adalah lihat semua isi array, catat nilai terbesar saat itu. Kita akan simpan nilai terbesar yang kita temui dalam variabel maks. Pada saat kita melihat elemen array satu per satu, kapanpun kita melihat nilai elemen tersebut lebih besar dari maks kita akan mengganti nilai maks dengan nilai yang lebih besar tersebut. Setelah semua elemen array diproses, maka maks merupakan nilai elemen terbesar di dalam array tersebut. Pertanyaannya adalah, apa nilai awal maks? Salah satu kemungkinannya adalah mulai dengan nilai maks sama dengan A[0], baru kemudian melihat isi elemen array lainnya mulai dengan A[1]. Misalnya, double maks = A[0]; // nilai maks berisi elemen array pertama for (int i = 1; i < A.length; i++) { // i mulai dari elemen kedua if (A[i] > maks) max = A[i]; } // Di sini maks berisi nilai elemen array yang paling besar (Ada masalah yang lebih penting di sini. Java membolehkan array memiliki panjang nol. Artinya bahkan A[0] pun tidak ada di dalam array, sehingga memanggil A[0] akan menghasilkan kesalahan indeks keluar batas. Akan tetapi array biasanya array dengan panjang nol biasanya sesuatu yang kita ingin hindarkan dalam kehidupan sehari-

Rangkuman Aplikasi dan Basis Data

Page 68

hari. Lagian apa artinya mencari nilai terbesar di dalam suatu array yang panjangnya nol?) Contoh terakhir dari operasi array, misalnya kita ingin mengkopi suatu array. Untuk mengkopi array A, tidak cukup untuk menggunakan perintah double[] B = A; karena perintah ini tidak membuat objek array baru. Yang dibuat di sini adalah variabel baru yang merujuk pada objek yang sama dengan A. (Sehingga perubahan yang terjadi pada A[i] akan juga menyebabkan B[i] berubah). Untuk membuat array baru yang merupakan kopi dari array A, kita harus membuat objek array baru, dan mengkopi isinya satu per satu dari array A ke array baru, sehingga // Buat objek array baru, yang panjangnya sama dengan panjang A double[] B = new double[A.length];

for (int i = 0; i < A.length; i++) B[i] = A[i]; // Kopi setiap elemen dari A ke B Mengkopi nilai dari satu array ke array yang lain adalah operasi umum sehingga Java memiliki subrutin untuk melakukannya, yaituSystem.arraycopy(), yang merupakan subrutin anggota statik dari kelas standar System. Deklarasinya memiliki bentuk seperti : public static void arraycopy(Object arraySumber, int indeksAwalSumber,Object arrayTujuan, int indeksAwalTujuan, int jumlah)di mana arraySumber dan arrayTujuan bisa berbentuk array dengan tipe apapun. Nilai akan dikopi dari arraySumber kearrayTujuan. jumlah adalah berapa banyak elemen yang akan dikopi. Nilai akan dikopi dari arraySumber mulai dari posisiindeksAwalSumber dan akan disimpan pada arrayTujuan mulai dari posisi indeksAwalTujuan. Misalnya kita akan mengkopi array A, maka kita bisa menggunakan perintah double B = new double[A.length]; System.arraycopy( A, 0, B, 0, A.length );

Suatu tipe array, misalnya double[] adalah tipe Java biasa, sehingga kita bisa menggunakannya seperti tipe-tipe Java lainnya. Termasuk juga digunakan sebagai
Rangkuman Aplikasi dan Basis Data Page 69

parameter formal di dalam suatu subrutin. Juga bisa digunakan sebagai tipe keluaran suatu fungsi. Misalnya, kita bisa menulis fungsi yang membuat kopi array dengan tipe double sebagai berikut : double[] kopi( double[] sumber ) { // Membuat dan mengembalikan kopi array sumber // Jika sumber null, maka kembalikan null if ( sumber == null ) return null; double[] kpi; // Kopi array sumber kpi = new double[sumber.length]; System.arraycopy( sumber, 0, kpi, 0, sumber.length ); return kpi; } Rutin main() memiliki parameter dengan tipe String[] yang merupakan array String. Ketika sistem memanggil rutin main(), string di dalam array ini adalah parameter dari baris perintah. Jika kita menggunakan konsol, user harus mengetikkan perintah untuk menjalankan program. User bisa menambahkan input tambahan dalam perintah ini setelah nama program yang akan dijalankan. Misalnya, jika kelas yang memiliki rutin main() bernama programKu, maka user bisa menjalankan kelas tersebut dengan perintah "java programKu" di konsol. Jika kita tulis dengan "java programKu satu dua tiga", maka parameter dari baris perintahnya adalah "satu", "dua", dan "tiga". Sistem akan memasukkan parameter-parameter ini ke dalam array String[] dan memberikan array ini pada rutin main(). Berikut ini adalah contoh program sederhana yang hanya mencetak parameter dari baris perintah yang dimasukkan oleh user. public class CLDemo { public static void main(String[] args) { System.out.println("Anda memasukkan " + args.length + " parameter dari baris perintah");
Rangkuman Aplikasi dan Basis Data Page 70

if (args.length > 0) { System.out.println("Parameter tersebut adaah :"); for (int i = 0; i < args.length; i++) System.out.println(" " + args[i]); } } // akhir main() } // akhir kelas CLDemo Perhatikan bahwa parameter args tidak mungkin null meskipun tidak ada parameter yang dimasukkan. Jika tidak ada parameter dari baris perintah yang dimasukkan, maka panjang array ini adalah nol.

Hingga sekarang, contoh yang telah diberikan adalah bagaimana mengolah array dengan mengakses elemennya secara berurutan (sequential access). Artinya elemenelemen array diproses satu per satu dalam urutan dari awal hingga akhir. Akan tetapi salah satu keuntungan array adalah bahwa array bisa digunakan untuk mengakses elemennya secara acak, yaitu setiap elemen bisa diakses kapan saja secara langsung. Misalnya, kita ambil contoh suatu masalah yang disebut dengan masalah ulang tahun: Misalnya ada N orang di dalam suatu ruangan. Berapa kemungkinan dua orang di dalam ruangan tersebut memiliki ulang tahun yang sama (yang dilahirkan pada tanggal dan bulan yang sama, meskipun tahunnya berbeda)? Kebanyakan orang salah menerka jawabannya. Sekarang kita lihat dengan versi masalah yang berbeda: Misalnya kita memilih orang secara acak dan menanyakan ulang tahunnya. Berapa orang yang Anda harus tanya untuk mendapatkan hari ulang tahun yang sama dengan orang sebelumnya? Tentunya jawabannya akan tergantung pada faktor yang bersifat acak, akan tetapi kita bisa simulasikan dengan program komputer dan menjalankan beberapa kali hingga kita tahu berapa kira-kira orang harus dicek. Untuk mensimulasikan percobaan ini, kita harus mencatat semua ulang tahun yang kita sudah tanyakan. Ada 365 kemungkinan hari ulang tahun (Kita abaikan sementara tahun
Rangkuman Aplikasi dan Basis Data Page 71

kabisat). Untuk setiap kemungkinan hari ulang tahun, kita perlu tahu, apakah hari ulang tahun tersebut telah digunakan? Jawabannya adalah nilai boolean true atau false. Untuk menyimpan data ini, kita bisa gunakan array dari 365 nilai boolean: boolean[] sudahDitanya; sudahDitanya = new boolean[365]; Tanggal-tanggal pada satu tahun dinomori dari 0 hingga 364. Nilai sudahDitanya[i] akan bernilai true jika orang yang kita tanya berulang tahun pada hari tersebut. Pada awalnya semua nilai pada array sudahDitanya[i] bernilai false. Ketika kita memilih satu orang dan menanyakan hari ulang tahunnya, misalnya i, kita akan mengecek terlebih dahulu apakah sudahDitanya[i] bernilai true. Jika tidak maka orang ini adalah orang kedua dengan ulang tahun yang sama. Artinya kita sudah selesai. Jika sudahDitanya[i] bernilai false, maka belum ada orang sebelum ini yang memiliki hari ulang tahun tersebut. Kita akan gantisudahDitanya[i] dengan true, kemudian kita akan tanyakan lagi kepada orang lain, dan begitu seterusnya hingga semua orang di dalam ruangan ditanyakan. static void masalahUlangTahun() { // Melakukan simulasi dengan memilih seseorang secara acak // dan mengecek hari ulang tahunnya. Jika hari ulang tahunnya // sama dengan orang yang pernah kita tanya sebelumnya, // hentikan program dan laporkan berapa orang yang sudah dicek

boolean[] sudahDitanya; // Untuk mencatat ulang tahun yang sudah ditanyakan // Nilai true pada sudahDitanya[i] berarti orang lain // sudah ada yang berulang tahun pada hari i

int hitung; // Jumlah orang yang sudah pernah ditanya

Rangkuman Aplikasi dan Basis Data

Page 72

sudahDitanya = new boolean[365]; // Awalnya, semua nilai adalah false

hitung = 0;

while (true) { // Ambil ulang tahun secara acak dari 0 hingga 364 // Jika ulang tahun telah ditanya sebelumnya, keluar // Jika tidak catat dalam array

int ultah; // Ulang tahun seseorang ultah = (int)(Math.random()*365); hitung++; if ( sudahDitanya[ultah] ) break; sudahDitanya[ultah] = true; }

System.out.println("Ulang tahun yang sama ditemukan setelah menanyakan " + hitung + " orang.");

} // akhir masalahUlangTahun() Subrutin ini menggunakan fakta bahwa array boolean yang baru dibuat memiliki seluruh elemen yang bernilai false. Jika kita ingin menggunakan array yang sama untuk simulasi kedua, kita harus mereset ulang semua elemen di dalamnya menjadi false kembali dengan perulangan for for (int i = 0; i < 365; i++) sudahDitanya[i] = false;

Rangkuman Aplikasi dan Basis Data

Page 73

Array paralel adalah menggunakan beberapa array dengan indeks yang sama. Misalnya kita ingin membuat beberapa kolom secara paralel -- array x di kolom pertama, array y di kolom kedua, array warna di kolom ketiga, dan seterusnya. Data untuk baris ke-i bisa didapatkan dari masing-masing array ini. Tidak ada yang salah dengan cara ini, akan tetapi cara ini berlawanan dengan filosofi berorientasi objek yang mengumpulkan data yang berhubungan di dalam satu objek. Jika kita mengikuti aturan seperti ini, amaka kita tidak harus membayangkan hubungan data yang satu dan yang lainnya karena semua data akan dikelompokkan di dalam satu tempat. Misalnya saya menulis kelas seperti class DataString { // Data dari salah satu pesan int x,y; // Posisi pesan

Color warna; // Warna pesan } Untuk menyimpan data dalam beberapa pesan, kita bisa menggunakan array bertipe DataString[], yang kemudian dideklarasikan sebagai variabel instansi dengan nama data sehingga DataString[] data; Isi dari data bernilai null hingga kita membuat array baru, misalnya dengan data = new DataString[JUMLAH_PESAN]; Setelah array ini dibuat, nilai setiap elemen array adalah null. Kita ingin menyimpan data di dalam objek yang bertipeDataString, akan tetapi tidak ada objek yang dibuat. Yang kita sudah buat hanyalah kontainernya saja. Elemen di dalamnya berupa objek yang belum pernah kita buat. Untuk itu elemen di dalamnya bisa kita buat dengan perulangan for seperti : for (int i = 0; i < JUMLAH_PESAN; i++) data[i] = new DataString(); Sekarang kita bisa mengambil data setiap pesan dengan data[i].x, data[i].y, dan data[i].warna.Terakhir berkaitan dengan pernyataan switch. Misalnya kita memiliki nilai
Rangkuman Aplikasi dan Basis Data Page 74

bulan dari 0 hingga 11, yang melambangkan bulan dalam satu tahun dari Januari hingga Desember. Kita ingin mencetaknya di layar, dengan perintah switch (bulan) { case 0: bulanString = "Januari"; break; case 1: bulanString = "Februari"; break; case 2: bulanString = "Maret"; break; case 3: bulanString = "April"; break; . . . case 11: bulanString = "Desember"; break; default: bulanString = "Salah bulan"; } Kita bisa mengganti keseluruhan perintah switch tersebut dengan menggunakan array, misalnya dengan array namaBulan yang dideklarasikan sebagai berikut : static String[] namaBulan = { "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember" };
Rangkuman Aplikasi dan Basis Data Page 75

Kemudian kita bisa ganti keseluruhan switch di atas dengan bulanString = namaBulan[bulan]; 4.1.4 Mendeklarasikan Array Untuk membuat variabel array pun berbeda dengan membuat variabel biasanya yaitu sebagai berikut : TipeArray namaArray []; Dimana tipe array dapat berupa tipe data biasa seperti int, char, short atau juga kelas seperti String dan yang lainya.

Rangkuman Aplikasi dan Basis Data

Page 76

BAB V PEMROGRAMAN BERORIENTASI OBJEK

Pemrograman berorientasi objek merupakan paradigma pemrograman yang berorientasikan kepada objek. Semua data dan fungsi di dalam paradigma ini dibungkus dalam kelas-kelas atau objek-objek. Bandingkan dengan logika pemrograman terstruktur. Setiap objek dapat menerima pesan, memproses data, dan mengirim pesan ke objek lainnya, Model data berorientasi objek dikatakan dapat memberi fleksibilitas yang lebih, kemudahan mengubah program, dan digunakan luas dalam teknik piranti lunak skala besar. Lebih jauh lagi, pendukung OOP mengklaim bahwa OOP lebih mudah dipelajari bagi pemula dibanding dengan pendekatan sebelumnya, dan pendekatan OOP lebih mudah dikembangkan dan dirawat. Konsep dasar dari Pemrograman Berorientasi Objek Pemrograman orientasiobjek menekankan konsep berikut: 1. Kelas Kumpulan atas definisi data dan fungsi-fungsi dalam suatu unit untuk suatu tujuan tertentu. Sebagai contoh 'class of dog' adalah suatu unit yang terdiri atas definisidefinisi data dan fungsi-fungsi yang menunjuk pada berbagai macam perilaku/turunan dari anjing. Sebuah class adalah dasar dari modularitas dan struktur dalam pemrograman berorientasi object. Sebuah class secara tipikal sebaiknya dapat dikenali oleh seorang non-programmer sekalipun terkait dengan domain permasalahan yang ada, dan kode yang terdapat dalam sebuah class sebaiknya (relatif) bersifat mandiri dan independen (sebagaimana kode tersebut digunakan jika tidak menggunakan OOP). Dengan modularitas, struktur dari sebuah program akan terkait dengan aspek-aspek

Rangkuman Aplikasi dan Basis Data

Page 77

dalam masalah yang akan diselesaikan melalui program tersebut. Cara seperti ini akan menyederhanakan pemetaan dari masalah ke sebuah program ataupun sebaliknya.

2.

Objek Membungkus data dan fungsi bersama menjadi suatu unit dalam sebuah

program komputer; objek merupakan dasar dari modularitas dan struktur dalam sebuah program komputer berorientasi objek.

3.

Abstraksi Kemampuan sebuah program untuk melewati aspek informasi yang diproses

olehnya, yaitu kemampuan untuk memfokus pada inti. Setiap objek dalam sistem melayani sebagai model dari "pelaku" abstrak yang dapat melakukan kerja, laporan dan perubahan keadaannya, dan berkomunikasi dengan objek lainnya dalam sistem, tanpa mengungkapkan bagaimana kelebihan ini diterapkan. Proses, fungsi atau metode dapat juga dibuat abstrak, dan beberapa teknik digunakan untuk mengembangkan sebuah pengabstrakan.

4.

Enkapsulasi Memastikan pengguna sebuah objek tidak dapat mengganti keadaan dalam dari

sebuah objek dengan cara yang tidak layak; hanya metode dalam objek tersebut yang diberi izin untuk mengakses keadaannya. Setiap objek mengakses interface yang menyebutkan bagaimana objek lainnya dapat berinteraksi dengannya. Objek lainnya tidak akan mengetahui dan tergantung kepada representasi dalam objek tersebut.

5.

Polimorfisme Melalui pengiriman pesan. Tidak bergantung kepada pemanggilan subrutin,

bahasa orientasi objek dapat mengirim pesan; metode tertentu yang berhubungan dengan sebuah pengiriman pesan tergantung kepada objek tertentu di mana pesa
Page 78

Rangkuman Aplikasi dan Basis Data

tersebut dikirim. Contohnya, bila sebuah burung menerima pesan "gerak cepat", dia akan menggerakan sayapnya dan terbang. Bila seekor singa menerima pesan yang sama, dia akan menggerakkan kakinya dan berlari. Keduanya menjawab sebuah pesan yang sama, namun yang sesuai dengan kemampuan hewan tersebut. Ini disebut polimorfisme karena sebuah variabel tungal dalam program dapat memegang berbagai jenis objek yang berbeda selagi program berjalan, dan teks program yang sama dapat memanggil beberapa metode yang berbeda di saat yang berbeda dalam pemanggilan yang sama. Hal ini berlawanan dengan bahasa fungsional yang mencapai polimorfisme melalui penggunaan fungsi kelas-pertama.

Dengan menggunakan OOP maka dalam melakukan pemecahan suatu masalah kita tidak melihat bagaimana cara menyelesaikan suatu masalah tersebut (terstruktur) tetapi objek-objek apa yang dapat melakukan pemecahan masalah tersebut. Sebagai contoh anggap kita memiliki sebuah departemen yang memiliki manager, sekretaris, petugas administrasi data dan lainnya. Misal manager tersebut ingin memperoleh data dari bag administrasi maka manager tersebut tidak harus mengambilnya langsung tetapi dapat menyuruh petugas bag administrasi untuk mengambilnya. Pada kasus tersebut seorang manager tidak harus mengetahui bagaimana cara mengambil data tersebut tetapi manager bisa mendapatkan data tersebut melalui objek petugas adminiistrasi. Jadi untuk menyelesaikan suatu masalah dengan kolaborasi antar objek-objek yang ada karena setiap objek memiliki deskripsi tugasnya sendiri.

5.1

Objek, Metode Instansi dan Variable Instansi

Pada pemrograman berorientasi objek, kita membagi masalah pemrograman berdasarkan objek atau "sesuatu" benda. Objek ini diibaratkan seperti makhluk hidup, yaitu memiliki ciri-ciri fisik dan juga perilaku. Dalam pemrograman berorientasi objek, ciri-ciri fisik ini disebut juga sebagai atribut, pada dasarnya berisi informasi tentang

Rangkuman Aplikasi dan Basis Data

Page 79

objek tersebut. Sedangkan perilaku disebut sebagai metode, yaitu bagaimana suatu objek bertindak atau melakukan sesuatu. Dengan cara ini diharapkan pemrograman berorientasi objek merupakan pemrograman yang lebih alami dibandingkan dengan pemrograman berorientasi prosedur, karena cara fikir kita sudah terbiasa dengan bagaimana kita berinteraksi dengan dunia.Objek dalam kaitannya dengan dasar pemrograman adalah gabungan dari variabel (dalam hal ini atribut) dan subrutin (yaitu metode) yang berinteraksi dengan variabel pada objek. Seperti disebutkan sebelumnya bahwa kelas mendeskripsikan suatu objek, atau lebih tepatnya, bagian non "static" mendeskripsikan suatu objek. Mungkin bahasa biologi, kelas adalah species, sedangkan objek merupakan individu. Human sapiens (nama biologi manusia) adalah kelas, sedangkan Anda, saya, ibu, bapak, pak hansip adalah objek. Masing-masing dari kita memiliki "blueprint" atau cetak biru yang sama, tetapi kita memiliki ciri-ciri yang berbeda, rambut, mata, telinga, tinggi badan, berat badan, dan juga perilaku kita saat makan, minum, belajar, dan lain-lain. Dalam sudut pandang pemrograman, kelas digunakan untuk menciptakan suatu objek. Atau dengan kata lain, kelas adalah pabrik pembuat objek. Bagian non-statik dari suatu kelas adalah bagian yang memuat detail suatu objek, yaitu apa isi variabel dan metodenya. Perbedaan kelas dan objek adalah : Objek diciptakan dan dihancurkan ketika program berjalan, sehingga kita bisa memiliki beberapa objek sekaligus. Kita lihat contoh sederhana, dimana kelas sederhana digunakan untuk menggabungkan beberapa variabel statik. Misalnya class DataPenduduk { static String nama; static int umur; } Dalam hal ini tidak ada lagi yang variabel DataPenduduk.nama dan DataPenduduk.umur, karena nama dan umur bukan anggota statik kelas DataPenduduk.
Rangkuman Aplikasi dan Basis Data Page 80

Jadi, tidak ada yang bisa kita lakukan dengan kelas ini sama sekali, kecuali membuat objek dari kelas ini.Sekarang kita gunakan contoh yang lebih real. Kita akan buat versi sederhana dari kelas Murid, dimana kita akan menyimpan informasi tentang murid yang terdaftar pada suatu sekolah. class Murid { String nama ; // nama murid double nilai1, nilai2, nilai3; // nilai ulangan murid tersebut double hitungRataRata() { // hitung rata-rata nilai ulangan return (nilai1 + nilai2 + nilai3) / 3; } } Kita lihat bahwa semua anggota kelas tersebut bukan anggota statik, artinya kelas ini hanya bisa digunakan untuk membuat objek. Definisi kelas ini artinya bahwa di dalam objek yang akan diciptakan, akan ada variabel instansi yang bernama nama,nilai1, nilai2, dan nilai3, dan juga metode instansi yang bernama hitungRataRata(). Setiap murid memiliki nilai rata-rata yang berbeda-beda. (Makanya ini disebut perilaku suatu objek berbeda-beda). Dalam Java, kelas merupakan tipe data, yaitu mirip dengan tipe data bawaan seperti int atau boolean. Jadi nama kelas bisa digunakan untuk menentukan tipe suatu variabel dalam deklarasi pernyataan, Dalam Java, tidak ada variabel yang bisa menyimpan objek. Variabel hanya bisa menyimpan referensi (alamat di memori) suatu objek. Komputer akan menggunakan referensi ini untuk mencari objek di dalam memori. Objek diciptakan dengan pernyataan new, yang bertugas menciptakan objek kemudian mengembalikan referensi ke objek yang sudah diciptakan. Misalnya amir adalah variabel dengan tipe Murid seperti dideklarasikan di atas, maka pernyataan berikut : amir = new Murid();

Rangkuman Aplikasi dan Basis Data

Page 81

akan membuat objek yang merupakan instansi dari kelas Murid. Variabel amir akan menyimpan referensi ke objek yang baru saja diciptakan. Sekarang anggap variabel amir merujuk pada objek yang diciptakan dari kelas Murid. Dalam objek tersebut terdapat variabelnama, nilai1, nilai2, dan nilai3. Variabel instansi ini bisa dipanggil dengan amir.nama, amir.nilai1, amir.nilai2, danamir.nilai3. (Ingat aturan penulisan nama lengkap, akan tetapi karena kelas ini tidak memiliki anggota statik, dan hanya objek yang diciptakan dari kelas ini memiliki variabel atau metode ini, maka nama lengkapnya diturunkan dari nama objek yang memilikinya). Misalnya, program berikut : System.out.println("Hai, " + amir.nama + " . Nilai Anda adalah : "); System.out.println(amir.nilai1); System.out.println(amir.nilai2); System.out.println(amir.nilai3); Program di atas akan mencetak nama dan nilai-nilai yang disimpan oleh objek amir. Begitu juga kita bisa menghitung rata-rata pada suatu objek dengan menggunakan amir.hitungRataRata(). Sehingga untuk menghitung rata-rata murid tersebut, bisa kita perintahkan dengan: System.out.println("Nilai rata-rata Anda adalah : " + amir.hitungRataRata()); Lebih umum lagi, kita bisa menggunakan amir.nama seperti layaknya variabel bertipe String, artinya kita bisa menghitung jumlah karakter dengan menggunakan amir.nama.length(). Kita juga bisa membuat variabel seperti amir untuk tidak menunjuk atau memiliki referensi ke obek mana pun. Dalam hal ini kita sebut bahwa objek amir berisi referensi kosong (null reference). Referensi kosong ini ditulis dalam Java dengan ekspresi "null". Dan kita bisa menyimpan nilai "null" pada variabel amir dengan perintah : amir = null; Dan kita juga bisa uji apakah amir berisi referensi kosong dengan perintah if (amir == null) . . .

Rangkuman Aplikasi dan Basis Data

Page 82

Jika suatu variabel berisi referensi kosong, maka tentu saja, kita tidak bisa mengambil variabel instansi dan menjalankan metode instansi, karena tidak ada objek yang dirujuk pada variabel tersebut. Misalnya jika variabel amir berisi null, maka kita tidak bisa mengambil variabel amir.nilai1. Jika program kita mencoba mengakses referensi kosong secara ilegal, maka di tengah-tengah jalannya program, program akan menampilkan pesan kesalahan "null pointer exception". Mari kita lihat beberapa pernyataan yang bisa digunakan dengan objek : Murid mrd1, mrd2, mrd3, mrd4; Murid mrd1 = new Murid(); // membuat objek baru dari kelas Murid, kemudian // mendeklarasikan 4 variabel yang bertipe

menyimpan referensinya pada variabel mrd1 mrd2 = new Murid(); // membuat objek baru dari kelas Murid, kemudian

menyimpan referensinya pada variabel mrd2 mrd3 = mrd1; mrd3 mrd4 = null; // menyimpan referensi kosong ke mrd4 // menkopi referensi" yang disimpan pada mrd1 ke

mrd1.nama = "Ahmad Surahmat"; // mengisi nilai variabel instansi mrd2.nama = "Hamid Samsudin";

Setelah komputer menjalankan program tersebut, maka kira-kira memori komputer akan tampak seperti gambar berikut :

Rangkuman Aplikasi dan Basis Data

Page 83

Gambar tersebut menunjukkan variabel dalam kotak-kotak kecil dengan nama variabelnya. Objek ditunjukkan dalam kotak dengan pojok bulat. Ketika suatu variabel berisi referensi ke suatu objek, maka nilainya adalah seperti panah yang menunjuk pada objek tersebut. Variabel mrd4 bernilai null, sehingga tidak menunjuk ke mana-mana. Panah dari mrd1 dan mrd3 menjunjuk pada objek ang sama. Ini merupakan Hal Yang Sangat Penting : Jika isi variabel suatu objek diberikan kepada variabel yang lain, maka yang dikopi hanya referensinya saja. Isi objek tidak pernah dikopi. Ketika pernyataan "mrd3 = mrd1;" dieksekusi, tidak ada objek baru yang dibuat. Akan tetapi mrd3 akan merujuk pada alamat yang sama seperti mrd1. Konsekuensinya mungkin sedikit mengejutkan. Misalnya variabel mrd1.nama dan mrd3.nama menunjuk pada variabel yang persis sama, maka apabila mrd1.nama disi dengan "Juju Juminten", maka mrd3.nama juga berisi "Juju Juminten". Sekali lagi, variabel tidak berisi objek, akan tetapi berisi referensi ke suatu objek. Kita bisa menguji beberapa objek dengan operator == dan != untuk menguji kesamaan dan ketidaksamaan. Akan tetapi yang dicek lagi-lagi bukan isi objek,
Rangkuman Aplikasi dan Basis Data Page 84

melainkan alamat memori dimana objek tersebut dijadikan referensi. Jika alamat referensi di memori sama, artinya kedua objek tersebut merujuk pada alamat memori yang sama. Ini berarti perubahan yang dilakukan pada variabel yang satu akan ikut mempengaruhi variabel yang lain. Untuk menguji isinya, maka isinya harus dibandingkan satu per satu, yaitu misalnya dengan "mrd3.nilai1 == mrd1.nilai1 &&mrd3.nilai2 == mrd1.nilai2 && mrd3.nilai3 == mrd1.nilai3 && mrd3.nama.equals(mrd1.nama)" Seperti telah disebutkan sebelumnya bahwa String juga merupakan objek. Sehingga membandingkan String yang satu dengan String yang lain dengan menggunakan tanda == adalah membandingkan apakah alamat memori yang ditunjuk oleh String yang satu sama dengan alamat memori yang ditunjuk oleh String yang lain. Ingat == pada objek bukan membandingkan isi objek, tetapi membandingkan alamat memori yang ditunjuk oleh variabel tersebut. Untuk membandingkan isi String, kita dapat menggunakan String.equals() di mana parameternya adalah objek String yang akan dibandingkan. Metode ini akan membandingkan karakter per karakter dari kedua String. Misalnya, variabel salam berisi String "Selamat". Untuk menguji apakah variabel salam berisi "Selamat", bisa kita gunakan perintah salam.equals("Selamat") Konsekuensi lainnya adalah apabila suatu variabel merujuk pada objek yang dideklarasikan sebagai final. Ini berarti nilai variabel itu tidak bisa berubah setelah diinisialisasi, sedangkan isi variabel itu adalah rujukan ke alamat memori tempat objek berada. Dengan demikian variabel tersebut akan selalu menunjuk pada alamat memori yang sama. Akan tetapi hal ini tidak berlaku untuk objek itu sendiri. Apabila ada variabel lain yang tidak "final" tetapi menunjuk pada alamat memori yang sama, kemudian variabel ini mengubah isi objek tersebut, maka isi objek tersebut bisa berubah. Kita boleh saja untuk menulis perintah sebagai berikut. final Murid mrd = new Murid(); murid.nama = "Ahmad Basir";
Rangkuman Aplikasi dan Basis Data Page 85

Perhatikan pada kode di atas bahwa isi objek bisa diubah. Akan tetapi jika kita mencoba menulis seperti ini Murid mrd99 = new Murid(); mrd = mrd99; // ILEGAL, karena mrd adalah variabel final

5.2

Konstruktor dan Inisialisasi Objek

Kelas pada Java memiliki sifat yang sama sekali berbeda dengan tipe data primitif lainnya, seperti int atauboolean. Seperti disebutkan pada bagian sebelumnya, mendeklarasikan suatu variabel dengan tipe suatu kelas tidak berarti membuat objek dari kelas tersebut. Objek tersebut harus dibuat (constructed). Pada saat objek dibuat, komputer akan mencari tempat yang tidak dipakai pada memori heap untuk menempatkan objek tersebut, kemudian mengisi objek itu dengan variabel instansi. Sebagai programmer, kita tidak peduli dengan bagaimana suatu objek disimpan, akan tetapi kita ingin mengatur supaya nilai yang disimpan pada saat objek tersebut dibuat sesuai dengan keinginan kita. Dalam beberapa kasus, kita bahkan ingin suatu objek melakukan tugas tertentu untuk pertama kali begitu ia diciptakan. Variabel instansi dapat diisi dengan nilai awal pada saat ia dideklarasikan, seperti variabel lainnya. Misalnya, kelas berikut yang bernama PasanganDadu, yang melambangkan sepasang dadu. Kelas ini memiliki dua variabel instansi yang melambangkan nilai yang ditunjukkan oleh masing-masing dadu dan metode instansi untuk mengocok dadu, yaitu : class PasanganDadu { public int dadu1 = 3; // Angka pada dadu pertama public int dadu2 = 4; // Angka pada dadu kedua public void kocok() { // Kocok dadu dengan menggunakan bilangan acak antara 1 dan 6 dadu1 = (int)(Math.random()*6) + 1; dadu2 = (int)(Math.random()*6) + 1;
Rangkuman Aplikasi dan Basis Data Page 86

} } // akhir kelas PasanganDadu Variabel instansi dadu1 dan dadu2 diisi dengan nilai awal 3 dan 4. Inisialisasi ini dilakukan setiap kali objek PasanganDadu dibuat. Ingat bahwa kelas PasanganDadu hanya 1, akan tetapi kita bisa membuat banyak objek dari kelas ini. Setiap kali objek dibuat, objek tersebut memiliki tempat di memori sendiri, yang disebut dengan instansi objek tersebut. Perintah "dadu1 = 3" dan "dadu2 = 4" akan dieksekusi setiap kali objek dibuat. Kita bisa memodifikasi kelas PasanganDadu dengan nilai awal acak, bukan 3 dan 4 misalnya, dengan potongan kode berikut :

class PasanganDadu { public int dadu1 = (int)(Math.random()*6) + 1; // Angka pada dadu pertama public int dadu2 = (int)(Math.random()*6) + 1; // Angka pada dadu kedua

public void kocok() { // Kocok dadu dengan menggunakan bilangan acak antara 1 dan 6 dadu1 = (int)(Math.random()*6) + 1; dadu2 = (int)(Math.random()*6) + 1; } } // akhir kelas PasanganDadu

5.3

Kata Kunci This

Meskipun ide dasar dari pemrograman berorientasi objek merupakan konsep yang cukup sederhana dan jelas, akan tetapi untuk memahaminya dengan baik kita membuthkan lebih banyak waktu. Sayangnya, banyak sekali detail yang harus diulas di luar konsep dasarnya. Bagian ini dan bagian berikutnya akan berbicara tentang hal-hal

Rangkuman Aplikasi dan Basis Data

Page 87

detail, yang tidak perlu dikuasai dalam waktu singkat, akan tetapi pengenalan tentang hal detail ini sangat berguna paling tidak sebagai bahan referensi. Anggota statik suatu kelas bisa digunakan langsung di dalam kelas tersebut. Untuk digunakan di kelas lain, maka ia harus dipanggil dengan nama lengkapnya dalam bentuk "namaKelas.namaAnggota", misalnya "System.out" adalah variabel anggota statik dengan nama "out" di dalam kelas "System". Kita bisa menggunakan nama lengkap kelas tersebut di manapun, bahkan dari dalam kelas yang sama, misalnya karena nama anggota tersebut disembunyikan oleh variabel lokal yang namanya sama.

Variabel dan metode instansi juga bisa digunakan langsung di dalam kelas tersebut, misalnya suatu variabel instansi bisa digunakan langsung oleh metode instansi di kelas yang sama. Anggota instansi juga memiliki nama lengkap akan tetapi ingat bahwa anggota instansi dimiliki oleh objek, bukan kelas. Sehingga untuk memanggil suatu anggota instansi, kita harus menggunakan nama objek yang diciptakan dari kelas tersebut, dalam bentuk namaObjek.namaAnggota. Akan tetapi, misalnya kita sedang menulis metode instansi di suatu kelas. Bagaimana caranya kita memanggil anggota instansi kelas yang sama jika kita belum tahu nama objek apa yang diciptakan dari kelas ini? Java memiliki variabel spesial yang dinamakan "this" yang bisa digunakan untuk kasus di atas. Variabel ini digunakan pada suatu objek untuk memanggil metode atau variabel instansi pada objek yang sama. Maksudnya, this, merujuk pada "objek ini" yaitu objek di mana metode sedang dijalankan. Jika x adalah variabel instansi dalam suatu objek, maka this.x adalah nama lengkap variabel tersebut jika dipanggil dari dalam objek yang sama. Jika metode suatuMetode() adalah metode instansi pada suatu objek, maka this.suatuMetode() bisa digunakan untuk memanggil metode tersebut dari objek yang sama. Ketika komputer menjalankan perintah tersebut, komputer akan mengganti variabel this dengan objek yang berjalan pada saat itu. Salah satu kegunaaan this adalah pada konstruktor, misalnya : public class Murid {
Rangkuman Aplikasi dan Basis Data Page 88

private String nama; // Nama murid

public Murid(String nama) { // Konstruktor, membuat murid dengan nama yang diberikan this.nama = nama; } . . // Variabel dan metode lain. . } Dalam konstruktor di atas, variabel instansi nama disembunyikan oleh parameter formal yang bernama sama. Akan tetapi, variabel instansi masih tetap bisa dipanggil dengan nama lengkapnya, this.nama. Cara ini merupakan cara yang lazim, artinya kita tidak perlu mengganti nama parameter formal dengan nama lain agar namanya tidak bentrok dengan nama salah satu variabel instansinya. Kita bisa menggunakan nama parameter formal yang sama persis dengan variabel instansinya. Ada lagi kegunaan lain dari this. Ketika kita sedang menulis metode instansi, kita ingin memberikan objek sebagai parameter aktual. Dalam hal ini, kita bisa menggunakan this sebagai parameter aktualnya. Misalnya, kita ingin mencetak suatu objek sebagai string, kita bisa menggunakan perintah "System.out.println(this);". Atau kita ingin mengisi nilai this ke dalam variabel lain. Pokoknya, kita bisa melakukan segala hal seperti layaknya variabel kecuali mengganti isinya.

5.4 Kelas Bertingkat Suatu kelas merupakan blok bangunan suatu program, yang melambangkan suatu ide beserta data dan perilaku yang dimilikinya. Kadang-kadang kita mungkin berasa sedikit aneh untuk membuat kelas kecil hanya untuk menggabungkan beberapa data. Akan tetapi kadang-kadang kelas-kelas kecil ini sering bermanfaat dan penting. Untungnya Java membolehkan kita untuk membuat kelas di dalam kelas lain, sehingga
Rangkuman Aplikasi dan Basis Data Page 89

kelas-kelas kecil ini tidak perlu berdiri sendiri. Kelas kecil ini menjadi bagian dari suatu kelas besar yang bisa melakukan hal-hal kompleks lainnya. Kelas kecil ini misalnya berguna untuk mendukung operasi yang akan dikerjakan oleh kelas besarnya. Dalam Java, kelas bertingkat atau kelas bagian dalam adalah kelas yang ditulis di dalam definisi kelas lain. Kelas bagian dalam ini bisamemiliki nama atau anonim (tanpa nama). Kelas bagian dalam yang memiliki nama tampak seperti kelas biasa, tetapi ia ditulis di dalam kelas lain. (Kelas bagian dalam ini juga bisa memiliki kelas bagian dalam yang lain, akan tetapi ingat akan konsekuensi kerumitannya apabila kita membuat terlalu banyak tingkatan). Seperti komponen lain dalam suatu kelas, kelas bagian dalam yang memiliki nama bisa berupa kelas statik atau kelas non-statik. Kelas bertingkat statik merupakan bagian dari struktur statik dari kelas yang menaunginya. Kelas tersebut bisa digunakan di dalam kelas induknya untuk membuat objek seperti biasa. Jika tidak dideklarasikan sebagai private, makan kelas tersebut juga bisa digunakan dari luar kelas induknya. Jika digunakan dari luar kelas induknya, namanya harus jelas mencantumkan nama kelas induknya. Mirip seperti komponen statik dari suatu kelas : kelas bertingkat statik adalah bagian kelas di mana kelas tersebut mirip dengan variabel anggota statik lainnya di dalam kelas tersebut. Misalnya, suatu kelas bernama ModelRangkaKawat melambangkan kumpulan garis dalam ruang 3 dimensi. Misalnya kelasModelRangkaKawat memiliki kelas bertingkat statik yang bernama Garis yaitu sebuah garis. Maka dari luar kelasModelRangkaKawat, kelas Garis akan dipanggil sebagai ModelRangkaKawat.Garis. Kelas ModelRangkaKawat dan kelas bagian dalamnya dapat dituliskan seperti berikut : public class ModelRangkaKawat {

. . . // anggota lain kelas ModelRangkaKawat

static public class Garis {


Rangkuman Aplikasi dan Basis Data Page 90

// Melambangkan garis dari titik (x1,y1,z1) // ke titik (x2,y2,z2) dalam ruang 3-dimensi double x1, y1, z1; double x2, y2, z2; } // akhir kelas Garis

. . . // anggota lain kelas ModelRangkaKawat

} // akhir kelas ModelRangkaKawat Di dalam kelas ModelRangkaKawat, objek Garis bisa dibuat dengan konstruktor "new Garis()". Di luar kelas, perintah "newModelRangkaKawat.Garis()" harus digunakan. Kelas bertingkat statik memiliki akses penuh kepada anggota dari kelas induknya, termasuk ke anggota private. Mungkin ini juga motivasi sebagian orang untuk membuat kelas bertingkat, karena kelas bagian dalamnya bisa mengakses anggota private kelas lain tanpa harus membuat variabel atau metode anggotanya menjadi public. Ketika kita mengkompilasi definisi kelas di atas, dua file kelas akan dibuat. Meskipun definisi kelas Garis berada di dalamModelRangkaKawat, akan tetapi kelas Garis akan disimpan dalam file terpisah. Nama file kelas Garis akan

menjadiModelRangkaKawat$Garis.class Kelas bertingkat yang tidak statik, pada prakteknya, tidak jauh berbeda dengan kelas bertingkat statik, akan tetapi kelas bertingkat non-statik berkaitan dengan suatu objek, bukan kelas induknya. Anggota non-statik dari suatu kelas sebenarnya bukan merupakan bagian dari kelas itu. Hal ini juga berlaku untuk kelas bertingkat non-statik seperti juga bagian kelas non-statik lainnya. Anggota non-statik suatu kelas menjelaskan apa yang akan disimpan dalam objek yang diciptakan dari kelas tersebut. Hal ini juga berlaku (secara logis) dari kelas bertingkat non-statik. Dengan kata lain, setiap objek yang diciptakan dari kelas induknya memiliki kopi kelas bertingkat masing-masing. Kopi ini memiliki akses ke semua variabel dan metode
Rangkuman Aplikasi dan Basis Data Page 91

instansi objek tersebut. Dua objek kelas bagian dalam pada dua objek induk merupakan objek berbeda karena metode dan variabel instansi yang bisa diakses berasal dari objek yang berbeda. Pada dasarnya, aturan untuk menentukan kapan suatu kelas bisa dimasukkan ke dalam kelas lain sebagai kelas statik atau non-statik adalah : Jika kelas tersebut perlu menggunakan variabel atau metode instansi suatu objek (bukan variabel atau metode statik kelas), maka kelas tersebut harus dibuat non-statik, jika tidak maka harus dibuat statik. Dari luar kelas induknya, kelas bertingkat non-statik harus dipanggil dalam bentuk namaVariabel.NamaKelasBertingkat, misalnya namaVariabel adalah variabel yang merujuk pada objek yang memiliki kelas bertingkat tersebut. Sebetulnya cara ini agak langka. Kelas bertingkat non-statik biasanya digunakan hanya di dalam kelas induknya, sehingga bisa diakses dengan nama yang sederhana. Untuk membuat objek yang merupakan kelas bertingkat non-statik, kita harus membuat objek yang merupakan kelas induknya. (Ketika bekerja di dalam kelas, objek "this" akan secara otomatis digunakan). Objek dari kelas bertingkat tersebut dihubungkan secara permanen dengan objek dari kelas induknya, dan memiliki akses penuh atas anggota kelas induknya. Mari lihat contoh berikut, dan mungkin bisa memberi pemahaman lebih baik bagaimana kelas bertingkat non-statik sebetulnya merupakan hal yang sangat alami. Misalnya suatu kelas yang melambangkan permainan kartu. Kelas ini memiliki kelas beringkat yang melambangkan para pemainnya. Struktur MainKartu bisa berbentuk seperti : class MainKartu { // Melambangkan permainan kartu class Pemain { // Melambangkan salah satu pemain game ini . . . } // akhir kelas Pemain
Rangkuman Aplikasi dan Basis Data Page 92

private Tumpukan tumpukan;

// Tumpukan kartu

} // akhir kelas MainKartu

Rangkuman Aplikasi dan Basis Data

Page 93

BAB VI Konstruktor dan Overloading

JAVA merupakan program yang berorientasi Object. Dalam program yang beroirentasi object mempunya konsep sebagai berikut : 1. Pemrograman berorientasi pada objek secara prinsip menjadikan objek sebagai komponen utama dalam program 2. Objek menggabungkan data dan fungsi dalam satu kesatuan, sedangkan program yang non objek menjadikan fungsi sebagai fokus utama 3. Pendekatan pemrograman berorientasi pada objek membuat pengembangan program dapat dilakukan dengan mudah, mengurangi duplikasi kode program serta mengurangi kesalahan Dengan konsep seperti yang dijelaskan di atas, kita bias melihat bahwasannya dengan mengunakan program yang berorientasi dengan lebih baik karena object merupakan pecahan dari kelas. Agar lebih jelasnya kita menguanakan contoh seperti ini : 1. Dalam penuliasan program, kita mendeklarasikan kelas mobil, dan didalam kelas mobil, di dalam kelas mobil ada variable warna, merk dan tahun pembuatan. 2. Untuk membuat object kelas, dengan menulis sintax seperti ini NamaKelas NamaObjek = new NamaKelas(); Atau NamaKelas NamaObjek = new NamaKelas(...,...); 3. Dalam main class kita ingin mengakses variable variable tersebut, dengan mengunakan bantuan object, kita bias mengakses variable tersebut tanpa harus mendeklarasikan ulang variable variable tersebut, sebagai contoh :

Rangkuman Aplikasi dan Basis Data

Page 94

Dalam contoh di atas, object merupakan object dari kelas mobil, yang dimana disana terdapat object merk, thn_pembuatan, dan warnanya. Hasil dari program itu adalah sebagai berikut :

Rangkuman Aplikasi dan Basis Data

Page 95

Object dalam java juga bias untuk metoda (fungsi ) sebagai contoh :

Jadi dalam contoh program di atas, object.masukanpanjang() merupakan object untuk metoda masukanpanjang(), karena berbeda kelas, dibutuhkan object untuk menjebatani hal tersebut , dah hasil program di atas ialah sebagai berikut :

1. Konstruktor

Konstruktor ialah metoda yang memiliki nama yang sama dengan nama kelasnya, konstrutor tidak memiliki nilai return, biasanya di gunakan untuk menginisialisasi variable variable yang nantinya akan dip roses dip roses proses berikutnya. Konstruktor dapat digunakan apabila pada suatu kelas access modifier pada variabel ingin dibuat

Rangkuman Aplikasi dan Basis Data

Page 96

private, karena tanpa konstruktor maka akses terhadap variabel tersebut hanya bisa pada kelas yang sama (tidak untuk kelas lain di luar kelas tersebut) Contoh contoh pengunaan konstruktor ialah : Access modifier nama_konstruktor ( Int a, int b, dst) { Jumlah = a; Hasil = b; } Contoh Kostruktor

Nama konstruktor harus sama dengan nama kelasnya. Jadi jika ingin mengunakan konstruktor, harus sama dengan nama kelasnya. 2. Overloading Ialah metoda untuk membuat nama metoda ataupun kostruktor dengan nama yang sama tetapi berbeda fungsi. Tujuannya di buat teknik overloading ini ialah agar lebih fleksibel dan nama konstruktor ataupun metoda bisa sama namun berbeda fungsinya, jadi lebih mudah, tidak terlalu banya membuat nama metoda. Contoh Overloading : Acces modifier tambah (int a, int b){

Rangkuman Aplikasi dan Basis Data

Page 97

Isi metoda atau konstruktor; }

Acces modifier tambah (int a,int b, int c){ Isi metoda / konntruktor }

Jadi sebenarnya bisa sama nama, namun berbeda fungsinya di karenakan parameter acuan dari metoda ataupun konstruktor berbeda, itulah yang membedakan dari fungsinya, tapi jika nama metoda sama dan parameter acuannya sama pula, itu tidak akan bisa overloading, overloading terjadi apabila nama metoda sama namun parameter acuannya berbeda.

Rangkuman Aplikasi dan Basis Data

Page 98

BAB VII Inheritance, Polimorfisme, Abstract, dan Packet

1.

Inheritance Inheritance ialah pewarisan, jadi anak kelas akan mewarisi sifat sifat dari induk

kelas, seperti variable, metoda, namun, harus diingat, pewarisan ini hanya mewarisi sifat sifat variable, dan metodanya, jikailau data ataupun isi variable itu tidak termasuk ke dalam inheritance, dan untuk mengaksesnya juga di butuhkan object, dan harus me input ulang untung data dari variable dan metoda. Contoh dari Inheritance ialah :

Rangkuman Aplikasi dan Basis Data

Page 99

Dalam inheritance ada sintax yang harus ada yaitu : 1.1 Extend hal ini menandakan bahwa anak kelas menginduk ke induk kelas, contoh :
Class polban extends dikti { Isi kelas; } Contoh 1

Jadi jika ada kata kunci extends ini, akan menandakan bahwa kelas polban menginduk ke kelas dikti. 1.2 Superclass Super class ialah kelas induk, jadi kelas yang menjadi acuan dari anak anak kelasnya. Jika melihat contoh 1 di atas, maka kelas dikti menjadi superclassnya.

Rangkuman Aplikasi dan Basis Data

Page 100

1.3 Subclass Subclass ialah kelas anak, jadi kelas yang menginduk ke superclass, jadi kalau melihat contoh 1 diatas, yang menjadi subclass ialah polban, yang menginduk ke superclassnya yaitu kelas dikti.

1.4 Super Keyword ini digunakan untuk memanggil konstruktor dari superclass atau menjadi variabel yang mengacu pada superclass.

2.

Polimorfisme Polimorfisme ialah kemampuan untuk object bisa mengakses banyak bentuk.

jadi Polimorfisme berarti kemampuan dari suatu variabel referensi objek untuk memiliki aksi berbeda bila method yang sama dipanggil, dimana aksi method tergantung dari tipe objeknya. contoh dari polimorfisme ialah :

Rangkuman Aplikasi dan Basis Data

Page 101

Jadi di contoh di atas, metoda memiliki nama yang sama, dengan fungsi yang berbeda, nama metoda dan parameternya juga sama, yang membedakan ialah object yang mengaksesnya, jadi tiap metoda di akses oleh object yang berbeda untuk tiap metoda, walaupun nama metoda dan parameter sama prcis, karena berbeda metoda yang yang mengakses berbeda, ini yang di sebut polimorfisme. Kondisi yang harus di penuhi untuk polimorfisme ialah : Method yang dipanggil harus melalui variabel dari basis class atau superclass. Method yang dipanggil harus juga menjadi method dari basis class. Signature method harus sama baik pada superclass maupun subclass. Method access attribute pada subclass tidak boleh lebih terbatas dari basis class (superclass).

3.

Abstract Abstarc ialah suatu kelas yang tidak memiliki fungsi, tidak memiliki isi, jadi hanya

mendefinisikan nama kelasnya aja, tidak ada isi kelasnya juga tidak jadi masalah 4. Package dan Import Package ialah kumpulan dari banyak kelas ke dalam satu paket, jadi sebenarnya sama saja seperti inheritance atau pewarisan, tapi kalo pewarisan hanya mewarisi 1 kelas saja, jika mengunakan package seluruh kelas yang termasuk kedalam itu bisa di warisi semuanya, jadi superclassnya paket itu.Untuk kata kunci import, jadi kalau di inheritance mengunakan extends, maka disini digunakan import, hanya berbeda sintax namun sebenarnya fungsinya sama saja.
Rangkuman Aplikasi dan Basis Data Page 102

Contoh dari package dan import ialah :

Package 1 yang mempunyai nama package nana

Lalu package 2 yang mempunyai nama package nana juga

Rangkuman Aplikasi dan Basis Data

Page 103

Pengabungan dengan Importnya ialah

Jadi

kelas

tugas_package3

terintegrasi

dengan

tugas_package1

dan

tugas_package2 yang mana tugas_package2 dan tugas_package1 tergabung ke dalam 1 package yaitu package nana. Dan tugas_package itu mewarsi sifat sifat kelas yang ada di dalam package nana.

Rangkuman Aplikasi dan Basis Data

Page 104

BAB VIII Exception

1.

Pengertian Exception ialah kesalahan yang bukan kesalah sintax, tetapi merupakan

kesalahan proses, seperti pembagian bilangan dengan 0, exception ini harus ditangani, karena jika tidak di tangani, maka akan mempengaruhi kinerja program, jika ada excepton, misalkan ada 25 line, terjadi exception di line 5, maka dari line ke 6 sampei ke line 25 tidak akan di eksekusi oleh program, hal ini yang tidak boleh terjadi dalam program, kejadian kejadian exception bisa saja terjadi apabila program di hadapkan dengan user, karena user tidak tahu apa yang harus dilakukan dan yang tidak boleh di lakukan. Bisa saja misalkan program ini tidak boleh membagi bilangan dengan 0, tetapi user melakukan hal ini, jika tidak di tangani, maka program akan hang, hal ini yang tidak boleh dilakukan, maka di gunakan exception handling. Dalam exception handling ada beberapa kata kunci, yaitu : 1.1 Try Blok try digunakan untuk mencheck suatu sintax, apakah menimbulkan exception aau tidak, jika tidak menimbulkan exception tidak akan berlakuk apa apa,, namun jika memang ada exception, maka akan ditangani dengan blok selanjutnya. 1.2 Catch Catch berguna untuk menangkap exception yang muncul, jadi jika di blok try terdapat exception, maka akan di tangkap oleh cach ini dengan exception yang telah di tentukan, jika tidak sesuai exceptionnya maka exception ini belum tertangani. Maka dari ini block catch ini sangat penting, exceptionnya pun juga harus pas dengan exception yang muncul.

Rangkuman Aplikasi dan Basis Data

Page 105

1.3 Finally Blok finally ini berguna untuk seakan akan menghentikan pencarian exception, langsung di abaikan, jadi mau exception tertangani atau tidak, blok finally ini akan tetap dijalankan. Untuk lebih jelasnya akan di jelaskan dengan contoh :

Disana di blok try ada exceptionnya, exceptionya yaitu ArithmeticException, lalu di blok catchnya di tangkap dengan ArrayIndexOutOfBound, pasti ini tidak akan tertangani karena blok catchnya tidak sesuai dengan exceptionnya, si program akan menjadi eror dan blok instruksi di bawahnya tidak akan di jalankan, namun dengan finally seakan akan di lupakan terlebih, dan blok ke bawahnya bisa djilankan termasuk blok finally. Sebenarnya dengan adanya finally membantu programmer untuk mengatasi exception bilamana exception yang di tentukan di blok catch tidak tepat dengan exception yang timbul. Ada peraturan juga untuk meng-catch exception, ada peraturan jika mengunakan exception bertingkat cacth teratas harus merupakan anak kelas exception,
Rangkuman Aplikasi dan Basis Data Page 106

dan yang paling akhir merupakan induk kelasnya. Sebagai contoh, Exception RuntimeException ArrayIndexOutOfBound. Maka jika mengunakan exception bertingkat maka catch yang pertama harus ArrayIndexOutOfBound, lalu baru RuntimeException dan terkahir baru Exception. Jika aturan ini di langgar maka akan terjadi error ketika di build. Akan di jelaskan sedikit tentang pengetagun dari induk kelas dan anak kelas dalam exception. Ada juga yang disebut yang disebut dengan throw, throw ini berfungsi untuk melempar ke kelas exception, jadi jika ada blok ini maka yang ada di dalam blok ini menjadi / menimbulkan exception. Contohnya ialah :

Jadi NegativeNumberException mejadi exception dan akan di tangkap di catchnya.

Rangkuman Aplikasi dan Basis Data

Page 107

BAB IX Database

1. Pengertian Pengertian database ialah sekumpulan data yang bisa di akses, bisa ditambah, bisa didelete dan bisa diganti, bukan hanya bisa untuk dilihat saja tetapi bisa juga untuk diubah-ubah, dalam perancangan database ada aturan aturan yang harus dipenuhi. Database Management System(DBMS) merupakan paket program (software) yang dibuat agar memudahkan dan mengefisienkan pemasukan, pengeditan, penghapusan, dan pengambilan informasi terhadap database. Software yang tergolong ke dalam DBMS antar lain Microsoft SQL, MySQL, Oracle, MS. Access dan lain-lain Pokok pemikiran dalam perancangan database adalah bagaimana merancang database sehingga dapat memenuhi kebutuhan saat ini dan kemudahannya untuk dikembangkan dimasa yang akan datang. Perancangan model konseptual perlu dilakukan disamping perancangan secara fisik. Pada perancangan konseptual, digunakan beberapa konsep pendekatan relasional namun tidak berarti konsep ini harus diimplementasikan ke model relasional saja tetapi juga dapat dengan model Hierarchi dan model Network. Pda perancangan konseptual tinjauan dilakukan pada struktur data dan relasi antar file menggunakan model dan relasional. Untuk menjalankan MySQL cukup dengan mengetikan mysql pada system prompt. Dalam penulisan di dalam MySQL tidak membedakan huruf besar dan huruf kecil, yang membedakan adalah sistem operasi yang digunakan: Sistem operasi Unix/Linux akan membedakan huruf besar dan huruf kecil Sistem operasi Windows tidak membedakan Untuk mengakhiri setiap perintah diakhiri oleh tanda titik koma ;. Jika tidak diakhiri oleh tanda ;, MySQL menunggu perintah selanjutnya. Untuk membatalkan
Rangkuman Aplikasi dan Basis Data Page 108

perintah di prompt MySQL, tambahkan perintah backslas cancel atau \c diakhir perintah.Dalam hal ini kina mengunakan software MySql, dan di sambungkan dengan Java.

Perancangan database Dalam merancang suatu database, harus dilakukan atau harus dipenuhi 3

parameter yaitu : 1. Delete anomaly 2. Insert anomaly 3. Update anomaly

Mari lihat pengertian dari ketiga anomaly tersebut : 1. Delete Anomaly Delete anomaly ialah aturan untuk mengatur aturan database, karena di dalam database jika mendelete satu data, maka akan berdampak satu row dalam satu table. Maka harus di pisahkan data data yang kemungkinan besar sering di delete, di pisahkan agar mudah dan ketika nanti ada proses delete tidak mempengaruhi data yang tidak seharusnya di delete. 2. Insert anomaly Insert anomaly sebenarnya sama dengan delete anomaly, jadi dalam menginsert kedalam table harus disi satu row, jika ada kolom yang sering dalam menginsert data, harus dipisahkan tabelnya, agar tidak repot ketika meng-insert datanya. Jadi misalkan kita hanya ingin meng-insert satu data, namun di dalam table data ada 7 kolom, jika kita ingin meng-insert hanya satu data saja, sedangkan harus 7 data yang di insert, maka akan terjadi eror, maka dari itu, kolom kolom yang data sering di insert datanya, harus dipisahkan agar kemudian harinya ketika meng-insert data tidak harus meng-insert seluruh data.
Rangkuman Aplikasi dan Basis Data Page 109

3. Update anomaly Sebenarnya prinsip anomaly ini sama saja dengan delete dan insert anomaly, prisnsipnya data yang sering di-update harus di pisahkan. Dan juga dalam mendelete ada aturan untuk melihat kondisi, maka harus dipisahkan juga apabila ada data acuan yang sama. Setelah 3 parameter ini di penuhi, ada normally normally dalam merancang data base, disini yang kami jelaskan cukup 3 normally. 1. First normally First normally adalah keadaan yang table dimana dalam satu table tidak boleh ada nama kolom yang sama dan tidak boleh ada kolom yang kosong, untuk memenuhi keadaan fisrt normally, hal di atas harus di penuhi.
NIM 101331001 Nama Abdurrachman Matkul Elkom SisKomDig Nilai 90 80

Dalam keadaan first anomally, keadaan table harus dipenuhi seperti ini :

NIM 101331001 101331001

Nama Abdurrachman Abdurrachman

Matkul Elkom SisKomDig

Nilai 90 80

2. Second Anomally Second anomally adalah keadaan dimana parameter parameter seperti insert anomally, delete anomally dan update anomally, jadi keadaan table harus dipisah pisahkan, agar memenuhi 3 parameter tersebut.

Rangkuman Aplikasi dan Basis Data

Page 110

Contohnya :
NIM 101331001 101331001 Nama Abdurrachman Abdurrachman Matkul Elkom SisKomDig Nilai 90 80

Yang memenuhi keadaan second anomally :


NIM 101331001 Nama Abdurrachamn

NIM 101331001 101331001 PK

Matkul Elkom SisKomDIg

Nilai 90 80

3. Third Anomally Keadaan table ini ialah dimana keadaan second anomally sudah terpenuhi dan mulai di berikan hubungan antar tabelnya. Apakah itu many to many, one to many, one to one, dan many to one. Contoh :

Data_mahasiswa NIM * Nama One

Data_Matkul NIM ** Matkul Nilai Many

Ket * ialah primary key dan ** adalah forein Key dan hubungan table data_mahasiswa dan data_matkul hubungannya one to many.

Rangkuman Aplikasi dan Basis Data

Page 111

Dalam pembuatan database pada MySQL terdapat banyak sekali instruksi yang dapat digunakan, diantaranya 1. Menampilkan isi database yang terdapat pada MySQL. Untuk menampilkan isi database yang terdapat pada MySQL, digunakan instruksi show databases;.

2. Menghubungkan prompt dengan database yang sudah dibuat sebelumnya Sebelum membuat sebuah database, penting untuk mengetahui database mana yang akan digunakan sebagai media penyimpanan data. Untuk itu digunkana instruksi use <nama database>. 3. Menampilkan salah satu tabel yang terdapat pada database yang sedang digunakan. Untuk itu digunakan instruksi select * from <nama tabel>;.

4. Menampilkan data spesifik sesuai dengan kebutuhan, dapat menggunakan instruksi select * from <nama tabel> where <nama kolom1 = data> and <nama kolom2 = data>;.

5. Mensorting data secara ascending order digunakan instruksi select <nama kolom1, nama kolom2> from <nama tabel> order by <nama kolom acuan>;.

Rangkuman Aplikasi dan Basis Data

Page 112

6. Mensorting data secara descending order, istruksi yang digunakan sama seperti sorting secara ascending order hanya saja ditambahkan instruksi desc; di akhir instruksi yang dibuat.

7. Membuat tabel data lahir, untuk tanggal lahir gunakan tipe data date dengan urutan tahun, bulan dan tanggal. Untuk nama dan tempat lahir, tipe data yang digunakan adalah char dilengkapi dengan jumlah karakter yang diinginkan.

8. Membandingkan data tanggal lahir dengan tanggal hari ini (current date) untuk kemudian dilakukan dilakukan perhitungan umur.

Rangkuman Aplikasi dan Basis Data

Page 113

9. Meng-update data pada tabel, hal ini penting dilakukan jika ada perubahan pada data yang terdapat pada database sebelumnya.

10. Menghapus data pada tabel merupakan salah satu contoh update tapi dengan menghapus data yang sudah tidak diperlukan pada database.

Rangkuman Aplikasi dan Basis Data

Page 114

Proses-proses yang akan dilakukan pada database tidak hanya dapat dilakukan pada MySQL, tapi juga menggunakan Java dalam hal ini JCreator. 1. Menghubungkan JCreator dengan database yang terdapat pada MySQL.

Untuk menghubungkan MySQL dengan JCreator diperlukan sebuah aplikasi khusus yang dinamakan MySQL connection. Saat menghubungkan JCreator dengan database diperlukan data-data yang sesuai dengan database yang akan diakses. Model program yang digunakan adalah exception agar indikator koneksinya dapat lebih mudah terlihat, sehingga ketika koneksi dengan database berhasil dilakukan akan muncul kalimat koneksi berhasil pada output.

Rangkuman Aplikasi dan Basis Data

Page 115

2. Menampilkan data yang terdapat pada database menggunakan JCreator.

Rangkuman Aplikasi dan Basis Data

Page 116

Program ini tidak hanya menghubungkan JCreator dengan data yang terdapat pada database tapi juga menampilkan salah satu datanya. Dengan men-select elemen tabel data pada database, maka data tersebut akan ditampilkan pada JCreator. 3. Menambahkan data ke dalam database yang telah ada.

Rangkuman Aplikasi dan Basis Data

Page 117

Data sebelum

Data setelah ditambahkan

Program ini bertujuan untuk menambahkan data ke dalam tabel yang telah ada pada database sebelumnya. Untuk menambahkan data hanyalah dengan menggunakan instruksi insert into nama_tabel kemudian masukkan data yang akan dimasukkan sesuai dengan kolom-kolom yang tersedia pada tabel yang akan diakses.

Rangkuman Aplikasi dan Basis Data

Page 118

4. Menghapus data yang ada pada database.

Data sebelum

Rangkuman Aplikasi dan Basis Data

Page 119

Data setelah dihapus

Rangkuman Aplikasi dan Basis Data

Page 120

DAFTAR PUSTAKA

1. http://id.wikipedia.org/wiki/Pemrograman_berorientasi_objek 2. http://catatan.desdrianton.net/scjp/content/ARRAY.htm 3. http://www.google.co.id/url?sa=t&rct=j&q=fitur+yang+dimiliki+java&source=web&cd=1&ve d=0CFEQFjAA&url=http%3A%2F%2Fmafisamin.web.ugm.ac.id%2Fmateri%2Fbab-1pendahuluan.pdf&ei=cYrUT7inJ8uzrAfqyLT8Dw&usg=AFQjCNFbe87APHaQU4IXTf_t_q_Hl31r uw 4. http://kampoeng-it.blogspot.com/2010/02/apa-itu-teknologi-java.html 5. http://whatjaxos.blogspot.com/2012/03/akses-java-applet-method-dari_24.html 6. http://en.wikipedia.org/wiki/Swing_(Java) 7. http://linkblog-ku.blogspot.com/2012/05/dasar-dasar-pemrograman-java.html 8. http://celutubgt.wordpress.com/2011/05/08/membuat-komentar-pada-java/ 9. http://moszesaje.blogspot.com/2012/04/pernyataan-dalam-java-dan-blok.html 10. http://linkblog-ku.blogspot.com/2012/05/dasar-dasar-pemrograman-java.html 11. http://informaticunsil.blogspot.com/2012/04/macam-macam-java-literals.html 12. http://pintar-java.blogspot.com/2008/05/tipe-data-primitif.html 13. http://java.lyracc.com/belajar/java-untuk-pemula/variabel-dan-tipe-data 14. http://bersitrahmayang.wordpress.com/2010/11/09/operator-pada-java/ 15. http://aldi-situmorang.blogspot.com/2010/11/contoh-program-blok-pada-java.html 16. http://www.kuliah.ningyung.com/struktur-kontrol-pemilihan/ 17. http://javaprogramming26.blogspot.com/2009/09/swich-case.html 18. http://andinyoktariana.blogspot.com/2011/09/arraypercabangandan-perulangandalam.html 19. http://www.kuliah.ningyung.com/struktur-kontrol-perulangan/ 20. http://tiar-note.blogspot.com/2012/05/struktur-perulangan-pada-java.html

Rangkuman Aplikasi dan Basis Data

Page 121

You might also like