Data Abstraction in Python

Data Abstraction ni mchakato wa kuficha maelezo ya utekelezaji wa data huku ukitoa interface rahisi kwa mtumiaji. Hii inaruhusu kuangazia kile ambacho object inafanya badala ya jinsi inavyofanya kazi.

 


 

Jinsi Data Abstraction Inavyofanya Kazi:

Vipengele Muhimu vya Data Abstraction:

  1. Abstract Class:

    • Hii ni class inayojumuisha angalau abstract method moja.

    • Abstract class haiwezi kuanzishwa moja kwa moja, yaani huwezi kuunda object ya abstract class.

  2. Abstract Method:

    • Hii ni method isiyo na utekelezaji katika class ya msingi.

    • Inapaswa kufafanuliwa kwenye class zinazorithi (subclasses).

  3. Module abc:

    • Python hutumia module ya abc (Abstract Base Classes) kuunda classes za abstract na methods zake.

 


 

 

Hatua za Kutengeneza Abstract Class na Abstract Methods

Kabla ya kuziona hatuwa hizo kwanz anakuletea mfano ambao tutakwenda kuufanyia kazi

from abc import ABC, abstractmethod

 

# Abstract Class

class Shape(ABC):

    @abstractmethod

    def area(self):

        pass

 

    @abstractmethod

    def perimeter(self):

        pass

 

# Concrete Class

class Rectangle(Shape):

    def __init__(self, length, width):

        self.length = length

        self.width = width

 

    def area(self):

        return self.length * self.width

 

    def perimeter(self):

        return 2 * (self.length + self.width)

 

# Object creation

rect = Rectangle(5, 3)

print(f"Area: {rect.area()}")        # Output: Area: 15

print(f"Perimeter: {rect.perimeter()}")  # Output: Perimeter: 16



Hatua ya 1: Ku-import ABC na abstractmethod

Python hutumia moduli ya abc:
from abc import ABC, abstractmethod


Hatua ya 2: Kutengeneza Abstract Class

Mfano:
class Shape(ABC):

    @abstractmethod

    def area(self):

        pass

 

    @abstractmethod

    def perimeter(self):

        pass

 

Katika code hizo tunapata kuwa:

  1. Shape ni abstract class.

  2. area na perimeter ni abstract methods (hazina utekelezaji).


 

Hatua ya 3: Kutengeneza Child Class na Kutekeleza Abstract Methods

 

Mfano:
class Rectangle(Shape):

    def __init__(self, length, width):

        self.length = length

        self.width = width

 

    def area(self):

        return self.length * self.width

 

    def perimeter(self):

        return 2 * (self.length + self.width)

 

Katika code hizo tunapata kuwa:

  1. Rectangle inatekeleza abstract methods area na perimeter.

  2. Pia, inachukua constructor (__init__) ili kuweka thamani za length na width.


 

Hatua ya 4: Kutengeneza Object Kutoka kwa Child Class

Mfano:
rect = Rectangle(5, 3)

print(f"Area: {rect.area()}")        # Output: Area: 15

print(f"Perimeter: {rect.perimeter()}")  # Output: Perimeter: 16

 


 

Ufafanuzi wa Msimbo

  1. Shape:

    • Ni abstract class inayotangaza area na perimeter kama abstract methods.

    • Inatoa kiolezo (template) kwa child classes.

  2. Rectangle:

    • Ni concrete class inayorithi kutoka kwa Shape.

    • Inatekeleza abstract methods area na perimeter.

  3. Object ya Rectangle:

    • Rectangle hutengeneza object halisi kwa kutumia urefu (length) na upana (width).

    • Abstract class Shape haiwezi kutumika moja kwa moja kutengeneza object.


 

Kanuni Muhimu

  1. Abstract Methods Lazima Zitekelezwe:

    • Child class inayorithi kutoka abstract class lazima itekeleze abstract methods zote.

    • Ikiwa haitekelezi, class hiyo pia itakuwa abstract, na huwezi kutengeneza object kutoka kwayo.

  2. Kufanya Abstract Class Kutoweza Kufanya Kazi Moja kwa Moja:

 

Jaribu kutengeneza object ya abstract class:
shape = Shape()  # TypeError: Can't instantiate abstract class Shape

 

Hii inalinda matumizi yasiyofaa.

  1. Faida za Abstract Classes:

    • Hutoa mwongozo (template) kwa child classes.

    • Husaidia kufanikisha polymorphism kwa kuhakikisha child classes zote zina tabia zinazofanana.


 

Matokeo

Msimbo uliotolewa hutoa matokeo haya:

Area: 15

Perimeter: 16

 


Mfano wa Nyongeza: Circle

Kiongezo kwa Shape kwa kutumia circle:

class Circle(Shape):

    def __init__(self, radius):

        self.radius = radius

 

    def area(self):

        return 3.14 * self.radius * self.radius

 

    def perimeter(self):

        return 2 * 3.14 * self.radius

 

# Object creation

circle = Circle(7)

print(f"Area: {circle.area()}")        # Output: Area: 153.86

print(f"Perimeter: {circle.perimeter()}")  # Output: Perimeter: 43.96

 

Hii inaonyesha jinsi abstract classes zinavyoweza kutumika kwa urahisi kupanua tabia kwenye child classes.



Mfano wa Data Abstraction:

 

from abc import ABC, abstractmethod

 

# Abstract Class

class Shape(ABC):

    @abstractmethod

    def area(self):

        pass

 

    @abstractmethod

    def perimeter(self):

        pass

 

# Concrete Class

class Rectangle(Shape):

    def __init__(self, length, width):

        self.length = length

        self.width = width

 

    def area(self):

        return self.length * self.width

 

    def perimeter(self):

        return 2 * (self.length + self.width)

 

# Object creation

rect = Rectangle(5, 3)

print(f"Area: {rect.area()}")        # Output: Area: 15

print(f"Perimeter: {rect.perimeter()}")  # Output: Perimeter: 16

 

Ufafanuzi wa Mfano:

  1. Shape:

    • Ni abstract class inayotumika kama blueprint kwa class nyingine.

    • Ina methods mbili (area na perimeter) ambazo hazina utekelezaji.

  2. Rectangle:

    • Ni subclass ya Shape.

    • Inatoa utekelezaji wa methods zote za abstract za class ya msingi.

  3. Utekelezaji:

    • Huwezi kuunda object ya Shape moja kwa moja. Lazima urithi Shape kwenye subclass na utoe utekelezaji wa methods zake zote za abstract.

 


 

Faida za Data Abstraction:

  1. Urahisi wa Matumizi:

    • Mtumiaji anaweza kushughulikia data kupitia interface rahisi bila kujua maelezo ya ndani.

  2. Kubadilika:

    • Abstract classes hutoa njia ya kuunda code inayoweza kubadilishwa kulingana na mahitaji ya subclass.

  3. Utengano wa Mambo:

    • Hutenganisha mantiki ya utekelezaji na interface, ikirahisisha matengenezo ya code.

 

Abstraction vs. Encapsulation:

Ingawa zote zinahusiana, kuna tofauti muhimu:

Kwa mfano:

 


 

Hitimisho:

Data Abstraction ni muhimu kwa kupunguza ugumu wa code na kuhakikisha mtumiaji anaingiliana na mfumo kupitia interface iliyorahisishwa. Katika Python, abstraction hufanikishwa kwa kutumia abstract classes na methods kwa kushirikiana na module ya abc.