JavaRush /Java blogi /Random-UZ /JAVA ob'ektga yo'naltirilgan dasturlash tushunchalari
shabnahm
Daraja

JAVA ob'ektga yo'naltirilgan dasturlash tushunchalari

Guruhda nashr etilgan
JAVA ob'ektga yo'naltirilgan dasturlash kontseptsiyalariga asoslangan bo'lib, har qanday muammoni real tarzda hal qilish uchun yuqori darajadagi abstraksiyaga o'tish imkonini beradi. Ob'ektga yo'naltirilgan yondashuv dasturda qayta foydalanish osonroq bo'lgan real dunyo ob'ektlari nuqtai nazaridan muammoning echimini kontseptuallashtiradi. Masalan, Chair(stul), Fan(fan), Dog(It), Computer(kompyuter) va boshqalar. JAVA da sinf ma'lum turdagi ob'ektning umumiy harakatini belgilaydigan maket, shablon yoki prototipdir. Namuna - bu sinfning alohida amalga oshirilishi va sinfning barcha misollari sinf ta'rifida tasvirlangan bir xil xususiyatlarga ega. Masalan, siz atribut sifatida xonalar soni bilan Uy nomli sinfni belgilashingiz va ikki xonali uy, uch xonali uy va hokazo kabi sinf misollarini yaratishingiz mumkin. JAVA ob'ektga yo'naltirilgan dasturlash tushunchalari - 1Afzalliklari: Quyida ob'ektga yo'naltirilgan dasturiy ta'minotni ishlab chiqishning ba'zi afzalliklari keltirilgan.
  • Dasturiy ta'minotni qo'llab-quvvatlash xarajatlarining kamayishi, asosan u modulli tarzda amalga oshirilganligi sababli.
  • Meros kabi xususiyatlar orqali kodni qayta ishlatish yaxshilandi, natijada dasturiy ta'minot tezroq ishlab chiqildi.
  • Kodning ishonchliligi va moslashuvchanligi ortdi.
  • Haqiqiy dunyo simulyatsiyasi tufayli tushunish qulayligi.
  • Ob'ekt darajasida yaxshiroq abstraktsiya.
  • Bir rivojlanish bosqichidan ikkinchisiga o'tishning murakkabligini kamaytirish.
OOPning to'rtta asosiy xususiyati mavjud:
  • Inkapsulyatsiya
  • Meros olish
  • Polimorfizm
  • Abstraktsiya

Inkapsulyatsiya

Inkapsulyatsiya ob'ekt uchun shartnoma bo'lib, u nimani yashirishi va boshqa ob'ektlar kirishi uchun nimani ochishi kerak. privateJAVA da biz metodni yashirish va tashqi dunyodan o'zgaruvchiga kirishni cheklash uchun kirish modifikatoridan foydalanamiz . JAVA da turli xil kirish modifikatorlari mavjud: public, sukut bo'yicha, protected, private, ular turli darajadagi ko'rinishni cheklash uchun ishlatiladi. Ammo asosiy maqsad o'zgartirilmasligi kerak bo'lgan narsalarni qamrab olishdir. Eng yaxshi ishlaydigan yondashuv shundan iboratki, sinf o'zgarishi uchun faqat bitta sababga ega bo'lishi kerak va inkapsulyatsiya ushbu "bir sabab" dizaynini haqiqatga aylantiradi. Kapsülleme uchun to'g'ri yondashuv boshqa sinflarga zarar bermaslik uchun tez-tez o'zgarib turadigan narsalarni yashirishdir. Afzalliklar: Quyida inkapsulyatsiyaning ba'zi afzalliklari keltirilgan:
  • Biz ob'ektning ichki holatini uning atributlarini yashirish orqali himoya qilishimiz mumkin.
  • Bu kod modulligini yaxshilaydi, chunki u ob'ektlarning kutilmagan tarzda o'zaro ta'sirini oldini oladi.
  • Koddan foydalanish imkoniyatini yaxshilaydi.
  • Bu ma'lum bir shaxsning shartnoma munosabatlarini qo'llab-quvvatlaydi.
  • Inkapsulyatsiya dasturiy ta'minotni saqlashni osonlashtiradi.
  • Kodga o'zgartirishlar bir-biridan mustaqil ravishda amalga oshirilishi mumkin.

Polimorfizm

Dasturlashda polimorfizm - bu turli xil asosiy shakllar (ma'lumotlar turlari) uchun bir xil interfeysni ta'minlash qobiliyati. Bu shuni anglatadiki, turli xil funksionallikka ega sinflar bir xil interfeysga ega va parametrlarni mos yozuvlar orqali uzatish orqali dinamik ravishda chaqirilishi mumkin. Klassik misol sifatida sinf Shape(shakl) va undan meros qolgan barcha sinflar: square(kvadrat), circle(doira), dodecahedron(dodekaedr), irregular polygon(tartibsiz ko'pburchak), splat(blob) va boshqalar. Ushbu misolda har bir sinf o'z uslubiga ega bo'ladi Draw()va mijoz kodi oddiygina qila oladi:
Shape shape = new Shape();
Shape.area()har qanday shaklning to'g'ri xatti-harakatini olish Polimorfizmning go'zalligi shundaki, turli sinflar bilan ishlaydigan kod qaysi sinfdan foydalanishini bilishi shart emas, chunki ularning barchasi bir xil printsip asosida ishlaydi. Dinamik polimorfizmni amalga oshirish uchun ob'ektga yo'naltirilgan dasturlash tillari tomonidan qo'llaniladigan jarayon dinamik bog'lanish deb ataladi. Eslatma: Polimorfizm - bu ob'ektga qarab bajarish uchun aniqroq usullarni tanlash qobiliyati. Polimorfizm mavhum sinflar ishtirok etmaganida yuzaga keladi. Afzalliklari:
  • Qayta foydalanish mumkin bo'lgan kod yaratish. Ya'ni, sinf yaratilgan, amalga oshirilgan va sinovdan o'tkazilgandan so'ng, unda aniq nima yozilganligi haqida o'ylamasdan erkin foydalanish mumkin.
  • Bu ko'proq umumiy va erkin bog'langan kodga imkon beradi.
  • Kompilyatsiya vaqti qisqaradi, bu esa rivojlanishni tezlashtiradi.
  • Dinamik ulanish.
  • Xuddi shu interfeys turli xil ilovalar bilan usullarni yaratish uchun ishlatilishi mumkin.
  • Butun amalga oshirish bir xil usul imzolari yordamida almashtirilishi mumkin.
Polimorfizmning bir qismi sifatida usulni bekor qilish. Qayta belgilash ikkita usul bilan o'zaro ta'sir qiladi: ota-klassdagi usul va olingan sinfdagi usul. Ushbu usullar bir xil nom va imzolarga ega. Qayta belgilash har xil turdagi ob'ektlar uchun bir xil amalni turli usullarda bajarishga imkon beradi. Masalan:
while(it.hasNext()) {
Shape s = (Shape) it.next();
totalArea += s.area(dim); //будет применен полиморфизм и вызван нужный метод для каждого an object.
}
JAVA ob'ektga yo'naltirilgan dasturlash tushunchalari - 2Usulni haddan tashqari yuklash yoki vaqtinchalik polimorfizm yoki statik polimorfizm Haddan tashqari yuklash bir xil nomga ega, ammo turli xil usul imzolariga ega bo'lgan bir xil sinfning bir nechta usullari bilan o'zaro ta'sir qiladi. Qayta yuklash turli ma'lumotlar uchun bir xil operatsiyani turli usullarda tasvirlash imkonini beradi. Uni ba'zan statik polimorfizm deb ham atashadi, lekin aslida bu polimorfizm emas. Bu shunchaki bir xil nomli ikkita usulga ega bo'lishdan boshqa narsa emas, balki argumentlarning boshqa ro'yxati. Qayta yuklashning meros va polimorfizm bilan hech qanday aloqasi yo'q. Va ortiqcha yuklangan usul bekor qilingan usul bilan bir xil emas. JAVA da Generication orqali parametrik polimorfizm Sinfni e'lon qilishda nom maydoni turli tiplar bilan, metod nomi esa turli parametrlar va qaytarish turlari bilan bog'lanishi mumkin. JAVA generiklar yordamida parametrik polimorfizmni qo'llab-quvvatlaydi.
List<String> list = new ArrayList<String>();
Nima uchun biz JAVA da statik usulni bekor qila olmaymiz? Qayta belgilash sinfning namunasi mavjudligiga bog'liq. Polimorfizm g'oyasi shundan iboratki, siz kichik sinf yaratishingiz mumkin va bu kichik sinflar tomonidan amalga oshirilgan ob'ektlar ota-klassning bir xil usullari bilan boshqacha harakat qiladi (kichik sinflarda bekor qilingan). Statik usul sinfning hech qanday misollari bilan bog'lanmagan, shuning uchun bekor qilish kontseptsiyasining o'zini qo'llash mumkin emas. JAVA yaratuvchilari ushbu yondashuvga ta'sir ko'rsatgan ikkita fikrga asoslanishdi. Birinchidan, kodni bajarish bilan bog'liq muammolar mavjud: Smalltalk sekinligi uchun juda ko'p tanqid qilindi (axlat yig'ish va polimorfizm bu muammoning bir qismi edi) va JAVA buni oldini olish uchun ishlab chiqilgan. Ikkinchi mulohaza JAVA ning maqsadli auditoriyasi C++ dasturchilari bo'lishi haqidagi qaror edi. Statik usullarning shu tarzda ishlashi C++ dasturchilariga juda yaxshi tanish edi, shuningdek, ishlarni tezlashtirdi, chunki qaysi usulni chaqirish kerakligini aniqlash uchun sinf ierarxiyasiga ko'tarilishning hojati yo'q edi. Siz to'g'ridan-to'g'ri sinfga borasiz va ma'lum bir usulni chaqirasiz.

Meros olish

Meros - bu asosiy sinfning xatti-harakati (ya'ni usullari) va holatini (ya'ni o'zgaruvchilari) hosila sinfga qo'shish harakati, shunda ular shu hosila sinfda mavjud bo'ladi. Merosning asosiy afzalligi shundaki, u kodni qayta ishlatish uchun rasmiy mexanizmni ta'minlaydi va takrorlanishning oldini oladi. Meroslangan sinf ota-klassning xatti-harakatlarini nusxalash va yangi funksiyalarni qo'shish orqali ilovaning funksionalligini kengaytiradi. Bu kodni yuqori darajada bog'langan qiladi. Agar siz yuqori sinfni o'zgartirmoqchi bo'lsangiz, kodni buzmaslik uchun pastki sinflarning barcha tafsilotlarini bilishingiz kerak bo'ladi. Meros - bu dasturiy ta'minotni qayta ishlatish shakli bo'lib, unda mavjud sinfdan (supersinf) yangi sinf (quyi sinf) yaratiladi, u o'zining funksionalligini kengaytiradi va supersinfning ba'zi xususiyatlaridan foydalanadi. Shunday qilib, agar sizda ota-ona sinfi bo'lsa va keyin bolalar sinfi paydo bo'lsa, bola ota-onadagi barcha narsalarni meros qilib oladi. Afzalliklari:
  • Yaxshilangan kodni qayta ishlatish.
  • “A” (kimdir, nimadir) mantiqiy munosabati o'rnatiladi. Masalan : It n hayvondir . (It - bu hayvon).
  • Kodni modullashtirish.
  • Takrorlashlar bundan mustasno.
Kamchilik:
  • Qattiq bog'langan: pastki sinf ota-sinfni amalga oshirishga bog'liq bo'lib, kodni mahkam bog'laydi.
Yana nimani o'qish kerak:

Java dasturchilar guruhi:

Abstraktsiya

Abstraktsiya - amalga oshirish tafsilotlarini hisobga olmasdan, ularning interfeyslari va funksionalligi asosida sinflarni loyihalashni anglatadi. Mavhum sinf haqiqiy amalga oshirishni o'z ichiga olmasdan interfeyslarni ifodalaydi. Ob'ektning amalga oshirilishini uning xatti-harakatidan ajratib turadi. Abstraktsiya ahamiyatsiz tafsilotlarni yashirish orqali kodni soddalashtiradi. Afzalliklari:
  • Abstraktsiyani qo'llash orqali biz qandaydir turga guruhlanishi mumkin bo'lgan narsalarni ajratishimiz mumkin.
  • Tez-tez o'zgarib turadigan xususiyatlar va usullarni alohida turga guruhlash mumkin, shuning uchun asosiy tur o'zgarishlarga duchor bo'lmaydi. Bu OOP tamoyilini mustahkamlaydi: "Kod kengaytma uchun ochiq bo'lishi kerak, lekin o'zgartirish uchun yopiq bo'lishi kerak . "
  • Abstraktsiya domen modellarini tasvirlashni soddalashtiradi.
Abstraksiya va inkapsulyatsiya o'rtasidagi farq Inkapsulyatsiya - bu abstraktsiyaning bir qismi sifatida ishlatiladigan strategiya. Inkapsulyatsiya ob'ektning tuzilishiga ishora qiladi: ob'ektlar o'z xususiyatlarini inkapsullaydi va ularni tashqi kirishdan yashiradi. Sinf foydalanuvchilari u bilan uning usullaridan foydalangan holda o'zaro aloqada bo'lishadi, lekin sinf tuzilishiga to'g'ridan-to'g'ri kirish imkoniga ega emaslar. Shu tarzda, sinf uning dizayni bilan bog'liq amalga oshirish tafsilotlarini abstrakt qiladi. Abstraksiya umumiyroq atamadir. Bunga boshqa narsalar qatori kichik sinflar yordamida ham erishish mumkin. Masalan, Liststandart kutubxonadagi sinf (ro'yxat) - bu ro'yxatdagi o'rniga qarab indekslangan elementlar ketma-ketligi uchun abstraktsiya. Ro'yxatning o'ziga xos misollari Listyoki ArrayList. LinkedListRoʻyxat bilan Listoʻzaro aloqada boʻlgan kod qaysi roʻyxatdan foydalanishi haqida maʼlumot beradi. Ko'pincha inkapsulyatsiya yordamida asosiy holatni yashirmasdan abstraktsiya qilish mumkin emas. Agar sinf o'zining ichki tuzilishini ochib bersa, u o'zining ichki operatsiyalarini o'zgartira olmaydi va shuning uchun mavhum bo'lmaydi. Abstrakt sinf va mavhum usul nima? Rivojlanish jarayonida siz asosiy sinfni faqat uning hosila sinflariga interfeys bilan ta'minlashini xohlaysiz. Ya'ni, siz hech kimning asosiy sinf namunalarini yaratishini xohlamaysiz. Siz interfeysdan shunday foydalanishingiz kerakki, siz unga faqat ob'ektlarni o'tkazasiz (bu polimorfik xatti-harakatlarga ruxsat beruvchi yashirin translatsiya). Bunga kalit so'z yordamida ushbu sinfni mavhum qilish orqali erishiladi abstract. Bu mavhum sinf misollarini yaratish mumkin emasligi kabi ba'zi cheklovlarni qo'yadi; mavhum sinfdan foydalanganda mavhum usullarni qo'llash kerak. Bu polimorfizmni ta'minlaydi. Abstrakt sinf mavhum va aniq usullarni o'z ichiga olishi mumkin. Agar sinfdagi kamida bitta usul mavhum deb e'lon qilingan bo'lsa, butun sinf ham mavhum deb e'lon qilinishi kerak. Biroq, teskari yo'nalishdagi qoidaga rioya qilish shart emas. Agar sinf mavhum deb e'lon qilingan bo'lsa, unda mavhum usullar bo'lmasligi mumkin. Faqat imzolarini belgilaydigan va amalga oshirishni ta'minlamaydigan usul abstrakt deb ataladi. Uning haqiqiy amalga oshirilishi mavhum sinfni kengaytiradigan kichik sinflarga qoldiriladi. Ob'ekt tomonidan mavhum usuldan foydalanish mumkin emas, faqat boshqa sinf uni kengaytirishi mumkin. Qachon mavhum sinfdan foydalanish kerak? Mavhum sinflar ba'zi bir odatiy xatti-harakatlarni aniqlashga imkon beradi va pastki sinflar har qanday o'ziga xos xatti-harakatni ta'minlaydi. Masalan: List(ro'yxat) interfeys bo'lib, o'z navbatida AbstractListRo'yxatning asosiy xatti-harakatlarini belgilaydi, undan avvalgidek ishlatilishi yoki kichik sinfda, masalan, ArrayList(ro'yxat massivi) da yaxshilanishi mumkin. Interfeys nima? Interfeys tushunchasi mavhum sinfdir, lekin interfeys (kalit so'z bilan belgilanadi interface) bir qadam oldinga boradi. Bu usul yoki funktsiyaning har qanday amalga oshirilishiga to'sqinlik qiladi. Siz faqat usul yoki funktsiyani e'lon qilishingiz mumkin, lekin uni amalga oshirishni ta'minlay olmaysiz. Interfeysni amalga oshiradigan sinf haqiqiy amalga oshirish haqida g'amxo'rlik qilishi kerak. Interfeyslar juda foydali va OOPda keng qo'llaniladi. Ular interfeysning o'zi va amalga oshirilishini baham ko'rganligi sababli, ulardan foydalanishning ko'plab afzalliklari mavjud:
  1. Ko'p meros .
  2. Bo'shashgan ulanish . Qatlamlash kabi operatsiyaning abstraktsiyasi mavjud va aniq amalga oshirish har qanday bo'lishi mumkin: JDBC, JPA, JTA va boshqalar.
  3. Interfeys dasturi amalga oshirilmagan .
  4. Dinamik bog'lanish polimorfizmi : ob'ektning dasturlash interfeysi uning amalda bajarilishini oshkor qilmasdan ochiladi.
  5. Mavhum darajalar , funksionallikni ajratish.
Interfeys va mavhum sinf o'rtasidagi farq.
  • Interfeys - bu interfeysni amalga oshiradigan sinflar bilan shartnomaviy munosabatlar bo'lib, amalga oshirish interfeys tomonidan belgilangan tarzda sodir bo'lishini bildiradi. Bu e'lon qilingan usullarga ega bo'sh qobiqdir.
  • Mavhum sinf ba'zi umumiy xatti-harakatlarni belgilaydi va uning pastki sinflaridan o'z sinflari uchun atipik yoki o'ziga xos xatti-harakatlarni aniqlashni so'raydi.
  • Mavhum sinfning usullari va a'zolari har qanday kirish modifikatori bilan belgilanishi mumkin, o'z navbatida, barcha interfeys usullari ommaviy bo'lishi kerak.
  • Mavhum sinfni meros qilib olishda, avlod sinfi mavhum usullarni belgilashi kerak, interfeys esa uning usullarini aniqlamasdan boshqa interfeysni meros qilib olishi mumkin.
  • Avlod sinf faqat bitta mavhum sinfni kengaytirishi mumkin, lekin interfeys kengaytirilishi yoki sinf boshqa ko'plab interfeyslarni amalga oshirishi mumkin.
  • Nasl sinf mavhum usullarni bir xil yoki kamroq cheklangan kirish modifikatori bilan belgilashi mumkin, ammo interfeysni amalga oshiruvchi sinf bir xil ko'rinish darajasiga ega usullarni belgilashi kerak.
  • Interfeysda konstruktorlar mavjud emas, mavhum sinfda esa mavjud.
  • Java interfeysida e'lon qilingan o'zgaruvchilar sukut bo'yicha yakuniy hisoblanadi. Abstrakt sinf yakuniy bo'lmagan o'zgaruvchilarni o'z ichiga olishi mumkin.
  • Java interfeysining barcha a'zolari public. Mavhum sinf a'zolari bo'lish imkoniyatiga ega va hokazo public.protected

Tarkibi

Kodni qayta ishlatish ham meros, ham kompozitsiya yordamida amalga oshirilishi mumkin. Ammo kompozitsiyadan foydalanish merosga qaraganda yuqori darajadagi inkapsulyatsiyani ta'minlaydi, chunki orqa sinfga o'zgartirishlar front-end sinfiga tegishli kodga ta'sir qilishi shart emas. Kompozitsiya - bu darslarda "has-a" (bor, o'z ichiga oladi) munosabatlaridan foydalanadigan dizayn texnikasi. Kodni qayta ishlatish uchun java merosi va ob'ekt kompozitsiyasidan foydalanish mumkin. Kompozitsiyaning mohiyati ob'ektlar orasidagi "bor" munosabatini ifodalashdan iborat. Kreslo haqida o'ylab ko'ring. Kresloda o'rindiq bor. Kresloning orqa tomoni bor. Kresloda ma'lum miqdordagi oyoqlar mavjud. "Has a" iborasi stul boshqa ob'ektga ega bo'lgan yoki hech bo'lmaganda foydalanadigan munosabatni bildiradi. Bu kompozitsiyaning asosi bo'lgan "has-a" munosabatlaridir. Afzalliklari:
  • Ko'rinishni nazorat qilish
  • Amalga oshirish ish vaqtida almashtirilishi mumkin
  • Bo'shashmasdan ulanish, chunki interfeys klassi amalga oshirishga bog'liq emas.
Tarkibi va meros o'rtasidagi farqlar
Yo'q. Tarkibi (bor / bor) Meros (a / hisoblanadi)
1 Polimorfizm va kodni qayta ishlatishni qo'llab-quvvatlaydi. Polimorfizm va kodni qayta ishlatishni qo'llab-quvvatlaydi.
2 Ish vaqti obyekti allaqachon yaratilgan. Ob'ekt kompilyatsiya vaqtida dinamik ravishda yaratiladi.
3 Amalga oshirish ish vaqtida almashtirilishi mumkin. Amalga oshirish kompilyatsiya vaqtida o'zgartirilishi mumkin.
4 Pastki sinf o'zining ota-klassidan mustaqil bo'lib, u bo'sh ulanishni qo'llab-quvvatlaydi (ayniqsa interfeys nazorati ostida). Kichik sinf ota-sinfning amalga oshirilishiga bog'liq, shuning uchun bog'lanish kuchli hisoblanadi.
5 Foydalanish: Uyda hammom bor. Uyni hammom deb aytish noto'g'ri. Meros bir yo'nalishli: uy - bu bino. Ammo bu bino uy emas.
Eslatma: Kodni qayta ishlatishni ta'minlash uchun merosdan foydalanmang. Agar “a” (is) munosabati bo'lmasa, kompozitsiya bu maqsadlar uchun ishlatiladi. Kompozitsiya va yig'ish o'rtasidagi farq ob'ekt munosabatlarida. Agregatsiya - bu bir sinf to'plamga mos keladigan munosabatlar. Bu butun munosabatlarning bir qismi bo'lib, unda bir qism butun holda mavjud bo'lishi mumkin. Bunday munosabatlar ancha zaifdir. Siklik qaramlik yo'q. Masalan: buyurtma va mahsulot. Kompozitsiya - bu bir sinf to'plamga mos keladigan munosabatlar. Bu butun munosabatlarning bir qismi bo'lib, unda bir qism butun holda mavjud bo'lmaydi. Agar butun vayron bo'lsa, uning barcha tarkibiy qismlari ham yo'q qilinadi. Bu kuchliroq munosabatlar. Masalan: ko`pburchak va uning uchlari, tartib va ​​uning komponenti.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION