На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Закрыто archimed7592 11-03-2008: Лимит страниц. Продолжаем Delphi vs C++

Страницы: (117) « Первая ... 100 101 [102] 103 104 ...  116 117  ( Перейти к последнему сообщению )  
> Delphi vs C++ , Часть 1
    Цитата --Ins-- @
    Можно, но по хорошему, полиморфному клиентскому коду лучше не знать, с экземпляром какого класса он имеет дело. Позиционирование можно заложить и в TStream.

    Можно. А еще лучше TStream вообще иметь абстрактным типом. :)
      Цитата
      А еще лучше TStream вообще иметь абстрактным типом.


      :yes: Вполне
        Речь сейчас не о проэктировании как мне кажется, хотя ты говоришь вполне здравые вещи, а об отсутствии вполне конкретной фичи в Delphi.
          Цитата
          а об отсутствии вполне конкретной фичи в Delphi.


          Ты не представляешь, как я рад, что эта фича в Delphi отсутствует :) Точно также я рад, что в Delphi отсутствует возможность получить доступ к закрытым членам класса и объект остается для клиента "черным ящиком". Невозможность нарушить инкапсуляцию и полиморфизм заставит меня подольше подумать над архитектурой системы и спроектировать ее более гибкой и масштабируемой. А не по принципу "абы работало" ;)

          Добавлено
          Да, кстати, речь не об отсутствии фичи в Delphi, а о присутствии в C++ :)
            Цитата --Ins-- @
            Ты не представляешь, как я рад, что эта фича в Delphi отсутствует Точно также я рад, что в Delphi отсутствует возможность получить доступ к закрытым членам класса и объект остается для клиента "черным ящиком". Невозможность нарушить инкапсуляцию и полиморфизм заставит меня подольше подумать над архитектурой системы и спроектировать ее более гибкой и масштабируемой. А не по принципу "абы работало"

            Что значит нарушить полиморфизм? Собака есть животное и если ты осознано приводишь ее к животному то вполне адекватно расчитываешь и на поведение как у животного.... А в Delphi выходит, что собака она конечно животное, но только не совсем. Поэтому как раз с точки зрения ООП я и не понимаю такой кастрированой модели.

            Добавлено
            Цитата --Ins-- @
            Да, кстати, речь не об отсутствии фичи в Delphi, а о присутствии в C++

            Спорно. Плюсы были созданы раньше Делфей, а следовательно в Delphi это именно отсутствует. :)
            Сообщение отредактировано: juice -
              Цитата
              Спорно. Плюсы были созданы раньше Делфей, а следовательно в Delphi это именно отсутствует.


              Нее, просто я первый возмутился по поводу этой фичи, отсюда и разговор :)

              Цитата
              Что значит нарушить полиморфизм? Собака есть животное и если ты осознано приводишь ее к животному то вполне адекватно расчитываешь и на поведение как у животного.... А в Delphi выходит, что собака она конечно животное, но только не совсем. Поэтому как раз с точки зрения ООП я и не понимаю такой кастрироаной модели.


              Да, но если собака перекрывает животное поведение своим, скажем, лай вместо рева, то какого черта мы по прежнему можем заставить собаку реветь? ;)
                Цитата juice @
                Что значит нарушить полиморфизм?

                Цитата
                Допустим, что существует иерархия наследования для классов Person (Лицо) и Student (Студент). При использовании класса Person должна быть возможность использовать класс Student, поскольку он является подклассом Person.
                  Цитата --Ins-- @
                  Да, но если собака перекрывает животное поведение своим, скажем, лай вместо рева, то какого черта мы по прежнему можем заставить собаку реветь?

                  Это философия и не более того, после того как Собаку привели к типу Животное это Животное. Было бы крайне странно если бы оно лаяло. И уж если язык допускает приведение типа вверх по иерархии, то вполне логично что оно ревет, а не лает.

                  Добавлено
                  Цитата wind @
                  Допустим, что существует иерархия наследования для классов Person (Лицо) и Student (Студент). При использовании класса Person должна быть возможность использовать класс Student, поскольку он является подклассом Person.

                  Что т я Винд тебя не понимаю. Вопрос в том, что когда Student явно приводится к Person он становится персоной, а не студентом или ты будешь спорить?
                    Цитата
                    после того как Собаку привели к типу Животное это Животное. Было бы крайне странно если бы оно лаяло. И уж если язык допускает приведение типа вверх по иерархии, то вполне логично что оно ревет, а не лает.


                    А теперь, если ты перенесешь свои слова на мой пример с TStream, ты получишь кучу абстрактных вызовов, так как мы привели собаку (TFileStream) к животному (TStream), в результате чего вместо лая (запись в файл) услышали рев (вызов абстрактного метод?).
                      Цитата juice @
                      Это философия и не более того, после того как Собаку привели к типу Животное это Животное.

                      Если бы на основании данных вашей "Собаки" создали бы "Животное", то это было бы правдой. Но в результате приведения вы лишь ограничиваете интерфейс, но не меняете функционал.

                      Добавлено
                      Цитата juice @
                      Что т я Винд тебя не понимаю. Вопрос в том, что когда Student явно приводится к Person он становится персоной, а не студентом или ты будешь спорить?

                      Не становится. Я лишь воспринимаю его, как персону.
                        Ладно, всем спокойной ночи и спасибо за дискуссию! В следующий раз - продолжим ;)

                        Добавлено
                        Цитата
                        Но в результате приведения вы лишь ограничиваете интерфейс, но не меняете функционал.


                        Подписываюсь под каждым словом :yes:
                          Цитата --Ins-- @
                          А теперь, если ты перенесешь свои слова на мой пример с TStream, ты получишь кучу абстрактных вызовов, так как мы привели собаку (TFileStream) к животному (TStream), в результате чего вместо лая (запись в файл) услышали рев (вызов абстрактного метод?).

                          А зачем приводить если это не нужно в описываемой тобой ситуации? Ведь ты то привел классический пример использования полиморфизма.
                            Наговорили-то!
                            Цитата antigen @
                            Вообще не вижу тут ничего странного в возможности языка создавать компактные выражения.

                            А зря. Потому что данный критерий является абсолютно незначимым в лобой системе оптимизации деятельости программиста. Поэтому выглядит странно...
                              Цитата --Ins-- @
                              А мне до сих пор это не известно, а твой код ничего мне не говорит. И не только мне, он вообще ничего не показывает. Ты хоть сам понял, что написал? Если да, то лучше поясни на словах :)

                              Вспоминаем основы разделения доступа в Delphi :).
                              Public доступен всем кому угодно.
                              Protected доступен в любом модуле, в котором ты наследуешься от данного класса.
                              Private доступен в модуле, в котором присутствует объявление данного класса.
                              В итоге, делая forward declaration нужного класса(да, с синтаксисом я немного ошибся), мы получаем доступ в private/protected нужного класса на весь модуль целиком. Разве нет? :)
                                Цитата wind @
                                Если бы на основании данных вашей "Собаки" создали бы "Животное", то это было бы правдой. Но в результате приведения вы лишь ограничиваете интерфейс, но не меняете функционал.

                                Цитата wind @
                                Не становится. Я лишь воспринимаю его, как персону.

                                Ты полностью прав. Забираю свои слова обратно.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (117) « Первая ... 100 101 [102] 103 104 ...  116 117
                                Закрыто archimed7592 11-03-2008: Лимит страниц. Продолжаем Delphi vs C++



                                Рейтинг@Mail.ru
                                [ Script execution time: 0,1182 ]   [ 15 queries used ]   [ Generated: 24.07.25, 22:52 GMT ]