Название: Программирование - Методические указания(М.Г. Гриф)

Жанр: Информатика

Просмотров: 1165


2. основы объектно-ориентированного программирования

 

Отличительные особенности и принципы объектно-ориенти-рованного программирования. Если в структурном (процедурном) программировании решение задачи достигается путем указания некоторой последовательности действий, ведущих к заданной цели, то в ООП управление от одной подпрограммы (объекта) к другой передается при возникновении некоторого события (например, нажата клавиша <Enter>) и решение задачи достигается в результате указанной цепочки передачи управления (сообщений). Кроме того, ООП предполагает формализацию задачи в определенных понятиях (терминах): классы, объекты, методы, свойства, состояния, отношения и т.п. Применение ООП ведет к созданию хорошо структурированных программных комплексов, имеющих следующие достоинства: использование выразительных средств объектно-ориентированных языков программирования; поддержка повторного использования отдельных составляющих программного обеспечения; создания более открытых систем; снижение риска при разработке; активизация познавательных способностей человека; уменьшение времени на разработку и размер исходного текста программ.

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

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

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

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

Модульность – это свойство системы, связанное с возможностью декомпозиции ее на ряд тесно связанных модулей.

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

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

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

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

Понятие класса и объекта. Рассмотрим данные понятия на примере. Конкретный стул является объектом, обладающим набором характеристик (полей) цветом, весом, стоимостью и т.п. Все конкретные стулья можно объединить в один класс «стул». Данный класс является множеством всех конкретных стульев. Кроме указания необходимого набора полей, в классе стул должны быть заданы и некоторые обязательные свойства – «имеет спинку» и т.д. Стулья могут находиться в различных состояниях – рабочем, брак и т.п. Стул может подвергаться воздействию различных операций (методов) – «ставить на ножки», «садиться»

и т.п.

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

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

Отношения между классами. Имеется четыре отношения: наследования, использования, наполнения, метакласс.

Отношение простого наследования. При простом наследовании от родительского класса передаются все его свойства к классу потомка.

При множественном наследования к потомку передаются свойства нескольких родительских классов.

Отношение использования имеет место, если при задании одного из классов используются ссылки на поля (свойства) и методы другого класса.

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

и т.п.

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

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

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