N IKO IBR A H IM , M IT
U N IV E R S IT A S KR IS T E N M A R A N A T H A
Pemrograman Berorientasi Objek
Today’s Menu
• METHODS AND PARAMETERS
– Parameters
– Arguments (passed values)
– Example: Parameters Vs Arguments – Introduction to aLibrary
– Example: Rising Sun
• EVENTS & METHODS – 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
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
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 (){ // constructor
kecepatan = 0; // initial value
}
public void setKecepatan (int n){ // method kecepatan = n;
}
public int getKecepatan(){ // method return kecepatan;
} }
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:
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
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 ; // import a single class import
Contoh:
import java.util.Scanner; // import just the class Scanner;
import java.util.*; // import all class in the util package import java.awt.Color; // import just the class Color
import java.awt.*; // import all class in the awt package import package.*; // import all classes in "package“
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
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
–
methods
• setSize(), setLocation(), setColor(), etc. •
Contoh penggunaan:
AWindow win = new AWindow(100,100,300,150); win.repaint();
(x,y)
w h
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();
AOval
AOval memiliki bentuk oval atau elips
Posisi dihitung mulai dari kiri atas (seolah-olah ada kotak):
Methods sama dengan methods pada ARectangle
Contoh:
AOval oval = new AOval(90,20,70,30);
oval.setColor(Color.yellow);
oval.setToFill();
oval.place(win);
(x,y) h wContoh 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;
private ARectangle grass;
//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(); } }
Kelas Color diambil dari package java.awt
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
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
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
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
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)
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
Tutorial
Bukalah BlueJ
Pilih menu Tools > Preferences
Pilih Libraries
Browse ke folder di mana Anda menyimpan
“aLibrary.jar”
Misal: D:\aLibrary.jar
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
Dokumentasi
aLibrary
Contoh:
AOval
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
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