Pemrograman Berbasis Objek
Politeknik Elektronika Negeri Surabaya
Class Wrapper
Yuliana Setiowati
Pemrograman Berbasis Objek
Tujuan dari Class Wrapper
• Class wrapper pada Java API mempunyai dua tujuan:
– Menyediakan mekanisme untuk membungkus (wrap) nilai
dengan tipe data primitif menjadi sebuah object, sehingga nilai
primitif tadi bisa digunakan dalam kegiatan yang berhubungan
dengan object, seperti menambahkan ke Collection, return type
dari method berupa object. Di JDK 1.5 operasi wrapping
dilakukan secara otomatis.
Politeknik Elektronika Negeri Surabaya
Class Wrapper
Pemrograman Berbasis Objek
Membuat Object Wrapper
•
Semua class wrapper kecuali Character menyediakan dua constructor.
Pemrograman Berbasis Objek
Politeknik Elektronika Negeri Surabaya
Setiap object wrapper mempunyai
konstanta MAX_VALUE
byteObj = new Byte(Byte.MAX_VALUE);
shortObj = new Short(Short.MAX_VALUE);
intObj = new Integer(Integer.MAX_VALUE);
longObj = new Long(Long.MAX_VALUE);
floatObj = new Float(Float.MAX_VALUE);
doubleObj = new Double(Double.MAX_VALUE);
printNumValues("MAXIMUM NUMBER VALUES:");
Pemrograman Berbasis Objek
Setiap object wrapper mempunyai
konstanta MAX_VALUE
=>
Byte:127
Short:32767
Politeknik Elektronika Negeri Surabaya
Class Wrapper
Method valueOf()
• Method valueOf() mengubah suatu nilai menjadi object
dari class tersebut.
• Class Long, Integer, Short dan Byte mempunyai tiga method
valueOf()
• Method 1 menerima argument berupa nilai.
• Method 2 menerima argument nilai dalam bentuk String.
• Method 3 argument kedua berupa int radix yang menyatakan
base dari argument pertama (binary, octal, atau hexadecimal)
Pemrograman Berbasis Objek
Class Wrapper
Method valueOf()
•
Class Boolean, Float dan Double mempunyai dua method valueOf()
Pemrograman Berbasis Objek
Politeknik Elektronika Negeri Surabaya
Class Wrapper
Method valueOf()
Integer i1 = Integer.valueOf(42);
Integer i2 = Integer.valueOf(“42”);
Boolean b1 = Boolean .valueOf(true);
Boolean b2 = Boolean .valueOf(“true”);
Long n1 = Long.valueOf(42000000L);
Long n1 = Long.valueOf(“42000000L”);
Pemrograman Berbasis Objek
Class Wrapper
xxxValue()
• Digunakan untuk mengubah object dari
class wrapper (object ini mempunyai nilai)
menjadi nilai numerik
Politeknik Elektronika Negeri Surabaya
Class Wrapper -
xxxValue()
Pemrograman Berbasis Objek
Class Wrapper
parseXxx() and valueOf() ?
• Fungsi parseXxx() dan valueOf(), argument berupa
String dan melempar NumberFormatException(NFE) jika
argument tidak sesuai.
Pemrograman Berbasis Objek
Politeknik Elektronika Negeri Surabaya
Class Wrapper
Pemrograman Berbasis Objek
Class Wrapper
toString()
• untuk memungkinkan mendapatkan
representasi yang bermakna dari object
tertentu.
Politeknik Elektronika Negeri Surabaya
Class Wrapper
toXxxString() (Binary, Hexadecimal, Octal)
• Fungsi tsb untuk mengubah bilangan dengan
basis 10 menjadi basis lainnya
• Contoh:
Pemrograman Berbasis Objek
Class Wrapper
Autoboxing/Auto-unboxing
•
Pada Java 5, dikenal istilah autoboxing
•
Autoboxing adalah konversi secara otomatis oleh kompiler Java dari
tipe data primitif ke tipe data sesuai dengan tipe wrappernya
(misalnya, int dan Integer, double dan Double, dll)..
•
Sedangkan mengubah object dari class wrapper menjadi nilai
primitifnya disebut auto-unboxing
Pemrograman Berbasis Objek
Politeknik Elektronika Negeri Surabaya
Contoh
Pemrograman Berbasis Objek
Class Wrapper
Autoboxing
Politeknik Elektronika Negeri Surabaya
Class Wrapper
Autoboxing
• Mengapa object x dan y tidak mengacu pada alamat
yang sama ?
– Karena object dari class Wrapper bersifat immutable artinya
kekal. Sekali object dicreate maka isi objek tidak bisa diubah.
– Jika isi objek diubah maka objek harus mengacu ke alamat yang
berbeda.
Pemrograman Berbasis Objek
Class Wrapper
Boxing, ==, and Equals()
•
Mengapa i1 and i2 dikatakan object yang berbeda, sedangkan i3 and i4 dikatakan
object yang sama ?
– Untuk menghemat memory, dua object dari class wrapper selalu == pada saat
nilai primitif:
• Boolean • Byte
• Character from \u0000 to \u007f (7f is 127 in decimal) • Short and Integer from -128 to 127
Pemrograman Berbasis Objek
Politeknik Elektronika Negeri Surabaya
Class Wrapper
Boxing
Pemrograman Berbasis Objek
Class Abstract
Interface
Politeknik Elektronika Negeri Surabaya
Topik
• Abstract Class
• Interface
Pemrograman Berbasis Objek
Abstract
• Abstract class adalah class yang mempunyai
setidaknya satu abstract method.
• Abstract method adalah method yang tidak
memiliki body (hanya deklarasi method).
Pemrograman Berbasis Objek
Politeknik Elektronika Negeri Surabaya
Abstract
• Abstract class tidak bisa dibuat obyeknya.
• Obyek hanya bisa dibuat dari non-abstract class
(concrete class).
• Konsekuensinya, suatu abstract class haruslah
diturunkan dimana pada subclass tersebut
berisi implementasi dari abstract method yang
ada di super class-nya.
Pemrograman Berbasis Objek
Contoh Class Abstract
Politeknik Elektronika Negeri Surabaya
Abstract
• Bila subclass yang diturunkan dari abstract
class
tidak mengimplementasikan
isi semua
method abstrak parent class, maka subclass
tersebut
harus
tetap dideklarasikan abstract.
• Dan deklarasi method abstract pada subclass
tersebut boleh tidak dituliskan kembali.
Pemrograman Berbasis Objek
Contoh Class Abstract
Class Parent mempunyai
suclass yaitu Class Child. Class
Child harus
mengimplementasikan semua
method abstract yang dimiliki
class Parent.
Pemrograman Berbasis Objek
Politeknik Elektronika Negeri Surabaya
Kegunaan Class Abstract
•
Class Abstract berisi beberapa method non-abstract dan beberapa
method abstract. Class Abstract berisi sebagian implementasi
(method non-abstract) dan subclass yang melengkapi
implementasinya. Dengan kata lain Class Abstract memiliki
beberapa kesamaan (Bagian yang diimplementasikan oleh
subclass) dan memiliki perbedaan (method yang dimiliki sendiri
oleh class abstract)
•
Deklarasikan method abstract, jika ada satu atau lebih subclass
yang diharapkan mempunyai fungsionalitas yang sama tapi
implementasi berbeda.
Pemrograman Berbasis Objek
Kegunaan Class Abstract
• Gunakan class abstract untuk mendefinisikan
behavior secara umum sebagai superclass,
sedangkan subclass menyediakan implementasi
detail.
Politeknik Elektronika Negeri Surabaya
Contoh Class Abstract
•
Kita dapat menggambar lingkaran, persegipanjang garis, kurva
Bezier dan object-object graphic lainnya. Object tersebut
mempunyai state tertentu (seperti: position, orientation, line color,
fill color) dan behaviour secara umum(contoh: moveTo, rotate,
resize, draw). Beberapa state dan behavior ini sama untuk semua
object graphic contoh: position, fill color, and moveTo.
Implementasi yang berbeda sebagai contoh resize or draw. Semua
Object Graphic harus mengetahui bagaimana cara draw dan resize
Pemrograman Berbasis Objek
Contoh Class Abstract 1
class Circle extends GraphicObject {
void draw() {
...
}
void resize() {
...
}
}
class Rectangle extends GraphicObject {
abstract class GraphicObject {
int x, y;
Pemrograman Berbasis Objek
Politeknik Elektronika Negeri Surabaya
Contoh Class Abstract 2
33
Area = 25 (area triangle)
or Area = 50 (area rect)
Pemrograman Berbasis Objek
Abstract : Scenario
Politeknik Elektronika Negeri Surabaya
Shipping
Misal sistem memerlukan report yang melaporkan daftar kendaraan
dan kebutuhan bahan bakar untuk melakukan perjalanan .
Misal terdapat class ShippingMain yang mengumpulkan daftar
kendaraan dan mengenerate Fuel Needs Report
Pemrograman Berbasis Objek
Politeknik Elektronika Negeri Surabaya
Problem 1 : Dimana seharusnya perhitungan jarak dan efisiensi
bahan bakar terjadi?
• Perhitungan efisiensi bahan bakar dan jarak antara
truck dan river barge sangat berbeda.
• Tidak mungkin perhitungan ini dideklarasikan pada
class Vehicle.
• Jadi perhitungan ini harus ada di class Truck dan
RiverBarge.
• Di Vehicle cukup ada abstract method dari perhitungan
ini, sehingga class vehicle ini merupakan abstract class.
Pemrograman Berbasis Objek
Politeknik Elektronika Negeri Surabaya
Solusi
Pemrograman Berbasis Objek
Problem 2
• Perhatikan kembali class FuelNeedsReport.
• Pada class FuelNeedsReport terdapat perhitungan kebutuhan bahan bakar.
• Padahal tidak seharusnya pada class FuelNeedsReport terdapat perhitungan kebutuhan Fuel.
Pemrograman Berbasis Objek
Politeknik Elektronika Negeri Surabaya
Solusi
calcFuelNeeds() disebut
Template Method
karena
calcFuelNeeds() merupakan non-abstract method yang
mengakses method abstract yang diimplementasikan di
subclassnya.
Politeknik Elektronika Negeri Surabaya
Abstract: Ingat!!
• Jangan melakukan:
new Vehicle();
• Bagaimana dengan inisialisai instance atribut class
Vehicle? Gunakan constructor untuk menginisialisasi
(bisa dengan menggunakan this dan super).
Pemrograman Berbasis Objek
Politeknik Elektronika Negeri Surabaya
Interface
• Interface berbeda dengan class.
• Interface berisi method kosong dan
konstanta.
• Method dalam interface tidak mempunyai
statement.
• Sehingga deklarasi method dalam interface
sama dengan deklarasi abstract method
pada abstract class.
Pemrograman Berbasis Objek
Interface
• Method yang dideklarasikan didalam interface
secara otomatis adalah public dan abstract.
• Variable dalam interface secara otomatis
Politeknik Elektronika Negeri Surabaya
Contoh Interface
public interface Relation {
public boolean isGreater( Object a, Object b);
public boolean isLess( Object a, Object b);
public boolean isEqual( Object a, Object b);
}
Pemrograman Berbasis Objek
Mengimplementasikan Interface
• Bila sebuah class mengimplementasikan suatu
interface, maka
semua konstanta dan method interface
akan dimiliki oleh class ini.
• Method pada interface harus diimplementasikan
pada
class yang mengimplementasikan interface ini.
• Bila class yang mengimplementasikan interface tidak
mengimplemetasikan semua method dalam interface,
Pemrograman Berbasis Objek
Politeknik Elektronika Negeri Surabaya
Mengimplementasikan Interface
public interface Relation {
public boolean isGreater( Object a, Object b);
public boolean isLess( Object a, Object b);
public boolean isEqual( Object a, Object b);
}
Pemrograman Berbasis Objek
Implementasi Interface
public class Line implements Relation {
private double x1; private double x2; private double y1; private double y2;
public Line(double x1, double x2, double y1, double y2){ this.x1 = x1;
this.x2 = x2; this.y1 = y1; this.y2 = y2;
Politeknik Elektronika Negeri Surabaya
Implementasi Interface
public boolean isGreater( Object a, Object b){
double aLen = ((Line)a).getLength(); double bLen = ((Line)b).getLength(); return (aLen > bLen);
}
public boolean isLess( Object a, Object b){
double aLen = ((Line)a).getLength(); double bLen = ((Line)b).getLength(); return (aLen < bLen);
}
public boolean isEqual( Object a, Object b){
double aLen = ((Line)a).getLength(); double bLen = ((Line)b).getLength(); return (aLen == bLen);
} }
Pemrograman Berbasis Objek
Implementasi Interface
•
Class Line mengimplementasikan interface Relation, pastikan
semua method yang ada di interface diimplementasikan di class
Line. Jika tidak maka muncul error.
Line.java:4: Line is not abstract and does not override
abstract method
isGreater(java.lang.Object,java.lang.Object) in Relation
public class Line implements Relation
Pemrograman Berbasis Objek
Politeknik Elektronika Negeri Surabaya
Inheritance pada Interface
• Kita bisa membuat subinterface dengan menggunakan
kata extends.
• Satu class boleh mengimplementasikan lebih dari satu
interface.
• Suatu interface boleh mengextends lebih dari satu
interface.
Pemrograman Berbasis Objek
Inheritance pada Interface
• Interface bukan bagian dari hirarki class
• Namun interface dapat mempunyai relasi inheritance
public interface PersonInterface {
void doSomething();
Politeknik Elektronika Negeri Surabaya
Mengimplementasikan Multiple Interface
• Satu class boleh mengimplementasikan lebih dari satu
interface.
• Bila suatu class akan dijadikan subclass dan akan
mengimplementasikan interface, maka kata
extends
harus lebih dulu dari
implements
.
Pemrograman Berbasis Objek
Mengimplementasikan Multiple Interface
• A concrete class extends one super class but multiple
Interfaces:
public class ComputerScienceStudent extends Student
implements PersonInterface, AnotherInterface, Thirdinterface{
// All abstract methods of all interfaces
// need to be implemented.
Pemrograman Berbasis Objek
Politeknik Elektronika Negeri Surabaya
Kegunaan Interface
• Semua class yang mengimplementasikan
sebuah interface tertentu berarti class-class
tersebut mengimplementasikan methods yang
sama dengan kata lain class-class tersebut
mempunyai fungsionalitas yang sama.
Pemrograman Berbasis Objek
Interface Flyer dan Airplane
Implementation
Politeknik Elektronika Negeri Surabaya
Multiple Implementation of the Flyer Interface
Pemrograman Berbasis Objek
Gabungan Inheritance dan Implementation
Pemrograman Berbasis Objek
Politeknik Elektronika Negeri Surabaya