JavaRush /Блоги Java /Random-TG /Консепсияҳои барномасозии ба объект нигаронидашудаи JAVA
shabnahm
Сатҳи

Консепсияҳои барномасозии ба объект нигаронидашудаи JAVA

Дар гурӯҳ нашр шудааст
JAVA ба мафҳумҳои барномасозии ба an object нигаронидашуда асос ёфтааст, ки ба шумо имкон медиҳад, ки ба сатҳи баландтари абстраксия барои ҳалли ҳама гуна масъалаҳо ба таври воқеӣ гузаред. Равиши ба an object нигаронидашуда роҳи ҳалли мушкилотро дар робита бо an objectҳои воқеии ҷаҳонӣ, ки истифодаи дубора дар барнома осонтар аст, консептуализатсия мекунад. Масалан, Chair(курсӣ), Fan(вентилятор), Dog(Саг), Computer(компютер) ва ғайра. Дар JAVA синф як тарҳ, қолаб ё прототип мебошад, ки рафтори умумии an objectи навъи додашударо муайян мекунад. Мисол татбиқи алоҳидаи синф аст ва ҳамаи мисолҳои синф дорои хосиятҳои якхела мебошанд, ки дар таърифи синф тавсиф шудаанд. Масалан, шумо метавонед синферо бо номи Хона бо шумораи ҳуҷраҳо ҳамчун атрибут муайян кунед ва мисолҳои синфро ба монанди хонаи дуҳуҷрагӣ, хонаи сеҳуҷрагӣ ва ғайра эҷод кунед. Консепсияҳои барномасозии ба an object нигаронидашудаи JAVA - 1Афзалиятҳо: Дар зер баъзе бартариҳои таҳияи нармафзори ба an object нигаронидашуда оварда шудаанд.
  • Кам кардани хароҷоти дастгирии нармафзор, асосан аз сабаби он, ки он ба таври модулӣ амалӣ карда мешавад.
  • Истифодаи такрории code тавассути хусусиятҳо ба монанди мерос, ки боиси тезтар таҳияи нармафзор мегардад.
  • Баланд бардоштани эътимоднокӣ ва чандирии code.
  • Осон фаҳмиш аз сабаби симулятсияи ҷаҳони воқеӣ.
  • Абстраксияи беҳтар дар сатҳи an object.
  • Кам кардани мураккабии гузариш аз як марҳила ба марҳилаи дигар.
Чор хусусияти асосии OOP вуҷуд дорад:
  • Инкапсуляция
  • Мерос
  • Полиморфизм
  • Абстраксия

Инкапсуляция

Инкапсуляция ҳамчун шартнома барои an object амал мекунад, ки он чиро бояд пинҳон кунад ва он чиро барои дастрасии дигар an objectҳо кушояд. Дар JAVA, мо тағирдиҳандаи дастрасиро privateбарои пинҳон кардани усул ва маҳдуд кардани дастрасӣ ба тағирёбанда аз ҷаҳони беруна истифода мебарем. JAVA инчунин тағирдиҳандаҳои гуногуни дастрасӣ дорад: public, пешфарз, protected, private, ки барои маҳдуд кардани аёният дар сатҳҳои гуногун истифода мешаванд. Аммо ҳадафи ниҳоӣ фарогирии он чизҳоест, ки набояд тағир дода шаванд. Бархӯрде, ки беҳтарин кор мекунад, ин аст, ки синф бояд танҳо як сабаб барои тағир дошта бошад ва инкапсуляция тарҳи ин "як сабаб" -ро ба воқеият табдил медиҳад. Муносибати дуруст ба инкапсуляция ин пинҳон кардани чизҳоест, ки зуд-зуд иваз мешаванд, то ба синфҳои дигар осеб нарасонанд. Манфиатҳо: Дар зер баъзе бартариҳои инкапсуляция оварда шудаанд:
  • Мо метавонем ҳолати дохorи an objectро бо пинҳон кардани атрибутҳои он муҳофизат кунем.
  • Ин модулияти codeро беҳтар мекунад, зеро он аз ҳамкории an objectҳо бо роҳҳои ғайричашмдошт пешгирӣ мекунад.
  • Истифодаи codeро беҳтар мекунад.
  • Ин муносибатҳои шартномавии субъекти мушаххасро дастгирӣ мекунад.
  • Инкапсуляция нигоҳдории нармафзорро осонтар мекунад.
  • Тағирот ба codeро новобаста аз ҳамдигар ворид кардан мумкин аст.

Полиморфизм

Полиморфизм дар барномасозӣ ин қобorяти таъмин кардани интерфейси якхела барои шаклҳои гуногуни асосӣ (намудҳои додаҳо) мебошад. Ин маънои онро дорад, ки синфҳое, ки функсияҳои гуногун доранд, интерфейси якхела доранд ва онҳоро бо роҳи интиқоли параметрҳо тавассути истинод динамикӣ даъват кардан мумкин аст. Намунаи классикӣ синф Shape(шакл) ва ҳамаи синфҳое мебошад, ки аз он мерос мегиранд: square(мураббаъ), circle(давра), dodecahedron(додекаэдр), irregular polygon(поликунҷаи номунтазам), splat(блоб) ва ғайра. Дар ин мисол, ҳар як синф усули худро дорад Draw()ва codeи муштарӣ метавонад танҳо иҷро кунад:
Shape shape = new Shape();
Shape.area()Барои ба даст овардани рафтори дурусти ҳама гуна шакл Зебоии полиморфизм дар он аст, ки code, ки бо синфҳои гуногун кор мекунад, донистани он, ки кадом синфро истифода мебарад, лозим нест, зеро ҳама аз рӯи як принсип кор мекунанд. Раванде, ки аз ҷониби забонҳои барномасозии ба an object нигаронидашуда барои татбиқи полиморфизми динамикӣ истифода мешавад, пайвастагии динамикӣ номида мешавад. Эзоҳ: Полиморфизм ин қобorяти интихоби усулҳои мушаххаси иҷро кардани вобаста ба an object мебошад. Полиморфизм вақте рух медиҳад, ки синфҳои абстрактӣ иштирок намекунанд. Афзалиятҳо:
  • Эҷоди рамзи дубора истифодашаванда. Яъне, вақте ки синф сохта, амалӣ ва санҷида мешавад, онро метавон озодона бидуни нигаронӣ аз он ки дар он чӣ навишта шудааст, истифода бурд.
  • Ин имкон медиҳад, ки рамзи бештар умумӣ ва возеҳ пайваст карда шавад.
  • Вақти тартибдиҳӣ кам мешавад, ки ин рушдро суръат мебахшад.
  • Пайвастшавии динамикӣ.
  • Як интерфейсро барои эҷоди усулҳо бо татбиқи гуногун истифода бурдан мумкин аст.
  • Тамоми татбиқро бо истифода аз ҳамон имзоҳои усул иваз кардан мумкин аст.
Усули бекоркунӣ ҳамчун қисми полиморфизм. Бекоркунӣ бо ду усул ҳамкорӣ мекунад: усул дар синфи волидайн ва метод дар синфи ҳосилшуда. Ин усулҳо як ном ва имзо доранд. Барқароркунӣ имкон медиҳад, ки як амалиётро бо роҳҳои гуногун барои намудҳои гуногуни an objectҳо иҷро кунед. Барои намуна:
while(it.hasNext()) {
Shape s = (Shape) it.next();
totalArea += s.area(dim); //будет применен полиморфизм и вызван нужный метод для каждого an object.
}
Консепсияҳои барномасозии ба an object нигаронидашудаи JAVA - 2Усули изофабори ё полиморфизми муваққатӣ ё полиморфизми статикӣ. Сарбории изофӣ бо усулҳои сершумори як синф, ки номашон якхелаанд, вале имзоҳои методҳои гуногун доранд, ҳамкорӣ мекунад. Боркунии дубора ба шумо имкон медиҳад, ки як амалиётро бо роҳҳои гуногун барои маълумоти гуногун тавсиф кунед. Онро баъзан полиморфизми статикӣ меноманд, аммо дар асл он полиморфизм нест. Ин танҳо доштани ду усул бо як ном, балки рӯйхати гуногуни далелҳо чизи дигаре нест. Бозоғозӣ бо мерос ва полиморфизм ҳеҷ иртиботе надорад. Ва усули изофабор бо усули бекоршуда тамоман яксон нест. Полиморфизми параметрӣ тавассути тавлид дар JAVA Ҳангоми эълони синф, майдони ном метавонад бо намудҳои гуногун ва номи метод бо параметрҳо ва намудҳои гуногуни бозгашт алоқаманд бошад. JAVA бо истифода аз генерикҳо полиморфизми параметриро дастгирӣ мекунад.
List<String> list = new ArrayList<String>();
Чаро мо наметавонем усули статикиро дар JAVA бекор кунем? Барқароркунӣ аз мавҷудияти як мисоли синф вобаста аст. Идеяи полиморфизм дар он аст, ки шумо метавонед зерсинф эҷод кунед ва an objectҳое, ки аз ҷониби ин зерсинфҳо амалӣ карда мешаванд, бо ҳамон усулҳои синфи волидайн (дар зерсинфҳо бекор карда шудаанд) ба таври дигар рафтор мекунанд. Усули статикӣ бо ягон мисоли синф алоқаманд нест, бинобар ин худи мафҳуми бекоркунӣ татбиқ карда намешавад. Офарандагони JAVA ду нуктаро роҳнамоӣ карданд, ки ба ин равиш таъсир расониданд. Аввалан, мушкилоти иҷрои рамзҳо вуҷуд доранд: аз Smalltalk барои суст буданаш танқидҳои зиёде вуҷуд доштанд (ҷамъоварии партовҳо ва полиморфизм як қисми ин мушкилот буданд) ва JAVA барои пешгирӣ кардани ин тарҳрезӣ шудааст. Баррасии дуввум ин қарор буд, ки аудиторияи мақсадноки JAVA таҳиягарони C++ хоҳад буд. Бо ин усул кор кардани усулҳои статикӣ барои барномасозони C++ хеле ошно буд ва инчунин суръатро суръат мебахшид, зеро барои фаҳмидани он, ки кадом усулро даъват кардан лозим нест, боло рафтан ба иерархияи синф вуҷуд надошт. Шумо рост ба синф меравед ва усули мушаххасро даъват мекунед.

Мерос

Мерос ин амали ворид кардани рафтор (яъне усулҳо) ва ҳолати (яъне тағирёбандаҳо) синфи асосӣ ба синфи ҳосилшуда мебошад, то онҳо дар он синфи ҳосилшуда дастрас шаванд. Бартарии асосии мерос дар он аст, ки он механизми расмии истифодаи такрории codeро таъмин мекунад ва такрори такрориро пешгирӣ мекунад. Синфи меросӣ функсияи барномаро тавассути нусхабардории рафтори синфи волидайн ва илова кардани функсияҳои нав васеъ мекунад. Ин codeро хеле пайваст мекунад. Агар шумо хоҳед, ки суперклассро иваз кунед, шумо бояд тамоми ҷузъиёти зерсинфҳоро донед, то codeро вайрон накунед. Мерос як шакли истифодаи дубораи нармафзор аст, ки дар он синфи нав (зерсинф) аз синфи мавҷуда (суперсинф) сохта мешавад, ки функсияи онро васеъ мекунад ва баъзе аз хосиятҳои суперсинфро истифода мебарад. Ҳамин тавр, агар шумо синфи волидайн дошта бошед ва баъд синфи кӯдакон пайдо шавад, кӯдак ҳама чизҳоеро, ки волидайн дорад, мерос мегирад. Афзалиятҳо:
  • Истифодаи такрории code такмил дода шудааст.
  • Муносибати мантиқии «аст» (касе, чизест) муқаррар карда мешавад. Масалан : Саг ҳайвон аст . (Саг ҳайвон аст).
  • Модулизатсияи code.
  • Такрорҳо истисно карда мешаванд.
Камбудӣ:
  • Пайвастани зич: Зерсинф аз татбиқи синфи волидайн вобаста аст ва codeро ба ҳам зич пайваст мекунад.

Абстраксия

Абстраксия маънои тарҳрезии синфҳоро дар асоси интерфейсҳо ва функсияҳои онҳо, бе назардошти ҷузъиёти татбиқ. Синфи абстрактӣ интерфейсҳоро бидуни дохил кардани татбиқи воқеӣ муаррифӣ мекунад. Он амалисозии an objectро аз рафтори он фарқ мекунад. Абстраксия codeро тавассути пинҳон кардани ҷузъиёти ночиз содда мекунад. Афзалиятҳо:
  • Бо истифода аз абстраксия, мо метавонем он чизеро, ки ба як намуд гурӯҳбандӣ кардан мумкин аст, ҷудо кунем.
  • Хусусиятҳо ва усулҳои зуд-зуд тағйирёфта метавонанд ба як намуди алоҳида гурӯҳбандӣ карда шаванд, бинобар ин, намуди асосӣ тағир намеёбад. Ин принсипи OOP-ро тақвият медиҳад: "Рамз бояд барои васеъкунӣ кушода бошад, аммо барои тағирот пӯшида бошад . "
  • Абстраксия муаррифии моделҳои доменро содда мекунад.
Тафовут байни абстраксия ва инкапсуляция Инкапсуляция стратегияест, ки ҳамчун қисми абстраксия истифода мешавад. Инкапсуляция ба сохтори an object дахл дорад: an objectҳо хосиятҳои худро фаро мегиранд ва онҳоро аз дастрасии беруна пинҳон мекунанд. Истифодабарандагони синф бо он бо истифода аз усулҳои он ҳамкорӣ мекунанд, аммо ба сохтори синф дастрасии мустақим надоранд. Бо ин роҳ, синф тафсилоти татбиқи марбут ба тарҳрезии онро реферат мекунад. Абстраксия як истилоҳи умумӣ аст. Он инчунин метавонад, дар байни чизҳои дигар, бо истифода аз зерсинфҳо ба даст оварда шавад. Масалан, синф List(рӯйхат) дар китобхонаи стандартӣ абстраксия барои пайдарпаии элементҳо мебошад, ки мувофиқи ҷои онҳо дар рӯйхат индексатсия карда мешавад. Намунаҳои мушаххаси рӯйхат Listё ArrayList. LinkedListКоде, ки бо рӯйхат ҳамкорӣ мекунад, Listтафсилоти кадом рӯйхатро истифода мебарад, абстракт мекунад. Аксар вақт абстраксия бидуни пинҳон кардани ҳолати аслӣ бо истифода аз инкапсуляция ғайриимкон аст. Агар синф сохтори дохorи худро фош кунад, вай наметавонад амалиёти дохorи худро тағир диҳад ва аз ин рӯ абстракт карда намешавад. Синфи абстрактӣ ва усули абстрактӣ чист? Чунин мешавад, ки ҳангоми таҳия шумо мехоҳед, ки синфи асосӣ танҳо интерфейси синфҳои ҳосилшудаи худро таъмин кунад. Яъне шумо намехоҳед, ки касе намунаҳои синфи асосиро эҷод кунад. Ба шумо лозим аст, ки интерфейсро тавре истифода баред, ки шумо танҳо an objectҳоро ба он мепартоед (ин тасвири ғайриоддӣ аст, ки ба рафтори полиморфӣ имкон медиҳад). Ин тавассути абстракт кардани ин синф бо истифода аз калимаи калидӣ ба даст меояд abstract. Ин баъзе маҳдудиятҳоро ҷорӣ мекунад, ба монанди имконнопазирии эҷоди мисолҳои синфи абстрактӣ; ҳангоми истифодаи синфи абстрактӣ, татбиқи усулҳои абстрактӣ зарур аст. Ин полиморфизмро таъмин мекунад. Синфи абстрактӣ метавонад ҳам усулҳои абстрактӣ ва ҳам мушаххасро дар бар гирад. Агар ҳадди аққал як метод дар синф абстрактӣ эълон карда шавад, тамоми синф низ бояд абстрактӣ эълон карда шавад. Аммо, қоида дар самти муқобил набояд риоя карда шавад. Агар синф абстрактӣ эълон карда шавад, он метавонад усулҳои абстрактӣ дошта бошад. Усуле, ки танҳо имзоҳои худро муайян мекунад ва татбиқро таъмин намекунад, абстракт номида мешавад. Татбиқи воқеии он ба зерсинфҳои он гузошта мешавад, ки синфи абстрактиро васеъ мекунанд. Усули абстрактӣ аз ҷониби an object истифода шуда наметавонад, танҳо синфи дигар метавонад онро васеъ кунад. Кай шумо бояд синфи абстрактиро истифода баред? Синфҳои абстрактӣ ба шумо имкон медиҳанд, ки баъзе рафтори пешфарзро муайян кунед ва зерсинфҳо ҳар гуна рафтори мушаххасро таъмин мекунанд. Масалан: List(рӯйхат) интерфейс аст, дар навбати худ AbstractListрафтори асосии Рӯйхатро муайян мекунад, ки он метавонад ҳамчунон истифода шавад ё дар зерсинф тоза карда шавад, масалан, дар ArrayList(массиви рӯйхат). Интерфейс чист? Мафҳуми интерфейс як синфи абстрактист, аммо интерфейс (бо калимаи калидӣ муайян карда мешавад interface) як қадами пештар меравад. Он ҳама гуна татбиқи усул ё функсияро пешгирӣ мекунад. Шумо метавонед танҳо усул ё функсияро эълон кунед, аммо татбиқи онро таъмин карда наметавонед. Синф, ки интерфейсро амалӣ мекунад, бояд дар бораи татбиқи воқеӣ ғамхорӣ кунад. Интерфейсҳо хеле муфиданд ва дар OOP васеъ истифода мешаванд. Азбаски онҳо худи интерфейс ва татбиқро мубодила мекунанд, онҳо бартариҳои зиёди истифодаи онҳоро таъмин мекунанд:
  1. Мероси сершумор .
  2. Пайвастшавии фуҷур . Абстраксияи амалиёт вуҷуд дорад, ба монанди қабатбандӣ ва татбиқи мушаххас метавонад ҳама чиз бошад: JDBC, JPA, JTA ва ғайра.
  3. Барномаи интерфейс иҷро нашудааст .
  4. Полиморфизми динамикӣ ҳатмӣ : Интерфейси барномасозии an object бидуни ошкор кардани татбиқи воқеии он фош мешавад.
  5. Сатҳи абстрактӣ , ҷудокунии функсияҳо.
Тафовут байни интерфейс ва синфи абстрактӣ.
  • Интерфейс як муносибати шартномавӣ бо синфҳое мебошад, ки ин интерфейсро амалӣ мекунанд ва изҳор мекунад, ки татбиқ бо роҳи муайянкардаи интерфейс сурат мегирад. Ин як қабати холӣ бо усулҳои эълоншуда аст.
  • Синфи абстрактӣ баъзе рафтори умумиро муайян мекунад ва аз зерсинфҳои худ хоҳиш мекунад, ки рафтори атипӣ ё мушаххасро барои синфи худ муайян кунанд.
  • Усулҳо ва аъзоёни синфи абстрактӣ метавонанд бо ҳама гуна тағирдиҳандаи дастрасӣ таъин карда шаванд; дар навбати худ, ҳамаи усулҳои интерфейс бояд оммавӣ бошанд.
  • Ҳангоми мерос гирифтани синфи абстрактӣ, синфи насли бояд усулҳои абстрактиро муайян кунад, дар ҳоле ки интерфейс метавонад интерфейси дигарро бидуни муайян кардани усулҳои он мерос гирад.
  • Синфи насл метавонад танҳо як синфи абстрактиро васеъ кунад, аммо интерфейс метавонад васеъ шавад ё синф метавонад бисёр интерфейсҳои дигарро амалӣ кунад.
  • Синфи насли метавонад усулҳои абстрактиро бо тағирдиҳандаи дастрасии якхела ё маҳдудкунанда муайян кунад, аммо синфе, ки интерфейсро амалӣ мекунад, бояд усулҳоро бо ҳамон сатҳи намоён муайян кунад.
  • Интерфейс конструкторҳоро дар бар намегирад, дар ҳоле ки синфи абстрактӣ дорад.
  • Тағйирёбандаҳои дар интерфейси Java эълоншуда ба таври нобаёнӣ ниҳоӣ мебошанд. Синфи абстрактӣ метавонад дорои тағирёбандаҳое бошад, ки ниҳоӣ нестанд.
  • Ҳамаи аъзоёни интерфейси Java мебошанд public. Аъзоёни синфи абстрактӣ метавонанд қодир бошанд publicва protectedғайра.

Таркиб

Истифодаи такрории codeро метавон бо истифода аз мерос ва таркиб ба даст овард. Аммо истифодаи таркиб нисбат ба мерос сатҳи баландтари инкапсуляцияро таъмин мекунад, зеро тағирот дар синфи паси охирин ҳатман ба codeе, ки ба синфи пештара тааллуқ дорад, таъсир намерасонад. Таркиб як усули тарроҳӣ мебошад, ки дар дарсҳо муносибатҳои “ҳас-а”-ро (дороӣ, дар бар мегирад) истифода мебарад. Ҳам мероси java ва ҳам таркиби an objectро барои дубора истифода бурдани code истифода бурдан мумкин аст. Моҳияти композитсия ифодаи муносибатҳои байни an objectҳост. Дар бораи курсӣ фикр кунед. Стул курсӣ дорад. Стул пушт дорад. Курсӣ шумораи муайяни пойҳо дорад. Ибораи «а дорад» муносибатеро дар назар дорад, ки дар он кафедра предмети дигар дорад ё ҳадди ақал онро истифода мебарад. Махз хамин муносибатхои «дорад-а», ки асоси композиция мебошад. Афзалиятҳо:
  • Назорати намоён
  • Татбиқро дар вақти корӣ иваз кардан мумкин аст
  • Пайвастшавии фуҷур, зеро синфи интерфейс аз татбиқ вобаста нест.
Тафовут байни таркиб ва мерос
Не. Таркиб (дорои / дорад) Мерос (аст / аст)
1 Полиморфизм ва истифодаи такрории codeро дастгирӣ мекунад. Полиморфизм ва истифодаи такрории codeро дастгирӣ мекунад.
2 Объекти вақти корӣ аллакай сохта шудааст. Объект дар вақти компиляция динамикӣ сохта мешавад.
3 Татбиқро дар вақти корӣ иваз кардан мумкин аст. Татбиқро дар вақти компиляция тағир додан мумкин аст.
4 Зерсинф аз синфи волидайнаш новобаста аст, ки пайвастагии фуҷурро бартарӣ медиҳад (махсусан таҳти назорати интерфейс). Зерсинф аз татбиқи синфи волидайн вобаста аст, бинобар ин ҳатмӣ қавӣ ҳисобида мешавад.
5 Истифода: Хона ҳаммом дорад. Хона ҳаммом аст, гуфтан нодуруст аст. Мерос яктарафа аст: Хона бино аст. Аммо бино хона нест.
Эзоҳ: Танҳо барои таъмини истифодаи такрории code меросро истифода набаред. Агар ягон муносибати “аст” (аст) набошад, таркиб барои ин мақсадҳо истифода мешавад. Фарқи байни таркиб ва ҷамъкунӣ дар муносибатҳои an objectӣ аст. Агрегатсия ин муносибатест, ки дар он як синф ба коллексия мувофиқат мекунад. Ин як ҷузъи муносибатҳои том аст, ки дар он як қисм метавонад бидуни тамоми мавҷуд бошад. Чунин муносибатҳо хеле заифтаранд. Вобастагии даврӣ вуҷуд надорад. Масалан: фармоиш ва маҳсулот. Таркиб муносибатест, ки дар он як синф ба коллексия мувофиқат мекунад. Ин як ҷузъи муносибатҳои том аст, ки дар он қисм бе тамоми вуҷуд вуҷуд надорад. Агар кулл нобуд шавад, тамоми ҷузъҳои он низ нобуд мешаванд. Ин муносибати қавитар аст. Масалан: бисёркунҷа ва қуллаҳои он, тартиб ва ҷузъи он.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION