Свойства в С++
От: LaptevVV Россия  
Дата: 13.07.04 07:25
Оценка:
Прочитал я тут статью Дениса Майдыковского
Автор(ы): Денис Майдыковский

В этой статье автор рассматривает различные способы реализации свойств в
стиле Visual Basic на C++. Некоторые способы специфичны для Visual C++,
тогда как другие годятся для применения в любой программе, написанной на
языке C++.
. Статья хорошая. Только один вопрос меня интересует: а нафига свойства нужны? В чем их прелесть? В чем отличие от простых полей? Я на дельфях не писал.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Свойства в С++
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 13.07.04 07:28
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Прочитал я тут статью Дениса Майдыковского
Автор(ы): Денис Майдыковский

В этой статье автор рассматривает различные способы реализации свойств в
стиле Visual Basic на C++. Некоторые способы специфичны для Visual C++,
тогда как другие годятся для применения в любой программе, написанной на
языке C++.
. Статья хорошая. Только один вопрос меня интересует: а нафига свойства нужны? В чем их прелесть? В чем отличие от простых полей? Я на дельфях не писал.


В том, что при чтении/записи значения можно выполнить произвольные действия (помимо собственно обращения к полю). Например, класс "окно" может иметь свойство "ширина", при назначении значения которого вызывается ::MoveWindow(). ИМХО — красота подобного решения это дело вкуса.
- Искренне ваш, Поросенок Пафнутий
Re: Свойства в С++
От: Glоbus Украина  
Дата: 13.07.04 07:32
Оценка: +1
Здравствуйте, LaptevVV, Вы писали:

LVV>В чем отличие от простых полей? Я на дельфях не писал.


Может в том, что можно при чтении/записи выполнять валидацию данных, какие-нить дополнительные действия по изменению состояния объекта ну и т.п. И в конце концов сами данные остаются скрытыми и могут быть изменены тока через паблик интерфейс. Хотя чем не угодили гетеры/сетеры — не понятно.
Удачи тебе, браток!
Re: Свойства в С++
От: maq Россия http://www.maqdev.com
Дата: 13.07.04 07:43
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Прочитал я тут статью Дениса Майдыковского
Автор(ы): Денис Майдыковский

В этой статье автор рассматривает различные способы реализации свойств в
стиле Visual Basic на C++. Некоторые способы специфичны для Visual C++,
тогда как другие годятся для применения в любой программе, написанной на
языке C++.
. Статья хорошая. Только один вопрос меня интересует: а нафига свойства нужны? В чем их прелесть? В чем отличие от простых полей? Я на дельфях не писал.


Да в общем ни в чем. Это синтаксический сахар
... << Rsdn@Home 1.1.4 beta 1 >>
Re[2]: Свойства в С++
От: LaptevVV Россия  
Дата: 13.07.04 07:50
Оценка:
Здравствуйте, maq, Вы писали:

maq>Здравствуйте, LaptevVV, Вы писали:


LVV>>Прочитал я тут статью Дениса Майдыковского
Автор(ы): Денис Майдыковский

В этой статье автор рассматривает различные способы реализации свойств в
стиле Visual Basic на C++. Некоторые способы специфичны для Visual C++,
тогда как другие годятся для применения в любой программе, написанной на
языке C++.
. Статья хорошая. Только один вопрос меня интересует: а нафига свойства нужны? В чем их прелесть? В чем отличие от простых полей? Я на дельфях не писал.


maq>Да в общем ни в чем. Это синтаксический сахар

Вот и мне так показалось. Тем более, что средствами С++, как у Дениса написано, можно это все отлично реализовать. Нефиг в транслятор засовывать.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Свойства в С++
От: AndrewJD США  
Дата: 13.07.04 07:59
Оценка: 1 (1)
Здравствуйте, LaptevVV, Вы писали:


LVV>>>Прочитал я тут статью Дениса Майдыковского
Автор(ы): Денис Майдыковский

В этой статье автор рассматривает различные способы реализации свойств в
стиле Visual Basic на C++. Некоторые способы специфичны для Visual C++,
тогда как другие годятся для применения в любой программе, написанной на
языке C++.
. Статья хорошая. Только один вопрос меня интересует: а нафига свойства нужны? В чем их прелесть? В чем отличие от простых полей? Я на дельфях не писал.


maq>>Да в общем ни в чем. Это синтаксический сахар

LVV>Вот и мне так показалось. Тем более, что средствами С++, как у Дениса написано, можно это все отлично реализовать. Нефиг в транслятор засовывать.

В том виде, в каком свойства можно реализовать исключительно на с++, они нафиг никому не нужны. Если бы они были как в шарпе, в дельфях или хотя бы в VC — было бы круто.
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[2]: Свойства в С++
От: MaximE Великобритания  
Дата: 13.07.04 08:13
Оценка: 17 (5) +6
SchweinDeBurg wrote:

> LVV>Прочитал я тут статью Дениса Майдыковского
Автор(ы): Денис Майдыковский

В этой статье автор рассматривает различные способы реализации свойств в
стиле Visual Basic на C++. Некоторые способы специфичны для Visual C++,
тогда как другие годятся для применения в любой программе, написанной на
языке C++.
. Статья хорошая. Только один вопрос меня интересует: а нафига свойства нужны? В чем их прелесть? В чем отличие от простых полей? Я на дельфях не писал.

>
> В том, что при чтении/записи значения можно выполнить произвольные действия (помимо собственно обращения к полю). Например, класс "окно" может иметь свойство "ширина", при назначении значения которого вызывается ::MoveWindow(). ИМХО — красота подобного решения это дело вкуса.

Вот это как раз не прелесть, а ужас.

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

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9 beta
Re[3]: Свойства в С++
От: AndrewJD США  
Дата: 13.07.04 08:55
Оценка:
Здравствуйте, MaximE, Вы писали:

ME>Вот это как раз не прелесть, а ужас.


ME>Концептуально, у объекта есть состояние и поведение (еще identity, но здесь это нас не интересует). Состоянием рекоммендуется манипулировать только через методы объекта (инкапсуляция). Когда мы начинаем манипулировать состоянием объекта напрямую (нарушение инкапсуляции) — это уже создает бардак в коде, так как нет гарантий, что инвариант класса не нарушен.


Свойства нарушают инкапсуляцию? Каким образом


ME>Но когда изменение состояния вызывает еще какое-то поведение — это полный кошмар, т.к. из такого кода неясно, где просто изменяется переменная объекта, а где изменение состояния влечет за собой цепочку вызовов — поведение.


Перегруженные операторы присваивания в C++ делают тоже самое и никого это не пугает
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[4]: Свойства в С++
От: MaximE Великобритания  
Дата: 13.07.04 09:05
Оценка:
AndrewJD wrote:

> Здравствуйте, MaximE, Вы писали:

>
> ME>Вот это как раз не прелесть, а ужас.
>
> ME>Концептуально, у объекта есть состояние и поведение (еще identity, но здесь это нас не интересует). Состоянием рекоммендуется манипулировать только через методы объекта (инкапсуляция). Когда мы начинаем манипулировать состоянием объекта напрямую (нарушение инкапсуляции) — это уже создает бардак в коде, так как нет гарантий, что инвариант класса не нарушен.
>
> Свойства нарушают инкапсуляцию? Каким образом

Why getter and setter methods are evil

(хотя статья про Java, все верно)

> ME>Но когда изменение состояния вызывает еще какое-то поведение — это полный кошмар, т.к. из такого кода неясно, где просто изменяется переменная объекта, а где изменение состояния влечет за собой цепочку вызовов — поведение.

>
> Перегруженные операторы присваивания в C++ делают тоже самое и никого это не пугает

Не понял, что "то же самое" делают операторы присваивания?

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9 beta
Re[5]: Свойства в С++
От: AndrewJD США  
Дата: 13.07.04 09:17
Оценка: +1
Здравствуйте, MaximE, Вы писали:


ME>Не понял, что "то же самое" делают операторы присваивания?



когда изменение состояния вызывает еще какое-то поведение — это полный кошмар, т.к. из такого кода неясно, где просто изменяется переменная объекта, а где изменение состояния влечет за собой цепочку вызовов — поведение.


Т.е. операторы с таким же успехом могут повлечь за собой цепочку вызовов. Это проблема дизайна, а не свойств
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[2]: Свойства в С++
От: DemAS http://demas.me
Дата: 13.07.04 09:20
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:

SDB>В том, что при чтении/записи значения можно выполнить произвольные действия (помимо собственно обращения к полю). Например, класс "окно" может иметь свойство "ширина", при назначении значения которого вызывается ::MoveWindow(). ИМХО — красота подобного решения это дело вкуса.


Imho, изящнее сделать метод-модификатор: set....(..) и в нем устанавливать поле и выполнять прозвольные действия
... << Rsdn@Home 1.1.4 beta 1 >>
Re: Свойства в С++
От: MaximE Великобритания  
Дата: 13.07.04 09:27
Оценка: 26 (2)
LaptevVV wrote:

> Прочитал я тут статью Дениса Майдыковского
Автор(ы): Денис Майдыковский

В этой статье автор рассматривает различные способы реализации свойств в
стиле Visual Basic на C++. Некоторые способы специфичны для Visual C++,
тогда как другие годятся для применения в любой программе, написанной на
языке C++.
. Статья хорошая. Только один вопрос меня интересует: а нафига свойства нужны? В чем их прелесть? В чем отличие от простых полей? Я на дельфях не писал.


Вот здесь разжевано, чем плохи свойства: C++ Properties -- a Library Solution

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9 beta
Re[4]: Свойства в С++
От: Denwer Россия  
Дата: 13.07.04 09:40
Оценка:
Здравствуйте, AndrewJD, Вы писали:

AJD>Здравствуйте, LaptevVV, Вы писали:



LVV>>>>Прочитал я тут статью Дениса Майдыковского
Автор(ы): Денис Майдыковский

В этой статье автор рассматривает различные способы реализации свойств в
стиле Visual Basic на C++. Некоторые способы специфичны для Visual C++,
тогда как другие годятся для применения в любой программе, написанной на
языке C++.
. Статья хорошая. Только один вопрос меня интересует: а нафига свойства нужны? В чем их прелесть? В чем отличие от простых полей? Я на дельфях не писал.


maq>>>Да в общем ни в чем. Это синтаксический сахар

LVV>>Вот и мне так показалось. Тем более, что средствами С++, как у Дениса написано, можно это все отлично реализовать. Нефиг в транслятор засовывать.

AJD>В том виде, в каком свойства можно реализовать исключительно на с++, они нафиг никому не нужны. Если бы они были как в шарпе, в дельфях или хотя бы в VC — было бы круто.


Был бы крутой бардак и не более. Приходилось как то с прогой возиться где проперти на каждом шагу, если бы не ВизуалАссист, который показывает ху есть ху, то повеситься можно просто.
Re[5]: Свойства в С++
От: AndrewJD США  
Дата: 13.07.04 09:50
Оценка:
Здравствуйте, MaximE, Вы писали:


ME>Why getter and setter methods are evil


ME>(хотя статья про Java, все верно)



Из той же статьи

Every choice has a good and bad side, and you make your choice in the context of overall criteria defined by necessity. Good and bad are not absolutes, however. A good decision in one context might be bad in another.

"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[5]: Свойства в С++
От: AndrewJD США  
Дата: 13.07.04 09:52
Оценка:
Здравствуйте, Denwer, Вы писали:

D>Был бы крутой бардак и не более. Приходилось как то с прогой возиться где проперти на каждом шагу, если бы не ВизуалАссист, который показывает ху есть ху, то повеситься можно просто.


И причем тут свойства? Можно все было с таким же успехом все слить в одну функцию с кучей goto. А по пооводу ху есть ху то перегрузка операторов ничем не лучше
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[6]: Свойства в С++
От: Кодт Россия  
Дата: 13.07.04 10:30
Оценка: 9 (3) +1
Здравствуйте, AndrewJD, Вы писали:

AJD>И причем тут свойства? Можно все было с таким же успехом все слить в одну функцию с кучей goto. А по пооводу ху есть ху то перегрузка операторов ничем не лучше


Просто к перегрузке привыкли с самого начала, а к свойствам — нет. Тем более, что они поддерживаются только в диалекте VC (может быть, ещё в билдере? — не знаю).
И, как и другие MS-овские штучки, были прикручены туда не из любви к искусству, а под конкретную задачу. А именно, для автоматизации программирования COM-овских свойств.

Поскольку у COM-интерфейса нет публичных переменных, а есть только свойства — то любое обращение к состоянию (чтение или запись) вызывает поведение. Признав этот факт, можно в дальнейшем более не комплексовать на этот счёт.

Насколько поведение соответствует ожиданиям — это вопрос. Но вопрос не свойств как конструкции языка, а данного конкретного компонента. Если функция YourClass::getSomething()const модифицирует объект, скрытый за фасадом YourClass — идите к автору...
Перекуём баги на фичи!
Re: Свойства в С++
От: Аноним  
Дата: 13.07.04 13:30
Оценка: 1 (1)
IMHO, основная прелесть свойств в том, что они позволяют красиво заткунь места, в которых кто-то поленился сделать setter/getter
Можно, конечно, громко кричать фии, но, IMHO, на практике вещь довольно полезная.
Они позволяют внести исправления в одном месте, а не перелопачивать весь код, заменяя прасваивания на вызов функции.
Re[5]: Свойства в С++
От: AndrewJD США  
Дата: 13.07.04 16:05
Оценка:
Здравствуйте, MaximE, Вы писали:


>> Свойства нарушают инкапсуляцию? Каким образом


ME>Why getter and setter methods are evil


ME>(хотя статья про Java, все верно)


Весьма неодназначная статья. Особенно мне понравилось идея автора о внесении UI в бизнес логику.
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re: Свойства в С++
От: _nn_  
Дата: 13.07.04 16:35
Оценка: 1 (1)
Здравствуйте, LaptevVV, Вы писали:

LVV>Прочитал я тут статью Дениса Майдыковского
Автор(ы): Денис Майдыковский

В этой статье автор рассматривает различные способы реализации свойств в
стиле Visual Basic на C++. Некоторые способы специфичны для Visual C++,
тогда как другие годятся для применения в любой программе, написанной на
языке C++.
. Статья хорошая. Только один вопрос меня интересует: а нафига свойства нужны? В чем их прелесть? В чем отличие от простых полей? Я на дельфях не писал.


Сравнение :

public поля:
class A
{
public:
 int x; // если x 0 то возвратить нужно 1
};

// использование
A a;
a.x=10;
int x=a.x;

// преимущества
// нет вызовов промежуточных функций - можно расмотреть как и недостаток

// проблемы
// невозможно отследить момент изменения поля
a.x=0; // не будет написана ошибка
// невозможно отследить момент получения поля
int x=a.x; // x==0


свойства :
class A
{
public:
// синтакстис не важен
 property(get_x,set_x) int x; // если x 0 то возвратить нужно 1
private:
 // реализация скрыта
 void set_x(int newx)
 {
  if(newx)
   x=newx;
 }
 
 int get_x(void)
 {
  return x?x:1;
 }
};

// использование
A a;
a.x=10;
int x=a.x;

// преимущества
// конроль над изменением переменной
a.x=0; // a.x не будет изменен
int x=a.x; // если x был 0 то возвратит 1

// действие задается неявно


функции :
class A
{
private:
 // закрытое полец
 int x; // если x 0 то возвратить нужно 1
public:
 void set_x(int newx)
 {
  if(newx)
   x=newx;
 }
 
 int get_x(void)
 {
  return x?x:1;
 }
};

// использование
A a;
a.set_x(10);
int x=a.get_x();

// преимущества
// конроль над изменением переменной
a.set_x(0); // a.x не будет изменен
int x=a.get_x(); // если x был 0 то возвратит 1

// действие задается явно


Если посмотреть различие между доступом через функцию и доступом через свойство то разница в том что в случае свойства не видны реальные действия, а с доступом через поле действия задаются явно.

В конечном итоге это дело вкуса.

P.S.
Прошу не сильно пинать
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Свойства в С++
От: Шахтер Интернет  
Дата: 14.07.04 02:27
Оценка: 1 (1) +2
Здравствуйте, LaptevVV, Вы писали:

LVV>Здравствуйте, maq, Вы писали:


maq>>Здравствуйте, LaptevVV, Вы писали:


LVV>>>Прочитал я тут статью Дениса Майдыковского
Автор(ы): Денис Майдыковский

В этой статье автор рассматривает различные способы реализации свойств в
стиле Visual Basic на C++. Некоторые способы специфичны для Visual C++,
тогда как другие годятся для применения в любой программе, написанной на
языке C++.
. Статья хорошая. Только один вопрос меня интересует: а нафига свойства нужны? В чем их прелесть? В чем отличие от простых полей? Я на дельфях не писал.


maq>>Да в общем ни в чем. Это синтаксический сахар

LVV>Вот и мне так показалось. Тем более, что средствами С++, как у Дениса написано, можно это все отлично реализовать.

Можно, но не отлично. Встроенная в язык реализация и синтаксически выразительнее, и не потребует ненужных накладных расходов.

LVV>Нефиг в транслятор засовывать.


Не могу согласиться. Очень не малое количество людей это бы оценило. Мне кажется, что лучше ориентироваться на потребности программистов, а не на ревнителей чистоты языка и прочих "экспертов".
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.