Аб’ект (праграмаваньне)
У першым набліжэньні аб’ект — вылучаная вобласьць памяці. Аб’ектна-арыентаваныя мовы праграмаваньня выкарыстоўваюць зьменныя для доступу да аб’ектаў, а таму паняткі аб’ект і зьменная часам выкарыстоўваюцца як ўзаемазамяняльныя. Аднак, аб’ект не існуе да таго часу, пакуль ня вылучаная памяць.
У працэдурным праграмаваньні аб’ект можа ўтымліваць у сабе дадзеныя альбо інструкцыі, але не адное і другое разам. Інструкцыі могуць мець выгляд працэдуры або функцыі. У аб’ектна-арыентаваным праграмаваньні аб’ект зьяўляецца экзэмплярам клясы. Кляса ўтрымлівае ў сабе набор дадзеных і інструкцый, якія зьдзяйсьняюць апэрацыі з дадзенымі, робяць аб’ект мог прымаць паведамленьні, апрацоўваюць дадзеныя і адпраўляюць паведамленьні іншым аб’ектам.
Для лепшага разуменьня розьніцы паміж клясай і аб’ектам можна прывесьці наступны прыклад. Калі хтосьці хоча жыць у доме, ні рысунак гэтага дома, ні ягоны фатаздымак, ні мадэль дома не дапамогуць гэтаму чалавеку. Што тут патрэбна — дык гэта рэальны дом, пабудаваны ў адпаведнасьці з спэцыфікацыямі. Выкарыстоўваючы гэтую аналёгію, рысунак прадстаўляе клясу, а рэальны дом прадстаўляе аб’ект.
Тэорыя
рэдагавацьУ строгім матэматычным выкладаньні інфарматыкі панятак аб’ект выкарыстоўваецца ў чыста матэматычным сэнсе для абазначэньня любой «рэчы». Улічваючы тое, што пакуль яшчэ гэтая інтэрпрэтацыя цалкам прымальная для апісаньня абстрактнай тэорыі, і хаця гэты панятак недастаткова канкрэтны, каб апісваць прымітыўныя тыпы дадзеных у больш канкрэтных галінах (кшталту праграмаваньня), ён усё яшчэ дастаткова блізкі да бягучага разуменьня паняткаў «вылічэньне» і «апрацоўка інфармацыі». Па гэтай прычыне аб’екты ўсё яшчэ зьяўляюцца канцэптуальнымі сутнасьцямі, але звычайна адпавядаюць непарыўнаму блёку кампутарнай памяці вызначанага памеру ў вызначаным месцазнаходжаньні. Такая рэалізацыя абраная з прычыны таго, што вылічэньне і апрацоўка інфармацыі патрабуюць строга пэўную форму кампутарнай памяці. У гэтым сэнсе аб’екты — гэта фундамэнтральныя прымітывы, якія патрабуюцца для дакладнага вызначэньня такіх паняткаў як спасылкі, зьменныя і адпаведнасьць імёнаў.
Аб’екты існуюць толькі ў сваім кантэсьце. Частка кампутарнай памяці ўтрымлівае аб’ект толькі тады, пакуль праграма разглядае гэтую частку памяці як аб’ект. Таму час жыцьця аб’ектаў — гэта час пакуль вобласьць памяці разглядаецца як аб’ект. Вось чаму аб’екты зьяўляюцца канцэптуальнымі паняткамі, нягледзячы на іхнае фізычнае знаходжаньне ў памяці.
Аб’екты ў аб’ектна-арыентаваным праграмаваньні
рэдагавацьУ аб’ектна-арыентаваным праграмаваньні (ААП) экзэмпляр праграмы (напрыклад, праграма, запушчаная на кампутары) разглядаецца як дынамічны набор аб’ектаў, якія ўзаемадзейнічаюць між сабой. Аб’екты ў ААП пашыраюць агульнае вызначэньне аб’ектаў, прыведзенае вышэй, шляхам выкарыстаньня адмысловага віду тыпізаваньня, якое, апроч іншага, дазваляе утрымліваць у сабе наступныя рэчы:
- дадзеныя, якія прадстаўляюць дадзеныя, асацыяваныя з аб’ектам;
- мэтады, якія зьвяртаюцца да дадзеных загадзя вызначанымі спосабамі.
У выпадку большасьці аб’ектаў, да дадзеных аб’екта можна зьвяртуцца толькі праз мэтады, што гарантуе тое, што дадзеныя заўжы застануцца ў дапушчальных межах. Аднак пэўныя мовы не адрозьніваюць дадзеныя і мэтады.
Амаль ва ўсіх аб’ектна-арыентаваных мовах праграмаваньня для выкліку пэўнага мэтаду альбо функцыі аб’екта выкарыстоўваецца апэратар «кропка» (.). Напрыклад, разгледзім арытмэтычную клясу зь імем 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 захоўваецца ў зьменнай «вынік»
У мовах, дзе кожны аб’ект ствараецца з клясы, аб’ект называецца экзэмплярам гэтай клясы. Калі кожны аб’ект мае тып, то два аб’екты адной і той жа клясы будуць мець адзін і той жа тып дадзеных.
Часам аб’ект застаецца без спасылак на яго ў праграме. Такі аб’ект ужо ня можа выконваць ніякіх дзеяньняў. У такіх выпадках у мовах, дзе рэалізаваны аўтаматычны збор сьмецьця, зьбіральнік сьмецьця пазначыць памяць, якая займаецца аб’ектам, як вольную, хаця фактычна яна яшчэ будзе ўтрымліваць зьвесткі аб’екта да таго часу, пакуль яны ня будуць перазапісаныя.
Тры ўласьцівасьці, якія характарызуюць аб’екты:
- Унікальнасьць: уласьцівасьць аб’екта, якая адрозьнівае яго ад іншых аб’ектаў;
- Стан: апісвае зьвесткі, якія захоўваюцца ў аб’екце;
- Паводзіны: апісвае мэтады ў інтэрфэйсе аб’екта, празь якія ён можа быць выкарыстаны.
Прыклад
рэдагавацьПрыкладам з жыцьця можа быць аб’ект «мой сабака», які зьяўляецца экзэмплярам клясы «сабака», які ў сваю чаргу зьяўляецца падклясай клясы «жывёла». У выпадку паліморфных аб’ектаў пэўныя дэталі гэтага тыпу могуць выбарачна інгаравацца, напрыклад, аб’ект «сабака» можа выкарыстоўвацца фукцыяй, якая шукае «жывёлу». Але гэтаксама можа апрацоўвацца і «котка», бо яна таксама належыць да клясы «жывёла». Калі аб’ектры разглядаць як «жывёлаў», пэўныя члены і атрыбуты клясаў «сабака» альбо «котка» будуць недаступныя, напрыклад, такія як атыбут «хвост», бо ня ўсе жывёлы маюць хвасты.
Вонкавыя спасылкі
рэдагаваць- Што такое аб’ект? (анг.) з The Java Tutorials