Antarmuka

Pemrograman Berorientasi Objek Tingkat Menengah di Python

Jake Roach

Data Engineer

Antarmuka

Jenis kelas khusus hanya berisi metode abstrak yang membuat kontrak dengan kelas yang mengimplementasikannya

  • Harus mendefinisikan metode abstrak
  • Kerangka definisi metode
  • Parameter tidak harus sama persis
  • Formal atau informal

$$

$$

Mari mulai dengan antarmuka informal!

Diagram antarmuka Python dengan tiga metode abstrak.

Pemrograman Berorientasi Objek Tingkat Menengah di Python

Antarmuka informal dengan duck typing

class Course:
    def assign_homework(self, assignment_number, due_date):
        # Typically, the pass keyword will be used when creating an interface
        pass  

    def grade_assignment(self, assignment_number):
        pass
  • Duck typing
  • Metode abstrak assign_homework() dan grade_assignment()
Pemrograman Berorientasi Objek Tingkat Menengah di Python

Antarmuka informal dengan duck typing

class ProgrammingCourse:
    def __init__(self, course_name):
        self.course_name = course_name

    def assign_homework(self, due_date):
        # Some implementation of assign_homework here...

    def grade_assignment(self, assignment_number):
        # Some implementation of grade_assignment here...
Pemrograman Berorientasi Objek Tingkat Menengah di Python

Antarmuka formal dengan ABC, @abstractmethod

from abc import ABC, abstractmethod

class Course(ABC):    
    @abstractmethod
    def assign_homework(self, assignment_number, due_date):
        pass

    @abstractmethod
    def grade_assignment(self, assignment_number):
        pass

Apa bedanya antarmuka formal dengan kelas dasar abstrak?

Pemrograman Berorientasi Objek Tingkat Menengah di Python

Antarmuka vs. Kelas Dasar Abstrak

Antarmuka

  • Mendefinisikan “kontrak” dengan kelas yang mengimplementasikannya
  • “Harus dilakukan”
  • Formal dan informal
  • Hanya berisi metode abstrak (tanpa metode konkret)
  • Kelas hampir identik

Kelas dasar abstrak

  • Membuat “cetak biru” untuk kelas dengan karakteristik umum
  • “Adalah”
  • Biasanya hanya formal
  • Campuran metode abstrak dan konkret
  • Kelas yang tampak dan berperilaku serupa
Pemrograman Berorientasi Objek Tingkat Menengah di Python

Mengimplementasikan antarmuka formal

class ProgrammingCourse(Course):
    def __init__(self, course_name):
        self.course_name = course_name

    def assign_homework(self, due_date):
        # Some implementation of assign_homework here...

    def grade_assignment(self, assignment_number):
        # Some implementation of grade_assignment here...

intermediate_oop = ProgrammingCourse("Intermediate Object-Oriented Programming")
Pemrograman Berorientasi Objek Tingkat Menengah di Python

Gagal mengimplementasikan antarmuka formal

class ProgrammingCourse(Course):
    def __init__(self, course_name):
        self.course_name = course_name

    def assign_homework(self, due_date):
        # Some implementation of assign_homework here...

intermediate_oop = ProgrammingCourse("Intermediate Object-Oriented Programming")
 ...
    intermediate_oop = ProgrammingCourse("Intermediate Object-Oriented Programming")
TypeError: Can't instantiate abstract class ProgrammingCourse with abstract method
    grade_assignment
Pemrograman Berorientasi Objek Tingkat Menengah di Python

Ayo berlatih!

Pemrograman Berorientasi Objek Tingkat Menengah di Python

Preparing Video For Download...