Определение состояния объекта в ООП

11

Мне нужно краткое определение «состояния объекта» в объектно-ориентированном программировании (для статьи).

Примерно полдня я искал статью, которую смогу процитировать по этой теме, но не смог ее найти. Все статьи, которые я нашел, были в основном общими статьями по объектно-ориентированному программированию, и они не определяли состояние объекта.

Я не уверен, но моя лучшая догадка - что-то вроде: состояние объекта определяется состоянием переменных экземпляра объекта.

Я ищу определение состояния объекта и / или ссылку на тему.

(кстати, я мог бы обратиться к понятию как «состояние объекта» или это необычно?)

mrsteve
источник
Я думаю, здесь есть место для двусмысленности, так что вы должны были указать в своей статье, что именно вы подразумеваете под «состоянием»; Если вы не можете этого сделать, возможно, вы не сможете выпустить свою газету.
PJTraill

Ответы:

9

Вы можете взглянуть (и привести) книгу Г. Буха «Объектно-ориентированный анализ и проектирование» :

... Объект является объектом, который имеет состояние, поведение и идентичность. Структура и поведение подобных объектов определяются в их общем классе. Экземпляр и объект терминов являются взаимозаменяемыми.

Мы рассмотрим концепции состояния, поведения и идентичности более подробно в следующих разделах. ...

И есть целый подраздел, который описывает понятие государства :

... Из этого примера мы можем сформировать следующее определение низкого уровня.

Состояние объекта охватывает все (обычно статические) свойства объекта плюс текущие (обычно динамические) значения каждого из этих свойств ...

Вор
источник
4
Fuzzy, как обычно. Что Бут , вероятно , хотел сказать: это состояние является присвоение значений в этих переменных.
reinierpost
3

Вы также хотели бы иметь в виду, что состояние объекта является «абстрактной» сущностью, определяемой тем, что можно наблюдать методами. Например, объект, который реализует хеш-таблицу, имеет в качестве своего состояния коллекцию значений, хранящихся в хеш-таблице, а не все детали внутреннего представления.

Удай Редди
источник
2

Термин « состояние » может быть использовано в различных смыслах, которые не могут быть даже все восприимчивы точного определения. Поэтому важно , чтобы вы включили определение в своей работе, чтобы сделать совсем понятно , как вы использовали этот термин. Далее я не предлагаю уникального определения состояния объекта, а скорее пытаюсь наметить несколько способов размышления о нем, которые могут быть уместны в разных контекстах.

Однако сначала вам нужно подумать о том, что вы подразумеваете под « объектом »: думаете ли вы о концептуальном объекте, то есть о некоторой сущности, которую вы пытаетесь смоделировать, или об экземпляре класса в конкретной программе; возможно, вы также хотите подумать о состоянии переменной, которая в разное время может относиться к разным объектам или к системе, возможно, при доступе через определенный пользовательский интерфейс.

Отчасти трудность определения состояния объекта в ООП заключается в том, что когда мы моделируем объекты на определенном языке, этот язык часто не позволяет нам отличать атрибуты объекта, которые концептуально являются частью одного и того же объекта, от других, которые этого не делают. Например, связанный список Carбудет состоять из нескольких Link-объектов, которые содержат указатели на следующий (и, возможно, предыдущий), Linkхотя концептуально список представляет собой один объект; ссылки также могут быть встроены вCar-объекты или содержат указатели на них, но в этом случае связанные объекты концептуально отделены, а не являются частью списка; однако в списке последних изменений изменения могут присутствовать только в списке и рассматриваться как его часть. В этих различных случаях мы должны решить, считаем ли мы состояние одного объекта включающим состояние связанных объектов. Кроме того, a Carможет иметь ссылку на Registering_Authority- мы, вероятно, не считаем, что состояние автомобиля меняется, когда его регистрирующий орган изменяет URL своего веб-сайта. Если язык реализации не позволяет нам различать разные типы ссылок, будет невозможно дать общее определение состояния объекта в терминах только языка.

« Внешнее » или « функциональное » состояние может быть определено как «как оно себя ведет», например, как он реагирует на вызовы методов или пользовательский интерфейс. Для объекта как экземпляра класса это определение зависит от типа, к которому объект относится как к объекту: рассматривается как CircleцветColoured_Circleне виден и, следовательно, не имеет отношения к его состоянию. Сложность заключается в том, что «как он реагирует» может потребоваться определить в терминах возвращаемых значений, а эти «значения» могут быть состояниями других объектов. Один из способов формализовать это - сказать, что два состояния объекта одинаковы, если все возможные будущие исполнения некоторой системы, в которую он встроен, приводят к одинаковому отображению входов в эту систему и выходов из него. Эта окружающая система может требоваться быть автономной системой, способной к выполнению независимо от ее среды; с другой стороны, можно позволить ему быть таким же маленьким, как и сам объект. В любом случае, математический подход заключается в том, чтобы определить состояние как класс эквивалентности

« Внутреннее » состояние может быть определено как состояние представления. Первая попытка явно круговая, но, возможно, полезная: «Внутреннее состояние объекта - это состояние его членов». Здесь мы должны позаботиться о том, чтобы отличить существенные аспекты представления от незначительных: на самом низком уровне представление объекта может вполне включать в себя адреса других объектов, но вряд ли будет полезно рассмотреть изменение такого адреса как изменение в состоянии. С другой стороны, изменение состояния кэша для результата запроса, хотя оно и не влияет на функциональное состояние (как описано выше), будет важным при рассмотрении тестов производительности.

PJTraill
источник
Это один из самых полезных ответов о состоянии объекта, который я нашел. В Интернете есть один PDF-документ, и это в основном все. Особенно часть о представлении (внутреннее состояние). Это открывает мне глаза и заставляет меня думать об объекте иначе.
Мирослав Трнинич
1

У IBM есть глоссарий, который определяет слово «состояние» в нескольких разных определениях, которые очень похожи друг на друга. Они конкретно не утверждают, что они связаны с объектно-ориентированным программированием, но их можно экстраполировать и использовать в этом контексте.

По умолчанию 3: этап в жизненном цикле объекта, который определяет статус этого объекта.

По умолчанию 5: состояние или ситуация в течение жизни объекта, в течение которого он удовлетворяет некоторому условию, выполняет некоторую деятельность или ожидает какого-либо события.

Def 8: характеристика объекта, которая проявляется в его открытых и закрытых элементах данных и может быть разделена на две категории: основное состояние и несущественное состояние.

По умолчанию 9: В машине бизнес-состояний один из нескольких отдельных отдельных этапов, которые организованы в последовательности для составления бизнес-транзакции.

По умолчанию 10: состояние, в котором цепь остается до подачи подходящего импульса.

В словаре New World College Dictionary Вебстера определяется «состояние» как:

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

Общим знаменателем всего этого является время. Состояние меняется с течением времени. Это природа переменных. Если кто-то спросит: «Каково ваше текущее состояние?» Сегодня вы можете сказать, что вы женаты, а завтра вы можете быть одиноким.

Учитывая все эти определения, можно экстраполировать, что «состояние» - это способ существования объекта в определенный момент времени, определяемый значениями его атрибутов, а именно его свойств / переменных.

Я не думаю, что это становится проще, чем это.

Роберт Роша
источник
Это стоит нескольких голосов, поскольку это делает возможность двусмысленности яснее, чем другие ответы.
PJTraill
Относительно моего предыдущего комментария: с тех пор я добавил свой собственный ответ, чтобы более подробно описать неоднозначность.
PJTraill
0

Объектно-ориентированная система объединяет термины кода и данных, используя понятие «объект». Объект имеет состояние (данные) и поведение (код). Следовательно, состояния объекта - это экземпляры (переменные) внутри объекта, который содержит данные.

Сайед Мехран Хуссейн
источник
Это правда, но это не значит добавлять много к существующим ответам.
Дэвид Ричерби
1
Может быть, это будет легко для кого-то понять :)
Syed MEhran Hussain
2
Это не верно. Я думаю, что вы хотите сказать: состояние - это присвоение значений этим переменным.
reinierpost