Encapsulation Considered Harmful
От: Курилка Россия http://kirya.narod.ru/
Дата: 23.11.10 20:38
Оценка: 26 (2)
Хотелось поделиться сабжевой статьёй Люка Палмера, в которой он противопоставляет инкапсуляции абстракцию (в пользу последней).
Re: Encapsulation Considered Harmful
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.11.10 11:11
Оценка: +1
Здравствуйте, Курилка, Вы писали:

К>Хотелось поделиться сабжевой статьёй Люка Палмера, в которой он противопоставляет инкапсуляции абстракцию (в пользу последней).


Не понял зачем они их противопоставляет. Инкапсуляция — средство создания абстракции, как и полиморфизм. Фактически все что он показал что инкапсуляция без полиморфизма не создает абстракции. Еще он говорит что классическое ООП (как в Simula) обладает довольно слабым полиморфизмом, поэтому не всегда пригодно для создания хороших абстракций.
Re: Encapsulation Considered Harmful
От: jazzer Россия Skype: enerjazzer
Дата: 24.11.10 13:26
Оценка: 3 (1)
Здравствуйте, Курилка, Вы писали:

К>Хотелось поделиться сабжевой статьёй Люка Палмера, в которой он противопоставляет инкапсуляции абстракцию (в пользу последней).


Имхо, товарищ путает теплое с мягким.
Вот простейший класс массива на С++:
template <class T>
class Array
{
private: //!!!
  T* buf_;
  std::size_t size_;
public:
  //....
};

buf_ и size_ должны быть когерентны.
Если не закрыть buf_ и size_, то пользовательский код может взять и изменить buf_ так, что он начнет указывать в совершенно левое место.
Или он может взять и увеличить size_ вдвое, хотя buf_ не указывает на буфер такого размера.
Иными словами, инкапсуляция помогает сохранять инварианты, которые иначе сохранить невозможно.
В данном случае инвариант такой: "buf_ всегда указывает на буфер, размер которого равен size_".

Как его "абстракция" поможет от защититься от нарушения инварианта, я не представляю, если честно.
Имхо, тут только инкапсуляция может помочь.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: Encapsulation Considered Harmful
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 24.11.10 14:31
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Как его "абстракция" поможет от защититься от нарушения инварианта, я не представляю, если честно.

J>Имхо, тут только инкапсуляция может помочь.

Имелось в виду немного другое. "Минимизируйте код, инкапсулирующий состояние, за счёт увеличения абстракции". В примерах я вижу переиспользование полиморфных функций как пример пользы абстракции. Эти же функции могли работать не с абстракцией, а с инкапсулированными данными.

В общем-то мысль достаточно очевидная. Инварианты для Array будут обеспечиваться малым кол-вом функций (скажем, insert/append/resize).
Re[3]: Encapsulation Considered Harmful
От: jazzer Россия Skype: enerjazzer
Дата: 24.11.10 15:01
Оценка: +1
Здравствуйте, lomeo, Вы писали:

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


J>>Как его "абстракция" поможет от защититься от нарушения инварианта, я не представляю, если честно.

J>>Имхо, тут только инкапсуляция может помочь.

L>Имелось в виду немного другое. "Минимизируйте код, инкапсулирующий состояние, за счёт увеличения абстракции". В примерах я вижу переиспользование полиморфных функций как пример пользы абстракции. Эти же функции могли работать не с абстракцией, а с инкапсулированными данными.


L>В общем-то мысль достаточно очевидная. Инварианты для Array будут обеспечиваться малым кол-вом функций (скажем, insert/append/resize).

Ну да, и инкапсулированными данными, с которыми эти функции работают. От инкапсуляции все равно не денешься никуда.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.