SchweinDeBurg wrote:
> LVV>Прочитал я тут статью Дениса МайдыковскогоАвтор(ы): Денис Майдыковский
В этой статье автор рассматривает различные способы реализации свойств в
стиле Visual Basic на C++. Некоторые способы специфичны для Visual C++,
тогда как другие годятся для применения в любой программе, написанной на
языке C++.
. Статья хорошая. Только один вопрос меня интересует: а нафига свойства нужны? В чем их прелесть? В чем отличие от простых полей? Я на дельфях не писал.
>
> В том, что при чтении/записи значения можно выполнить произвольные действия (помимо собственно обращения к полю). Например, класс "окно" может иметь свойство "ширина", при назначении значения которого вызывается ::MoveWindow(). ИМХО — красота подобного решения это дело вкуса.
Вот это как раз не прелесть, а ужас.
Концептуально, у объекта есть состояние и поведение (еще identity, но здесь это нас не интересует). Состоянием рекоммендуется манипулировать только через методы объекта (инкапсуляция). Когда мы начинаем манипулировать состоянием объекта напрямую (нарушение инкапсуляции) — это уже создает бардак в коде, так как нет гарантий, что инвариант класса не нарушен. Но когда изменение состояния вызывает еще какое-то поведение — это полный кошмар, т.к. из такого кода неясно, где просто изменяется переменная объекта, а где изменение состояния влечет за собой цепочку вызовов — поведение.
--
Maxim YegorushkinPosted via RSDN NNTP Server 1.9 beta