Уроки програмного забезпечення | Hamuv

Підручники з програмного забезпечення => Python => Тема розпочата: Hamuv від Квт. 07, 2025, 02:05 PM

Назва: Python-да Інкапсуляція: Тўлиқ Қўлланма ва Код Намуналари
Відправено: Hamuv від Квт. 07, 2025, 02:05 PM

Python програмалаш тилида інкапсуляція (encapsulation) объектга йўналтирилган програмалаш (ООП) нинг муҳим принципларидан биридир. У маълумотлар ва улар билан ишлайдиган усулларни бир жойга жамлаш, шунингдек, уларга ташқи муҳитдан ноўрин киришни чеклаш имконини беради. Ушбу мақолада Python-да інкапсуляціянинг асослари, уни амалга ошириш усуллари ва амалий код намуналарини кўриб чиқамиз. SEO учун оптималлаштирилган ва фойдаланувчилар учун қулай мазмун тайёрлашга эътибор берамиз.

Інкапсуляція деган нима?
Інкапсуляція — бу класс ичидаги маълумотлар (хусусиятлар) ва усулларни бирлаштириш, шу билан бирга уларни ташқи дунёдан "ҳимоя қилиш" жараёни. Python-да інкапсуляція маълумотларнинг хавфсизлигини таъминлаш ва коднинг модуллигини ошириш учун қўлланади. У икки асосий мақсадга хизмат қилади:

Python-да Інкапсуляціяни Амалга Ошириш
Python-да інкапсуляція тўлиқ мажбурий эмас, чунки тилда қатъий "private" ёки "protected" калит сўзлари йўқ. Лекин ушбу концепцияни амалга ошириш учун махсус конвенциялар ва усуллар мавжуд:

Код Намунаси: Оддий Інкапсуляція
Қуйидаги мисолда Python-да інкапсуляциянинг асосий усуллари кўрсатилган:
class Person:
    def __init__(self, ism, yosh):
        self.ism = ism          # Очиқ хусусият
        self._yosh = yosh       # "Protected" хусусият
        self.__maosh = 5000     # "Private" хусусият

    def get_maosh(self):        # Private хусусиятга кириш учун метод
        return self.__maosh

    def set_maosh(self, yangi_maosh):  # Private хусусиятни ўзгартириш
        if yangi_maosh > 0:
            self.__maosh = yangi_maosh

# Тест қилиш
shaxs = Person("Олексій", 25)
print(shaxs.ism)          # Натижа: Олексій
print(shaxs._yosh)        # Натижа: 25 (лекин бу тавсия этилмайди)
# print(shaxs.__maosh)    # Хатолик: AttributeError
print(shaxs.get_maosh())  # Натижа: 5000
shaxs.set_maosh(6000)
print(shaxs.get_maosh())  # Натижа: 6000


Бу мисолда:

Getter ва Setter Усуллари билан Инкапсуляція
Python-да маълумотларни янада яхши назорат қилиш учун @property декораторидан фойдаланилади. Бу getter ва setter усулларини энг қулай усулда яратиш имконини беради.
class Student:
    def __init__(self, ism):
        self.__ism = ism

    @property
    def ism(self):
        return self.__ism

    @ism.setter
    def ism(self, yangi_ism):
        if isinstance(yangi_ism, str) and len(yangi_ism) > 0:
            self.__ism = yangi_ism
        else:
            print("Хато: Исм тўғри бўлиши керак!")

# Тест қилиш
talaba = Student("Марія")
print(talaba.ism)       # Натижа: Марія
talaba.ism = "Анна"     # Setter ишлайди
print(talaba.ism)       # Натижа: Анна
talaba.ism = ""         # Натижа: Хато: Исм тўғри бўлиши керак!

Бу мисолда __ism хусусияти @property ёрдамида бошқарилади, ва фойдаланувчи уни оддий хусусиятдек ишлатади.

Python-да Інкапсуляциянинг Афзалликлари ва Чекловлари
Афзалликлар:

Чекловлар:

Хулоса
Python-да інкапсуляція маълумотларни яшириш ва кодни тузилган ҳолда сақлаш учун муҳим воситадир. _ ва __ префикслари, шунингдек @property декоратори ёрдамида сиз хавфсиз ва самарали класслар яратишингиз мумкин. Юқоридаги намуналарни синаб кўринг ва ўз лойиҳаларингизда қўлланг!