Подклассы, суперклассы и наследование
Некоторые объекты могут иметь подобные, но не идентичные атрибуты и методы. Если степень такого подобия достаточно высока, то имеет смысл совместно использовать некоторые свойства (атрибуты и методы). Наследование (inheritance) позволяет определять один класс на основе более общего класса. Такие менее общие классы называются подклассами, а более общие — суперклассами. Процесс образования суперкласса называется обобщением (generalization), а процесс образования подкласса — специализацией. По умолчанию подкласс наследует все свойства его суперкласса и в дополнение к ним определяет свои собственные уникальные свойства. Однако, как мы вскоре увидим, подкласс также может переопределять унаследованные методы. Все экземпляры подкласса являются также экземплярами суперкласса. Более того, согласно принципу подстановки, для любого метода и конструкции вместо экземпляра суперкласса всегда можно использовать экземпляр его подкласса.
Понятия подкласса, суперкласса и наследования аналогичны таким же понятиям, которые рассматривались в модели типа сущность-связь, за исключением того, что в объектно-ориентированной парадигме наследование относится как к состоянию, так и к поведению. Связь между подклассом и суперклассом обычно называется связью типа АКО. Связь между экземпляром и его классом иногда называют связью типа IS-A.
Существует несколько видов наследования: единичное, множественное, повторное и избирательное ( см. рисунки 9, 10, 11).
|
|
|
Рисунок 9 - Пример единичного наследования |
Рисунок 10 - Пример множественного наследования |
Рисунок 11 - Пример повторного наследования |
Повторное наследование — это особый случай множественного наследования, в котором суперклассы происходят от общего суперкласса.
Селективное наследование позволяет подклассу наследовать ограниченное количество свойств его суперкласса. Такой подход предоставляет функциональные возможности, аналогичные механизму создания представлений, разрешая ограничить доступ только некоторыми из имеющихся атрибутов суперкласса.
Переопределение
Подкласс автоматически наследует от суперклассов свойства, а именно атрибуты и методы. Однако свойство суперкласса в подклассе можно определить заново. В этом случае используется именно то определение свойства, которое приводится в подклассе, а сам этот процесс называется переопределением.
Способность сокращения количества общих свойств нескольких классов за счет переноса их во вновь образованные для этого суперклассы и их последующего совместного использования существенно сократит избыточность данных внутри системы, а потому может рассматриваться как одно из основных преимуществ объектно-ориентированного подхода. Возможность переопределения является важной характеристикой наследования, поскольку позволяет легко управлять отдельными классами с минимальным влиянием на остальную часть системы.
Перегрузка
Замена является частным случаем более общего понятия перегрузки. Перегрузка позволяет повторно использовать имя метода внутри определения класса и определений нескольких классов. Это значит, что одно сообщение может выполнять разные функции, в зависимости от того, какой объект получает его и какие параметры получает метод.
Полиморфизм и динамическое связывание
Перегрузка является частным случаем более общего понятия полиморфизма. Существуют три типа полиморфизма: рабочий, включения и параметрический. Метод, определенный в суперклассе и унаследованный в его подклассе, является примером полиморфизма включения. Параметрический полиморфизм, или универсальность, означает использование типов в качестве параметров в объявлениях универсального типа или класса.
Процесс выбора соответствующего метода, основанный на типе объекта, называется связыванием. Если определение типа объекта может быть отложено до наступления времени исполнения (а не во время компиляции), то такой выбор называется динамическим, или поздним, связыванием.