75
Materi Kuliah Minggu 8-14 CS 2223 Pemrograman Berorientasi Objek Program Studi Sarjana Teknik Informatika Institut Teknologi Telkom Bandung 1

Minggu 8-14

Embed Size (px)

DESCRIPTION

Materi Pemrograman Berorientasi Objek IT Telkom

Citation preview

Page 1: Minggu 8-14

Materi Kuliah Minggu 8-14

CS 2223 Pemrograman Berorientasi ObjekProgram Studi Sarjana Teknik Informatika

Institut Teknologi Telkom Bandung

1

Page 2: Minggu 8-14

Pewarisan: Inheritance

CS 2223 Pemrograman Berorientasi ObjekProgram Studi Sarjana Teknik Informatika

Institut Teknologi Telkom Bandung

2

Page 3: Minggu 8-14

Apa yang Disebut Pewarisan ?

3

Page 4: Minggu 8-14

Apa yang Disebut Pewarisan ?

• Kemampuan sebuah kelas untuk mewariskan seluruh atau sebagian atribut dan methodnya ke kelas lain, sehingga atribut dan method tersebut dikenal oleh kelas yang menerima pewarisan tanpa harus menuliskannya.

Atribut panjang dan lebardikenali oleh kelas Balok

Method setPanjang(), setLebar()dan Luas() dikenali oleh kelas

Balok

4

Page 5: Minggu 8-14

Apa yang Disebut Pewarisan ? ( lanjutan )

• Kelas yang mewariskan disebut kelas induk, super class, atau base class.

• Kelas yang menerima pewarisan disebut kelas anak, kelas turunan, atau subclass.

• Merupakan implementasi dari relasi antar kelas generalization-specialization atau “is-a”.

5

Page 6: Minggu 8-14

Bentuk-bentuk Pewarisan• Pewarisan Tunggal (Single

Inheritance)Kelas anak menerima pewarisan dari satu kelas induk.

• Pewarisan Majemuk (Multiple Inheritance)Kelas anak menerima pewarisan dari beberapa kelas induk.

Kelas Induk Kelas Anak

Kelas Induk-1 Kelas Induk-n

Kelas Anak

. . .

6

Page 7: Minggu 8-14

class KelasAnak extends KelasInduk {// Atribut kelas anak// Method kelas anak

}

Pewarisan dalam Java• Dinyatakan dengan menggunakan kata kunci (keyword)

extends:

• Semua atribut dan method dengan access modifier non-private akan diwariskan dari kelas induk ke kelas anak.

• Method yang diwariskan dapat didefinisikan ulang di kelas anak (override).

7

Page 8: Minggu 8-14

Pewarisan dalam Java ( lanjutan )

• Hanya memperbolehkan pewarisan tunggal.

• Pewarisan majemuk harus dinyatakan sebagai pewarisan tunggal yang ditulis secara berjenjang.

Pewarisan majemuk asal

Pewarisan majemuk setelah “transformasi”

8

Page 9: Minggu 8-14

Pewarisan dalam Java ( lanjutan )

• Untuk memanggil konstruktor kelas induk dari kelas anak digunakan notasi super(), dan harus ditulis di baris pertama pada konstruktor kelas anak.

• Untuk memanggil method kelas induk dari kelas anak digunakan notasi super.namaMethod().

public Balok() {super();tinggi = 0;

}

public double getGaji() {double pokok = super.getGaji();return (pokok+lembur);

}9

Page 10: Minggu 8-14

Pewarisan dalam Java ( lanjutan )

• Supaya suatu kelas tidak dapat diwariskan ke kelas lainnya, gunakan modifier final saat mendeklarasikan kelas tersebut.

• Supaya method yang diwariskan tidak dapat di-override di kelas anak, gunakan juga modifier final.

final class NamaKelas {...

}

public final double getGaji() {return (gaji);

}

Kode Program

Kode Program

10

Page 11: Minggu 8-14

Contoh Program Pewarisan

• Contoh 1

– SegiEmpat.java– Balok.java– Driver.java

SegiEmpat

#double panjang#double lebar

+void setPanjang(double p)+void setLebar(double l)+double Luas()

Balok

#double tinggi

+void setTinggi(double t)+double Volume()

11

Page 12: Minggu 8-14

Contoh Program Pewarisan ( lanjutan )

• Contoh 2– Pegawai.java– Staf.java– Manajer.java– Driver.java

Pegawai

#String nama#double gaji

+Pegawai(String n, double g)+String getNama()+double getGaji()

Employee

#double lembur

+Staf(String n, double g)+void setLembur(double l)+double getGaji()

Manajer

#double tunjangan#double bonus+Manajer(String n, double g)+void setTunjangan(double t)+void setBonus(double b)+double getGaji()

12

Page 13: Minggu 8-14

Kapan Pewarisan ?

• Ada beberapa atribut dan method yang sama yang digunakan oleh beberapa kelas berbeda (reduksi penulisan kode).

• Ada satu atau beberapa kelas yang sudah pernah dibuat yang dibutuhkan oleh aplikasi (reusability).

• Ada perubahan kebutuhan fungsional atau featureaplikasi dimana sebagian atau seluruh perubahan tersebut tercakup di satu atau beberapa kelas yang sudah ada (extend).

13

Page 14: Minggu 8-14

14

Kelas Abstrak

• Kelas-kelas yang daripadanya tidak dapat diciptakan/instansiasi objek.

• Dideklarasikan dengan menggunakan kata kunci (modifier) abstract.

• Digunakan apabila kelas induk yang menjadi sumber pewarisan tidak ingin diolah.

abstract class NamaKelas {...

}

Page 15: Minggu 8-14

15

Contoh Penggunaan Kelas AbstrakKode Program• Person.java• Employee.java• Student.java• CobaKelasAbstrak.java

Person {abstract}

-String name

+Person(String n)+String getName()+String getDescription()

Employee

-double salary

+Employee(String n, double s)+double getSalary()+String getDescription()

Student

-String major

+Student(String n, String m)+String getMajor()+String getDescription()

Page 16: Minggu 8-14

16

Interface

• Prototype kelas yang berisi definisi konstanta dan deklarasi method (hanya nama method tanpa definisi kode programnya).

interface Perusahaan {// KonstantaString KOTA = “Bandung”;

// Deklarasi methodvoid setNama(String n);void setAlamat(String a);String getNama();String getAlamat();

}

Page 17: Minggu 8-14

17

Interface ( lanjutan )

• Dalam sebuah interface:– Semua konstanta (atribut) adalah public, static

dan final.– Semua method adalah abstract dan public.– Tidak boleh ada deklarasi konstruktor.

• Interface digunakan untuk menyatakan spefisikasi fungsional beberapa kelas secara umum.

Page 18: Minggu 8-14

Interface

• Dapat dikatakan sebagai bentuk lain agar dapat menerapkan multiple-inheritance

• Namun sebenarnya interface digunakan untuk mendefinisikan suatu fungsionalitas yang dimiliki secara umum oleh beberapa kelas yang tidak terkait dalam hirarki pewarisan

• Misalkan: untuk mobil dan mesin cuci terdapat mekanisme yang sama yaitu on() dan off()

18

Page 19: Minggu 8-14

Interface dalam Java ( lanjutan )

• Pendefinisian sebuah interface dilakukan seperti sebuah kelas dengan menggunakan katakunci interface

• Sebuah kelas dapat menggunakan interface dengan menggunakan kata kunci implements (sebuah kelas dapat mengimplements lebih dari satu interface )

public interface StartStop {public void start();public void stop();

}

public class Mobil implements StartStop {/* wajib menuliskan.mengimplementasikan void start() dan stop() */

}19

Page 20: Minggu 8-14

20

Interface ( lanjutan )

• Definisi method dilakukan di kelas yang menjadi implementasi dari interface.class Telkom implements Perusahaan {// Deklarasi atributprivate String nama, alamat;

// Definisi methodpublic void setNama(String n) {

nama = n;}...

}

Page 21: Minggu 8-14

21

Interface ( lanjutan )

• Sebuah kelas dapat menerima pewarisan dari beberapa interface (multiple inheritance).

Interface-1<<interface>>

Interface-2<<interface>>

Kelas

class Kelas implements Interface1, Interface2 {

// Atribut

// Metdod

}

Page 22: Minggu 8-14

Interface• Diagram berikut menandakan bahwa

Kelas Mobil dan Kelas MesinCuci menggunakan interface StartStop sehingga wajib untuk mengimplementasikan method yang ada dalam interface StartStop

• Kata kunci implements digunakan untuk menyatakan sebuah kelas menggunakan/implements sebuah interface (dalam java)

22

<<interface>>StartStop

+ void Start()+ void Stop

Mobil

.......

.........

Mesin Cuci

......

.........

Page 23: Minggu 8-14

23

Contoh Interface

• Interface– StartStop.java

• Kelas implementasi– UseStartStop.java

Page 24: Minggu 8-14

24

Page 25: Minggu 8-14

25

Ketentuan

• Kelas Pegawai adalah kelas abstrak

• Gaji pokok ditentukan berdasarkan golongan:– Golongan = ’A’, gaji pokok = 3.000.000– Golongan = ’B’, gaji pokok = 2.000.000– Golongan = ’C’, gaji pokok = 1.000.000

• Uang lembur dihitung dari jam lembur x 30.000

• Seorang pegawai dianggap lembur jika jam kerja > 8

• Gaji Bersih = Gaji Pokok + Uang Lembur

Page 26: Minggu 8-14

26

Contoh Tampilan Output

getDetail() di kelas Pegawai

getDetail() di kelas Manager

getDetail() di kelas Staf

Page 27: Minggu 8-14

Interface vs Class Abstrak

27

Page 28: Minggu 8-14

Polymorphism

CS 2223 Pemrograman Berorientasi ObjekProgram Studi Sarjana Teknik Informatika

Institut Teknologi Telkom Bandung

28

Page 29: Minggu 8-14

Apa yang Disebut Polimorfisme ?

29

Page 30: Minggu 8-14

Apa yang Disebut Polimorfisme ?

• The ability of objects belonging to different types to respond to method calls of the same name, each one according to an appropriate type-specific behavior[Wikipedia].

• The ability of a variable entity or data structure element, at run time, to become attached to objects of different types [Meyer].

• A concept where a single name may denote objects of different classes that are related by some common base class [Booch].

30

Page 31: Minggu 8-14

Apa yang Disebut Polimorfisme ? ( lanjutan )

• Kemampuan suatu objek untuk digunakan di banyak tujuan berbeda dengan nama yang sama.

• Kemampuan objek dalam memberikan respon yang berbeda terhadap message yang mempunyai nama yang sama.

• Disebut juga:– dynamic binding– late binding– run-time binding

31

Page 32: Minggu 8-14

Gambaran Polimorfisme// Program Utamaclass TesPoligon {Poligon p = new Poligon();...

SegiEmpat s = new SegiEmpat();SegiTiga t = new SegiTiga();Lingkaran l = new Lingkaran();

p = s; // ok krn instan kelas anak juga instan kelas induk...

}

Poligon

SegiEmpat SegiTiga Lingkaran

variabel p menunjukobjek yang diciptakan dari

kelas Poligon variabel s menunjuk objekyang diciptakan dari kelas

SegiEmpat

variabel p diubah sehinggamenunjuk objek dari kelas

SegiEmpat32

Page 33: Minggu 8-14

Gambaran Polimorfisme ( lanjutan )

Poligon

SegiEmpat

p

s

Poligon p = new Poligon();

SegiEmpat s = new SegiEmpat();

Sebelum:

Poligon

SegiEmpat

p

s

p = s;

Sesudah:

33

Page 34: Minggu 8-14

Gambaran Polimorfisme ( lanjutan )

class SegiEmpat {. . .public String display() {return ("Segi Empat"+ "\no Panjang : " + getPanjang()+ "\no Lebar : " + getLebar()+ "\no Luas : " + Luas()+ "\no Keliling : " + Keliling());

}}

class Lingkaran {. . .public String display() {

return (“Lingkaran"+ "\no jari-jari: " + getRadius()+ "\no Luas : " + Luas()+ "\no Keliling : " + Keliling());

}}

class TesPoligon {public static void main(String args[]){

// Deklarasi arrayPoligon[] p = new Poligon[2];

// Add array poligonp[0] = new SegiEmpat(17, 8);p[1] = new Lingkaran(10);

// Display informasifor (int i=0; i<p.length; i++) {System.out.println(p[i].display());

}}

}

Method display () yang dieksekusi ditentukan berdasarkan rujukan ke

masing-masing objeknya

34

Page 35: Minggu 8-14

Contoh Polimorfisme

• Array yang berisi bangun geometri berbeda-bedaKelas induk:– Poligon.Java

Kelas anak:– SegiEmpat.java– SegiTiga.java– Lingkaran.java

Program utama:– TesPoligon.java

Poligon

SegiEmpat SegiTiga Lingkaran

35

Page 36: Minggu 8-14

Contoh Polimorfisme ( lanjutan )

Hasil eksekusi method displayInfo() yang dipunyai

masing-masing objek

36

Page 37: Minggu 8-14

Bentuk-bentuk Polimorfisme

• Overloading– Constructor– Method

• OverridingPendefinisian ulang method yang diturunkan kelas induk oleh kelas anak.

37

Page 38: Minggu 8-14

Bentuk-bentuk Polimorfisme ( lanjutan )

• Parameter Coercien

void f(double x) {…

}

f((byte) 1);f((short) 2);f('a');f(3);f(4L);f(5.6F);

This f can be called with any type of parameter Java is willing to coerce to type double

38

Page 39: Minggu 8-14

Bentuk-bentuk Polimorfisme ( lanjutan )

• Sub-type Polymorphismclass Car {void brake() { … }

}

class ManualCar extends Car {void clutch() { … }

}

void g(Car z) {z.brake();

}

void f(Car x, ManualCar y) {g(x);g(y);

}

A subtype of Car is ManualCar

Function g has an unlimited number of types-one for every class we define that is a subtype of Car

That’s subtype polymorphism

39

Page 40: Minggu 8-14

PACKAGE

CS 2223 Pemrograman Berorientasi ObjekProgram Studi Sarjana Teknik Informatika

Institut Teknologi Telkom Bandung

40

Page 41: Minggu 8-14

41

Pengantar

• Many times when we get a chance to work on a small project, one thing we intend to do is to put all java files into one single directory. It is quick, easy and harmless.

• However if our small project gets bigger, and the number of files is increasing, putting all these files into the same directory would be a nightmare for us.

• In java we can avoid this sort of problem by using Packages.

Page 42: Minggu 8-14

42

Apa yang Disebut Package ?

Paket A Paket B Paket C Paket D

You Package Pro Package

Page 43: Minggu 8-14

43

Apa yang Disebut Package ?

• A package is a grouping of related classes and interfaces providing access protection and name space management.

• Packages are nothing more than the way we organize files into different directories according to their functionality, usability as well as category they should belong to.

Page 44: Minggu 8-14

44

Apa yang Disebut Package ? ( lanjutan )

nama package

file-file yang mewakili kelas-kelas yang “dipaketkan”

Page 45: Minggu 8-14

45

Apa yang Disebut Package ? ( lanjutan )

• Packaging help us to avoid class name collision when we use the same class name as that of others.

• Packaging also help us to make types easier to find and use class names, and to control access.

Page 46: Minggu 8-14

46

Membuat Package

• Buat directory yang merepresentasikan tempat package yang akan dibuat.

Page 47: Minggu 8-14

47

// Deklarasi packagepackage namapaket;

// Deklarasi kelaspublic class namakelas {...

}

Membuat Package ( lanjutan )

• Buat kelas (atau interface) yang akan menjadiisi package dengan susunan:

Page 48: Minggu 8-14

48

package namapaket;

Membuat Package ( lanjutan )

Deklarasi Package

• Menggunakan kata kunci package yang ditulis di baris pertamapada file sumber (.java).

Contoh:package MyPackage;package MyPackage.Poligon;

• Hanya boleh ada satu pernyataan package pada setiap file sumber.

Page 49: Minggu 8-14

49

Membuat Package ( lanjutan )

Deklarasi Kelas

• Dinyatakan secara public supaya bisa diakses oleh semua kelas yang berada didalam dan diluar package yang dibuat.

• Jika ada beberapa kelas pada file sumber, hanya boleh ada satu kelas yang dinyatakan secara public, yaitu kelas yang namanya sama dengan nama file sumber.

Page 50: Minggu 8-14

50

SET CLASSPATH = .; D:\Lecture\PBO 2007\Minggu 11\Program;

Membuat Package ( lanjutan )

• Atur variabel lingkungan CLASSPATH sehinggamenunjuk directory tempat dimana package disimpan:

– Melalui Control Panel– Melalui perintah set path di command line

• Kompilasi kelas (atau interface) yang menjadiisi package.

Page 51: Minggu 8-14

51

MyPackage.Poligon.SegiEmpat S;S = new MyPackage.Poligon.SegiEmpat(17, 8);

import MyPackage.Poligon.*;import MyPackage.Poligon.SegiEmpat;

Membuat Package ( lanjutan )

• Gunakan package kelas (atau interface) yang sudahdikompilasi melalui:

– Pernyataan import

– Nama qualified dari kelas (atau interface)

Page 52: Minggu 8-14

52

Contoh Penggunaan Package

• Diagram Kelas:

SegiEmpat SegiTiga Lingkaran

Balok Silinder

<<MyPackage.Poligon>>

Page 53: Minggu 8-14

53

Contoh Penggunaan Package ( lanjutan )

• Nama package:– MyPackage.Poligon

• Kelas yang menjadi isi package:– SegiEmpat.java– SegiTiga.java– Lingkaran.java– Balok.java– Silinder.java

• Kelas yang menggunakan package:– TestPackage.java

Page 54: Minggu 8-14

Persistance

CS 2223 Pemrograman Berorientasi ObjekProgram Studi Sarjana Teknik Informatika

Institut Teknologi Telkom Bandung

54

Page 55: Minggu 8-14

PersistencePersistence is theproperty of an object tbrougb which its existence transcends time (i.e. tbe objectcontinues to exist after its creator ceases to exist) and/or space (i. e. the objects location moves fromthe address space in wbich it was created).

55

Page 56: Minggu 8-14

Pengantar

• Sebuah objek dalam program di-generate pada saat program dieksekusi (objek ini menempati suatu lokasi tertentu pada memori dengan ukuran yang bervariasi)

• Beberapa teori menyatakan bahwa objek ini memiliki waktu hidup (live-time) dimana dalam pembangunan sebuah kelas dikenal istilah konstruktor dan destruktor

56

Page 57: Minggu 8-14

Persistence Spectrum

• Atkinson:– Traditional programming

• Transient result in expression evaluation• Local variabel in procedure activation• Global variabel, heap items (dynamic allocation)

– Data Base Technology• Data that exist between program execution• Data that exist between various program• Data that outlives program

57

Page 58: Minggu 8-14

Ilustrasi Live-time Object

Instansiasi

Object used in program

Some-time Object Saved//Resurect

into/from Storage

Object destroyed

58

Page 59: Minggu 8-14

Persistence Object To File

Object

• Must be able to transform to binary (implements java.io.Serializable)

BinaryStream

• Using io.stream mechanism FileOutputStream

Write Object to File

• Using method writeObject() in ObjectOutputStream

59

Object in File

•Open file with FileInputStream class

ReadObject in File

•Using method readObject() in ObjectInputStream

Write Object to File

•Using method readObject() in ObjectInputStream

Page 60: Minggu 8-14

Implementasi

• Step by step:– Mendefinisikan agar kelas/objek yang akan

disimpan dalam file mengimplements java.io.Serializable

– Pastikan semua kelas/objek yang terlibat juga implements java.io.Serializable

60

Page 61: Minggu 8-14

61

import java.io.Serializable;

public class Teller implements Serializable{private String Nama, NIK;

public String getNama() {return Nama;}

public void setNama(String nama) {Nama = nama;}/*.....*/

Page 62: Minggu 8-14

Kode Untuk Menyimpan

62

public static void main(String[] args) {Teller t1=new Teller();t1.setNama("Teller1");t1.setNIK("123");Teller t2=new Teller();t2.setNama("Teller2");t2.setNIK("124");ArrayList<Teller> a1=new ArrayList<Teller>();a1.add(t1);a1.add(t2);try {FileOutputStream fos=newFileOutputStream("DataTeller.ser");ObjectOutputStream oos=new ObjectOutputStream(fos);oos.writeObject(a1);oos.close();fos.close();} catch (Exception e) {e.printStackTrace();}}

Page 63: Minggu 8-14

Kode Untuk Membaca

63

public static void main(String[] args) {FileInputStream fis;Teller t2;Bank B1;Rekening r1;ArrayList<Teller> a1=new ArrayList<Teller>();System.out.println("Baca File");

try {fis = new FileInputStream("DataTeller.ser");ObjectInputStream ois=new ObjectInputStream(fis);a1=(ArrayList<Teller>)ois.readObject();for (Teller t1:a1){t1.displayInfo();} } catch (Exception e) {e.printStackTrace();

}}

Page 64: Minggu 8-14

• Sebaiknya penulisan beberapa objek dikumpulkan terlebih dahulu dengan menggunakan sebuah Collection sehingga proses penyimpanan cukup 1 kali tulis saja

64

Page 65: Minggu 8-14

65

Page 66: Minggu 8-14

66

import java.util.ArrayList;import java.io.Serializable;

public class Nasabah implements Serializable{private String Nama, Alamat, Email;private ArrayList<Rekening> ListRekening=new

ArrayList<Rekening>();/* method-method terkait disembunyikan*/

import java.util.ArrayList;import java.io.*;

public class Rekening implements Serializable {private String NoRek;private double Saldo;private char JenisRek;private Nasabah Nasabahnya; /* method-method terkait disembunyikan*/

Page 67: Minggu 8-14

Persistance

• Keuntungan menggunakan mekanisme persistance dalam bentuk objek adalah kita dapat menyimpan seluruh elemen-elemen yang terkait dengan objek secara langsung.

• Misalkan pada contoh kelas Nasabah dimana terdapat kelas Rekening didalamnya maka data rekening juga akan ikut tersimpan

67

Page 68: Minggu 8-14

Generic Type

CS 2223 Pemrograman Berorientasi ObjekProgram Studi Sarjana Teknik Informatika

Institut Teknologi Telkom Bandung

68

Page 69: Minggu 8-14

69

IT SALARY

Page 70: Minggu 8-14

70

OOT: Gaji Orang IT

IndoSalaray Guide 2007:

Page 71: Minggu 8-14

71

OOT: Gaji Orang IT ( lanjutan )

2007 IT Salary and Skills Report

Page 72: Minggu 8-14

72

OOT: Gaji Orang IT ( lanjutan )

UK IT Salary Survey 2006-2007:

Page 73: Minggu 8-14

73

Page 74: Minggu 8-14

74

Page 75: Minggu 8-14

75