Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> свойства property, в чём преимущество свойств? 
:(
    Опции темы
rocky7
Дата 11.8.2009, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Пытаюсь глубже понять объектную модель DELPHI. Для чего вводиться property? Для того чтобы только упростить запись вызова метода доступа к закрытым данным или есть ещё какие преимущества? 

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


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(rocky7 @  11.8.2009,  20:41 Найти цитируемый пост)
Для того чтобы только упростить запись вызова метода доступа к закрытым данным

+
есть возможность сделать с этими данными все что угодно от проверки на валидность до ...


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

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


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



  Концепция ООП не разрешает менять напрямую состояние объекта, а только действуя на него через методы, свойства фактически вызывают методы, при этом сохраняется привычная семантика как с полями данных. На самом деле свойству может и не соответствовать поле объекта. Меня свойство можно фактически не изменить состояние объекта или изменить его совсем не тривиальным образом. Когда читают свойство, аналогично, может не быть поля, в момент запроса данных может производиться вычисления или получение данных из внешнего устройства, например из файла. 
  Свойство скрывает данные от объекта получателя. Свойством можно ограничить доступ к полю данных, сделав его readonly. Или запретить чтение, а разрешить лишь запись, можно организовать потокобезопасное изменение данных. При этом код остается описательным и наглядным. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
rocky7
Дата 11.8.2009, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо за ответ! Решил сегодня начать читать Марко Кэнту. На мой взгляд у него всё чётко разложено для понимания внутренних механизмов Delphi.
PM MAIL   Вверх
kemiisto
Дата 11.8.2009, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Цитата(Alexeis @  11.8.2009,  23:07 Найти цитируемый пост)
При этом код остается описательным и наглядным.

Вот это чушь полная. Наоборот. Конструкции без использования свойств (явный вызов методов get()/set()) хоть и более громоздки, но не скрывают факт, что в месте их вызова управление переходит к подпрограмме, которая, возможно, обладает side effects. А вот при обращение к свойству это скрывается. К тому же, по тексту программы невозможно определить, к чему мы обращаемся: к свойству или напрямую к полю.*

Цитата(Romikgy @  11.8.2009,  22:54 Найти цитируемый пост)
есть возможность сделать с этими данными все что угодно от проверки на валидность до ...

А в методах это сделать нельзя что-ли?

Короче, очередная порция синтаксического сахара. Полезна она может оказаться лишь для визуальных систем (Delphi, VS). Но можно было обойтись и без них...

*
Цитата(Alexeis @  11.8.2009,  23:07 Найти цитируемый пост)
Концепция ООП не разрешает менять напрямую состояние объекта

Только в Delphi она не реализована. public поля есть.

Это сообщение отредактировал(а) kemiisto - 11.8.2009, 22:26


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Romikgy
Дата 11.8.2009, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(kemiisto @  11.8.2009,  21:25 Найти цитируемый пост)
А в методах это сделать нельзя что-ли?

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


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

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


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(kemiisto @  11.8.2009,  21:25 Найти цитируемый пост)
Вот это чушь полная. Наоборот. Конструкции без использования свойств (явный вызов методов get()/set()) хоть и более громоздки, но не скрывают факт, что в месте их вызова управление переходит к подпрограмме, которая, возможно, обладает side effects. А вот при обращение к свойству это скрывается. 

  Почему же скрывается, ты же видишь что это свойство, значит это не просто поле, а поле которое меняется функциями. При правильном проектировании ты не должен углубляться в структуру класса, ты видишь подходящее название, а остальное должен делать объект сам. Для тебя достаточно того что оно работает.
  Функция хороша, когда ты явно хочешь произвести действие, запустить процесс выполнения, начать операцию, например StartTransaction. Свойство работает когда ты хочешь корректно изменить состояние или узнать его при этом тебя мало волнуют какие будут произведены действия, например Width := 500.

Добавлено через 5 минут и 30 секунд
  Проблема в том что функция может и не произвести правильного перевода состояния, потому что она означает действие, а для перевода в новое состояние может потребоваться несколько действий, попросту говоря можно вызвать функции не в той последовательности или не те действия. Что же касается функций предназначенных сугубо для смены состояния, так это просто недоделанные свойства загромождающие интерфейс.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
kemiisto
Дата 12.8.2009, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Цитата(Alexeis @  12.8.2009,  01:45 Найти цитируемый пост)
  Почему же скрывается, ты же видишь что это свойство, значит это не просто поле, а поле которое меняется функциями. При правильном проектировании ты не должен углубляться в структуру класса, ты видишь подходящее название, а остальное должен делать объект сам. Для тебя достаточно того что оно работает.

Ты не правильно меня понял. Класс проектируешь не ты. Ты читаешь исходник, в котором заюзан некий класс. Для того, чтобы понять, к чему идёт обращение в:
Код

SomeObject.blablabla := whatever

нужно заглянуть в интерфейс класса. А если это свойство, то нужно увидеть исходный код неявно вызываемой функции, которая write. Если хочешь убедиться в отсутствии side effects.


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Alexeis
Дата 12.8.2009, 11:10 (ссылка) |  (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(kemiisto @  12.8.2009,  09:57 Найти цитируемый пост)
А если это свойство, то нужно увидеть исходный код неявно вызываемой функции, которая write. Если хочешь убедиться в отсутствии side effects. 

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

  Приведу аналогию. Анекдот. Приходит мужик в магазин и говорит мне нужна пила, ему показывают бензопилу, он покупает уходит довольный, через неделю возвращается и говорит, вот у вас тут написано что я могу за день 4 куба леса заготовить, а у меня больше куба не выходит. Продавец говорит ну давайте посмотрим, берет пилу, заводит. Клиент выпучив глаза смотрит на продавца  smile - "Ух ты она еще и жужжит!!!"
  Собственно если бензопилу не заводить, то соглашусь, что ей пилить не так удобно, как ручной пилой. smile 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
kemiisto
Дата 12.8.2009, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Цитата(Alexeis @  12.8.2009,  12:10 Найти цитируемый пост)
Это уже говорит о непродуманном проектировании. 

Даже если смотреть с этой точки зрения, то зачем добавлять в язык лишнюю возможность непродуманного проектирования? Зачем добавлять ещё одну степень свободы?

Вот известная цитата Кернигана
Цитата
Язык C — это инструмент, острый как бритва: с его помощью можно создать и элегантную программу, и кровавое месиво.

То, что он говорит про С, не меняет сути дела.

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

Образцов "продуманного" проектирования практически не встречал. 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Alexeis
Дата 12.8.2009, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(kemiisto @  12.8.2009,  13:38 Найти цитируемый пост)
Даже если смотреть с этой точки зрения, то зачем добавлять в язык лишнюю возможность непродуманного проектирования? Зачем добавлять ещё одну степень свободы?

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

Цитата(kemiisto @  12.8.2009,  13:38 Найти цитируемый пост)
Образцов "продуманного" проектирования практически не встречал. 

  Уже много лет обращаюсь к исходникам VCL и черпаю оттуда великолепные примеры грамотных реализаций. Скажем нужно что-то написать, вспоминаю аналоги, которые присутствуют в VCL, открываю код - вот вам и решение на каждый день.

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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Romikgy
Дата 12.8.2009, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(Alexeis @  12.8.2009,  14:31 Найти цитируемый пост)
Это делать лень, на это всегда нет времени, но без этого написанный код это почти бесполезный набор строк. Обычно этого достаточно чтобы чужой человек мог правильно использовать не обращаясь к исходникам реализации.

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


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

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


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



Alexeis, поддерживаю. я за использование возможностей языка (в частности касательно свойств-пропертей). зачем не использовать для удобства предоставляемые возможности? это все равно, например, что купить машину, поставить под окном любоваться, и всем говорить - какая у меня клевая машине, но пешком привычнее и понятнее, а нажатие на педаль газа обладает side effects, ибо хз что там конструктора напридумывали.

Это сообщение отредактировал(а) MetalFan - 12.8.2009, 20:42


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
kemiisto
Дата 12.8.2009, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Цитата(MetalFan @  12.8.2009,  21:39 Найти цитируемый пост)
Alexeis, поддерживаю.

А меня никто не поддерживает... smile 

Цитата(MetalFan @  12.8.2009,  21:39 Найти цитируемый пост)
это все равно, например, что купить машину,

Машины бывают разные...


--------------------
PM MAIL WWW GTalk Jabber   Вверх
MetalFan
Дата 12.8.2009, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



Цитата(kemiisto @  12.8.2009,  21:00 Найти цитируемый пост)
А меня никто не поддерживает... smile 
данубросьты) тебе вообще не положено счас тут сидеть, а положено smile 
Цитата(kemiisto @  12.8.2009,  21:00 Найти цитируемый пост)
Машины бывают разные...
ну да... на некоторых действительно лучше не ездить)






--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




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


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

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