Организация классов в иерархии упрощает повторное использование кода и повторное использование решений проблем проектирования, которые были уже решены. Можно думать об иерархиях классов как о наборах — надмножества (называемый superclasses или base classes), и подмножества (называемый subclasses или derived classes). Например, следующее изображение показывает, как вы могли представлять базу данных сотрудника с классами.
Корнем иерархии является Employees
класс. Это содержит данные и операции, которые применяются к группе всех сотрудников. Содержавшийся в группе сотрудников подмножества, члены которых, в то время как все еще сотрудники, являются также членами наборов, которые более в частности задают тип сотрудника. Подклассы как TestEngineer
примеры этих подмножеств.
Классы являются представлениями концепций реального мира или вещей. При разработке класса сформируйте абстракцию того, что представляет класс. Рассмотрите абстракцию сотрудника и каковы существенные аспекты сотрудников для надлежащего использования класса. Назовите, обратитесь, и отдел может быть тем, что имеют общего все сотрудники.
При разработке классов абстракция содержит только те элементы, которые необходимы. Например, цвет волос сотрудника и размер обуви, конечно, характеризуют сотрудника, но вероятно не относятся к проекту этого класса сотрудника. Их область продаж относится только к некоторому сотруднику, таким образом, эта характеристика принадлежит подкласса.
Когда вы проектируете систему классов, помещаете общие данные и функциональность в суперклассе, который вы затем используете, чтобы вывести подклассы. Подклассы наследовали данные и функциональность суперкласса и задают только аспекты, которые уникальны для их конкретных целей. Этот подход обеспечивает преимущества:
Постарайтесь не копировать код, который характерен для всех классов.
Добавьте или измените подклассы в любое время, не изменяя суперкласс или влияя на другие подклассы.
Если суперкласс изменяется (например, всем сотрудникам присваивают номер), то подкласс автоматически получает эти изменения.
Объекты подкласса ведут себя как объекты суперкласса, потому что они - специализации суперкласса. Этот факт упрощает разработку связанных классов, которые ведут себя точно так же, но реализованы по-другому.
Можно обычно описывать отношение между объектом подкласса и объектом его суперкласса с оператором как:
Подкласс является суперклассом. Например: Инженер является Сотрудником.
Это отношение подразумевает, что объекты, принадлежащие подклассу, имеют те же свойства, методы и события как суперкласс. Разделите объекты на подклассы, также имеют любые новые возможности, заданные подклассом. Протестируйте это отношение с isa
функция.
Можно передать объект подкласса методу суперкласса, но можно получить доступ только к тем свойствам, которые задает суперкласс. Это поведение позволяет вам изменить подклассы, не влияя на суперкласс.
Две точки о супер и поведении подкласса, чтобы иметь в виду:
Методы, заданные в суперклассе, могут работать с объектами подкласса.
Методы, заданные в подклассе, не могут работать с объектами суперкласса.
Поэтому можно обработать Engineer
возразите как любой другой Employees
объект, но Employee
объект не может передать для Engineer
объект.
MATLAB® определяет класс основанного на объектах на его самом определенном классе. Поэтому Engineer
объект имеет class
Engineer
, в то время как это - также Employees
объект, как использование isa
функция показывает.
Обычно MATLAB не позволяет вам создавать массивы, содержащие соединение суперкласса и объектов подкласса, потому что массив может иметь только один класс. При попытке конкатенировать объекты различных классов, MATLAB ищет метод конвертера, заданный менее доминирующим классом
Смотрите Конкатенирующие Объекты Различных Классов для получения дополнительной информации.
Смотрите matlab.mixin.Heterogeneous
для получения информации об определении неоднородных иерархий классов.
См. Преобразователи объектов для получения информации об определении методов конвертера.
Классы MATLAB поддерживают и наследование реализованных методов от суперкласса и наследование интерфейсов, заданных абстрактными методами в суперклассе.
Наследование реализации включает повторное использование кода подклассами. Например, employee
класс может иметь submitStatus
метод, что весь employee
подклассы могут использовать. Подклассы могут расширить унаследованный метод обеспечить специализированную функциональность при многократном использовании общих аспектов. Смотрите Изменяют Унаследованные методы для получения дополнительной информации об этом процессе.
Интерфейсное наследование полезно в этих случаях:
Вы хотите, чтобы группа классов обеспечила общий интерфейс.
Подклассы создают специализированные реализации методов и свойств.
Создайте интерфейс с помощью абстрактного класса в качестве суперкласса. Этот класс задает методы и свойства, которые вы должны реализовать в подклассах, но не обеспечиваете реализацию.
Подклассы должны обеспечить свою собственную реализацию абстрактных членов суперкласса. Чтобы создать интерфейс, задайте методы и свойства как краткий обзор с помощью их Abstract
атрибут. См. Абстрактные классы и Члены класса для получения дополнительной информации и пример.