| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Системный анализ, проектирование и UML > Protected методы и члены нарушают инкапсуляцию? |
| Автор: afiskon 4.4.2011, 14:59 |
| Я понимаю, что большинство из нас привыкли к C++ и Java, где protected воспринимается, как само собой разумеющееся. Однако, интересует вопрос - как следует воспринимать protected не в контексте какого-либо языка, а в контексте парадигмы ООП? Это - хакерская лазейка, ломающая инкапсуляцию и абстракции или вполне естественное средство? Встречались ли вам где-нибудь в литературе соображения на этот счет или, возможно, сталкивались с вопросом на практике? Может быть, кому-нибудь известны ООП языки, вообще не поддерживающие protected? |
| Автор: deniva 4.4.2011, 15:25 |
| Если речь идет про видимость атрибутов и методов, то ничего страшного не вижу. Если же речь идет об отношении обобщения (наследовании), то protected действительно непонятная штука, так как находится между двумя "крайностями": наследованием интерфейса (public наследование) и наследованием реализации (private наследование) |
| Автор: afiskon 4.4.2011, 15:32 |
| Спасибо, это как раз то, что я хотел узнать. Тем не менее, если кому есть что добавить - добавляйте, не стесняйтесь ;) |
| Автор: mes 5.4.2011, 16:10 |
| private и public в контексте _классического_ ООП те же лазейки |
| Автор: baldina 5.4.2011, 18:03 |
| ну, строго говоря, модификаторы доступа не являются частью ООП (ООП полностью выражается в терминах интерфейсов). поэтому их скорее следует воспринимать как средство безопасного программирования (а protected еще и как средство оптимизации) вполне возможно, скажем, на С++ написать систему классов, публикуя только интерфейс, т.е. ограничиваясь public, но не раскрывая реализацию. только это многословно и неудобно (и недостаточно типобезопасно для автора класса). |
| Автор: skyboy 5.4.2011, 21:34 |
вместо шаблонных методов - стратегия? |
| Автор: mes 5.4.2011, 21:41 |
при чем тут ООП и шаблонные методы ?! при чем тут шаблонные методы и стратегия ?! и как все это связано с protected ?! |
| Автор: skyboy 6.4.2011, 08:28 |
ну, это ж как раз ООПшный шаблон, не? разве названное - не взаимозаменяемые способы отделить общую абстрактную логику от контекстно-зависимой? никак. если присмотреться к цитате, к которой я писал свой комментарий, то можно заметить, что там противопоставляется наследование композиции. и мое сообщение относится именно к этому. ещё вопросы? |
| Автор: afiskon 6.4.2011, 10:14 | ||
Не нужно путать ООП и возможности языка C++. Шаблоны не имеют НИКАКОГО отношения к ООП. В Ц++ многое относится к функиональному программированию, метапрограммированию и, возможно, еще каким-то парадигмам, про которые я забыл. |
| Автор: kemiisto 6.4.2011, 13:08 |
99% паттернов Гаммы со товарищи относятся к статически типизированным языкам. В таких языках для обеспечения позднего связывания необходимо использовать наследование (в т.ч. от абстрактных классов), виртуальные методы, ... А в языках с динамической типизацией позднее связывание обычно идёт "искаропки". Послал сообщение объекту, если он его обработал - хорошо, не обработал - побежали дальше по иерархии наследования. При этом, для того, чтобы объект обработал какое-то сообщение ему совершенно необязательно быть экземпляром какого подкласса какого-то абстрактного класса или реализовывать какой-то интерфейс. Если оно крякает, значит оно утка же! Ты же, вроде, ПоХаПешнег? Не, см. выше. afiskon, не, не. Это ты перепутал С++ templates и "OOP" design patterns. Добавлено через 11 минут и 24 секунды http://www.aleax.it/gdd_pydp.pdf от Alex Martelli. Ссылка прямая! Так, хотя бы посмотреть о чём речь. Smalltalk всё равно круче! |
| Автор: afiskon 6.4.2011, 13:28 |
| Ах, эти шаблоны. Я как-то пирвык, что их "паттернами" называют. |
| Автор: skyboy 6.4.2011, 14:29 |
ну, я про статически типизируемые, для которых куча шаблонов писалась и спросил. действительно, возможность создавать экземпляр по имени класса и вызывать метод по имени большую часть шаблонов делает ненужными. я именно про противопоставление "наследование - композиция". впрочем, основную мысль я понял - это к ОО ЯП никакого отношения не имеет. "там" - есть только объекты-модули и сигналы-сообщения. Добавлено через 15 секунд сорри за внесенную в обсуждение смуту |
| Автор: kemiisto 6.4.2011, 21:26 | ||||
Немного не так. Не делает ненужными, а существенно упрощает реализацию. У Банды Четырёх в самом начале книги читаем (болд мой):
Тут, скорее, не противопоставление, а обдуманное использование наследования. Причём, речь ведь идёт о наследовании реализации. В чистом виде оно встречается крайне редко, а при использовании где попало чревато. В "труЪ-ООП", типа, да. Смолтокеры бы такое одобрили. Но я бы не сказал, что у Smalltalk есть какая-то монополия на определение ООП. Историческая, разве что. Да и то отчасти. Simula была раньше. И там было ООП со статической типизацией, виртуальными методами и прочим. Но там не было "тотального ООП". Объекты использовались ограниченно, для симуляций. А вот уже "тотальное ООП" ("всё есть объект") появилось в Smalltalk. Страуструп С++ "рисовал" с Симулы. Я тебя слепели из того, что было. Тут уж как вы яхту назовёте... |