Minggu, 04 Juli 2021

Python OOP(Object Oriented Programming)

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

7 komentar: