pengenalan pemrograman 2-lengkap

Upload: riza-falafi

Post on 30-Oct-2015

120 views

Category:

Documents


0 download

TRANSCRIPT

  • J.E.N.I

    Pengenalan Pemrograman 2

    Versi 1.1Juni 2007Sumber JEDI

    Pengenalan Pemrograman 2

  • J.E.N.I

    PenulisJoyce Avestro

    TeamJoyce AvestroFlorence BalagtasRommel FeriaReginald HutchersonRebecca OngJohn Paul PetinesSang ShinRaghavan SrinivasMatthew Thompson

    Team TranslatorFrans ThamuraJoko PitonoEko SubiyantoroCahya Kusuma RatihDwi Martha SariMiratul Khusna MufidaKhansa FitriannisaSulistyaningtyasAllin JunikhahBagus ChandraRizzatama N.SBadar Agung NugrohoKadek Surya Pranata

    Persyaratan-persyaratan Untuk Latihan Laboratorium

    Sistem Operasi yang mendukung

    NetBeans IDE 5.5 berjalan pada sistem operasi yang mendukung Java VM. Dibawah ini merupakan daftar dari platform-platform yang digunakan:

    Microsoft Windows XP Professional SP2 atau yang terbaru

    Mac OS X 10.4.5 atau yang terbaru

    Red Hat Fedora Core 3

    Sistem Operasi Solaris 10 Update 1 (SPARC and x86/x64 Platform Edition)

    NetBeans Enterprise Pack juga dapat digunakan pada platform-platform berikut ini:

    Microsoft Windows 2000 Professional SP4

    Solaris 8 OS (SPARC and x86/x64 Platform Edition) and Solaris 9 OS (SPARC and x86/x64 Platform Edition)

    Berbagai macam distribusi LINUX

    Minimum konfigurasi Hardware

    Catatan: Minimum resolusi layar NetBeans IDE's adalah 1024x768 pixels.

    Sistem Operasi Microsoft Windows: o Prosesor: 500 MHz Intel Pentium III workstation atau

    setaranya o Memori: 512 MB o Disk space: 850 MB dari free disk space

    Sistem operasi Linux: o Prosesor: 500 MHz Intel Pentium III workstation atau

    setaranya o Memori: 512 MB o Disk space: 450 MB dari free disk space

    Solaris OS (SPARC): o Prosesor: UltraSPARC II 450 MHz o Memori: 512 MB o Disk space: 450 MB of free disk space

    Solaris OS (x86/x64 Platform Edition): o Prosesor: AMD Opteron 100 Series 1.8 GHz o Memori: 512 MB o Disk space: 450 MB dari free disk space

    Sistem Operasi Macintosh OS X: o Prosesor: PowerPC G4 o Memori: 512 MB o Disk space: 450 MB dari free disk space

    Pengenalan Pemrograman 2

  • J.E.N.I

    Konfigurasi Hardware yang direkomendasikan

    Sistem Operasi Microsoft Windows: o Prosesor: 1.4 GHz Intel Pentium III workstation atau

    setaranyao Memori: 1 GB o Disk space: 1 GB dari free disk space

    Sistem Operasi Linux: o Prosesor: 1.4 GHz Intel Pentium III atau setaranyao Memori: 1 GB o Disk space: 850 MB dari free disk space

    Solaris OS (SPARC): o Prosesor: UltraSPARC IIIi 1 GHz o Memori: 1 GB o Disk space: 850 MB dari free disk space

    Solaris OS (x86/x64 platform edition):

    o Prosesor: AMD Opteron 100 Series 1.8 GHz o Memori: 1 GB o Disk space: 850 MB dari free disk space

    Sistem Operasi Macintosh OS X: o Prosesor: PowerPC G5 o Memori: 1 GB o Disk space: 850 MB dari free disk space

    Software yang diperlukan

    NetBeans Enterprise Pack 5.5 dapat diakses pada Java 2 Platform Standard Edition Development Kit 5.0 Update 1 atau diatasnya (JDK 5.0, versi 1.5.0_01 atau diatasnya), dimana berisi Java Runtime Environment plus developer tools untuk meng-compile, men-debug, and menjalankan aplikasi yang ditulis dengan bahasa Java. Sun Java System Application Server Platform Edisi 9 telah diuji dengan JDK 5.0 update 6.

    Untuk Solaris, Windows, dan Linux, Anda dapat mendownload JDK untuk platform Anda pada

    http://java.sun.com/j2se/1.5.0/download.html

    Untuk Mac OS X, memerlukan Java 2 Platform Standard Edition (J2SE) 5.0 Release 4. Anda dapat mendownload JDK dari Apple's Developer Connection site. Pada:

    http://developer.apple.com/java (untuk mendownload JDK Anda harus melakukan register terlebih dahulu).

    Pengenalan Pemrograman 2

  • J.E.N.I

    Daftar Isi1 Review Konsep Dasar Dalam Java

    1.1 Tujuan 1.2 Konsep Berorientasi Object

    1.2.1 Desain Berorientasi Object 1.2.2 Kelas 1.2.3 Obyek1.2.4 Atribut1.2.5 Method 1.2.6 Konstruktor1.2.7 Package 1.2.8 Enkapsulasi1.2.9 Abstraksi 1.2.10 Pewarisan1.2.11 Polimorfisme1.2.12 Interface

    1.3 Struktur Program Java1.3.1 Mendeklarasikan Class Java1.3.2 Mendeklarasikan Atribut1.3.3 Mendeklarasikan Method1.3.4 Mendeklarasikan Sebuah Konstruktor1.3.5 Meng-instansiasi Sebuah Class1.3.6 Mengakses Anggota Object1.3.7 Package 1.3.8 Acces Modifier1.3.9 Enkapsulasi1.3.10 Pewarisan1.3.11 Metode Overriding1.3.12 Kelas Abstract dan Method1.3.13 Interface1.3.14 Kata Kunci This1.3.15 Kata Kunci Super1.3.16 Kata Kunci Static1.3.17 Kata Kunci Final1.3.18 Inner Classes

    1.4 Latihan1.4.1 Tabel Perkalian1.4.2 Greatest Comman Factor(GCF)1.4.3 Shape1.4.4 Binatang

    2 Exceptions dan Assertions2.1 Tujuan2.2 Apa Itu Exception?

    Pengenalan Pemrograman 2

  • J.E.N.I

    2.2.1 Pendahuluan2.2.2 Error dan Excetion Classes2.2.3 Sebuah Contoh

    2.3 Menangkap Exception2.3.1 Try-Catch2.3.2 Keyword Finally

    2.4 Melempar Exception2.4.1 Keyword Throw2.4.2 Keyword Throws

    2.5 Kategori Exception2.5.1 Exception Classes dan Hierarchy2.5.2 Checked dan Unchecked Exceptions2.5.3 User Defined Exceptions

    2.6 Assertions2.6.1 User Defined Exceptions2.6.2 Mengaktifkan dan Menonaktifkan Exceptions2.6.3 Sintax Assertions

    2.7 Latihan2.7.1 Heksadesimal ke Desimal2.7.2 Menampilkan Sebuah Berlian

    3 Teknik Pemrograman Lanjut3.1 Tujuan3.2 Rekusif

    3.2.1 Apa yang dimaksud dengan Recursif? 3.2.2 Recursif vs Iterasi 3.2.3 Factorials : contoh3.2.4 Print n any Base :contoh yang lain

    3.3 Abstract Data Tipe3.3.1 Apa yang dimaksud dengan Abstrak Data Type? 3.3.2 Stacks3.3.3 Queues3.3.4 Sequential dan Linked representation3.3.5 Sequential representation dari Integer stack3.3.6 Linked list3.3.7 Linked representation dari Integer stack3.3.8 Java Collections

    3.4 Latihan3.4.1 Faktor Persekutuan Terbesar 3.4.2 Sequential representation dari Integer Queues 3.4.3 Linked representation dari Integer Queues 3.4.4 Address Book

    4 Tour dari Package java.lang 4.1 Tujuan 4.2 Class Math4.3 Class String dan StringBuffer

    4.3.1 Constructor String4.3.2 Method-method String4.3.3 Class StringBuffer

    4.4 Class-class Wrapper

    Pengenalan Pemrograman 2

  • J.E.N.I

    4.5 Class Process dan Runtime4.5.1 Class Process4.5.2 Class Runtime4.5.3 Membuka Registry Editor

    4.6 Class System4.7 Latihan

    4.7.1 Evaluasi Ekspresi4.7.2 Palindrome4.7.3 Notepad

    5 Aplikasi Berbasis Text 5.1 Tujuan 5.2 Argument Command-Line dan System Properties5.3 Membaca Standart Input 5.4 Menangani File

    5.4.1 Membaca Sebuah File 5.4.2 Menulis Sebuah File

    5.5 Latihan 5.5.1 Spasi manjadi Underscore (_)

    6 Algoritma Sorting 6.1 Tujuan6.2 Insertion sort

    6.2.1 Algoritma6.2.2 Sebuah Contoh

    6.3 Selection sort6.3.1 Algoritma6.3.2 Sebuah Contoh

    6.4 Merge Sort6.4.1 Pola Devide and Conquer6.4.2 Memahami Merge Sort6.4.3 Algoritma6.4.4 Sebuah Contoh

    6.5 Quick Sort6.5.1 Algoritma6.5.2 Sebuah Contoh

    6.6 Latihan 6.6.1 Insertion Sort6.6.2 Selection Sort6.6.3 Merge Sort 6.6.4 Quicksort

    7 Abstract Windowing Toolkit dan Swing 7.1 Tujuan 7.2 Abstract Windowing Toolkit vs. SWING 7.3 Komponen GUI pada AWT

    7.3.1 Window Classes Fundamental 7.3.2 Grafik7.3.3 Beberapa Komponen AWT

    7.4 Layout Manager7.4.1 FlowLayout Manager7.4.2 BorderLayout Manager

    Pengenalan Pemrograman 2

  • J.E.N.I

    7.4.3 GridLayout Manager7.4.4 Panel dan Tampilan Kompleks

    7.5 Komponen Swing7.5.1 Setting up Top-Level Containers7.5.2 Contoh Jframe 7.5.3 Contoh JOptionPane

    7.6 Latihan7.6.1 Tic-Tac-Toe

    8 GUI Event Handling 8.1 Tujuan 8.2 Delegation Event Model

    8.2.1 Registrasi Listeners8.3 Class-class Event 8.4 Event Listeners

    8.4.1 Method ActionListener8.4.2 Method MouseListener8.4.3 Method-method MouseMotionListener8.4.4 Method-method WindowListener8.4.5 Petunjuk Untuk Menciptakan Aplikasi Handling GUI Events8.4.6 Contoh Mouse Events8.4.7 Contoh Menutup Window

    8.5 Adapter Classes8.5.1 Close Window Example

    8.6 Inner Class dan Anonymous Inner Class 8.6.1 Inner Class 8.6.2 Contoh Menutup Window8.6.3 Anonymous Inner Class8.6.4 Contoh Menutup Window

    8.7 Latihan8.7.1 Tic-Tac-Toe

    9 Threads 9.1 Tujuan9.2 Definisi dan dasar-dasar thread

    9.2.1 Definisi Thread9.2.2 State dari Thread9.2.3 Prioritas

    9.3 Class Thread9.3.1 Constructor9.3.2 Constant9.3.3 Methods9.3.4 Sebuah Control Thread

    9.4 Membuat Threads9.4.1 Menurunkan (extend) class thread9.4.2 Mengimplementasikan interface Runnable9.4.3 Extend vs Implement9.4.4 Sebuah contoh Penggunaan method join

    9.5 Sinkronisasi9.5.1 Sebuah Contoh yang Tidak Disinkronisasi9.5.2 Mengunci Object

    Pengenalan Pemrograman 2

  • J.E.N.I

    9.5.3 Contoh Synchronized Pertama9.5.4 Contoh Synchronized Kedua

    9.6 Komunikasi antar Thread(InterThread)9.6.1 Contoh Produsen-Konsumen

    9.7 Kemampuan Concurrency9.7.1 Interface Executor9.7.2 Interface Callable

    9.8 Latihan9.8.1 Banner

    10 Jaringan 10.1 Konsep Dasar jaringan

    10.1.1 IP Adress10.1.2 Protokol10.1.3 Port10.1.4 Paradigma Client/Server10.1.5 Sockets

    10.2 The Java Networking Package10.2.1 The ServerSocket dan The Socket Class10.2.2 The MultiCastSocket dan DatagramPacket Class

    10.3 Latihan10.3.1 Trivia Server

    11 Applet 11.1 Tujuan11.2 Membentuk Applets

    11.2.1 Hello World Applet11.3 Method-method Applet

    11.3.1 Siklus Applet (The Applet Life Cicle) 11.3.2 Method paint11.3.3 Show Status Method11.3.4 Memainkan Audio Clips

    11.4 Applet HTML Tags11.5 Latihan

    11.5.1 Tic-Tac-toe Applet satu-player12 Advanced IO Stream

    12.1 Tujuan 12.2 Tipe-tipe Stream yang Umum Digunakan

    12.2.1 Stream Karakter dan byte12.2.2 Input dan Output Stream12.2.3 Node dan Stream Filter

    12.3 Class File 12.4 Class Reader

    12.4.1 Method reader12.4.2 Class Node Reader12.Class-class Filter Reader

    12.5 Class-class Writer 12.5.1 Writer Method 12.5.3 Filter Writer Classes 12.5.2 Node Writer Classes12.7 Merubah contoh Reader/Writer

    Pengenalan Pemrograman 2

  • J.E.N.I

    12.6 Contoh Dasar Reader/Writer12.8 Class InputStream 12.8.1 Method Input Stream 12.8.2 Class-class Node Input Stream

    12.8.3 Class-class Filter InputStream12.9 Class-class Ouput Stream 12.9.1 Method Ouput Stream 12.9.2 Class-class Node Output Stream 12.9.3 Class-class Filter Output Stream12.10 Contoh Dasar Input Stream/Output Stream12.11 Contoh Modifikasi Input Stream/Output Stream12.12 Serialisasi 12.12.1 Kata Kunci Transient 12.12.2 Serialisasi : Menulis Suatu object Stream 12.12.3 Deserialisasi: Membaca Sebuah Object Stream12.13 Latihan 12.13.1 Enkripsi Sederhana

    13 Pengenalan Generic13.1 Tujuan13.2 Mengapa Generics? 13.3 Mendeklarasikan Sebuah Class Generic

    13.3.1 Pembatasan Primitive13.3.2 Meng-Compilasi Generics

    13.4 Constrained Generics13.5 Mendeklarasikan sebuah Method Generic13.6 Exercise

    13.6.1 Swapping

    Pengenalan Pemrograman 2

  • J.E.N.I.

    Pengenalan Pemrograman 2 1

    BAB 1 Review Konsep Dasar dalam Java

    1.1 Tujuan Sebelum melangkah pada fitur-fitur menarik yang ada pada Java, mari kita melihat kembali beberapa hal yang telah Anda pelajari pada pelajaran pemograman pertama Anda. Pembelajaran kali ini menyajikan diskusi tentang perbedaan konsep-konsep berorientasi object dalam Java. Pada akhir pembahasan, diharapkan pembaca dapat :

    1. Mengetahui dan menggunakan konsep dasar beorientasi object.

    class

    object

    atribut

    method

    cnstructor

    2. Mengetahui dengan jelas tentang konsep lanjutan berorientasi object dan menggunakannya

    dengan baik

    package

    enkapsulasi

    abstraksi

    pewarisan

    polimorfisme

    interface

    3. Mengetahui dengan jelas penggunaan kata kunci this, super, final dan static

    4. Membedakan antara method overloading dan method overridding

    1.2 Konsep Berorientasi object 1.2.1 Desain Berorientasi object Desain berorientasi object adalah sebuah teknik yang memusatkan desain pada object dan class berdasarkan pada skenario dunia nyata. Hal ini menegaskan keadaan(state), behaviour dan interaksi dari object. Selain itu juga menyediakan manfaat akan kebebasan pengembangan, meningkatkan kualitas, mempermudah pemeliharaan, mempertinggi kemampuan dalam modifikasi dan meningkatkan penggunaan kembali software. 1.2.2 Class

  • J.E.N.I.

    Pengenalan Pemrograman 2 2

    Class mengizinkan Anda dalam mendeklarasikan tipe data baru. Ia dijalankan sebagai blueprint, dimana model dari object yang Anda buat berdasarkan pada tipe data baru ini. 1.2.3 Object Sebuah object adalah sebuah entiti yang memiliki keadaan, behaviour dan identitas yang yang tugasnya dirumuskan dalam suatu lingkup masalah dengan baik. Inilah instance sebenarnya dari sebuah class. Ini juga dikenal sebagai instance. Instance dibuat sewaktu Anda meng-instantiate class menggunakan kata kunci new. Dalam sistem registrasi siswa, contoh dari sebuah object yaitu entiti Student. 1.2.4 Atribut Atribut menunjuk pada elemen data dari sebuah object. Atribut menyimpan informasi tentang object. Dikenal juga sebagai member data, variabel instance, properti atau sebuah field data. Kembali lagi ke contoh sistem registrasi siswa, atribut dari sebuah siswa adalah nomor siswa. 1.2.5 Method Sebuah method menjelaskan behaviour dari sebuah object. Method juga dikenal sebagai fungsi atau prosedur. Sebagai contoh, method yang mungkin tersedia untuk entiti siswa adalah method register. 1.2.6 Constructor Constructor adalah sebuah tipe khusus dari method yang digunakan untuk membuat dan menginisialisasi sebuah object baru. Ingat bahwa constructor bukan member (yaitu atribut, method atau inner class dari sebuah object). 1.2.7 Package Package menunjuk pada pengelompokkan class dan/atau subpackages. Strukturnya dapat disamakan dengan direktorinya. 1.2.8 Enkapsulasi Enkapsulasi menunjuk pada prinsip dari menyembunyikan desain atau mengimplementasikan informasi yang tidak sesuai pada object yang ada. 1.2.9 Abstraksi Sementara enkapsulasi menyembunyikan detail, abstraksi mengabaikan aspek dari subyek yang tidak sesuai dengan tujuan yang ada supaya lebih banyak mengkonsentrasikan yang ada. 1.2.10 Pewarisan Pewarisan adalah hubungan antara class dimana dalam satu class ada superclass atau class induk dari class yang lain. Pewarisan menunjuk pada properti dan behaviour yang diterima dari nenek moyang dari class. Ini dikenal juga sebagai hubungan is-a. Perhatikan pada hirarki berikut.

  • J.E.N.I.

    Pengenalan Pemrograman 2 3

    Gambar 1.1: Contoh Pewarisan

    SuperHero adalah superclass dari class FlyingSuperHero dan UnderwaterSuperHero. Catatan bahwa FlyingSuperHero is-a SuperHero. Sebagaimana juga UnderwaterSuperHero is-a SuperHero 1.2.11 Polimorfisme Polimorfisme adalah kemampuan dari sebuah object untuk membolehkan mengambil beberapa bentuk yang berbeda. Secara harfiah, poli berarti banyak sementara morph berarti bentuk. Menunjuk pada contoh sebelumnya pada pewarisan, kita lihat bahwa object SuperHero dapat juga menjadi object FlyingSuperHero atau object UnderwaterSuperHero. 1.2.12 Interface Sebuah interface adalah sebuah contract dalam bentuk kumpulan method dan deklarasi konstanta. Ketika sebuah class implements sebuah interface, ini mengimplementasikan semua method yang dideklarasikan dalam interface.

    1.3 Struktur Program Java Pada bagian ini meringkaskan syntax dasar yang digunakan dalam pembuatan aplikasi Java. 1.3.1 Mendeklarasikan class Java

    ::= class { * * * }

    dimana adalah sebuah access modifier, yang mana boleh dikombinasikan dengan tipe yang lain dari modifier.

    SuperHero

    FlyingSuperHero UnderwaterSuperHero

  • J.E.N.I.

    Pengenalan Pemrograman 2 4

    Petunjuk Penulisan Program: * = berarti bahwa boleh ada 0 atau lebih kejadian dari deret tersebut yang menggunakannya juga. = menunjukkan bahwa Anda harus mengganti nilai sebenarnya untuk bagian ini daripada menguranginya penulisannya. Ingat bahwa untuk class teratas, acces modifier yang valid hanyalah public dan package(yakni jika tidak ada acces modifier mengawali kata kunci class). Contoh berikut ini mendeklarasikan blueprint SuperHero. Class SuperHero {

    String superPowers[]; void setSuperPowers(String superPowers[]) { this.superPowers = superPowers; } void printSuperPowers() { for (int i = 0; i < superPowers.length; i++) { System.out.println(superPowers[i]); } }

    } 1.3.2 Mendeklarasikan Atribut

    ::= [= ]; ::= byte | short | int | long | char | float | double | boolean

    | Petunjuk Penulisan Program: [] = Menunjukkan bahwa bagian ini hanya sebagai pilihan. Inilah contohnya.

    public class AttributeDemo { private String studNum; public boolean graduating = false; protected float unitsTaken = 0.0f; String college;

    } 1.3.3 Mendeklarasikan Method

    ::= (*) { * } ::=

    [,]

  • J.E.N.I.

    Pengenalan Pemrograman 2 5

    Sebagai contoh:

    class MethodDemo { int data; int getData() { return data; } void setData(int data) { this.data = data; } void setMaxData(int data1, int data2) { data = (data1>data2)? data1 : data2; }

    } 1.3.4 Mendeklarasikan sebuah Constructor

    ::= (*) { *

    } Jika tidak ada constructor yang disediakan secara jelas, constructor default secara otomatis membuatkannya untuk Anda. Constructor default tidak membawa argumen dan tidak berisi pernyataan pada tubuh class. Petunjuk Penulisan Program: Nama constructor harus sama dengan nama class. yang valid untuk constructor adalah public, protected, dan private. Constructor tidak memiliki nilai return.

    Perhatikan contoh berikut.

    class ConstructorDemo { private int data; public ConstructorDemo() { data = 100; } ConstructorDemo(int data) { this.data = data; } }

    1.3.5 Meng-instantiate sebuah class Untuk meng-instantiate sebuah class, dengan sederhana kita gunakan kata kunci new diikuti dengan pemanggilan sebuah constructor. Mari lihat langsung ke contohnya.

    class ConstructObj { int data; ConstructObj() { /* menginisialisasi data */ } public static void main(String args[]) {

  • J.E.N.I.

    Pengenalan Pemrograman 2 6

    ConstructObj obj = new ConstructObj(); //di-instantiate }

    } 1.3.6 Mengakses Anggota object Untuk mengakses anggota dari sebuah object, kita gunakan notasi dot. Penggunaanya seperti berikut: . Contoh selanjutnya berdasar pada sebelumnya dengan pernyataan tambahan untuk mengakses anggota dan method tambahan.

    class ConstructObj { int data; ConstructObj() { /* inisialisasi data */ } void setData(int data) { this.data = data; } public static void main(String args[]) { ConstructObj obj = new ConstructObj(); //instantiation obj.setData = 10; //access setData() System.out.println(obj.data); //access data }

    } 1.3.7 Package Untuk menunjukkan bahwa file asal termasuk package khusus, kita gunakan syntax berikut:

    ::= package ; Untuk mengimpor package lain, kita gunakan syntax berikut:

    ::= import ; Dengan ini, source code Anda harus memiliki format berikut: []

    * +

    Petunjuk Penulisan Program: + menunjukkan bahwa boleh ada 1 atau lebih kejadian pada baris ini dalam pengaplikasiannya.

  • J.E.N.I.

    Pengenalan Pemrograman 2 7

    Sebagai contoh. package registration.reports; import registration.processing.*; import java.util.List; import java.lang.*; //imported by default class MyClass { /* rincian dari MyClass */

    1.3.8 Acces Modifier Tabel berikut meringkas acces modifier dalam Java.

    private default/package protected public

    class yang sama Yes Yes Yes Yes

    package yang sama Yes Yes Yes

    package yang berbeda (subclass)

    Yes Yes

    package yang berbeda (non-subclass)

    Yes

    Tabel 1.2: Acces Modifier

    1.3.9 Enkapsulasi

    Menyembunyikan elemen dari penggunaan sebuah class dapat dilakukan dengan pembuatan anggota yang ingin Anda sembunyikan secara private.

    Contoh berikut menyembunyikan field secret. Catatan bahwa field ini tidak langsung diakses oleh program lain menggunakan method getter dan setter.

    class Encapsulation { private int secret; //field tersembunyi public boolean setSecret(int secret) { if (secret < 1 || secret > 100) { return false; } this.secret = secret; return true; } public getSecret() { return secret; } }

    1.3.10 Pewarisan

  • J.E.N.I.

    Pengenalan Pemrograman 2 8

    Untuk membuat class anak atau subclass berdasarkan class yang telah ada, kita gunakan kata kunci extend dalam mendeklarasikan class. Sebuah class hanya dapat meng-extend satu class induk. Sebagai contoh, class Point di bawah ini adalah superclass dari class ColoredPoint.

    import java.awt.*; class Point { int x; int y; } class ColoredPoint extends Point { Color color;

    } 1.3.11 Method Overriding

    Method subclass override terhadap method superclass ketika subclass mendeklarasikan method yang signaturenya serupa ke method dalam superclass. Signature dari method hanyalah informasi yang ditemukan dalam definisi method bagian atas. Signature mengikutkan tipe return, nama dan daftar parameter method tetapi itu tidak termasuk acces modifier dan tipe yang lain dari kata kunci seperti final dan static. Inilah perbedaan dari method overloading. Method overloading secara singkat didiskusikan dalam sub bagian pada kata kunci this.

    class Superclass { void display(int n) { System.out.println("super: " + n); } } class Subclass extends Superclass { void display(int k) { //method overriding System.out.println("sub: " + k); } } class OverrideDemo { public static void main(String args[]) { Subclass SubObj = new Subclass(); Superclass SuperObj = SubObj; SubObj.display(3); ((Superclass)SubObj).display(4); }

    } Ini akan menghasilkan keluaran sebagai berikut. sub: 3 sub: 4 Pemanggilan method ditentukan oleh tipe data sebenarnya dari object yang diminta method. Acces modifier untuk method yang dibutuhkan tidak harus sama. Bagaimanapun, acces modifier

  • J.E.N.I.

    Pengenalan Pemrograman 2 9

    dari method overridding mengharuskan salah satunya punya acces modifier yang sama seperti itu dari method overridden atau acces modifier yang kurang dibatasi. Perhatikan contoh selanjutnya. Periksa yang mana dari method overridding berikut akan menyebabkan waktu meng-compile akan menyebabkan error.

    class Superclass { void overriddenMethod() { } } class Subclass1 extends Superclass { public void overriddenMethod() { } } class Subclass2 extends Superclass { void overriddenMethod() { } } class Subclass3 extends Superclass { protected void overriddenMethod() { } } class Subclass4 extends Superclass { private void overriddenMethod() { } }

    1.3.12 Class Abstract dan Method Bentuk umum dari sebuah method abstract adalah sebagai berikut: abstract (*); Sebuah class yang berisi method abstract harus dideklarasikan sebagai sebuah class abstract.

    abstract (*);abstract class { /* constructors, fields and methods */

    } Kata kunci tidak dapat digunakan pada constructor atau method static. Ini juga penting untuk diingat bahwa class abstract tidak dapat di-instantiate. Class yang meng-extends sebuah class abstract harus mengimplementasikan semua method abstract. Jika tidak subclass sendiri dapat dideklarasikan sebagai abstract. Petunjuk Penulisan Program: catatan bahwa mendeklarasikan sebuah method abstract hampir mirip dalam mendeklarasikan class normal kecuali itu suatu method abstract yang tidak memiliki tubuh dan kepala sehingga dengan segera diakhiri dengan semicolon(;).

  • J.E.N.I.

    Pengenalan Pemrograman 2 10

    Sebagai contoh: abstract class SuperHero {

    String superPowers[]; void setSuperPowers(String superPowers[]) { this.superPowers = superPowers; } void printSuperPowers() { for (int i = 0; i < superPowers.length; i++) { System.out.println(superPowers[i]); } } abstract void displayPower(); } class UnderwaterSuperHero extends SuperHero { void displayPower() { System.out.println("Communicate with sea creatures..."); System.out.println("Fast swimming ability..."); } } class FlyingSuperHero extends SuperHero { void displayPower() { System.out.println("Fly..."); } }

    1.3.13 Interface Mendeklarasikan sebuah interface pada dasarnya mendeklarasikan sebuah class tetapi sebagai penggantinya menggunakan kata kunci class, kata kunci interface digunakan. Berikut syntax-nya.

    ::= interface { * [ (*);]*

    } Anggotanya adalah public ketika interface dideklarasikan public. Petunjuk Penulisan Program: Secara mutlak atribut adalah static dan final dan harus diinisialisasi dengan nilai konstanta. Seperti mendeklarasikan class teratas, acces modifier yang valid hanyalah public dan package(yakni jika tidak ada acces modifier mengawali kata kunci class). Class mengimplementasikan sebuah interface yang telah ada dengan menggunakan kata kunci implements. Class ini dibuat untuk mengimplementasikan semua method interface. Sebuah class boleh mengimplementasikan lebih dari satu interface. Contoh berikut menunjukkan bagaimana mendeklarasikan dan menggunakan sebuah interface.

  • J.E.N.I.

    Pengenalan Pemrograman 2 11

    interface MyInterface { void iMethod(); } class MyClass1 implements MyInterface { public void iMethod() { System.out.println("Interface method."); } void myMethod() { System.out.println("Another method."); } } class MyClass2 implements MyInterface { public void iMethod() { System.out.println("Another implementation."); } } class InterfaceDemo { public static void main(String args[]) { MyClass1 mc1 = new MyClass1(); MyClass2 mc2 = new MyClass2(); mc1.iMethod(); mc1.myMethod(); mc2.iMethod(); } }

    1.3.14 Kata kunci this Kata kunci this dapat digunakan untuk beberapa alasan berikut:

    1. Adanya ambigu pada atribut lokal dari variabel lokal 2. Menunjuk pada object yang meminta method non-static 3. Menunjuk pada constructor lain.

    Sebagai contoh pada maksud pertama, perhatikan kode berikut dimana variabel data disediakan sebagai sebuah atribut dan parameter lokal pada saat yang sama.

    class ThisDemo1 { int data; void method(int data) { this.data = data; /* this.data menunjuk ke atribut sementara data menunjuk ke variabel lokal */ }

    } Contoh berikut menunjukkan bagaimana object this secara mutlak menunjuk ketika anggota non-

  • J.E.N.I.

    Pengenalan Pemrograman 2 12

    static dipanggil.

    class ThisDemo2 { int data; void method() { System.out.println(data); //this.data } void method2() { method(); //this.method();

    } Sebelum melihat ke contoh yang lain, mari pertama meninjau pengertian method overloading. Constructor seperti juga method dapat juga menjadi overload. Method yang berbeda dalam class dapat memberi nama yang sama asalkan list parameter juga berbeda. Method overloaded harus berbeda dalam nomor dan/atau tipe dari parameternya. Contoh selanjutnya memiliki constructor overloaded dan referensi this yang dapat digunakan untuk menunjuk versi lain dari constructor.

    class ThisDemo3 { int data; ThisDemo3() { this(100); } ThisDemo3(int data) { this.data = data; } }

    Petunjuk Penulisan Program: Memanggil this() harus ada pernyataan pertama dalam constructor.

    1.3.15 Kata kunci super

    Penggunaan kata kunci super berhubungan dengan pewarisan. Super digunakan untuk meminta constructor superclass. Super juga dapat digunakan seperti kata kunci this untuk menunjuk pada anggota dari superclass.

    Program berikut mendemonstrasikan bagaimana referensi super digunakan untuk memanggil constructor superclass.

    class Person { String firstName; String lastName; Person(String fname, String lname) { firstName = fname; lastName = lname; } } class Student extends Person { String studNum; Student(String fname, String lname, String sNum) { super(fname, lname);

  • J.E.N.I.

    Pengenalan Pemrograman 2 13

    studNum = sNum; }

    } Petunjuk Penulisan Program: super() menunjuk pada superclass dengan segera. Ini harus berada pada pernyataan pertama dalam constructor superclass. Kata kunci dapat juga digunakan untuk menunjuk anggota superclass seperti yang ditunjukkan pada contoh berikut.

    class Superclass{ int a; void display_a(){ System.out.println("a = " + a); } } class Subclass extends Superclass { int a; void display_a(){ System.out.println("a = " + a); } void set_super_a(int n){ super.a = n; } void display_super_a(){ super.display_a(); } } class SuperDemo { public static void main(String args[]){ Superclass SuperObj = new Superclass(); Subclass SubObj = new Subclass(); SuperObj.a = 1; SubObj.a = 2; SubObj.set_super_a(3); SuperObj.display_a(); SubObj.display_a(); SubObj.display_super_a(); System.out.println(SubObj.a); }

    } Program tersebut akan menampilkan hasil berikut. a = 1

    a = 2 a = 3

    2

  • J.E.N.I.

    Pengenalan Pemrograman 2 14

    1.3.16 Kata Kunci static

    Kata kunci static dapat digunakan untuk anggota dari sebuah class. Kata kunci ini menyediakan static atau anggota class untuk diakses sama sebelum beberapa instance dari class dibuat.

    Variabel class bersifat seperti variabel umum. Ini artinya bahwa variabel dapat diakses oleh semua instance dari class.

    Method class mungkin dapat diambil tanpa membuat sebuah object dari class tersebut. Bagaimanapun, mereka hanya dapat mengakses anggota static dari class. Ditambahkan juga, mereka tidak dapat menunjuk this dan super.

    Kata kunci static dapat juga diaplikasikan pada blok. Ini dinamakan dengan blok static. Blok ini dieksekusi hanya sekali, ketika class diisi. Hal ini biasanya digunakan untuk menginisialisasi variabel class.

    class Demo { static int a = 0; static void staticMethod(int i) { System.out.println(i); } static { //blok static System.out.println("This is a static block."); a += 1; } } class StaticDemo { public static void main(String args[]) { System.out.println(Demo.a); Demo.staticMethod(5); Demo d = new Demo(); System.out.println(d.a); d.staticMethod(0); Demo e = new Demo(); System.out.println(e.a); d.a += 3; System.out.println(Demo.a+", " +d.a +", " +e.a); } }

    Keluaran dari source kode ditunjukkan di bawah ini.

    This is a static block. 1 5 1 0 1 4, 4, 4

    1.3.17 Kata Kunci final Kata kunci final dapat diaplikasikan pada variabel, method dan class. Untuk mengingat fungsi dari kata kunci, ingat bahwa itu secara mudah dibatasi apa yang kita dapat lakukan dengan variabel, method dan class. Nilai dari variabel final dapat tidak lama diubah sesudah nilainya telah diatur. Sebagai contoh, final int data = 10; Pernyataan berikut akan menyebabkan terjadi compilation error:

  • J.E.N.I.

    Pengenalan Pemrograman 2 15

    data++; Method final tidak dapat di-override dalam class anak.

    final void myMethod() { //in a parent class } myMethod tidak dapat lama di-override dalam class anak. class final tidak dapat diwariskan tidak seperti class yang biasanya.

    final public class MyClass { } Petunjuk Penulisan Program: Perintah penulisan kata kunci final dan public memungkinkan bertukar tempat. Pernyataan ini akan menyebabkan kesalahan compilation terjadi karena MyClass dapat tidak lama di-extended.

    public WrongClass extends MyClass {

    } 1.3.18 Inner Classes Sebuah inner class secara mudah dideklarasikan dalam class lain.

    class OuterClass { int data = 5; class InnerClass { int data2 = 10; void method() { System.out.println(data); System.out.println(data2); } } public static void main(String args[]) { OuterClass oc = new OuterClass(); InnerClass ic = oc.new InnerClass(); System.out.println(oc.data); System.out.println(ic.data2); ic.method(); }

    } Untuk mampu mengakses anggota dari inner class, kita butuh sebuah instance dari inner class. Method-method dari inner class dapat secara langsung mengakses anggota dari outer class.

  • J.E.N.I.

    Pengenalan Pemrograman 2 16

    1.4 Latihan 1.4.1 Tabel Perkalian Tulis program yang mempunyai masukkan size dari user dan mencetak tabel perkalian dengan size yang ditetapkan. Size untuk tabel perkalian : 5 Tabel perkalian dari size 5:

    1 2 3 4 5

    1 1

    2 2 4

    3 3 6 9

    4 4 8 12 16

    5 5 10 15 20 25

    1.4.2 Greatest Common Factor(GCF) Tulis sebuah program yang mempunyai tiga integer dan menghitung nilai GCF dari tiga angka. GCF adalah angka terbesar yang secara rata dibagi ke semua angka yang diberikan. Input 1: 25 Input 1: 1 Input 1: 9

    Input 2: 15 Input 2: 2 Input 2: 27

    Input 3: 35 Input 3: 3 Input 3: 12

    GCF: 5 GCF: 1 GCF: 3

    1.4.3 Shape Buatlah class Shape. class memiliki dua field String: name dan size. class mempunyai method printShapeInfo, dimana hanya mengeluarkan nilai name dan field size dari object Shape. Juga memiliki method printShapeName dan printShapeSize, dimana mencetak nama dan size dari object, berturut-turut. Menggunakan pewarisan, buat class Square dengan field yang sama dan method seperti itu dari class Shape. Class ini mempunyai dua tambahan field integer: length dan width. Method printShapeLength dan printShapeWidth yang mencetak panjang dan lebar object yang juga termasuk dalam class ini. Anda juga harus meng-override printShapeInfo untuk mencetak keluaran field tambahan dalam subclass juga.

    1.4.4 Binatang

    Buatlah interface Animal yang mempunyai tiga method:eat dan move. Semua method ini tidak punya argumen atau nilai return. Method ini hanya mengeluarkan bagaimana object Animal makan dan bergerak. Sebagai contoh, seekor kelinci memakan wortel dan bergerak dengan melompat. Buat class Fish dan Bear yang menggunakan interface Animal. Terserah kepada Anda bagaimana menggunakan method eat dan move.

  • J.E.N.I.

    Pengenalan Pemrograman 2 1

    BAB 2 Exceptions dan Assertions

    2.1 Tujuan Dasar penanganan exception telah dikenalkan pada Anda di pelajaran pemrograman pertama. Bab ini membahas secara lebih dalam mengenai exception dan sedikit menyinggung tentang assertion. Pada akhir pembahasan, diharapkan pembaca dapat :

    1. Menangani exception dengan menggunakan try, catch dan finally 2. Membedakan penggunaan antara throw dengan throws 3. Menggunakan exception class yang berbeda beda 4. Membedakan antara checked exceptions dan unchecked exceptions 5. Membuat exception class tersendiri 6. Menjelaskan keunggulan penggunaan assertions 7. Menggunakan assertions

    2.2 Apa itu Exception? 2.2.1 Pendahuluan Bugs dan error dalam sebuah program sangat sering muncul meskipun program tersebut dibuat oleh programmer berkemampuan tinggi. Untuk menghindari pemborosan waktu pada proses error-checking, Java menyediakan mekanisme penanganan exception. Exception adalah singkatan dari Exceptional Events. Kesalahan (errors) yang terjadi saat runtime, menyebabkan gangguan pada alur eksekusi program. Terdapat beberapa tipe error yang dapat muncul. Sebagai contoh adalah error pembagian 0, mengakses elemen di luar jangkauan sebuah array, input yang tidak benar dan membuka file yang tidak ada. 2.2.2 Error dan Exception Classes Seluruh exceptions adalah subclasses, baik secara langsung maupun tidak langsung, dari sebuah root class Throwable. Kemudian, dalam class ini terdapat dua kategori umum : Error class dan Exception class. Exception class menunjukkan kondisi yang dapat diterima oleh user program. Umumnya hal tersebut disebabkan oleh beberapa kesalahan pada kode program. Contoh dari exceptions adalah pembagian oleh 0 dan error di luar jangkauan array.

  • J.E.N.I.

    Pengenalan Pemrograman 2 2

    Error class digunakan oleh Java run-time untuk menangani error yang muncul pada saat dijalankan. Secara umum hal ini di luar control user karena kemunculannya disebabkan oleh run-time environment. Sebagai contoh adalah out of memory dan harddisk crash. 2.2.3 Sebuah Contoh Perhatikan contoh program berikut :

    class DivByZero { public static void main(String args[]) {

    System.out.println(3/0); System.out.println(Cetak.);

    } }

    Jika kode tersebut dijalankan, akan didapatkan pesan kesalahan sebagai berikut :

    Exception in thread "main" java.lang.ArithmeticException: / by zero at DivByZero.main(DivByZero.java:3)

    Pesan tersebut menginformasikan tipe exception yang terjadi pada baris dimana exception itu berasal. Inilah aksi default yang terjadi bila terjadi exception yang tidak tertangani. Jika tidak terdapat kode yang menangani exception yang terjadi, aksi default akan bekerja otomatis. Aksi tersebut pertama-tama akan menampilkan deskripsi exception yang terjadi. Kemudian akan ditampilkan stack trace yang mengindentifikasi method dimana exception terjadi. Pada bagian akhir, aksi default tersebut akan menghentikan program secara paksa. Bagaimana jika Anda ingin melakukan penanganan atas exception dengan cara yang berbeda? Untungnya, bahasa pemrograman Java memiliki 3 keywords penting dalam penanganan exception, yaitu try, catch dan finally.

  • J.E.N.I.

    Pengenalan Pemrograman 2 3

    2.3 Menangkap Exception 2.3.1 Try - Catch Seperti yang telah dijelaskan sebelumnya, keyword try, catch dan finally digunakan dalam menangani bermacam tipe exception. 3 Keyword tersebut digunakan bersama, namun finally bersifat opsional. Akan lebih baik jika memfokuskan pada dua keyword pertama, kemudian membahas finally pada bagian akhir. Berikut ini adalah penulisan try-catch secara umum :

    try {

    } catch ( ) {

    } ... } catch ( ) {

    }

    Petunjuk Penulisan Program : Blok catch dimulai setelah kurung kurawal dari kode try atau catch terkait. Penulisan kode dalam blok yang dimasukkan Gunakan contoh kode tersebut pada program DivByZero yang telah dibuat sebelumnya :

    class DivByZero { public static void main(String args[]) {

    try { System.out.println(3/0); System.out.println(Cetak.);

    } catch (ArithmeticException exc) { //Reaksi atas kejadian System.out.println(exc);

    } System.out.println(Setelah Exception.);

    } }

    Kesalahan pembagian dengan bilangan 0 adalah salah satu contoh dari ArithmethicException. Tipe exception kemudian mengindikasikan klausa catch pada class ini. Program tersebut menangani kesalahan yang terjadi dengan menampilkan deskripsi dari permasalahan.

  • J.E.N.I.

    Pengenalan Pemrograman 2 4

    Output program saat eksekusi akan terlihat sebagai berikut :

    java.lang.ArithmeticException: / by zero After exception.

    Bagian kode yang terdapat pada blok try dapat menyebabkan lebih dari satu tipe exception. Dalam hal ini, terjadinya bermacam tipe kesalahan dapat ditangani menggunakan beberapa blok catch. Perlu dicatat bahwa blok try dapat hanya menyebabkan sebuah exception pada satu waktu, namun dapat pula menampikan tipe exception yang berbeda di lain waktu. Berikut adalah contoh kode yang menangani lebih dari satu exception :

    class MultipleCatch { public static void main(String args[]) {

    try { int den = Integer.parseInt(args[0]); //baris 4 System.out.println(3/den); //baris 5

    } catch (ArithmeticException exc) { System.out.println(Nilai Pembagi 0.);

    } catch (ArrayIndexOutOfBoundsException exc2) { System.out.println(Missing argument.);

    } System.out.println(After exception.);

    } }

    Pada contoh ini, baris ke-4 akan menghasilkan kesalahan berupa ArrayIndexOutOfBoundsException bilamana seorang user alpa dalam memasukkan argument, sedang baris ke-5 akan menghasilkan kesalahan ArithmethicException jika pengguna memasukkan nilai 0 sebagai sebuah argument. Pelajari apakah yang akan terjadi terhadap program bila argumen argumen berikut dimasukkan oleh user :

    a) Tidak ada argument b) 1 c) 0

    Penggunaan try bersarang diperbolehkan dalam pemrograman Java.

    class NestedTryDemo { public static void main(String args[]){ try { int a = Integer.parseInt(args[0]); try { int b = Integer.parseInt(args[1]); System.out.println(a/b);

    } catch (ArithmeticException e) { System.out.println(Divide by zero error!");

    } } catch (ArrayIndexOutOfBoundsException) {

    System.out.println(2 parameters are required!"); }

    }

  • J.E.N.I.

    Pengenalan Pemrograman 2 5

    } Pelajari apa yang akan terjadi pada program jika argument argument berikut dimasukkan :

    a) Tidak ada argumen b) 15 c) 15 3 d) 15 0

    Kode berikut menggunakan try bersarang tergabung dengan penggunaan method.

    class NestedTryDemo2 {

    static void nestedTry(String args[]) { try {

    int a = Integer.parseInt(args[0]); int b = Integer.parseInt(args[1]); System.out.println(a/b);

    } catch (ArithmeticException e) { System.out.println("Divide by zero error!");

    } } public static void main(String args[]){

    try { nestedTry(args);

    } catch (ArrayIndexOutOfBoundsException e) { System.out.println("2 parameters are required!");

    } }

    } Bagaimana output program tersebut jika diimplementasikan terhadap argument argument berikut :

    a) Tidak ada argumen b) 15 c) 15 3 d) 15 0

    2.3.2 Keyword Finally Saatnya Anda mengimplementasikan finally dalam blok try-cacth. Berikut ini cara penggunaan keyword tersebut :

    try {

    } catch ( ) {

    } ... } finally {

    }

  • J.E.N.I.

    Pengenalan Pemrograman 2 6

    Petunjuk Penulisan Program : Sekali lagi, ketentuan penulisan program juga mengatur penggunaan finally seperti halnya pada blok catch. Penggunaan finally dimulai setelah kurung kurawal penutup blok catch terkait. Penulisan dalam blok tersebut juga mengalami indentasi. Blok finally mengandung kode penanganan setelah penggunaan try dan catch. Blok kode ini selalu tereksekusi walaupun sebuah exception terjadi atau tidak pada blok try. Blok kode tersebut juga akan menghasilkan nilai true meskipun return, continue ataupun break tereksekusi. Terdapat 4 kemungkinan skenario yang berbeda dalam blok try-catch-finally. Pertama, pemaksaan keluar program terjadi bila control program dipaksa untuk melewati blok try menggunakan return, continue ataupun break. Kedua, sebuah penyelesaian normal terjadi jika try-catch-finally tereksekusi secara normal tanpa terjadi error apapun. Ketiga, kode program memiliki spesifikasi tersendiri dalam blok catch terhadap exception yang terjadi. Yang terakhir, kebalikan skenario ketiga. Dalam hal ini, exception yang terjadi tidak terdefinisikan pada blok catch manapun. Contoh dari skenario skenario tersebut terlihat pada kode berikut ini :

    class FinallyDemo {

    static void myMethod(int n) throws Exception{ try {

    switch(n) { case 1: System.out.println("case pertama");

    return; case 3: System.out.println("case ketiga");

    throw new RuntimeException("demo case ketiga");

    case 4: System.out.println("case keempat"); throw new Exception("demo case keempat");

    case 2: System.out.println("case Kedua"); }

    } catch (RuntimeException e) { System.out.print("RuntimeException terjadi: "); System.out.println(e.getMessage());

    } finally { System.out.println("try-block entered.");

    } } public static void main(String args[]){

    for (int i=1; i

  • J.E.N.I.

    Pengenalan Pemrograman 2 7

    2.4 Melempar Exception 2.4.1 Keyword Throw Disamping menangkap exception, Java juga mengijinkan seorang user untuk melempar sebuah exception. Sintaks pelemparan exception cukup sederhana.

    throw ; Perhatikan contoh berikut ini.

    /* Melempar exception jika terjadi kesalahan input */ class ThrowDemo {

    public static void main(String args[]){ String input = invalid input; try {

    if (input.equals(invalid input)) { throw new RuntimeException("throw demo");

    } else { System.out.println(input);

    } System.out.println("After throwing"); } catch (RuntimeException e) {

    System.out.println("Exception caught here."); System.out.println(e);

    } }

    } 2.4.2 Keyword Throws Jika sebuah method dapat menyebabkan sebuah exception namun tidak menangkapnya, maka digunakan keyword throws. Aturan ini hanya berlaku pada checked exception. Anda akan mempelajari lebih lanjut tentang checked exception dan unchecked exception pada bagian selanjutnya, Kategori Exception. Berikut ini penulisan syntax menggunakan keyword throws :

    () throws {

    }

    Sebuah method perlu untuk menangkap ataupun mendaftar seluruh exceptions yang mungkin terjadi, namun hal itu dapat menghilangkan tipe Error, RuntimeException, ataupun subclass-nya.

  • J.E.N.I.

    Pengenalan Pemrograman 2 8

    Contoh berikut ini menunjukkan bahwa method myMethod tidak menangani ClassNotFoundException.

    class ThrowingClass {

    static void myMethod() throws ClassNotFoundException { throw new ClassNotFoundException ("just a demo");

    } }

    class ThrowsDemo {

    public static void main(String args[]) { try {

    ThrowingClass.myMethod(); } catch (ClassNotFoundException e) {

    System.out.println(e); }

    } }

    2.5 Kategori Exception 2.5.1 Exception Classes dan Hierarki Seperti yang disebutkan sebelumnya, root class dari seluruh exception classes adalah Throwable class. Yang disebutkan dibawah ini adalah exception class hierarki. Seluruh exceptions ini terdefinisi pada package java.lang.

    Tabel 1.4. Hirarki Exception Class

  • J.E.N.I.

    Pengenalan Pemrograman 2 9

    Sekarang Anda sudah cukup familiar dengan beberapa exception classes, saatnya untuk mengenalkan aturan : catch lebih dari satu harus berurutan dari subclass ke superclass.

    class MultipleCatchError { public static void main(String args[]){

    try { int a = Integer.parseInt(args [0]); int b = Integer.parseInt(args [1]); System.out.println(a/b);

    } catch (Exception e) { System.out.println(e);

    } catch (ArrayIndexOutOfBoundsException e2) { System.out.println(e2);

    } System.out.println("After try-catch-catch.");

    } }

    Setelah mengkompilasi kode tersebut akan menghasilkan pesan error jika Exception class adalah superclass dari ArrayIndexOutOfBoundsException class.

    MultipleCatchError.java:9: exception java.lang.ArrayIndexOutOfBoundsException has already been caught } catch (ArrayIndexOutOfBoundsException e2) {

    2.5.2 Checked dan Unchecked Exceptions Exception terdiri atas checked dan unchecked exceptions. Checked exceptions adalah exception yang diperiksa oleh Java compiler. Compiler memeriksa keseluruhan program apakah menangkap atau mendaftar exception yang terjadi dalam sintax throws. Apabila checked exception tidak didaftar ataupun ditangkap, maka compiler error akan ditampilkan. Tidak seperti checked exceptions, unchecked exceptions tidak berupa compile-time checking dalam penanganan exceptions. Pondasi dasar dari unchecked exception classes adalah Error, RuntimeException dan subclass-nya.

    2.5.3 User Defined Exceptions Meskipun beberapa exception classes terdapat pada package java.lang namun tidak mencukupi untuk menampung seluruh kemungkinan tipe exception yang mungkin terjadi. Sehingga sangat mungkin bahwa Anda perlu untuk membuat tipe exception tersendiri. Dalam pembuatan tipe exception Anda sendiri, Anda hanya perlu untuk membuat sebuah extended class terhadap RuntimeException class, maupun Exception class lain. Selanjutnya tergantung pada Anda dalam memodifikasi class sesuai permasalahan yang akan diselesaikan. Members dan constructors dapat dimasukkan pada exception class milik Anda.

  • J.E.N.I.

    Pengenalan Pemrograman 2 10

    Berikut ini contohnya :

    class HateStringException extends RuntimeException{ /* Tidak perlu memasukkan member ataupun construktor */

    } class TestHateString {

    public static void main(String args[]) { String input = "invalid input"; try {

    if (input.equals("invalid input")) { throw new HateStringException();

    } System.out.println("String accepted.");

    } catch (HateStringException e) { System.out.println("I hate this string: " + input + ".");

    } }

    }

    2.6 Assertions 2.6.1 User Defined Exceptions Assertions mengijinkan programmer untuk menentukan asumsi yang dihadapi. Sebagai contoh, sebuah tanggal dengan area bulan tidak berada antara 1 hingga 12 dapat diputuskan bahwa data tersebut tidak valid. Programmer dapat menentukan bulan harus berada diantara area tersebut. Meskipun hal itu dimungkinkan untuk menggunakan contructor lain untuk mensimulasikan fungsi dari assertions, namun sulit untuk dilakukan karena fitur assertion dapat tidak digunakan. Hal yang menarik dari assertions adalah seorang user memiliki pilihan untuk digunakan atau tidak pada saat runtime. Assertion dapat diartikan sebagai extensi atas komentar yang menginformasikan pembaca kode bahwa sebagian kondisi harus terpenuhi. Dengan menggunakan assertions, maka tidak perlu untuk membaca keseluruhan kode melalui setiap komentar untuk mencari asumsi yang dibuat dalam kode. Namun, menjalankan program tersebut akan memberitahu Anda tentang assertion yang dibuat benar atau salah. Jika assertion tersebut salah, maka AssertionError akan terjadi. 2.6.2 Mengaktifkan dan Menonaktifkan Exceptions Penggunaan assertions tidak perlu melakukan import package java.util.assert. Menggunakan assertions lebih tepat ditujukan untuk memeriksa parameter dari non-public methods jika public methods dapat diakses oleh class lain. Hal itu mungkin terjadi bila penulis dari class lain tidak menyadari bahwa mereka dapat menonaktifkan assertions. Dalam hal ini program tidak dapat bekerja dengan baik. Pada non-public methods, hal tersebut tergunakan secara langsung oleh kode yang ditulis oleh programmer yang memiliki akses terhadap methods tersebut. Sehingga

  • J.E.N.I.

    Pengenalan Pemrograman 2 11

    mereka menyadari bahwa saat menjalankannya, assertion harus dalam keadaan aktif. Untuk mengkompilasi file yang menggunakan assertions, sebuah tambahan parameter perintah diperlukan seperti yang terlihat dibawah ini :

    javac source 1.4 MyProgram.java Jika Anda ingin untuk menjalankan program tanpa menggunakan fitur assertions, cukup jalankan program secara normal.

    java MyProgram Namun, jika Anda ingin mengaktifkan assertions, Anda perlu menggunakan parameter enableassertions atau ea.

    java enableassertions MyProgram 2.6.3 Sintaks Assertions Penulisan assertions memiliki dua bentuk. Bentuk yang paling sederhana terlihat sebagai berikut :

    assert ; dimana adalah kondisi dimana assertion bernilai true. Bentuk yang lain menggunakan dua ekspresi, berikut ini cara penulisannya :

    assert : ; dimana adalah kondisi assertion bernilai true dan adalah informasi yang membantu pemeriksaan mengapa program mengalami kesalahan.

    class AgeAssert {

    public static void main(String args[]) { int age = Integer.parseInt(args[0]); assert(age>0); /* jika masukan umur benar (misal, age>0) */ if (age >= 18) {

    System.out.println(Congrats! You're an adult! =)); }

    } }

  • J.E.N.I.

    Pengenalan Pemrograman 2 12

    2.7 Latihan 2.7.1 Heksadesimal ke Desimal Tentukan sebuah angka heksadesimal sebagai input. Konversi angka tersebut menjadi bilangan desimal. Tentukan exception class Anda sendiri dan lakukan penanganan jika input dari user bukan berupa bilangan heksadesimal. 2.7.2 Menampilkan Sebuah Berlian Tentukan nilai integer positif sebagai input. Tampilkan sebuah berlian menggunaakan karakter asterisk (*) sesuai angka yang diinput oleh user. Jika user memasukkan bilangan integer negatif, gunakan assertions untuk menanganinya. Sebagai contoh, jika user memasukkan integer bernilai 3, program Anda harus menampilkan sebuah berlian sesuai bentuk berikut :

    * ***

    ***** *** *

  • J.E.N.I.

    Pengenalan Pemrograman 2 1

    BAB 3 Teknik Pemrograman Lanjut

    3.1 Tujuan Modul ini mengenalkan suatu teknik pemrograman yang lebih tinggi. Dalam bagian ini Anda akan mempelajari rekursif dan tipe data abstrak. Pada akhir pembahasan, diharapkan pembaca dapat : 1. Memahami dan menggunakan rekursif

    2. Mengetahui perbedaan antara stacks dan queues

    2. Mengimplementasikan suatu implementasi sequensial dari stacks dan queues

    3. Mengimplementasikan suatu implementasi linked dari stacks and queues

    4. Menggunakan class-class Collection yang ada

    3.2 Rekursif 3.2.1 Apa yang dimaksud dengan Rekursif? Rekursif adalah teknik pemecahan masalah yang powerful dan dapat digunakan ketika inti dari masalah terjadi berulang kali. Tentu saja, tipe dari masalah ini dapat dipecahkan mengunakan perkataan berulang-ulang (yaitu, menggunakan konstruksi looping seperti for, while dan do-while). Sesungguhnya, iterasi atau perkataan berulang-ulang merupakan peralatan yang lebih efisien jika dibandingkan dengan rekursif tetapi rekursif menyediakan solusi yang lebih baik untuk suatu masalah. Pada rekursif, method dapat memanggil dirinya sendiri. Data yang berada dalam method tersebut seperti argument disimpan sementara ke dalam stack sampai method pemanggilnya diselesaikan. 3.2.2 Rekursif Vs. Iterasi Untuk pengertian yang lebih baik dari rekursif, mari kita lihat pada bagaimana macam-macam dari teknik iterasi. Dalam teknik-teknik tersebut juga dapat kita lihat penyelesaian sebuah loop yang lebih baik menggunakan rekursif daripada iterasi. Penyelesaian masalah dengan perulangan menggunakan iterasi secara tegas juga digunakan pada struktur kontrol pengulangan. Sementara itu, untuk rekursif, task diulangi dengan memanggil sebuah method perulangan. Maksud dari hal tersebut adalah untuk menggambarkan sebuah masalah ke dalam lingkup yang lebih kecil dari perulangan itu sendiri. Pertimbangkan penghitungan faktorial dalam penentuan bilangan bulat. Definisi rekursif dari hal tersebut dapat diuraikan sebagai berikut: factorial(n) = factorial(n-1) * n; factorial(1) = 1. Sebagai contohnya, nilai faktorial dari 2 sama dengan fatorial (1)*2, dimana hasilnya adalah 2. Faktorial dari 3 adalah 6, dimana sama dengan faktorial dari (2)*3.

  • J.E.N.I.

    Pengenalan Pemrograman 2 2

    Gambar 1: Contoh Factorial

    Dengan iterasi, proses diakhiri ketika kondisi loop gagal atau salah. Dalam kasus dari penggunaan rekursif, proses yang berakhir dengan kondisi tertentu disebut permasalahan dasar yang telah tercukupi oleh suatu pembatasan kondisi. Permasalahan yang mendasar merupakan kejadian yang paling kecil dari sebuah masalah. Sebagai contoh, dapat dilihat pada kondisi rekursif pada faktorial, kasus yang mudah adalah ketika masukannya adalah 1. 1 dalam kasus ini merupakan dasar dari masalah. Penggunaan dari iterasi dan rekursif dapat bersama-sama memandu loops jika hal ini tidak digunakan dengan benar. Keuntungan iterasi dibandingkan rekursif adalah performance yang lebih baik. Hal tersebut lebih cepat untuk rekursif sejak terbentuknya sebuah parameter pada sebuah method yang menyebabkan adanya suatu CPU time. Bagaimanapun juga, rekursif mendorong pelatihan perancangan software yang lebih baik, sebab teknik ini biasanya dihasilkan dalam kode yang singkat yang lebih mudah untuk dimengerti dan juga mempromosikan reusability pada suatu solusi yang sebelumnya telah diterapkan. Memilih antara iterasi dan rekursif merupakan permasalahan dari menjaga keseimbangan antara baiknya sebuah performance dan baiknya perancangan software. 3.2.3 Faktorial: Contoh Listing program berikut ini menunjukkan bagaimana menghitung faktorial menggunakan teknik iterasi.

    class FactorialIter { static int factorial(int n) { int result = 1; for (int i = n; i > 1; i--) { result *= i; }

  • J.E.N.I.

    Pengenalan Pemrograman 2 3

    return result; } public static void main(String args[]) { int n = Integer.parseInt(args[0]);

    System.out.println(factorial(n)); } }

    Dibawah ini merupakan listing program yang sama tetapi menggunakan rekursif.

    class FactorialRecur { static int factorial(int n) { if (n == 1) { /* The base case */ return 1; } /* Recursive definition; Self-invocation */ return factorial(n-1)*n; } public static void main(String args[]) { int n = Integer.parseInt(args[0]); System.out.println(factorial(n)); }

    } 3.2.4 Print n in any Base: Contoh yang lain Sekarang, mempertimbangkan dari masalah dalam pencetakkan suatu angka desimal yang nilai basenya telah ditetapkan oleh pengguna. Ingat bahwa solusi dalam hal ini untuk menggunakan repetitive division dan untuk menulis sisa perhitungannya. Proses akan berakhir ketika sisa hasil pembagian kurang dari base yang ditetapkan. Dapat diasumsikan jika nilai input desimal adalah 10 dan kita akan mengkonversinya menjadi base 8. Inilah solusinya dengan perhitungan menggunakan pensil dan kertas.

    Dari solusi diatas, 10 adalah sama dengan 12 base 8. Contoh berikutnya. Nilai input desimalnya adalah 165 dan akan dikonversi ke base 16.

  • J.E.N.I.

    Pengenalan Pemrograman 2 4

    165 adalah sama dengan A5 base 16. Catatan: A=10.

    Berikut ini merupakan solusi iterative untuk masalah diatas. class DecToOthers { public static void main(String args[]) { int num = Integer.parseInt(args[0]); int base = Integer.parseInt(args[1]); printBase(num, base); } static void printBase(int num, int base) { int rem = 1; String digits = "0123456789abcdef"; String result = ""; /* langkah interasi */ while (num!=0) { rem = num%base; num = num/base; result = result.concat(digits.charAt(rem)+""); } /* mencetak reverse dari result */ for(int i = result.length()-1; i >= 0; i--) { System.out.print(result.charAt(i)); } } }

    Berikut ini merupakan rekursif untuk masalah yang sama dengan solusi sebelumnya.

    class DecToOthersRecur { static void printBase(int num, int base) { String digits = "0123456789abcdef"; /* Langkah Rekursif*/ if (num >= base) { printBase(num/base, base); } /* Base case: num < base */ System.out.print(digits.charAt(num%base)); } public static void main(String args[]) { int num = Integer.parseInt(args[0]); int base = Integer.parseInt(args[1]); printBase(num, base); }

    }

  • J.E.N.I.

    Pengenalan Pemrograman 2 5

    3.3 Tipe Data Abstract 3.3.1 Apa yang Dimaksud dengan Tipe Data Abstract? Abstract Data Type (ADT) adalah kumpulan dari elemen-elemen data yang disajikan dengan satu set operasi yang digambarkan pada elemen-elemen data tersebut. Stacks, queues dan pohon biner adalah tiga contoh dari ADT. Dalam bab ini, Anda akan mempelajari tentang stacks dan queues. 3.3.2 Stacks Stack adalah satu set atau urutan elemen data dimana manipulasi data dari elemen-elemen hanya diperbolehkan pada tumpukan teratas dari stack. Hal ini merupakan perintah pengumpulan data secara linier yang disebut last in, first out (LIFO). Stacks berguna untuk bermacam-macam aplikasi seperti pattern recognition dan pengkonversian antar notasi infix, postfix dan prefix. Dua operasi yang dihubungkan dengan stacks adalah operasi push dan pop. Push berarti memasukkan data ke dalam stacks yang paling atas dimana pop sebagai penunjuk/pointer untuk memindahkan elemen ke atas stacks. Untuk memahami bagaimana cara kerja stacks, pikirkan bagaimana Anda dapat menambah atau memindakan sebuah data dari tumpukan data. Pikiran Anda akan memberitahu Anda untuk menambah atau memindahkan data hanya pada stack yang paling atas karena jika menggunakan cara lain, dapat menyebabkan tumpukan stack akan terjatuh. Dibawah ini merupakan ilustrasi bagaimana tampilan dari stacks.

    n-1

    ...

    6

    5 Jayz top

    4 KC

    3 Jojo

    2 Toto

    1 Kyla

    0 DMX bottom

    Tabel 1 2 2: Ilustrasi Stack

    Stack akan berarti penuh jika jangkauan sel teratas disimbolkan dengan n-1. Jika nilai teratas / top sama dengan -1, stack berarti kosong.

  • J.E.N.I.

    Pengenalan Pemrograman 2 6

    3.3.3 Queues Queues adalah contoh lain dari ADT. Hal ini merupakan perintah pengumpulan data yang disebut first-in, first-out. Aplikasi ini meliputi tugas penjadwalan dalam sistem operasi, topological sorting dan graph traversal. Enqueue dan dequeue merupakan operasi yang berhubungan dengan queues. Enqueue menunjuk pada memasukkan data pada akhir queue sedangkan dequeue berarti memindahkan elemen dari queue tersebut. Untuk mengingat bagaimana queue bekerja, ingatlah arti khusus dari queue yaitu baris. Berikut ini bagaimana cara kerja queue. Siapa yang akan mendapatkan kesempatan pertama untuk bertemu bintang idolanya dari mereka yang sedang menunggu dalam sebuah barisan? Seharusnya orang pertama yang berada pada barisan tersebut. Orang ini mendapat kesempatan pertama untuk meninggalkan barisan. Hubungkan hal tersebut dengan bagaimana queue bekerja. Berikut ini merupakan ilustrasi dari bagaimana tampilan dari queue. 0 1 2 3 4 5 6 7 8 9 ... n-1

    Eve Jayz KC Jojo Toto Kyla DMX

    Insert front end

    Delete

    Tabel 1.2.3: Ilustrasi Queue

    Queue akan kosong jika nilai end kurang dari front. Sementara itu, akan penuh jika end sama dengan n-1. 3.3.4 Sequential and Linked Representation ADTs biasanya dapat diwakilkan menggunakan sequential dan linked representation. Hal ini memudahkan untuk membuat sequential representation dengan menggunakan array. Bagaimanapun juga, masalah dengan menggunakan array adalah pembatasan size, yang membuatnya tidak fleksibel. Dengan menggunakan array, sering terjadi kekurangan atau kelebihan space memori. Mempertimbangkan hal tersebut, Anda harus membuat sebuah array dan mendeklarasikannya agar mampu menyimpan 50 elemen. Jika user hanya memasukkan 5 elemen, maka 45 space pada memori akan sia-sia. Disisi lain, jika user ingin memasukkan 51 elemen, space yang telah disediakan didalam array tidak akan cukup. Dibandingkan dengan sequential representation, linked representation lebih sedikit rumit tetapi lebih fleksibel. Linked representation menyesuaikan memori yang dibutuhkan oleh user. Penjelasan lebih lanjut pada linked representation akan didiskusikan pada bab berikutnya. 3.3.5 Sequential Representation dari Integer Stack

    class SeqStack { int top = -1; /* pada permulaan, stack kosong*/ int memSpace[]; /* penyimpanan untuk integer */ int limit; /* ukuran dari memSpace */

  • J.E.N.I.

    Pengenalan Pemrograman 2 7

    SeqStack() { memSpace = new int[10]; limit = 10; } SeqStack(int size) { memSpace = new int[size]; limit = size; } boolean push(int value) { top++; /* memeriksa apakah stack penuh */ if (top < limit) { memSpace[top] = value; } else { top--; return false; } return true; } int pop() { int temp = -1; /* memeriksa apakah stack kosong */ if (top >= 0) { temp = memSpace[top]; top--; } else { return -1; } return temp; } public static void main(String args[]) { SeqStack myStack = new SeqStack(3); myStack.push(1); myStack.push(2); myStack.push(3); myStack.push(4); System.out.println(myStack.pop()); System.out.println(myStack.pop()); System.out.println(myStack.pop()); System.out.println(myStack.pop()); } }

    3.3.6 Linked Lists Sebelum mengimplementasikan linked representation dari stacks, pertama mari kita pelajari bagaimana membuat linked representation. Dalam hal ini, kita akan menggunakan linked list. Linked list merupakan struktur dinamis yang berlawanan dengan array, dimana merupakan struktur statis. Hal ini berarti linked list dapat tumbuh dan berkurang dalam ukuran yang bergantung pada kebutuhan user. Linked list digambarkan sebagai kumpulan dari nodes, Yang masing-masing berisi data dan link atau pointer ke node berikutnya di dalam list.

  • J.E.N.I.

    Pengenalan Pemrograman 2 8

    Gambar dibawah ini menunjukkan tampilan dari node.

    Gambar 2.6a: Sebuah node

    Berikut ini merupakan contoh dari non-empty linked list dengan 3 node.

    Gambar 3.6b: Non-empty linked list dengan tiga node

    Berikut ini bagaimana class node diimplementasikan. Class ini dapat digunakan untuk membuat linked list.

    class Node { int data; /* integer data diisikan dalam node */ Node nextNode; /* node selanjutnya dalam list */ } class TestNode { public static void main(String args[]) { Node emptyList = null; /* membuat list kosong */ /* head points untuk node pertama dalam list */ Node head = new Node(); /* inisialisasi node pertama dalam list */ head.data = 5; head.nextNode = new Node(); head.nextNode.data = 10; /* null menandai akhir dari list */ head.nextNode.nextNode = null; /* mencetak elemen list */ Node currNode = head; while (currNode != null) { System.out.println(currNode.data); currNode = currNode.nextNode; } } }

  • J.E.N.I.

    Pengenalan Pemrograman 2 9

    3.3.7 Linked Representation dari Integer Stack Sekarang Anda telah mempelajari tentang linked list. Maka Anda telah siap untuk menerapkan apa yang telah Anda pelajari untuk implementasi linked representation dari stack.

    class DynamicIntStack{ private IntStackNode top; /* head atau puncak dari stack */ class IntStackNode { /* class node */ int data; IntStackNode next; IntStackNode(int n) { data = n; next = null; } } void push(int n){ /* no need to check for overflow */ IntStackNode node = new IntStackNode(n); node.next = top; top = node; } int pop() { if (isEmpty()) { return -1; /* may throw a user-defined exception */ } else { int n = top.data; top = top.next; return n; } } boolean isEmpty(){ return top == null; } public static void main(String args[]) { DynamicIntStack myStack = new DynamicIntStack(); myStack.push(5); myStack.push(10); /* mencetak elemen dari stack */ IntStackNode currNode = myStack.top; while (currNode!=null) { System.out.println(currNode.data); currNode = currNode.next; } System.out.println(myStack.pop()); System.out.println(myStack.pop()); } }

  • J.E.N.I.

    Pengenalan Pemrograman 2 10

    Gambar 1.2.7: Implementasi linked dari stack

    3.3.8 Java Collections Saat ini Anda telah diperkenalkan kepada dasar tipe data abstract. Pada intinya, Anda telah mempelajari tentang dasar dari linked lists, stacks dan queue. Berita baik bahwa tipe data abstract telah siap untuk diimplementasikan dan dimasukkan dalam Java. Class Stack dan LinkedList diperbolehkan digunakan tanpa perlu pengertian yang lengkap dari konsep ini. Bagaimanapun juga, sebagai ilmuwan komputer, sangat penting untuk mengerti konsep dari tipe data abstract. Oleh karena itu, penjelasan terperinci masih disampaikan dalam bagian yang terdahulu. Dengan peluncuran dari J2SE 5.0, queue interface telah tersedia. Untuk detail pada class dan interface ini, dapat dilihat pada dokumentasi Java API. Kepada kita, Java telah menyajikan classes dan interfaces Collection yang lain, dimana semuanya dapat ditemukan di java.util package. Contoh dari classes Collection termasuk LinkedList, ArrayList, HashSet dan TreeSet. Class tersebut benar-benar implementasi dari collection interfaces yang berbeda. Induk hirarki dari collection interfaces adalah interfaces Collection itu sendiri. Sebuah collection hanyalah sebuah grup dari object yang diketahui sebagai elemennya sendiri. Collection memperbolehkan penggandaan/salinan dan tidak membutuhkan pemesanan elemen secara spesifik. SDK tidak menyediakan implementasi built-in yang lain dari interface ini tetapi mengarahkan subinterfaces, interfaces Set dan interfaces List diperbolehkan. Sekarang, apa perbedaan dari kedua interface tersebut. Set merupakan collection yang tidak dipesan dan tidak ada penggandaan di dalamnya. Sementara itu, list merupakan collection yang dipesan dari elemen-elemen dimana juga diperbolehkannya penggandaan. HashSet, LinkedHashSet dan TreeSet suatu implementasi class dari interfaces Set. ArrayList, LinkedList dan Vector suatu implementasi class dari List interfaces.

    Collection

    Set

    List

    HashSet LinkedHashSet TreeSet ArrayList LinkedList Vector

    Tabel 1 2 8a: Java collections

    Berikut ini adalah daftar dari beberapa methods Collections yang disediakan dalam Collection API dari Java 2 Platform SE v1.4.1. Dalam Java 2 Platform SE v.1.5.0, methods ini telah dimodifikasi untuk menampung generic types. Karena generic types masih belum selesai dibahas, sebaiknya mempertimbangkan method ini terlebih dahulu.

  • J.E.N.I.

    Pengenalan Pemrograman 2 11

    Disarankan bahwa Anda mengacu pada Collection methods yang terbaru dimana Anda lebih mudah mengerti generic types, yang akan didiskusikan pada chapter berikutnya. Collection Methods

    public boolean add(Object o) Memasukkan Object o ke dalam collection ini. Mengembalikan nilai true jika o telah sukses ditambahkan ke dalam collection.

    public void clear() Menghapus semua elemen dari collection ini.

    public boolean remove(Object o) Menghapus single instance dari Object o pada collection ini, jika hal tersebut telah diinputkan. Mengembalikan nilai true jika o telah ditemukan dan dihapus dari collection.

    public boolean contains(Object o) Mengembalikan nilai true jika collection ini berisi Object o.

    public boolean isEmpty() Mengembalikan nilai true jika collection ini tidak berisi object atau elemen apapun.

    public int size() Mengembalikan jumlah dari elemen pada collection ini.

    public Iterator iterator() Mengembalikan sebuah iterator yang menunjukkan kita pada isi collection ini.

    public boolean equals(Object o) Mengembalikan nilai true jika Object o sama dengan yang ada pada collection ini.

    public int hashCode() Mengembalikan nilai hash code (yaitu ID) untuk collection ini. Objects atau collections yang sama memiliki nilai hash code atau ID yang sama.

    Tabel 1 2 8b: Methods dari class Collection

    Anda diharapkan mengacu pada dokumentasi API untuk mengetahui daftar lengkap dari methods dalam interface Collection, List dan Set. Saat ini kita akan melihat beberapa classes collection. Harap mengacu pada API untuk daftar dari methods yang dimasukkan ke dalam class ini. Pada bagian sebelumnya, Anda telah melihat bagaimana mengimplementasikan linked list dengan cara Anda sendiri. Java SDK juga telah menyediakan built-implementation dari linked list untuk kita. Class LinkedList berisi methods yang memperbolehkan linked list digunakan seperti stacks, queue atau ADT yang lain. Listing program berikut ini menunjukan bagaimana menggunakan class LinkedList.

  • J.E.N.I.

    Pengenalan Pemrograman 2 12

    import java.util.*; class LinkedListDemo { public static void main(String args[]) { LinkedList list = new LinkedList(); list.add(new Integer(1)); list.add(new Integer(2)); list.add(new Integer(3)); list.add(new Integer(1)); System.out.println(list + ", size = " + list.size()); list.addFirst(new Integer(0)); list.addLast(new Integer(4)); System.out.println(list); System.out.println(list.getFirst() + ", " + list.getLast()); System.out.println(list.get(2) + ", " + list.get(3)); list.removeFirst(); list.removeLast(); System.out.println(list); list.remove(new Integer(1)); System.out.println(list); list.remove(3); System.out.println(list); list.set(2, "one"); System.out.println(list); } }

    ArrayList merupakan versi fleksibel dari array biasa. Yang mengimplementasikan List interface. Telitilah kode berikut ini.

    import java.util.*; class ArrayListDemo { public static void main(String args[]) { ArrayList al = new ArrayList(2); System.out.println(al + ", size = " + al.size()); al.add("R"); al.add("U"); al.add("O"); System.out.println(al + ", size = " + al.size()); al.remove("U"); System.out.println(al + ", size = " + al.size()); ListIterator li = al.listIterator(); while (li.hasNext()) System.out.println(li.next()); Object a[] = al.toArray(); for (int i=0; i

  • J.E.N.I.

    Pengenalan Pemrograman 2 13

    HashSet merupakan sebuah implementasi dari interface Set yang mempergunakan hash table. Penggunaan suatu hash table lebih mudah dan cepat untuk melihat lebih detail elemen-elemen yang ada. Tabel tersebut menggunakan suatu rumusan untuk menentukan dimana suatu objek disimpan. Teliti program ini, yang menggunakan class HashSet.

    import java.util.*; class HashSetDemo { public static void main(String args[]) { HashSet hs = new HashSet(5, 0.5f); System.out.println(hs.add("one")); System.out.println(hs.add("two")); System.out.println(hs.add("one")); System.out.println(hs.add("three")); System.out.println(hs.add("four")); System.out.println(hs.add("five")); System.out.println(hs); } }

    TreeSet merupakan sebuah implementasi dari interface Set yang menggunakan tree. Class ini memastikan bahwa yang disortir akan diurutkan secara ascending. Perhatikan, bagaimana class TreeSet telah digunakan dalam listing program berikut ini.

    import java.util.*; class TreeSetDemo { public static void main(String args[]) { TreeSet ts = new TreeSet(); ts.add("one"); ts.add("two"); ts.add("three"); ts.add("four"); System.out.println(ts); } }

    Gambar 1.2.8: Contoh TreeSet

  • J.E.N.I.

    Pengenalan Pemrograman 2 14

    3.4 Latihan 3.4.1 Faktor Persekutuan Terbesar Faktor persekutuan terbesar (FPB) dari dua angka adalah angka yang terbesar selalu dibagi oleh angka yang satunya, kemudian modulus atau sisa pembagian membagi angka kedua dan seterusnya hingga sisa pembagian dari kedua angka tersebut sama dengan nol. Menggunakan metode Euclid, buatlah dua kode untuk penghitungan dua angka. Gunakan iterasi untuk kode program yang pertama dan rekursif untuk kode program berikutnya. Catatan pada algoritma Euclid :

    1. Sebagai masukkan integers x dan y. 2. Ulangi step dibawah ini while y != 0

    a. y = x % y; b. x = Nilai lama y;

    3. Return x. Contoh, x = 14 dan y = 6. y = x % y = 14 % 6 = 2 x = 6 y = x % y = 6 % 2 = 0 x = 2 (FPB) 3.4.2 Sequential Representation dari Integer Queue Dengan menggunakan array, implementasikan sebuah integer queue seperti contoh pada sequential stack. 3.4.3 Linked Representation dari Integer Queue Dengan menggunakan ide dari linked list, implementasikan sebuah integer queue dinamis seperti integer stack dinamis yang diperkenalkan seperti contoh berikut.

    3.4.4 Address Book Dengan menggunakan Collection Java, buatlah sebuah program yang memperbolehkan user untuk insert, delete dan view address. Setiap address berisi nama, alamat dan nomor telepon dari orang yang mengisinya. Pengisian data dimasukkan dengan cara queue tetapi penghapusan dilakukan dengan cara stack. Dalam contoh ini, kita akan menggunakan text editor untuk mengedit program Java. Juga membuka terminal window untuk meng-compile dan mengeksekusi program Java Anda.

  • J.E.N.I.

    Pengenalan Pemrograman 2 1

    BAB 4

    Tour dari Package java.lang

    4.1 Tujuan Java datang dengan beberapa class built-in yang bermanfaat. Mari kita membahas class-class tersebut. Pada akhir pembahasan, diharapkan pembaca dapat : 1. Menggunakan class-class Java yang telah ada

    Math

    String

    StringBuffer

    Wrapper

    Process

    System

    4.2 Class Math Java juga menyediakan konstanta dan method untuk menunjukkan perbedaan operasi matematika seperti fungsi trigonometri dan logaritma. Selama method-method ini semua static, Anda dapat menggunakannya tanpa memerlukan sebuah objek Math. Untuk melengkapi daftar konstanta dan method-method ini, lihatlah acuan pada dokumentasi Java API. Dibawah ini beberapa method-method umum yang sering digunakan. Method-Method Math public static double abs(double a) Menghasilkan nilai mutlak a. Sebuah method yang di-overload. Dapat juga menggunakan nilai float atau integer atau juga long integer sebagai parameter, dengan kondisi tipe kembaliannya juga menggunakan float atau integer atau long integer, secara berturut-turut. public static double random() Menghasilkan nilai positif bilangan acak (random) yang lebih besar atau sama dengan 0.0 tetapi kurang dari 1.0. public static double max(double a, double b) Menghasilkan nilai maksimum, diantara dua nilai double, a and b. Sebuah method yang di-overload. Dapat juga menggunakan nilai float atau integer atau juga long integer sebagai parameter, dengan kondisi tipe kembalinya juga menggunakan float atau integer atau long integer, secara berturut-turut. public static double min(double a, double b) Menghasilkan nilai minimum diantara dua nilai double, a and b. Sebuah method yang

  • J.E.N.I.

    Pengenalan Pemrograman 2 2

    di-overload. Dapat juga menggunakan nilai float atau integer atau juga long integer sebagai parameter, dengan kondisi tipe kembaliannya juga menggunakan float atau integer atau long integer, secara berturut-turut. public static double ceil(double a) Menghasilkan bilangan bulat terkecil yang lebih besar atau sama dengan a. public static double floor(double a) Menghasilkan bilangan bulat terbesar yang lebih kecil atau sama dengan a. public static double exp(double a) Menghasilkan angka Euler, e pangkat a. public static double log(double a) Menghasilkan logaritma natural dari a. public static double pow(double a, double b) Menghasilkan a pangkat b. public static long round(double a) Menghasilkan pembulatan ke atas ke long terdekat. Sebuah method yang di-overload. Dapat juga menggunakan float pada argument dan akan menghasilkan pembulatan ke atas ke int terdekat. public static double sqrt(double a) Menghasilkan akar kuadrat a. public static double sin(double a) Menghasilkan sinus sudut a dalam radian. public static double toDegrees(double angrad) Menghasilkan nilai derajat yang kira-kira setara dengan nilai radian yang diberikan. public static double toRadians(double angdeg) Menghasilkan nilai radian yang kira-kira setara dengan nilai derajat yang diberikan.

    Tabel 1 1: Beberapa method dari class Math

  • J.E.N.I.

    Pengenalan Pemrograman 2 3

    Di bawah ini adalah program yang menunjukkan bagaimana method-method tersebut digunakan.

    class MathDemo { public static void main(String args[]) { System.out.println("absolute value of -5: " + Math.abs(-5)); System.out.println("absolute value of 5: " + Math.abs(-5)); System.out.println("random number(max value is 10): " + Math.random()*10); System.out.println("max of 3.5 and 1.2: " + Math.max(3.5, 1.2)); System.out.println("min of 3.5 and 1.2: " + Math.min(3.5, 1.2)); System.out.println("ceiling of 3.5: " + Math.ceil(3.5)); System.out.println("floor of 3.5: " + Math.floor(3.5)); System.out.println("e raised to 1: " + Math.exp(1)); System.out.println("log 10: " + Math.log(10)); System.out.println("10 raised to 3: " + Math.pow(10,3)); System.out.println("rounded off value of pi: " + Math.round(Math.PI)); System.out.println("square root of 5 = " + Math.sqrt(5)); System.out.println("10 radian = " + Math.toDegrees(10) + " degrees"); System.out.println("sin(90): " + Math.sin(Math.toRadians(90))); } }

    Ini adalah contoh output dari program yang dibuat. Coba jalankan program dan bereksperimenlah secara bebas dengan memberikan argument.

    absolute value of -5: 5 absolute value of 5: 5 random number(max value is 10): 4.0855332335477605 max of 3.5 and 1.2: 3.5 min of 3.5 and 1.2: 1.2 ceiling of 3.5: 4.0 floor of 3.5: 3.0 e raised to 1: 2.7182818284590455 log 10: 2.302585092994046 10 raised to 3: 1000.0 rounded off value of pi: 3 square root of 5 = 2.23606797749979 10 radian = 572.9577951308232 degrees sin(90): 1.0

  • J.E.N.I.

    Pengenalan Pemrograman 2 4

    4.3 Class String dan StringBuffer Class String disediakan oleh Java SDK dengan menggunakan kombinasi character literals. Tidak seperti bahasa pemrograman lainnya, seperti C atau C++, strings dapat digunakan menggunakan array dari character atau disederhanakan dengan menggunakan class String. Sebagai catatan, bahwa sebuah objek String berbeda dari sebuah array dari character.

    4.3.1 Constructor String Class String mempunyai 11 constructor. Untuk melihat bagaimana constructor- constructor ini, perhatikan contoh berikut.

    /* Contoh ini diambil dari catatan Dr. Encarnacion. */ class StringConstructorsDemo { public static void main(String args[]) { String s1 = new String(); // membuat string kosong char chars[] = { 'h', 'e', 'l', 'l', 'o'}; String s2 = new String(chars); // s2 = "hello"; byte bytes[] = { 'w', 'o', 'r', 'l', 'd' }; String s3 = new String(bytes); // s3 = "world" String s4 = new String(chars, 1, 3); String s5 = new String(s2); String s6 = s2; System.out.println(s1); System.out.println(s2); System.out.println(s3); System.out.println(s4); System.out.println(s5); System.out.println(s6); } }

    4.3.2 Method-method String Di bawah ini adalah daftar dari method-method String.

    Method-Method String

    public char charAt(int index) Mengirim karakter di indeks yang ditentukan oleh parameter index.

    public int compareTo(String anotherString) Membandingkan dua String dan mengirim bilangan int yang menentukan apakah objek string pemanggil kurang dari atau sama dengan anotherString. Bernilai negatif jika objek yang dilewatkan (passed string) lebih besar, 0 jika kedua string sama, dan bernilai positif jika objek string pemanggil (calling string) lebih besar.

    public int compareToIgnoreCase(String str) Serupa dengan compareTo tetapi case insensitivity.

    public boolean equals(Object anObject) Menghasilkan nilai true jika parameter tunggalnya tersusun dari karakter yang sama

  • J.E.N.I.

    Pengenalan Pemrograman 2 5

    Method-Method String

    dengan objek tempat Anda memanggil equals. Sedangkan jika parameter yang ditentukan bukan sebuah objek String atau jika tidak cocok dengan urutan simbol pada string, method akan dikembalikan dengan nilai false.

    public boolean equalsIgnoreCase(String anotherString) Serupa dengan equals tetapi case insensitivity.

    public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) Mendapatkan characters dari string yang dimulai pada index srcBegin hingga index srcEnd dan menyalin karakter-karakter tersebut pada array dst dimulai pada index dstBegin.

    public int length() Menghasilkan panjang String.

    public String replace(char oldChar, char newChar) Mengganti karakter, semua yang kemunculan oldChar diganti newChar.

    public String substring(int beginIndex, int endIndex) Mengirim substring dimulai dari indeks beginIndex yang ditentukan dan berakhir dengan indeks endIndex yang ditentukan.

    public char[] toCharArray() Mengembalikan array karakter yang sama dengan string ini.

    public String trim() Menghilangkan whitespace di awal dan akhir objek String.

    public static String valueOf(-) Dapat menggunakan tipe data sederhana seperti boolean, integer atau character, atau juga menggunakan sebuah objek sebagai parameter. Mengirim objek String yang merepresentasikan tipe tertentu yang dilewatkan sebagai parameter.

    Tabel 1 2 1: Beberapa method dari class String

    Perhatikan bagaimana method-method tersebut digunakan dalam program di bawah ini.

    class StringDemo { public static void main(String args[]) { String name = "Jonathan"; System.out.println("name: " + name); System.out.println("3rd character of name: " + name.charAt(2));

    /* character yang pertama nampak secara berurutan mempunyai nilai unicode lebih kecil */

    System.out.println("Jonathan compared to Solomon: " + name.compareTo("Solomon")); System.out.println("Solomon compared to Jonathan: " + "Solomon".compareTo("Jonathan"));

    /* 'J' mempunyai nilai unicode yang lebih kecil dibanding 'j' */

    System.out.println("Jonathan compared to jonathan: " + name.compareTo("jonathan"));

  • J.E.N.I.

    Pengenalan Pemrograman 2 6

    System.out.println("Jonathan compared to jonathan (ignore case): " + name.compareToIgnoreCase("jonathan")); System.out.println("Is Jonathan equal to Jonathan? " + name.equals("Jonathan")); System.out.println("Is Jonathan equal to jonathan? " + name.equals("jonathan")); System.out.println("Is Jonathan equal to jonathan (ignore case)? " + name.equalsIgnoreCase("jonathan")); char charArr[] = "Hi XX".toCharArray();

    /* Membutuhkan tambahan 1 untuk indeks endSrc dari getChars */

    "Jonathan".getChars(0, 2, charArr, 3); System.out.print("getChars method: "); System.out.println(charArr); System.out.println("Length of name: " + name.length()); System.out.println("Replace a's with e's in name: " + name.replace('a', 'e'));

    /* Membutuhkan tambahan 1 untuk parameter endIndex dari substring*/

    System.out.println("A substring of name: " + name.substring(0, 2)); System.out.println("Trim \" a b c d e f \": \"" + " a b c d e f ".trim() + "\""); System.out.println("String representation of boolean expression 10>10: " + String.valueOf(10>10));

    /* method toString secara implisit dipanggil method println */

    System.out.println("String representation of boolean expression 10

  • J.E.N.I.

    Pengenalan Pemrograman 2 7

    4.3.3 Class StringBuffer Ketika objek String diciptakan, objek String tidak bisa lagi dimodifikasi. Objek StringBuffer serupa dengan objek String, kecuali kenyataan bahwa objek StringBuffer bersif