Kompozitsiya va agregatsiya
Classlar va obyektlar bir-birlari bilan bog'lanishi mumkin. Meros qilish "bo'lish" ("IS A") aloqasini tasvirlaydi. Sher hayvon bo'ladi. Bunday munosabatni meros qilish orqali osongina ifodalash mumkin, bu yerda Animal ota sinf, Lion esa voris sifatida ishlatiladi.
Biroq, dunyodagi barcha munosabatlar bunday uslubda tavsiflanmaydi. Masalan, klaviatura aniq kompyuter bilan qandaydir tarzda bog'liq, lekin u kompyuter emas. Qo'llar odam bilan bog'liq, lekin ular odam emas.
Bu holatlarda munosabatning asosi boshqa turdagi bo'ladi: "bo'lish" emas, balki "qismi bo'lish" ("HAS A"). Qo'l odam emas, lekin odamning qismidir. Klaviatura kompyuter emas, lekin kompyuterning qismidir.
HAS A munosabatni kodda ifodalash uchun kompozitsiya va agregatsiya mexanizmlari ishlatiladi. Ular orasidagi farq "qat'iylik" darajasida.
Oddiy misol keltiraylik:
Bizda bir Car — mashina bor.
Har bir mashinada dvigatel bor.
Bundan tashqari, har bir mashina ichida yo'lovchilar bo'ladi.
Engine engine va Passenger [] passengers maydonlari o'rtasidagi asosiy farq nimada? Agar mashinada yo'lovchi A o'tirsa, bu unda yo'lovchilar B va C bo'lmasligini anglatmaydi.
Bitta mashina bir nechta yo'lovchilarga mos kelishi mumkin. Bundan tashqari, agar barcha yo'lovchilar mashinadan tushib ketsa, u hali ham ishlashda davom etadi.
Car va yo'lovchilar massivi Passenger [] passengers sinfi orasidagi aloqa kamroq qat'iy. Bu agregatsiya deb ataladi.
Bu mavzuda yaxshi maqola bor: Sinflar (obyektlar) orasidagi munosabatlar.
Unda agregatsiyaga yana bir yaxshi misol keltirilgan. Tasavvur qiling, bizda talaba belgilangani Student sinf va StudentsGroup (talabalar guruhi) sinfi bor. Talaba fizika ishqibozlari klubi, "Yulduzlar Jangi" talaba fan-klubi yoki KVN jamoasiga kirishi mumkin.
Kompozitsiya — bu ko'proq qat'iy aloqa turi. Kompozitsiyani ishlatganda ob'ekt nafaqat biror ob'ektning qismi bo'ladi, balki u boshqa xuddi shunday turdagi ob'ektning qismi bo'lishi mumkin emas.
Eng oddiy misol — avtomobil dvigateli. Dvigatel avtomobilning qismi, lekin boshqa avtomobilning qismi bo'la olmaydi.
Ko'rib turganingizdek, ularning aloqasiCar va
Passengers ga nisbatan ancha qat'iyroq.
GO TO FULL VERSION