JavaRush /Java блогы /Random-KK /JAVA объектіге бағытталған бағдарламалау концепциялары
shabnahm
Деңгей

JAVA объектіге бағытталған бағдарламалау концепциялары

Топта жарияланған
JAVA an objectілі-бағытталған бағдарламалау концепцияларына негізделген, ол кез келген мәселені шынайы түрде шешу үшін абстракцияның жоғары деңгейіне өтуге мүмкіндік береді. Нысанға-бағытталған тәсіл мәселенің шешімін қолданбада қайта пайдалану оңай нақты дүние нысандары тұрғысынан тұжырымдайды. Мысалы, Chair(орындық), Fan(желдеткіш), Dog(Ит), Computer(компьютер) және т.б. JAVA-да класс - берілген типтегі нысанның жалпы әрекетін анықтайтын макет, үлгі немесе прототип. Дана - бұл сыныптың жеке жүзеге асырылуы және сыныптың барлық даналары сынып анықтамасында сипатталған бірдей қасиеттерге ие. Мысалы, атрибут ретінде бөлмелер саны бар Үй деп аталатын сыныпты анықтай аласыз және екі бөлмелі үй, үш бөлмелі үй және т.б. сияқты сынып даналарын жасай аласыз. JAVA an objectіге бағытталған бағдарламалау концепциялары – 1Артықшылықтары: Төменде an objectіге бағытталған бағдарламалық жасақтаманы әзірлеудің кейбір артықшылықтары берілген.
  • Негізінен оның модульдік түрде жүзеге асырылуына байланысты бағдарламалық қамтамасыз етуді қолдау шығындарының төмендеуі.
  • Мұрагерлік сияқты мүмкіндіктер арқылы жақсартылған codeты қайта пайдалану, нәтижесінде бағдарламалық жасақтаманың тезірек жасалуы.
  • Код сенімділігі мен икемділігі артады.
  • Нақты әлемді модельдеудің арқасында түсіну оңай.
  • Объекті деңгейінде жақсырақ абстракция.
  • Бір даму фазасынан екіншісіне өтудің күрделілігін төмендету.
OOP төрт негізгі сипаттамасы бар:
  • Инкапсуляция
  • Мұрагерлік
  • Полиморфизм
  • Абстракция

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

Инкапсуляция an object үшін келісімшарт ретінде әрекет етеді, ол нені жасыруы керек және басқа нысандардың қол жеткізуі үшін не ашу керек. privateJAVA-да біз әдісті жасыру және сыртқы әлемнен айнымалыға қол жеткізуді шектеу үшін қатынас модификаторын қолданамыз . JAVA-да сонымен қатар әртүрлі қол жеткізу модификаторлары бар: public, әдепкі, protected, private, олар әртүрлі деңгейлерде көрінуді шектеу үшін қолданылады. Бірақ түпкі мақсат - өзгертілмейтін нәрселерді инкапсуляциялау. Ең жақсы жұмыс істейтін әдіс - сыныпта өзгертуге бір ғана себеп болуы керек, ал инкапсуляция сол «бір себептің» дизайнын шындыққа айналдырады. Инкапсуляцияның дұрыс тәсілі - басқа сыныптарға зиян келтірмеу үшін жиі өзгеретін нәрселерді жасыру. Артықшылықтары: Төменде инкапсуляцияның кейбір артықшылықтары берілген:
  • Біз an objectінің ішкі күйін оның атрибуттарын жасыру арқылы қорғай аламыз.
  • Бұл code модульділігін жақсартады, себебі ол нысандардың күтпеген жолдармен әрекеттесуіне жол бермейді.
  • Кодты пайдалану мүмкіндігін жақсартады.
  • Бұл белгілі бір субъектінің шарттық қатынасын қолдайды.
  • Инкапсуляция бағдарламалық құралға техникалық қызмет көрсетуді жеңілдетеді.
  • Кодқа өзгертулер бір-бірінен тәуелсіз жасалуы мүмкін.

Полиморфизм

Бағдарламалаудағы полиморфизм - бұл әртүрлі негізгі формалар (деректер түрлері) үшін бірдей интерфейсті қамтамасыз ету мүмкіндігі. Бұл әртүрлі функционалдығы бар сыныптар бірдей интерфейсті бөлісетінін және сілтеме бойынша параметрлерді беру арқылы динамикалық түрде шақырылуы мүмкін екенін білдіреді. Классикалық мысал – класс Shape(пішін) және одан мұрагер болатын барлық кластар: square(шаршы), circle(шеңбер), dodecahedron(додекаэдр), irregular polygon(дұрыс емес көпбұрыш), splat(блоб) және т.б. Бұл мысалда әрбір сыныптың өз әдісі болады Draw()және клиент codeы жай орындай алады:
Shape shape = new Shape();
Shape.area()кез келген пішіннің дұрыс әрекетін алу үшін Полиморфизмнің сұлулығы мынада, әртүрлі класстармен жұмыс істейтін code қай классты қолданатынын білудің қажеті жоқ, өйткені олардың барлығы бір принцип бойынша жұмыс істейді. Динамикалық полиморфизмді жүзеге асыру үшін an objectілі-бағытталған бағдарламалау тілдерінде қолданылатын процесс динамикалық байланыстыру деп аталады. Ескерту: Полиморфизм - бұл нысанға байланысты орындау үшін неғұрлым нақты әдістерді таңдау мүмкіндігі. Полиморфизм абстрактілі сыныптар қатыспаған кезде пайда болады. Артықшылықтары:
  • Қайта пайдалануға болатын codeты жасау. Яғни, сыныпты жасап, іске асырып, сынақтан өткізгеннен кейін, онда нақты не жазылғаны туралы алаңдамай, оны еркін пайдалануға болады.
  • Бұл жалпы және еркін біріктірілген codeқа мүмкіндік береді.
  • Компиляция уақыты қысқарады, бұл дамуды жылдамдатады.
  • Динамикалық байланыстыру.
  • Бір интерфейсті әртүрлі іске асыру әдістерін жасау үшін пайдалануға болады.
  • Бүкіл іске асыруды бірдей әдіс қолтаңбаларын пайдалану арқылы ауыстыруға болады.
Полиморфизмнің бөлігі ретінде әдісті қайта анықтау. Қайта анықтау екі әдіспен әрекеттеседі: негізгі сыныптағы әдіс және туынды сыныптағы әдіс. Бұл әдістердің аты мен қолтаңбасы бірдей. Қайта анықтау бір операцияны әртүрлі нысандар үшін әртүрлі тәсілдермен орындауға мүмкіндік береді. Мысалы:
while(it.hasNext()) {
Shape s = (Shape) it.next();
totalArea += s.area(dim); //будет применен полиморфизм и вызван нужный метод для каждого an object.
}
JAVA an objectіге бағытталған бағдарламалау концепциялары – 2Әдістің шамадан тыс жүктелуі немесе уақытша полиморфизмі немесе статикалық полиморфизмі Шамадан тыс жүктелуі бірдей аталған, бірақ әдіс белгілері әртүрлі бір сыныптың бірнеше әдістерімен әрекеттеседі. Қайта жүктеу әртүрлі деректер үшін бір әрекетті әртүрлі тәсілдермен сипаттауға мүмкіндік береді. Оны кейде статикалық полиморфизм деп те атайды, бірақ іс жүзінде бұл полиморфизм емес. Бұл бірдей атаулары бар екі әдіске ие болудан басқа ештеңе емес, бірақ дәлелдердің басқа тізімі. Қайта жүктеу мұраға және полиморфизмге ешқандай қатысы жоқ. Ал шамадан тыс жүктелген әдіс қайта анықталған әдіспен мүлдем бірдей емес. JAVA-да генерациялау арқылы параметрлік полиморфизм Классты жариялау кезінде атау өрісі әртүрлі типтермен, ал әдіс атауы әртүрлі параметрлермен және қайтару түрлерімен байланыстырылуы мүмкін. JAVA генериктерді пайдалану арқылы параметрлік полиморфизмді қолдайды.
List<String> list = new ArrayList<String>();
Неліктен JAVA-да статикалық әдісті қайта анықтай алмаймыз? Қайта анықтау сынып данасы бар болуына байланысты. Полиморфизм идеясы мынада: сіз ішкі класс жасай аласыз және сол ішкі сыныптар жүзеге асыратын an objectілер ата-аналық сыныптың бірдей әдістерімен (ішкі сыныптарда қайта белгіленген) басқаша әрекет етеді. Статикалық әдіс сыныптың ешбір даналарымен байланысты емес, сондықтан қайта анықтау тұжырымдамасының өзін қолдану мүмкін емес. JAVA жасаушылар осы тәсілге әсер еткен екі ойды басшылыққа алды. Біріншіден, codeты орындау проблемалары бар: Smalltalk-тың баяу жұмыс істеуі үшін көп сын айтылды (қоқыс жинау және полиморфизм осы мәселенің бөлігі болды) және JAVA мұны болдырмау үшін жасалған. Екінші мәселе JAVA-ның мақсатты аудиториясы C++ әзірлеушілері болады деген шешім болды. Статикалық әдістердің осылай жұмыс істеуі C++ бағдарламашыларына өте жақсы таныс болды, сонымен қатар қай әдісті шақыру керектігін анықтау үшін сынып иерархиясына көтерілудің қажеті жоқ болғандықтан, жұмысты жылдамдатты. Сіз тікелей сыныпқа барып, белгілі бір әдісті шақырасыз.

Мұрагерлік

Мұрагерлік - негізгі сыныптың мінез-құлқын (яғни әдістер) және күйін (яғни айнымалылар) туынды сыныпқа қосу әрекеті, осылайша олар сол туынды сыныпта қолжетімді болады. Мұрагерліктің басты артықшылығы - ол codeты қайта пайдаланудың ресми механизмін қамтамасыз етеді және қайталануды болдырмайды. Мұраланған сынып негізгі сыныптың әрекетін көшіру және жаңа функцияларды қосу арқылы қолданбаның функционалдығын кеңейтеді. Бұл codeты жоғары байланыстырады. Егер сіз суперклассты өзгерткіңіз келсе, codeты бұзбау үшін ішкі сыныптардың барлық мәліметтерін білуіңіз керек. Мұрагерлік – бағдарламалық қамтамасыз етуді қайта пайдаланудың бір түрі, мұнда жаңа сынып (ішкі сынып) бар сыныптан (суперкласс) құрылады, ол өзінің функционалдығын кеңейтеді және суперсыныптың кейбір қасиеттерін пайдаланады. Сонымен, егер сізде ата-ана сыныбы болса, содан кейін еншілес сынып пайда болса, бала ата-ананың барлық нәрселерін мұраға алады. Артықшылықтары:
  • Жақсартылған codeты қайта пайдалану.
  • «А» (біреу, бірдеңе) логикалық қатынасы орнатылады. Мысалы: Ит - бұл n жануар . (Ит - жануар).
  • Кодты модульдеу.
  • Қайталаулар алынып тасталады.
Кемшілік:
  • Тығыз байланыстырылған: Ішкі сынып codeты тығыз байланыстыратын ата-аналық сыныпты іске асыруға байланысты.

Абстракция

Абстракция дегеніміз жүзеге асыру мәліметтерін есепке алмай, олардың интерфейстері мен функционалдығы негізінде сыныптарды жобалау. Абстрактілі класс интерфейстерді нақты іске асыруды қоспай көрсетеді. Ол an objectінің жүзеге асуын оның мінез-құлқынан ажыратады. Абстракция маңызды емес мәліметтерді жасыру арқылы codeты жеңілдетеді. Артықшылықтары:
  • Абстракцияны қолдану арқылы біз қандай да бір түрге топтастыруға болатын нәрсені ажырата аламыз.
  • Жиі өзгертілетін қасиеттер мен әдістерді жеке түрге топтастыруға болады, сондықтан негізгі түр өзгерістерге ұшырамайды. Бұл OOP принципін нығайтады: «Код кеңейтімге ашық, бірақ өзгертуге жабық болуы керек » .
  • Абстракция домендік үлгілерді көрсетуді жеңілдетеді.
Абстракция мен инкапсуляция арасындағы айырмашылық Инкапсуляция - абстракцияның бөлігі ретінде қолданылатын стратегия. Инкапсуляция an objectінің құрылымын білдіреді: нысандар олардың қасиеттерін инкапсуляциялайды және оларды сыртқы қол жеткізуден жасырады. Класстың пайдаланушылары онымен оның әдістерін пайдалана отырып әрекеттеседі, бірақ сынып құрылымына тікелей қатынаса алмайды. Осылайша, сынып оның дизайнына қатысты іске асыру мәліметтерін абстракциялайды. Абстракция - бұл жалпылама термин. Оған басқалармен қатар ішкі сыныптарды пайдалана отырып қол жеткізуге болады. Мысалы, Listстандартты кітапханадағы сынып (тізім) тізімдегі орнына сәйкес индекстелген элементтер тізбегі үшін абстракция болып табылады. Тізімнің нақты мысалдары Listнемесе ArrayList. LinkedListТізіммен әрекеттесетін code Listол қолданатын тізімнің мәліметтерін қысқартады. Көбінесе абстракция инкапсуляцияны пайдаланып негізгі күйді жасырмай мүмкін емес. Егер сынып өзінің ішкі құрылымын ашса, ол өзінің ішкі операцияларын өзгерте алмайды, сондықтан абстракцияланбайды. Абстрактілі класс және дерексіз әдіс дегеніміз не? Әзірлеу кезінде сіз базалық класс тек оның туынды сыныптарына интерфейсті беруін қалайсыз. Яғни, сіз ешкімнің негізгі сыныптың даналарын жасағанын қаламайсыз. Интерфейсті тек оған нысандарды шығаратындай етіп пайдалану керек (бұл полиморфты әрекетке мүмкіндік беретін жасырын трансляция). Бұл кілт сөзді пайдаланып осы сыныпты дерексіз ету арқылы қол жеткізіледі abstract. Бұл абстрактілі класс данасын құру мүмкін еместігі сияқты кейбір шектеулерді қояды; дерексіз классты пайдаланған кезде абстрактілі әдістерді енгізу қажет. Бұл полиморфизмді қамтамасыз етеді. Абстрактілі класс абстрактілі және нақты әдістерді қамтуы мүмкін. Егер сыныптағы кем дегенде бір әдіс абстрактілі деп жарияланса, бүкіл сыныпты да дерексіз деп жариялау керек. Дегенмен, қарама-қарсы бағыттағы ережені сақтау міндетті емес. Егер сынып абстрактілі деп жарияланса, онда дерексіз әдістер болмауы мүмкін. Тек қолтаңбаларын анықтайтын және іске асыруды қамтамасыз етпейтін әдіс абстрактілі деп аталады. Оның нақты орындалуы абстрактілі классты кеңейтетін оның ішкі сыныптарына қалдырылады. Абстрактілі әдіс an objectімен қолданыла алмайды, тек басқа класс оны кеңейте алады. Абстрактілі сыныпты қашан пайдалану керек? Абстрактілі сыныптар кейбір әдепкі әрекетті анықтауға мүмкіндік береді және ішкі сыныптарда кез келген нақты әрекетті қамтамасыз етеді. Мысалы: List(тізім) интерфейс болып табылады, өз кезегінде AbstractListТізімнің негізгі әрекетін анықтайды, оны бұрынғы күйінде пайдалануға немесе ішкі сыныпта нақтылауға болады, мысалы, ArrayList(тізім массиві). Интерфейс дегеніміз не? Интерфейс түсінігі абстрактілі класс болып табылады, бірақ интерфейс (кілт сөзімен анықталған interface) бір қадам алға жылжиды. Ол әдістің немесе функцияның кез келген орындалуын болдырмайды. Сіз тек әдісті немесе функцияны жариялай аласыз, бірақ оның орындалуын қамтамасыз ете алмайсыз. Интерфейсті жүзеге асыратын класс нақты іске асыру туралы қамқорлық жасауы керек. Интерфейстер өте пайдалы және OOP-те кеңінен қолданылады. Олар интерфейстің өзін және іске асыруды ортақ пайдаланатындықтан, оларды пайдаланудың көптеген артықшылықтарын қамтамасыз етеді:
  1. Көп тұқым қуалаушылық .
  2. Бос муфта . Қабаттау сияқты операцияның абстракциясы бар және нақты іске асыру кез келген нәрсе болуы мүмкін: JDBC, JPA, JTA және т.б.
  3. Интерфейс бағдарламасы орындалмаған .
  4. Динамикалық байланыстыру полиморфизмі : Нысанның бағдарламалау интерфейсі оның нақты жүзеге асырылуын көрсетпей-ақ ашылады.
  5. Абстрактілі деңгейлер , функционалдылықты бөлу.
Интерфейс пен абстрактілі класс арасындағы айырмашылық.
  • Интерфейс - бұл интерфейсті жүзеге асыратын сыныптармен келісім-шарттық қатынас, іске асыру интерфейс белгілеген жолмен жүзеге асатынын айтады. Бұл жарияланған әдістері бар бос қабық.
  • Абстрактілі сынып кейбір жалпы мінез-құлықты анықтайды және оның ішкі сыныптарынан өз класы үшін атипикалық немесе ерекше әрекетті анықтауды сұрайды.
  • Абстрактілі сыныптың әдістері мен мүшелері кез келген қатынас модификаторымен тағайындалуы мүмкін, өз кезегінде барлық интерфейс әдістері жалпыға ортақ болуы керек.
  • Абстрактілі классты мұраға алған кезде, ұрпақ класы абстрактілі әдістерді анықтауы керек, ал интерфейс міндетті түрде әдістерін анықтамай-ақ басқа интерфейсті мұра ете алады.
  • Ұрпақ класы тек бір дерексіз классты кеңейте алады, бірақ интерфейс кеңейте алады немесе сынып көптеген басқа интерфейстерді жүзеге асыра алады.
  • Ұрпақ класы бірдей немесе аз шектелген қатынас модификаторы бар дерексіз әдістерді анықтай алады, бірақ интерфейсті жүзеге асыратын сынып бірдей көріну деңгейі бар әдістерді анықтауы керек.
  • Интерфейс конструкторларды қамтымайды, ал абстрактілі сыныпта бар.
  • Java интерфейсінде жарияланған айнымалылар әдепкі бойынша соңғы болып табылады. Абстрактілі сыныпта түпкілікті емес айнымалылар болуы мүмкін.
  • Java интерфейсінің барлық мүшелері public. Абстрактілі сыныптың мүшелері бола алады publicжәне protectedт.б.

Құрамы

Кодты қайта пайдалануға мұраны да, құрамды да пайдалану арқылы қол жеткізуге болады. Бірақ композицияны пайдалану мұраға қарағанда инкапсуляцияның жоғары деңгейін қамтамасыз етеді, өйткені бэк-соңғы сыныпқа өзгертулер міндетті түрде фронттық сыныпқа жататын codeқа әсер етпейді. Композиция - бұл сыныптарда «бар-а» (бар, қамтиды) қатынастарын қолданатын дизайн әдісі. Java мұрасы да, an object құрамы да codeты қайта пайдалану үшін пайдаланылуы мүмкін. Композицияның мәні an objectілер арасындағы «бар» қатынасты білдіру болып табылады. Орындық туралы ойланыңыз. Орындықта орындық бар. Орындықтың арқасы бар. Орындықтың белгілі бір саны бар. «Бар» тіркесі орындықтың басқа нысаны бар немесе кем дегенде оны пайдаланатын қатынасты білдіреді. Бұл композицияның негізі болып табылатын «бар-а» қатынасы. Артықшылықтары:
  • Көрінуді бақылау
  • Орындауды орындау уақытында ауыстыруға болады
  • Интерфейс класы іске асыруға байланысты емес болғандықтан, бос байланыс.
Құрамы мен тұқым қуалаушылық арасындағы айырмашылықтар
Жоқ. Құрамы (бар / бар) Мұрагерлік (бұл / болып табылады)
1 Полиморфизмді және codeты қайта пайдалануды қолдайды. Полиморфизмді және codeты қайта пайдалануды қолдайды.
2 Орындау уақыты нысаны әлдеқашан жасалған. Нысан компиляция уақытында динамикалық түрде жасалады.
3 Орындауды орындау уақытында ауыстыруға болады. Іске асыруды компиляция уақытында өзгертуге болады.
4 Ішкі класс бос ілінісуді (әсіресе интерфейс бақылауында) қолдайтын өзінің ата-аналық класынан тәуелсіз. Ішкі сынып ата-аналық сыныптың жүзеге асуына тәуелді, сондықтан байланыстыру күшті деп саналады.
5 Қолданылуы: Үйде жуынатын бөлме бар. Үйді жуынатын бөлме деу дұрыс емес. Мұрагерлік бір бағытты: үй – ғимарат. Бірақ ғимарат үй емес.
Ескертпе: Кодты қайта пайдалануды қамтамасыз ету үшін мұраны пайдаланбаңыз. Егер «is a (is)» қатынасы болмаса, композиция осы мақсаттар үшін пайдаланылады. Құрам мен жинақтау арасындағы айырмашылық an objectілік қатынастарда. Агрегация – бір класс жинаққа сәйкес келетін қатынас. Бұл тұтас қатынастың бөлігі, онда бөлік бүтінсіз өмір сүре алады. Мұндай қарым-қатынастар әлдеқайда әлсіз. Циклдік тәуелділік жоқ. Мысалы: тапсырыс және өнім. Композиция – бір сыныптың жинаққа сәйкес келетін қатынасы. Бұл бөлік бүтінсіз өмір сүре алмайтын тұтас қатынастың бөлігі. Егер тұтас жойылса, оның барлық құрамдас бөліктері де жойылады. Бұл әлдеқайда күшті қарым-қатынас. Мысалы: көпбұрыш және оның төбелері, реті және оның құрамдас бөлігі.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION