Daftar Isi
Definisi OOP
Class dan Object
Prinsip-prinsip OOP (Object Oriented Programming)
Magic Methods dan Operator Overloading
Object Lifecycle
Menyembunyikan Data
Class Method dan Static Methods
Properties
Definisi OOP
Object Oriented Programming(OOP) merupakan hal yang wajib dipahami oleh setiap programmer dalam bahasa yang ia ingin kuasai. Dengan kata lain OOP merupakan pondasi dasar dalam setiap bahasa pemrogramman level tinggi. Pengertian OOP itu sendiri yakni pemrograman yang berorientasi pada object.
Class dan Object
Object sendiri diciptakan oleh class yang merupakan poin vokal dari OOP.Class menggambarkan jadi apa sebuah objek nantinya, tetapi terpisah oleh object itu sendiri. Class juga menjadi blueprint, gambaran dan pengertian sebuah object. Kita juga bisa menciptakan banyak object dengan satu class.
Prinsip-prinsip OOP(Object Oriented Programming)
4 Prinsip dasar Object Oriented Programmingadalah Encapsulation, Abstaction, Inheritance dan Polymorphism.
Kata-kata ini terkadang merupakan kata yang menakutkan yang didengar oleh junior programmer.
Encapsulation
Encapsulation diarsipkan ketika setiap object menjaga mode privatnya didalam sebuah class. Object lainya tidak bisa mengaksenya. Object ini bisa dipanggil dimanapun dengan fungsi publik atau method.
Sebagai contoh sebuah anjing yang memiliki variabel privat yakni mood, lapar dan energi. Dan memiliki method privat bark(). Apa yang bisa kita akses dari publik adalah method publiknya yakni tidur(), main() dan makan().
Abstaction
Abstaction adalah sebuah konsep yang bertujuan untuk mempermudah masalah.Dalam desain berorientasi object yang ada di program besar. Tentu sangatlah komplek dan banyak logika yang digunakan dalam kode yang dibangun. Tetapi dengan OOP ini kita bisa menyederhanakan penggunaanya dalam kode yang telah dibuat.
Sebagai contoh yang nyata bila kita memiliki remote tv yang memiliki tombol-tombol seperti tombol power, tombol volume dan tombol chanel. Kita hanya perlu memencetnya dan tidak perlu memikirkan bagaimana signal remote itu memberikan perintah ke tv melalui penerima signal yang ada pada tv. Atau pada mesin kopi yang perlu kita lakukan hanyalah memencet tombol dan kopipun tersedia.
Inheritance
Inheritance bisa dibilang dalam bahasa indonesia yakni turunan. Dimana ada yang menjadi parent class dan child class. Ini merupakan solusi dimana kita bisa menggunakan object yang sama dalam class yang lebih spesifik lagi(child class).Object yang ada di parent class pasti dimiliki oleh child class.
Sebagai contoh kita memiliki parent class berupa manusia, class mahasiswa dan dosen yang merupakan child class dari parent class manusia. class manusia yang memiliki variabel nama dan biodata. Class mahasiswa memiliki variabel yang ada pada class manusia, jurusan, kelas dan peringkat. Sedangkan class dosen memiliki semua variabel dari class manusia, jabatan dan pelajaran.
Polymorphism
Polymorphism memiliki arti banyak bentuk dalam satu wadah. Polymorphism memberikan jalan untuk menggunakan class lainya seperti class parentnya sendiri sehingga tidak perlu memikirkan lagi tentang tipe campuran dari class-class yang ada.
Contohnya pada sebuah class bangun ruang yakni memiliki bebrapa child class pilihan yakni bola, balok dan box.Semua child class memiliki perlakuan dan object yang sama. lalu dengan parent class ini kita bisa menghitung keliling, volume dan luas menggunakan method yang ada di parent class.
Dengan pemahaman ini pasti kita bisa membuat program yang rumit dengan interface yang mudah digunakan ulang seperti pada framework dan programing lain yang berbasiskan object.
Magic Method dan Operator Overloading
Magic Method adalah method khusus yang memiliki dua underscore di depan dan belakang namanya sendiri.Magic Method sering juga disebut dunders.
Pada sebuah class magic method yang sering digunakan yakni __init__ yang biasanya disebut constructor. Operator Overloading berarti menyamakan operator-operator untuk class-class buatan yang mengizinkan adanya operator-operator seperti +,-,/,* dan sebagainya untuk digunakan oleh class itu.
Magic method yang lainya yakni
__add__ untuk operasi matematika penambahan
__sub__ untuk operasi matematika pengurangan
__mul__ untuk operasi matemaitka perkalian
__truediv__ untuk operasi matematika pembagian
__floordiv__ untuk operasi matematika akar
__mod__ untuk modular
__pow__ untuk operasi matematika pangkat
__and__ untuk operasi matematika &
__or__ untuk operasi matematika |
__xor__ untuk operasi matematika ^
__lt__ untuk perbandingan <
__le__ untuk perbandingan <=
__eq__ untuk perbandingan yang sama
__ne__ untuk perbansingan yang tidak sama
__gt__ untuk perbandingan >
__ge__ untuk perbandingan >=
__len__ digunakan seperti method len()
__getitem__ digunakan untuk mendapatkan nilai dari index
__setitem__ digunakan untuk mengidentifikasi/menambahkan nilai dari index
__delitem__ digunakan untuk menghapus nilai dari index
__iter__ digunakan untuk membuat iterasi atau array diatas object(untuk penggunaan perulangan/loop)
__contains__ digunakan seperti argumen in
contoh penggunaan dalam bentuk kode
class Vektor3D:
def __init__(self,a ,b):
self.a = a
self.b = b
def __add__(self, other):
return Vektor3D(self.a + other.a, self.b + other.b)
satu=Vektor3D(5,6)
dua=Vektor3D(2,3)
hasil= satu+dua
print(hasil.a)
print(hasil.b)
Object Lifecycle
Lifecycle dari sebuah object yakni dimulai dari pembuatan,manipulasi, dan pemusnahan. Membuat object berarti menempatkan memori untuk inisiasi(__init__). Mamanipulasi object yakni mengganti nilai (dan)atau tipe dari object. Pemusnahan object bisa dilakukan dengan del instance atau memakai __del__.Dengan memusnahkan object maka akan memberi ruang kosong dari object yang telah dihapus.
Menyembunyikan Data
Ini merupakan implementasi dari Encapsulation dari OOP yang dimana kita menggunakan satu underscore didepan object untuk menyembunyikanya dari kode luar.Sehingga bisa diakses oleh kode external dengan menggunakan magic method __repr__ untuk merepresentasikan instansi string.
class Antri:
def __init__(self,konten):
self._listtersembunyi = list(konten)
def push(self,nilai):
self._listtersembunyi.insert(0,nilai)
def pop(self):
return self._listtersembunyi.pop(-1)
def __repr__(self):
return "Antrian ({})".format(self._listtersembunyi)
antri = Antri([1,2,3])
print(antri)
antri.push(0)
print(antri)
antri.pop()
print(antri)
print(antri._listtersembunyi)
Dengan menggunakan 2 underscore sebelum namanya akan membuat method yang benar-benar privat.Tetapi method ini bisa diakses dengan nama yang berbeda dengan menggunakan method __privatemethod dari class yang disembunyikan
class Keranjang:
__telur=7
def print_telur(self):
print(self.__telur)
K=Keranjang()
K.print_telur()
print(K._Keranjang__telur)
print(K.__telur)
Class Method dan Static Method
Class Method adalah method yang dipanggil oleh sebuah class yang di identitaskan oleh cls parameter di method.Calss method biasanya ditandai oleh classmethod decorator.
contoh penggunaanya:
class Persegi:
def __init__(self, panjang, lebar):
self.panjang = panjang
self.lebar = lebar
def hitungluas(self):
return self.panjang * self.lebar
@classmethod
def persegi_baru(cls, sisi):
return cls(sisi, sisi)
persegi = Persegi.persegi_baru(6)
print(persegi.hitungluas())
Static Method hampir sama dengan Class Method tetapi Static Method tidak menerima argumen tambahan lainya. Dan biasanya menggunakan staticmethod decorator untuk penggunaanya.
contohnya:
class Uduk:
def __init__(self, lauk):
self.lauk = lauk
@staticmethod
def validasi_tambahan(tambahan):
if tambahan == "mangga":
raise ValueError("Tidak mungkin mangga!")
else:
return True
bahan = ["telur", "oreg", "mangga"]
if all(Uduk.validasi_tambahan(i) for i in bahan):
uduk = Uduk(bahan)
Properties
Properties sebuah jalan akses untuk mengkostumisasi atribut-atribut instance.dan biasanya menggunakan propertis decorator sebelum methodnya.
class Uduk:
def __init__(self, lauk):
self.lauk = lauk
self._sambal_allowed = False
@property
def sambal_allowed(self):
return self._sambal_allowed
@sambal_allowed.setter
def sambal_allowed(self, nilai):
if nilai:
password = input("Enter the password: ")
if password == "pedas":
self._sambal_allowed = nilai
else:
raise ValueError("Wah!Gak boleh ditambahkan sambal!")
uduk = Uduk(["telur", "mie"])
print(uduk.sambal_allowed)
uduk.sambal_allowed = True
print(uduk.sambal_allowed)
Untuk melihat Daftar Isi Pemrograman Python