![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| arilou |
|
||||||||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
Подожди, в данном случае не важно, как это реализовано в IL. Ты понимаешь любую операцию над классом как отсылку сообщения. ОК. Обращение к свойству - та же самая посылка сообщения. Но самое главное тут, что в свойстве объединяются методы и поля. Корпускулярно-волновую теорию света помнишь?
1. Свойство следует применять в тех случаях, когда последовательное обращение к нему без каких-либо других изменений в членах класса всегда будет возвращать один и тот же результат. GetHashCode() - это метод, потому что его реализация может быть построена таким образом, что возвращаемые знаяения будут разными в зависимости от неопределенных факторов.
2. Разве текущая директория - это не характеристика? Сколько не пляши, возвращаемое значение будет одинаковым, пока ее не изменишь
3. Да, без четкого понимания можно писать дебильный код, когла свойства используются не по назначению. Тоже самое и на C++ - можно не использовать указатели, там где это нужно, а испольщовать, например, индексы. Тоже получится дебильный код. Наверняка и на Java можно, не имея достаточных знаний, писать абы что. Выиграно то, что видно, какие у объекта характеристики, и какие операции он поддерживает. Твой пример о Resize и Size. Могу предположить следующее: 1) Класс писался не одним человеком. В итоге получили два способа 2) В MS любят уважить сразу бОльшее кол-во программеров. В итоге есть несколько путей сделать ту или иную штуку - посмотри только в WinAPI. Еще, твоя позиция о сообщениях почему-то напоминает мне о войне между процедурным программированием и ООП, когда приверженцы первого говорили "зачем мне классы, если я могу обойтись без них". ИМХО, не надо так фанатично отстаивать "чистое" ООП. Если бы все стояло на месте, писали бы программы до сих пор на перфокартах. А так, единожды поппробовав использовать свойства, ты бы потом не понял, как вообще можно без них обходиться. Кстати, в .NET 2.0 появилась возможность задавать getter'ы и setter'ы с разной степенью доступности (private, protected, internal). Это то, чего 100% не хватало в 1.1, и за что многие ругали MS, и говорили - "если свойства - это те же методы, то почему нельзя задать им разную доступность?. |
||||||||
|
|||||||||
| Domestic Cat |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 9 Всего: 172 |
Хм.. Это официальное определение?
Однако, это важная характеристика, не так ли? Где граница между свойством и методом? -------------------- |
||||
|
|||||
| mr.DUDA |
|
||||||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Да. Отличие свойства от поля - то, что у свойства есть поведение. Поэтому св-во это суть метод (один или два метода), представляющий обёртку над полем. У св-ва, как и у метода, есть возвращаемое значение (у get) и аргумент (у set).
Это пример предметной области, в которой широко используются свойства, полностью аналогичные св-вам C#. Добавлено @ 10:28
Свойство - это скорее "умное поле", чем "действие". По поводу того, как и когда применять свойства, каждый решает сам. Не думаю, что кто-то, будучи в здравом уме, решит написать "File.Exists = false" для удаления файла. Это то же самое что сказать "файл не существует ! трах-тибидох ! исчезни !" вместо "давай удалим-ка этот файл". -------------------- ![]() |
||||||
|
|||||||
| arilou |
|
||||||||||||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
Да. Я читал это в MSDN Technical Articles.
С одной стороны ты прав. Но с другой стороны, возможно, такое свойство нужно было сделать readonly, тогда бы и не возникало противоречия.
Не, ну не надо такого цинизма! Добавлено @ 10:40
Истина посередине. Фотон - это и частица, и волна. Свойство - это и поле, и метод. Добавлено @ 10:44
Это мне напонимает такое (за синтаксис я не ручаюсь, но меня поймут)
Если не знаешь, что произойдет в таком случае, будешь голову ломать, почему моя прога не работает. Тоже и со свойством. |
||||||||||||
|
|||||||||||||
| Domestic Cat |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 9 Всего: 172 |
Да, но следуя определению из
ничто не препятствует созданию такого свойства -------------------- |
||||
|
|||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
Котъ, у меня такое ощущение, что ты не хочешь ничего понять. |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 9 Всего: 172 |
У меня такое же, только наоборот. Но я сейчас почти сплю. -------------------- |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 6 Всего: 118 |
Это когда я пишу сам. А когда я пользуюсь какой-то библиотекой ? Понятно, что если соблюдать правила и писать высоко профессионально, то проперти будут работать и облегчать жизнь. Но IMHO не настолько они ее облегчают, насколько усложняют синтаксис и дают еще одну лазейку запутаться. И если уж писать высокопрофессионально, то красиво можно писать на любом языке. Т.е. IMHO - ввод пропертей не дает большого выигрыша для профессионалов, а для начинающих это лишний повод поиграть. Что сами понимаете ничего хорошего не дает. |
|||
|
||||
| mr.DUDA |
|
||||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Давайте определимся, говорим мы о применении свойств программистами разного уровня, или об использовании свойств как конструкции языка. Это же разные вещи.
Насчёт
Волков бояться - в лес не ходить. Нормальные библиотеки (какие использует более 1-го девелопера) пишуть нормальные программеры, отличающие проперти от метода.
Согласен со второй частью. Первая же - это имхо, т.к. никакого усложнения лично я не вижу. -------------------- ![]() |
||||
|
|||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
Народ, почитайте Буча. Я хотел сначала цитату привести, потом понял, что надо всю книгу сюда копировать
|
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 9 Всего: 172 |
Попытаюсь еще раз
1. Де юре и де факто свойства - это методы гет/сет, для которых изменен синтаксис. Все! Они и реализованы по сути как методы. 2. Если так, то в чем их преимущество? Вариант А: меньше набирать. Личное мое мнение в том, что основная причина, по которой их называют "удобными" и т п состоит в том, что при ручном наборе присвоить значение свойству быстрее на несколько символов. Создать свойство быстрее на 10-15 символов. 3. Но реально это чепуха - длай быстрого "наборщика" это секунда. При использовании средств RAD это вообще не играет никакогй роли. 4. Вариант Б: свойство свидетельствует о чем то. О чем? Что изменение свойства не приведет к каким-то кардинальным изменениям? Что свойство - это "свойство объекта х"? 5. ------------------------------------------- 6. Больше ничего за свойствами нет. 7. В связи с п 4. Возникают вопросы: 1. Каков четкий критерий использования свойств? 2. Методы позволяют сделать то же самое. setSpeed не менее выразителен, чем Speed = .... Если так, то зачем нужны свойства? 8. Получается, чт п.4 отпадает. Но против п.2 вот что: 9. Введена еще идна сущность в язык. 10. => Усложнена документация 11. => Усложнен язык 12. => Синтаксис использования свойства совпадает с синтаксисом доступа к паблик полю, что НЕ приветствуется в ООП (паблик поля). Например, новичок может сделать все поля какого-либо класса публичными ("для простоты"), а я буду думать что все ок и это свойства. 13. => Усложнен процесс дизайна, нужно выбирать между методом и свойством, тогда как никаких действующих на 100% правил я не нашел. Более того, редко в какой книге затронут этот вопрос. 14. => Плохой дизайн + различное понимание смысла свойств могут приводить к еще большей путанице. Пример с Exists очевиден, но что если речь идет о написании сотен классов? Хочешь не хочешь, а "странные" свойства будут созданы. Тогда как с методами такой проблемы не возникает. -------------------- |
|||
|
||||
| Дрон |
|
||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
10 - мне удобнее читать документацию, когда методы и свойства разделены. 12 - но это же не паблик поле Добавлено @ 18:21
С одной стороны ты прав. Но с другой точно так же можно сказать и про методы: в чём разница между использованием методов getSize() и Size(). По какому принципу к названию метода приписывается get? И вдруг какой-нибудь индус вообще не знает такой записи, и пишет не get, а pleaseGiveMeValueOf. Попробуй пойми, что он хотел сказать. Проперти же стандартизированы Это сообщение отредактировал(а) Дрон - 21.6.2005, 18:17 -------------------- Да. Именно так. |
||||
|
|||||
| arilou |
|
||||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
Лучше бы ты прочитал все те посты, которые были написаны, и над ними подумал, чем еще раз писать одно и то же. Тут было много написано, и ни на один аргумент ты ничего не ответил. Я считаю, что это пренебрежение к оппонентам.
Как говорят англикосы, I second that, что значит примерно "я подписываюсь под этим тоже" |
||||
|
|||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Domestic Cat, да на здоровье. Методы, так методы. Помнится, ты аналогичным образом критиковал делегаты, приводя контрпример в виде методов-листенеров. Такое впечатление, что кроме методов больше в ООП ничего не юзается (шаг влево, шаг вправо - расстрел).
P.S. а книгу мистера G. Booch всё же почитать бы стоило. -------------------- ![]() |
|||
|
||||
| Domestic Cat |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 9 Всего: 172 |
Согласен, метод можно назвать как угодно, но я ведь говорю о том, что преимущества в этом плане у свойств нет. свойство тоже можно назветь как угодно или сделать методом.
Из записи a.B = 33 это определить невозможно.
Ну я перечитал тему еще раз. Кроме Дрона, никто не попытался четко и ясно ответить на подняты мнои вопросы.
Если ты помнишь, вопрос про делегаты был поднят именно на этом форуме, и не мной. Да, я их критиковал, но могу дать ссылки на мои посты, где я утверждаю, что данное решение ничуть не хуже листенеров.
Товарищи, здесь не соревнование "кто кого перецитирует". Мы собираемся на форуме не только для того, чтобы ответить на вопросы "а почему я не могу запустить программу". Гораздо интереснее приходить сюда и общаться на несколько более глубокие темы. Если хотите - объясните ваши аргументы, а Гради Буча я и сам могу почитать. Не хотите - можем закрыть тему. -------------------- |
||||||||||
|
|||||||||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |