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

Поиск:

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


Штурман
****


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

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



Цитата(arilou @ 21.6.2005, 19:43)
Да, давайте уберем свойства и делегаты с событиями, и получим очередной клон Java

Ну вообщем-то по основным идеям .NET - это явный клон JAVA. Там одно гордое описание виртуальной машины и сборщика мусора с поколениями чего стоит.
PM MAIL WWW ICQ   Вверх
arilou
Дата 21.6.2005, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Domestic @ 21.6.2005, 19:41)
Managed язык, претендующий на простоту обязан быть четко формализован

Кем обязан? Есть спецификация языка C#:
Цитата
Properties are an extension of fields and are accessed using the same syntax. Unlike fields, properties do not designate storage locations. Instead, properties have accessors that read, write, or compute their values.


Цитата
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. Properties are a natural extension of fields — both are named members with associated types, and the syntax for accessing fields and properties is the same. However, unlike fields, properties do not denote storage locations. Instead, properties have accessors that specify the statements to be executed when their values are read or written. Properties thus provide a mechanism for associating actions with the reading and writing of an object's attributes; furthermore, they permit such attributes to be computed.



Добавлено @ 19:51
Цитата(AntonSaburov @ 21.6.2005, 19:48)
Ну вообщем-то по основным идеям .NET - это явный клон JAVA.

Не попадайся на провокацию smile JAVA vs NET в отдельной теме smile


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


Штурман
****


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

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



Цитата(arilou @ 21.6.2005, 19:43)
С таким же успехом можно на ассемблере писать. Хотя нет.

Можно к пылесосу и стиральную машину пределать. Только никому не надо. И можно сделать процессор, у которого будет 3000 команд. Только никому такое количество не нужно.

Может кто-нибудь вспомнить "бритву Оккама" ? Что там написано ?

В первоначальной форме это правило гласит: «Не пытайся объяснить посредством большего то, что можно объяснить посредством меньшего». Позже была предложена формулировка «Не следует умножать сущности без необходимости».
PM MAIL WWW ICQ   Вверх
arilou
Дата 21.6.2005, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



И вообще, возникает такое впечатление, что просто покрывается убогость языка за счет ООП пуризма. Наличие свойств, событий, и делегатов повышает выразительность C#.

Никогда бы не подумал, что буду защищать C# smile Сам то я к нему от VB.NET перешел smile

Это сообщение отредактировал(а) arilou - 21.6.2005, 19:55


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


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


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

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



Цитата(AntonSaburov @ 21.6.2005, 20:52)
В первоначальной форме это правило гласит: «Не пытайся объяснить посредством большего то, что можно объяснить посредством меньшего». Позже была предложена формулировка «Не следует умножать сущности без необходимости».

Знаем-знаем, мудрый Каа smile

Только можно ударится в другую крайность: Двйт рзгврвт, спльз тлк сглсн. Как древние египтяне smile

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


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


Штурман
****


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

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



Цитата(arilou @ 21.6.2005, 19:54)
И вообще, возникает такое впечатление, что просто покрывается убогость языка

Толко что говорил что Java vs NET в отдельной теме. Кроме того проперти использует не только C#.

А выразительность не должна перерастать в переигрывание.

Вот я нашел для себя пока одно реальное удобство - в визуальном редакторе использование пропертей IMHO более удобно. Не надо думать о правилах именования для тех же JavaBeans.

Но минусов вижу несколько больше.
Добавлено @ 20:00
Цитата
Только можно ударится в другую крайность: Двйт рзгврвт, спльз тлк сглсн. Как древние египтяне

Никто не пытается убрать те элемены, которые реально необходимы. Просто здесь попытка выяснить - для чего же все-таки проперти реально нужны. Если только для удобства чтения кода, то это удобство IMHO достаточно сомнительное.
PM MAIL WWW ICQ   Вверх
arilou
Дата 21.6.2005, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Реально в классах есть данные и операции. Для операций - методы, для данных - свойства, чтобы не нарушать инкапсуляцию. Что тут непонятного?


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


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


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

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



Цитата(arilou @ 21.6.2005, 21:02)
Реально в классах есть данные и операции. Для операций - методы, для данных - свойства, чтобы не нарушать инкапсуляцию. Что тут непонятного?

Во! Коротко и ясно smile


--------------------
Да. Именно так.
PM   Вверх
AntonSaburov
Дата 21.6.2005, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


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

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



Цитата(arilou @ 21.6.2005, 20:02)
Для операций - методы, для данных - свойства, чтобы не нарушать инкапсуляцию.

Ну и зачем тогда
Код

DataSet.Open;
...
DataSet.Close;

и кроме этого иметь возможность делать
Код

Active := True;
...
Active := False;


Если сделать для себя критерий - если я собираюсь менять данные, то нужны проперти, а если буду что-то делать, то методы - то он рушится при попытке сделать кроме смены значения еще что-то, потому как порождает еще какое-то ДЕЙСТВИЕ. А значит это фактически просьба к объекту - сделай что-нибудь. По сути вызов метода.

Одно то, что часто идет дублирование пропертей и методов говорит о том, что к этому понятию отношение очень разное. И неоднозначное. А неоднозначность не очень хорошее дело.

Если мы говорим о том, что проперть - это чистый сеттер и геттер и только из-за инкапсуляции мы прячем это поле. И может быть когда-нибудь нам неожиданно потребуется добавить еще что-то, то опять мы упираемся в то, что это по сути - методы. Просто вызов их несколько иной.
И из-за несколько отличного синтаксиса нам это преподносится как величайшее достижение ООП ? Овчинка вообщем-то выделки не стоит IMHO.
PM MAIL WWW ICQ   Вверх
Domestic Cat
Дата 21.6.2005, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(arilou @ 21.6.2005, 11:02)
Реально в классах есть данные и операции. Для операций - методы, для данных - свойства, чтобы не нарушать инкапсуляцию. Что тут непонятного?

Ну и кому от этого легче? Программисту вообще то должно быть глубоко все равно, что он меняет, свойство ли, или там накручено двести строк кода. И опять таки, что в этом принципиально иного по сравнению с setSpeed?


Цитата(AntonSaburov @ 21.6.2005, 11:09)
Если мы говорим о том, что проперть - это чистый сеттер и геттер и только из-за инкапсуляции мы прячем это поле. И может быть когда-нибудь нам неожиданно потребуется добавить еще что-то, то опять мы упираемся в то, что это по сути - методы. Просто вызов их несколько иной.
И из-за несколько отличного синтаксиса нам это преподносится как величайшее достижение ООП ? Овчинка вообщем-то выделки не стоит IMHO.

Согласен.


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

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


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


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

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



Цитата(AntonSaburov @ 21.6.2005, 21:09)
И из-за несколько отличного синтаксиса нам это преподносится как величайшее достижение ООП

Дык, никто же не заставляет smile

Другое дело, что это действительно удобная вещь. Просто удобная smile

Никто не говорит о том, что это что-то революционное и т.п. Это только очень приятное и очень естественное дополнение языка.

Знаете как в C++ Builder были реализованы проперти? smile
Код

     AnsiString __fastcall GetCapt();
     void __fastcall SetCapt(AnsiString Caption);

     __property AnsiString Caption = { read = GetCapt, write = SetCapt };

Т.е. были методы get и set -- доступные по отдельности. И было дополнение -- позволяющее их объединить.

Странно, вообще-то, от программистов слышать такое яростное отрицание чего-либо smile

Это сообщение отредактировал(а) Дрон - 21.6.2005, 22:04


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


Эксперт
****


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

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



Цитата

Странно, вообще-то, от программистов слышать такое яростное отрицание чего-либо smile


Ты просто яростного отрицания не видел smile Никто ж тут не рвет на себе тельняшку и с пеной у рта не доказывает, что проперти - это зло, плохо, и т п. Это обсуждение некой фичи языка, которое, по моему мнению, не является каким-либо достижением, т.к. его удобство компенсировано тем, что оно "загрязняет" язык. Так же как и индексеры. Вспомни, из чего все пошло - я упомянул, что по моему впечатлению, декларативные языки остановились в развитии и дальнейшие перемены сводятся к игре с синтаксисом. КАк примеры я привел пропертя и индексеры.
ИМХО же сводится к тому, что вводить их не стоило; но раз они есть - флаг им в руки, если придется писать на шарпе я буду их пользовать как велит партия и правительство. Но ведь и пофилосовствовать нужно smile.


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

PM   Вверх
mr.DUDA
Дата 22.6.2005, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


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

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



Цитата(Domestic @ 21.6.2005, 23:24)
я упомянул, что по моему впечатлению, декларативные языки остановились в развитии и дальнейшие перемены сводятся к игре с синтаксисом.

А что означает "развитие" для декларативных языков? Когда в последний раз что-либо развивалось?

Цитата(Domestic @ 21.6.2005, 23:24)
ИМХО же сводится к тому, что вводить их не стоило; но раз они есть - флаг им в руки, если придется писать на шарпе я буду их пользовать как велит партия и правительство.

Если тебе это будет глубоко противно - лучше не используй smile
На шарпе никто ещё не запрещал юзать методы типа getSpeed()/setSpeed().
Добавлено @ 08:09
Цитата(Domestic @ 21.6.2005, 19:47)
Цитата
Тогда я возьму и сделаю свойство field !!! И интерфейс класса не изменится smile


Цитата(arilou @ 21.6.2005, 10:44)

Ха! Заменяем на свойство, и можно даже по коду не лазить - имя то не изменилось.


Вы невнимательно читали. Вам в 99% случаев придется менять название на более подходящее или вообще менять на вызов метода (следуя вашему же правилу использования пропертей). Да и не об этом речь.

Кстати, можно подробнее объяснить, где тут противоречие?

Спросил потому, что согласен на все 100% с высказыванием по поводу простоты при замене field на property.


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


Эксперт
****


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

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



Цитата(mr @ 21.6.2005, 23:06)
Кстати, можно подробнее объяснить, где тут противоречие?

Спросил потому, что согласен на все 100% с высказыванием по поводу простоты при замене field на property.

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


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

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


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


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

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



Хочу пояснить свою мысль насчет данных и операций.

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

К чему я это говорю? Мне кажется, что понятие "свойство" более точно описывает те данные, которые класс выставляет наружу независимо от их происхождения. Безусловно, можно сделать getSpeed и setSpeed, можно сделать св-во Speed, разницы не будет. В мире .NET считается, что надо использовать свойства. Пословицу про свой устав в чужом доме помните?

Цитата(AntonSaburov @ 21.6.2005, 20:09)
Если сделать для себя критерий - если я собираюсь менять данные, то нужны проперти, а если буду что-то делать, то методы - то он рушится при попытке сделать кроме смены значения еще что-то

Так никто ж не запрещает использовать методы, там где это оправдано. Я предлагаю привести пример, где ты не можешь решить, что использовать, и вместе разберемся.
Добавлено @ 11:22
Цитата(Domestic @ 22.6.2005, 08:59)
И проперти явно не были придуманы с мыслью о подобной ситуации.

MS пишет, что свойства дают возможность реализовать вычисляемые поля. Только не говори, что методы тоэе могут это сделать smile Могут. Но предлагается использовать свойства, если по смыслу получается, что возвращается вычисленное значение поля.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Страницы: (6) Все « Первая ... 2 3 [4] 5 6 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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