Аб’ект (праграмаваньне)

У першым набліжэньні **аб’ект** — вылучаная вобласьць памяці. Аб’ектна-арыентаваныя мовы праграмаваньня выкарыстоўваюць зьменныя для доступу да аб’ектаў, а таму паняткі *аб’ект* і *зьменная* часам выкарыстоўваюцца як ўзаемазамяняльныя. Аднак, аб’ект не існуе да таго часу, пакуль ня вылучаная памяць.

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

Для лепшага разуменьня розьніцы паміж клясай і аб’ектам можна прывесьці наступны прыклад. Калі хтосьці хоча жыць у доме, ні рысунак гэтага дома, ні ягоны фатаздымак, ні мадэль дома не дапамогуць гэтаму чалавеку. Што тут патрэбна — дык гэта рэальны дом, пабудаваны ў адпаведнасьці з спэцыфікацыямі. Выкарыстоўваючы гэтую аналёгію, рысунак прадстаўляе клясу, а рэальны дом прадстаўляе аб’ект.

## Тэорыя
У строгім матэматычным выкладаньні інфарматыкі панятак **аб’ект** выкарыстоўваецца ў чыста матэматычным сэнсе для абазначэньня любой «рэчы». Улічваючы тое, што пакуль яшчэ гэтая інтэрпрэтацыя цалкам прымальная для апісаньня абстрактнай тэорыі, і хаця гэты панятак недастаткова канкрэтны, каб апісваць прымітыўныя тыпы дадзеных у больш канкрэтных галінах (кшталту праграмаваньня), ён усё яшчэ дастаткова блізкі да бягучага разуменьня паняткаў «вылічэньне» і «апрацоўка інфармацыі». Па гэтай прычыне аб’екты ўсё яшчэ зьяўляюцца **канцэптуальнымі сутнасьцямі**, але звычайна адпавядаюць непарыўнаму блёку кампутарнай памяці вызначанага памеру ў вызначаным месцазнаходжаньні. Такая рэалізацыя абраная з прычыны таго, што вылічэньне і апрацоўка інфармацыі патрабуюць строга пэўную форму кампутарнай памяці. У гэтым сэнсе аб’екты — гэта фундамэнтральныя прымітывы, якія патрабуюцца для дакладнага вызначэньня такіх паняткаў як спасылкі, зьменныя і адпаведнасьць імёнаў.

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

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

Амаль ва ўсіх аб’ектна-арыентаваных мовах праграмаваньня для выкліку пэўнага мэтаду альбо функцыі аб’екта выкарыстоўваецца апэратар «кропка» (.). Напрыклад, разгледзім арытмэтычную клясу зь імем ArytmKlasa, якая ўтрымлівае мэтады кшталту dadać(), adymi(), pamnožyć() і padzialić(), якія вылічаюць вынік двух лікаў, якія былі ім перададзеныя ў якасьці аргумэнтаў. Гэтая кляса можа выкарыстоўвацца для вылічэньня здабытку 78 і 69, але спачатку трэба стварыць клясу і затым выклікаць мэтад здабытку наступым чынам (прыклад на псэўдакодзе):

  1  int vynik = 0;                           *// Ініцыялізаваньне*
  2  arytmAbjekt1 = new ArytmKlasa();         *// Стварэньне новага экзэмпляру клясы «АрытмКляса»*
  3  vynik = arytmAbjekt1.pamnožyć(78, 69);   *// [[Здабытак]] 78 і 69 захоўваецца ў зьменнай «вынік»

У мовах, дзе кожны аб’ект ствараецца з клясы, аб’ект называецца *'экзэмплярам*' гэтай клясы. Калі кожны аб’ект мае тып, то два аб’екты адной і той жа клясы будуць мець адзін і той жа [[тып дадзеных]].

Часам аб’ект застаецца без спасылак на яго ў праграме. Такі аб’ект ужо ня можа выконваць ніякіх дзеяньняў. У такіх выпадках у мовах, дзе рэалізаваны аўтаматычны збор сьмецьця, [[зьбіральнік сьмецьця]] пазначыць памяць, якая займаецца аб’ектам, як вольную, хаця фактычна яна яшчэ будзе ўтрымліваць зьвесткі аб’екта да таго часу, пакуль яны ня будуць перазапісаныя.

Тры ўласьцівасьці, якія характарызуюць аб’екты:

# Унікальнасьць: уласьцівасьць аб’екта, якая адрозьнівае яго ад іншых аб’ектаў;
# Стан: апісвае зьвесткі, якія захоўваюцца ў аб’екце;
# Паводзіны: апісвае мэтады ў [[інтэрфэйс (праграмаваньне)|інтэрфэйсе]] аб’екта, празь якія ён можа быць выкарыстаны.

== Прыклад ==
Прыкладам з жыцьця можа быць аб’ект «мой сабака», які зьяўляецца экзэмплярам [[кляса (праграмаваньне)|клясы]] «сабака», які ў сваю чаргу зьяўляецца падклясай клясы «жывёла». У выпадку [[палімарфізм|паліморфных]] аб’ектаў пэўныя дэталі гэтага тыпу могуць выбарачна інгаравацца, напрыклад, аб’ект «сабака» можа выкарыстоўвацца фукцыяй, якая шукае «жывёлу». Але гэтаксама можа апрацоўвацца і «котка», бо яна таксама належыць да клясы «жывёла». Калі аб’ектры разглядаць як «жывёлаў», пэўныя члены і атрыбуты клясаў «сабака» альбо «котка» будуць недаступныя, напрыклад, такія як атыбут «хвост», бо ня ўсе жывёлы маюць хвасты.

== Вонкавыя спасылкі ==
* [http://java.sun.com/docs/books/tutorial/java/concepts/object.html *Што такое аб’ект?*] з *The Java Tutorials''

Катэгорыя:Праграмаваньне