Java Programming rev 1.0.5 1 Achmad Imam Kistijantoro Jurusan Teknik Informatika ITB June, 2000 Bandung Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Content ¬ ¬ ¬ ¬ ¬ ¬ 2 ¬ ¬ Dasar-dasar Programming Dasar-dasar Java Sintaks Java & Object Oriented Programming Java API Java Swing JDBC Java Networking Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Referensi ¬ ¬ ¬ 3 ¬ ¬ Java Language Specification 1.1: by James Gosling , Bill Joy, Guy Steele, Addison-Wesley, 1996. ISBN: 0-201-634511. http://java.sun•com/docs/books/jls/index.html Thinking in Java: by Bruce Eckel Prentice Hall, ISBN: 0-13659723-8 http://www.bruceeckel.com/javabook.html The Java Virtual Machine Specification, by Tim Lindholm, Frank Yellin, Bill Joy, Kathy Walrath, Addison-Wesley 1996 ISBN: 0-201-63452-X, The Java Tutorial, Sun Microsystem Inc, 2000 http://web2.java.sun.com/docs/books/tutorial/ JDK 1.2.2 Documentation, Sun Microsystem Inc. Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Dasar-dasar Programming 4 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Programming ¬ Program: - The instructions executed by a computer ¬ Algorithm: - A detailed sequence of actions to perform to accomplish some task. 5 Named after an Iranian mathematician, Al-Khawarizmi. - Sifat: • must reach a result after a finite number of steps - contoh: euclid algorithm GCD(m,n : integer) { m>=n } 1. If m==n then GCD is m else r=m%n. 2. if r==0 then GCD is n else m=n; n=r; go to step 1; Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Definition from the Jargon file :-) ¬ Program - A magic spell cast over a computer allowing it to turn one's input into error messages. - An exercise in experimental epistemology. - A form of art, ostensibly intended for the instruction of computers, which is nevertheless almost inevitably a failure if other programmers can't understand it. ¬ 6 programming - The art of debugging a blank sheet of paper (or, in these days of on-line editing, the art of debugging an empty file). "Bloody instructions which, being taught, return to plague their inventor” ("Macbeth", Act 1, Scene 7) - A pastime similar to banging one's head against a wall, but with fewer opportunities for reward. - The most fun you can have with your clothes on Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Abstraksi Mesin von Neumann ¬ ¬ stored programming concept Logical components of a computer Memory 7 CU Input ALU Output Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Proses pembuatan program ¬ ¬ ¬ ¬ ¬ editing compiling linking executing debugging 8 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Software Quality ¬ ¬ ¬ ¬ ¬ ¬ 9 ¬ ¬ ¬ Correctness Robustness Extendibility Reusability Compatibility Efficiency Portability Ease of use Functionality Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Konsep pemrograman ¬ ¬ ¬ ¬ procedural data hiding/modular data abstraction object oriented programming 10 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Pengantar konsep pemrograman ¬ Procedural Programming: - pendefinisian langkah-langkah yang harus dieksekusi secara - 11 sekuensial, contoh: resep masakan tentukan prosedur-prosedur yang diperlukan, gunakan algoritma terbaik untuk mengimplementasikan masing-masing prosedur tersebut contoh: program copy file • baca nama file yang akan di-copy (source) • buka file dengan nama tersebut • baca nama file tujuan (dest) • buka file dengan nama tujuan • baca isi file source • tulis isi ke file dest • tutup file source & dest Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Pengantar konsep pemrograman ¬ Konsep data hiding - modular programming - pada pemrograman skala besar, sebuah data yang diakses oleh - banyak kode dapat menyulitkan perubahan program. Sedikit perubahan struktur data dapat mengakibatkan perubahan di banyak tempat tentukan modul-modul yang diperlukan. partisi program sehingga data tersembunyi dibalik modul-modul tersebut 12 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Pengantar konsep pemrograman ¬ Konsep data abstraction - pendefinisian tipe dan operasi yang dapat dilakukan terhadap tipe - tersebut. reusability safe-type programming 13 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Dasar dasar Java: Object Oriented Programming ¬ Object Oriented Programming - diharapkan dapat: mempercepat pengembangan, meningkatkan - 14 - kualitas software, mempermudah pemeliharaan software, memudahkan perubahan mendefinisikan kelas-kelas yang merepresentasikan permasalahan pada dunia nyata mendefinisikan operasi yang disediakan untuk setiap kelas mengelompokkan kesamaan dengan hubungan inheritance atau client-server membuat instans dari kelas (objek) dan mengatur interaksi antar objek-objek Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Dasar-dasar Java 15 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Dasar-dasar Java ¬ ¬ 16 ¬ Java: - Java Language (current version: Java Language Spec. 2) - Java Platform (J2SE, J2EE, J2ME) Java Language - streamlined C++ - object oriented - interpreted/bytecode Platform - Java Virtual Machine - Java API Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Dasar-dasar Java: Design goal ¬ Simple and Familiar - Java dirancang untuk menghasilkan bug-free code - Menggunakan sintaks serupa C/C++, dengan menghilangkan bagianbagian yang membingungkan: #define, pointer, typedef, struct, union, enum, multiple inheritance, goto, operator overloading, automatic coersion ¬ Object Oriented - menyediakan fasilitas untuk data abstraction, behaviour sharing, evolution & correctness - pendefinisian kelas, instansiasi objek, inheritance, exception handling 17 ¬ Robust and Safe - dirancang agar aman dieksekusi via network - strong typing, no direct access to memory, good exception handling mechanism Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Java design goal (2) ¬ ¬ ¬ ¬ 18 ¬ Architecture Neutral and Portable High Performance - Just In-Time compiler Interpreted - Java bytecode Multi-threaded - support multi-threaded application Dynamic - tidak ada proses linking code secara eksplisit - definisi kelas baru dapat ditambahkan pada saat run-time - kelas di-load pada saat dibutuhkan Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Java design goal (3) ¬ Platform independent - Catatan: Java disebut sebagai platform independent, karena Java - 19 ¬ sendiri adalah sebuah platform yang berjalan di atas platform lainnya platform: • a specific computer hardware • a specific combination of hardware and operating system and/or compiler • a support software for a particular activity. Automatic garbage collection - Programmer tidak perlu melakukan dealokasi memory secara eksplisit Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Dasar-dasar Java ¬ Program Java sederhana: main: titik awal program class HelloWorld { static public void main(String args[]) { System.out.println("Hello world!"); } } ¬ 20 ¬ Kelas HelloWorld dengan sebuah method bernama main Method main : - memiliki sebuah parameter bertipe String array - memiliki public modifier - static modifier Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Perbandingan Java & C++ ¬ Java - design goal: - automatic garbage collection - streamlined C++, dengan menghilangkan feature: #define, typedef, struct, union, enum, multiple inheritance, goto, operator overloading, automatic coersion - menyediakan fasilitas interface ¬ 21 C++ - design goal: explicit garbage collection macro definition menggunakan #define pendefinisian tipe baru: typedef, struct, union, enum mendukung multiple inheritance fasilitas kontrol eksekusi: goto mekanisme operator overloading fasilitas automatic coersion Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Arsitektur Java Java program Program Java Java API Compiler Java byte-code Java Virtual Machine Sistem Komputer 22 Interpreter Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Java & Internet ¬ ¬ 23 Aplikasi Java dapat dijalankan secara stand-alone, atau sebagai applet (dieksekusi melalui web browser) Applet: program yang dapat dijalankan oleh browser Java source HTML import java.applet.Applet; import java.awt.Graphics; <HTML> <HEAD> <TITLE> A Simple Program </TITLE> </HEAD> <BODY> Here is the output of my program: <APPLET CODE="HelloWorld.class" WIDTH=150 HEIGHT=25> </APPLET> </BODY> </HTML> public class HelloWorld extends Applet { public void paint(Graphics g) { g.drawString("Hello world!", 50, 25); } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Applet vs. Stand-alone ¬ ¬ Program’s entry: - stand-alone: main - applet: init & start Akses terbatas: - library - resources 24 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Java flavor ¬ ¬ ¬ ¬ ¬ 25 ¬ ¬ Java Development Kit (JDK) Java Runtime Environment (JRE) Java Standard Edition Java Enterprise Edition Java Micro Edition Java Servlet Java Server Pages ¬ ¬ ¬ ¬ ¬ Java Beans Enterprise Java Beans Java OS Javascript JavaCard Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Sintaks Java 26 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Struktur dasar pemrograman prosedural ¬ ¬ 27 ¬ Pendefinisian data: primitif, terstruktur alur kontrol: - analisa kasus/kondisi • if-else • switch - iterasi/pengulangan • for-loop • while-loop • do-while-loop struktur program - prosedur - fungsi Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 statement & expression ¬ statement: satuan kalimat program, diakhiri dengan ; - contoh: ¬ x = x + 5; expression: ekspresi, menghasilkan nilai dengan tipe tertentu - contoh: x 28 ¬ + 5, a > b block-statement: - beberapa statement dapat digabung menjadi sebuah block, dengan diawali oleh { dan diakhiri oleh } - contoh: { tmp = a; a = b; b = tmp; } ¬ standar penulisan sintaks: - [ text ]: bagian yang berada dalam [ ] bersifat optional - italicized_text: bagian yang berhuruf italic dapat digantikan dengan teks yang sesuai Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Komentar ¬ Komentar: tidak dieksekusi, digunakan untuk penjelasan ¬ sintaks: // komentar baris /* komentar block */ 29 ¬ contoh: class Count { public static void main (String args[]) { /* bagian ini komentar */ int i; // ini juga komentar for (i = 0; i < 50; i=i+1) { System.out.println(i); } } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Pendefinisian data: type & variable ¬ ¬ ¬ ¬ ¬ program: algoritma + struktur data pendefinisian data: tipe dan variable tipe: mendefinisikan jenis suatu variabel: kumpulan nilai yang valid untuk suatu variabel dan operasi yang dapat dilakukan terhadap variabel tersebut. Type pada Java : primitif & reference primitif: - numerik: byte (8 bit), short (16 bit), integer (32 bit), long (64 bit), float 32 bit 30 floating point/real number), double (64 bit floating point) - char - boolean ¬ reference: - string, user-defined class Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Pendefinisian data: tipe & variabel ¬ ¬ ¬ ¬ variabel harus dideklarasikan dan dialokasikan dahulu sebelum digunakan deklarasi: menyatakan tipe variabel tersebut. alokasi: pengadaan area memori untuk menampung nilai variabel contoh (Java): int X; // variabel dengan nama X, bertipe integer char myvarChar; // variabel dengan nama myvarChar String str; // variabel dengan nama str 31 ¬ variabel bertipe non primitif harus alokasi eksplisit: String str; str = new String(“my string”); str = “str 2”; // khusus tipe string, operasi = otomatis alokasi Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Tipe primitif & reference ¬ Primitif: - tipe dasar seperti char, int, long, byte, float, double - memori untuk variabel tipe primitif dialokasikan pada saat variabel - ¬ 32 tersebut dideklarasikan operasi assignment pada variabel primitif menghasilkan pengkopian nilai Reference: - mempunyai semantik serupa dengan pointer pada C/C++ - memori untuk variabel tipe reference tidak dialokasikan pada saat - deklarasi, alokasi dilakukan eksplisit dengan operator new operasi assignment pada variabel reference menghasilkan pengkopian reference (tetap mengacu pada object yang sama Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Perbedaan tipe primitif & reference 33 class Value { int val; } class Test { public static void main(String[] args) { int i1 = 3; int i2 = i1; // i1 & i2 variabel berbeda dengan nilai sama i2 = 4; System.out.print("i1==" + i1); System.out.println(" but i2==" + i2); Value v1 = new Value(); v1.val = 5; Value v2 = v1; // v1 & v2 mengacu ke variabel yg sama v2.val = 6; System.out.print("v1.val==" + v1.val); System.out.println(" and v2.val==" + v2.val); } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Struktur ¬ Membentuk tipe data baru yang terdiri atas beberapa tipe lainnya class Mahasiswa { String nama; int umur; String alamat; } 34 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 if-else statement ¬ eksekusi jika kondisi tertentu terpenuhi ¬ sintaks: if ( condition-expression ) statement-block [else] statement-block 35 ¬ Contoh: class Hello { public static void main (String args[]) { int x = 10; if ( x > 0 ) { System.out.println(”x is a positive number"); } else System.out.println(“x is a negative number”); } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 switch statement ¬ ¬ analisa kasus lebih dari 1 kondisi sintaks: switch ( variabel ) { case val1 : Statement-block; break; case val2 : Statement-block; break; ... [default : Statement-block;] } 36 ¬ catatan: - variabel harus bertipe char, byte, short, atau int - default: eksekusi yang harus dijalankan jika tidak ada value yg dipenuhi variabel tersebut Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 switch statement - contoh 37 class SwitchTest { public static void main(String[] args) { int k = 1; switch (k) { case 1: System.out.print(”1"); break; case 2: System.out.print(”2"); break; case 3: System.out.println(”3"); break; } } } ¬ Apakah yang terjadi jika break dihilangkan? Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Pengulangan for-loop ¬ sintaks: for ( init-stmt ; cond-exp ; inc-stmt ) statement-block ¬ Contoh: 38 class Count { public static void main (String args[]) { int i; for (i = 0; i < 50; i=i+1) { System.out.println(i); } } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 while statement 39 class Count { public static void main (String args[]) { int i = 0; while(i < 50) { System.out.println(i); i=i+1; } } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 do-while class Count { public static void main (String args[]) { int i = 0; do { System.out.println(i); i=i+1; } while(i<50); } } 40 ¬ Apakah perbedaannya dengan versi sebelumnya? Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Struktur program: prosedur & fungsi ¬ ¬ sekumpulan instruksi yang dapat dipanggil dengan satu perintah contoh pemanggilan prosedur/fungsi: System.out.println(“x”); // prosedur untuk menampilkan teks x ke layar ¬ Sintaks: tipe nama-fungsi ( parameter-list ) { statement; ... statement; } 41 ¬ tipe: tipe nilai yang dikembalikan suatu fungsi Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Command line argument & array class printArgs { public static void main (String args[]) { for (int i = 0; i < args.length; i++) { System.out.println(“arg[“+i+”]”+args[i]); } } } 42 ¬ Array: kumpulan variabel dengan tipe sama - contoh: String args[] - args adalah array of String, diakses dengan cara: - args[0], args[1], args[2] dst., Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Operator pada Java 43 +,-,/,* += -= *= /= | |= ^ ^= & &= % %= > >= < <= arithmetics operators add and assign numbers subtract and assign multiply and assign divide and assign bitwise OR bitwise OR and assign bitwise XOR bitwise XOR and assign bitwise AND bitwise AND and assign take remainder take remainder and assign greater than greater than or equal to less than less than or equal to ! != ++ ->> >>= << <<= >>> >>>= && || == = ~ ?: boolean NOT not equal to increment by one decrement by one shift bits right shift bits right and assign shift bits left shift bits left and assign unsigned bit shift right unsigned bit shift right and assign boolean AND boolean OR boolean equals assignment bitwise NOT conditional Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Keyword pada Java 44 abstract declares that a class or method is abstract boolean declares a boolean variable or return type break prematurely exits a loop byte declares a byte variable or return type case one case in a switch statement catch handle an exception char declares a character variable or return type class signals the beginning of a class definition continue prematurely return to the beginning of a loop default default action for a switch statement do begins a do while loop double declares a double variable or return type else signals the code to be executed if an if statement is not true extends specifies the class which this class is a subclass of final declares that a class may not be subclassed or that a field or method may not be overridden finally declares a block of code guaranteed to be executed float declares a floating point variable or return type for begins a for loop if execute statements if the condition is true Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Keyword pada Java (2) 45 implements declares that this class implements the given interface import permit access to a class or group of classes in a package instanceof tests whether an object is an instanceof a class int declares an integer variable or return type interface signals the beginning of an interface definition long declares a long integer variable or return type native declares that a method is implemented in native code new allocates a new object package defines the package in which this source code file belongs private declares a method or member variable to be private protected declares a class, method or member variable to be protected public declares a class, method or member variable to be public return returns a value from a method short declares a short integer variable or return type static declares that a field or a method belongs to a class rather than an object super a reference to the parent of the current object switch tests for the truth of various possible cases Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Keyword pada Java (3) 46 synchronized Indicates that a section of code is not thread-safe this a reference to the current object throw throw an exception throws declares the exceptions thrown by a method transient This field should not be serialized try attempt an operation that may throw an exception void declare that a method does not return a value volatile Warns the compiler that a variable changes asynchronously while begins a while loop Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Arithmetics operation ¬ ¬ ¬ 47 ¬ ¬ operators: +, -, *, /, %, +=, -=, *=, /= precedence: - *, /, % - +, -= special results: - NaN (not a number) - negative Infinity, positive Infinity 1.0e+308*10==Infinity 0.0/0.0 = NaN Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Konversi String ke bilangan int x = Integer.parseInt(“2”); long l = Long.parseLong(“2L”); double d = Double.parseDouble(“2.0”); float f = Float.parseFloat(“2.0f”); 48 String String String String ival lval dval fval = = = = Integer.toString (2); Long.toString(2L); Double.toString(2.0); Float.toString(2.0f); Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Data type ¬ ¬ 49 char: ‘a’, ‘b’, ‘A’, ‘B’, dst. special char: - ‘\b’ backspace - ‘\t’ tab - ‘\n’ linefeed - ‘\f’ formfeed - ‘\r’ carriage return - ‘\”’ double quote, " - ‘\’’ single quote, ' - ‘\\’ backslash, \ - \uxxxx Unicode character (xxxx: bilangan hexadesimal) Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 String 50 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 operator ? : operator <expression>?<expr1>:<expr2> mengembalikan nilai expr1 jika expression true dan expr2 jika false. ¬ contoh: max = (a>b)?a:b ¬ 51 sama dengan: if(a>b) max = a; else max = b; Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 break & continue ¬ ¬ break: keluar dari current block continue: lompat ke awal current block (dalam loop) 52 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Array ¬ array: kumpulan variabel dengan tipe sejenis ¬ contoh: int[] x; int x[]; int[] x[]; 53 ¬ inisialisasi x = new int[5]; int[] x = { 1, 2, 3 }; int[][] x = { {1, 2}, {2, 3}, {3, 4}}; ¬ copy data array System.arraycopy(Object src_arr, int src_pos, Object dst_arr, int dst_pos, int len) Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Java & Object Oriented Programming 54 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Object Programming pada Java ¬ ¬ ¬ ¬ ¬ ¬ Object Kelas Exception Interface Inheritance Package 55 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh Kasus ¬ Program pengolahan data akademik - menyimpan data mahasiswa, dosen, karyawan, nilai, matakuliah dsb. - perlu struktur data/tipe data untuk representasi mahasiswa, dosen, karyawan, jurusan, dsb. ¬ contoh: tipe mahasiswa class Mahasiswa { String nama; String alamat; String nim; String jurusan; } 56 class: definisi tipe baru ¬ variabel (instans) untuk tipe ini disebut object ¬ Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh kasus ¬ mendefinisikan object: Mahasiswa mhs1; mhs1 = new Mahasiswa(); ¬ Deklarasi 57 object (variabel) tipe reference tidak membuat object. Object dibuat dengan perintah new ClassName() ¬ contoh: public class MahasiswaTest { public static void main(String args[]) { Mahasiswa mhs = new Mahasiswa(); mhs.nama = “Amir”; mhs.alamat = “Dago”; mhs.jurusan = “Informatika”; System.out.println(“nama: ”+mhs.nama); System.out.println(“alamat: ”+mhs.alamat); Achmad Imam Kistijantoro- Diktat Java Programming } Teknik - Informatika ITB, Juli - Agustus 2000 } Class method ¬ class method: operasi yang disediakan oleh suatu class ¬ contoh: 58 class Mahasiswa { String nama; String alamat; String nim; String jurusan; String getNama() { return nama; } void setNama(String nm) { nama = nm; } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Class method public class MahasiswaTest { public static void main(String args[]) { Mahasiswa mhs = new Mahasiswa(); mhs.setNama(“Amir”); System.out.println(“nama: ”+mhs.getNama()); } } ¬ Dibandingkan cara sebelumnya, manakah yg lebih baik ? 59 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Method parameter deskripsi suatu method dengan parameter dan return value disebut sebagai method signature ¬ sintaks: ¬ [modifier] result-type method-name ( parameterList ) [throws-decl] method-body ¬ modifier: - public, protected, private - abstract, static, final, synchronized, native 60 ¬ Result type - void: no result - typename (primitive or class name) ¬ Parameter list: - typename param1-name, typename param2-name ... Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Method parameter class Mahasiswa { String nama; String alamat; String nim; String jurusan; public String getNama() { return nama; } 61 public void setNama(String nm) { nama = nm; } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 OO Programming ¬ ¬ ¬ Objek: satuan unit, memiliki state & behavior Kelas: definisi statik dari objek, menyatakan type objek Objek adalah instance dari suatu Kelas Class C Variable (state) 62 deklarasi variabel Method (behaviour) instansiasi kelas C instansiasi kelas C instansiasi kelas C deklarasi method definisi method objek oC objek oB objek oA Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Kelas (class) ¬ ¬ ¬ 63 definisi internal data, internal method, atribut & behaviour dari object Enkapsulasi: membungkus data internal dengan menyediakan interface untuk akses data internal sintaks pendefinisian kelas: public class myClass { public myClass() { // konstruktor } // definisi method & atribut private int myVariable; public void methodA() { } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Konstruktor ¬ method khusus yg digunakan untuk membuat object ¬ memiliki nama sama dengan nama class ¬ contoh: 64 class Mahasiswa { String nama; String alamat; String nim; String jurusan; public Mahasiswa() { } public Mahasiswa(String nm) { nama = nm; } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Konstruktor public class MahasiswaTest { public static void main(String args[]) { Mahasiswa mhs = new Mahasiswa(“Amir”); System.out.println(“nama: ”+mhs.getNama()); } } 65 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Mekanisme Enkapsulasi ¬ Java menyediakan mekanisme pendefinisian scope member variable/method dari sebuah class dengan mekanisme: - private - protected - public 66 ¬ private: - variable/method hanya dapat diakses oleh kelas itu sendiri ¬ protected: - variable/method dapat diakses oleh semua kelas turunan - variabel tidak dapat diakses dalam pola use, bukan sebagai inheritance (lihat contoh Point pada bagian package (slide no. 23) ¬ public: - variable/method dapat diakses oleh semua kelas Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 method & attribute access modifier ¬ 67 access modifier: menentukan apakah method/atribut tersebut dapat dipanggil oleh kelas lain - private: hanya dapat diakses dari object itu sendiri - protected: hanya dapat diakses object lain yang diturunkan dari - kelas object tersebut (akan diterangkan kemudian) public: dapat diakses oleh object lain default: hanya dapat diakses oleh object yang berada dalam satu kelas Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh public // contoh public variable // file name: Point.java class Point { public int x, y; } ---------------------------------------------//file name: Test.java 68 public class Test { public static void main(String[] args) { Point p = new Point(); System.out.println(p.x + " " + p.y); } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh private: // file name: Point.java public class Point { private int x, y; public int getX() { return x; } public int getY() { return y; } } ---------------------------------------------- 69 // file name: Test.java class Test { public static void main(String[] args) { Point p = new Point(); System.out.println(p.x + " " + p.y); // error !, karena protected System.out.println(p.getX()+ “ “+ p.getY() ); } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 reference this ¬ Pada Java, this adalah reference yg mengacu ke object itu sendiri. Contoh: // file name: Point.java public class Point { private int x, y; public int getX() { return this.x; } public int getY() { return this.y; } } 70 ¬ sama dengan: // file name: Point.java public class Point { private int x, y; public int getX() { return this.x; } public int getY() { return this.y; } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 static dan alokasi memori ¬ atribut dan method hanya dapat diakses jika object telah dibuat - contoh: Mahasiswa mhs; System.out.println(mhs.getNama()); // error mhs = new Mahasiswa(“Amir”); System.out.println(mhs.getNama()); 71 ¬ ¬ atribut & method static dapat diakses tanpa melalui object static: alokasi statis, hanya ada satu instans dalam seluruh program Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh: 72 class Mahasiswa { static int jumlah; String nama; String alamat; String nim; String jurusan; public Mahasiswa() { } public Mahasiswa(String nm) { nama = nm; jumlah = jumlah+1; } public static int getJumlah() { return jumlah; } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh static: public class StaticTest { public static void main(String args[]) { Mahasiswa mhs1 = new Mahasiswa(); System.out.println(“Jumlah:”+Mahasiswa.getJumlah()); Mahasiswa mhs2 = new Mahasiswa(); System.out.println(“Jumlah:”+Mahasiswa.getJumlah()); } } 73 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Interaksi antar object ¬ ¬ ¬ 74 ¬ ¬ Program pada OO: membuat object-object dan mengatur interaksi antar object Relasi antar object: - has-a - is-a - reference Has-a: suatu object dicakup oleh object lainnya Is-a: suatu object adalah instans dari kelas yg diturunkan dari kelas object lainnya Reference: 2 buah object atau lebih saling menyimpan reference lainnya Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Inheritance ¬ ¬ ¬ 75 Inheritance: menyatakan pewarisan dari satu kelas ke kelas lainnya. Inheritance dituliskan dengan menggunakan keyword extends Java hanya mendukung single inheritance Point ColoredPoint int x int y Color color Move() setColor() Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Inheritance public class Point { int x = 1, y = 1; void move(int dx, int dy) { x += dx; y += dy; } } 76 public class ColoredPoint extends Point { private int color; void setColor(int clr) { color = clr }; int getColor(); } ¬ Class Point disebut sebagai parent, superclass ¬ Class ColoredPoint disebut sebagai child, subclass Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Inheritance ¬ Contoh: - Buat buku alamat yang dapat menyimpan data alamat 77 mahasiswa, dosen dan lembaga. Untuk data mahasiswa, buku tersebut menyimpan informasi nama, nim, alamat, jurusan, angkatan, sedangkan untuk dosen buku tersebut menyimpan informasi nama, nip, alamat, jurusan, ruang Buat buku informasi kendaraan, yang menyimpan data motor dan mobil. Motor memiliki atribut: merek, model, tahun, cc, dan mobil memiliki atribut merek, model, tahun, cc, jumlah pintu dst. Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Inheritance - kelakuan konstruktor ¬ 78 Pada Java, konstruktor base class selalu dipanggil pada saat pemanggilan konstruktor anak. class Bapak { Bapak() { System.out.println("Konstruktor Bapak"); } } class Anak extends Bapak { Anak() { System.out.println("Konstruktor Anak"); } } public class TestKonstruktor extends Anak { TestKonstruktor() { System.out.println("Konstruktor TestKonstruktor"); } public static void main(String[] args) { TestKonstruktor x = new TestKonstruktor(); } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Inheritance - Kelakuan konstruktor ¬ 79 Konstruktor dengan parameter tidak otomatis memanggil konstruktor base class dengan parameter yang sama class Bapak { Bapak() { System.out.println("Konstruktor Bapak"); } Bapak(int x) { System.out.println(“Konstruktor Bapak dengan parameter”); } } class Anak extends Bapak { Anak() { System.out.println("Konstruktor Anak"); } Anak(int x) { System.out.println(“Konstruktor Anak dengan parameter”)}; } public static void main(String[] args) { Anak x = new Anak(5); } Achmad Imam Kistijantoro- Diktat Java Programming } Teknik - Informatika ITB, Juli - Agustus 2000 Inheritance - mekanisme protected ¬ ¬ 80 protected: modifier untuk mendefinisikan scope pada kelas dan turunannya atribut & method yang dinyatakan sebagai protected hanya dapat diakses oleh objek yang berasal dari satu kelas atau subclass dari kelas tersebut class Bapak { protected int a, b; } class Anak extends Bapak { void ubahProtected() { a = 15; // boleh, karena Anak diturunkan dari Bapak } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh protected public class Point { protected int x, y; } 81 public class Point3D { protected int z; public void move(int dx, int dy, int dz) { x = x+dx; y = y+dy; z = z+dz; // ok, karena diakses oleh kelas turunan } } class Test { public static void main(String[] args) { Point3D p = new Point3D(); p.x = 4; p.y = 3; p.z = 2; // error !, karena protected p.move(1,2,3); } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Exception ¬ Penanganan kesalahan pada java menggunakan mekanisme exception 82 try { statement } catch (tipe exception name){ statement } catch (tipeexception name) { statement } . . } finally { statement } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh: 83 public class ExceptionTest { public static void main(String args[]) { ExceptionTest test = new ExceptionTest(); try { test.getError(); System.out.println(“Tidak ada error”); } catch (Exception e) { System.out.println( e ); } } public void getError() throws Exception { throw new Exception(“Error!”); } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Inheritance - final class ¬ class dapat memiliki modifier final, yang berarti class tersebut tidak dapat diturunkan lagi menjadi class baru 84 final class finalClass { finalClass() { } void methodA() { } } class classBaru extends finalClass { // error } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Inheritance - final method ¬ final pada sebuah method: menyatakan method tersebut tidak dapat di redefine pada class anak 85 class Bapak { Bapak() { } final void finalMethod() { } } class classBaru extends Bapak { void finalMethod() { // error } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Package ¬ ¬ package adalah mekanisme untuk pengelompokan kelaskelas ke dalam sebuah modul pada Java package didefinisikan dengan menambahkan baris: - package <nama package> ¬ 86 pada awal file Kelas yang berasal dari suatu package diakses dengan menggunakan nama package dan nama kelas. - contoh: points.Point (kelas Point yang terdapat pada package points) ¬ Kelas yang berasal dari suatu package dapat diakses langsung dengan menggunakan nama kelas dengan cara menggunakan import. Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Package - contoh 87 // file Point.java package points; public class Point { protected int x, y; } --------------------------------------// file: Test.java class Test { public static void main(String[] args) { points.Point p = new points.Point(); p.x = 4; p.y = 3; p.z = 2; p.move(1,2,3); } } -------------------------------------// file: Test2.java import points; class Test2 { public static void main(String[] args) { Point p = new Point(); p.x = 4; p.y = 3; p.z = 2; Achmad Imam Kistijantoro- Diktat Java Programming p.move(1,2,3); Teknik - Informatika ITB, Juli - Agustus 2000 } Package & enkapsulasi ¬ Package juga merupakan mekanisme untuk membatasi scope sebuah variabel/method/class - variabel/method/class yang tidak memiliki access modifier - 88 (public/private/protected) memiliki scope package, yaitu hanya dapat diakses oleh class lain yang berada dalam satu package variabel/method dengan access modifier protected dapat diakses oleh class lain yang berada dalam satu package Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh package access modifier // file Point.java package points; public class Point { public int x, y; void move(int dx, int dy) { x += dx; y += dy; } public void moveAlso(int dx, int dy) { move(dx, dy); } } 89 //file PlusPoint.java package morepoints; public class PlusPoint extends points.Point { public void move(int dx, int dy) { super.move(dx, dy); // compile-time error, karena tidak 1 package moveAlso(dx, dy); } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh protected dalam package 90 // file Point.java package points; public class Point { protected int x, y; void warp(threePoint.Point3d a) { if (a.z > 0) // compile-time error: cannot access a.z // karena bukan satu package a.delta(this); } } // file Point3d.java package threePoint; import points.Point; public class Point3d extends Point { protected int z; public void delta(Point p) { p.x += this.x; // compile-time error: cannot access p.x & p.y p.y += this.y; // karena bukan satu package. this.x dapat diakses // karena Point3d dari Diktat Point Achmad turunan Imam KistijantoroJava Programming } Teknik - Informatika ITB, Juli - Agustus 2000 } Interface ¬ ¬ ¬ 91 Definisi method yang harus diimplementasikan dan konstanta (final member variabel) Mendefinisikan type Interface tidak dapat diinstansiasi public interface interfaceA { int integerConst = 5; public void method1(/* parameter */); public void method2( /* parameter */); } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Implementasi Interface ¬ ¬ Interface dapat diimplementasikan oleh sebuah kelas Kelas yang mengimplementasi sebuah interface harus menyediakan semua method yang disebutkan dalam interface tersebut class MyClass implements interfaceA { public void methodA() { } public void methodB() { 92 } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Interface & Abstract class ¬ ¬ ¬ interface & abstract classes: serupa tapi tak sama interface sama sekali tidak mengandung implementasi interface tidak memiliki state (member variable selain constant 93 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Interface & Inheritance ¬ ¬ ¬ Interface dapat diturunkan dari interface lainnya Kelas implementasi harus mendefinisikan seluruh method yang didefinisikan oleh interface beserta parentnya. Interface dapat diturunkan secara multiple inheritance 94 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Interface & Inheritance SecondClass bertype: FirstInterface, SecondInterface, FirstClass & SecondClass interface FirstInterface { Object method1(); } 95 interface SecondInterface extends FirstInterface { int method2(); } public class FirstClass implements FirstInterface { public FirstClass(){ } ... } public class SecondClass extends FirstClass implements SecondInterface { ... } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Interface & Inheritance ¬ ¬ 96 Inheritance pada interface hanya menurunkan sintaks methodmethod yang didefinisikan pada bapak Multiple interface inheritance dengan nama method yang sama tidak mengakibatkan konflik. public interface A { methodA(); } public interface B { methodA(); } public interface AB extends A, B { } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Interface & Inheritance 97 // file BaseColors.java interface BaseColors { int RED = 1, GREEN = 2, BLUE = 4; } interface RainbowColors extends BaseColors { int YELLOW = 3, ORANGE = 5, INDIGO = 6, VIOLET = 7; } interface PrintColors extends BaseColors { int YELLOW = 8, CYAN = 16, MAGENTA = 32; } interface LotsOfColors extends RainbowColors, PrintColors { int FUCHSIA = 17, VERMILION = 43, CHARTREUSE = RED+90; } // file: Main.java public class Main { public static void main(String args[]) { System.out.println(LotsOfColors.YELLOW); // error } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Interface & Multiple Inheritance ¬ Interface dapat digunakan untuk menggantikan kapabilitas yang disediakan melalui multiple inheritance 98 interface CanFight { void fight(); } interface CanSwim { void swim(); } interface CanFly { void fly(); } class ActionCharacter { public void fight() {} } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Interface & Multiple Inheritance class Hero extends ActionCharacter implements CanFight, CanSwim, CanFly { public void swim() {} public void fly() {} } public class Adventure { static void t(CanFight x) { x.fight(); } static void u(CanSwim x) { x.swim(); } static void v(CanFly x) { x.fly(); } 99 public static void main(String[] args) { Hero i = new Hero(); t(i); // Treat it as a CanFight u(i); // Treat it as a CanSwim v(i); // Treat it as a CanFly } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Interface & Multiple Inheritance ¬ ¬ ¬ Class hanya mewarisi konstanta dari interface Class tidak mewarisi implementasi dari interface hierarki interface independen terhadap hierarki class, beberapa class yang mengimplementasi interface yang sama bisa jadi sama sekali tidak berkaitan 100 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Java API 101 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Java API ¬ ¬ ¬ ¬ ¬ ¬ 102 ¬ java.applet java.io java.util java.awt javax.swing java.lang java.math ¬ ¬ ¬ ¬ ¬ java.sql java.text java.net java.rmi java.security Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Applet ¬ ¬ ¬ program kecil yang dijalankan dari sebuah browser kode program (.class file) dapat didownload dari server subclass dari java.applet.Applet 103 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Applet ¬ HTML: - template - link - <applet> tag <HTML> <HEAD> <TITLE> Hello World </TITLE> </HEAD> 104 <BODY> Applet Hello World: <P> <applet code="HelloWorldApplet.class" CODEBASE=“classes” width="150" height="50"> </applet> </BODY> </HTML> Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Applet import java.applet.Applet; import java.awt.Graphics; public class HelloWorldApplet extends Applet { public void paint(Graphics g) { g.drawString("Hello world!", 50, 25); } 105 } ¬ Tidak ada main(String args[]) ! Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Applet & Event driven program ¬ ¬ Event driven: program merespon event yang dikirimkan kepadanya contoh event: keyboard event, mouse event, focus event, action event 106 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Applet ¬ 107 Method yang disediakan java.applet.Applet - init() - start() - paint() - destroy() - processMouseEvent(MouseEvent ev) - processKeyEvent(KeyEvent ev) - processFocusEvent(FocusEvent ev) Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Applet: contoh ¬ Applet yang menggambar garis di antara 2 titik 108 import java.applet.*; import java.awt.* ; public class Garis extends Applet { int a; int b; int c; int d; int e; public void init(){ resize(300, 500); } public void paint(Graphics g){ g.drawLine(a, b, d, e); } public void processMouseEvent(Event evt, int x, int y) { if (c==0) { a=x; b=y; c=1; } else { d=x; e=y; c=0; repaint(); } return true; Achmad Imam Kistijantoro- Diktat Java Programming } Teknik - Informatika ITB, Juli - Agustus 2000 } Java IO ¬ ¬ ¬ ¬ ¬ ¬ 109 ¬ disediakan pada package java.io.*; stream: aliran data semua fasilitas IO direpresentasikan sebagai stream InputStream: kelas general untuk menangani aliran input OutputStream: kelas general untuk menangani output Contoh IO Stream: file, network, pipe, string. note: string dapat dibuat sebagai stream, yaitu dengan cara membaca dan menulis secara sekuensial Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Jenis-jenis Stream ¬ ¬ ¬ 110 Stream yang menerima masukan disebut sebagai input stream - contoh: FileInputStream: untuk membaca file Stream mengeluarkan data disebut sebagai outputstream - contoh: FileOutputStream Masukan untuk suatu stream dapat berasal dari stream lainnya. Stream jenis ini disebut sebagai processing stream - contoh: BufferedOutputStream: digunakan untuk menampung stream dalam buffer, sebelum digunakan Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Bytes stream & Character stream ¬ ¬ Pada java tersedia 2 jenis stream berdasarkan elemennya byte stream: satuan data yang membentuk stream adalah byte (8 bit), umumnya stream jenis ini memiliki nama dengan menggunakan akhiran Stream - contoh: InputStream, OutputStream ¬ 111 characters stream: satuan data yang membentuk stream adalah character (16 bit), umumnya stream jenis ini memiliki nama dengan menggunakan akhiran Writer atau Reader - contoh: InputStreamReader, InputStreamWriter Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 InputStream ¬ 112 Semua byte oriented input stream diturunkan dari kelas ini. abstract class InputStream { int available(); void close(); int mark( int n ); int reset(); int read(); int read( byte[] b ); int read( byte[] b, int off, int len ); long skip( long n ); } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Java IO BufferedReader LineNumberReader CharArrayReader InputStreamReader FileReader FilterReader PushbackReader Reader PipedReader StringReader BufferedWriter 113 CharArrayWriter OutputStreamWriter FileWriter Writer FilterWriter PipedWriter StringWriter PrintWriter Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Java IO FileInputStream LineNumberInputSream PipedInputStream DataInputStream FilterInputStream BufferedInputSream InputStream ByteArrayInputStream PushbackInputStream SequenceInputStream StringBufferInputStream ObjectInputStream 114 FileOutputStream PipedOutputStream DataOutputStream FilterOutputStream BufferedOutputStream ByteArrayOutputStream PrintStream OutputStream ObjectOutputStream Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Membaca file 115 import java.io.*; public class BacaFile { public static void main(String[] args) throws IOException { FileInputStream in; int c; in = new FileInputStream( args[0] ); while ((c = in.read()) != -1) System.out.write(c); in.close(); } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Menulis file 116 import java.io.*; public class TulisFile { public static void main(String[] args) throws IOException { FileInputStream in; FileOutputStream out; int c; in = new FileInputStream( args[0] ); out = new FileOutputStream( args[1] ); while ((c = in.read()) != -1) out.write(c); in.close(); out.close(); } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Input Dialog import javax.swing.*; public class InputDialog { public static void main(String args[]) { String inputValue = JOptionPane.showInputDialog("Please input a value"); System.out.println(inputValue); inputValue = JOptionPane.showInputDialog("Please input a value 2"); System.out.println(inputValue); System.exit(0); } 117 } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Input (Text mode) import java.io.*; 118 public class InputString { public static void main(String args[]) { try { BufferedReader in = new BufferedReader( new InputStreamReader(System.in)); String s = in.readLine(); System.out.println( s ); } catch(Exception e) { e.printStackTrace(); } } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Input File 119 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Output File 120 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Java util ¬ Java Collection Framework - kumpulan kelas untuk menangani koleksi objek (struktur data seperti array, list, set etc.) ¬ ¬ ¬ 121 ¬ Date, Calendar, TimeZone, Locale Properties: file konfigurasi untuk aplikasi java Random StringTokenizer: parser untuk string Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Hashtable ¬ 122 koleksi objek dengan key unik. Objek dapat diletakkan ke dalam hashtable dengan identifikasi key unik tertentu. public class Hashtable extends Dictionary implements Map, Cloneable, Serializable { // ... public Object put( Object key, Object val ); public Object get( Object key ); public Object remove( Object key ); public void clear(); public int size(); // ... method lainnya } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Hashtable ¬ Contoh penggunaan: Hashtable table = new Hashtable(); table.put(“key1”, new Integer(1) ); table.put(“key2”, new Integer(2) ); Integer intval = (Integer) table.get(“key1”); if( intval != null ) { System.out.println(“key: key1, value: “+intval); } 123 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Vector ¬ 124 Koleksi objek dengan urutan tertentu (serupa array) public class Vector extends AbstractList implements List, Cloneable, Serializable { // ... public boolean add( Object val ); public boolean add( int index, Object val ); public Object get( int index ); public Object remove( Object val ); public void clear(); public int size(); // ... method lainnya } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Vector ¬ contoh: Vector v = new Vector(); v.add( new Integer(1) ); v.add( new Integer(2) ); Integer intval = (Integer) v.get(0); if( intval != null ) { System.out.println(“index 0, value: “+intval); } 125 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Java Swing 126 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Swing ¬ ¬ ¬ Koleksi kelas untuk tampilan (GUI) pada Java AWT: Abstract Window Toolkit, koleksi kelas untuk tampilan pada Java versi JDK 1.1 dan versi sebelumnya AWT mengandung native code, sehingga terdapat perbedaan antara platform satu dengan lainnya 127 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh aplikasi dengan Swing 128 import javax.swing.*; // baris ini diperlukan karena // swing berasal dari package javax.swing public class Aplikasi extends JFrame { public Aplikasi(String title) { super(title); } public static void main(String s[]) { Aplikasi frame = new Aplikasi(”Aplikasi Swing"); frame.setSize(50,100); frame.show(); } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh aplikasi swing 129 import javax.swing.*; // baris ini diperlukan karena // swing berasal dari package javax.swing public class Aplikasi { JFrame frame; public Aplikasi(String title) { frame = new JFrame(title); } public void run() { frame.setSize(50, 100); frame.show(); } public static void main(String s[]) { Aplikasi app = new Aplikasi(”Aplikasi Swing"); app.run(); } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 JComponent ¬ ¬ 130 Widget: elemen sebuah graphical user interface untuk melakukan fungsi tertentu Atomic component - Button: JButton, JCheckBox, JRadioButton, JMenuItem, - JCheckBoxMenuItem, JRadioButtonMenuItem, JToggleButton JComboBox JList Menu: JMenu, JMenuItem JLabel JTextField JTable Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Java GUI Frame Button Label Panel 131 ¬ ¬ ¬ Panel (JPanel): Container untuk meletakkan komponen GUI Panel memiliki LayoutManager yang berfungsi mengatur tata letak komponen yang dimilikinya Komponen diletakkan ke dalam panel dengan memanggil method add dari panel Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh Panel JPanel panel = new JPanel(); JButton b1 = new JButton(“Button 1”); JButton b2 = new JButton(“Button 2”); JLabel label1 = new JLabel(“Label 1”); JLabel label2 = new JLabel(“Label 2”); JLabel label3 = new JLabel(“Label 3”); panel.add(b1); panel.add(b2); panel.add(label1); panel.add(label2); panel.add(label3); 132 ¬ Kode di atas membuat sebuah panel, 2 buah button dan 3 buah label, kemudian menambahkan button dan label ke dalam panel tersebut. Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 JFrame ¬ ¬ Frame: Top level container (Window utama) dari suatu aplikasi Java Sebuah frame memiliki: - Title, pada bagian atas frame - MenuBar, tempat untuk meletakkan menu - standard panel yang disebut sebagai ContentPane 133 gambar diambil dari Java Tutorial, Sun Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Menambahkan Button ke Frame 134 import javax.swing.*; public class CobaButton { JFrame frame; JButton button; public CobaButton(String title) { frame = new JFrame(title); } public void run() { button = new JButton(); frame.getContentPane().add(button); frame.pack(); frame.show(); } public static void main(String s[]) { CobaButton app = new CobaButton(”Aplikasi Swing"); app.run(); } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Mengganti ContentPanel dari sebuah Frame ¬ ¬ Standar content panel dari sebuah frame dapat diganti dengan perintah setContentPane. contoh: JFrame frame = new JFrame(); JPanel panel = new JPanel(); frame.setContentPane(frame); 135 ¬ Tugas: Gabungkanlah kode pada contoh panel dengan program contoh Aplikasi Swing sehingga program anda dapat menampilkan window berisi 2 button dan 3 label Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh import javax.swing.*; public static void main(String s[]) public class CobaPanel { { JFrame frame; CobaPanel app = new public CobaPanel(String title) { CobaPanel(”Aplikasi Swing"); frame = new JFrame(title); app.run(); } } public void run() { } JPanel panel = new JPanel(); JButton b1 = new JButton(“B1”); JButton b2 = new JButton(“B2”); JLabel label1 = new JLabel(“L1”); 136 JLabel label2 = new JLabel(“L2”); JLabel label3 = new JLabel(“L3”); panel.add(b1); panel.add(b2); panel.add(label1); panel.add(label2); panel.add(label3); // tambahkan kode di sini untuk mengganti content panel dari frame } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Mengganti LayoutManager dari sebuah Panel ¬ ¬ ¬ 137 ¬ Sebuah panel dapat memiliki layout manager untuk mengatur tata letak komponen Standar layout manager untuk JPanel adalah FlowLayout Standar layout manager untuk Content pane dari Jframe adalah BorderLayout Jenis-jenis layout manager sederhana pada JDK 1.2/1.3 - FlowLayout - BorderLayout - BoxLayout - GridLayout Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 FlowLayout ¬ Mengatur posisi komponen-komponen dari kiri ke kanan dan meletakkan komponen selanjutnya pada baris baru jika ukuran lebar panel tidak mencukupi 138 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 BorderLayout ¬ 139 BorderLayout mengatur komponen dalam posisi tertentu, sesuai arah mata angin: NORTH, EAST, SOUTH, WEST dan CENTER. Penambahan komponen dengan BorderLayout memiliki parameter posisi. Contoh: JPanel panel = panel.add( new panel.add( new panel.add( new panel.add( new panel.add( new new JPanel(); JButton(“South”), BorderLayout.SOUTH ); JButton(“East”), BorderLayout.EAST ); JButton(“West”), BorderLayout.WEST ); JButton(“North”), BorderLayout.NORTH ); JButton(“Center”), BorderLayout.CENTER ); Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 BoxLayout ¬ BoxLayout mengatur komponen secara horizontal atau vertikal. Contoh: JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel,BoxLayout.X_AXIS)); panel.add( new JButton(“b1”) ); panel.add( new JButton(“b2”) ); panel.add( new JButton(“b3”) ); 140 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 GridLayout ¬ 141 GridLayout mengatur komponen dalam posisi grid, yaitu serupa matriks. Contoh: JPanel panel = new JPanel(); panel.setLayout( new GridLayout( 2, 3 ) ); panel.add( new JButton(“b11”)); panel.add( new JButton(“b12”)); panel.add( new JButton(“b13”)); panel.add( new JButton(“b21”)); panel.add( new JButton(“b22”)); panel.add( new JButton(“b23”)); Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 GridBagLayout GridBag mengatur komponen serupa dengan grid, namun untuk setiap komponen dapat ditentukan konstrain tertentu, sehingga GridBag akan mengatur tata letak berdasarkan konstrain untuk setiap komponen ¬ Konstrain yg dapat diatur: ¬ 142 - gridx, gridy: koordinat komponen dalam grid layout - gridwidth, gridheight: jumlah sel yg digunakan sebuah komponen. Komponen dapat menduduki lebih dari 1 sel horisontal dan vertikal - fill: kelakukan komponen jika ukuran sel lebih besar dari komponen. Komponen dapat membesar horizontal/vertikal sesuai ukuran sel, berdasarkan parameter konstrain fill. - weightx, weighty: bobot ukuran sel dibandingkan sel lainnya - insets: jarak antara komponen dengan sel - anchor: posisi komponen di dalam sel Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 GridBagLayout ¬ fill: - GridBagConstraint.NONE: komponen tidak membesar - GridBagConstraint.HORIZONTAL: komponen membesar secara horizontal - GridBagConstraint.VERTICAL: komponen membesar vertikal - GridBagConstraint.BOTH: komponen membesar ke kedua arah ¬ 143 anchor: - GridBagConstraint.SOUTH: komponen diletakkan di bagian bawah GridBagConstraint.NORTH: komponen diletakkan di bagian atas GridBagConstraint.CENTER: komponen diletakkan di bagian tengah GridBagConstraint.WEST: komponen diletakkan di bagian kiri GridBagConstraint.EAST: komponen diletakkan di bagian kanan Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Mengatur letak komponen dengan panel ¬ Sebuah panel dapat ditambahkan ke panel lainnya. Hal ini digunakan untuk membantu mengatur tata letak komponen. Contoh: 144 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Menangani event pada Swing ¬ 145 Jenis event: - mouse event - focus event - keyboard event - component event - container event - window event - action event - adjustment event - item event - text event Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 event listener ¬ ¬ 146 objek yang bertugas untuk mendengarkan event dan memberikan respon terhadap event tertentu. mengimplementasikan salah satu dari listener interface: - ComponentListener ContainerListener FocusListener KeyListener MouseListener MouseMotionListener WindowListener ActionListener AdjustmentListener ItemListener TextListener Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 interface deskripsi method-method yang harus disediakan oleh suatu kelas ¬ kelas yang mengimplementasikan sebuah interface harus mendefinisikan semua method pada interface tersebut ¬ contoh: ¬ 147 interface ActionListener { void actionPerformed( ActionEvent ev); } class MyActionHandler implements ActionListener { void actionPerformed( ActionEvent ev ) { System.out.println(“menerima event”); } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Mendefinisikan handler untuk event tertentu ¬ contoh: MyActionHandler hd = new MyActionHandler(); JButton b1 = new JButton(); b1.addActionListener( hd ); ¬ 148 baris di atas menyatakan bahwa objek hd adalah handler untuk event jenis action (button clicked) untuk objek b1. Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Mouse Event ¬ 149 java.awt.event.MouseEvent - MouseEvent.MOUSE_CLICKED - MouseEvent.MOUSE_DRAGGED - MouseEvent.MOUSE_ENTERER - MouseEvent.MOUSE_EXITED - MouseEvent.MOUSE_MOVED - MouseEvent.MOUSE_PRESSED - MouseEvent.MOUSE_RELEASED - int getID(); • mengambil ID event, seperti MOUSE_CLICKED, MOUSE_MOVED - String paramString(); // memberikan deskripsi event - int MouseEvent.getX(); - int MouseEvent.getY(); • getX() & getY() mengambil koordinat mouse pada saat terjadi event - Point MouseEvent.getPoint(); • getPoint() mengambil koordinat mouse dalam bentuk Point. Point memiliki atribut x & y - int getClickCount(); • mengembalikan jumlah click yangImam dilakukan padaDiktat saat Java terjadi event Achmad KistijantoroProgramming Teknik - Informatika ITB, Juli - Agustus 2000 MouseListener interface ¬ 150 Interface ini diimplementasikan oleh kelas yang menjadi listener event mouse public void void void void void } interface MouseListener { mouseClicked(MouseEvent ev); mousePressed(MouseEvent ev); mouseReleased(MouseEvent ev); mouseEntered(MouseEvent ev); mouseExited(MouseEvent ev); Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Mouse Motion Listener ¬ Interface untuk menangani event gerakan mouse public interface MouseMotionListener { void mouseDragged( MouseEvent ev ); void mouseMoved( MouseEvent ev ); } 151 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Component event Event yg berkaitan dengan perubahan pada komponen, seperti komponen moved, resized, hidden & shown ¬ java.awt.event.ComponentEvent ¬ 152 - ComponentEvent.COMPONENT_MOVED - ComponentEvent.COMPONENT_RESIZED - ComponentEvent.COMPONENT_HIDDEN - ComponentEvent.COMPONENT_SHOWN - int getID(); - Component getComponent(); • memberikan komponen yang menghasilkan event - String paramString(); Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Component listener ¬ interface untuk menangani event component public interface ComponentListener { public void componentHidden(ComponentEvent ev); public void componentShown(ComponentEvent ev); public void componentResized(ComponentEvent ev); public void componentMoved(ComponentEvent ev); } 153 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Action Event ¬ java.awt.event.ActionEvent - int getID(); - Object getSource(); - String getActionCommand(); ¬ ActionListener public interface ActionListener { void actionPerformed( ActionEvent ev ); } 154 ¬ Pada component asal, action command di set dengan perintah: setActionCommand() JButton b = new JButton(“button”); b.setActionCommand(“b”); Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Key Event ¬ event yang berkaitan dengan aktivitas keyboard ¬ java.awt.event.KeyEvent - KeyEvent.VK_A, KeyEvent.VK_B, KeyEvent.VK_F1, KeyEvent.VK_PAGE_UP, etc. - char getKeyChar(); • mengembalikan representasi char yang ditekan pada keyboard 155 - int getKeyCode(); • mengembalikan kode key yang ditekan pada keyboard Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Key Listener 156 public interface KeyListener { void keyTyped( KeyEvent ev ); // high level event, dibangkitkan ketika sebuah // karakter dihasilkan keyboard void keyPressed( keyEvent ev ); // low level, dibangkitkan setiap sebuah tombol pada // keyboard ditekan void keyReleased( keyEvent ev ); } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Window Event ¬ java.awt.event.WindowEvent - Window getWindow(); - String paramString(); 157 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 WindowListener 158 public void void void void void void void } interface WindowListener { windowActivated( WindowEvent ev ); windowClosed( WindowEvent ev ); windowClosing( WindowEvent ev ); windowDeactivated( WindowEvent ev ); windowDeiconified( WindowEvent ev ); windowIconified( WindowEvent ev ); windowOpened( WindowEvent ev ); Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Focus Event 159 ¬ java.awt.event.FocusEvent - Component getComponent(); ¬ FocusListener public interface FocusListener { void focusGained( FocusEvent ev ); void focusLost( FocusEvent ev ); } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Menggunakan adapter untuk event listener interface: semua method harus didefinisikan ulang pada kelas yang mengimplementasikannya ¬ sebuah event listener dapat diturunkan dari kelas Adapter, dan mendefinisikan ulang method yang diperlukan saja. ¬ 160 class MyAdapter extends MouseAdapter { public void mouseClicked( MouseEvent ev ) { System.out.println("mouse clicked"); } } public void init() { JButton b = new JButton(); MyAdapter evHandler = new MyAdapter(); b.addMouseListener( evHandler ); } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 JDBC 161 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 JDBC ¬ ¬ ¬ ¬ API yang menyediakan interface universal ke basis data package java.sql SQL: Standard Query Language JDBC menyediakan kelas-kelas: - DriverManager: kelas ini digunakan untuk membuat koneksi (instance dari 162 kelas Connection) ke database - Connection: instance dari kelas ini merepresentasikan koneksi ke database tertentu - Statement: instance dari kelas ini merepresentasikan sebuah query yang akan dieksekusi ke database • PreparedStatement • CallableStatement - ResultSet: instance dari kelas ini merepresentasikan hasil eksekusi query Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Struktur JDBC 163 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 JDBC Driver ¬ ¬ JDBC menggunakan driver yang spesifik untuk masingmasing jenis database. Pendefinisian driver yg digunakan dilakukan dengan cara me-load class driver yg diinginkan Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Class.forName(“org.gjt.mm.mysql.Driver”); 164 ¬ ¬ Driver untuk ODBC: sun.jdbc.odbc.JdbcOdbcDriver, sudah disediakan oleh Sun Driver untuk mySQL (org.gjt.mm.mysql.Driver) tersedia secara freeware Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Menggunakan ODBC Driver ¬ ¬ Buatlah definisi Datasource yang akan digunakan pada ODBC melalui setting ODBC datasource dari control panel (misalkan dibuat datasource bernama mahasiswa) pada program java, load kelas Driver untuk Odbc, Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); ¬ 165 ¬ Buka koneksi ke ODBC dengan mendefinisikan URL untuk datasource tersebut, dengan format: - jdbc:odbc:mahasiswa dimana odbc adalah nama driver yang digunakan, dan mahasiswa adalah nama data source dari ODBC Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Connection ¬ ¬ Connection adalah representasi hubungan ke database Connection dibuat dengan mendefinisikan url string yang sesuai - Connection con = DriverManager.getConnection(“jdbc.odbc.mahasiswa”); ¬ 166 Connection digunakan untuk membuat statement (query yang akan dikirimkan ke database) dan mendapatkan informasi tentang database Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Query SQL ¬ 167 query dikirimkan ke database dalam bentuk SQL Query. Beberapa perintah yang umum digunakan adalah sebagai berikut: - CREATE: untuk membuat table baru - SELECT: untuk mengambil record dari database yang memenuhi - kriteria tertentu INSERT: untuk menambah record ke dalam suatu table UPDATE: untuk merubah isi record tertentu pada suatu table DELETE: untuk menghapus record pada suatu table DROP: untuk menghapus sebuah table Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 CREATE TABLE 168 CREATE TABLE <NAMA TABLE> (<NAMA KOLOM> <TIPE>, <NAMA KOLOM> <TIPE>, ... PRIMARY KEY (<NAMA KOLOM>), FOREIGN KEY (<NAMA KOLOM>) REFERENCES <NAMA_TABEL> (<NAMA KOLOM>) ) ¬ Tipe dari sebuah kolom dapat berupa: - char(x), dimana x adalah ukuran/jumlah character, - varchar(x), serupa dengan char, namun alokasinya dilakukan - secara variabel int(x), x adalah jumlah digit yang disediakan date, untuk tipe tanggal jenis tipe lain yang spesifik untuk setiap database Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 SELECT SELECT <NAMA KOLOM>, <NAMA KOLOM>, ... FROM <NAMA TABEL> WHERE <KONDISI> 169 ¬ Select digunakan untuk mengambil record yang memenuhi kriteria tertentu, yang diletakkan pada where. Contoh: - Select NAMA, ALAMAT from MAHASISWA where NIM=“13592033” Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 INSERT 170 INSERT INTO <NAMA TABEL> (<NAMA KOLOM>, <NAMA KOLOM>, ... ) VALUES (<NILAI KOLOM>, <NILAI KOLOM>, ...) Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 UPDATE 171 UPDATE <NAMA TABEL> SET (<NAMA KOLOM>=<NILAI KOLOM>, <NAMA KOLOM>=<NILAI KOLOM>, ... ) WHERE <KONDISI> Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 DELETE DELETE FROM <NAMA TABEL> WHERE <KONDISI> ¬ DROP DROP <NAMA TABLE> 172 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Statement ¬ ¬ Query yang akan dieksekusi oleh database Contoh query: - CREATE TABLE MAHASISWA (NAMA VARCHAR(20), ALAMAT VARCHAR(60), JURUSAN VARCHAR(20)) - SELECT NAMA FROM MAHASISWA WHERE JURUSAN=“INFORMATIKA” ¬ Statement dibuat dengan memanggil createStatement dari object Connection 173 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Statement ¬ ¬ 174 Statement yang tidak menghasilkan data dieksekusi dengan memanggil method executeUpdate(), sedangkan statement yang menghasilkan data dieksekusi dengan memanggil method executeQuery(), yang akan menghasilkan object bertipe ResultSet Contoh: stmt = con.createStatement(); stmt.executeUpdate(“CREATE TABLE MAHASISWA ”+ “(NAMA VARCHAR(30), ALAMAT VARCHAR(30))”); Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 PreparedStatement ¬ PreparedStatement: query yang memiliki parameter yang dapat di set. Contoh: - SELECT NAMA FROM MAHASISWA WHERE JURUSAN=? ¬ ¬ 175 ¬ Simbol ? merepresentasikan sebuah parameter yang dapat di set. PreparedStatement dibuat dengan memanggil method prepareStatement dari object Connection contoh: PreparedStatement stmt = con.prepareStatement(“SELECT * FROM MAHASISWA WHERE NAMA=?”); stmt.setString(1, “Amir”); ResultSet rset = stmt.executeQuery(); Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 ResultSet ¬ ¬ ¬ 176 ¬ ResultSet adalah table hasil query database ResultSet diakses secara per baris table, dimana untuk maju ke baris berikutnya digunakan method next() dari object ResultSet Untuk mengambil field tertentu dari current row (baris saat ini) digunakan perintah: - getString(String fieldname): jika tipe data field berupa string - getInt(String fieldname) : jika tipe data field berupa integer, dst. Contoh: stmt = con.createStatement(); ResultSet rset = stmt.executeQuery(“SELECT * “ + ”FROM MAHASISWA”); String nama = rset.getString(“NAMA”); Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh membuat table 177 //File : CreateMahasiswa.java //Desc : implementasi pembentukan tabel Mahasiswa import java.sql.*; public class CreateMahasiswa { public static void main(String args[]) { String url = "jdbc:odbc:mahasiswa"; String query = "create table MAHASISWA " + "(NIM CHAR(8),NAMA VARCHAR(32)," + "ALAMAT VARCHAR(100), " + ”JURUSAN VARCHAR(40))"; Statement stmt; Connection con; try { Class.forName(” sun.jdbc.odbc.JdbcOdbcDriver"); } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); System.err.println(e.getMessage()); } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 try { con = DriverManager.getConnection(url); stmt = con.createStatement(); stmt.executeUpdate(query); stmt.close(); con.close(); } catch(SQLException ex) { System.err.println("SQLException: " + ex.getMessage()); } 178 } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh insert ke database 179 //File : InsertMahasiswa.java //Desc : implementasi insert data ke table Mahasiswa import java.sql.*; public class InsertMahasiswa { public static void main(String args[]) { String url = "jdbc:odbc:mahasiswa"; String query = ”insert into MAHASISWA " + ”values (‘13592033’,‘Amir’,‘Dago’,”+ “‘Informatika’)”; Statement stmt; Connection con; try { Class.forName(” sun.jdbc.odbc.JdbcOdbcDriver"); } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); System.err.println(e.getMessage()); } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 180 try { con = DriverManager.getConnection(url); stmt = con.createStatement(); stmt.executeUpdate(query); stmt.close(); con.close(); } catch(SQLException ex) { System.err.println("SQLException: " + ex.getMessage()); } } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh insert dengan PreparedStatement 181 //File : InsertMahasiswa2.java //Desc : implementasi insert data ke table Mahasiswa import java.sql.*; public class InsertMahasiswa2 { public static void main(String args[]) { String url = "jdbc:odbc:mahasiswa"; String query = ”insert into MAHASISWA " + ”values ( ?, ?, ?, ?)”; PreparedStatement stmt; Connection con; try { Class.forName(” sun.jdbc.odbc.JdbcOdbcDriver"); } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); System.err.println(e.getMessage()); } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 182 try { con = DriverManager.getConnection(url); stmt = con.prepareStatement(query); stmt.setString(1, “13592033”); stmt.setString(2, “Amir”); stmt.setString(3, “Dago”); stmt.setString(4, “Informatika”); stmt.executeUpdate(); stmt.close(); con.close(); } catch(SQLException ex) { System.err.println("SQLException: " + ex.getMessage()); } } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh query database 183 //File : SelectMahasiswa.java //Desc : implementasi pembentukan tabel Mahasiswa import java.sql.*; public class SelectMahasiswa { public static void main(String args[]) { String url = "jdbc:odbc:mahasiswa"; String query = ”SELECT * FROM MAHASISWA”; Statement stmt; Connection con; try { Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver"); } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); System.err.println(e.getMessage()); } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 184 try { con = DriverManager.getConnection(url); stmt = con.createStatement(); ResultSet rset = stmt.executeQuery(query); while(rset.next()) { System.out.println(“Nama: “+rset.getString(“NAMA”)); System.out.println(“Alamat: ”+ rset.getString(“ALAMAT”)); System.out.println(“Jurusan: ”+ rset.getString(“JURUSAN”)); } stmt.close(); con.close(); } catch(SQLException ex) { System.err.println("SQLException: " + ex.getMessage()); } } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh query dengan parameter 185 //File : SelectMahasiswa2.java //Desc : implementasi pembentukan tabel Mahasiswa import java.sql.*; public class SelectMahasiswa2 { public static void main(String args[]) { String url = "jdbc:odbc:mahasiswa"; String query = ”SELECT * FROM MAHASISWA “+ “where NAMA=?”; PreparedStatement stmt; Connection con; try { Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver"); } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); System.err.println(e.getMessage()); } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 186 try { con = DriverManager.getConnection(url); stmt = con.prepareStatement(query); stmt.setString(1, “Amir”); ResultSet rset = stmt.executeQuery(); while(rset.next()) { System.out.println(“Nama: “+rset.getString(“NAMA”)); System.out.println(“Alamat: ”+ rset.getString(“ALAMAT”)); System.out.println(“Jurusan: ”+ rset.getString(“JURUSAN”)); } stmt.close(); con.close(); } catch(SQLException ex) { System.err.println("SQLException: " + ex.getMessage()); } } Achmad Imam Kistijantoro- Diktat Java Programming } Teknik - Informatika ITB, Juli - Agustus 2000 Java Networking 187 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 java.net ¬ ¬ package java untuk jaringan kelas yg umum digunakan dari java.net - InetAddress: merepresentasikan alamat host (IP atau nama) - Socket: untuk berkomunikasi dengan komputer lain pada sisi - 188 - client ServerSocket: untuk berkomunikasi dengan komputer lain pada sisi server URL: merepresentasikan URL (contohnya: http://www.informatika.org) Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh program untuk query hostname 189 import java.net.*; public class IPName { public static void main(String args[]) { try { InetAddress h1 = InetAddress.getByName( args[0] ); System.out.println(h1.getHostAddress()); } catch (Exception e) { System.out.println( e ); } } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 InetAddress ¬ Merepresentasikan sebuah alamat pada internet Satu object InetAddress merepresentasikan satu alamat ¬ InetAddress getByName(String hostname) ¬ - method untuk membuat object InetAddress dari sebuah hostname atau IP address ¬ String getHostName() - mengembalikan nama host dari object InetAddress 190 ¬ byte[] getAddress() - mengembalikan raw IP address (dalam bentuk byte array) ¬ String getHostAddress() - mengembalikan IP address dalam bentuk String Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh program dengan menggunakan URL 191 import java.net.*; import java.io.*; public class BacaURL { public static void main(String args[]) { try { URL url = new URL( args[0] ); BufferedReader in = new BufferedReader( new InputStreamReader( url.openStream())); String s; while ((s = in.readLine()) != null) System.out.println(s); in.close(); } catch (Exception e) { System.out.println( e ); } } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 URL ¬ ¬ ¬ ¬ ¬ 192 Merepresentasikan URL URL: Uniform Resource Locator, sebuah identifier ke suatu resource (file, direktori) pada Internet URL terdiri atas 3 bagian, protocol, host name dan pathname Contoh: http://www.informatika.org/java/index.html Fungsi yang disediakan: - String getProtocol() • mengambil protocol dari URL - String getHost() • mengambil hostname dari URL - String getFile() • mengambil filename dari URL - String getPath() • mengambil pathname dari URL - InputStream openStream() • membuka input stream dari URL, untuk membaca dokumen dari URL tersebut. Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh program dengan socket import java.io.*; import java.net.*; 193 public class EchoServer { public static void main(String[] args) { ServerSocket serverSocket = null; Socket clientSocket = null; PrintWriter out = null; BufferedReader in = null; try { serverSocket = new ServerSocket(4444); System.out.println("server siap ..."); while(true) { clientSocket = serverSocket.accept(); out = new PrintWriter(clientSocket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader( clientSocket.getInputStream())); Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 String s = in.readLine(); System.out.println("menerima: "+ s); out.println( "jawaban server: "+ s ); System.out.println("mengirim: "+ "jawaban server:"+ s) } } catch (Exception e) { System.out.println( e ); clientSocket.close(); serverSocket.close(); } } 194 } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh program socket import java.io.*; import java.net.*; 195 public class D3EchoClient { public static void main(String[] args){ Socket socket = null; PrintWriter out = null; BufferedReader in = null; try { socket = new Socket("localhost", 4444 ); out = new PrintWriter(socket.getOutputStream(),true); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 String s; out.println( args[0] ); System.out.println("kirim teks: "+ args[0] ); s = in.readLine(); System.out.println("terima teks: "+ s ); in.close(); out.close(); socket.close(); } catch (Exception e) { e.printStackTrace(); } 196 } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Socket ¬ ¬ Socket adalah representasi komunikasi data antara 2 buah komputer/program (dapat dari komputer yang sama) Socket dibuat dengan memberikan hostname dan portname dari komputer yang dituju - Socket s = new Socket(“www.informatika.org”, 80); ¬ 197 Method yang disediakan: - InputStream getInputStream() OutputStream getOutputStream() int getReceiveBufferSize() setReceiveBufferSize(int s) int getSendBufferSize() setSendBufferSize(int s) Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 ServerSocket ¬ ¬ 198 Socket yang digunakan pada sisi server ServerSocket akan menunggu koneksi dari client pada port tertentu. Jika terdapat client yang menghubungi server, ServerSocket akan membuat socket baru yang merepresentasikan koneksi dengan client tersebut - Socket accept() • menunggu koneksi dari client, setelah ada, menghasilkan object socket Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Thread ¬ ¬ ¬ 199 satuan titik eksekusi program multithreading: aplikasi yang berjalan dengan lebih dari satu thread, sehingga seakan-akan ada 2 program paralel dijalankan bersamaan contoh: class Thread1 extends Thread { int x=1; public Thread1() { } public void run() { try { while(true) { System.out.println("Thread 1: loop ke "+x); x++; } } catch(Exception e) { e.printStackTrace(); } } public static void main(String a[]) { Thread1 t1 = new Thread1(); Thread1 t2 = new Thread1(); t1.start(); t2.start(); } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Membuat thread ¬ Thread baru dibuat dengan: - membuat object yang diturunkan dari kelas Thread (lihat contoh sebelumnya), dan memanggil method start dari object tsb. - membuat object dari kelas yang mengimplementasikan interface Runnable, membuat object Thread dengan object Runnable tadi sebagai parameter, memanggil method start dari object thread. contoh: 200 class MyRunnable implements Runnable { public void run() { while(true) System.out.println(“my runnable object”); } public static void main(String a[]) { MyRunnable myrun = new MyRunnable(); Thread t1 = new Thread(myrun); t1.start(); } } - Note: interface Runnable mensyaratkan method run() harus diimplementasikan Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Membuat server multithreading ¬ ¬ server harus melayani lebih dari satu client pada saat bersamaan, sehingga harus diimplementasikan sebagai multithreaded server cara: setiap ada client baru, dibuat sebuah thread untuk melayaninya. while(true) { clientSocket = serverSocket.accept(); MyThread t1 = new MyThread(clientSocket); t1.start(); } 201 ¬ Di mana MyThread adalah sebuah kelas yang diturunkan dari Thread class MyThread extends Thread { Socket socket; public MyThread(Socket s) { socket = s; } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh: Buat server file ¬ ¬ ¬ Client menghubungi server dengan mengirimkan nama file yang akan diambil server membaca file yang diminta dan mengirimkannya ke server jawaban server terdiri atas satu baris status hasil dan baris berikutnya berupa file yang diminta 202 Client Server Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh: server file public class FileThread extends Thread{ Socket socket; public FileThread(Socket s) { socket = s; } public void run() { InputStream in = s.getInputStream(); OutputStream out = s.getOutputStream(); BufferedReader bin = new BufferedReader( new InputStreamReader( in )); // baca filename dari client String fileName = bin.readLine(); // buka file dengan nama tersebut FileInputStream fin = new FileInputStream(fileName); // tulis status pembukaan file ke client 203 while( masih ada data dari file) // kirim data dari file ke client } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 thread-safe & synchronize ¬ 204 ¬ ¬ thread-safe: beberapa thread dapat mengakses object yang sama pada waktu bersamaan. Variable sebuah object dapat menjadi tidak konsisten karena diubah oleh dua thread pada saat bersamaan. Thread-safe adalah kondisi dimana sebuah object dapat tetap konsisten walaupun diakses oleh banyak thread pada saat bersamaan synchronize adalah parameter yang dapat diterapkan kepada method agar object tersebut thread-safe dengan synchronize, sebuah method pada setiap saat pasti hanya dieksekusi oleh sebuah thread saja. Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh: public class Counter { int count = 1; public int getValue () { count++; return count; } } 205 public class CounterThread extends Thread { public CounterThread() {} public void run() { Counter c = new Counter(); while(true) { System.out.println(“counter: “+c.getValue()); } } public static void main(String a[]) { CounterThread t1 = new CounterThread(); CounterThread t2 = new CounterThread(); t1.start(); t2.start(); } Achmad Imam Kistijantoro- Diktat Java Programming } Teknik - Informatika ITB, Juli - Agustus 2000 Java Servlet 206 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Java Servlet ¬ Servlet: aplikasi java yang dieksekusi pada Web server 207 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Mengapa Object Oriented ¬ Why Object Oriented: - Software development pada awalnya cenderung fokus kepada cara berpikir mesin: prosedural. Data+Algoritma = program. - Masalah yang harus dipecahkan semakin kompleks, paradigma mesin tidak mencukupi untuk mengembangkan software sesuai dengan kebutuhan masa kini. - Level abstraksi: Mesin – Assembly language – Programming Language – 208 Implementation Design – High Level Design – Software Requirement. - Object Oriented adalah paradigma pengembangan software yang membuat metodologi pemecahan masalah lebih dekat kepada domain permasalahan dibandingkan domain mesin. - permasalahan di bidang software engineering: software crisis, rapid software development, software complexity, software maintenance, evolutionary techniques. Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Interface & Callback ¬ Interface dapat digunakan untuk mendefinisikan antar muka sebuah callback MouseHandler interface Tampilan onMousePressed 209 MouseHandler implementation 2 MouseHandler implementation 1 onMousePressed onMousePressed Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Permainan kartu ¬ 210 terdapat setumpuk kartu, terdiri atas 52 kartu dengan 4 suit. Tumpukan kartu tersebut dapat dikocok dan dibagikan ke sejumlah pemain. Sisa yang tidak dibagikan diletakkan ditengah meja, dan disebut sebagai draw pile. Kartu-kartu dimainkan oleh pemain dengan cara meletakkan pada meja, dan diletakkan pada tumpukan kartu yang telah dimainkan yang dinamakan discard pile. Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh kasus: ¬ 211 vending machine - sebuah vending machine menampilkan daftar produk yg dapat dibeli, antara lain permen, kue, coklat dan chips. Harga masingmasing produk adalah sbb: • permen : Rp. 500,• kue : Rp. 600,• coklat : Rp. 1200,• chips : Rp. 1000,pembeli dapat memasukkan sejumlah uang, dan memilih produk yang diinginkannya. Machine akan memberikan produk tersebut, dan memberikan kembaliannya. Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh kasus: ¬ algoritma solusi umum: - loop • tampilkan pilihan produk • input uang dari pembeli • input pilihan dari pembeli • hitung kembalian • output produk & kembalian 212 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Solusi 213 for( ; ; ) { uang = InputMoney(); PrintMenu(); pil = InputPil(); switch (pil) { case 0: kembali = uang; break; // batal case 1: kembali = uang - 500; break;// permen case 2: kembali = uang - 600; break; // kue case 3: kembali = uang - 1200; break; // coklat case 4: kembali = uang - 1000; // chips } if ((kembali >= 0) && (pil != 0)) { OutputProduk(pil); OutputMoney(kembali); } else { System.out.println(“uang tidak cukup/batal”); OutputMoney(uang); } } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Solusi OO Produk 214 Chips Chips Coklat Permen Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Contoh kasus ¬ ¬ ¬ 215 buat program untuk menggambar bentuk (square, rectange, circle, etc) di layar. informasi yang harus disimpan: jenis bentuk, posisi, ukuran. solusi: class Rectangle { int } Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000 Solusi void draw(Bentuk b) { switch(b.Jenis) { case 1: drawSquare(b); break; case 2: drawRectangle(b); break; case 3: drawCircle(b); break; } } 216 Achmad Imam Kistijantoro- Diktat Java Programming Teknik - Informatika ITB, Juli - Agustus 2000