Подтвердить что ты не робот

То, что является членом или имуществом

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

Может кто-нибудь, пожалуйста, изложите хорошее определение того, когда следует рассмотреть вопрос о члене или собственности? Может быть, я нахожусь в основе концепции, или просто член является только внутренним именем, которое я использую, а свойство - то, что подвергается другим объектам?

Я не думаю, что незнание ответа на этот вопрос повлияло на качество моего программирования, и это просто точка семантики, но мне все равно надоедает, что я не могу объяснить это ему.

4b9b3361

Ответ 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)

Итак, вы можете думать о членах как о том, что составляет класс, и свойствах как члены (атрибуты), которые в совокупности определяют структуру класса, а также его отношения к другим классам. Когда экземпляр класса создается, значения присваиваются его свойствам, чтобы определить состояние объекта.

Приветствия