Мне нужно краткое определение «состояния объекта» в объектно-ориентированном программировании (для статьи).
Примерно полдня я искал статью, которую смогу процитировать по этой теме, но не смог ее найти. Все статьи, которые я нашел, были в основном общими статьями по объектно-ориентированному программированию, и они не определяли состояние объекта.
Я не уверен, но моя лучшая догадка - что-то вроде: состояние объекта определяется состоянием переменных экземпляра объекта.
Я ищу определение состояния объекта и / или ссылку на тему.
(кстати, я мог бы обратиться к понятию как «состояние объекта» или это необычно?)
Ответы:
Вы можете взглянуть (и привести) книгу Г. Буха «Объектно-ориентированный анализ и проектирование» :
И есть целый подраздел, который описывает понятие государства :
источник
Вы также хотели бы иметь в виду, что состояние объекта является «абстрактной» сущностью, определяемой тем, что можно наблюдать методами. Например, объект, который реализует хеш-таблицу, имеет в качестве своего состояния коллекцию значений, хранящихся в хеш-таблице, а не все детали внутреннего представления.
источник
Термин « состояние » может быть использовано в различных смыслах, которые не могут быть даже все восприимчивы точного определения. Поэтому важно , чтобы вы включили определение в своей работе, чтобы сделать совсем понятно , как вы использовали этот термин. Далее я не предлагаю уникального определения состояния объекта, а скорее пытаюсь наметить несколько способов размышления о нем, которые могут быть уместны в разных контекстах.
Однако сначала вам нужно подумать о том, что вы подразумеваете под « объектом »: думаете ли вы о концептуальном объекте, то есть о некоторой сущности, которую вы пытаетесь смоделировать, или об экземпляре класса в конкретной программе; возможно, вы также хотите подумать о состоянии переменной, которая в разное время может относиться к разным объектам или к системе, возможно, при доступе через определенный пользовательский интерфейс.
Отчасти трудность определения состояния объекта в ООП заключается в том, что когда мы моделируем объекты на определенном языке, этот язык часто не позволяет нам отличать атрибуты объекта, которые концептуально являются частью одного и того же объекта, от других, которые этого не делают. Например, связанный список
Car
будет состоять из несколькихLink
-объектов, которые содержат указатели на следующий (и, возможно, предыдущий),Link
хотя концептуально список представляет собой один объект; ссылки также могут быть встроены вCar
-объекты или содержат указатели на них, но в этом случае связанные объекты концептуально отделены, а не являются частью списка; однако в списке последних изменений изменения могут присутствовать только в списке и рассматриваться как его часть. В этих различных случаях мы должны решить, считаем ли мы состояние одного объекта включающим состояние связанных объектов. Кроме того, aCar
может иметь ссылку наRegistering_Authority
- мы, вероятно, не считаем, что состояние автомобиля меняется, когда его регистрирующий орган изменяет URL своего веб-сайта. Если язык реализации не позволяет нам различать разные типы ссылок, будет невозможно дать общее определение состояния объекта в терминах только языка.« Внешнее » или « функциональное » состояние может быть определено как «как оно себя ведет», например, как он реагирует на вызовы методов или пользовательский интерфейс. Для объекта как экземпляра класса это определение зависит от типа, к которому объект относится как к объекту: рассматривается как
Circle
цветColoured_Circle
не виден и, следовательно, не имеет отношения к его состоянию. Сложность заключается в том, что «как он реагирует» может потребоваться определить в терминах возвращаемых значений, а эти «значения» могут быть состояниями других объектов. Один из способов формализовать это - сказать, что два состояния объекта одинаковы, если все возможные будущие исполнения некоторой системы, в которую он встроен, приводят к одинаковому отображению входов в эту систему и выходов из него. Эта окружающая система может требоваться быть автономной системой, способной к выполнению независимо от ее среды; с другой стороны, можно позволить ему быть таким же маленьким, как и сам объект. В любом случае, математический подход заключается в том, чтобы определить состояние как класс эквивалентности« Внутреннее » состояние может быть определено как состояние представления. Первая попытка явно круговая, но, возможно, полезная: «Внутреннее состояние объекта - это состояние его членов». Здесь мы должны позаботиться о том, чтобы отличить существенные аспекты представления от незначительных: на самом низком уровне представление объекта может вполне включать в себя адреса других объектов, но вряд ли будет полезно рассмотреть изменение такого адреса как изменение в состоянии. С другой стороны, изменение состояния кэша для результата запроса, хотя оно и не влияет на функциональное состояние (как описано выше), будет важным при рассмотрении тестов производительности.
источник
У IBM есть глоссарий, который определяет слово «состояние» в нескольких разных определениях, которые очень похожи друг на друга. Они конкретно не утверждают, что они связаны с объектно-ориентированным программированием, но их можно экстраполировать и использовать в этом контексте.
В словаре New World College Dictionary Вебстера определяется «состояние» как:
Общим знаменателем всего этого является время. Состояние меняется с течением времени. Это природа переменных. Если кто-то спросит: «Каково ваше текущее состояние?» Сегодня вы можете сказать, что вы женаты, а завтра вы можете быть одиноким.
Учитывая все эти определения, можно экстраполировать, что «состояние» - это способ существования объекта в определенный момент времени, определяемый значениями его атрибутов, а именно его свойств / переменных.
Я не думаю, что это становится проще, чем это.
источник
Объектно-ориентированная система объединяет термины кода и данных, используя понятие «объект». Объект имеет состояние (данные) и поведение (код). Следовательно, состояния объекта - это экземпляры (переменные) внутри объекта, который содержит данные.
источник