Иерархии классов - концепции

Классификация

Организация классов в иерархии облегчает переиспользование кода и переиспользование решений для проектирования уже решенных задач. Иерархии классов можно представить как наборы - суперсеты (называемые superclasses или base classes) и подмножества (называемые subclasses или derived classes). Например, на следующем рисунке показано, как можно представлять базу данных сотрудников с классами.

Корнем иерархии являются Employees класс. Он содержит данные и операции, которые применяются к набору всех сотрудников. В наборе сотрудников содержатся подмножества, представители которых, хотя и являются сотрудниками, также являются представителями наборов, которые более конкретно определяют тип сотрудника. Подклассы, такие как TestEngineer являются примерами этих подмножеств.

Разрабатывайте абстракцию

Классы являются представлениями реальных концепций мира или вещей. При разработке класса формируйте абстракцию того, что представляет класс. Рассмотрим абстракцию сотрудника и каковы существенные аспекты сотрудников для целевого использования класса. Имя, адрес и отдел могут быть общими для всех сотрудников.

При разработке классов ваша абстракция содержит только те элементы, которые необходимы. Например, цвет волос и размер обуви сотрудника, безусловно, характеризуют сотрудника, но, вероятно, не относятся к проекту этого класса сотрудников. Их область сбыта релевантна только некоторым сотрудникам, поэтому этот признак принадлежит подклассу.

Проект иерархий классов

Когда вы проектируете систему классов, поместите общие данные и функциональность в суперкласс, который вы затем используете, чтобы вывести подклассы. Подклассы наследуют данные и функциональность суперкласса и определяют только аспекты, уникальные для их конкретных целей. Этот подход обеспечивает следующие преимущества:

  • Избегайте дублирования кода, который является общим для всех классов.

  • Добавляйте или изменяйте подклассы в любое время, не изменяя суперкласс и не влияя на другие подклассы.

  • Если изменяется суперкласс (для примера всем сотрудникам присваивается номер), то подкласс автоматически получает эти изменения.

Супер и подклассное поведение

Объекты подкласса ведут себя как объекты суперкласса, потому что они являются специализациями суперкласса. Этот факт облегчает развитие связанных классов, которые ведут себя аналогично, но реализуются по-разному.

Объект суперкласса подкласса «Is A»

Обычно можно описать связь между объектом подкласса и объектом его суперкласса с помощью оператора типа:

Подкласс является суперклассом. Для примера: Инженер является сотрудником.

Эта связь подразумевает, что объекты, принадлежащие подклассу, имеют те же свойства, методы и события, что и суперкласс. Объекты подкласса также имеют любые новые возможности, заданные подклассом. Протестируйте это отношение с isa функция.

Обработка объектов подкласса, таких как объекты суперкласса

Можно передать объект подкласса в суперкласс, но получить доступ можно только к тем свойствам, которые задает суперкласс. Это поведение позволяет вам изменять подклассы, не влияя на суперкласс.

Две точки о супер и подклассовом поведении, которые нужно иметь в виду:

  • Методы, заданные в суперклассе, могут работать с объектами подкласса.

  • Методы, заданные в подклассе, не могут работать с объектами суперкласса.

Поэтому можно лечить Engineer объект, как и любой другой Employees объект, но Employee объект не может пройти для Engineer объект.

Ограничения на подстановку объектов

MATLAB® определяет класс объекта на основе его самого конкретного класса. Поэтому переменная Engineer объект class Engineer, в то время как это также Employees объекта, как используя isa функция обнаруживает.

Как правило, MATLAB не позволяет вам создавать массивы, содержащие смесь объектов суперкласса и подкласса, поскольку массив может иметь только один класс. Если вы пытаетесь объединить объекты разных классов, MATLAB ищет метод конвертера, заданный менее доминирующим классом

Для получения дополнительной информации см. раздел «Сцепление объектов различных Классов».

См. matlab.mixin.Heterogeneous для получения информации об определении гетерогенных иерархий классов.

Для получения информации об определении методов конвертера см. раздел «Преобразователи объектов».

Реализация и наследование интерфейса

Классы MATLAB поддерживают как наследование реализованных методов из суперкласса, так и наследование интерфейсов, заданных абстрактными методами в суперклассе.

Наследование реализации позволяет повторно использовать код подклассами. Для примера, employee класс может иметь submitStatus метод, который все employee подклассы могут использовать. Подклассы могут расширить унаследованный метод, чтобы обеспечить специализированную функциональность, при этом повторно используя общие аспекты. Дополнительные сведения об этом процессе см. в разделе Изменение унаследованных методов.

Наследование интерфейса полезно в следующих случаях:

  • Необходимо, чтобы группа классов обеспечивала общий интерфейс.

  • Подклассы создают специализированные реализации методов и свойств.

Создайте интерфейс, используя абстрактный класс в качестве суперкласса. Этот класс определяет методы и свойства, которые вы должны реализовать в подклассах, но не обеспечивает реализацию.

Подклассы должны обеспечивать собственную реализацию абстрактных представителей суперкласса. Чтобы создать интерфейс, задайте методы и свойства как абстрактные с помощью их Abstract атрибут. Смотрите абстрактные классы и члены класса для получения дополнительной информации и примера.

Похожие темы