
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.147] |
![]() |
|
Страницы: (117) « Первая ... 100 101 [102] 103 104 ... 116 117 ( Перейти к последнему сообщению ) |
Сообщ.
#1516
,
|
|
|
Цитата --Ins-- @ Можно, но по хорошему, полиморфному клиентскому коду лучше не знать, с экземпляром какого класса он имеет дело. Позиционирование можно заложить и в TStream. Можно. А еще лучше TStream вообще иметь абстрактным типом. ![]() |
Сообщ.
#1517
,
|
|
|
Цитата А еще лучше TStream вообще иметь абстрактным типом. ![]() |
Сообщ.
#1518
,
|
|
|
Речь сейчас не о проэктировании как мне кажется, хотя ты говоришь вполне здравые вещи, а об отсутствии вполне конкретной фичи в Delphi.
|
Сообщ.
#1519
,
|
|
|
Цитата а об отсутствии вполне конкретной фичи в Delphi. Ты не представляешь, как я рад, что эта фича в Delphi отсутствует ![]() ![]() Добавлено Да, кстати, речь не об отсутствии фичи в Delphi, а о присутствии в C++ ![]() |
Сообщ.
#1520
,
|
|
|
Цитата --Ins-- @ Ты не представляешь, как я рад, что эта фича в Delphi отсутствует Точно также я рад, что в Delphi отсутствует возможность получить доступ к закрытым членам класса и объект остается для клиента "черным ящиком". Невозможность нарушить инкапсуляцию и полиморфизм заставит меня подольше подумать над архитектурой системы и спроектировать ее более гибкой и масштабируемой. А не по принципу "абы работало" Что значит нарушить полиморфизм? Собака есть животное и если ты осознано приводишь ее к животному то вполне адекватно расчитываешь и на поведение как у животного.... А в Delphi выходит, что собака она конечно животное, но только не совсем. Поэтому как раз с точки зрения ООП я и не понимаю такой кастрированой модели. Добавлено Цитата --Ins-- @ Да, кстати, речь не об отсутствии фичи в Delphi, а о присутствии в C++ Спорно. Плюсы были созданы раньше Делфей, а следовательно в Delphi это именно отсутствует. ![]() |
Сообщ.
#1521
,
|
|
|
Цитата Спорно. Плюсы были созданы раньше Делфей, а следовательно в Delphi это именно отсутствует. Нее, просто я первый возмутился по поводу этой фичи, отсюда и разговор ![]() Цитата Что значит нарушить полиморфизм? Собака есть животное и если ты осознано приводишь ее к животному то вполне адекватно расчитываешь и на поведение как у животного.... А в Delphi выходит, что собака она конечно животное, но только не совсем. Поэтому как раз с точки зрения ООП я и не понимаю такой кастрироаной модели. Да, но если собака перекрывает животное поведение своим, скажем, лай вместо рева, то какого черта мы по прежнему можем заставить собаку реветь? ![]() |
![]() |
Сообщ.
#1522
,
|
|
Цитата juice @ Что значит нарушить полиморфизм? Цитата Допустим, что существует иерархия наследования для классов Person (Лицо) и Student (Студент). При использовании класса Person должна быть возможность использовать класс Student, поскольку он является подклассом Person. |
Сообщ.
#1523
,
|
|
|
Цитата --Ins-- @ Да, но если собака перекрывает животное поведение своим, скажем, лай вместо рева, то какого черта мы по прежнему можем заставить собаку реветь? Это философия и не более того, после того как Собаку привели к типу Животное это Животное. Было бы крайне странно если бы оно лаяло. И уж если язык допускает приведение типа вверх по иерархии, то вполне логично что оно ревет, а не лает. Добавлено Цитата wind @ Допустим, что существует иерархия наследования для классов Person (Лицо) и Student (Студент). При использовании класса Person должна быть возможность использовать класс Student, поскольку он является подклассом Person. Что т я Винд тебя не понимаю. Вопрос в том, что когда Student явно приводится к Person он становится персоной, а не студентом или ты будешь спорить? |
Сообщ.
#1524
,
|
|
|
Цитата после того как Собаку привели к типу Животное это Животное. Было бы крайне странно если бы оно лаяло. И уж если язык допускает приведение типа вверх по иерархии, то вполне логично что оно ревет, а не лает. А теперь, если ты перенесешь свои слова на мой пример с TStream, ты получишь кучу абстрактных вызовов, так как мы привели собаку (TFileStream) к животному (TStream), в результате чего вместо лая (запись в файл) услышали рев (вызов абстрактного метод?). |
![]() |
Сообщ.
#1525
,
|
|
Цитата juice @ Это философия и не более того, после того как Собаку привели к типу Животное это Животное. Если бы на основании данных вашей "Собаки" создали бы "Животное", то это было бы правдой. Но в результате приведения вы лишь ограничиваете интерфейс, но не меняете функционал. Добавлено Цитата juice @ Что т я Винд тебя не понимаю. Вопрос в том, что когда Student явно приводится к Person он становится персоной, а не студентом или ты будешь спорить? Не становится. Я лишь воспринимаю его, как персону. |
Сообщ.
#1526
,
|
|
|
Ладно, всем спокойной ночи и спасибо за дискуссию! В следующий раз - продолжим
![]() Добавлено Цитата Но в результате приведения вы лишь ограничиваете интерфейс, но не меняете функционал. Подписываюсь под каждым словом ![]() |
Сообщ.
#1527
,
|
|
|
Цитата --Ins-- @ А теперь, если ты перенесешь свои слова на мой пример с TStream, ты получишь кучу абстрактных вызовов, так как мы привели собаку (TFileStream) к животному (TStream), в результате чего вместо лая (запись в файл) услышали рев (вызов абстрактного метод?). А зачем приводить если это не нужно в описываемой тобой ситуации? Ведь ты то привел классический пример использования полиморфизма. |
Сообщ.
#1528
,
|
|
|
Наговорили-то!
Цитата antigen @ Вообще не вижу тут ничего странного в возможности языка создавать компактные выражения. А зря. Потому что данный критерий является абсолютно незначимым в лобой системе оптимизации деятельости программиста. Поэтому выглядит странно... |
Сообщ.
#1529
,
|
|
|
Цитата --Ins-- @ А мне до сих пор это не известно, а твой код ничего мне не говорит. И не только мне, он вообще ничего не показывает. Ты хоть сам понял, что написал? Если да, то лучше поясни на словах ![]() Вспоминаем основы разделения доступа в Delphi ![]() Public доступен всем кому угодно. Protected доступен в любом модуле, в котором ты наследуешься от данного класса. Private доступен в модуле, в котором присутствует объявление данного класса. В итоге, делая forward declaration нужного класса(да, с синтаксисом я немного ошибся), мы получаем доступ в private/protected нужного класса на весь модуль целиком. Разве нет? ![]() |
Сообщ.
#1530
,
|
|
|
Цитата wind @ Если бы на основании данных вашей "Собаки" создали бы "Животное", то это было бы правдой. Но в результате приведения вы лишь ограничиваете интерфейс, но не меняете функционал. Цитата wind @ Не становится. Я лишь воспринимаю его, как персону. Ты полностью прав. Забираю свои слова обратно. |