Arayüzler

Python'da Orta Düzey Nesne Yönelimli Programlama

Jake Roach

Data Engineer

Arayüzler

Yalnızca soyut yöntemlerden oluşan ve arayüzü uygulayan sınıflarla bir sözleşme kuran özel bir sınıf türü

  • Soyut yöntemleri tanımlamalıdır
  • Yöntem tanımlarının iskeleti
  • Parametreler birebir eşleşmek zorunda değil
  • Resmî veya gayriresmî

$$

$$

Önce gayriresmî arayüzlerle başlayalım!

Üç soyut yönteme sahip bir Python arayüzünün diyagramı.

Python'da Orta Düzey Nesne Yönelimli Programlama

Duck typing ile gayriresmî arayüzler

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
  • assign_homework() ve grade_assignment() soyut yöntemleri
Python'da Orta Düzey Nesne Yönelimli Programlama

Duck typing ile gayriresmî arayüzler

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...
Python'da Orta Düzey Nesne Yönelimli Programlama

ABC ve @abstractmethod ile resmî arayüzler

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

Resmî arayüzler, soyut temel sınıflardan nasıl farklıdır?

Python'da Orta Düzey Nesne Yönelimli Programlama

Arayüzler vs. Soyut Temel Sınıflar

Arayüzler

  • Uygulayan sınıflarla bir "sözleşme" tanımlar
  • "Yapılması gerekenler"
  • Resmî ve gayriresmî olabilir
  • Yalnızca soyut yöntemler içerir (somut yöntem yok)
  • Neredeyse özdeş sınıflar

Soyut temel sınıflar

  • Ortak özellikli sınıflar için bir "kalıp" oluşturur
  • "Bir türüdür"
  • Genelde yalnızca resmî
  • Soyut ve somut yöntem karışımı
  • Benzer görünen ve hissi veren sınıflar
Python'da Orta Düzey Nesne Yönelimli Programlama

Resmî bir arayüzü uygulama

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")
Python'da Orta Düzey Nesne Yönelimli Programlama

Resmî bir arayüzü uygulayamama

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: Soyut yönteme sahip ProgrammingCourse soyut sınıfı somutlanamaz
    grade_assignment
Python'da Orta Düzey Nesne Yönelimli Programlama

Hadi pratik yapalım!

Python'da Orta Düzey Nesne Yönelimli Programlama

Preparing Video For Download...