§ 1. Канцэпцыя ААП у мове праграмiравання

 

Праграміраванне як вобласць чалавечай дзейнасці прайшло невялікі шлях развіцця (прыклад 1.1)І, тым не менш, на гэтым шляху можна вылучыць некалькі этапаў у развіцці праграміравання:

  1. Машынна-арыентаванае праграмiраванне.
  2. Структурнае праграмiраванне.
  3. Модульнае праграмiраванне.
  4. Аб'ектна-арыентаванае праграмiраванне.

Аб'ектна-арыентаванае праграмiраванне (ААП) – тэхналогія стварэння праграм, заснаваная на выкарыстанні сістэмы аб'ектаў. Кожны аб'ект валодае наборам уласцівасцей, якія апісваюць яго стан, і метадаў, якія характарызуюць яго паводзіны.

Пры выкарыстанні тэхналогіі ААП для вырашэння задачы будуецца сістэма элементаў, якія ўзаемадзейнічаюць адзін з адным і з'яўляюцца аб'ектамі. Кожны элемент гэтай сістэмы, стаўшы актыўным, выконвае нейкую паслядоўнасць дзеянняў (мяняе свой стан, выконвае алгарытм апрацоўкі даных або актывізуе іншы элемент). Сістэма, рэалізуючы ўзаемадзеянне сваіх элементаў, вырашае пастаўленую задачу (прыклад 1.2).

Ключавымі рысамі аб'ектна-арыентаванага праграмiравання з'яўляюцца: інкапсуляцыя, наследаванне і палімарфізм. Часта да іх дадаюць абстрагаванне (абстракцыю).

Iнкапсуляцыя — гэта вызначэнне карыстальніцкіх тыпаў даных, якія аб'ядноўваюць сваё змесціва ў адзіны тып і рэалізуюць некаторыя аперацыі або метады над імі (прыклад 1.3).

Інкапсуляцыя аб'ядноўвае разам код і даныя, выключае як ўмяшанне звонку, так і няправільнае выкарыстанне даных. Даныя і метады іх апрацоўкі аб'ядноўваюцца ў «аўтаномную чорную скрыню». Калі даныя і метады іх апрацоўкі звязваюцца разам падобным чынам, ствараецца аб'ект. Іншымі словамі, аб'ект — гэта элемент, які падтрымлівае інкапсуляцыю. У мове праграмiравання інкапсуляцыя дазваляе хаваць дэталі рэалізацыі ад карыстальніка аб'екта, кантраляваць доступ да даных і метадаў іх апрацоўкі.

Наследаванне – спосаб вызначэння новага тыпу, пры якім гэты тып наследуе элементы існуючага (уласцівасці і метады), мадыфікуючы або пашыраючы іх (прыклад 1.4).

Наследаванне ўяўляе сабой працэс, падчас якога адзін аб'ект набывае ўласцівасці іншага аб'екта. Пры наследаванні асноўная функцыянальнасць бацькоўскага класа (продка) пашыраецца ў вытворным падкласе, які называюць даччыным класам (нашчадкам). Стварэнне аб'ектаў па прынцыпе наследавання спараджае іерархічную структуру (прыклад 1.5). Калі не карыстацца іерархіямі, то для кожнага аб'екта прыйшлося б яўна вызначаць усе яго ўласцівасці. Дзякуючы наследаванню дастаткова вызначыць у нашчадка толькі тыя ўласцівасці, якімі не валодаў продак.

Палімарфізм — гэта ўласцівасць сістэмы, якая дазваляе аднастайна спасылацца на аб'екты розных класаў (звычайна ўнутры некаторай іерархіі). Іншымі словамі — гэта магчымасць выкарыстоўваць аб'екты з аднолькавым інтэрфейсам без інфармацыі пра тып і ўнутранай структуры аб'екта (прыклад 1.6).

Уласцівасці і метады нашчадка, унаследаваныя ад бацькоўскага класа, можна пры неабходнасці змяніць. Пры гэтым метад або ўласцівасць захоўваюць сваё імя, але надзяляюцца новым змяшчэннем. У выніку ў аб'екце-бацьку і аб'екце-нашчадку будуць дзейнічаць два аднайменных метады, якія маюць розную алгарытмічную аснову або якія надаюць аб'ектам розныя ўласцівасці.

Палімарфізм дазваляе рашаць падобныя па сэнсу праблемы рознымі спосабамі.

Абстрагаванне азначае вылучэнне значнай інфармацыі і выключэнне з разгляду нязначнай. Абстракцыя — гэта абагульненне даных і паводзін для класа, які знаходзіцца па іерархіі вышэй бягучага.

Абстрактны клас з'яўляецца класам, для якога нельга стварыць экзэмпляр. Так у прыкладзе з камп'ютарнымі персанажамі няма сэнсу ствараць проста персанаж (або чалавекападобнага), будуць стварацца гномы, эльфы, драконы, робаты і г. д.

За больш чым саракагадовую гісторыю ААП асноўныя прынцыпы, закладзеныя ў першыя аб'ектныя мовы і сістэмы, падвергліся істотнаму змяненню і дапаўненню. Задумвалася, што аб'ектна-арыентаваны код будзе прасцей чытаць і разумець чалавекам, бо людзям зручней працаваць з рэальнымі аб'ектамі, чым асобна з наборам даных і функцыямі. Прадстаўляючы даныя ў праграме як уласцівасці аб'екта, а функцыі па апрацоўцы даных  як магчымыя метады аб'екта, мы набліжаем працэс праграмiравання да працэсу апісання метаду рашэння задачы. Аднак на сённяшні дзень існуюць і праціўнікі тэхналогіі ААП.

У прыкладзе 1.7 пералічаны плюсы і мінусы ААП.

Прыклад 1.1. Апісанне этапаў развіцця праграмiравання.
  1. Праграмiраванне на машынаарыентаванай мове асэмблер дазваляе працаваць на ўзроўні апаратных сродкаў камп'ютара. Праграміст павінен прадумаць размяшчэнне даных у памяці, эфектыўна выкарыстоўваць рэгістры працэсара, забяспечыць узаемадзеянне распрацоўванай праграмы з аперацыйнай сістэмай.
  2. Паколькі многія этапы распрацоўкі праграм на мове асэмблер даводзілася паўтараць ад праграмы да праграмы, то наступны этап развіцця праграмiравання звязаны са з'яўленнем падпраграм і развіццём тэхналогіі структурнага праграмiравання, калі пастаўленая задача разбіваецца на незалежныя падзадачы, якія рэалізуюцца з дапамогай падпраграм.
  3. На наступным этапе развіцця групы падпраграм сталі аб'ядноўваць у праграмныя модулі. Падпраграмы ўнутры модуля выкарыстоўваюць адны і тыя ж глабальныя даныя, якія на гэтым этапе развіцця становяцца структураванымі.
  4. Далейшае ўскладненне праграм прывяло да таго, што даныя і падпраграмы для іх апрацоўкі сталі аб'ядноўваць у адзінае цэлае. Гэта прывяло да стварэння моў, якія выкарыстоўваюць аб'ектна-арыентаваную тэхналогію рашэння задач.

Прыклад 1.2. У камп'ютарнай гульні аб'ектам можа быць персанаж. Уласцівасцямі персанажа могуць быць: раса, здароўе, сіла, грошы, спрыт, хуткасць, каардынаты, ачкi рэйтынгу і інш. У якасці метадаў могуць выступаць дзеянні персанажа: рух, паняцце, выкарыстанне або кіданне прадмета, атака, лячэнне, размова і інш. Гулец, кіруючы персанажам можа змяняць яго стан (павялічыць або паменшыць здароўе, грошы; змяніць каардынаты і інш.). Актываваўшы нейкае з дзеянняў, гулец выклікае пэўны метад апрацоўкі даных. Калі гулец атакуе іншага персанажа, то тым самым ён актывізуе іншы аб'ект са сваімі метадамі і ўласцівасцямі.

 

Прыклад 1.3. Інкапсуляцыя (ад лац. in capsule  у абалонцы)  гэта заключэнне даных і функцыяналу ў абалонку. У аб'ектна-арыентаваным праграмiраванні ў ролі абалонкі выступаюць класы. Яны не толькі збіраюць даныя і метады ў адным месцы, але і абараняюць іх ад умяшання звонку (утойванне).

Для персанажа камп'ютарнай гульні ўсе яго характарыстыкі і дзеянні апісваюцца ў адным класе. Некаторыя характарыстыкі або дзеянні могуць быць утоенымі. Напрыклад, расу героя, пасля таго як герой абраны, немагчыма змяніць. Або лячэнне, якое адбываецца з цягам часу, недаступна для кіравання.

Прыклад 1.4. Звычайна ў камп'ютарных гульнях шмат розных персанажаў, якія могуць адрознівацца адзін ад аднаго. Бацькоўскі клас у гэтым выпадку можа апісваць толькі агульныя ўласцівасці і метады, якія затым будуць пашырацца ў наследнікаў. Напрыклад, ад персанажа могуць быць унаследаваны, героі і жывёлы, якія даюцца герою на дапамогу.

Прыклад 1.5. Магчымая іерархія персанажаў камп'ютарнай гульні:

Прыклад 1.6. У розных персанажаў можа быць такое дзеянне, як рух. Аднак гномы і драконы будуць перасоўвацца па-рознаму, гномы павінны абыходзіць перашкоды, а дракон можа ляцець па прамой. Метад, які рэалізуе перасоўванне, будзе называцца аднолькава, а рэалізоўвацца па-рознаму. Для гульца дастаткова выбраць пункт, у якi персанаж павінен перамясціцца.

Першай мовай праграмiравання, у якой былі прапанаваны асноўныя паняцці, пасля якія склаліся ў парадыгму ААП, была Сiмула, але тэрмін «аб'ектная арыентаванасць» не выкарыстоўваўся ў кантэксце прымянення гэтай мовы. У момант яго з'яўлення ў 1967 годзе ў ім былі прапанаваны рэвалюцыйныя ідэі: аб'екты, класы, віртуальныя метады і інш. Новы погляд на праграмiраванне прапанавалі ў 1970‑х гадах Алан Кэй і Дэн Iнгаллс у мове Smalltalk. Тут паняцце класа стала асноваўтваральнай ідэяй для ўсіх астатніх канструкцый мовы. Менавіта гэтая мова стала першай шырока распаўсюджанай мовай аб'ектна-арыентаванага праграмiравання.

Прыклад 1.7. Плюсы і мінусы ААП.

Плюсы:

  • лёгка чытаецца;
  • хутка пішацца;
  • прасцей рэалізаваць вялікі функцыянал;
  • менш паўтораў, паколькі не трэба пісаць аднатыпныя функцыі для розных сутнасцяў.

Мiнусы:

  • спажывае больш памяці;
  • зніжае прадукцыйнасць, паколькі многія рэчы тэхнічна рэалізаваны інакш, таму яны выкарыстоўваюць больш рэсурсаў.
Складана пачаць. Парадыгма ААП складаней функцыянальнага праграмiравання, таму на старт сыходзіць больш часу.