Визначення стану об’єкта в ООП


11

Мені потрібно стисло визначити "стан об'єкта" в об'єктно-орієнтованому програмуванні (для статті).

Близько половини дня я шукав папір, який можу цитувати на цю тему, але не зміг його знайти. Усі статті, які я знайшов, були в основному загальними статтями про об'єктно-орієнтоване програмування, і вони не визначали стан об'єкта.

Я не впевнений, але найкраща здогадка - це щось на зразок: Стан об’єкта визначається станом змінних екземплярів об'єкта.

Я шукаю визначення стану об’єкта та / або посилання на тему.

(btw, чи можу я називати це поняття "станом об'єкта", чи це нечасто?)


Я думаю, що тут є місце для неоднозначності, щоб ви мали сказати у своєму документі саме те, що ви означаєте під "державою"; якщо ви не могли цього зробити, можливо, ви не змогли випустити папір.
PJTraill

Відповіді:


9

Ви можете подивитися (і цитувати) книгу Г. Буха : "Об'єктно-орієнтований аналіз та дизайн" :

... Об'єкт - це сутність, яка має стан, поведінку та ідентичність. Структура та поведінка подібних об'єктів визначені у їхньому загальному класі. Терміни екземпляр і об'єкт взаємозамінні.

Ми розглянемо поняття держави, поведінки та ідентичності більш докладно в наступних розділах. ...

І є цілий підрозділ, який описує поняття держави :

... З цього прикладу ми можемо сформувати таке низькорівневе визначення.

Стан об'єкта охоплює всі (зазвичай статичні) властивості об'єкта плюс поточні (зазвичай динамічні) значення кожної з цих властивостей ...


4
Нечіткий, як завжди. Що Бут, мабуть, мав на увазі сказати: стан - це присвоєння значень цим змінним.
reinierpost

3

Ви також хотіли б мати на увазі, що стан об'єкта є "абстрактною" сутністю, що визначається тим, що спостерігається методами. Наприклад, об’єкт, який реалізує хеш-таблицю, має свій стан, набір значень, що зберігаються в хеш-таблиці, не всі деталі внутрішнього представлення.


2

Термін " стан " може вживатися в різних сенсах, які навіть не можуть сприйняти точне визначення. Тому важливо було включити визначення у свій документ, щоб зрозуміти, як ви використовуєте цей термін. Далі я не пропоную унікального визначення стану об’єкта, а намагаюся накреслити кілька способів його роздуму, які можуть бути доречними в різних контекстах.

Перш за все, вам потрібно подумати, що ви маєте на увазі під « об’єктом »: чи думаєте ви про понятійний об’єкт, тобто про якусь сутність, яку ви намагаєтеся моделювати, або про екземпляр класу в певній програмі; можливо, ви також хочете подумати про стан змінної, яка могла б у різний час посилатися на різні об'єкти або про систему, може бути, як отримати доступ через певний користувальницький інтерфейс.

Частина труднощів у визначенні стану об'єкта в ООП полягає в тому, що, коли ми моделюємо сутності певною мовою, ця мова часто не дозволяє нам відрізняти атрибути об'єктів, які концептуально є частиною тієї ж сутності від інших, які не є. Наприклад, зв'язаний список Carскладатиметься з ряду Link-об'єктів, які містять вказівники на наступний (а може і попередній), Linkхоча концептуально цей список є єдиним об'єктом; посилання також можуть бути вбудованіCar-об'єкти або містять вказівники на них, але в цьому випадку пов'язані об'єкти є концептуально окремими, а не частиною списку; у списку останніх змін, все-таки, зміни можуть бути присутніми лише у списку та вважатись їх частиною. У цих різних випадках ми маємо вирішити, чи вважаємо ми стан одного об’єкта таким, що стосується пов'язаних об'єктів. Крім того, Carможе бути посилання на Registering_Authority- ми, мабуть, не вважаємо, що стан автомобіля може змінюватися, коли його реєстраційний орган змінює URL-адресу свого веб-сайту. Якщо мова реалізації не дозволить нам розрізнити різні типи зв’язків, неможливо зробити загальне визначення стану об’єкта лише з точки зору мови.

" Зовнішній " або " функціональний " стан можна визначити як "як він поводиться", наприклад як він реагує на виклики методу або на користувальницький інтерфейс. Для об'єкта як екземпляра класу це визначення залежить від типу, до якого об'єкт сприймається як належний: бачив як a Circle, колір аColoured_Circleне видно, а значить, не має значення для його стану. Складність з цим полягає в тому, що "як він реагує" може знадобитися визначити значення повернених значень, і ці "значення" можуть бути станами інших об'єктів. Один із способів формалізувати це - сказати, що два стани об’єкта однакові, якщо всі можливі майбутні виконання якоїсь системи, в яку він вбудований, призводять до того ж відображення від входів до цієї системи до виходів з неї. Ця система, що охоплює, може вимагати бути автономною системою, здатною виконувати незалежно від її оточення; з іншого боку, можна дозволити його бути таким же маленьким, як і сам предмет, про який йде мова. У будь-якому випадку математичним підходом є визначення стану як класу еквівалентності

" Внутрішній " стан можна визначити як стан представництва. Перша спроба, мабуть, кругла, але може бути корисною: "Внутрішній стан об'єкта - це стан його членів". Тут нам потрібно подбати про те, щоб відрізнити суттєві аспекти подання від незначних: на найнижчому рівні представлення об'єкта цілком може включати адреси інших об'єктів, але навряд чи буде корисно розглянути зміну такої адреси як зміна стану. З іншого боку, зміна стану кешу результату запиту, хоча воно не має значення для функціонального стану (як описано вище), буде важливим при розгляді тестів на ефективність.


Це одна з найкорисніших відповідей про стан об'єкта, який я знайшов. В Інтернеті є один документ PDF, і це в основному це. Особливо частина про уявлення (внутрішній стан). Це відкриває мені очі і змушує мене річ про об'єкт інакше.
Мирослав Trninic

1

IBM має словник, який визначає слово "стан" у кількох різних визначеннях, які дуже схожі між собою. Вони конкретно не заявляють, що вони пов'язані з об'єктно-орієнтованим програмуванням, але можна екстраполювати та використовувати їх у цьому контексті.

Def 3: Етап життєвого циклу об'єкта, який визначає стан цього об'єкта.

Def 5: Стан або ситуація протягом життя предмета, під час якого він задовольняє деякій умові, виконує якусь діяльність або чекає якоїсь події.

Def 8: Характеристика об'єкта, що виявляється у його публічних та приватних учасниках даних, і їх можна розділити на дві категорії: істотний стан та несуттєвий стан.

Def 9: У машині стану бізнесу один з декількох окремих дискретних етапів, які організовані послідовно для складання бізнес-операції.

Def 10: Умова, в якій схема залишається до застосування відповідного імпульсу.

Словник New World College Webster визначає "стан" як:

Сукупність обставин або ознак, що характеризують людину чи річ у даний момент часу; спосіб або форма буття: стан

Спільним знаменником усього цього є час. Держава змінюється з часом. Така природа змінних. Якби хтось запитав: "Який у тебе зараз стан?" Ви можете сказати сьогодні, що ви одружені, а завтра можете бути самотніми.

Враховуючи всі ці визначення, можна екстраполювати, що "стан" - це спосіб існування об'єкта в певний момент часу, визначений значеннями його атрибутів, а саме його властивостями / змінними.

Я не думаю, що це стає простішим за це.


Це коштує кількох голосів, оскільки це робить потенціал неоднозначності чіткішим за інші відповіді.
PJTraill

Попередній мій коментар: з тих пір я додав власну відповідь, щоб детальніше описати неоднозначність.
PJTraill

0

Об'єктно-орієнтована система інтегрує терміни коду та даних, використовуючи поняття «об’єкт». Об'єкт має стан (дані) та поведінку (код). Отже, стани об'єкта - це екземпляри (змінні) всередині об'єкта, що містять дані.


Це правда, але не здається додати багато до існуючих відповідей.
Девід Річербі

1
Можливо, комусь це буде легко зрозуміти :)
Syed MEhran Hussain

2
Це неправильно. Що ви хочете сказати, я думаю: стан - це присвоєння значень цим змінним.
reinierpost
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.