Информация об изменениях

Сообщение Re: Объясняем наследование от 29.10.2014 11:37

Изменено 29.10.2014 11:38 vpchelko

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

  Скрытый текст
T>Hi,

T>У меня тут есть немного студентов на нашей базовой кафедре, которых надо научить плюсам в свободное от работы время. Пока всё шло хорошо, но скоро надо будет объяснить им наследование. Пока план примерно такой:


T>

    T>
  • Рассказать про открытое наследование интерфейса. Показать как писать чисто абстрактные классы. Рассказать про чисто виртуальные функции.
    T>
  • Показать как удобно объекты с одним интерфейсом втыкаются в обобщенный код
    T>
  • Немного блабла про is-a и LSP
    T>
  • Упомянуть про наследование реализации, рассказать про просто виртуальные функции, статический и динамический тип, показать примеры когда это полезно и когда вредно. Особо остановиться на виртуальных деструкторах.
    T>
  • Упомянуть про закрытое и защищённое наследование. Объяснить что закрытое это такая композиция (и поэтому лучше делать явную композицию), а защищённое вообще никто не знает зачем нужно.
    T>
  • Рассказать про RTTI и dynamic_cast.
    T>
  • И дальше отправиться в космос -- множественное наследование, ромбовидные схемы, виртуальные базовые классы, etc.
    T>

T>Но весь этот план требует некоего сквозного примера для которого проводить объяснения. И вот тут у меня затык.


T>Все книги по C++ которые объясняют наследование вызывают желание убить себе лицо рукой. Вызывали когда я был на втором курсе, вызывают сейчас много лет спустя. Даже дедушка Строструп не уберёгся и унаследовал класс Manger от класса Employer, стыд и унижение. Варианты наследовать котят от собачек, груши от фруктов, кружочки от квадратиков и т.п. не рассматриваются, мне будет стыдно рассказывать, им будет стыдно слушать. Когда я совсем состарюсь пойду воспитателем в детский сад, там мне это очень пригодится, а пока ну нафиг.


T>Нахожусь в активном поиске нормального вменяемого примера наследования. Пока что придумал такую идею -- наследовать от "графа вообще" его частные случаи -- CFG, DAG, дерево. Близко к моей основной теме (оптимизирующие компиляторы), можно что-то рассказать дополнительно.


T>Но хотелось бы послушать мнение народа. Как бы вы объясняли наследование?


T>---

T>With best regards, Konstantin


В Java очень хорошо наследование показано стандартными коллекциями: List, Map, Set ... etc
Re: Объясняем наследование
Здравствуйте, Tilir, Вы писали:

  Скрытый текст
T>Hi,

T>У меня тут есть немного студентов на нашей базовой кафедре, которых надо научить плюсам в свободное от работы время. Пока всё шло хорошо, но скоро надо будет объяснить им наследование. Пока план примерно такой:


T>

    T>
  • Рассказать про открытое наследование интерфейса. Показать как писать чисто абстрактные классы. Рассказать про чисто виртуальные функции.
    T>
  • Показать как удобно объекты с одним интерфейсом втыкаются в обобщенный код
    T>
  • Немного блабла про is-a и LSP
    T>
  • Упомянуть про наследование реализации, рассказать про просто виртуальные функции, статический и динамический тип, показать примеры когда это полезно и когда вредно. Особо остановиться на виртуальных деструкторах.
    T>
  • Упомянуть про закрытое и защищённое наследование. Объяснить что закрытое это такая композиция (и поэтому лучше делать явную композицию), а защищённое вообще никто не знает зачем нужно.
    T>
  • Рассказать про RTTI и dynamic_cast.
    T>
  • И дальше отправиться в космос -- множественное наследование, ромбовидные схемы, виртуальные базовые классы, etc.
    T>

T>Но весь этот план требует некоего сквозного примера для которого проводить объяснения. И вот тут у меня затык.


T>Все книги по C++ которые объясняют наследование вызывают желание убить себе лицо рукой. Вызывали когда я был на втором курсе, вызывают сейчас много лет спустя. Даже дедушка Строструп не уберёгся и унаследовал класс Manger от класса Employer, стыд и унижение. Варианты наследовать котят от собачек, груши от фруктов, кружочки от квадратиков и т.п. не рассматриваются, мне будет стыдно рассказывать, им будет стыдно слушать. Когда я совсем состарюсь пойду воспитателем в детский сад, там мне это очень пригодится, а пока ну нафиг.


T>Нахожусь в активном поиске нормального вменяемого примера наследования. Пока что придумал такую идею -- наследовать от "графа вообще" его частные случаи -- CFG, DAG, дерево. Близко к моей основной теме (оптимизирующие компиляторы), можно что-то рассказать дополнительно.


T>Но хотелось бы послушать мнение народа. Как бы вы объясняли наследование?


T>---

T>With best regards, Konstantin


В Java очень хорошо наследование показано стандартными коллекциями: List, Map, Set ... etc

А вот например С++ виртуальное наследование, я до сих пор не видел прикладных задач — где это нужно.