JavaRush /Java блогу /Random-KY /JAVA Объектке багытталган программалоо концепциялары
shabnahm
Деңгээл

JAVA Объектке багытталган программалоо концепциялары

Группада жарыяланган
JAVA an objectиге багытталган программалоо концепцияларына негизделген, ал кандайдыр бир маселени реалдуу түрдө чечүү үчүн абстракциянын жогорку деңгээлине өтүүгө мүмкүндүк берет. Объектке багытталган мамиле көйгөйдү чечүүнүн концептуализациясын тиркемеде кайра колдонууга оңой болгон реалдуу an objectтердин шартында берет. Мисалы, Chair(кресло), Fan(вентилятор), Dog(Ит), Computer(компьютер) ж.б. JAVAда класс – бул берилген типтеги an objectтин жалпы жүрүм-турумун аныктаган макет, шаблон же прототип. Мисал класстын өзүнчө ишке ашырылышы жана класстын бардык инстанциялары класстын аныктамасында сүрөттөлгөн бирдей касиеттерге ээ. Мисалы, сиз атрибут катары бөлмөлөрдүн саны менен House аттуу классты аныктап, класстын эки бөлмөлүү үй, үч бөлмөлүү үй ж.б.у.с. үлгүлөрүн түзө аласыз. JAVA an objectиге багытталган программалоо концепциялары - 1Артыкчылыктары: Төмөндө an objectке багытталган программалык камсыздоону иштеп чыгуунун кээ бир артыкчылыктары келтирилген.
  • Негизинен модулдук түрдө ишке ашырылганына байланыштуу программалык камсыздоону колдоо чыгымдары кыскарды.
  • Мурас сыяктуу функциялар аркылуу жакшыртылган codeду кайра колдонуу, натыйжада программалык камсыздоону тезирээк иштеп чыгуу.
  • Коддун ишенимдүүлүгү жана ийкемдүүлүгү жогорулады.
  • Чыныгы дүйнө симуляциясына байланыштуу түшүнүү оңой.
  • Объект деңгээлинде жакшыраак абстракция.
  • Өнүктүрүүнүн бир фазасынан экинчисине өтүүнүн татаалдыгын азайтуу.
OOP төрт негизги мүнөздөмөлөрү бар:
  • Инкапсуляция
  • Мурас
  • Полиморфизм
  • Абстракция

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

Инкапсуляция an object үчүн келишим катары иштейт, ал эмнени жашырышы керек жана башка an objectтердин кирүүсүнө эмне ачышы керек. JAVAда биз privateыкманы жашыруу жана тышкы дүйнөдөн өзгөрмөгө кирүү мүмкүнчүлүгүн чектөө үчүн кирүү модификаторун колдонобуз. JAVAнын ошондой эле ар кандай кирүү модификаторлору бар: public, демейки, protected, private, алар ар кандай деңгээлдеги көрүнүштү чектөө үчүн колдонулат. Бирок түпкү максат өзгөртүлбөшү керек болгон нерселерди камтуу. Эң жакшы болгон мамиле класстын өзгөрүшүнө бир гана себеп болушу керек жана инкапсуляция ошол “бир себептин” дизайнын реалдуу кылат. Инкапсуляцияга туура мамиле башка класстарга зыян келтирбөө үчүн тез-тез өзгөрүп турган нерселерди жашыруу болуп саналат. Артыкчылыктары: Төмөндө инкапсуляциянын кээ бир артыкчылыктары келтирилген:
  • Биз an objectтин ички абалын анын атрибуттарын жашыруу менен коргой алабыз.
  • Бул codeдун модулдуулугун жакшыртат, анткени ал an objectтердин күтүлбөгөн жолдор менен өз ара аракеттенүүсүн алдын алат.
  • Коддун колдонуу мүмкүнчүлүгүн жакшыртат.
  • Бул белгилүү бир субъекттин келишимдик мамилелерин колдойт.
  • Инкапсуляция программалык камсыздоону тейлөөнү жеңилдетет.
  • Кодго өзгөртүүлөр бири-биринен көз карандысыз жүргүзүлүшү мүмкүн.

Полиморфизм

Программалоодогу полиморфизм – бул ар кандай негизги формалар (маалымат түрлөрү) үчүн бирдей интерфейсти камсыз кылуу жөндөмдүүлүгү. Бул ар кандай функционалдуулукка ээ класстар бир эле интерфейсти бөлүшөрүн жана шилтеме аркылуу параметрлерди өткөрүү менен динамикалык түрдө чакырылышы мүмкүн экенин билдирет. Классикалык мисал класс Shape(форма) жана андан тукум кууп өткөн бардык класстар: square(квадрат), circle(тегерек), dodecahedron(додекаэдр), irregular polygon(регулярдуу эмес көп бурчтук), splat(блоб) ж.б.у.с. Бул мисалда, ар бир класстын өзүнүн ыкмасы болот Draw()жана кардар codeу жөн гана жасай алат:
Shape shape = new Shape();
Shape.area()ар кандай форманын туура жүрүм-турумун алуу үчүн Полиморфизмдин кооздугу – ар кандай класстар менен иштеген code кайсы классты колдонуп жатканын билүүнүн кереги жок, анткени алардын баары бир принципте иштешет. Динамикалык полиморфизмди ишке ашыруу үчүн an objectке багытталган программалоо тилдери тарабынан колдонулган процесс динамикалык байланыш деп аталат. Эскертүү: Полиморфизм - бул an objectке жараша аткаруу үчүн конкреттүү ыкмаларды тандоо мүмкүнчүлүгү. Полиморфизм абстракттуу класстар катышпаганда пайда болот. Артыкчылыктары:
  • Кайра колдонууга жарамдуу codeду түзүү. Башкача айтканда, класс түзүлгөндөн, ишке ашырылгандан жана текшерилгенден кийин, анда так эмне жазылганы жөнүндө ойлонбостон, аны эркин колдонууга болот.
  • Бул жалпы жана эркин бириктирилген codeду берет.
  • Компиляция убактысы кыскарган, бул өнүгүүнү тездетет.
  • Динамикалык байланыш.
  • Бир эле интерфейс ар кандай ишке ашыруу менен ыкмаларды түзүү үчүн колдонулушу мүмкүн.
  • Бардык ишке ашыруу ошол эле ыкма кол колдонуу менен алмаштырылышы мүмкүн.
Полиморфизмдин бир бөлүгү катары ыкманы жокко чыгаруу. Авария эки ыкма менен өз ара аракеттенет: негизги класстагы метод жана туунду класстагы метод. Бул ыкмалардын аты жана кол тамгалары бирдей. Overriding ар кандай типтеги an objectтер үчүн бир эле операцияны ар кандай жолдор менен аткарууга мүмкүндүк берет. Мисалы:
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тер ата-эне класстын ошол эле методдору менен башкача иш кылат (подкласстарда жокко чыгарылган). Статикалык ыкма класстын эч кандай инстанциялары менен байланыштырылbyte, ошондуктан жокко чыгаруу түшүнүгүн колдонууга болбойт. JAVA түзүүчүлөрү бул ыкмага таасир эткен эки ойду жетекчorкке алышкан. Биринчиден, codeду аткарууда көйгөйлөр бар: Smalltalk жай иштегени үчүн көп сындар болгон (таштанды чогултуу жана полиморфизм бул көйгөйдүн бир бөлүгү болгон) жана JAVA муну болтурбоо үчүн иштелип чыккан. Экинчи жагдай JAVAнын максаттуу аудиториясы C++ иштеп чыгуучулары болот деген чечим болду. Статикалык методдордун ушундай иштеши C++ программисттерине абдан тааныш болгон жана ошондой эле ишти тездеткен, анткени кайсы ыкманы чакыруу керектигин аныктоо үчүн класс иерархиясын көтөрүүнүн кереги жок болчу. Сиз түз эле класска барып, белгилүү бир ыкманы чакырасыз.

Мурас

Мурас - бул базалык класстын жүрүм-турумун (б.а. методдорун) жана абалын (б.а. өзгөрмөлөрдү) алар ошол туунду класста жеткorктүү болушу үчүн туунду класска киргизүү актысы. Мурастын негизги артыкчылыгы - ал codeду кайра колдонуунун формалдуу механизмин камсыз кылат жана кайталоону болтурbyte. Тукум кууган класс ата-эне класстын жүрүм-турумун көчүрүү жана жаңы функцияларды кошуу менен колдонмонун функционалдуулугун кеңейтет. Бул codeду абдан бириктирет. Эгерде сиз суперклассты өзгөрткүңүз келсе, codeду бузбоо үчүн субкласстардын бардык деталдарын бorшиңиз керек болот. Мурас - бул программалык камсыздоону кайра колдонуунун бир түрү, мында жаңы класс (подкласс) учурдагы класстан (суперкласс) түзүлөт, ал өзүнүн функционалдуулугун кеңейтет жана суперкласстын кээ бир касиеттерин колдонот. Демек, эгер сизде ата-энелер классы болсо, андан кийин балдар классы пайда болсо, бала ата-энеде болгон нерселердин бардыгын мурастайт. Артыкчылыктары:
  • Жакшыртылган codeду кайра колдонуу.
  • Логикалык “а” (бирөө, бир нерсе) байланышы түзүлөт. Мисалы: Dog - бул жаныбар . (Ит - жаныбар).
  • Кодду модулдаштыруу.
  • Кайталоо алынып салынат.
Кемчorк:
  • Тыгыз бириктирилген: субкласс ата-эне класстын ишке ашырылышына көз каранды, бул codeду тыгыз бириктирет.
Дагы эмнени окуу керек:

Java Developer Group:

Абстракция

Абстракциялоо – класстарды ишке ашыруунун деталдарын эсепке албастан, алардын интерфейстеринин жана функционалдуулугунун негизинде долбоорлоону билдирет. Абстракттуу класс иш жүзүндөгү ишке ашырууну камтыбастан интерфейстерди билдирет. Ал an objectтин ишке ашырылышын анын жүрүм-турумунан айырмалайт. Абстракция маанилүү эмес деталдарды жашыруу менен codeду жөнөкөйлөтөт. Артыкчылыктары:
  • Абстракцияны колдонуу менен биз кандайдыр бир түргө топтоого боло турган нерселерди ажырата алабыз.
  • Тез-тез өзгөрүп турган касиеттерди жана ыкмаларды өзүнчө түргө топтосо болот, андыктан негизги тип өзгөрүүгө дуушар болбойт. Бул OOP принцибин бекемдейт: "Код кеңейтүү үчүн ачык болушу керек, бирок өзгөртүүгө жабык болушу керек . "
  • Абстракция домен моделдерин көрсөтүүнү жөнөкөйлөтөт.
Абстракция менен инкапсуляциянын айырмасы Инкапсуляция - бул абстракциянын бир бөлүгү катары колдонулган стратегия. Инкапсуляция an objectтин структурасын билдирет: an objectтер алардын касиеттерин капсулдап, сырттан кирүүдөн жашырат. Класстын колдонуучулары аны менен анын методдорун колдонуу менен өз ара аракеттенишет, бирок класстын түзүмүнө түз кире алышпайт. Ошентип, класс анын дизайнына байланыштуу ишке ашыруу деталдарын абстракциялайт. Абстракция - бул бир кыйла жалпы термин. Ошондой эле, башка нерселер менен катар, субкласстарды колдонуу менен жетишүүгө болот. Мисалы, Listстандарттык китепканадагы класс (тизме) бул тизмедеги ордуна жараша индекстелген элементтердин ырааттуулугу үчүн абстракция. Тизменин конкреттүү мисалдары Listже ArrayList. LinkedListТизме менен өз ара аракеттенүүчү code Listал кайсы тизмени колдонуп жатканы жөнүндө маалыматтардын абстракциясын берет. Көбүнчө абстракциялоо инкапсуляцияны колдонуу менен негизги абалды жашырбастан мүмкүн эмес. Эгерде класс өзүнүн ички түзүлүшүн ачыкка чыгарса, ал өзүнүн ички операцияларын өзгөртө алbyte, ошондуктан абстракцияланышы мүмкүн эмес. Абстракттуу класс жана абстракттуу метод деген эмне? Иштеп чыгуу учурунда сиз базалык класс анын туунду класстарына интерфейсти гана беришин каалайсыз. Башкача айтканда, сиз эч кимдин базалык класстын инстанцияларын түзүшүн каалабайсыз. Интерфейсти ага an objectтерди гана чыгара тургандай кылып колдонушуңуз керек (бул полиморфтук жүрүм-турумга жол берген имплициттүү чыгаруу). Бул ачкыч сөздү колдонуу менен бул классты абстракттуу кылуу менен жетишилет abstract. Бул кээ бир чектөөлөрдү киргизет, мисалы, абстракттуу класстын инстанцияларын түзүү мүмкүн эмес; абстрактуу классты колдонууда абстракттуу ыкмаларды ишке ашыруу зарыл. Бул полиморфизмди камсыз кылат. Абстрактуу класс абстракттуу жана конкреттүү ыкмаларды камтышы мүмкүн. Эгерде класста жок дегенде бир метод абстракттуу деп жарыя кылынса, бүт класс да абстракттуу деп жарыяланышы керек. Бирок, карама-каршы багытта эреже сакталышы керек эмес. Эгерде класс абстракттуу деп жарыяланса, анда абстракттуу методдор камтылбашы мүмкүн. Жөн гана өзүнүн колдорун аныктаган жана ишке ашырууну камсыз кылбаган ыкма абстракттуу деп аталат. Аны иш жүзүндө ишке ашыруу абстракттуу классты кеңейтүүчү анын субкласстарына калтырылган. Абстракттуу методду an object колдонууга болбойт, аны башка класс гана кеңейте алат. Абстракттуу классты качан колдонуш керек? Абстракттуу класстар кандайдыр бир демейки жүрүм-турумду аныктоого мүмкүндүк берет жана субкласстар кандайдыр бир конкреттүү жүрүм-турумду камсыз кылат. Мисалы: List(тизме) бул интерфейс, өз кезегинде AbstractListТизменин негизги жүрүм-турумун аныктайт, ал мурдагыдай колдонулушу мүмкүн же субкласста, мисалы, ArrayList(тизме массивинде) такталган. Интерфейс деген эмне? Интерфейс түшүнүгү абстракттуу класс, бирок интерфейс (ачкыч сөз менен аныкталган interface) бир кадам алдыга барат. Ал такыр ыкманы же функцияны ишке ашырууга жол бербейт. Сиз методду же функцияны гана жарыялай аласыз, бирок анын аткарылышын камсыз кыла албайсыз. Интерфейсти ишке ашырган класс иш жүзүндө ишке ашырууга кам көрүшү керек. Интерфейстер абдан пайдалуу жана OOPде кеңири колдонулат. Алар интерфейстин өзүн жана ишке ашырууну бөлүшкөндүктөн, аларды колдонуунун көптөгөн артыкчылыктарын камсыз кылат:
  1. Көптөгөн мурас .
  2. Бошоң муфта . Операциянын абстракциясы бар, мисалы катмарлоо жана конкреттүү ишке ашыруу каалаган нерсе болушу мүмкүн: JDBC, JPA, JTA ж.б.
  3. Интерфейс программасы ишке ашырылган жок .
  4. Динамикалык байланыш полиморфизми : Объекттин программалоо интерфейси анын иш жүзүндө аткарылышын көрсөтпөстөн ачыкка чыгат.
  5. Абстракттуу деңгээлдер , функционалдуулуктун бөлүнүшү.
Интерфейс менен абстракттуу класстын айырмасы.
  • Интерфейс - бул интерфейсти ишке ашыруучу класстар менен келишимдик мамилелер, ишке ашыруу интерфейс тарабынан белгиленген жол менен ишке ашат. Бул жарыяланган ыкмалар менен бош кабык.
  • Абстракттуу класс кээ бир жалпы жүрүм-турумду аныктайт жана анын субкласстарынан алардын классы үчүн атиптик же өзгөчө жүрүм-турумду аныктоону суранат.
  • Абстракттуу класстын методдору жана мүчөлөрү каалаган кирүү модификатору менен белгилениши мүмкүн, өз кезегинде интерфейстин бардык ыкмалары ачык болушу керек.
  • Абстракттуу классты мурастоодо, тукум класс абстракттуу методдорду аныкташы керек, ал эми интерфейс башка интерфейсти анын методдорун аныктабастан мурастай алат.
  • Тукум класс бир гана абстракттуу классты кеңейте алат, бирок интерфейс кеңейте алат же класс башка көптөгөн интерфейстерди ишке ашыра алат.
  • Тукум класс абстракттуу методдорду бирдей же азыраак чектөөчү кирүү модификатору менен аныктай алат, бирок интерфейсти ишке ашыруучу класс ошол эле деңгээлдеги көрүнүү менен методдорду аныкташы керек.
  • Интерфейс конструкторлорду камтыbyte, ал эми абстрактуу класста бар.
  • Java интерфейсинде жарыяланган өзгөрмөлөр демейки боюнча акыркы болуп саналат. Абстракттуу класс акыркы эмес өзгөрмөлөрдү камтышы мүмкүн.
  • Java интерфейсинин бардык мүчөлөрү public. Абстракттуу класстын мүчөлөрү боло алат publicж.б.protected

Курамы

Кодду кайра колдонууга мурастын да, курамынын да жардамы менен жетишүүгө болот. Бирок композицияны колдонуу мураска караганда инкапсуляциянын жогорку деңгээлин камсыз кылат, анткени back-end классына өзгөртүүлөр сөзсүз түрдө фронттук класска тиешелүү codeго таасир этпейт. Композиция класстарда “бар-а” (бар, камтыйт) мамилелерин колдонгон дизайн ыкмасы. Java мурасы да, an objectинин курамы да codeду кайра колдонуу үчүн колдонулушу мүмкүн. Композициянын маңызы — an objectтердин ортосундагы «бар» мамилени билдирүү. Кресло жөнүндө ойлон. Креслодо отургуч бар. Стулдун аркасы бар. Креслодо белгилүү сандагы буттар бар. "А бар" деген сөз айкашы отургучта башка an objectи бар же жок дегенде колдоно турган мамилени билдирет. Бул так "бар-а" мамилеси, курамынын негизи болуп саналат. Артыкчылыктары:
  • Көрүнүүнү көзөмөлдөө
  • Ишке ашырууну иштетүү убагында алмаштырууга болот
  • Интерфейс классы ишке ашыруудан көз каранды эмес болгондуктан, бош туташуу.
Курамы жана тукум куучулук ортосундагы айырмачылыктар
Жок. Курамы (бар / бар) Мурас (бул / болуп саналат)
1 Полиморфизмди жана codeду кайра колдонууну колдойт. Полиморфизмди жана codeду кайра колдонууну колдойт.
2 Иштөө убактысы an objectи мурунтан эле түзүлгөн. Объект компиляция убагында динамикалык түрдө түзүлөт.
3 Ишке ашырууну иштетүү убагында алмаштырууга болот. Ишке ашыруу компиляция убагында өзгөртүлүшү мүмкүн.
4 Субкласс өзүнүн ата-эне классынан көз карандысыз, ал бош байланышты колдойт (айрыкча интерфейстин көзөмөлүндө). Субкласс ата-эне класстын ишке ашырылышына көз каранды, ошондуктан байланыш күчтүү деп эсептелет.
5 Колдонуу: Үйдө ванна бар. Үйдү ванна деп айтуу туура эмес. Мурас бир багыттуу: үй - имарат. Бирок имарат үй эмес.
Эскертүү: Кодду кайра колдонууну камсыз кылуу үчүн мурасты колдонбоңуз. Эгерде “болду” деген байланыш жок болсо, бул максаттар үчүн композиция колдонулат. Курам менен топтоо ортосундагы айырма an objectилердин мамилелеринде. Агрегация – бул бир класстын коллекцияга туура келген мамиле. Бул бүтүндөй мамиленин бир бөлүгү, анда бир бөлүк бүтүнсүз жашай алат. Мындай мамилелер алда канча начар. Циклдик көз карандылык жок. Мисалы: заказ жана продукт. Композиция – бул бир класстын коллекцияга туура келген мамилеси. Бул бүтүндөй мамиленин бир бөлүгү, анда бөлүк бүтүнсүз жашай алbyte. Эгер бүтүндөй жок кылынса, анын бардык компоненттери да жок болот. Бул күчтүүрөөк мамиле. Мисалы: көп бурчтук жана анын чокулары, тартип жана анын компоненти.
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION