
- •Лекции по курсу "Технология программирования" (1-й семестр) Оглавление
- •Технология .Net Предыдущее состояние дел.
- •Главные компоненты платформы .Net (clr, cts и cls)
- •Общеязыковая среда выполнения (clr)
- •О бщая система типов и общеязыковые спецификации (cts и cls)
- •Библиотека базовых классов
- •Роль языка с#
- •Компоновочные блоки
- •Роль метаданных типов .Net
- •Роль манифеста компоновочного блока
- •Общая система типов.
- •Объектно-ориентированное программирование
- •Главные элементы объектно-ориентированного подхода
- •Дополнительные элементы ооп
- •Принципы объектно-ориентированного программирования.
- •Классы Инкапсуляция
- •Объект (экземпляр класса).
- •Ключевое слово this
- •Отношения между объектами.
- •Основные отличительные особенности класса
- •Спецификаторы доступа
- •Состав класса
- •Поля класса
- •Доступ к полям
- •Статические и экземплярные переменные
- •Методы (функции-члены класса)
- •Переменное число параметров метода
- •Статические методы
- •Конструкторы
- •Закрытые конструкторы или классы без экземпляров
- •Статические конструкторы.
- •Деструкторы
- •Абстрактные методы и классы.
- •Свойства
- •Индексаторы
- •Статические классы
- •Частичные классы
- •Рекомендации по программированию
- •Наследование Понятие наследования в программировании
- •Типы наследования
- •Наследование реализации
- •Определение наследующих классов
- •Уровень доступа protected и internal
- •Ссылка на объект базового класса
- •Протоклассы
- •Предотвращение наследования с помощью ключевого слова sealed.
- •Отношения между классами
- •Абстрактные классы.
- •Класс object
- •Функциональные замыкания
- •Разработка функциональных замыканий с помощью наследования
- •Разработка функциональных замыканий с помощью экземпляров класса
- •Заключение.
- •Полиморфизм
- •Полиморфизм наследующих классов.
- •Переопределение методов родительского класса. Раннее связывание.
- •Виртуальные методы и их переопределение.
- •Как вызывают виртуальные методы
- •Виртуальные функции и принцип полиморфизма
- •Перегрузка.
- •Перегруженные конструкторы
- •Рекомендации программисту.
Наследование Понятие наследования в программировании
Вся сила объектно-ориентированного программирования (ООП) основана на наследовании. Когда построен полезный класс, то он может многократно использоваться. Повторное использование - это одна из главных целей ООП. Но и для таких полезных классов неизбежно наступает момент, когда становится необходимым расширить, изменить или усовершенствовать уже имеющиеся функциональные возможности класса. При этом любая попытка изменять сам работающий класс может быть связана с большими неприятностями. Например, могут перестать работать прекрасно работавшие программы, а многим пользователям могут и вовсе не понадобятся новые возможности. В таких случаях наследование и приходит на помощь. Оно позволяет не изменять существующего класса, а создавать его потомков, которые могут продолжать дело отца, но уже на новом, более высоком уровне.
Класс-потомок наследует все возможности родительского класса, то есть все поля и все методы, открытую и закрытую часть класса. Однако, не ко всем полям и методам класса возможен прямой доступ потомка. Например, поля и методы родительского класса, снабженные атрибутом private, хотя и наследуются, но по-прежнему остаются закрытыми, и методы, создаваемые потомком, не могут к ним обращаться к ним напрямую, а только через открытые или защищенные методы, унаследованные от родителя. Единственное чего не наследует потомок, так это конструкторы родительского класса. Потомок должен создавать конструкторы сам.
Типы наследования
В ООП существуют два различных типа наследования: наследование реализации и наследование интерфейса
Наследование реализации означает, что новый тип порождается от базового класса, получая в свое распоряжение все его поля данных и функции. Такой тип наследования наиболее полезен, когда нужно добавить функциональность существующему типу, или же когда несколько связанных типов разделяют существенный объем общей функциональности.
Наследование интерфейса означает, что тип наследует только сигнатуру (прототип) функций, но не наследует никакой реализации. Этот тип обеспечивает доступ к определенным средствам. Например, для некоторых типов может быть указано, что они представляют метод визуализации объектов, называемый Draw(), за счет того, что наследуют интерфейс IDisplay. Поскольку способ, которым один тип вырисовывает самого себя, скорее всего, будет значительно отличаться от способа вырисовывания, используемого другим типом, то нет смысла определять никакой общей реализации, а потому в данном случае подходит наследование интерфейса. Наследование интерфейса часто интерпретируется как выполнение контракта: наследуя интерфейс, тип берет на себя обязанность представить своим клиентам определенную функциональность.
С# поддерживает как наследование реализации, так и наследование интерфейса. Здесь нет никаких предпочтений и оба типа наследования полностью встроены в язык с самого начала. Это облегчает выбор лучшей архитектуры для ваших решений.
Существует две формы наследования: простое и множественное. Для классов С# не поддерживает множественного наследования потому, что преимущества такого типа наследования достаточно спорны. Однако язык С# позволяет типу наследовать множество интерфейсов. Это означает, что класс может наследоваться от другого класса и любого количества интерфейсов.