Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
08.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
392.7 Кб
Скачать

Лекция 8

Методы программирования классов в MATLAB.

Основные принципы объектно-ориентированной технологии программирования. Классификация объектов предметной области. Проектирование иерархии классов. Особенности программирования классов в MATLAB. Конструкторы. Перекрытие классов. Перекрытие операций. Примеры перекрытия арифметических операций в классах MATLAB и пользовательских классах. Наследование классов.

Основные принципы объектно-ориентированной технологии программирования

Введение новых типов данных и операций, определяемых пользователем, характеризует подход, известный как объектно-ориентированное программирование (ООП).

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

Объект – это сущность, которой можно посылать сообщения, используя её интерфейсные методы, и которая может на них реагировать, используя свои данные.

Класс является описываемой на языке программирования моделью ещё не существующей сущности (объекта). Фактически он описывает устройство объекта, являясь своего рода чертежом.

Абстрагирование – это способ выделения набора значимых характеристик объекта, исключая из рассмотрения незначимые Соответственно, абстракция – это набор всех таких характеристик. Суть этого принципа в том, чтобы упростить работу со сложными объектами, состоящими из «меньших» объектов, избавившись от деталей реализации этих самых «меньших» объектов. Такой подход позволяет работать непосредственно с объектом, не вдаваясь в подробности из чего же он состоит и как работает.

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

Наследование – механизм ООП, позволяющий описать новый класс на основе уже существующего (родительского), при этом свойства и функциональность родительского класса заимствуются новым классом. Другими словами, класс-наследник реализует спецификацию уже существующего базового класса. Это позволяет обращаться с объектами класса-наследника точно так же, как с объектами базового класса.

Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта (в ООП реализуется с помощью наследования классов и виртуальных функций). Класс-потомок наследует объявление методов класса-родителя, а реализация этих методов может быть другой, соответствующей специфике класса-потомка (в результате переопределения метода). Другие функции могут работать с объектом как с экземпляром класса-родителя, но если при этом объект на самом деле является экземпляром класса-потомка, то во время исполнения будет вызван метод, переопределенный в классе-потомке. Это называется поздним связыванием. Примером использования может служить обработка массива, содержащего экземпляры как класса-родителя, так и класса-потомка. Очевидно, что такой массив может быть объявлен только как массив типа класса-родителя и у объектов массива могут вызываться только методы этого класса, но если в классе-потомке какие-то методы были переопределены, то в режиме исполнения для экземпляров этого класса будут вызваны именно они, а не методы класса-родителя.

Таким образом, объект – это экземпляр класса. Данные объекта скрыты от остальной программы. Сокрытие данных называется инкапсуляцией. Наличие инкапсуляции достаточно для объектности языка программирования, но ещё не означает его объектной ориентированности – для этого требуется наличие наследования. Но даже наличие инкапсуляции и наследования не делает язык программирования в полной мере объектным с точки зрения ООП. Основные преимущества ООП проявляются только в том случае, когда в языке программирования реализован полиморфизм (т.е. возможность объектов с одинаковой спецификацией иметь различную реализацию).

Объектно-ориентированная модель проектирования

Неисчерпаемая сложность окружающего мира позволяет постигать себя с разной степенью подробности. Однозначно различаются объекты, их основные свойства (форма, материал), видимые взаимодействия. Чтобы прогнозировать поведение объектов в заданных условиях, нужно глубже изучить их свойства. Адекватная модель выделенной части мира должна копировать его объектную структуру как на уровне изучаемых взаимодействий, так и вглубь, до базовых свойств, определяющих поведение объектов. Требуется проработанная классификация объектов предметной области. (Предметная область – часть реального мира, рассматриваемая в пределах данного контекста. Под контекстом здесь может пониматься, например, область исследования или область, которая является объектом некоторой деятельности. Предметная область представляется множеством фрагментов, например, предприятие – цехами, дирекцией, бухгалтерией и т.д. Каждый фрагмент предметной области характеризуется множеством объектов и процессов, использующих объекты, а также множеством пользователей, характеризуемых различными взглядами на предметную область.)

В объектной технологии проектирования первоначально проектируется не изделие, а объектная иерархия его структурных элементов, способных взаимодействовать между собой. Основной механизм взаимодействия объектов – обмен сообщениями. Например, получив извне запрос о своей массе (рис. 1 a), объект самого верхнего уровня (конструкция) рассылает соответствующие сообщения объектам нижнего уровня (узлам), а те, в свою очередь, своим подчиненным объектам (деталям). Объектам самого нижнего уровня, у которых нет подчиненных объектов, ничего не остается, как произвести вычисление и возвратить его результаты в ответ на сообщение, а получивший этот результат источник последнего сообщения суммирует его с другими аналогичными результатами и возвращает выше, и т.д. вплоть до самого верхнего уровня. Более сложные сообщения могут побудить объекты к изменению своих параметров или состава. Например, получив требование увеличить дальность, объект Конструкция сначала пытается выполнить требование за счет изменения головной части (рис. 1 б). В случае неудачи обращается за советом к Экспертной системе, включает по ее рекомендации в состав конструкции донный газогенератор, в ходе взаимодействия определяется оптимальный газоприход и, если этого недостаточно для повышения дальности, рассматривается вариант с ракетным двигателем и т.д. Можно представить себе, что снаряд, представленный объектно-ориенти­ро­ван­ной моделью, получив сообщение с требованиями ТЗ, проектирует себя сам. Конечно, нужно еще представить себе, как такую объектную среду реализовать.

а б

Рис. 1. Обмен сообщениями в системе объектов

Этапы проектирования иерархии классов

  1. Выделение базовой функциональности.

  2. Проектирование общих базовых классов.

  3. Добавление новой функциональности, создание нескольких ветвей иерархии.

  4. Проектирование конкретных классов.

Пример. Иерархия классов "Геометрические фигуры"

Задача: разработать иерархию классов для хранения информации о геометрических объектах. Объекты должны поддерживать операции рисования, сдвига и клонирования (создание копии самого себя).

Ниже приведена диаграмма классов решающих эту задачу (рис. 2). Здесь в корне иерархии находится общий базовый класс, в котором заложена необходимая функциональность. Этот класс является абстрактным. Благодаря такой организации все классы-потомки будут иметь необходимые методы для рисования, сдвига и клонирования. Далее разделение геометрических фигур сделано по наличию у них площади: фигуры делятся на квадрируемые и не квадрируемые. Для работы с квадрируемыми фигурами введён класс QShape в котором предусмотрен метод getS()– получить площадь. Таким образом, при добавлении нового класса для квадрируемой фигуры в иерархию, он должен наследоваться от QShape; классы же фигур не имеющих площади наследуются непосредственно от AbstractShape.

Рис. 2. Иерархия классов "Геометрические фигуры"

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]