• Bir nechta merosdan foydalanish kerakmi
  • Ko'p merosxo'rlik bilan bog'liq muammolar Bir nechta merosdan foydalanish kerakmi?




    Download 208.57 Kb.
    Sana06.12.2022
    Hajmi208.57 Kb.
    #33463
    Bog'liq
    Dasturlash asoslari
    Xim tex. Ter-mex.RGR, Birlashma amalini qo, 3072-Текст статьи-7829-1-10-20200908, BEKQULOVA UMIDA, fotima corel draw, A1 MUSOJON

    Reja:


    1. Ko'p meros

    2. Ko'p merosxo'rlik bilan bog'liq muammolar

    3. Bir nechta merosdan foydalanish kerakmi?

    Bir nechta meros bir bola sinfiga bir nechta ota-onalarga ega bo'lish imkonini beradi. Aytaylik, biz o'qituvchilar ishini kuzatish uchun dastur yozmoqchimiz. O'qituvchi - Inson. Biroq, u ham Xodimdir.



    Inson va Xodim xususiyatlarini meros qilib oladigan O'qituvchi sinfini yaratish uchun bir nechta merosdan foydalanish mumkin. Bir nechta merosdan foydalanish uchun siz faqat meros turini va vergul bilan ajratilgan ikkinchi ota-ona sinfini ko'rsatishingiz kerak:

    c54G.getID() ni kompilyatsiya qilishda kompilyator WirelessAdapter-da getID() usuli bor-yo'qligini tekshiradi. Unda bunday usul yo'q, shuning uchun kompilyator meros zanjiri bo'ylab yuqoriga ko'tariladi va bu usul ota-sinflarning birortasida mavjudligini tekshiradi. Va bu erda muammo paydo bo'ladi - USBDevice ham, NetworkDevice ham getID () ga ega. Shuning uchun, bu usulni chaqirish noaniqlikka olib keladi va biz xatoga yo'l qo'yamiz, chunki kompilyator getID() ning qaysi versiyasini chaqirishni bilmaydi.

    Biroq, bu muammoni hal qilishning bir yo'li bor. GetID() ning qaysi versiyasi chaqirilishi kerakligini aniq belgilashimiz mumkin:



    Garchi bu yechim juda oddiy bo'lsa-da, agar sinfimizda kamida 4 ta ota-ona sinfi bo'lsa, ular o'z navbatida o'z ota-onalar sinfiga ega bo'lsa, ishlar ancha murakkablashishi mumkin. Har bir qo'shilgan ota-sinf bilan nomlar to'qnashuvi potentsiali eksponent ravishda oshadi va bu holatlarning har birida nomlar bilan ziddiyat yuzaga kelishining oldini olish uchun siz chaqirilishi kerak bo'lgan usullarning versiyalarini aniq ko'rsatishingiz kerak bo'ladi.
    Ikkinchidan, jiddiyroq muammo - bu "o'lim olmosi" (yoki "qiyomat olmosi"). Bu shunday holatki, bitta sinfda 2 ta ota-klass mavjud bo'lib, ularning har biri o'z navbatida bir xil ota-sinfning xususiyatlarini meros qilib oladi. Tasviriy tarzda, biz olmos shaklini olamiz.

    Masalan, quyidagi sinflarni ko'rib chiqing:



    Skanerlar va printerlar devorga ishlaydigan qurilmalardir, shuning uchun ular PoweredDevice xususiyatlarini meros qilib oladi. Biroq, nusxa ko'chirish mashinasi (Copier) ham skanerlar, ham printerlarning funktsiyalarini o'z ichiga oladi.

    Ushbu kontekstda ko'plab muammolar paydo bo'ladi, jumladan usullarni chaqirishda noaniqlik va PoweredDevice ma'lumotlarini Copier sinfiga ikki marta nusxalash. Ushbu muammolarning aksariyatini aniq bayonot bilan hal qilish mumkin bo'lsa-da, bunday kodni saqlash va saqlash vaqt nuqtai nazaridan oldindan aytib bo'lmaydigan bo'lishi mumkin. Tegishli darsda "o'lim olmosi" muammosini hal qilish usullari haqida batafsil gaplashamiz.
    Bir nechta merosdan foydalanish kerakmi?
    Ko'p merosxo'rlik bilan echilishi mumkin bo'lgan ko'pgina muammolar bitta meros orqali ham hal qilinishi mumkin. Ko'pgina ob'ektga yo'naltirilgan dasturlash tillari (masalan, Smalltalk, PHP) hatto bir nechta merosni qo'llab-quvvatlamaydi. Ko'pgina nisbatan zamonaviy tillar, masalan, Java va C#, sinflarni oddiy sinflarning yagona merosi bilan cheklaydi, lekin interfeys sinflarining bir nechta merosiga ruxsat beradi. Ushbu tillar bir nechta merosni taqiqlaydi degan fikrning mohiyati shundaki, bu qulaylikdan ko'ra ko'proq muammolarni keltirib chiqaradigan keraksiz murakkablikdir.
    Ko'pgina tajribali dasturchilar, yuzaga kelishi mumkin bo'lgan muammolar tufayli C++ tilida bir nechta merosdan har qanday holatda ham qochish kerak deb hisoblaydilar. Biroq, ikki darajali "tayoqchalar" ixtiro qilishdan ko'ra, ko'p merosxo'rlik yaxshiroq yechim bo'lishi ehtimoli hali ham mavjud.

    Shuni ta'kidlash kerakki, siz o'zingiz bilmagan holda bir nechta meros yordamida yozilgan sinflardan foydalangansiz: iostream kutubxonasining std::cin va std::cout kabi ob'ektlari bir nechta meros yordamida amalga oshiriladi!




    Qoida: Ko'p merosdan faqat o'ta og'ir holatlarda, masalani bitta meros orqali yoki boshqa muqobil tarzda ("velosiped" ixtiro qilmasdan) hal qilib bo'lmaydigan hollarda foydalaning.
    Download 208.57 Kb.




    Download 208.57 Kb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    Ko'p merosxo'rlik bilan bog'liq muammolar Bir nechta merosdan foydalanish kerakmi?

    Download 208.57 Kb.