exponenta event banner

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

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

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

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

Разработка абстракции

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

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

Разработка иерархий классов

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

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

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

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

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

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

Объект подкласса «является» объектом суперкласса

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

Подкласс является суперклассом. Например, инженер является сотрудником.

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

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

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

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

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

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

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

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

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

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

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

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

Сведения об определении методов преобразования см. в разделе Преобразователи объектов.

Внедрение и наследование интерфейсов

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

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

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

  • Группа классов должна обеспечивать общий интерфейс.

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

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

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

Связанные темы