ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 11.04.2019

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

Скачиваний: 8

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

ПРОГРАММНАЯ ИНЖЕНЕРИЯ

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

1.1Объектно-ориентированная технология разработки программ

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

В ООП центральным является понятие класса

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

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

Базовым в ООП является понятие объекта. Объект имеет определенные свойства. Состояние объекта задается значениями его признаков. Объект «знает», как решать определенные задачи, т.е. располагает методами решения. Программа, написанная с использованием ООП состоит из объектов, которые могут взаимодействовать между собой.

Концепция ООП заключается в том, что каждый объект является экземпляром некоторого класса объектов.

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

Объектно-ориентированная разработка программ помогает справиться с такими сложными проблемами, как:

уменьшение сложности программного обеспечения;

повышение надежности программного обеспечения;

обеспечение возможности модификации отдельных компонентов программного обеспечения без изменения остальных его компонентов;

обеспечение возможности повторного использования отдельных компонентов программного обеспечения.

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


ООП является наилучшим инструментом для построения иерархических деревьев или структур данных.

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

Характеристики ООП

  • Все является объектом.

  • Вычисления осуществляются путем взаимодействия (обмена данными) между объектами, при котором один объект требует, чтобы другой объект выполнил некое действие. Объекты взаимодействуют, посылая и получая сообщения. Сообщения - это запрос на выполнение действия, дополненный набором аргументов, которые могут понадобиться при выполнении действия.

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

  • Каждый объект является представителем класса, который выражает общие свойства объектов.

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

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

Принципы ООП

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

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

Инкапсуляция является важнейшим свойством объекта, на котором строится ООП. Инкапсуляция заключается в том, что объект скрывает в себе детали, которые несущественны для использования. В традиционном подходе к программированию с использованием глобальных переменных программист не был застрахован от ошибок, связанных с использованием процедур, не предназначенных для обработки данных, но связанных с этими переменами. «Жесткое» связывание данных и процедур их обработки в одном объекте позволяет избежать многие неприятности. Инкапсуляция и является средством организации доступа к данным только через соответствующие методы.

Инкапсуляция — это принцип, согласно которому любой класс должен рассматриваться как чёрный ящик — пользователь класса должен видеть и использовать только интерфейс (от английского interface — внешнее лицо, т. е. список декларируемых свойств и методов) класса и не вникать в его внутреннюю реализацию. Этот принцип (теоретически) позволяет минимизировать число связей между классами и, соответственно, упростить независимую реализацию и модификацию классов.


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

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

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

Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество реализаций».

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

1.2 Понятие класса

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

предметной области, имеющих общие свойства и поведение. Компоненты, использованные при определении класса, называются его членами (members). Класс может содержать несколько членов, а может и не иметь ни одного члена. Таким образом, простейшее описание класса может выглядеть так:

class Demo {}

Рассмотрим пример:

Class X {

Public:

int m; // данные-члены

int mf (int v) { int old = m; m=v; return old; } // функция-член

};

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

назьюать методами. Для доступа к членам класса используется синтаксическая конструкция вида объект.член. Например:

X var; // var – переменная типа Х

Var.m = 7: // присваиваем значение члену m обьекта var

Int x = var.mf (9); // вызываем функцию-член mf() обьекта var

Как правило, класс имеет интерфейс и реализацию. Интерфейс – это часть объявления класса, к которой пользователь имеет прямой доступ. Реализация – это часть объявления, доступ к которой пользователь может получить только с помощью интерфейса. Открытый интерфейс идентифицируется с меткой public:, а реализация – меткой private:. Так же существуют компоненты класса, объявленные в секции protected,, которые называются


защищенными. Они доступны компонентным функциям не только данного

класса, но и его потомков. При отсутствии наследования ~ интерпретируются

как внутренние. Таким образом, класс описывается следующим образом:

class <имя класса>

{ private: <внутренние (недоступные) компоненты класса>;

protected: <защищенные компоненты класса>;

public: <общие (доступные) компоненты класса>;

};

Поля класса всегда описьгоаются внутри класса. В отличие от полей,

компонентные функции могут быть описаны как внутри, так и вне определения

класса. В последнем случае определение класса должно содержать прототипы

этих функций, а заголовок функции должен включать описатель видимости,

который состоит из имени класса и знака «::». Таким способом компилятору

сообщается, что определяемой функции доступны внутренние поля класса:

<тип функции> <имя класса>:: <имя функции>(<список параметров>)

{<тело компонентной функции>}

1.3 Понятие объекта

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

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

Гради Буч дает следующее определение объекта:

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

Каждый объект, получая сообщения, должен определенным образом

«реагировать» на них, выполняя заранее определенные для каждого типа

сообщения действия.

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

Состояние

Зависимость поведения объекта от событий и от времени объясняется тем, что у объекта есть внутреннее состояние. Буч дает следующее определение: Состояние объекта характеризуется перечнем (обычно статическим) всех свойств данного объекта и текущими (обычно динамическими) значениями каждого из этих свойств. Например, одним из свойств торгового автомата является способность принимать монеты. Это статическое (фиксированное) свойство, в том смысле, что оно — существенная характеристика торгового автомата. С другой стороны, этому свойству соответствует динамическое значение, характеризующее количество принятых монет. Сумма увеличивается по мере опускания монет в автомат и уменьшается, когда продавец забирает деньги из автомата.

Объекты не существуют изолированно, а взаимодействуют друг с другом, реализуя поведение. Буч определяет поведение следующим образом: Поведение — это то, как объект действует и реагирует; поведение выражается в терминах состояния объекта и передачи сообщений. Иными словами, поведение объекта — это его наблюдаемая и проверяемая извне деятельность.


Поведение объектов, как уже говорилось выше, характеризуется

определенным набором реакций на получаемые сообщения и часто зависит от

состояния объекта. Результат выполнения действий зависит от состояния объекта на момент совершения действия, т.е. нельзя, например, удалить файл, если он открыт кем-либо (заблокирован). В то же время действия могут менять внутреннее состояние объекта - при открытии или закрытии файла свойство «открыт» принимает значения «да» или «нет», соответственно.

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

Свойства объекта, которые отличают его от всех других объектов группы,

составляют его индивидуальность. Так каждая колонка может иметь

собственную пропускную способность.

Если объект может обладать некоторым состоянием, то, соответственно,

может возникнуть необходимость в получении информации об этом состоянии.

Для получения такой информации объекту посылается сообщение-запрос. В ответ на запрос объект должен переслать отправителю требуемую

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

селекции. Обращение к объекту для изменения его состояния по всем или

отдельным составляющим инициирует выполнение операции модификации.

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

модификация объекта, может ожидать завершения операции, а может

продолжить выполнение своей программы. Второй вариант обработки

называется асинхронным, и его реализация требует использования (или

моделирования) параллельной обработки.

Если объект содержит несколько однотипных компонент, например,

массив чисел, то операция, требующая последовательной обработки этих

компонент, называется итерацией. Поэлементно могут выполняться как

операции селекции, так и операции модификации.

Полный список возможных операций над объектами выглядит

следующим образом (рис. 1.14):

создание объекта;

уничтожение объекта;

модификация - изменение состояния объекта;

селекция - доступ для определения состояния;

итерация - доступ к содержимому объекта по частям в определенной

последовательности (используется при наличии в объекте некоторых

однотипных компонент).

1.4 Составляющие класса и объекта

Классами в системе программирования Delphi называются специальные типы,

которые содержат составляющие класса: поля, методы и свойства. Составляющие класса

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

Поле класса - в объектно-ориентированном программировании — переменная, связанная с классом или объектом. Все данные объекта хранятся в его полях. Доступ к полям осуществляется по их имени. Обычно тип данных каждого поля задаётся в описании класса, членом которого является поле. Поля могут быть любого типа, в том числе – классами.