![]() |
Модераторы: 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 Всего: 92 |
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. |