Anda di halaman 1dari 33

PEMROGRAMAN Pertemuan 5 – Enkapsulasi

BERORIENTASI OBJEK (PBO)


OUTLINE
 Acces Modifier
 Enkapsulasi
 Antarmuka
 Dekorator
Kilas Balik

 Karakterisitik PBO
 Encapsulation (fokus kita pada pertemuan ini)
 Inheritance
 Polymorphysm
Enkapsulasi

 Suatu pembukus untuk atribut dan metode yang dimiliki sebuah


objek agar terlindungi, sehingga tidak dapat diganti secara
sembarang dengan cara yang tidak seharusnya, keaslian dari
objek tersebut terjaga
 Dikatakan juga sebagai sebuah cara untuk mensetting Acces
Modifier dari sebuah atribut dan metode, artinya, ada ketentuan
khusus di mana atribut dan metode tidak bisa langsung kita
akses dari luar untuk ditampilkan atau diubah datanya
Enkapsulasi (lanjutan)

 Enkapsulasi juga dikenal dengan istilah 'information hiding'


 Berkomunikasi hanya lewat antarmuka yang disediakan oleh
objek tersebut
 Pada konsep enkapsulasi semua atribut dan metode dalam
bentuk private
 Untuk dapat mengaksesnya, dibutuhkan suatu metode
(antarmuka) di dalam objek tersebut
Enkapsulasi (lanjutan)

 Atribut yang dimaksud: atribut kelas dan atribut objek


 Tujuan:
 Membatasi hak akses
 Memastikan bahwa nilai tetap valid
 Misal: atribut nomor_seri pada kelas Mobil dibuat privat
sehingga objek lainnya tidak bisa mengakses atribut tersebut
Acces Modifier

 Bahasa pemrograman berorientasi objek seperti C ++ dan Java,


mengontrol akses ke sumber daya objek dengan kata kunci
public, protected, dan private
 Objek yang jenisnya private akan ditolak untuk mengaksesnya
dari lingkungan di luar objek. Mereka hanya dapat ditangani
dari dalam
Acces Modifier (lanjutan)

 Ciri-ciri:
 Public: tanpa garis bawah
 Protected: dengan garis bawah tunggal ( _ )
 Private: dengan garis bawah ganda ( __ )
 Misal: atribut nomor_seri pada kelas Mobil dibuat privat
sehingga objek lainnya tidak bisa mengakses atribut tersebut
Acces Modifier – Public
 Objek berjenis public baik atribut maupun metode dapat
diakses dari luar
 Secara default, semua objek berjenis public
 Bentuknya sama dengan kita membuat objek biasa
Acces Modifier – Public –(lanjutan)
 Contoh:
class Student:
school_name = 'Institut Teknologi Sumatera'

def __init__(self, full_name, current_age):


self.name = full_name
self.age = current_age

Student1 = Student("Eko", 30)


Catatan: Kita bisa mengakses dan
print(Student1.school_name) mengubah semua atribut, seperti
print(Student1.name) name, age, dan school_name
print(Student1.age)

Student1.age = 25
Acces Modifier – Protected
 Objek berjenis public baik atribut maupun metode hanya dapat
diakses dari dalam kelas dan turunan kelasnya
 Untuk membuat atribut atau metode objek berjenis protected
dapat dilakukan dengan cara menambahkan awalan garis bawah
tunggal ( _ ) ke dalam nama tersebut
 Efek: tidak ada lingkungan lain yang diizinkan mengaksesnya,
ini secara efektif mencegahnya dari diakses atribut maupun
metode kecuali dari dalam kelas dan turunannya
Acces Modifier – Protected –
(lanjutan)
 Contoh:
class Student:
_school_name = 'Institut Teknologi Sumatera'

def __init__(self, full_name, current_age):


self._name = full_name
self._age = current_age

Student1 = Student("Eko", 30)


Catatan: Faktanya, ini tidak
print(Student1._school_name) mencegah diaksesnya atribut objek
print(Student1._name) atau memodifikasinya dari objek
print(Student1._age)
yang berjenis protected
Student1._age = 25
Acces Modifier – Private
 Objek berjenis private baik atribut maupun metode hanya dapat
diakses dari dalam kelasnya saja
 Lebih kuat untuk tidak mengaksesnya dari luar kelas dari pada
protected
 Setiap upaya untuk melakukannya akan menghasilkan
AttributeError
Acces Modifier – Private – (lanjutan)
 Untuk membuat atribut atau metode objek berjenis private dapat
dilakukan dengan cara menambahkan awalan garis bawah ganda
( __ ) ke dalam nama tersebut
 Efek: tidak ada lingkungan lain yang diizinkan mengaksesnya,
ini secara efektif mencegahnya dari diakses atribut maupun
metode kecuali dari dalam kelasnya
Acces Modifier – Private –(lanjutan)
 Contoh:
class Student:
__school_name = 'Institut Teknologi Sumatera'

def __init__(self, full_name, current_age):


self.__name = full_name
self.__age = current_age
def __display(self):
return 'This is private method.'

Student1 = Student("Eko", 30)

print(Student1.__school_name) # AttributeError: 'Student' object has no attribute '__school_name'


print(Student1.__name) # AttributeError: 'Student' object has no attribute '__name'
print(Student1.__age) # AttributeError: 'Student' object has no attribute '__age'

Student1._age = 25 # seolah-olah mengubah, namun tidak mengubah nilainya

print(Student1.__age) # dapat dicetak nilai palsunya


Acces Modifier – Private – (lanjutan)
 Namun, masih dapat diakses dengan cara menggunakan sintaks:
object._class__attribute atau object._class__method
 Contoh:
print(Student1._Student__name)
print(Student1._Student__age)

Student1._Student__age = 35 Catatan: Faktanya, ini tidak


mencegah diaksesnya atribut objek
print(Student1._Student__age) atau memodifikasinya dari objek
print(Student1._Student__display()) yang berjenis private
Acces Modifier – (lanjutan)
 Python tidak memiliki mekanisme apa pun yang secara efektif
untuk membatasi akses ke atribut ataupun metode
Antarmuka

 Kelas dapat menyediakan antarmuka agar atribut maupun


metode dari objeknya nanti dapat diakses atau diubah dari luar
 Dapat menggunakan:
 Metode getter (Accessor) dan setter (Mutator)
 Dekorator
 Pada dekorator terdapat: property, staticmethod, dan
classmethod
Antarmuka – getter (Accessor)
 Metode yang digunakan untuk mengakses atribut atau metode dari sebuah objek, contoh:
class Student:
_school_name = 'Institut Teknologi Sumatera'

def __init__(self, full_name, current_age):


self.__name = full_name
self.__age = current_age
def getName(self): # method getter untuk nama
return self.__name
def getAge(self): # method getter untuk usia
return self.__age

Student1 = Student("Eko", 30)

print(Studen1.getName())
print(Studen1.getAge())
Antarmuka – setter (Mutator)
 Metode yang digunakan untuk mengubah atribut dari sebuah objek, contoh:
class Student:
_school_name = 'Institut Teknologi Sumatera'

def __init__(self, full_name, current_age):


self.__name = full_name
self.__age = current_age
def setName(self, new_name): # method setter untuk ubah nama
self.__name = new_name
def setAge(self, new_age): # method setter untuk ubah usia
self.__age = new_age

Student1 = Student("Eko", 30)

print(Student1._Student__name)

Studen1.setName("Dwi")
Antarmuka – setter dan getter
 Metode yang digunakan untuk mengubah atribut dari sebuah objek, contoh:
class Student:
_school_name = 'Institut Teknologi Sumatera'

def __init__(self, full_name, current_age):


self.__name = full_name
self.__age = current_age
def getName(self): # method getter untuk akes nama
return self.__name
def setName(self, new_name): # method setter untuk ubah nama
self.__name = new_name

Student1 = Student("Eko", 30)

print(Student1.getName())

Studen1.setName("Dwi")
Antarmuka – Dekorator
 Dalam Python, suatu fungsi dapat dikirimkan sebagai argumen
ke fungsi lain atau dimungkinkan juga untuk mendefinisikan
fungsi di dalam fungsi lain, serta fungsi dapat mengembalikan
fungsi lain
 Merupakan tanggung jawab tambahan / fungsi tambahan ke
suatu fungsi secara dinamis tanpa mengubah fungsi atau
dengan kata lain fungsi yang menerima fungsi lain sebagai
argumen
Antarmuka – Dekorator – (lanjutan)
 Perilaku fungsi argumen diperluas oleh dekorator tanpa benar-benar
memodifikasinya
 Dekorator dapat diterapkan di atas fungsi untuk memperluas fungsionalitas
fungsi yang mendasarinya
 Ciri khas: @
 Tiga dekorator bawaan:
 property
 staticmethod
 classmethod
Antarmuka – property (Dekorator)
 Dekorator bawaan Python
 Mendeklarasikan sebagai metode getter, setter, dan deleter atribut
 Gunakan dekorator ini pada metode apa pun di kelas untuk menggunakan
metode tersebut sebagai atribut
 Tiga dekorator properti:
 @property -> mendeklarasikan metode sebagai atribut
 @<property-name>.setter -> dekorator properti untuk mengubah nilai
 @<property-name>.deleter -> dekorator properti untuk menghapus nilai
Antarmuka – property (Dekorator) –
property
 Bentuk: @property, metode harus mengembalikan nilai atribut
 Contoh:
class Student:
def __init__(self, full_name):
self.__name = full_name

@property
def mName(self): # metode mName() sekarang sebagai atribut
return self.__name

Student1 = Student("Eko")

print(Student1.mName)
Antarmuka – property (Dekorator) –
Setter
 Bentuk: @<property-name>.setter, contoh:
class Student:
def __init__(self, full_name):
self.__name = full_name

@property
def mName(self): # metode mName() sekarang sebagai atribut
return self.__name

@mName.setter
def mName(self, value): # metode atribut untuk ubah nilai
self.__name = value

Student1 = Student("Eko")

print(Studen1.mName)

Studen1.mName = "Dwi"
Antarmuka – property (Dekorator) –
Deleter
 Bentuk: @<property-name>.deleter, contoh:
class Student:
def __init__(self, full_name):
self.__name = full_name

@property
def mName(self): # metode mName() sekarang sebagai atribut
return self.__name

@mName.deleter
def mName(self, value): # metode atribut untuk ubah nilai
del self.__name

Student1 = Student("Eko")

print(Student1.mName)

del Student1.mName
Antarmuka – staticmethod
(Dekorator)
 Dekorator bawaan Python
 Mendeklarasikan metode statis, artinya tidak menerima argumen
referensi apa pun baik itu dipanggil oleh objek atau oleh kelas itu
sendiri
 Tidak dapat menggunakan argumen self, sehingga tidak dapat
mengakses atribut objek
 Bentuk pemanggilan: ClassName.MethodName() atau
object.MethodName()
Antarmuka – staticmethod
(Dekorator) – (lanjutan)
 Contoh:
class Student:
__school_name = 'Institut Teknologi Sumatera'

def __init__(self, full_name):


self.__name = full_name

@staticmethod
def mName():
return Student.__school_name

def MeName(): # metode kepunyaan kelas


return Student.__school_name

Student1 = Student("Eko")

print(Student1.mName())
print(Student.mName())
Antarmuka – classmethod
(Dekorator)
 Dekorator bawaan Python
 Untuk mendeklarasikan metode di kelas sebagai metode kelas,
sehingga dapat dipanggil menggunakan ClassName.MethodName ()
 Menggunakan argumen cls (dapat diubah namanya) sebagai argumen
pertama (pengganti self), namun tidak dapat mengakses atribut objek
 Bentuk pemanggilan: ClassName.MethodName() atau
object.MethodName()
Antarmuka – classmethod
(Dekorator) – (lanjutan)
 Contoh:
class Student:
__school_name = 'Institut Teknologi Sumatera'

def __init__(self, full_name):


self.__name = full_name

@classmethod
def mName(cls):
return Student.__school_name #dapat menggunakan Student atau cls

Student1 = Student("Eko")

print(Student1.mName())
Antarmuka – classmethod
(Dekorator) – (lanjutan)
 Dapat sebagai metode pabrik yang digunakan untuk membuat objek dari metode tersebut, contoh:
class Student:

def __init__(self, full_name):


self.name = full_name

@classmethod
def mName(cls):
return cls("Dwi")

Student1 = Student("Eko")

print(Student1.name())

Student2 = Student.mName()
TERIMA KASIH Pertemuan 5 - Selesai

Anda mungkin juga menyukai