Что такое "поле"? «Поле» против «Значение поля» - PullRequest
1 голос
/ 28 апреля 2009

В паспорте есть поле: Имя , и это поле имеет значение Джон .

Я утверждаю, что правильно описать отношения следующим образом:

Поле Имя :

  1. Имеет имя (Имя).
  2. Имеет набор допустимых значений (например, определенных регулярным выражением [A-Za-z.] {1,30}
  3. Имеет описание (имя, которое стоит первым в полном имени человека)

И Паспорт - это набор пар (поле: значение поля), такой что:

  • в паспорте есть поле "Имя"
  • паспорт имеет значение для поле «Имя»

Суть в том, что неверно , чтобы сказать:
«Имя - это Джон»;

Правильный способ (концептуально / академически) состоит в следующем:
msgstr "у паспорта есть значение" Джон "для поля" Имя ".

На практике это означает (псевдо C #):

struct Passport {
    Map<Field, object> fieldValues;
}

struct Field {
    string Name;
    string Description; 
    bool IsValidValue(object value);
}

Q: Имеет ли это смысл? Есть мысли?

Ответы [ 4 ]

1 голос
/ 28 апреля 2009

Это довольно субъективно и полностью контекстно-зависимо, и кажется глупой вещью, которую надо придираться.

Правильно или нет, если я обсуждаю «паспорт» с коллегой, я бы что-то бросил в них, если бы они исправляли меня каждый раз, когда я говорил «firstName is 'john” », и велел мне это сказать как "поле имени паспорта" Джон ". Вы бы просто натолкнулись на раздражение.

0 голосов
/ 06 мая 2009

Ну ... не совсем в c #, см. Скотт Беллвер ответит на мой вопрос о том, что C # не является объектно-ориентированным (вроде) .

В C # паспорт - это класс, поэтому имеет смысл сказать

  1. "Паспорт имеет поле FirstName"
  2. Для конкретного экземпляра «FirstName value is John».

Здесь первое предложение описывает класс, а следующее - объект. В более оригинальном языке, таком как ruby, я думаю, что выражение «паспорт имеет значение« Джон »для поля« Имя »» будет эквивалентно, вы просто описываете два объекта - прототип Passport и его экземпляр в одном предложении .

Хотя я сам в этом запутался. Вопрос странно сформулирован, поскольку паспорт, несомненно, будет гораздо больше, чем просто его поля, например давняя и постоянная идентичность.

0 голосов
/ 06 мая 2009

Если вы собираетесь моделировать такие вещи, то вы можете взглянуть на API отражения java или c #. Это очень похоже на то, что вы описали. Класс имеет набор полей, поле имеет имя, тип и другие атрибуты, а не значение. Объект является экземпляром класса, и вы можете запросить у объекта значение указанного поля. Различные объекты одного и того же класса имеют значения для одних и тех же полей, поэтому вы можете сказать, что они имеют общие поля. Поэтому, если вы пытаетесь смоделировать ООП на основе классов, вы, вероятно, правы.

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

Итак, ответ на вопрос "Имеет ли это смысл?" Я думаю, что «да», потому что похожая вещь находится в отражении и используется широко. Если это правильно или неправильно - зависит от ваших потребностей.

UPD: относительно "значение = Passport [поле]" против "значение = Passport.Field.Value" Я бы ввел еще один паспорт, чтобы прояснить его /

firstNameField = PassportClass.Fields["FirstName"]
myName   =   myPassport[firstNameField]
yourName = yourPassport[firstNameField]

предполагает, что оба паспорта имеют одинаковые поля, что имеет смысл. Наличие разных паспортов с разными полями может иметь смысл, просто другой.

0 голосов
/ 28 апреля 2009

Нет. По крайней мере, в ООП ответственность за сохранение стоимости лежит на поле. Хотя объект отвечает за обеспечение того, чтобы значение соответствовало другим полям или ограничениям объекта, фактическое «удержание значения» является задачей поля.

Используя ваш пример:

Имя поля:

  • Имеет имя (Имя).
  • Имеет тип (int, string, object)
  • Имеет описание (необязательно)
  • Имеет значение

И Паспорт это набор полей :

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