Модераторы: Се ля ви
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Protected методы и члены нарушают инкапсуляцию? 
V
    Опции темы
afiskon
Дата 4.4.2011, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 31.3.2011
Где: Россия, Москва

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



Я понимаю, что большинство из нас привыкли к C++ и Java, где protected воспринимается, как само собой разумеющееся. Однако, интересует вопрос - как следует воспринимать protected не в контексте какого-либо языка, а в контексте парадигмы ООП? Это - хакерская лазейка, ломающая инкапсуляцию и абстракции или вполне естественное средство? Встречались ли вам где-нибудь в литературе соображения на этот счет или, возможно, сталкивались с вопросом на практике? Может быть, кому-нибудь известны ООП языки, вообще не поддерживающие protected?

Это сообщение отредактировал(а) afiskon - 6.4.2011, 21:35
PM MAIL WWW   Вверх
deniva
Дата 4.4.2011, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Если речь идет про видимость атрибутов и методов, то ничего страшного не вижу.

Если же речь идет об отношении обобщения (наследовании), то protected действительно непонятная штука, так как находится между двумя "крайностями": наследованием интерфейса (public наследование) и наследованием реализации (private наследование)
PM MAIL   Вверх
kemiisto
Дата 4.4.2011, 15:26 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



Все молчат, а я таки вброшу. smile 

Цитата(afiskon @  4.4.2011,  13:59 Найти цитируемый пост)
Однако, интересует вопрос - как следует воспринимать protected не в контексте какого-либо языка, а в контексте парадигмы ООП?

ООП оно разное бывает. Но в общем то, да, это лазейка.

Цитата(afiskon @  4.4.2011,  13:59 Найти цитируемый пост)
Встречались ли вам где-нибудь в литературе соображения на этот счет или, возможно, сталкивались с вопросом на практике?

protected редко нужен, если проектировать более-менее грамотно. Сейчас вот уже многие пришли к выводу, что потребность в наследовании вообще возникает редко, а если и возникает, то 2-3 уровня в иерархии, и на первом уровне - абстрактный класс/интерфейс. При таком раскладе protected не нужен. Композиция рулит.

Видел у Страуструпа, кстати, в The Design and Evolution of C++ вот такое:
Цитата
One of my concerns about protected is exactly that it makes it too easy to use a common base the way one might sloppily have used global data....In retrospect, I think that protected is a case where "good arguments" and fashion overcame my better judgement and my rules of thumb for accepting new features.

Вообще, Страуструп дельные вещи говорит. На практике как-то не очень выходит. smile 

Цитата(afiskon @  4.4.2011,  13:59 Найти цитируемый пост)
Может быть, кому-нибудь известны ООП языки, вообще не поддерживающие protected?

 smile Жесть. Вообще, конечно, их вагон и маленькая тележка. Достаточно упомянуть, что первым труЪ ООП языком был Smalltalk. Там нет никаких аналогов protected.

Думаю, хватит для начала.


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 31.3.2011
Где: Россия, Москва

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



Спасибо, это как раз то, что я хотел узнать. Тем не менее, если кому есть что добавить - добавляйте, не стесняйтесь ;)
PM MAIL WWW   Вверх
mes
Дата 5.4.2011, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



private и public в контексте _классического_ ООП те же лазейки  smile 



--------------------
PM MAIL WWW   Вверх
baldina
Дата 5.4.2011, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

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



ну, строго говоря, модификаторы доступа не являются частью ООП (ООП полностью выражается в терминах интерфейсов). поэтому их скорее следует воспринимать как средство безопасного программирования (а protected еще и как средство оптимизации)
вполне возможно, скажем, на С++ написать систему классов, публикуя только интерфейс, т.е. ограничиваясь public, но не раскрывая реализацию. только это многословно и неудобно (и недостаточно типобезопасно для автора класса).

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


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Цитата(kemiisto @  4.4.2011,  14:26 Найти цитируемый пост)
При таком раскладе protected не нужен. Композиция рулит.

вместо шаблонных методов - стратегия?
PM MAIL   Вверх
mes
Дата 5.4.2011, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(skyboy @  5.4.2011,  20:34 Найти цитируемый пост)
вместо шаблонных методов - стратегия? 

при чем тут ООП и шаблонные методы ?!
при чем тут шаблонные методы и стратегия ?!
и как все это связано с protected ?!
 smile 


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


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Цитата(mes @  5.4.2011,  20:41 Найти цитируемый пост)
при чем тут ООП и шаблонные методы ?!

ну, это ж как раз ООПшный шаблон, не?
Цитата(mes @  5.4.2011,  20:41 Найти цитируемый пост)
при чем тут шаблонные методы и стратегия ?!

разве названное - не взаимозаменяемые способы отделить общую абстрактную логику от контекстно-зависимой?
Цитата(mes @  5.4.2011,  20:41 Найти цитируемый пост)
и как все это связано с protected ?!

никак. если присмотреться к цитате, к которой я писал свой комментарий, то можно заметить, что там противопоставляется наследование композиции.
и мое сообщение относится именно к этому.
ещё вопросы?
PM MAIL   Вверх
afiskon
Дата 6.4.2011, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 31.3.2011
Где: Россия, Москва

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



Цитата

ну, это ж как раз ООПшный шаблон, не?

Не нужно путать ООП и возможности языка C++. Шаблоны не имеют НИКАКОГО отношения к ООП. В Ц++ многое относится к функиональному программированию, метапрограммированию и, возможно, еще каким-то парадигмам, про которые я забыл.
PM MAIL WWW   Вверх
kemiisto
Дата 6.4.2011, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



Цитата(skyboy @  5.4.2011,  20:34 Найти цитируемый пост)
вместо шаблонных методов - стратегия? 

99% паттернов Гаммы со товарищи относятся к статически типизированным языкам. В таких языках для обеспечения позднего связывания необходимо использовать наследование (в т.ч. от абстрактных классов), виртуальные методы, ... А в языках с динамической типизацией позднее связывание обычно идёт "искаропки". Послал сообщение объекту, если он его обработал - хорошо, не обработал - побежали дальше по иерархии наследования. При этом, для того, чтобы объект обработал какое-то сообщение ему совершенно необязательно быть экземпляром какого подкласса какого-то абстрактного класса или реализовывать какой-то интерфейс. Если оно крякает, значит оно утка же! Ты же, вроде, ПоХаПешнег? smile 

Цитата(skyboy @  6.4.2011,  07:28 Найти цитируемый пост)
ну, это ж как раз ООПшный шаблон, не?

Не, см. выше.

afiskon, не, не. Это ты перепутал С++ templates и "OOP" design patterns. smile  По-русски и то, и другое называют часто шаблонами. Последние также величают паттернами. Тут речь пошла о этих самых паттернах.

Добавлено через 11 минут и 24 секунды
Design Patterns in Python от Alex Martelli. Ссылка прямая! Так, хотя бы посмотреть о чём речь. Smalltalk всё равно круче! smile 


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 31.3.2011
Где: Россия, Москва

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



Ах, эти шаблоны. Я как-то пирвык, что их "паттернами" называют.
PM MAIL WWW   Вверх
skyboy
Дата 6.4.2011, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Цитата(kemiisto @  6.4.2011,  12:08 Найти цитируемый пост)
 Ты же, вроде, ПоХаПешнег?

ну, я про статически типизируемые, для которых куча шаблонов писалась и спросил. действительно, возможность создавать экземпляр по имени класса и вызывать метод по имени большую часть шаблонов делает ненужными.
я именно про противопоставление "наследование - композиция".
впрочем, основную мысль я понял - это к ОО ЯП никакого отношения не имеет. "там" - есть только объекты-модули и сигналы-сообщения.

Добавлено через 15 секунд
сорри за внесенную в обсуждение смуту smile
PM MAIL   Вверх
kemiisto
Дата 6.4.2011, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



Цитата(skyboy @  6.4.2011,  13:29 Найти цитируемый пост)
ну, я про статически типизируемые, для которых куча шаблонов писалась и спросил. действительно, возможность создавать экземпляр по имени класса и вызывать метод по имени большую часть шаблонов делает ненужными.

Немного не так. Не делает ненужными, а существенно упрощает реализацию. У Банды Четырёх в самом начале книги читаем (болд мой): 
Цитата
The choice of  programming  language  is   important  because  it   influences  one's  point  of  view.  Our  patterns assume Smalltalk/C++-level language features, and that choice determines what can and cannot be implemented easily.   If  we assumed procedural   languages,  we might  have   included design patterns  called  "Inheritance," "Encapsulation,"   and   "Polymorphism."  Similarly,   some   of  our   patterns   are   supported  directly  by  the   less common object-oriented languages. CLOS has multi-methods, for example, which lessen the need for a pattern such as Visitor (page 331). In fact, there are enough differences between Smalltalk and C++ to mean that some patterns can be expressed more easily in one language than the other. (See Iterator (201) for an example.)


Цитата(skyboy @  6.4.2011,  13:29 Найти цитируемый пост)
я именно про противопоставление "наследование - композиция".

Тут, скорее, не противопоставление, а обдуманное использование наследования. Причём, речь ведь идёт о наследовании реализации. В чистом виде оно встречается крайне редко, а при использовании где попало чревато.

Цитата(skyboy @  6.4.2011,  13:29 Найти цитируемый пост)
"там" - есть только объекты-модули и сигналы-сообщения.

В "труЪ-ООП", типа, да. Смолтокеры бы такое одобрили. smile Ну и где их Смолток? smile 

Но я бы не сказал, что у Smalltalk есть какая-то монополия на определение ООП. Историческая, разве что. Да и то отчасти. Simula была раньше. И там было ООП со статической типизацией, виртуальными методами и прочим. Но там не было "тотального ООП". Объекты использовались ограниченно, для симуляций. А вот уже "тотальное ООП" ("всё есть объект") появилось в Smalltalk.

Страуструп С++ "рисовал" с Симулы. Я тебя слепели из того, что было. smile 

Тут уж как вы яхту назовёте...


--------------------
PM MAIL WWW GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Системный анализ, проектирование и UML"
Се ля ви

Форум "Системный анализ, проектирование и UML" предназначен для обсуждения вопросов, так или иначе связанных с этапами жизненного цикла автоматизированных (программных, информационных, автоматических) систем:

• предпроектные обследования объектов автоматизации;

• разработка концепции создания систем;

• моделирование бизнес-процессов (в т.ч. на UML);

• проектирование архитектуры систем;

• управление проектами;

• управление качеством;

• CASE-средства;

• реинжиниринг.


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

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


 




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


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

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