REVIEW
JAVA & OOP
Oleh
Ari
Eko Wardoyo, M.Kom.
Tujuan kuliah
•Mengulang dan
mengingatkan kembali beberapa konsep penting dalam Object Oriented
Programming dan Java.
Outline
•Operator &
Expresion
•Flow Control (Decision & Iteration)
•References
•OOP
•Exception
Handling
Operator
•Apakah operator?
•Berdasarkan jumlah dari operands:
–Unary
–Binary
•Berdasarkan operasi yang dilakukannya:
–Arithmatic
–Logical
Operator & expression
•Apakah itu
expression?
•Apakah output dari potongan program berikut?
int ii = 1;
int jj = 2;
double a = (ii + 1) / (jj + 1);
double b = (double) (ii + 1) / (jj + 1);
double c = (ii + 1) / (double) (jj + 1);
double d = (ii + 1.0) / (jj + 1.0);
System.out.println (a + " " + b);
System.out.println (c + " " + d);
Operator & expression
• Apakah output
dari potongan program berikut?
int width = 10;
int a = 3 / 4 * width;
System.out.println (a);
int b = width * 3 / 4;
System.out.println (b);
int c = width / 4 * 3;
System.out.println (c);
int d = width + 4 * 3;
System.out.println (d);
Perlu
diingat:
–Tipe data dari
sebuah ekspresi bergantung pada operator dan tipe data dari
operands.
–Urutan evaluasi
sebuah ekspresi bergantung pada tingkat precedence operator. Jika dua buah operators memiliki
tingkat precedence yang sama, lihat pada
associativity operatornya:
•LR: Left to
Right
•RL: Right to
Left
Flow control
•Branch (cabang)
–Digunakan untuk
memilih perintah mana yang akan dijalankan berdasarkan kondisi tertentu.
•Loop
(pengulangan)
–Suatu kelompok
program dijalankan secara berulang. Kondisi berhenti menyatakan berapa kali
pengulangan dijalankan.
Flow control: if
if (condition)
{
statement;
}
next statement
if (condition)
{
statement1
}
else
{
statement2
}
next statement
•Kesalahan umum:
if (x == 0);
System.out.println (“x is zero”);
if (x > 0)
System.out.println (“x = “);
System.out.println (x);
Flow control: switch
• Perintah if-else-if
yang membandingkan nilai sebuah konstant atau bilangan bulat dapat digantikan
dengan perintah switch.
int digit;
String digitName;
switch (digit) {
case 0:
digitName = “zero”; break;
case 1: digitName
= “one”; break;
case 2:
digitName = “two”; break;
case 3:
digitName = “three”; break;
case 4:
digitName = “four”; break;
case 5:
digitName = “five”; break;
case 6:
digitName = “six”; break;
case 7:
digitName = “seven”; break;
case 8:
digitName = “eight”; break;
case 9:
digitName = “nine”; break;
default:
digitName = “”; break;
}
Flow control: ?
testExpr ? yesExpr : noExpr
•Berguna untuk
menyederhanakan perintah if-then-else sederhana
•Contoh:
•Setara dengan:
if (x > 100){
y = x * 0.9;
} else {
y = x;
}
y = (x > 100) ? (x * 0.9) : x;
Flow Control: while
while (condition){
statement;
}
/* Post condition:
~condition */
•Selama nilai
ekspresi condition true, maka
statement akan
dijalankan, kemudian
ekspresi condition
akan dievaluasi lagi.
•Saat nilai
expression condition false,
pengulangan
berhenti. Perintah statement
tidak lagi
dijalankan.
•Ingat: condition
dievaluasi lebih dulu!
Flow Control: do-while
do {
statement;
...
} while (condition);
/* Post condition:
~condition */
•statement dijalankan lebih dulu, kemudian condition dievaluasi.
–Jika kondisi
true statement dijalankan lagi.
–Jika kondisi
false loop berhenti.
•Minimal statement dijalankan sekali.
Flow control: for
for (initialization; condition; update) {
statement;
}
• setara dengan perintah while berikut:
initialization;
while
(condition) {
statement;
update;
}
•for digunakan bila kita sudah tahu berapa banyak pengulangan yang akan
dilakukan.
Flow Control: break
•Kegunaan: keluar dari loop terdalam
•Bukan kebiasaan programming yang baik (poor
design)!
•Contoh:
while (...) {
...
if (something) {
break;
}
...
}
Flow Control: continue
•Kegunaan: menjalankan pengulangan selanjutnya tanpa menjalankan sisa
dalam blok
pengulangan.
•Juga bukan kebiasaan programming yang baik!
•Contoh:
for (int ii = 1;
ii <= 100; ii++) {
if (ii % 10 == 0) {
continue;
}
System.out.println (i);
}
•Bisakah anda tulis ulang tanpa continue?
Object
oriented programming
•Class
–Kombinasi dari
data dan operasi (metode) dengan access
modifier.
–Satu class
membentuk sebuah tipe data
•Object
–instance dari
class
–tiap object
memiliki:
•state => variable instances / fields
•behaviour => methods
Class
•Class memiliki:
–Detail
implementasi (blue print) dari sebuah object yang akan dibuat bayangkan sebuah object factory.
–Class juga
menyimpan static methods dan static variables dari object yang akan dibuat.
•Class menyatakan
detail implementasi object –Seluruh
method dan fields
–code
untuk method yang akan menentukan perilaku dari object.
•Berdasarkan
definisi class object dibuat.
Object
• Membuat object
dengan operator new
– Mengalokasikan
ruang memory untuk object baru, dan mengembalikan alamat dari object dalam
memory.
– Panggil
constructor yang sesuai.
Contoh: new Integer (20);
• Mendeklarasikan
reference variable
–
ClassName varName;
Contoh:
• Integer x;
• int ii;
–
Ingat: mendeklarasikan sebuah reference variable belum membuat object!
•Menyimpan alamat
dari object agar dapat digunakan lagi: gunakan operator
=
–Contoh:
Integer x = new Integer (20);
–Ingat: operator =
tidak meng-copy (clone) object
•Mengakses field
dan memanggil method:
gunakan operator .
(dot)
–Contoh:
Dimension size;
size = getSize();
System.out.println (size.width);
System.out.println (size.getWidth());
Field
•Menyimpan status dari object atau class
•Terdapat dua jenis field:
–Instance variable
•Tiap object punya
nilai variable masing-masing object
variable
–Static variable
•Satu class hanya
punya satu nilai variable, walaupun class tersebut memiliki beberapa object => class
variable
Method
•Definisi method terdiri dari:
–Header
•Access specifier
(mis: public )
•Return type (mis
: double, String)
•Nama method (mis:
deposit, openFile)
•Kumpulan
parameter
–Body (implementasi dari method)
•Method yang tidak memiliki body /
implementasi disebut abstract method.
•Mengapa ada method yang tidak memiliki
body / implementasi?
•Sebagaimana field, ada dua jenis method:
–Instance method
(non-static method)
•method dapat
dijalankan dari sebuah object object
method
•ada parameter
implisit this method dapat mengakses
dirinya sendiri.
–Static method
•method dapat
dijalankan tanpa object class method
•tidak ada
parameter this static method tidak dapat
mengakses instance variable
•Parameter Passing bersifat call by value:
pemanggil memberikan copy nilai kepada method
yang dipanggil.
Reference Type
•Sebuah reference variable dalam Java menyimpan lokasi (alamat) dari
objects dalam memory komputer.
•Sebuah primitive variable menyimpan nilai sebenarnya dari sebuah
primitive data type.
•Dengan kata lain, reference variable tidak menyimpan object secara
konkret (sebenarnya)
tapi primitive variable menyimpan ‘object’;
Reference Type
•Operator ==
–Untuk primitive
data type, operator == digunakan untuk menguji apakah kedua variable memiliki
nilai yang sama.
–Untuk reference
data type, operator == digunakan untuk menguji apakah dua reference variables
menunjuk pada object yang sama, TIDAK menunjukkan apakah dua objects berbeda
memiliki nilai yang sama.
•Method equals
–Metode equals
dapat digunakan untuk menguji apakah kedua object berbeda memiliki nilai yang
sama.
–Metode equals
pada beberapa object seperti Button, akan mengembalikan true bila keduanya
menunjukkan pada object yang sama.
Array
•Deklarasi Array (array adalah object juga)
int [] array1;
–ingat:
mendeklarasikan sebuah reference variable tidak berarti mengalokasikan memory
dan membuat object.
•Membuat array
array1 = new int[100];
int[] array2 = { 2, 3, 7, 5 };
•Untuk mengakses element dalam array, gunakan index
array1[0] = 20;
•Karena array adalah object juga, operator = tidak
mengcopy(clone) array.
int[] lhs = new int[100];
int[] rhs = new int[100];
...
lhs = rhs;
Dynamic Array Expansion
o
•Misalkan, kita hendak membaca sederetan
bilangan bulat dari sebuah file dan
o menyimpannya
dalam array untuk kemudian diproses.
o •Untuk
membuat array, kita harus menyatakan ukuran dari array.
o
•Jika kita tidak tahu berapa banyak bilangan
buIat dalam file, maka kita tidak dapat menentukan ukuran dari array.
Dynamic Array Expansion (2)
•
contoh:
int[] a = new int[10];
–Jika array tidak
cukup, kita dapat melakukan pengembangan array dengan contoh berikut:
int[] original = a;
a = new int[original.length * 2];
for (int ii = 0; ii < original.length; ii++) {
a[ii] =
original[ii];
}
Contoh matrix 1
dimensi
Contoh Matrix 2 Dimensi
Perkalian Matrix
C[0][0] = (A[0][0] * B[0][0]) +
(A[0][1] * B[1][0]
C[0][1] = (A[0][0] * B[0][1]) +
(A[0][1] * B[1][1]
C[1][0] = (A[1][0] * B[0][0]) +
(A[1][1] * B[1][0]
C[1][1] = (A[1][0] * B[0][1]) +
(A[1][1] * B[1][1]
TUGAS Perkalian Matrix
Exceptions
o
•Exception menyatakan bahwa sebuah “kejadian
aneh” telah terjadi;
o •Sebuah
object Exception menyimpan informasi tentang keanehan tersebut.
o
–throw
“menandakan” keanehan
o
–catch
tindakan “mengatasi” keanehan
o •Error
vs. Exception
o
–Error kesalahan fatal, mis: out of memory
o
–Exception
masih bisa “dibetulkan”, mis:
§
EOFException,
§
ArrayIndexOutOfBoundException.
Exception throwing (˜tidak
bertanggungjawab!)
o
•Klausa throws menyatakan bahwa sebuah method
tidak menangani checked exception.
o •Exception
yang tidak ditangani akan di-propagate ke caller method.
o
•Exception yang tidak ditangani sampai di method
main(String[] args) menyebabkan JVM mencetak error message, stack trace, lalu
berhenti.
Exception handling
(˜bertanggungjawab!)
o
•Gunakan statement try/catch/finally
o
–try menandakan kumpulan statement (try block)
yang mungkin menyebabkan exception.
o
–try block diikuti 0 atau lebih catch block yang
menangani sebuah tipe exception.
o
–Sesudah catch block, boleh ada finally block
yang biasanya berisi statement “beres-beres”;
o
Statement ini dieksekusi apapun yang terjadi di
try block.
§
•Jika flow control keluar dari try block karena
break, continue atau return, finally block tetap dijamin akan dijalankan.
Contoh exception handling
try {
// Statement yang biasanya berjalan tanpa
masalah
// tapi mungkin
menyebabkan exception
}
catch (SebuahException e1) {
// Menangani
exception dengan tipe SebuahException
// atau
subclass-nya. Info tentang exception bisa
// ditemukan
dalam object e1
}
catch (SatuLagiException e2) {
// Menangani
exception dengan tipe SatuLagiException
// atau
subclass-nya. Info tentang exception bisa
// ditemukan
dalam object e2
}
finally {
// Statement
yang pasti dijalankan, bagaimanapun
// flow control
berakhir dalam try block.
}
Prinsip-prinsip OOP
o
•Prinsip utama OOP:
o
–Abstraction: membuang detail yang “tidak
penting”
o
–Encapsulation: menggabungkan data dan prosedur
di dalam sebuah object
o
–Inheritance: tambahkan fungsionalitas dengan
membuat subclass baru
o
–Polymorphism: “banyak bentuk”; Dalam Java, ada
2 jenis:
§
•Overloading: polymorphism secara trivial
§
•Overriding: polymorphism yang sebenarnya
Overloading
o
•Memakai nama sama untuk method berbeda
o •Method-method
ini dibedakan berdasarkan signature-nya:
o
–Jumlah parameter
o
–Tipe parameter
o
–Urutan parameter
o •Perhatikan
bahwa signature tidak tergantung
o
–Nama parameter
o
–Return type
o
•Overloading ditangani pada saat kompilasi (static binding)
Overriding
o
•Sebuah method yang memiliki nama dan signature
yang sama dengan method dari superclass.
o •Method
dari subclass dikatakan meng-override method dari superclass.
o
•Ditangani pada saat runtime (dynamic binding):
instance type menentukan method mana yang digunakan.
Polymorphism
o
•Dalam mendefinisikan method untuk sebuah
subclass, ada tiga kemungkinan:
o
–override a method from the superclass: Nama dan
signature sama dengan method milik superclass.
o
–inherit method from the superclass: Methods
yang tidak ditulis ulang otomatis akan diturunkan kepada seluruh subclass.
o
–create a new method: Nama dan signature berbeda
dengan method milik superclass
o •Ketika
sebuah method dari sebuah object dipanggil (called), class/type dari object
tersebut menentukan implementasi method yang mana yang akan dijalankan.
o •Sebuah
method/field dapat atau tidaknya dipanggil/diakses ditentukan oleh tipe
reference variable & access specifier.
o •Kata
kunci (keyword) “super” berfungsi sebagai reference terhadap object tapi
diperlakukan sebagai instance dari superclass.
o
•Polymorphism dapat diartikan bahwa sebuah
object dapat memiliki banyak ‘bentuk’, yaitu sebagai object dari class-nya
sendiri atau sebagai object dari superclass-nya.
Abstract Class
o
Abstract class sangat bermanfaat untuk menyimpan
aspect generic dari subclass-nya.
o Sebuah
method dapat didefinisikan tanpa implementasi dengan menyatakan method tersebut
sebagai abstract.
o Abstract
method tidak memiliki body, body –nya ‘digantikan’ dengan (;).
o Sebuah
Class yang memiliki abstract method harus dinyatakan sebagai abstract class.
o Abstract
class tidak dapat dibuatkan langsung instance-nya. (objectnya)
o Subclass
dari abstract class dapat di buat instance-nya jika subclass override dan
implement eluruh abstract methods dari superclass-nya.
o Jika
sebuah subclass dari sebuah abstract class tidak meng-implement seluruh
abstract
o
methods dari superclass, maka subclass tersebut
adalah abstract class juga.
public abstract
class Shape{
public abstract
double area ();
public abstract
double circumference ();
}
public class Circle extends Shape{
protected
double radius;
public Circle
(double r){
radius =
r;
}
public Circle
(){
this
(1.0);
}
public double
area (){
return Math.PI
* radius * radius;
}
public double
circumference (){
return 2
* Math.PI * radius;
}
public double
getRadius (){
return
radius;
}
} public class Rectangle extends Shape{
protected
double length, width;
public
Rectangle (double length, double width)
{ this.length = length;
this.width
= width;
}
public
Rectangle ()
{ this (1.0, 1.0);
}
public double
area ()
{ return length * width;
}
public double
circumference ()
{ return 2 * (length + width);
}
public double
getLength ()
{ return length;
}
public double
getWidth ()
{ return width;
}
} public class Square extends Rectangle
{
public
BujurSangkar (double edge)
{
super
(edge, edge);
}
public
BujurSangkar ()
{
this (1.0);
}
public double
getEdge ()
{
return
length;
}
} public class TryShape {
public static
void main (String args[]){
Shape[]
shape2 = new Shape[3];
shape2[0] =
new Circle (3.0);
shape2[1] =
new Rectangle (1.0, 2.0);
shape2[2] =
new Square (4.0);
double totalArea
= 0.0;
double
totalCircumference = 0.0;
for (int ii
= 0; ii < Shape2.length; ii++) {
totalArea += shape2[ii].luas();
totalCircumference += shape2[ii].keliling();
}
System.out.println (“Total Area = " + totalArea);
System.out.println (“Total Circumference = "
+
totalCircumference);
}
}
Interface
o
Sebuah class hanya boleh meng-extend satu
superclass, tapi boleh mengimplement banyak interface.
o Ketika
meng-extend superclass, sebuah class mewarisi interface (definisi method) dan
juga implementasinya.
o Ketika
meng-implement interface, sebuah class hanya mewarisi interface (definisi
method).
o
Contoh: sifat generik “comparable” didefinisikan
di dalam sebuah interface:
public interface
Comparable {
public int
compareTo (Object ob);
}
–compareTo
mengembalikan:
o
•<0: object this “lebih kecil” dari parameter
‘ob’
o
•0: object this sama nilainya dengan parameter
‘ob’
o
•>0: object this “lebih besar” dari parameter
‘ob’
Contoh: interface
public class CircleComparable extends Circle
implements
Comparable
{
public
CircleComparable (double r)
{super (r);}
public int
compareTo (Object other)
{
CircleComparable otherCircle =
(CircleComparable) other;
if (radius
< otherCircle.getRadius ())
{return
-1;}
else if
(radius > otherCircle.getRadius ())
{return 1;}
else
{return 0;}
}
}
Interface
o
•Seluruh methods dalam sebuah interface adalah
abstract method (keyword abstract dapat dinyatakan tapi optional)
o •Seluruh
variables dalam sebuah interface harus dinyatakan static dan final (constant)
o •Class
yang mengimplementasikan sebuah interface, harus memberikan implementation
o (menuliskan
method body) untuk seluruh method yang diturunkan dari interface.
o •Sebagai
mana class, interface adalah tipe data (data type).
o •Interface
dapat juga digunakan untuk menyatakan constant values.
o •Sebuah
interface dapat meng-extends satu atau lebih interfaces.
o •Sebuah
sub-interface menurunkan seluruh abstract method dan constants dari
super-interfaces.
o •Sub-interface
dapat menambahkan new abstract methods dan juga new constants.
o
•Contoh:
public interface DrawingObject
extends
Drawable, Transformable {
... }
public class Shape
implements
DrawingObject { ... }
Ringkasan
o
•Tipe data dalam Java: primitive dan reference
o •Dalam
meng-evaluasi sebuah expression, perhatikan precedence dan associativity dari
operator, dan tipe operand
o •Flow
Control: branch, loop
o •Class
& Object
o
–Object adalah instance dari class
o
–Behaviour sebuah object dinyatakan dalam method
o
–State sebuah object is dinyatakan dalam field
o •Memperbesar
ukuran array tidak efisien
o •Abstract
Class: menyimpan aspect generic dari subclass-nya.
o •Interface:
Sekelompok method tanpa implementasi untuk menyamakan standarisasi penggunaan
dengan implementasi yang bisa berbeda-beda.
o
•Exception digunakan untuk mengindikasikan
kondisi special yang dapat terjadi.
0 Komentar Sahabat:
Post a Comment
Jadilah yang pertama...