Pemrograman Lanjut Dosen: Dr. Eng. Herman Tolle

dokumen-dokumen yang mirip
MODUL PRAKTIKUM PEMROGRAMAN BERORIENTASI OBJEK (JAVA) PERTEMUAN 9 POLIMORFISME (POLYMORPHISM)

1. Pelajari program berikut,kemudian modifikasi program dengan ketentuan berikut

ABSTRACT CLASS & INTERFACE

Overriding. Subclass yang berusaha memodifikasi tingkah laku yang diwarisi dari superclass. Tujuan: subclass memiliki tingkah laku yang lebih

INHERITANCE AND POLIMORPHISM PUTU INDAH CIPTAYANI JURUSAN SISTEM INFORMASI STMIK AMIKOM

KONSEP OOP: POLYMORPHISM

Inheritance dan Kata Kunci static

Inheritance (Pewarisan) Pengertian dasar inheritance

Konsep Inheritance. Praktikum 8 Pemrograman Berbasis Obyek

KONSEP OOP: POLYMORPHISM

Bahasa Pemrograman :: Polimorfism and Abstraction

KARAKTERISTIK PEMROGRAMAN BERORIENTASI OBJEK (OOP) Pemrograman berorientasi Objek mempunyai karakterisitik sebagai berikut:

Pemrograman Berorientasi. Inheritance

Pertemuan 4 Halaman 1/1. Class Inheritance

ENKAPSULASI Data Hiding

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA STACK

Konsep Dasar Pemrograman Berorientasi Objek

ABSTRACT & INTERFACE. Pemrograman Lanjut Herman Tolle

Pemrograman Berorientasi. Class dan Obyek 2

Overriding, Overloading, Polymorphism. Pertemuan 10 Pemrograman Berbasis Obyek Dr. Rodiah

PRAKTIKUM III & IV PEMROGRAMAN BERORIENTASI OBJEK

5/23/12. Inheritance. Pengertian inheritance Deklarasi inheritance Single inheritance Multilevel inheritance Access Control super keyword

Overriding Overloading Polymorphism

ENKAPSULASI PEMROGRAMAN LANJUT. Dr. Eng. Herman Tolle. Teknik Informatika PTIIK UB Semester Genap 2015/2016

Pemrograman Lanjut Tipe Data dan Constructor PTIIK

1. Keyword mana yang memiliki fungsi sama dengan keyword this dan menyediakan reference ke atribut turunan dari objek? super

BAB 7 OVERLOADING DAN OVERRIDING

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA GENERIC DAN IMPLEMENTASI COMPARETO()

Bahasa Pemrograman :: Inheritance

Apa yang menjadi output potongan kode diatas? Error karena tidak ada String yang di-passing kedalam konstruktor Bapak

1. Manakah jawaban yang benar,pada saat Anda mengcompile dan menjalankan class berikut ini:

POLIMORPHISM PEMROGRAMAN LANJUT. Dr. Eng. Herman Tolle. Sistem Informasi FILKOM UB Semester Genap 2016/2017

KONSEP OOP: FINAL & STATIC

E-Book PEMROGRAMAN BERORIENTASI OBJEK. Disusun Oleh: Arfian Hidayat, S.Kom

Gambar 1: Hirarki class

Gambar 1. Single Linked List

(INHERITANCE) Nurochman

1.Tujuan. 2. Latar Belakang. Mendefinisikan superclasses dan subclasses Override method dari superclasses Membuat method final dan class final

Dengan menggunakan encapsulation kita dapat membatasi akses langsung suatu class atau program kecuali melalui suatu method yang sudah diberikan.

Employee employee=new Manager();

Polymorphism. Oleh : Agus Priyanto, M.Kom

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA LINKED LIST (BAGIAN 1)

KONSEP OOP: FINAL & STATIC

Pewarisan, Polimorfisme, dan Interface

Konsep Lanjut Pemrograman Objek

Java Fundamentals. Herman Tolle. Program Teknologi Informasi & Ilmu Komputer UNIVERSITAS BRAWIJAYA

Pemrograman Berorientasi Objek Danu Wira Pangestu

IKG2I4 / Software Project I

Modul Bahasa Pemrograman 1

LAPORAN V PRAKTIKUM PEMROGRAMAN BERBASIS OBJEK

2015 BAHASA PEMROGRAMAN I. Pertemuan VI Inheritance (Pewarisan)

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA LAB SHEET PEMROGRAMAN JAVA 2

Praktikum 8 Polymorphism

IKG2I4 / Software Project I

IKG2I4 / Software Project I

LAPORAN RESMI INHERITANCE

Pemrograman Lanjut Class, Instance Variable dan Method PTIIK

MODUL 3. Inheritance, Abstract Class, Interface TUJUAN PRAKTIKUM LANDASAN TEORI. A. Inheritance

Polymorphism (Polimorfisme)

Membuat dan Menggunakan Class

3/31/2011. Tujuan. Inheritance, Polymorphism,& Interfaces. Inheritance / pewarisan. Inheritance / pewarisan. Inheritance / pewarisan

ABSTRACTION, ENCAPSULATION, INHERITANCE & POLYMORPHISM

A. TUJUAN PEMBELAJARAN 1. Mengetahui cara menangani exception dengan cara melempar exception. 2. Mengetahui cara membuat sendiri class exception.

Chapter 10 Polimorphism

BAB 1 PEMROGRAMAN BERORIENTASI OBJEK

KONSEP OOP: PEWARISAN / INHERITANCE

BAHASA PEMROGRAMAN JAVA

Perulangan / Looping

Pemrograman Lanjut. Interface

INHERITANCE. Pelatihan Java 2 Mei 2015 Fakultas Teknologi Informasi Program Studi Teknik Informatika

Pemrograman Berorientasi. Abstract & Interface

UJIAN TENGAH SEMESTER GENAP TA 2011/2012

Inheritance (Pewarisan Sifat) Imam Fahrur Rozi

INTERAKSI ANTAR OBJECT

Object Oriented Programming (OOP) --Inheritance- Saniati STMIK Teknokrat, Bandar Lampung

Pemrograman Berbasis Objek. Interface. Politeknik Elektronika Negeri Surabaya

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA QUEUE

Bahasa Pemrograman 2.

MODUL PRAKTIKUM PEMROGRAMAN BERORIENTASI OBJEK

Praktikum KPLBO Class dan Object I

Latihan Ujian Pemrograman Berorientasi Objek. Semester Genap 2016/2017

Bab 8. Dasar-Dasar OOP

Mata Kuliah : Pemrograman Berbasis Objek Pertemuan : 4

Java Fundamentals. Herman Tolle. Program Teknologi Informasi & Ilmu Komputer UNIVERSITAS BRAWIJAYA

Array. Adharul Muttaqin Universitas Brawijaya Malang. Array

Politeknik Elektronika Negeri Surabaya

PENYELEKSIAN /PERCABANGAN & PERULANGAN Part II. 5 th week Estu Sinduningrum ST,MT

IF PEMROGRAMAN LANJUT TUGAS 1. Oleh : Andri Heryandi, M.T.

Topik. 1. Statement if 2. Statement if..else.. 3. Statement if..else.. If (bertingkat ) 4. Penggunaan Input Keyboard

KONSEP OOP: PEWARISAN / INHERITANCE

Politeknik Elektronika Negeri Surabaya

MODUL PRAKTIKUM BASIS DATA PENGENALAN STRUKTUR DATA DAN KOMPLEKSITAS WAKTU

A. TUJUAN PEMBELAJARAN 1. Memahami mengenai konsep Enum 2. Memahami bentuk-bentuk penggunaan Enum 3. Memahami fungsi-fungsi yang terdapat di Enum

Gambar 1. Langkah-langkah pengurutan metode Insertion Sort (1)

PEWARISAN. Disusun Oleh: Reza Budiawan. Untuk: Tim Dosen Algoritma & Pemrograman Lanjut

Jobsheet 09. Overloading and Overriding Method

Polymorohism in Java. Adharul Muttaqin Teknik Elektro Universitas Brawijaya Malang

Politeknik Elektronika Negeri Surabaya

Praktikum 3 Konsep Class, Attribute dan Method

C#, Programming, Object-oriented. Pengenalan C# Erick Pranata. Edisi I

Transkripsi:

Pemrograman Lanjut Dosen: Dr. Eng. Herman Tolle

2 Case Study: Payroll System Using Polymorphism Create a payroll program Use abstract methods and polymorphism Problem statement 4 types of employees, paid weekly Salaried (fixed salary, no matter the hours) Hourly (overtime [>40 hours] pays time and a half) Commission (paid percentage of sales) Base-plus-commission (base salary + percentage of sales) Boss wants to raise pay by 10%

3 10.9 Case Study: Payroll System Using Polymorphism Superclass Employee Abstract method earnings (returns pay) abstract because need to know employee type Cannot calculate for generic employee Other classes extend Employee Employee SalariedEmployee CommissionEmployee HourlyEmployee BasePlusCommissionEmployee

1 // Fig. 10.12: Employee.java 2 // Employee abstract superclass. 3 4 public abstract class Employee { 5 private String firstname; 6 private String lastname; 7 private String socialsecuritynumber; 8 9 // constructor 10 public Employee( String first, String last, String ssn ) 11 { 12 firstname = first; 13 lastname = last; 14 socialsecuritynumber = ssn; 15 } 16 17 // set first name 18 public void setfirstname( String first ) 19 { 20 firstname = first; 21 } 22 Declares class Employee as abstract class. Employee.java Line 4 Declares class Employee as abstract class. 4

23 // return first name 24 public String getfirstname() 25 { 26 return firstname; 27 } 28 29 // set last name 30 public void setlastname( String last ) 31 { 32 lastname = last; 33 } 34 35 // return last name 36 public String getlastname() 37 { 38 return lastname; 39 } 40 41 // set social security number 42 public void setsocialsecuritynumber( String number ) 43 { 44 socialsecuritynumber = number; // should validate 45 } 46 Employee.java 5

47 // return social security number 48 public String getsocialsecuritynumber() 49 { 50 return socialsecuritynumber; 51 } 52 53 // return String representation of Employee object 54 public String tostring() 55 { 56 return getfirstname() + " " + getlastname() + 57 "\nsocial security number: " + getsocialsecuritynumber(); 58 } 59 60 // abstract method overridden by subclasses 61 public abstract double earnings(); 62 63 } // end abstract class Employee Abstract method overridden by subclasses Employee.java Line 61 Abstract method overridden by subclasses. 6

1 // Fig. 10.13: SalariedEmployee.java 2 // SalariedEmployee class extends Employee. 3 4 public class SalariedEmployee extends Employee { 5 private double weeklysalary; 6 7 // constructor 8 public SalariedEmployee( String first, String last, basic fields. 9 String socialsecuritynumber, double salary ) 10 { 11 super( first, last, socialsecuritynumber ); 12 setweeklysalary( salary ); 13 } 14 15 // set salaried employee's salary 16 public void setweeklysalary( double salary ) 17 { 18 weeklysalary = salary < 0.0? 0.0 : salary; 19 } 20 21 // return salaried employee's salary 22 public double getweeklysalary() 23 { 24 return weeklysalary; 25 } 26 Use superclass constructor for SalariedEmployee.jav a Line 11 Use superclass constructor for basic fields. 7

27 // calculate salaried employee's pay; 28 // override abstract method earnings in Employee 29 public double earnings() 30 { 31 return getweeklysalary(); 32 } Must implement abstract 33 method earnings. 34 // return String representation of SalariedEmployee object 35 public String tostring() 36 { 37 return "\nsalaried employee: " + super.tostring(); 38 } 39 40 } // end class SalariedEmployee SalariedEmployee.jav a Lines 29-32 Must implement abstract method earnings. 8

1 // Fig. 10.14: HourlyEmployee.java 2 // HourlyEmployee class extends Employee. 3 4 public class HourlyEmployee extends Employee { 5 private double wage; // wage per hour 6 private double hours; // hours worked for week 7 8 // constructor 9 public HourlyEmployee( String first, String last, 10 String socialsecuritynumber, double hourlywage, double hoursworked ) 11 { 12 super( first, last, socialsecuritynumber ); 13 setwage( hourlywage ); 14 sethours( hoursworked ); 15 } 16 17 // set hourly employee's wage 18 public void setwage( double wageamount ) 19 { 20 wage = wageamount < 0.0? 0.0 : wageamount; 21 } 22 23 // return wage 24 public double getwage() 25 { 26 return wage; 27 } 28 HourlyEmployee.java 9

29 // set hourly employee's hours worked 30 public void sethours( double hoursworked ) 31 { 32 hours = ( hoursworked >= 0.0 && hoursworked <= 168.0 )? 33 hoursworked : 0.0; 34 } 35 36 // return hours worked 37 public double gethours() 38 { 39 return hours; 40 } 41 42 // calculate hourly employee's pay; 43 // override abstract method earnings in Employee 44 public double earnings() Must implement abstract 45 { method earnings. 46 if ( hours <= 40 ) // no overtime 47 return wage * hours; 48 else 49 return 40 * wage + ( hours - 40 ) * wage * 1.5; 50 } 51 52 // return String representation of HourlyEmployee object 53 public String tostring() 54 { 55 return "\nhourly employee: " + super.tostring(); 56 } 57 58 } // end class HourlyEmployee HourlyEmployee.java Lines 44-50 Must implement abstract method earnings. 10

1 // Fig. 10.15: CommissionEmployee.java 2 // CommissionEmployee class extends Employee. 3 4 public class CommissionEmployee extends Employee { 5 private double grosssales; // gross weekly sales 6 private double commissionrate; // commission percentage 7 8 // constructor 9 public CommissionEmployee( String first, String last, 10 String socialsecuritynumber, 11 double grossweeklysales, double percent ) 12 { 13 super( first, last, socialsecuritynumber ); 14 setgrosssales( grossweeklysales ); 15 setcommissionrate( percent ); 16 } 17 18 // set commission employee's rate 19 public void setcommissionrate( double rate ) 20 { 21 commissionrate = ( rate > 0.0 && rate < 1.0 )? rate : 0.0; 22 } 23 24 // return commission employee's rate 25 public double getcommissionrate() 26 { 27 return commissionrate; 28 } CommissionEmployee.j ava 11

29 30 // set commission employee's weekly base salary 31 public void setgrosssales( double sales ) 32 { 33 grosssales = sales < 0.0? 0.0 : sales; 34 } 35 36 // return commission employee's gross sales amount 37 public double getgrosssales() 38 { 39 return grosssales; 40 } 41 42 // calculate commission employee's pay; 43 // override abstract method earnings in Employee Must implement abstract method earnings. 44 public double earnings() 45 { 46 return getcommissionrate() * getgrosssales(); 47 } 48 49 // return String representation of CommissionEmployee object 50 public String tostring() 51 { 52 return "\ncommission employee: " + super.tostring(); 53 } 54 55 } // end class CommissionEmployee CommissionEmployee.j ava Lines 44-47 Must implement abstract method earnings. 12

1 // Fig. 10.16: BasePlusCommissionEmployee.java 2 // BasePlusCommissionEmployee class extends CommissionEmployee. 3 4 public class BasePlusCommissionEmployee extends CommissionEmployee { 5 private double basesalary; // base salary per week 6 7 // constructor 8 public BasePlusCommissionEmployee( String first, String last, 9 String socialsecuritynumber, double grosssalesamount, 10 double rate, double basesalaryamount ) 11 { 12 super( first, last, socialsecuritynumber, grosssalesamount, rate ); 13 setbasesalary( basesalaryamount ); 14 } 15 16 // set base-salaried commission employee's base salary 17 public void setbasesalary( double salary ) 18 { 19 basesalary = salary < 0.0? 0.0 : salary; 20 } 21 22 // return base-salaried commission employee's base salary 23 public double getbasesalary() 24 { 25 return basesalary; 26 } 27 BasePlusCommissionEm ployee.java 13

28 // calculate base-salaried commission employee's earnings; 29 // override method earnings in CommissionEmployee 30 public double earnings() Override method earnings 31 { 32 return getbasesalary() + super.earnings(); in CommissionEmployee 33 } 34 35 // return String representation of BasePlusCommissionEmployee 36 public String tostring() 37 { 38 return "\nbase-salaried commission employee: " + 39 super.getfirstname() + " " + super.getlastname() + 40 "\nsocial security number: " + super.getsocialsecuritynumber(); 41 } 42 43 } // end class BasePlusCommissionEmployee BasePlusCommissionEm ployee.java Lines 30-33 Override method earnings in CommissionEmployee 14

1 // Fig. 10.17: PayrollSystemTest.java 2 // Employee hierarchy test program. 3 import java.text.decimalformat; 4 import javax.swing.joptionpane; 5 6 public class PayrollSystemTest { 7 8 public static void main( String[] args ) 9 { 10 DecimalFormat twodigits = new DecimalFormat( "0.00" ); 11 12 // create Employee array 13 Employee employees[] = new Employee[ 4 ]; 14 15 // initialize array with Employees 16 employees[ 0 ] = new SalariedEmployee( "John", "Smith", 17 "111-11-1111", 800.00 ); 18 employees[ 1 ] = new CommissionEmployee( "Sue", "Jones", 19 "222-22-2222", 10000,.06 ); 20 employees[ 2 ] = new BasePlusCommissionEmployee( "Bob", "Lewis", 21 "333-33-3333", 5000,.04, 300 ); 22 employees[ 3 ] = new HourlyEmployee( "Karen", "Price", 23 "444-44-4444", 16.75, 40 ); 24 25 String output = ""; 26 PayrollSystemTest.ja va 15

27 // generically process each element in array employees 28 for ( int i = 0; i < employees.length; i++ ) { 29 output += employees[ i ].tostring(); 30 31 // determine whether element is a BasePlusCommissionEmployee 32 if ( employees[ i ] instanceof BasePlusCommissionEmployee ) { 33 34 // downcast Employee reference to 35 // BasePlusCommissionEmployee reference 36 BasePlusCommissionEmployee currentemployee = 37 ( BasePlusCommissionEmployee ) employees[ i ]; 38 39 double oldbasesalary = currentemployee.getbasesalary(); 40 output += "\nold base salary: reference $" + oldbasesalary; 41 42 currentemployee.setbasesalary( 1.10 * oldbasesalary ); 43 output += "\nnew base salary with 10% increase is: $" + 44 currentemployee.getbasesalary(); 45 46 } // end if 47 48 output += "\nearned $" + employees[ i ].earnings() + "\n"; 49 50 } // end for 51 Determine whether element is a BasePlusCommissionEmpl oyee Downcast Employee reference to BasePlusCommissionEmployee PayrollSystemTest.ja va Line 32 Determine whether element is a BasePlusCommissionEm ployee Line 37 Downcast Employee reference to BasePlusCommissionEm ployee reference 16

52 // get type name of each object in employees array 53 for ( int j = 0; j < employees.length; j++ ) 54 output += "\nemployee " + j + " is a " + 55 employees[ j ].getclass().getname(); 56 57 JOptionPane.showMessageDialog( null, output ); // display output 58 System.exit( 0 ); array 59 60 } // end main 61 62 } // end class PayrollSystemTest Get type name of each object in employees PayrollSystemTest.ja va Lines 53-55 Get type name of each object in employees array 17

Sebuah perusahaan PUBLISHER mempunyai PEGAWAI Setiap Pegawai memiliki data: Nama, NIP, Alamat, Masa Kerja, Divisi, Jabatan Status Pegawai: Pegawai Tetap, Pegawai Honorer, Trainee Pegawai dibedakan atas Divisi: (Marketing, CopyWriter, Designer, OB) Pegawai dibedakan oleh Jabatan: Manajer dan Staff Setiap divisi ada 1 Manager dan sisanya adalah Staff

Base Salary (Gaji Pokok): 4 juta rupiah Gaji Staff & Trainee : 1x Gaji Pokok Gaji Manajer: 2x Gaji Pokok Tunjangan Masa Kerja: Masa Kerja > 5 tahun: 0,5 Gaji Pokok Masa Kerja > 10 tahun: 1x Gaji Pokok Bonus / Komisi per Divisi: Marketing: 100 ribu / proyek Designer & CopyWriter: 200 ribu / proyek Tunjangan Pegawai Tetap: Uang Transport: 400 ribu Uang Makan: 400 ribu Uang Lembur: 50 ribu / jam Tunjangan Pegawai Honorer: Uang Transport: 400 ribu Uang Lembur: 50 ribu / jam

1. Buatlah Diagram Class untuk representasi Class Pegawai dan kelas turunannya untuk Pegawai Tetap, Pegawai Honorer dan Trainee Lengkapi dengan atribut dan method yang berkesesuaian Buat ABSTRACT Method untuk perhitungan Gaji Take Home Pay (Total) 2. Buat Implementasi Code Class dan Implementasi Program Test dengan kondisi sbb: 1. Minimal ada 10 orang pegawai (disebar pada setiap Divisi, ada yang berstatus pegawai tetap, honorer maupun Trainee) 2. Output berupa rekap data Pegawai dalam bentuk Tabel beserta jumlah Gaji Bulan Mei 2014 serta Total Jumlah Gaji yang dibayarkan Perusahaan. 3. Program bersifat Modular Set GajiPokok sebagai KONSTANTA (Final Atribut) Set Nilai Koefisien Perhitungan Gaji dalam bentuk Variabel

Membuat Diagram Class Menentukan Atribut Menentukan Method Membuat Code Program Running Program Membuat Laporan Mengirimkan ke Email Dosen

Pegawai Marketing1 = new PegawaiTetap ( David Becham, 050611,6, manager, marketing ) Marketing1.setJumlahProyek(10); Pegawai[] ArrayEmployee=new Pegawai[10]; ArrayEmployee[0]=Marketing1; ArrayEmployee[1]=b; ArrayEmployee[2]=c; ArrayEmployee[3]=d; for(int i=0;i<arrayemployee.length;i++){ double s = ArrayEmployee[i].TotalSalary; System.out.println( Total Gaji + +s); }

APLIKASI PAYROL PT XXX Daftar Gaji Pegawai Bulan: Mei 2014 No NAMA NIP Divisi Jabatan Rincian Gaji Gaji Total 1. Gaji Pokok: Tunjangan A: Tunjangan B: 2. 3. Total Gaji Pegawai Dibuat menggunakan array dan looping Rp. xxx.xxx.xxx Rp. xxx.xxx.xxx

Gaji THP PegawaiTetap = (GP * koefisienjabatan) + TunjanganMasaKerja + TunjanganPegawaiTetap + Bonus; TunjanganMasaKerja = (MasaKerja > 5? 0.5*GP : 0) TunjanganMasaKerja = (MasaKerja > 10? GP : 0) TunjanganPegawaiTetap = Bonus = koefisiendivisi * jumlahproyek