Содержание
- 2. Предупреждение В данной презентации почти все примеры кода написаны на языке С++. Примеры рабочие, и будут
- 3. Создание проекта
- 4. Ставим чекбокс «Пустой проект»
- 5. Добавляем cpp-файл
- 6. Транспортные средства https://git.io/vrqav
- 7. Работа примера Каждый класс, отнаследованный от Transport, получает метод Drive. (т.е., наследники обладают общим интерфейсом). Однако,
- 8. Раннее связывание На что при этом ориентируется компилятор? В данном случае, на тип указателя (ссылки), который
- 9. Моделирование Предположим, в программе необходимо смоделировать поведение различных видов транспорта на перекрёстке. Всё просто: как только
- 10. Объекты разных типов Однако, следует учесть, что транспортные средства будут разные, и ехать они должны по-разному...
- 11. Проблема Обычно для работы с группой объектов используются массивы либо другие коллекции, вроде списков или деревьев.
- 12. Решение Для решения этой проблемы придумали одну очень хитрую вещь: разрешается делать ссылку на объект с
- 13. Массив ссылок на объекты Теперь можно будет создать целый массив ссылок типа базового класса, и поочерёдно
- 14. Доверяй, но проверяй Итак, попробуем применить новые знания на практике: https://git.io/vrqyZ
- 15. Что-то пошло не так… Упс! При попытке моделирования ситуации на светофоре, программа сработала не совсем так,
- 16. Позднее связывание Для того, чтобы в С++ сменить механизм с раннего связывания на позднее, достаточно пометить
- 17. Правило виртуальности Получается, что наличие в коде ключевого слова virtual решило все проблемы по работе с
- 18. Определение Виртуальный м. - это метод класса, который может быть переопределён в классах-наследниках так, что конкретная
- 19. Полиморфизм Виртуальные методы - это один из важнейших приёмов реализации полиморфизма. Они позволяют создавать общий код,
- 20. Важнейшая концепция ООП Полиморфизм – важнейшая концепция в ООП. Большинство лучших практик и решений основаны на
- 21. Определение Полиморфизм – это принцип, согласно которому есть возможность использовать одну и ту же запись для
- 22. Полиморфная строка кода for (int i = 0; i traffic[i]->Drive();
- 23. Виды полиморфизма В узком смысле полиморфизм разделяют на статический и динамический. Однако, в большинстве ситуаций под
- 24. Статический полиморфизм Ad-hoc полиморфизм. Реализуется через механизм перегрузки методов – эта тема вам уже хорошо знакома.
- 25. Динамический полиморфизм Динамический полиморфизм – это механизм, при котором одна и та же инструкция может быть
- 26. Диспетчеризация Для реализации динамического полиморфизма используется subtype polymorphism, то есть ДП реализуется только через механизм наследования.
- 27. Ещё раз о раннем связывании Присваивание ссылок разных типов данных возможно только тогда, когда слева от
- 28. Механизм позднего связывания При работе через ссылку базового типа с объектом производного класса, часто требуется, чтобы
- 29. Как это всё работает? Для начала, рассмотрим пример: https://git.io/vr1BB Пример демонстрирует, как можно получить адреса объектов,
- 30. Добавим наследование Теперь примерно то же самое, но с наследованием: https://git.io/vr1RT
- 31. Время экспериментов Теперь попробуйте сделать метод Guard виртуальным (virtual можно писать как до типа возвращаемого значения,
- 32. Загадочные 4 байта По всей видимости, пометка хотя бы одного, или пусть даже нескольких методов в
- 33. Скрин отладчика
- 34. Таблица виртуальных методов Итак, наличие виртуального метода в классе привело к появлению поля под названием __vfptr.
- 35. Один класс – одна таблица Важно понять, что на каждый класс, в котором заявлены виртуальные методы,
- 36. Пример https://git.io/vr16A Почитать дома: https://habrahabr.ru/post/51229/ https://en.wikipedia.org/wiki/Virtual_method_table
- 37. UML-диаграмма
- 38. За всё приходится платить Виртуальный вызов требует выполнения такой операции, как индексированное разыменование. Поэтому вызов виртуальных
- 39. virtual в Java Так как на практике чаще всего ожидается вызов метода именно из класса объекта,
- 40. Позднее связывание в Java Тот же пример, переписанный уже на языке Java, демонстрирует факт, что позднее
- 41. Запрет переопределения Существует возможность запретить переопределение метода, пометив его как final. Сделано это для того, чтобы
- 42. overload vs override
- 43. Формальное преобразование Механизм наследования классов предусматривает возможности преобразования типов между суперклассом и подклассом. Преобразование типов в
- 44. Upcasting и downcasting Формальное преобразование, от подкласса к суперклассу (upcasting): Object o = new Dog(); Понижающее
- 45. Ограничения downcasting Downcasting может задаваться только явно, при помощи операции преобразования типов Объект, подвергаемый преобразованию, реально
- 46. instanceof В Java для проверки типа объекта есть операция instanceof. Она часто применяется при понижающем преобразовании
- 48. Скачать презентацию