Python OOP (ob’ektga yo’naltirilgan dasturlash) da abstraktsiya – bu keraksiz tafsilotlarni yashirgan holda, ularning asosiy xususiyatlari va xatti-harakatlari asosida klasslarni modellashtirish orqali murakkab tizimlarni soddalashtirishni o’z ichiga olgan tushuncha. Abstraksiyaning asosiy maqsadi foydalanuvchilar uchun aniq va ixcham interfeysni taqdim etishdan iborat bo’lib, ularga murakkab amalga oshirish tafsilotlarini tushunmasdan ob’ektning yuqori darajadagi funksionalligi bilan o’zaro aloqada bo’lish imkonini beradi.
Abstraksiya haqida asosiy tushunchalar:
Abstrakt klasslar: Abstraksiya odatda mavhum klasslar yordamida amalga oshiriladi. Abstrakt klass – bu o’zidan to’gridan-to’g’ri ob’ekt yaratib bo’lmaydigan va bir yoki bir nechta mavhum metodlarni o’z ichiga olishi mumkin bo’lgan klass. Abstraksiyada abstrakt klassda mavhum metodlar e’lon qilinadi, lekin ichki qismi yozilmasdan pass kalit so’zi yoziladi va ichki qismining aniq bajarilishi bola klasslarga qoldiriladi. Aniqroq qilib aytganda, abstarkt klasslar mustaqil ravishda ob’ekt yaratishda ishlatilmaydigan, ammo boshqa klasslar uchun reja bo’lib xizmat qiladigan klasslardir.
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
pass
@abstractmethod
def perimeter(self):
pass
Pythonda ABC (Abstract Base Class) “mavhum asosiy klass” degan ma’noni anglatadi va bu Python standart kutubxonasining abc (abstract Base Classes) modulida taqdim etilgan moduldir. ABC moduli Pythonda mavhum asosiy klasslarni yaratish uchun ishlatiladi.
abc modulining asosiy komponentlariga quyidagilar kiradi:
1. ABC meta-class: ABC moduli abstrakt tayanch klasslarni yaratish uchun foydalaniladigan ABC meta-klassini taqdim etadi. Abstrakt asosiy klassni yaratishda odatda klass ta’rifida ABCdan foydalaniladi.
from abc import ABC, abstractmethod class MyAbstractClass(ABC): @abstractmethod def my_abstract_method(self): pass
2. @abstractmethod dekoratori: abc moduli mavhum asosiy klass ichida mavhum metodlarni e’lon qilish uchun ishlatiladigan @abstractmethod dekoratorini o’z ichiga oladi. Mavhum metodlar mavhum asosiy klassda to’liq yaratilmaydi, lekin har qanday aniq (mavhum bo’lmagan) kichik klass tomonidan to’liq yaratilishi kerak.
3. abc modulidan foydalanib, dasturchilar o’zlarining klass ierarxiyasida ma’lum bir tuzilmani qo’llashlari mumkin, bu esa quyi klasslarda maxsus usullarning amalga oshirilishini ta’minlaydi. Bu kodning izchilligi, ravshanligini ta’minlaydi va mavhum asosiy klasslardan meros bo’lib qolgan klasslar uchun aniq interfeysni aniqlashga yordam beradi. Agar quyi klass mavhum metodni yarata olmasa, u ob’ekt yaratish vaqtida TypeErrorni ko’taradi, bu klass to’liq yaratilmaganligini ko’rsatadi.
Vorislik orqali abstraksiya: mavhum klassdan meros bo’lgan kichik klasslar uning mavhum metodari uchun aniq amalga oshirishni ta’minlashi kerak. Bu kodni qayta ishlatishga yordam beradi va dasturchilarga mavhum klass tomonidan belgilangan umumiy interfeysga rioya qilgan holda ob’ektlarning muayyan nusxalarini yaratishga imkon beradi.
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
Yaratish tafsilotlarini yashirish: Abstraksiya dasturchilarga ob’ekt yaratishning ichki tafsilotlarini tashqi dunyodan yashirish imkonini beradi. Foydalanuvchilar ob’ekt bilan uning ichidagi murakkabliklar haqida tashvishlanmasdan, uning aniq belgilangan interfeysi orqali o’zaro aloqada bo’lishlari mumkin.
# interfeysdan foydalanish
my_circle = Circle(5)
print(my_circle.area())
Abstraksiyada inkapsulyatsiya: Abstraksiya boshqa OOP tushunchasi bo’lgan inkapsulyatsiya bilan chambarchas bog’liq. Inkapsulyatsiya ma’lumotlar (atributlar) va ma’lumotlarda ishlaydigan metodlarni bitta birlik (klass) ichida birlashtirishni va faqat kerakli narsalarni ochishni o’z ichiga oladi. Bu amalga oshirish tafsilotlarini yashirish va aniq interfeysni targ’ib qilish qobiliyatini yanada oshiradi.
Xulosa qilib aytganda, Python OOPda abstraksiya mavhum klasslar va interfeyslarni yaratishni o’z ichiga oladi, bu dasturchilarga ob’ektlarni muhim xususiyatlar asosida modellashtirish, amalga oshirish tafsilotlarini yashirish va foydalanuvchilarning o’zaro aloqasi uchun aniq, yuqori darajadagi interfeysni taqdim etish imkonini beradi.
Izoh: Python OOP kontekstidagi interfeys aslida ushbu interfeysga mos keladigan har qanday klass tomonidan amalga oshirilishi kerak bo’lgan metodlar to’plamidir. Bu odatda mavhum klasslar va mavhum metodlar yordamida amalga oshiriladi. Keling, Pythonda mavhum klasslar va mavhum metodlardan foydalangan holda interfeyslar konsepsiyasini tasvirlash uchun misol yarataylik:
from abc import ABC, abstractmethod
# interfeys yaratish
class Animal(ABC):
@abstractmethod
def make_sound(self):
pass
@abstractmethod
def move(self):
pass
# interfeysni amalga oshiruvchi aniq(mavhum bo'lmagan) klass
class Dog(Animal):
def make_sound(self):
return "Woof!"
def move(self):
return "Running on four legs"
# interfeysni amalga oshiradigan yana bir aniq klass
class Bird(Animal):
def make_sound(self):
return "Chirp!"
def move(self):
return "Flying in the sky"
# funktsiyada interfeysdan foydalanish
def animal_info(animal):
sound = animal.make_sound()
movement = animal.move()
return f"Sound: {sound}\nMovement: {movement}"
# Animal interfeysiga bo'gliq ob'ektlarni yaratish va foydalanish
dog = Dog()
bird = Bird()
print("Dog:")
print(animal_info(dog))
print("\nBird:")
print(animal_info(bird))
Ushbu misolda Animal interfeys vazifasini bajaradigan mavhum klassdir. U ikkita mavhum metodni e’lon qiladi: make_sound va move. Dog va Bird klasslari Animal interfeysidan meros bo’lib, mavhum metodlar uchun aniq amalga oshirishni ta’minlaydi.
Animal_info funksiyasi Animal interfeysiga bog’liq ob’ektni argument sifatida qabul qiladi va uning tovushi va harakati haqidagi ma’lumotlarni chop etadi. dog va bird ob’ektlarini yaratganimizda va ularni animal_info funktsiyasiga o’tkazganimizda, har bir klass o’z interfeysini amalga oshirishini ko’ramiz:
Dog:
Sound: Woof!
Movement: Running on four legs
Bird:
Sound: Chirp!
Movement: Flying in the sky