Pemrograman Berorientasi Objek
Class, Method, dan Package/Library
N I K O I BR A H I M , M I T UNIVERSITAS KRISTEN MARANATHA
Today’s Menu •
METHODS AND PARAMETERS – –
– – –
•
EVENTS & METHODS –
– – – – – –
•
Parameters Arguments (passed values) Example: Parameters Vs Arguments Introduction to aLibrary Example: Rising Sun Program driven code GUI: Graphical User Interface Event driven code Access Specifiers: public, private, protected Defining parameters Parameters Vs Attributes Local variables
CONTROL FLOW – – –
Non-void methods Return Statement Method call control flow
Divide & Conquer Program komputer yang digunakan di dunia nyata
biasanya memiliki arsitektur yang kompleks serta terdiri dari ribuan bahkan jutaan baris kode. Kita tidak mungkin menyimpan kode tersebut dalam satu method, misalnya hanya di main method saja. Berdasarkan pengalaman, cara terbaik untuk mengembangkan dan memelihara program besar adalah dengan cara membuat program ke dalam modul-modul yang lebih kecil. Teknik ini dikenal dengan istilah divide and conquer.
Program Modules in Java Ada 3 jenis modul di dalam pemrograman berbasis Java:
Methods
Classes
Packages
Pada dasarnya, program berbasis Java ditulis dengan
mengkombinasikan method & class baru dengan method-method yang telah ada di dalam Java Application Programming Interface (Java API), serta ditambah dengan library class lainnya. Class-class yang berhubungan biasanya dikelompokkan ke dalam package sehingga bisa dimport dan di-reuse oleh program lain. Java API menyediakan koleksi class yang sangat banyak. Setiap class ini berisi methods untuk melakukan banyak hal seperti kalkulasi matematis, manipulasi string, operasi I/O, operasi basis data, operasi jaringan, pemrosesan file, eror checking, dll.
Pembuatan Class, Constructor, & Method Mobil.java public class Mobil { private int kecepatan;
}
// instance var
public Mobil (){ kecepatan = 0; }
// constructor // initial value
public void setKecepatan (int n){ kecepatan = n; }
// method
public int getKecepatan(){ return kecepatan; }
// method
Object Instantiation & Pemanggilan Method Buat objek mobil, lalu panggil method-nya
MobilApp.java public class MobilApp{ public static void main(String[] args){ Mobil m1= new Mobil(); // buat dulu objek-nya proses di atas disebut instantiation. m1 adalah instance (object unik) dari class Mobil. m1.setKecepatan(10); // baru, panggil method-nya System.out.println("Kecepatan saat ini: " + m1.getKecepatan()); Mobil m2 = new Mobil (); // m2 adalah instance kedua dari class Mobil Mobil m3 = new Mobil (); // m3 adalah instance ketiga dari class Mobil, dst. } }
Method Parameter parameter: suatu penampung nilai dari argumen suatu method Contoh method dengan parameter:
public void moveLeft(int step){
//satu parameter dengan nama “step” } Berikut cara memanggil method dengan parameter:
moveLeft(10); // step = 10 Suatu method dapat memiliki lebih dari satu parameter, contoh: public void moveTo(int x, int y){
// parameter x,y menyatakan posisi } Cara memanggil: moveTo(100, 200); // x = 100, y = 200
Method Arguments (passed value) Nilai argumen dapat berupa: Bilangan, contoh: 42, 3.14159 Teks, contoh: "Hello" Objects: referensi pada object Posisi argumen yang diberikan pada saat memanggil
method harus sesuai dengan posisi parameter Tipe argumen harus cocok dengan tipe parameter
Contoh 1: parameters vs arguments (perhatikan warna merah tulisan) Date.java: public class Date{ // contructor tidak ditulis, secara default Date() private int day; // secara default day = 0 private int month; // secara default month = 0 private int year; // secara default year = 0 public void setDate(int newDay, int newMonth, int newYear){ //parameters day = newDay; month = newMonth; year = newYear; } } DateDemo.java: public class DateDemo{ Date myBirthday = new Date(); //default constructor myBirthday.setDate(19,2,1994); //arguments }
Package & Import Package: library berisi kelas-kelas Keuntungan menggunakan package: package dapat di-share oleh para programmer lebih baik menggunakan package daripada meng-copy semua kelas ke dalam project kita Contoh pakcage: aLibrary.jar Untuk menggunakan package, kita harus meng-import terlebih
dahulu Syntax:
import package.className ;
Contoh: import java.util.Scanner; import java.util.*; import java.awt.Color; import java.awt.*; import package.*; import aLibrary.*;
// import a single class import
// import just the class Scanner; // import all class in the util package // import just the class Color // import all class in the awt package // import all classes in "package“ // import all aLibrary classes
Perkenalan: Package aLibrary • aLibrary berisikan sekumpulan kelas-kelas yang telah • • • •
dibuat oleh Mr. Riley aLibrary bukan merupakan package standar Java, oleh karena itu harus di-load agar bisa digunakan. aLibrary ini dibuat untuk tujuan pengenalan Objek dan Java aLibrary tidak ditujukan untuk membuat program yang ‘real’ aLibrary didesain agar kita dapat membuat program yang memanfaatkan graphis: – –
–
Menggambar pictures Berinteraksi dengan users Sistem koordinat (kiri atas: 0,0)
Kelas-kelas pada aLibrary
AButton AImage ALabel ALine AOval ARectangle ARoundRectangle AScrollbar ATextArea ATextField AView AWindow A3ButtonWindow NOTE: • • •
Source code setiap kelas dapat dilihat di direktori aLibSource Untuk menggunakan kelas-kelas tersebut kita harus import aLibrary.*; Untuk menggunakan kelas Color, kita harus import java.awt.*;
Kelas AWindow (lihat aLibDoc) • Objek window biasa digunakan sebagai canvas untuk
menggambar. • Kelas AWindow menyediakan objek window yang dapat digunakan untuk aplikasi grafis. – Constructor: AWindow( int x, int y, int w, int h) • •
–
x, y posisi kiri atas w = lebar, h = tinggi
(x,y)
methods •
setSize(), setLocation(), setColor(), etc.
• Contoh penggunaan: AWindow win = new AWindow(100,100,300,150); win.repaint();
h
w
Kelas ARectangle Object untuk menggambar segi empat Constructor: ARectangle ( int newX, int newY, int w, int h) Posisi x dihitung dari sisi kiri window Posisi y dihitung dari sisi kanan window methods: setSize(), setLocation(), setColor(), setToFill(), setToOutline(), place() (meletakkan objek ini di dalam objek lain) Contoh:
ARectangle rect = new ARectangle(25,25,100,100); rect.setColor(Color.red); rect.setToFill(); (25,25) rect.place(win);
AOval AOval memiliki bentuk oval atau elips Posisi dihitung mulai dari kiri atas (seolah-olah ada kotak): (x,y) h w
Methods sama dengan methods pada ARectangle Contoh: AOval oval = new AOval(90,20,70,30); oval.setColor(Color.yellow); oval.setToFill(); oval.place(win);
Contoh 2: Rising Sun import aLibrary.* // untuk dapat menggunakan kelas AWindow, AOval, ARectangle, dll import java.awt.*; // untuk dapat menggunakan kelas Color public class RisingSun { //instance variables : private AWindow frame; private AOval sun; Kelas Color diambil dari private ARectangle grass; package java.awt //constructor : public RisingSun() { frame = new AWindow(100,100,300,300); frame.setColor(Color.blue); sun = new AOval(125,125,50,50); sun.setToFill(); sun.setColor(Color.red); sun.place(frame); frame.repaint(); }
}
Events & Methods – Program driven code
– GUI: Graphical User Interface – Event driven code – Access Specifiers: public, private, protected – Defining parameters – Parameters Vs Attributes – Local variables
Membuat Methods accessSpecifier void/type namaMethod (parameters) {
….. Statement sequence…. } Contoh: public void setColor(Color c) {….} private int hitungJumlah(int x, int y) {….} Access Specifier:
public available to all client (objek lain pun bisa mengaksesnya) private only for the object itself (hanya untuk dirinya sendiri) protected (akan dibahas di waktu yad)
General Rule: every method must have a clear purpose (one thing to
do) and should be designed to fulfill that particular task
3 Jenis Methods Service methods - provide a service to objects,
generally declared as public e.g. draw(), moveForward(), turnClockwise() are all DrawingTool service methods Helper methods - simplify other methods, generally kept private Calculator methods - compute a value; used to perform complicated calculations, when more than a few instructions are needed
NON-VOID METHODS Syntax:
public/private ReturnType MethodName (ParamDeclarations){ StatementSequence } methods that return a value (a number, text, or reference to an object created) when called the returned value can be assigned to a variable - types must match
Contoh Service / "maker" methods method creates an object return value is the new object e.g. public ARectangle makeBox(){ ARectangle box = new ARectangle(10,10,100,200); box.setToFill(); //other method calls return box; }
"calculator" methods method computes a result return value is the result (number, text, … ) e.g. private int findPerim(){ //return type is "int" int w = box.getWidth(); //w, h are local variables int h = box.getHeight(); return 2*h+2*w; }
METHOD CALL CONTROL FLOW Pada saat program memanggil suatu method, maka program akan
menunda (pause) current sequence Lalu program akan menjalankan method tsb
Memasukan semua argumen ke dalam method Mengeksekusi sequence yang ada di dalam method pass back return value
Setelah itu, program akan melanjutkan original sequence
Contoh Method Calling public class Smileys {
private AOval happy; private AOval dopey; ... public Smileys () { happy = makeHappyFace(Color.yellow); ... dopey = makeSadFace(Color.blue); ... frame.repaint(); } ... } makeHappyFace() is called and as a result addEyes() executes (lihat di tutorial yang diberikan nanti)
Program-Driven Code Vs Event-Driven Code PROGRAM-DRIVEN CODE: Program “Rising Sun” adalah contoh dari “program-driven code” Instruksi dieksekusi terurut berdasarkan yang ditulis terlebih dahulu. Tidak memungkinkan adanya reaksi yang interaktif dengan user Program akan berhenti setelah semua statements dieksekusi (tidak ada lagi interaksi dengan user) EVENT-DRIVEN CODE Cocok untuk program yang membutuhkan interaksi dengan user Kode program dieksekusi pada saat ada event (klik mouse, tekan tombol keyboard, memindahkan posisi mouse, dll) event-handler: sebuah method pengeksekusi yang merespon suatu event director-as-handler pattern: director digunakan untuk menangani atau mengkoordinasikan event.
GUI (Graphical User Interface) Sistem windowing yang dapat berinteraksi dengan user Berisi komponen-komponen grafis, seperti buttons,
scrollbars, text fields, menus, etc. Program-driven code tidak cocok menggunakan GUI Event-driven code digunakan pada GUI, karena memiliki kemampuan untuk beraksi pada saat event terjadi (misal: klik mouse)
Contoh GUI: A3ButtonWindow
A3ButtonWindow "Action" window, terdiri atas: Sebuah window: sama dengan AWindow 3 tombol: LEFT, MID dan RIGHT Mendukung 3 jenis event, yang di-generate pada saat tombol di-klik:
leftAction event rightAction event mid Action event
Setiap event ini ditangani oleh sebuah method dengan nama yang sama, yaitu:
leftAction(), rightAction() dan midAction()
this Constructor A3ButtonWindow perlu mengetahui objek apa yang akan
menangani suatu event. Karena itu, kita perlu me-refer instance dari kelas yang menangani event tsb. Masalahnya pada saat kode program ditulis, kita belum tahu nama objeknya. Objek di-create (intantiate) pada saat program berjalan (running). Solusi di Java: kita bisa gunakan keyword “this” Contoh: public class Smiley extends A3ButtonHandler { Public Smiley (){ win = new A3ButtonWindow(this) }
}
Artinya: Di dalam contsructor A3ButtonWindow, kita perlu memberikan
parameter berupa Objek Smiley yg merupakan “handler” dari action ketiga tombol. Namun, pada saat kita tulis kode ini, kita belum mengetahui nama objek dari Smiley. Dengan kata lain, kita tidak dapat mengacu namanya. Karena itu, kita perlu menggunakan keyword “this” untuk mengacu objek Smiley yang akan di-generate pada saat program di-run.
A3ButtonHandler A3ButtonHandler merupakan objek yang
mengimplementasikan semua event-handler (leftAction, midAction, rightAction) A3ButtonHandler merupakan default handler untuk A3ButtonWindow Untuk menggunakan pola director-as-handler pada A3ButtonWindow, kita dapat melakukan langkah-langkah berikut:
extend A3ButtonHandler public class Director extends A3ButtonHandler { …. } create an A3ButtonWindow passing itself (this) to the A3ButtonWindow constructor A3ButtonWindow win = A3ButtonWindow (this); provide implementation for each event-handler (leftAction(), rightAction() and midAction()methods)
Tutorial Bukalah BlueJ
Pilih menu Tools > Preferences Pilih Libraries Browse ke folder di mana Anda menyimpan
“aLibrary.jar”
Misal: D:\aLibrary.jar
Klik OK dan Restart BlueJ
Latihan 01 Buka BlueJ dan buatlah sebuah projek baru
dengan nama “Latihan01”. Edit deskripsi project (dengan ikon dokumen di sebelah kiri window BlueJ) sehingga berisikan keterangan project yang sedang Anda kerjakan. Buatlah sebuah kelas director dengan cara menekan tombol New Class, beri nama kelas tersebut SunRise. Lalu editlah kelas tersebut. Anda perlu mempelari dokumentasi dari aLibrary untuk melihat class dan method yang disediakan
Dokumentasi aLibrary Contoh: AOval Buka “index.html”
Modifikasi SunRise.java
Modifikasi Construtor
Buatlah Tampilan sebagai berikut
Latihan 02 Pada latihan ini, kita akan menggunakan event-handler
menggunakan Window yang telah disertai 3 tombol (left, mid, right button) Modifikasilah SunRise.java, sbb:
Tambahkan “extends A3ButtonHandler”
Tambahkan 3 method berikut di luar constructor Note: setiap kali kita melakukan extends kepada A3ButtonHandler, ketiga methods ini wajib ditulis
Latihan 02 (continue) Modifikasi tipe instance variabel “win”
Modifikasi instantiation objek “win” Tambahkan kode di dalam methodleftAction, sbb:
Compile dan run project NOTE: apabila tombol tidak muncul,
cobalah me-resize window secara manual Klik tombol kiri Warna akan berubah…
Praktikum