11 Abstract Class.pdf

Click here to load reader

  • date post

    13-Jan-2017
  • Category

    Documents

  • view

    219
  • download

    0

Embed Size (px)

Transcript of 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.

  • 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.

  • 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

  • 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()

  • 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

  • 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

  • 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.

  • 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

  • 6/5/2013

    9

    Pemrograman Berbasis Objek

    Politeknik Elektronika Negeri Surabaya

    Contoh

    Pemrograman Berbasis Objek

    Politeknik Elektronika Negeri Surabaya

    Class WrapperAutoboxing

  • 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

  • 6/5/2013

    11

    Pemrograman Berbasis Objek

    Politeknik Elektronika Negeri Surabaya

    Class WrapperBoxing

    Pemrograman Berbasis Objek

    Politeknik Elektronika Negeri Surabaya

    Class AbstractInterface

  • 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).

  • 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

  • 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

  • 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

  • 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();

    }

  • 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

  • 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

  • 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().

  • 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.

  • 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

  • 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

  • 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.

  • 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.

  • 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;

    }

  • 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

  • 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();

    }

  • 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.

    }

  • 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

  • 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.

  • 6/5/2013

    31

    Pemrograman Berbasis Objek

    Politeknik Elektronika Negeri Surabaya

    Example: Multiple Interface