Download - 11 Abstract Class.pdf

Transcript
Page 1: 11 Abstract Class.pdf

6/5/2013

1

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Class Wrapper

Yuliana Setiowati

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

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.

– Untuk menyediakan fungsi-fungsi untuk mendukung tipe data primitif. Sebagian besar fungsi-fungsi ini berkaitan dengan berbagai konversi: konversi primitif ke dan dari objek String, dan mengkonversi primitif dan obyek String ke dan dari basis yang berbeda (atau radix), seperti biner, oktal, dan heksadesimal.

Page 2: 11 Abstract Class.pdf

6/5/2013

2

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Class Wrapper

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Membuat Object Wrapper

• Semua class wrapper kecuali Character menyediakan dua constructor.

Argument berupa String dan nilai primitif

• Pada Java 5 object Boolean dapat digunakan pada kondisi, karena kompiler

secara otomatis “un-box” (membuka) Boolean menjadi boolean.

Page 3: 11 Abstract Class.pdf

6/5/2013

3

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

Politeknik Elektronika Negeri Surabaya

Setiap object wrapper mempunyai konstanta MAX_VALUE

=>

Byte:127

Short:32767

Integer:2147483647

Long:9223372036854775807

Float:3.4028235E38

Double:1.7976931348623157E308

Page 4: 11 Abstract Class.pdf

6/5/2013

4

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Class WrapperMethod 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

Politeknik Elektronika Negeri Surabaya

Class WrapperMethod valueOf()

• Class Boolean, Float dan Double mempunyai dua method valueOf()

• Sedangkan untuk Character hanya mempunyai satu method

valueOf()

Page 5: 11 Abstract Class.pdf

6/5/2013

5

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Class WrapperMethod 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

Politeknik Elektronika Negeri Surabaya

Class WrapperxxxValue()

• Digunakan untuk mengubah object dari

class wrapper (object ini mempunyai nilai)

menjadi nilai numerik

Page 6: 11 Abstract Class.pdf

6/5/2013

6

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Class Wrapper - xxxValue()

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Class WrapperparseXxx() and valueOf() ?

• Fungsi parseXxx() dan valueOf(), argument berupa String dan melempar NumberFormatException(NFE) jika argument tidak sesuai.

• Perbedaan:

• parseXxx() mengembalikan nilai primitif.

• valueOf() mengembalikan object dari class wrapper

Page 7: 11 Abstract Class.pdf

6/5/2013

7

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Class Wrapper

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Class WrappertoString()

• untuk memungkinkan mendapatkan

representasi yang bermakna dari object

tertentu.

Page 8: 11 Abstract Class.pdf

6/5/2013

8

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Class WrappertoXxxString() (Binary, Hexadecimal, Octal)

• Fungsi tsb untuk mengubah bilangan dengan basis 10 menjadi basis lainnya

• Contoh:

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Class WrapperAutoboxing/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

• Contoh

Page 9: 11 Abstract Class.pdf

6/5/2013

9

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Contoh

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Class WrapperAutoboxing

Page 10: 11 Abstract Class.pdf

6/5/2013

10

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Class WrapperAutoboxing

• 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

Politeknik Elektronika Negeri Surabaya

Class WrapperBoxing, ==, 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

Page 11: 11 Abstract Class.pdf

6/5/2013

11

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Class WrapperBoxing

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Class AbstractInterface

Page 12: 11 Abstract Class.pdf

6/5/2013

12

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Topik

• Abstract Class

• Interface

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Abstract

• Abstract class adalah class yang mempunyai setidaknya satu abstract method.

• Abstract method adalah method yang tidak memiliki body (hanya deklarasi method).

Page 13: 11 Abstract Class.pdf

6/5/2013

13

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 tersebutberisi implementasi dari abstract method yang ada di super class-nya.

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Contoh Class Abstract

Teori.Parent is abstract; cannot be instantiated

Parent p = new Parent();1 error

Tidak bisa membuat

object dari class abstract

Page 14: 11 Abstract Class.pdf

6/5/2013

14

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Abstract

• Bila subclass yang diturunkan dari abstract class tidak mengimplementasikan isi semuamethod abstrak parent class, maka subclass tersebut harus tetap dideklarasikan abstract.

• Dan deklarasi method abstract pada subclass tersebut boleh tidak dituliskan kembali.

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Contoh Class Abstract

Class Parent mempunyaisuclass yaitu Class Child. Class Child harusmengimplementasikan semuamethod abstract yang dimilikiclass Parent.

Jika tidakmengimplementasikan atauhanya sebagianmengimplementasikan semuamethod abstract yang dimilikiclass Parent maka class Child harus dideklarasikan abstract

Page 15: 11 Abstract Class.pdf

6/5/2013

15

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

Politeknik Elektronika Negeri Surabaya

Kegunaan Class Abstract

• Gunakan class abstract untuk mendefinisikanbehavior secara umum sebagai superclass, sedangkan subclass menyediakan implementasidetail.

• Jika class abstract tersebut semua method merupakan method abstract, sebaiknya class abstract tersebut diganti menjadi Interface (dijelaskan selanjutnya)

30

Page 16: 11 Abstract Class.pdf

6/5/2013

16

Pemrograman Berbasis Objek

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

Politeknik Elektronika Negeri Surabaya

Contoh Class Abstract 1

class Circle extends GraphicObject {void draw() {

...}void resize() {

...}

}class Rectangle extends GraphicObject {

void draw() {...

}void resize() {

...}

}

abstract class GraphicObject {

int x, y;

...

void moveTo(int newX, int newY) {

...

}

abstract void draw();

abstract void resize();

}

Page 17: 11 Abstract Class.pdf

6/5/2013

17

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Contoh Class Abstract 2

33

Area = 25 (area triangle) or Area = 50 (area rect)

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Abstract : Scenario

Page 18: 11 Abstract Class.pdf

6/5/2013

18

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

ShippingMisal sistem memerlukan report yang melaporkan daftar kendaraandan kebutuhan bahan bakar untuk melakukan perjalanan .Misal terdapat class ShippingMain yang mengumpulkan daftarkendaraan dan mengenerate Fuel Needs Report

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Page 19: 11 Abstract Class.pdf

6/5/2013

19

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

• Italic font digunakan untuk menggambarkan element yang bersifat abstract.

• Pada abstract class Vehicle terdapat dua buah method abstract yaitu calcFuelEfficiency() dan calcTripDistance().

Page 20: 11 Abstract Class.pdf

6/5/2013

20

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Solusi

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Problem 2• Perhatikan kembali class FuelNeedsReport.

• Pada class FuelNeedsReport terdapat perhitungan kebutuhan bahan bakar.

• Padahal tidak seharusnya pada class FuelNeedsReport terdapat perhitungan kebutuhanFuel.

• FuelNeedsReport hanya bertugas membuat report saja.

Page 21: 11 Abstract Class.pdf

6/5/2013

21

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Solusi

calcFuelNeeds() disebut Template Method karenacalcFuelNeeds() merupakan non-abstract method yang mengakses method abstract yang diimplementasikan disubclassnya.

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Page 22: 11 Abstract Class.pdf

6/5/2013

22

Pemrograman Berbasis Objek

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

Page 23: 11 Abstract Class.pdf

6/5/2013

23

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

Politeknik Elektronika Negeri Surabaya

Interface

• Method yang dideklarasikan didalam interface secara otomatis adalah public dan abstract.

• Variable dalam interface secara otomatis adalah public, static, dan final.

Page 24: 11 Abstract Class.pdf

6/5/2013

24

Pemrograman Berbasis Objek

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

Politeknik Elektronika Negeri Surabaya

Mengimplementasikan Interface

• Bila sebuah class mengimplementasikan suatuinterface, maka semua konstanta dan method interface akan dimiliki oleh class ini.

• Method pada interface harus diimplementasikan padaclass yang mengimplementasikan interface ini.

• Bila class yang mengimplementasikan interface tidakmengimplemetasikan semua method dalam interface, maka class tersebut harus dideklarasikan abstract.

Page 25: 11 Abstract Class.pdf

6/5/2013

25

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

Politeknik Elektronika Negeri Surabaya

Implementasi Interfacepublic 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;

}

public double getLength(){

double length = Math.sqrt((x2-x1)*(x2-x1) +

(y2-y1)* (y2-y1));

return length;

}

Page 26: 11 Abstract Class.pdf

6/5/2013

26

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Implementasi Interfacepublic 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

Politeknik Elektronika Negeri Surabaya

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

^

1 error

Page 27: 11 Abstract Class.pdf

6/5/2013

27

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Inheritance pada Interface

• Kita bisa membuat subinterface dengan menggunakankata extends.

• Satu class boleh mengimplementasikan lebih dari satuinterface.

• Suatu interface boleh mengextends lebih dari satuinterface.

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Inheritance pada Interface

• Interface bukan bagian dari hirarki class

• Namun interface dapat mempunyai relasi inheritance

public interface PersonInterface {

void doSomething();

}

public interface StudentInterface extends PersonInterface {

void doExtraSomething();

}

Page 28: 11 Abstract Class.pdf

6/5/2013

28

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Mengimplementasikan Multiple Interface

• Satu class boleh mengimplementasikan lebih dari satuinterface.

• Bila suatu class akan dijadikan subclass dan akanmengimplementasikan interface, maka kata extendsharus lebih dulu dari implements.

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

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.

}

Page 29: 11 Abstract Class.pdf

6/5/2013

29

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

Politeknik Elektronika Negeri Surabaya

Interface Flyer dan Airplane Implementation

Page 30: 11 Abstract Class.pdf

6/5/2013

30

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Multiple Implementation of the Flyer Interface

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Gabungan Inheritance dan Implementation

Airplane is a Vehicle

Bird is an Animal

Superman is an Animal and is a HomoSapien

Kelemahan multiple inheritance adalah suatu class bisamewarisi method dari lebih dari satu class dimanamethod ini tidak diharapkan. Dengan Interface makahal ini bisa dihindari.

Page 31: 11 Abstract Class.pdf

6/5/2013

31

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Example: Multiple Interface