MODUL 3
Pada paradigma OOP, struktur dari sebuah program dikemas ke dalam sebuah objek yang memiliki
serangkaian properti (properties) dan fungsi (behaviours). Sebagai contoh, aku dapat merepresentasikan
seorang karyawan ke dalam sebuah program melalui konsep OOP.
Seorang karyawan dapat memiliki serangkaian properti seperti nama, usia, keahlian, dll. Kemudian,
seorang karyawan juga dapat memiliki fungsi-fungsi seperti hadir ke kantor, absen, lembur, tugas dinas,
dll.
1. Encapsulation: Menyembunyikan sebagian detail yang dimiliki oleh sebuah objek terhadap
objek-objek lainnya.
2. Inheritance: Menurunkan serangkaian fungsi-fungsi yang dimiliki oleh sebuah objek ke sebuah
objek baru tanpa mengubah makna dari objek acuan yang digunakan.
3. Polymorphism: Konsep untuk menggunakan fungsi-fungsi dengan nama/tujuan yang sama
dengan cara yang berbeda.
Quiz
Paradigma Object Oriented diimplementasikan dengan tujuan untuk menciptakan potongan-potongan kode
yang bersifat reusable dan tidak redundan merupakan salah satu penerapan konsep ... pada paradigma OO.
JAWABAN
DRY
WET
WORA
LOWA
SOLO
Menyembunyikan sebagian detail atribut yang dimiliki oleh sebuah objek merupakan salah satu prinsip ...
pada paradigma OO.
JAWABAN
multi-purposive
inheritance
polymorphism
encapsulation
behaviours
Menurunkan serangkaian fungsionalitas dan atribut yang dimiliki oleh sebuah objek ke objek lainnya
merupakan penerapan prinsip ... pada paradigma OO.
JAWABAN
multi-purposive
inheritance
polymorphism
encapsulation
behaviours
Pada contoh di atas, Aku dan senja merupakan realisasi (objek) dari class Karyawan yang sebelumnya
telah aku buat. Dari potongan kode ini, aksara dan senja adalah dua objek yang berbeda.
1. Class Attribute adalah properti/atribut yang bernilai sama untuk oleh seluruh objek
2. Instance Attribute adalah properti/atribut yang nilainya berbeda-beda untuk setiap objek dari
sebuah class.
Menggunakan potongan kode di atas, nama_perusahaan sebagai class attribute dapat kita akses dengan
menggunakan syntax:
akan menghasilkan output: ABC
Kemudian, sesuai dengan konsep yang telah aku pelajari sebelumnya, saat aku mengubah nilai atribut yang
merupakan sebuah class attribute, nilai dari atribut akan berubah untuk seluruh objek.
Saat perusahaan berubah nama, misalkan nama perusahaan berubah dari 'ABC' ke 'DEF', dikarenakan
atribut nama_perusahaan merupakan sebuah class attribute, aku hanya cukup mengganti nama_perusahaan
pada salah satu objek saja (tidak perlu mengganti nama_perusahaan milik seluruh objek). Contohnya:
Tugas:
Aku di minta untuk mengerjakan tutorial sederhana untuk membantu memahami konsep OOP:
class Karyawan:
nama_perusahaan = 'ABC'
aksara = Karyawan()
senja = Karyawan()
print(aksara.__class__.nama_perusahaan)
# Ubah nama_perusahaan menjadi 'DEF'
aksara.__class__.nama_perusahaan = 'DEF'
print(aksara.__class__.nama_perusahaan)
print(senja.__class__.nama_perusahaan)
Tugas:
Untuk merepresentasikan instance attribute milik Aksara, aku mengetik potongan kode berikut pada live
code editor:
menghasilkan output:
Selanjutnya, untuk merepresentasikan instance attribute milik Senja, aku mengetik potongan kode berikut
pada live code editor:
menghasilkan output:
Penjelasan:
Dari potongan kode di atas, atribut nama, usia
dan pendapatan merupakan contoh dari
instance variabel. Sebagai tambahan,
fungsi __init__() di dalam class Karyawan
secara khusus disebut sebagai constructor.
Melalui sebuah constructor, aku dapat meng-
assign (menginisialisasi) atribut-atribut milik
sebuah objek.
Pada bahasa pemrograman Python, setiap
fungsi (termasuk constructor) akan menerima
dirinya sendiri (self) sebagai parameter pertama
dari fungsi. Kemudian, aku dapat
menambahkan parameter-parameter lain setelah
parameter self sesuai dengan kebutuhan.
Seperti pada contoh di atas, saat objek dibuat
(diinisialisasi), aku dapat melemparkan nama,
usia dan pendapatan melalui syntax,
class Karyawan:
nama_perusahaan = 'ABC'
self.nama = nama
self.usia = usia
self.pendapatan = pendapatan
Quiz
Berdasarkan potongan kode berikut.
class Karyawan:
nama_perusahaan = 'ABC'
def __init__(self, nama, usia, pendapatan):
self.nama = nama
self.usia = usia
self.pendapatan = pendapatan
if usia > 30:
self.pendapatan += 1500000
15500000
17000000
18500000
20000000
25000000
Quiz
Potongan kode di bawah ini.
class Karyawan:
nama_perusahaan = 'ABC'
tunjangan_transportasi = 500000
def __init__(self, nama, usia, pendapatan):
self.nama = nama
self.usia = usia
self.pendapatan = pendapatan
total_pengeluaran = karyawan_1.__class__.tunjangan_transportasi
total_pengeluaran += karyawan_2. __class__.tunjangan_transportasi
total_pengeluaran += karyawan_1.pendapatan
total_pengeluaran += karyawan_2.pendapatan
print(total_pengeluaran)
Akan menghasilkan output.
JAWABAN
10000000
11000000
11500000
12000000
9000000
Tugas:
Untuk menghitung pendapatan tambahan dari jumlah kerja lembur dan jumlah proyek yang diselesaikan
oleh seorang karyawan dan mengakses pendapatan total dari seorang karyawan, aku dapat menuliskan
potongan kode berikut.
untuk menambahkan pendapatan lembur diriku, aku dapat menggunakan fungsi lembur() pada objek
aksara.
untuk menambahkan pendapatan tambahan proyek pada senja, aku dapat mengakses fungsi
tambahan_proyek() pada objek senja
Selanjutnya, aku dapat menghitung total pendapatanku dan Senja
Layaknya proses pendefinisian fungsi pada Python, fungsi-fungsi dalam sebuah class juga dapat memiliki
parameter (seperti fungsi tambahan_proyek dalam contoh) ataupun mengembalikan sebuah nilai (seperti
fungsi total_pendapatan dalam contoh).
class Karyawan:
nama_perusahaan = 'ABC'
insentif_lembur = 250000
self.nama = nama
self.usia = usia
self.pendapatan = pendapatan
self.pendapatan_tambahan = 0
def lembur(self):
self.pendapatan_tambahan += self.insentif_lembur
self.pendapatan_tambahan += insentif_proyek
def total_pendapatan(self):
aksara.lembur()
senja.tambahan_proyek(2500000)
Tugas Praktek
Seperti biasa, aku selalu pusing setiap usai membaca teori data. “Gimana, Aksara?” tanya Senja tanpa
memalingkan perhatian dari laptop.
“Kayaknya butuh praktik deh,” sahutku.
“Oke, ini coba kamu bikin sistem manajemen perusahaan sederhana pakai Object Oriented (OO) ya.
Artinya dalam program ini kamu harus mampu memuat informasi nama, alamat, nomor telepon, dan daftar
karyawan yang bekerja. Satu lagi, jangan lupa masukkan fungsi untuk mengaktifkan dan menonaktifkan
karyawan.”
“Siap. Ini aku masukkan informasi class karyawan juga kali yah?” tanyaku sembari bersiap-siap
memasukkan kode dan mendaftar informasi karyawan secara lebih rapi, mulai dari nama, usia, pendapatan
tetap, tambahan, dan insentif lembur.
“Bagus juga itu. Bikin saja pendapatan mula-mula karyawannya bernilai 0, lalu bisa bertambah oleh fungsi
lembur dan fungsi tambahan proyek sebagai parameter dan variabel pendapatan tambahan karyawan.”
Aku mengangguk dan siap bertempur. Terakhir aku menyelipkan fungsi untuk menghitung total
pendapatan. Ini paling penting, hehehe.
Tugas:
Lengkapi class Karyawan dan class Perusahaan menggunakan potongan kode pada Live Code Editor.
class Karyawan:
self.nama = nama
self.usia = usia
self.pendapatan = pendapatan
self.pendapatan_tambahan = 0
self.insentif_lembur = insentif_lembur
def lembur(self):
self.pendapatan_tambahan += self.insentif_lembur
self.pendapatan_tambahan += jumlah_tambahan
def total_pendapatan(self):
class Perusahaan:
self.nama = nama
self.alamat = alamat
self.nomor_telepon = nomor_telepon
self.list_karyawan = []
self.list_karyawan.append(karyawan)
karyawan_nonaktif = None
if karyawan.nama == nama_karyawan:
karyawan_nonaktif = karyawan
break
Tugas Praktek
Sekitar satu jam lebih berkutat depan laptop, kode aku kelar juga! Tapi, sebelum kutunjukkan pada Senja,
lebih baik aku coba simulasikan dulu. Kuambil post-it kuning di ujung meja dan kugambar tabel berisi
daftar perusahaan dan karyawan sebagai contoh, lengkap dengan pendapatan tetap dan tambahan yang
diterima.
Nama Perusahaan: ABC
Alamat : Jl. Jendral Sudirman, Blok 11
No. Telp : (021) 95205XX
Nama Insentif
Usia Pendapatan
Pekerja Lembur
Ani 25 8500000 100000
Budi 28 12000000 150000
Cici 30 15000000 200000
Kalau sudah seperti ini, tinggal dimasukkan saja ke variabel list_karyawan, lalu operasikan. “Programnya
berhasil!” batinku.
Tanpa kusadari ada tepukan halus di pundakku, itu dari Senja yang ternyata sedari tadi diam-diam
memerhatikan hasil kerjaku.
“Nice try, Aksara.” Aku memandang puas dengan hasil kodeku kali ini.
class Karyawan:
def __init__(self, nama, usia, pendapatan, insentif_lembur):
self.nama = nama
self.usia = usia
self.pendapatan = pendapatan
self.pendapatan_tambahan = 0
self.insentif_lembur = insentif_lembur
def lembur(self):
self.pendapatan_tambahan += self.insentif_lembur
def tambahan_proyek(self, jumlah_tambahan):
self.pendapatan_tambahan += jumlah_tambahan
def total_pendapatan(self):
return self.pendapatan + self.pendapatan_tambahan
class Perusahaan:
def __init__(self, nama, alamat, nomor_telepon):
self.nama = nama
self.alamat = alamat
self.nomor_telepon = nomor_telepon
self.list_karyawan = []
def aktifkan_karyawan(self, karyawan):
self.list_karyawan.append(karyawan)
def nonaktifkan_karyawan(self, nama_karyawan):
karyawan_nonaktif = None
for karyawan in self.list_karyawan:
if karyawan.nama == nama_karyawan:
karyawan_nonaktif = karyawan
break
if karyawan_nonaktif is not None:
self.list_karyawan.remove(karyawan_nonaktif)
#Definisikan perusahaan
perusahaan = Perusahaan('ABC', 'Jl. Jendral Sudirman, Blok 11', '(021) 95205XX')
#Definisikan nama-nama karyawan
karyawan_1 = Karyawan('Ani', 25, 8500000, 100000)
karyawan_2 = Karyawan('Budi', 28, 12000000, 150000)
karyawan_3 = Karyawan('Cici', 30, 15000000, 200000)
#Aktifkan karyawan di perusahaan ABC
perusahaan.aktifkan_karyawan(karyawan_1)
perusahaan.aktifkan_karyawan(karyawan_2)
perusahaan.aktifkan_karyawan(karyawan_3)
Quiz
Berdasarkan potongan kode berikut.
class Karyawan:
nama_perusahaan = 'ABC'
__insentif_lembur = 250000
def __init__(self, nama, usia, pendapatan):
self.__nama = nama
self.__usia = usia
self.__pendapatan = pendapatan
self.__pendapatan_tambahan = 0
def lembur(self):
self.__pendapatan_tambahan += self.__insentif_lembur
def tambahan_proyek(self, insentif_proyek):
self.__pendapatan_tambahan += insentif_proyek
def total_pendapatan(self):
return self.__pendapatan + self.__pendapatan_tambahan
Tentukan output dari potongan kode di atas.
JAWABAN
Potongan kode gagal dijalankan
8500000
8750000
9000000
9250000
Quiz
Berdasarkan potongan kode berikut.
class Karyawan:
nama_perusahaan = 'ABC'
insentif_lembur = 250000
def __init__(self, nama, usia, pendapatan):
self.__nama = nama
self.__usia = usia
self.__pendapatan = pendapatan
self.__pendapatan_tambahan = 0
def lembur(self):
insentif_lembur = self.__insentif_lembur
if usia > 30:
insentif_lembur *= 2
self.__pendapatan_tambahan += insentif_lembur
def tambahan_proyek(self, insentif_proyek):
self.__pendapatan_tambahan += insentif_proyek
def total_pendapatan(self):
return self.__pendapatan + self.__pendapatan_tambahan
8000000
18000000
16000000
17000000
Tugas:
Definisikan class Karyawan pada Live Code Editor:
akan menghasilkan output: 8750000
Selanjutnya,
objek IlmuwanData dapat mengakses fungsi tambahan_proyek milik class Karyawan
akan menghasilkan output: 15000000
Penjelasan:
Melalui potongan kode di atas,
aku telah menerapkan
konsep inheritance. Melalui
konsep inheritance class
AnalisData dan IlmuwanData
akan memiliki setiap atribut
dan fungsi yang dimiliki oleh
class Karyawan (Hal ini
dikarenakan seluruh atribut
dan fungsi
dari class Karyawan
bersifat public).
Pada konsep inheritance, class
AnalisData
dan class IlmuwanData disebut
sebagai child
class dari class Karyawan;
sehingga class Karyawan
dapat disebut sebagai parent
class dari class AnalisData dan
IlmuwanData.
Suatu child class dapat
mengakses atribut ataupun
fungsi yang dimiliki
oleh parent class dengan
menggunakan fungsi super().
Pada contoh di atas, fungsi
super() digunakan oleh child
class (AnalisData dan
IlmuwanData) untuk
mengakses constructor yang
dimiliki oleh parent class
(Karyawan).
Catatan: Sebenarnya, aku
tidak perlu mendefinisikan
kembali fungsi
(termasuk constructor)
ataupun properti yang
memiliki public access
modifier di sebuah child class.
Python akan secara otomatis
mewariskan seluruh fungsi dan
properti dengan public access
modifier ke sebuah child
class. Contoh potongan kode
di atas hanya diperkenankan
untuk mencontohkan
penggunaan fungsi super().
#Definisikan class Karyawan (sebagai base class)
class Karyawan:
nama_perusahaan = 'ABC'
insentif_lembur = 250000
def __init__(self, nama, usia, pendapatan):
self.nama = nama
self.usia = usia
self.pendapatan = pendapatan
self.pendapatan_tambahan = 0
def lembur(self):
self.pendapatan_tambahan += self.insentif_lembur
def tambahan_proyek(self, insentif_proyek):
self.pendapatan_tambahan += insentif_proyek
def total_pendapatan(self):
return self.pendapatan + self.pendapatan_tambahan
#Buat class turunan (sebagai inherit class) dari class karyawan,
#yaitu class AnalisData
class AnalisData(Karyawan):
def __init__(self, nama, usia, pendapatan):
#melakukan pemanggilan konstruktur class Karyawan
super().__init__(nama, usia, pendapatan)
#Buat kembali class turunan (sebagai inherit class) dari class karyawan,
#yaitu class IlmuwanData
class IlmuwanData(Karyawan):
def __init__(self, nama, usia, pendapatan):
#melakukan pemanggilan konstruktur class Karyawan
super().__init__(nama, usia, pendapatan)
#Buat objek karyawan yang bekerja sebagai AnalisData
aksara = AnalisData('Aksara', 25, 8500000)
aksara.lembur()
print(aksara.total_pendapatan())
#Buat objek karyawan yang bekerja sebagai IlmuwanData
senja = IlmuwanData('Senja', 28, 13000000)
senja.tambahan_proyek(2000000)
print(senja.total_pendapatan())
Tugas:
Aku mencoba contoh berikut dengan Live Code Editor
Fungsi lembur pada objek aksara sebagai bagian dari class AnalisData akan menambahkan
total_pendapatan milik objek sebesar 250000 mengikuti insentif_lembur milik class Karyawan
akan menghasilkan output: 8750000
Selanjutnya,
fungsi lembur pada objek senja sebagai bagian dari class IlmuwanData akan menambahkan
total_pendapatan milik objek sebesar 500000 dikarenakan class IlmuwanData telah mendefinisikan
kembali nilai insentif lembur menjadi 500000
akan menghasilkan output: 13500000
#Definisikan class Karyawan (sebagai base class)
class Karyawan:
nama_perusahaan = 'ABC'
insentif_lembur = 250000
def __init__(self, nama, usia, pendapatan):
self.nama = nama
self.usia = usia
self.pendapatan = pendapatan
self.pendapatan_tambahan = 0
def lembur(self):
self.pendapatan_tambahan += self.insentif_lembur
def tambahan_proyek(self, insentif_proyek):
self.pendapatan_tambahan += insentif_proyek
def total_pendapatan(self):
return self.pendapatan + self.pendapatan_tambahan
#Buat class turunan (sebagai inherit class) dari class karyawan,
#yaitu class AnalisData
class AnalisData(Karyawan):
def __init__(self, nama, usia, pendapatan):
#melakukan pemanggilan konstruktur class Karyawan
super().__init__(nama, usia, pendapatan)
#Buat kembali class turunan (sebagai inherit class) dari class karyawan,
#yaitu class IlmuwanData
class IlmuwanData(Karyawan):
# mengubah atribut insentif_lembur yang digunakan pada fungsi lembur()
insentif_lembur = 500000
def __init__(self, nama, usia, pendapatan):
super().__init__(nama, usia, pendapatan)
#Buat objek karyawan yang bekerja sebagai AnalisData
aksara = AnalisData('Aksara', 25, 8500000)
aksara.lembur()
print(aksara.total_pendapatan())
#Buat objek karyawan yang bekerja sebagai IlmuwanData
senja = IlmuwanData('Senja', 28, 13000000)
senja.lembur()
print(senja.total_pendapatan())
Quiz
Berdasarkan potongan kode berikut.
class Burung:
def __init__(self, nama):
self.nama = nama
def fly(self):
print(nama + ' sedang terbang')
class Ayam(Burung):
def fly(self):
print(self.nama + ' tidak bisa terbang')
Quiz
Berdasarkan potongan kode berikut.
class Mamalia:
def __init__(self, nama):
self.__nama = nama
def interaksi(self):
print('Bersuara')
class Anjing(Mamalia):
def interaksi(self):
print('Guk')
class Manusia(Mamalia):
pass
blacky = Anjing('Blacky')
toni = Manusia('Toni')
toni.interaksi()
blacky.interaksi()
Tugas:
Aku menerapkan Polymorphism dengan mengetik potongan kode berikut pada Live Code Editor
Tugas:
Aku menggunakan potongan kode berikut dan mengetiknya pada Live Code Editor:
akan menghasilkan output: 9175000
#Definisikan class Karyawan (sebagai base class)
class Karyawan:
nama_perusahaan = 'ABC'
insentif_lembur = 250000
def __init__(self, nama, usia, pendapatan):
self.nama = nama
self.usia = usia
self.pendapatan = pendapatan
self.pendapatan_tambahan = 0
def lembur(self):
self.pendapatan_tambahan += self.insentif_lembur
def tambahan_proyek(self, insentif_proyek):
self.pendapatan_tambahan += insentif_proyek
def total_pendapatan(self):
return self.pendapatan + self.pendapatan_tambahan
#Buat class turunan (sebagai inherit class) dari class karyawan,
#yaitu class AnalisData
class AnalisData(Karyawan):
def __init__(self, nama, usia, pendapatan):
super().__init__ (nama, usia, pendapatan)
#mendefinisikan kembali fungsi lembur() pada class AnalisData
def lembur(self):
#memanggil fungsi lembur pada class Karyawan
super().lembur()
#pendapatan tambahan pada class AnalisData sebesar
#5 % dari pendapatannya.
self.pendapatan_tambahan += int(self.pendapatan * 0.05)
#Buat objek karyawan yang bekerja sebagai AnalisData
aksara = AnalisData('Aksara', 25, 8500000)
aksara.lembur()
print(aksara.total_pendapatan())
Tugas Praktek
Info: Predefined code telah diperbarui pada tanggal 25 April 2022, pastikan kode yang telah ditulis
disesuaikan kembali.
Aku tak pernah membayangkan diriku benar-benar mengerjakan program untuk kebutuhan perusahaan.
Seperti sekarang, aku sedang mengerjakan rikues untuk memenuhi penghitungan
pembayaran fee karyawan lepas.
Tapi tak apa. Sejak program yang terakhir berhasil, aku sedikit lebih percaya diri untuk menjawab
tantangan baru.
Sembari menyeruput kopi hangat, aku mulai memasukkan informasi yang cukup untuk
membuat class Tenaga Lepas berisi nama, usia, dan pendapatan selama bergabung di sebuah proyek. Lalu,
apa lagi ya?
“Nja, mau nanya. Kalau karyawan lepas, insentif tambahannya dari uang lembur juga?”
“Engga, Aksara. Di kantor kita, karyawan lepas dapat insentif dari proyek yang dikerjakan. Kalau hasilnya
sukses bisa dapat 1% dari nilai proyek.”
“Oke,” aku mencatat itu sebagai penghitungan akhir dan mulai menulis kodenya.
# Definisikan class Karyawan
class Karyawan:
def __init__(self, nama, usia, pendapatan, insentif_lembur):
self.nama = nama
self.usia = usia
self.pendapatan = pendapatan
self.pendapatan_tambahan = 0
self.insentif_lembur = insentif_lembur
def lembur(self):
self.pendapatan_tambahan += self.insentif_lembur
def tambahan_proyek(self,jumlah_tambahan):
self.pendapatan_tambahan += jumlah_tambahan
def total_pendapatan(self):
return self.pendapatan + self.pendapatan_tambahan
# Definisikan class TenagaLepas sebagai child class dari
# class Karyawan
class TenagaLepas(Karyawan):
def __init__(self, nama, usia, pendapatan):
super().__init__(nama, usia, pendapatan, 0)
def tambahan_proyek(self, nilai_proyek):
self.pendapatan_tambahan += int(nilai_proyek * 0.01)
Tugas Praktek
Info: Predefined code telah diperbarui pada tanggal 25 April 2022, pastikan kode yang telah ditulis
disesuaikan kembali.
Di luar sudah menggelap. Gerobak nasi goreng yang biasanya menunggu di depan kantor tiap pukul tujuh
sudah tampak. Aku masih saja larut dalam pekerjaan.
“Masih di sini, Aksara? Belum pulang?” tegur Senja yang baru saja keluar dari ruangan.
“Masih ngurusin proyek Tenaga Lepas. Ini baru dapat rikues lagi untuk nambahin class yang
merepresentasikan masing-masing pekerjaan di divisi ini.”
“Hmm, kamu pakai konsep inherintance saja, akan lebih mudah,” saran Senja sebelum pulang. Sejujurnya,
aku juga mau pulang. Teringat kasur di rumah yang siap untuk rebahan. Kalau begitu, pekerjaan ini harus
cepat diselesaikan.
Di divisiku ada empat bidang pekerjaan, mulai dari analisis data, ilmuwan data, pembersih data, dan
dokumenter teknis. Setiap peran punya sistem penerimaan fee yang berbeda. Ini yang bikin rumit.
Misalnya, ilmuwan data akan mendapat insentif tambahan sebesar 10% dari proyek yang dikerjakan, dan
dokumenter teknis adalah satu-satunya peran yang tidak menerima insentif dari proyek.
Oke, tenang. Ini pasti bisa, tinggal masukkin saja variabelnya satu persatu. Semangat! batinku sembari
ditemani suara abang nasi goreng yang menjajakan makanannya.
Aku kembali bekerja dengan data dan kode-kode ini di code editor.
# Definisikan class Karyawan sebagai parent class
class Karyawan:
def __init__(self, nama, usia, pendapatan, insentif_lembur):
self.nama = nama
self.usia = usia
self.pendapatan = pendapatan
self.pendapatan_tambahan = 0
self.insentif_lembur = insentif_lembur
def lembur(self):
self.pendapatan_tambahan += self.insentif_lembur
def tambahan_proyek(self,jumlah_tambahan):
self.pendapatan_tambahan += jumlah_tambahan
def total_pendapatan(self):
return self.pendapatan + self.pendapatan_tambahan
# Definisikan class TenagaLepas sebagai child class dari
# Definisikan class TenagaLepas sebagai child class dari
# class Karyawan
class TenagaLepas(Karyawan):
def __init__(self, nama, usia, pendapatan):
super().__init__(nama, usia, pendapatan, 0)
def tambahan_proyek(self, nilai_proyek):
self.pendapatan_tambahan += int(nilai_proyek * 0.01)
# Definisikan class AnalisData sebagai child class dari
# class Karyawan
class AnalisData(Karyawan):
pass
# Definisikan class IlmuwanData sebagai child class dari
# class Karyawan
class IlmuwanData(Karyawan):
def tambahan_proyek(self, nilai_proyek):
self.pendapatan_tambahan +=int (0.1 * nilai_proyek)
# Definisikan class PembersihData sebagai child class dari
# class TenagaLepas
class PembersihData(TenagaLepas):
pass
# Definisikan class DokumenterTeknis sebagai child class dari
# class TenagaLepas
class DokumenterTeknis(TenagaLepas):
def tambahan_proyek(self, jumlah_tambahan):
return
Overloading
Pada bahasa pemrograman lain yang mendukung paradigma OO seperti C# ataupun
Java, polymorphism juga dapat diterapkan melalui sebuah fitur yang dikenal dengan istilah
metode overloading.
Metode overloading mengizinkan sebuah class untuk memiliki sekumpulan fungsi dengan nama yang
sama dan parameter yang berbeda. Berkaitan dengan hal ini, Python tidak mengizinkan pendeklarasian
fungsi (baik pada class ataupun tidak) dengan nama yang sama.
Untuk mengimplementasikan method overloading pada Python, aku dapat menggunakan sebuah teknik
yang dikenal dengan function default parameters.
Tugas Praktek
Perusahaan ABC memiliki 3 orang karyawan baru seperti yang diberikan dalam tabel berikut:
class Karyawan:
nama_perusahaan = 'ABC'
insentif_lembur = 250000
# usia akan di-set nilainya menjadi 21 saat tidak
# dispesifikasikan dan pendapatan akan di-set nilainya
# menjadi 5000000 saat tidak dispesifikasikan
def __init__(self, nama, usia=21, pendapatan=5000000):
self.nama = nama
self.usia = usia
self.pendapatan = pendapatan
self.pendapatan_tambahan = 0
def lembur(self):
self.pendapatan_tambahan += self.insentif_lembur
def tambahan_proyek(self, insentif_proyek):
self.pendapatan_tambahan += insentif_proyek
def total_pendapatan(self):
return self.pendapatan + self.pendapatan_tambahan
# Karyawan baru pertama yang bernama Budi
karyawan_baru1 = Karyawan('Budi')
print(karyawan_baru1.nama)
print(karyawan_baru1.usia)
print(karyawan_baru1.total_pendapatan())
# Karyawan baru ke-2 yang bernama Didi, umur 25
karyawan_baru2 = Karyawan('Didi', 25)
print(karyawan_baru2.nama)
print(karyawan_baru2.usia)
print(karyawan_baru2.total_pendapatan())
# Karyawan baru ke-3 yang bernama Hadi, pendapatan 8000000
karyawan_baru3 = Karyawan('Hadi', pendapatan=8000000)
print(karyawan_baru3.nama)
print(karyawan_baru3.usia)
print(karyawan_baru3.total_pendapatan())
Pendahuluan
Keesokan harinya, aku menerima kabar mengejutkan sekaligus membahagiakan dari Senja: aku lulus
untuk pembelajaran programming dengan Object Oriented (OO). Senyum tak lepas dari bibirku sejak
menerima informasi itu.
“Untuk itu, kamu dianggap layak untuk mengerjakan proyek yang lebih besar,” tambah Senja. Aku sampai
lupa, di sini kalau dianggap performanya baik, hadiahnya berupa pekerjaan dengan tanggung jawab lebih.
Memang benar kata orang bijak, semakin tinggi pohon tumbuh, semakin tinggi angin menerpa.
“Apa, Nja?”
“Praktik uji konsep OOP,” jawab Senja mantap sembari memberikan soal studi kasus padaku.
Tugas:
Hasil Belajarku
Wah senangnya! Aku telah berhasil menyelesaikan rangkaian pelajaran Python for Data Professional
Beginner.
Dari materi yang telah aku pelajari dan praktekkan, aku telah mempelajari:
Nantikan kelanjutan dari Data Analyst Career Track, Program#2, SQL & Relational Database for Data
Professional tanggal 28 May 2020 di DQLab Academy!