Организация классов в иерархии облегчает переиспользование кода и переиспользование решений для проектирования уже решенных задач. Иерархии классов можно представить как наборы - суперсеты (называемые 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
атрибут. Смотрите абстрактные классы и члены класса для получения дополнительной информации и примера.