То, что является членом или имуществом
Друг, который является новичком в программировании OO, задал мне разницу между членом и собственностью, и мне было стыдно признаться, что я не мог дать ему хороший ответ. Так как свойства также могут быть объектами, я остался с общим описанием и списком исключений.
Может кто-нибудь, пожалуйста, изложите хорошее определение того, когда следует рассмотреть вопрос о члене или собственности? Может быть, я нахожусь в основе концепции, или просто член является только внутренним именем, которое я использую, а свойство - то, что подвергается другим объектам?
Я не думаю, что незнание ответа на этот вопрос повлияло на качество моего программирования, и это просто точка семантики, но мне все равно надоедает, что я не могу объяснить это ему.
Ответы
Ответ 1
Свойство - это один вид члена. Другие могут быть конструкторами, методами, полями, вложенными типами, конверсиями, индексаторами и т.д. - в зависимости от языка/платформы, конечно. Много времени точное значение терминологии зависит от контекста.
Чтобы дать С# -специфическое определение, из спецификации С# 3.0, раздел 1.6.1:
В следующей таблице представлен обзор типов членов, которые может содержать класс.
(Строки для...)
- Константы
- Поля
- Методы
- Свойства
- Индексаторы
- События
- Операторы
- Конструкторы
- деструкторы
- Типы
Обратите внимание, что это члены класса. Различные "вещи" имеют разные типы членов - в С#, например, интерфейс не может иметь поля в качестве члена.
Ответ 2
Ни один из этих двух терминов не имеет какого-либо определенного значения в объектно-ориентированном программировании или объектно-ориентированном дизайне. Они также не имеют определенного значения в подавляющем большинстве языков программирования.
Только очень небольшое число языков программирования имеет понятие, называемое свойством или членом, и еще меньше имеет оба.
Некоторые примеры языков, имеющих один из двух, - это С++ (у которого есть члены), ECMAScript (который имеет свойства) и С# (который имеет оба). Однако эти термины не обязательно обозначают одни и те же понятия в разных языках программирования. Например, термин "член" означает примерно то же самое в С++ и С#, но термин "свойство" означает совершенно разные вещи в ECMAScript и С#. Фактически, термин "свойство" в ECMAScript обозначает примерно ту же концепцию (т.е. Означает примерно то же самое), что и термин "член" в С++ и С#.
Все это только для того, чтобы сказать, что эти два термина означают то, что означает соответствующая спецификация для языка программирования, что они означают, не больше и не меньше. (Вставьте бесплатную цитату Льюиса Кэрролла здесь.)
Ответ 3
Свойства - это один вид членов.
В С#, например, класс может иметь следующие члены:
- Конструкторы
- деструкторы
- Константы
- Поля
- Методы
- Свойства
- Индексаторы
- Операторы
- События
- Делегаты
- Классы
- Интерфейсы
- Структуры
MSDN: С#: класс
Ответ 4
Члены - это просто объекты или примитивные типы, принадлежащие классу.
Свойства дают вам больше полномочий, чем членов. Это упрощённый способ создания геттеров и сеттеров, позволяющих создавать, например, публичные геттеры и частные сеттеры; и поместите любую логику, которую вы хотите, так, как она будет прочитана или написана. Они могут использоваться как способ разоблачения членов, что позволяет более легко изменить политику чтения и записи.
Это относится к С#. Не уверен, что это верно для других языков.
Ответ 5
Член (переменная) - это только часть объекта. Свойство (я буду квалифицировать это с помощью "обычно" - я не уверен, что это технически понятное слово, которое имеет однозначное значение на нескольких языках) является общедоступным аспектом объекта, например. через методы получения и сеттера.
Итак, в то время как (почти всегда) свойство является переменной типа reacheable, вы можете иметь свойство, которое не является частью состояния объекта (не так, как это хорошо):
public class Foo {
public String getJunk()
{ return "Junk";}
public void setJunk(String ignore){;}
}
}
Ответ 6
Свойства - это способ отображения полей, где поля являются действительными переменными. Например (С#):
class Foo {
private int field;
public int Property {
get { return field; }
set { field = value; }
}
}
Ответ 7
Оба свойства и методы являются членами объекта. Свойство описывает некоторый аспект объекта, в то время как метод обращается к или использует объект-владелец.
Пример в псевдокоде:
Object Ball
Property color(some Value)
Method bounce(subroutine describing the movement of the Ball)
Если мяч определен и задан цвет (свойство), а метод bounce - это подпрограмма, которая описывает, как мяч будет реагировать на попадание другого объекта.
Не у всех языков есть свойства, т.е. У Java есть только поля, к которым необходимо получить доступ с помощью getters и seters.
Ответ 8
из Руководство по PHP:
Переменные члена класса называются "свойствами". Вы также можете увидеть, как они ссылаются на другие термины, такие как "атрибуты" или "поля". Они определяются с использованием одного из ключевых слов public, protected или private, за которым следует объявление нормальной переменной. Эта декларация может включать инициализацию.
Ответ 9
Участник - это общий термин (вероятно, возник из С++, но также определенный в Java), используемый для обозначения компонента класса. Свойство - это широкая концепция, используемая для обозначения конкретной характеристики класса, который после создания экземпляра поможет определить состояние объекта.
Следующие отрывки, извлеченные из "Объектно-ориентированного анализа и проектирования" Грэди Буча, помогают уточнить этот вопрос. Во-первых, важно понимать понятия состояния и поведения:
Состояние объекта объекта включает в себя все (обычно статические) свойства объекта и текущие (обычно динамические) значения каждого из этих свойств. По свойствам мы имеем в виду совокупность атрибутов объекта и отношений с другими объектами.
Поведение - это то, как объект действует и реагирует с точки зрения изменений состояния и передачи сообщений (методов); видимую и проверяемую деятельность объекта.
Таким образом, поведение объекта зависит от доступных операций и его состояния (свойств и их текущих значений). Обратите внимание, что ООП является довольно общим в отношении определенной номенклатуры, поскольку она сильно варьируется от языка к языку:
Поле терминов (Object Pascal), переменная экземпляра (Smalltalk), объект-член (С++) и слот (CLOS) являются взаимозаменяемыми, что означает репозиторий для части состояния объекта. В совокупности они составляют структуру объекта.
Операция над объектом, определяемая как часть объявления класса. Сообщения условий (Smalltalk), метод (многие языки OO), функция-член (С++) и операция обычно взаимозаменяемы.
Но нотация, введенная автором, точна:
Атрибут обозначает часть совокупного объекта и поэтому используется во время анализа, а также дизайн, чтобы выразить исключительное свойство класса. Используя синтаксис, не зависящий от языка, атрибут может иметь имя, класс или и то, и другое, а необязательное выражение по умолчанию: A:C=E
.
Операция обозначает некоторую услугу, предоставляемую классом. Операции (...) отличаются от атрибутов добавлением скобок или предоставлением полной подписи операции, состоящей из класса возврата, имени и формальных аргументов (если есть): R N(Arguments)
Итак, вы можете думать о членах как о том, что составляет класс, и свойствах как члены (атрибуты), которые в совокупности определяют структуру класса, а также его отношения к другим классам. Когда экземпляр класса создается, значения присваиваются его свойствам, чтобы определить состояние объекта.
Приветствия