Abstraktion inamaanisha kubaini nini kitu kinachofanya habari kuzihide vipi kinachofanya. Unaingiliana na kiolesura rahisi, thabiti na kuzaharibu utekelezaji ngumu nyuma yake.
Nini dhidi ya vipi
from abc import ABC, abstractmethod
class PaymentGateway(ABC): # the abstraction: "what"
@abstractmethod
def charge(self, amount): ... # callers only need this contract
class StripeGateway(PaymentGateway): # one "how"
def charge(self, amount):
# talk to Stripe's API, handle tokens, retries...
return f"charged {amount} via Stripe"
class PayPalGateway(PaymentGateway): # another "how"
def charge(self, amount):
return f"charged {amount} via PayPal"
def checkout(gateway: PaymentGateway, amount):
return gateway.charge(amount) # depends only on the abstraction
checkout haiwezi kujua kamwe ikiwa ni Stripe au PayPal — inategemea wazo la kuchaji, si maelezo.
Abstraktion dhidi ya enkapsulesheni
Zina uhusiano lakini tofauti: enkapsulesheni inahide hali ili kuiangalia; abstraktion inahide uchangamfu ili kurahisisha kiolesura. Enkapsulesheni ni kuhusu kuzuia; abstraktion ni kuhusu nini cha kuonyesha.
Hatari
Abstraksheni yenye malezo (ambapo maelezo ya utekelezaji yanayotoka) na abstraksheni za mapema (zimejengwa kabla hauwezi kuelewa tatizo) zote zinaumiza. Jumuisha kile kinachobadilika kwa kawaida.
Kwa nini inashangilia
Abstraktion ndilo jinsi unavyozuia uchangamfu: wanaita wafikiri kuhusu kiolesura kidogo badala ya mfumo mzima.
Inaruhusa kubadilisha utekelezaji — kuongeza mtoa huduma mpya wa malipo hugusa darasa moja, si kila mpigia simu — ambayo ni msingi wa kubuni sambamba, kubaini.
