Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Properties, полезны ли они? 
:(
    Опции темы
Domestic Cat
Дата 22.6.2005, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата(arilou @ 22.6.2005, 02:21)
В мире .NET считается, что надо использовать свойства.


Дык вопрос-то был о том, почему так считается. Возьми любой класс, и замени все проперти на соответствующие методы. (Я имею в виду написанный тобой класс, а не FCLьный) Поменяется логика работы класса? С ним станет сложнее работать, придется как-то серьезно редизайнить код ? Отнюдь, все будет абсолютно так же как и было до этого. Оттого что написано a.Size = ... вместо a.setSize(...) - разве мне стало понятнее (или непонятнее)?
Вот и интересно, зачем так. Что выиграно? И Size = и в setSize - программист все равно должен для начала почитать доки и разобраться что делает метод/своиство. И в любом случае он будет знать что меняется некая характеристика объекта.
Цитата(arilou @ 22.6.2005, 02:21)
Пословицу про свой устав в чужом доме помните?

Вообще-то не программисты для языка, а язык для программиста. Если я учу язык, я хочу понять, что к чему и зачем. И вполне имею право иметь свое мнение.


--------------------

PM   Вверх
Tomcat
Дата 23.6.2005, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 4.4.2003
Где: Гродно, Беларусь

Репутация: 2
Всего: 2



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

Цитата(Domestic @ 21.6.2005, 09:12)
Потому, что это принятая в ООП терминология.

Вспоминая дядюшку Бутча.... На ровне с понятием сообщение есть и понятие операция, причем эти термины употребляются в книге как синонимы. Ну даже если были бы только одни сообщения... То чем тебе не нравится такое сообщение, как "Field = 2", где Field - это свойство?! Нигде же не регламентировано, каким образом должны описываться эти сообщения. Так что, я думаю, что использование свойств не выходит за рамки ООП.

Лично я представляю свойство в контексте С# таким образом, свойство - это интерфейс между полями объекта и внешними объектами. Важно отношение один-ко-многим: свойство-поля, а не только строго одно поле. Следуя такому пониманию, у меня никогда не возникает вопроса, когда использовать свойство, а когда метод.

Добавленно позже
Мда, видимо еще не все прочитал. Фигня вышла. Извиняюсь за "вклиниваюсь в самый конец".

Это сообщение отредактировал(а) Tomcat - 23.6.2005, 10:49
PM MAIL   Вверх
arilou
Дата 23.6.2005, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Domestic @ 22.6.2005, 20:30)
Дык вопрос-то был о том, почему так считается. Возьми любой класс, и замени все проперти на соответствующие методы.

Скобки придется поставить после каждой... smile

Цитата(Domestic @ 22.6.2005, 20:30)
И в любом случае он будет знать что меняется некая характеристика объекта.

Только если понятние название метода. Мое мнение, со св-вом такого вопроса не возникает. Априори понятно, что изменяя свойство, изменяешь хар-ку объекта.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Domestic Cat
Дата 23.6.2005, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Вот ты привел определение "A property is a member that provides access to a characteristic of an object or a class. "

Смотрим определение слова "characteristic":
Цитата

Some individualistic feature, attribute, etc. that serves to identify and 'characterize' something. Generally used synonymously with "trait" in discussion of personality...
A feature that helps to identify, tell apart, or describe recognizably; a distinguishing mark or trait....
any distinct property or attribute of a product, process or service that can be described and measured to determine conformance or nonconformity to specified requirements...

ну и так далее, вроде понятно. Теперь берем DataTable класс и его своиства Columns, Rows. Да, таблица состоит из столбцов или рядов. Точно также я состою из 2 рук, двух ног и т д. Но мои руки не являются моей характеристикой. Количество рук - да, но рука является моей составляющей, никак не моим индивидуальным свойством. Руль илисиденье не есть характеристики машины, это ее части.
Почему тогда Микрософт, чье определение свойств ты привел, на деле сам себе противоречит? Или его программисты сами не понимают что такое свойство?


--------------------

PM   Вверх
AntonSaburov
Дата 23.6.2005, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 118



Хотелось все-таки услышать оценку моей идеи по поводу визуальности - свойства удобно использовать в визуальных редакторах. Но что-то никто не обсудил это действительно реальное удобство smile

Нет никаких соглашений по именованию - все достаточно жестко.
Правда опять же все легко работает и в варианте JavaBeans если только соблюдать правила именования.
PM MAIL WWW ICQ   Вверх
Domestic Cat
Дата 23.6.2005, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата(AntonSaburov @ 23.6.2005, 10:04)
Хотелось все-таки услышать оценку моей идеи по поводу визуальности - свойства удобно использовать в визуальных редакторах. Но что-то никто не обсудил это действительно реальное удобство smile

По-моему, именно этим и руководствовались при решении - сделать метод или своиство. Хотя можно было бы например использовать аттрибуты, скажем
Код

[VisualStudioProperty(Name = "Columns")]
public DataColumnCollection getColumns()
{
   // blah blah blah
}




--------------------

PM   Вверх
arilou
Дата 23.6.2005, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Domestic @ 23.6.2005, 18:58)
that can be described and measured to determine conformance or nonconformity to specified requirements...

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

Тоже самое и с Rows и Columns, с одной стороны, они отличают один DataTable от другого. Со второй стороны - являются частями его самого.

Цитата(AntonSaburov @ 23.6.2005, 19:04)
Хотелось все-таки услышать оценку моей идеи по поводу визуальности - свойства удобно использовать в визуальных редакторах.

Я согласен, с Intellisense всегда видно, свойство это или поле. Т.е. никто не спорит smile


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Domestic Cat
Дата 24.6.2005, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата(arilou @ 23.6.2005, 10:39)
Вот это очень широкое определение, под которое руки и ноги тоже подпадают. С одной стороны, это твои характеристики, которые определяют, являешься ли ты антропоидной сущностью, или нет smile С другой строны, это составные части тебя как организма.


Нет, характеристика не может объектом, это некое свойство предмета, но не предмет. Например, если тебя попросят описать твою машиму, ты что, пойдешь, вытащишь двигатель, принесешь и скажешь: вот характеристика моей машины? Характеристики машыны - это ее цвет, марка, тип, мощность двигателя, количество дверей, тип кузова, и т п. Но сами по себе цвет или объем движка не являются самостоятельными сущностями.
Когда читаешь table.Columns естественнее полагать, что это количество столбцов, чем сами столбцы. Тогда да, это подпадало бы под определение. А так - нет. Вот и получается, что Микрософт сам не следует своим рекомендациям.


--------------------

PM   Вверх
arilou
Дата 24.6.2005, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Domestic @ 24.6.2005, 01:18)
Нет, характеристика не может объектом

Ну как это не может??? Возьми, например, пресловутый dataset, в котором можно хранить связи между таблицами. Связь - это характеристика набора таблиц, но она представлена в форме объекта.

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


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Domestic Cat
Дата 24.6.2005, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата(arilou @ 24.6.2005, 02:16)

Ну как это не может??? Возьми, например, пресловутый dataset, в котором можно хранить связи между таблицами. Связь - это характеристика набора таблиц, но она представлена в форме объекта.

Это разные понятия. Цвет - это свойство. Но в АПИ он представлен структурой Color.
И вообще даже длина массива - это структура, т.е. по сути, класс, наследующий от ValueObject. Иначе нельзя - ведь надо как-то свойства описывать. Просто когда я смотрю свойство Color некоего объекта, я получаю объект, описывающий это свойство. Речь то о том что Rows - это не характеристика таблицы.
Чтоб не запутаться, вот два других примера:
1. текстовое поле имеет свойство Text. Но текст не является свойством текстового поля. К свойствам можно отнести размеры, цвет, шрифт; текст же меняется юзером и следовательно не является свойством текстового поля как такового.
2. компоненты в Windows.Forms имеют проперти Tag. Но он вообще может никакого отношения не иметь к баттону. Там можно хранить что угодно. Но из определения:
Цитата
However, unlike fields, properties do not denote storage locations.

Здесь вообще ясно видно что одно противоречит другому.


--------------------

PM   Вверх
Дрон
Дата 24.6.2005, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 92



Что-то вы увлеклись smile

Domestic Cat
Ты вторую цитату из контекста вырвал. Там говорится не о свойствах вообще, а о properties в языке C#.


--------------------
Да. Именно так.
PM   Вверх
Domestic Cat
Дата 24.6.2005, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата
а о properties в языке C#.

Ну вообще да, там скорее про то, что это не просто акссессор для поля, но он может и вычислять это поле.
ВСе равно, определение звучит так:

Цитата
A property is a member that provides access to a characteristic of an object or a class. Examples of properties include the length of a string, the size of a font, the caption of a window, the name of a customer, and so on.

Приведены примеры, с которыми я согласен на 100%. Но вот текст в поле, тэг или коллекция столбцов - это не свойства.


--------------------

PM   Вверх
Exception
Дата 20.11.2005, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Domestic Cat, сомневаюсь, что, человека можно в чем-то убедить, если он так противится этому. Свойства удобны. Не более того.
Лично я для себя делю св-ва на:
1. Свойства состояния объекта.
Например, IsActive. Они всегда readonly. Да и сама комбинация getIsActive звучит по меньшей мере тупо.
2. Характеристические свойства объекта.
Вроде Name у Employee. Являются надстройкой над полями и предотвращают присваивание невалидных значени
Добавлено @ 13:13
й.
3. Свойства - внутренности [как их назвать..]
Описывают объекты, связанные с данным объектом, являющиеся его частью... Вроде DataRow. Почти всегда индексаторы. Возвращают объекты. В основном readonly.
---
Вообще, св-ва позволяют рассмотреть объект, похожий на реальный. К примеру, когда ты смотришь на машину, ты видишь ее цвет. А когда ты смотришь на число, ты не видишь его хэш. Вот и разделение св-ва/методы...
PM   Вверх
Exception
Дата 20.11.2005, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



P.S. Моя терминология не претендует на идеальность и полноту - придумывал на ходу..
PM   Вверх
Дрон
Дата 25.11.2005, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 92



Теперь я подниму ещё разок эту тему smile

Существует ещё одно замечательное свойство пропертей. Их можно использовать в DataBindings (не знаю, есть ли аналог этого в Java).

Объясняю на примере.
Пусть мы хотим сделать на форме CheckBox и рядом с ним текстовое поле. Также мы хотим, чтобы текстовое поле было disabled, когда галочка в checkbox не поставлена. Делается это одной строчкой в конструкторе формы:

Код

textBox1.DataBindings.Add("Enabled", checkBox1, "Checked");


Вуаля smile

Соответственно, если мы хотим сделать так, чтобы текст в этом текстовом поле автоматически брался из источника данных, и так же автоматически записывался в него, то мы пишем в конструкторе так:
Код

textBox1.DataBindings.Add("Text", myDataRow, "SomeField");

И больше никакого кода! smile

При этом без пропертей, такой красоты и простоты мы бы не получили.
smile

Это сообщение отредактировал(а) Дрон - 25.11.2005, 16:57


--------------------
Да. Именно так.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1572 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.