Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Применение объектно-ориентированного подхода при проектировании информационной системы (Жизненный цикл проектируемой системы)

Содержание:

Введение

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

Я выбрала для исследования объектно-ориентированный подход проектирования, так как в настоящее время объектно-ориентированный анализ является одним из наиболее интенсивно развивающихся. Также именно этот подход отражает топологию новейших языков высокого уровня, таких как Smalltaik, Object Pascal, C++, CLOS и Ada. Объектно-ориентированный подход к программированию стал приоритетным при разработке большинства программных проектов, что и обусловило актуальность моей работы.

Обучению объектно-ориентированному программированию и проектированию посвящены работы зарубежных исследователей, таких как Г. Буч, Б. Мэйер, А. Якобсон, Дж. Рамбо, И. Грэхем, М. Фаулер, а также исследования отечественных ученых Г.С. Ивановой, Т.Н. Ничушкина, Е.К. Пугачева, И.А. Бабушкиной и др.

Предмет исследования – объектно-ориентированное проектирование, методология BOOSH (Г. Буч).

Основным источником исследования я выбрала книгу «Объектно-ориентированный анализ и проектирование с примерами приложений»[1]. Автор Гради Буч является главным исследователем корпорации Rational Software, признанным разработчиком программного обеспечения. Это издание написано понятным языком и содержит множество примеров.

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

В соответствии с поставленных целей решались следующие основные задачи:

-изучить основные концепции объектной модели;

-рассмотреть процесс и этапы жизненного цикла объектно-ориентированного анализа и проектирования;

-изучить некоторые объектно-ориентированные языки программирования;

-исследовать достоинства и недостатки объективно-ориентированного проектирования;

В первой главе будет рассмотрена проблема сложности программных систем и объектная модель как метод решения этой проблемы, а также основные элементы объектной модели.

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

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

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

Глава 1. Сущность объектно-ориентированного подхода

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

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

  • Абстрагирование проявляется в нахождение сходств между объектами и позволяет отделить самые существенные особенности этого объекта. С помощью абстрагирования определяются четкие концептуальные границы объекта с точки зрения наблюдателя. Абстракции обладают как статическими свойствами: объем памяти, имя, содержание; так и динамическими: мы можем изменить размер файла, его имя или содержание[1, с.39].
  • Инкапсуляция выполняется посредством скрытия информации о внутреннем устройстве объекта, не влияющих на его внешнее поведение. Инкапсуляция предназначена для того, чтобы изолировать контактные обязательства абстракции от их реализации[3, с.85].
  • Модульность позволяет разделить программу на фрагменты- модули- служащих в качестве физических контейнеров, позволяющих хранить абстракции отдельно. Между собой модули находятся в слабой взаимосвязи, но каждый модуль внутренне хорошо связан[4, с.108].
  • Иерархия упорядочивает абстракции, раскладывая их по уровням. Основными видами иерархических структур применительно к сложным системам являются структура классов (иерархия по номенклатуре) и структура объектов (иерархия по составу).

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

Сущность объектно-ориентированного подхода заключается также в понятии объект, которое было использовано уже около 30 лет назад, когда возникла необходимость перейти от традиционной Фон Неймановской архитектуры к более параллельным вычислениям, более высокому уровню программных абстракций. Термин объект в программном обеспечении впервые был введен в языке SIMULA и применялся для моделирования реальности[6, с. 62].

Представление системы в терминах объектов более простое и наглядное, так как программные объекты схожи с объектами реального мира. В реальном мире, в интересующей разработчика предметной области, в качестве объектов могут рассматриваться осязаемые или видимые предметы, нечто, воспринимаемое мышлением или то, на что направлены мысль или действие[2, с.38]. Объект имеет состояние, обладает определенным поведением и уникальной идентичностью.

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

Поведение объекта - это его наблюдаемая и проверяемая извне деятельность, то как он взаимодействует на другой на другие объекты или как он сам реагирует на действия других объектов[1, с.71]. Такое воздействие называется операцией. Часто понятие метод является синонимом понятию операция и входит в определение класса.

Можно выделить пять наиболее распространенных типов операций:

  1. Модификатор - это операция, изменяющая состояние объекта.
  2. Селектор-это операция, считывающая, но не меняющая состояние объекта.
  3. Итератор-это операция, с помощью которой можно организовать доступ ко всем частям объекта в определенной последовательности.
  4. Конструктор-операция создания объекта или его инициализации
  5. Деконструктор - операция разрушающая объект[1, с.73].

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

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

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

Выделяется два типа отношений между объектами:

  1. Связи - это физическое или понятийное соединение между объектами, через которое клиент запрашивает услугу у объекта-сервера или через которое один объект находит путь к другому[5, с. 34]. Вдоль связи объект посылает сообщение другому объекту.

Участвуя в связи, объект может выполнять различные роли:

  • Актер, когда сам объект может не подвергаться воздействию, но активно воздействовать на другие объекты. Такие объекты называют активными.
  • Сервер, когда объект не выступает в роли воздействующего объекта, а только использоваться другими объектами. Такой объект называется пассивным.
  • Агент, когда объект может выступать как в активной роли, воздействуя на другие объекты, так и в пассивной, используясь ими. Агент создается для выполнения работы в интересах объекта-актера или другого объекта-агента[ 4, с.112-113].

Пусть есть два объекта X и Y, находящихся в связи между собой. Чтобы X мог послать сообщение в объект Y, нужно чтобы Y был видим для X. На этапе проектирования и реализации системы видимости по связям обязательно должны быть обеспечены. Чтобы обеспечить видимость связанных объектов можно использовать один из способов:

  • Сервер глобален по отношению к клиенту.
  • Сервер является параметром операции клиента.
  • Сервер является частью клиента.
  • Сервер является локально объявленным объектом в операции клиента[1, с. 83-84].
  1. Агрегация - описывает отношения объектов в иерархии часть-целое. Агрегация обеспечивает возможность перемещения от целого (агрегата) к его частям (атрибутам). Объект-атрибут имеет связь с объектом-агрегатом и может получать от него сообщения. Агрегацию можно рассматривать как частный случай ассоциации. Агрегация может означать физическое вхождение одного объекта в другой, но не обязательно[4, с. 114-115].

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

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

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

Класс-это описание совокупности сходных между собой объектов, имеющих общую структуру и общее поведение[5, с.39]. При этом в некоторых исполняющих системах класс также может представляться некоторым объектом при выполнении программы посредством динамической идентификации типа данных.

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

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

Интерфейс можно разделить на три части:

  1. открытую (public), объявления которой видны всем клиентам;
  2. защищенную (protected), объявления которой доступны только самому классу, его подклассам и друзьям;
  3. закрытую (private), видимую только самому классу и его друзьям[5, с.39].

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

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

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

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

    1. отношение обобщение-специализация ("is а"-отношение);
    2. отношение целое-часть ("part оf"-отношение);
    3. ассоциация - семантические, смысловые отношения[1, с.87].

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

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

Мощность ассоциации бывает одного из трех типов:

  1. один-к-одному;
  2. один-ко-многим;
  3. многие-ко-многим[4, с.117].
  • Наследование и полиморфизм обеспечивают развитие новых классов с помощью создания производных классов. Наследование — это свойство системы, позволяющее описать новый класс (потомок) на основе уже существующего (базового, суперкласса) с частично или полностью заимствующейся функциональностью. Потомки наследуют характеристики наследованных классов без изменения их первоначального состояния и добавляют при необходимости собственные структуры данных и методы. Наследование позволяет различать разновидности абстракций и передавать свойства и структуру базового класса своим подклассам, что позволяет существенно экономить код. Наконец, наследование определяет направление развития классов, что существенно облегчает разработку иерархии классов. Полиморфизм— способность класса принадлежать более, чем к одному типу, возможность с помощью одного имени решать две или более схожие, но технически разные задачи. Полиморфизм позволяет устанавливать аналогии между методами различных классов. Он помогает снижать сложность программ, разрешая использование того же интерфейса для задания единого класса действий[3, c. 85-86].
  • Агрегация - обозначает отношения целого и части между экземплярами классов[1, с.104].
  • Использование - наличие связи между экземплярами классов[5, с.40].
  • Истанцирование - создание экземпляра класса.
  • Метакласс - класс, экземпляры которого суть классы, что позволяет трактовать классы как объекты[1, с.108].

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

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

Глава 2. Жизненный цикл проектируемой системы

2.1 Объектно-ориентированный анализ

Первой фазой жизненного цикла является объектно-ориентированный анализ и предварительное проектирование системы[15, с.12].

Основная задача объектно-ориентированного анализа – построение информационной модели, в которой фундаментальная структура предметной области абстрагируется от реального мира и чётко формализуется и документируется[14, с.50].

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

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

Анализ предметной области подразумевает выделение тех объектов и связей, которые наиболее важны для данной области. Мур и Байлин выделяют следующие этапы анализа предметной области:

  1. Построение скелетной модели после в результате консультирования с экспертами в данной области.
  2. Изучение существенных в данной области систем и представление результатов в стандартном виде.
  3. Определение сходства и различия между системами при участии экспертов.
  4. Уточнение общей модели для приспособления к нуждам данной системы[1, с.127].

Эксперт должен быть хорошо осведомлен в вопросах исследуемой проблемы и владеть понятиями данной области.

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

На этапе анализа системы решаются две основные задачи:

  • Выделение ключевых абстракций, то есть классов и объектов включенных в систему и определяющих границу рассматриваемой проблемы. Необходимо правильно расположить классы и объекты на нужных уровнях абстракции[1, с.130,131].
  • Выделение механизмов реализации, служащих для задания поведения совокупности объектов. Механизмы представляют шаблоны поведения[1, с.132,133].

В результате объективно-ориентированного анализа создаются модели, на которых основывается декомпозиция системы, которая создает фундамент для реализации системы с использованием методологии объектно-ориентированного проектирования[15, с.13].

Объектно-ориентированное проектирование - это методология проектирования, соединяющая в себе процесс объектной декомпозиции и приемы представления логической и физической, а также статической и динамической моделей системы[7, с.129]. Граница между объектно-ориентированным анализом и проектированием расплывчата и построение проекта программного изделия состоит из ряда циклов, в которых уточняются описания классов и взаимодействия между ними, разрабатываются реализующие их программы, проводится их отладка и тестирование и по результатам каждого этапа уточняются рабочие документы предыдущих этапов, дорабатываются описания классов и программы. Эти циклы повторяются до получения требуемого результата.

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

    1. Объектная модель, которая раскрывает статические и структурные элементы системы. Эта модель представляет собой обобщение структуры проектируемой системы и описывает структуру объекта- их атрибуты, операции, механизмы взаимодействия. В объектной модели отражаются те понятия и объекты реального мира, которые важны для разрабатываемой системы[15, с.14].
    2. Динамическая модель- модель, зависящая от времени. Она описывает работу у тех или иных частей системы и отражает определенные временные аспекты и последовательность операций. Если объектная модель представляет собой статическую структуру проектируемой системы, то динамическая модель позволяет отображать все изменения, которые происходят с объектами с течением времени и что происходит с их связями во время работы системы. Динамическая модель состоит из диаграмм состояний[15, с.60].
    3. Функциональная модель отражает взаимодействие частей системы в процессе работы и описывает потоки данных. Она отражает, как входные данные преобразуются в выходные. Она состоит из совокупности диаграмм потоков данных потоков данных, которые показывают, как потоки данных поступают к внешним выходам[15, с.78,79].

Диаграммы состояний связывают событие и состояние. Событие используется для определения некого момента времени, оно не имеет продолжительности. События передают информацию с одного объекта на другой. Состояние определяется совокупностью текущих значений атрибутов и связей объекта. Состояние определяет реакцию объекта на поступающее в него событие. Такая реакция может включать некоторое действие или переход объекта в другое состояние. При приеме события следующее состояние системы зависит как от ее текущего состояния, так и от события; смена состояния называется переходом. Диаграмма состояний - это граф, узлы которого представляют состояния, а направленные дуги, помеченные именами соответствующих событий, - переходы. Диаграмма состояний позволяет получить последовательность состояний по заданной последовательности событий[1, с.183].

Диаграммы потоков данных строятся в функциональной модели. Эти диаграммы описывают смысл операций и ограничений, отражает функциональные зависимости значений, вычисляемых в системе, включая входные значения, выходные значения и внутренние хранилища данных[4, с.41].

Диаграммы потоков данных содержит процессы, которые преобразуют данные, потоки данных, которые переносят данные, активные объекты, которые производят и потребляют данные, и хранилища данных, которые пассивно хранят данные[15, с.79].

2.2 Конструирование системы

Вторая фаза жизненного цикла - конструирование системы. На этом этапе решается вопрос, как реализовать решения, принятые на этапе анализа[15, с.94].

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

  • определить разбиение системы на относительно независимые в реализации части (модули);
  • выявить асинхронный параллелизм в системе, то есть выяснить, какие объекты должны быть активными одновременно , а какие бывают активными только в разное время;
  • определить состав вычислительного комплекса, на котором будет работать система;
  • распределить компоненты системы по процессорам вычислительного комплекса и независимым задачам;
  • организовать управление хранилищами данных;
  • определить глобальные ресурсы и разработать механизмы управления доступом к ним;
  • выбрать принципы реализации управления программным обеспечением;
  • предусмотреть поведение каждого объекта и всей системы в пограничных ситуациях: инициализации, терминации и обвале[15, с.96].

2.3 Реализация проекта

Третья фаза жизненного цикла - реализация объектно-ориентированного проекта. Она состоит в реализации разработанных программных единиц (классов, функций, библиотек), которые в совокупности составляют разрабатываемую программную систему. Реализация каждой программной единицы может осуществляться как на объектно-ориентированном, так и на не объектно-ориентированном языке программирования, с использованием ранее разработанных программ, библиотек и баз данных[15, с.121].

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

Глава 3. Объектно-ориентированные языки программирования

Общим предком практически всех используемых сегодня объективно-ориентированных языков программирования является Simula, разработанный в конце 60-х годов в Норвегии Далем, Мюрхогом и Ныгардом. Достоинства языка Simula были замечены некоторыми программистами, и в 70-е годы было разработано большое число экспериментальных объектно-ориентированных языков программирования: например, языки CLU, Alphard, Concurrent Pascal и др. Эти языки так и остались экспериментальными, но в результате их исследования были разработаны современные объектно-ориентированные языки программирования: C++, Smalltalk, Eiffel и др[1, с.335].

  1. Smalltalk

Является одновременно и языком программирования и средой разработки программ. Вслед за Simula, Smalltalk является важнейшим объектно-ориентированным языком, поскольку он не только оказал влияние на последующие поколения языков программирования, но и заложил основы современного графического интерфейса пользователя, на которых непосредственно базируются интерфейсы Macintosh, Windows и Motif. В основу языка положены две простые идеи:

  • все является объектами;
  • объекты взаимодействуют, обмениваясь сообщениями[1, с.336].

В Smalltalk существует ограничение на построение иерархии классов: у каждого класса может быть только один непосредственный супер-класс. Такое наследование называется одиночным наследованием[10, с.20].

  1. С++

Является объективно-ориентированным расширением языка Си, созданным Бьерном Страуструпом в 1980 году[3, с.81]. C++ добавляет к C объектно-ориентированные возможности. Он вводит классы, которые обеспечивают три самых важных свойства объективно-ориентированного программирования : инкапсуляцию, наследование и полиморфизм. Класс является ключевым понятием C++. Описание класса содержит описание данных, требующихся для представления объектов этого типа и набор операций для работы с подобными объектами[1, c.340 ].

С ++ унаследовал возможности языка C. Строго говоря, C++ является расширением языка С: любая конструкция на языке C является корректной в C++; в то же время обратное неверно. Наиболее значительные нововведения, присутствующие в C++, касаются классов, объектов и ООП (первоначальное название языка C++ — «С с классами»). Тем не менее имеются и другие увершенствования, связанные со способами организации ввода/вывода и написанием комментариев[2, с.43].

Таким образом, Си++ - это универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьезного программиста.

  1. Eiffel

Разработан президентом компании Interactive Software Engineering (ISE) Бертраном Мейером в 1987 году. В этом языке впервые был реализован метод контрактного программирования, что является самым характерным его свойством: встроенные утверждения создают принудительный контракт между вызывающим оператором и вызываемым кодом подпрограмм[1, с.346].

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

В языке Eiffel программист может присоединить к методу утверждения. Они являются логическими выражениями, которые проверяют состояние объекта во время исполнения, обеспечивая тем самым выполнение определенных условий. Утверждения автоматически наследуются подклассами в прежней форме, даже когда текущие методы переопределяются методами подкласса. Таким образом, утверждения могут использоваться для того, чтобы удостовериться, что дочерний класс ведет себя допустимым образом[11, с.157].

  1. Ada

В 1983 году под эгидой Министерства Обороны США был создан язык Ada. Язык замечателен тем, что очень много ошибок может быть выявлено на этапе компиляции. Кроме того, поддерживаются многие аспекты программирования, которые часто отдаются на откуп операционной системе (параллелизм, обработка исключений). В 1995 году был принят стандарт языка Ada 95, который развивает предыдущую версию, добавляя в нее объекно-ориентированность и исправляя некоторые неточности. Оба этих языка не получили широкого распространения вне военных и прочих крупномасштабных проектов (авиация, железнодорожные перевозки). Основной причиной является сложность освоения языка и достаточно

громоздкий синтаксис[1, с.345].

Разработчики Ada прежде всего беспокоились о:

    1. надежности и эксплуатационных качествах программ;
    2. программировании, как разновидности человеческой деятельности; эффективности.

Выводы: Объективно-ориентированный подход отражается в топологии новейших языков высокого уровня. В главе приведены несколько примеров и особенностей объективно-ориентированных языков.

Глава 4. Достоинства и недостатки объектно-ориентированного проектирования

Гради Буч сформулировал главное достоинство объектно-ориентированного подхода: объектно-ориентированные системы более открыты и легче поддаются внесению изменений, поскольку их конструкция базируется на устойчивых формах[1]. Это дает возможность системе развиваться постепенно и не приводит к полной ее переработке даже в случае существенных изменений исходных требований.

Объектно-ориентированный подход также имеет ряд преимуществ:

  1. Объектная декомпозиция дает возможность создавать программные системы меньшего размера путем использования общих механизмов, обеспечивающих необходимую экономию выразительных средств. Использование объектного подхода существенно повышает уровень унификации разработки и пригодность для повторного использования не только программ, но и проектов, что в конце концов ведет к созданию среды разработки и переходу к сборочному созданию ПО. Системы зачастую получаются более компактными, чем их структурные эквиваленты, что означает не только уменьшение объема программного кода, но и удешевление проекта за счет использования предыдущих разработок[3, с.83].
  2. Объектная декомпозиция уменьшает риск создания сложных систем ПО, так как она предполагает эволюционный путь развития системы на базе относительно небольших подсистем. Процесс интеграции системы растягивается на все время разработки, а не превращается в единовременное событие[2, стр.33-34].
  3. Объектная модель вполне естественна, поскольку в первую очередь ориентирована на человеческое восприятие мира, а не на компьютерную реализацию.
  4. Объектная модель позволяет в полной мере использовать выразительные возможности объектных и объектно-ориентированных языков программирования.

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

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

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

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

  1. Динамическое связывание методов. Обеспечение полиморфного поведения объектов приводит к необходимости связывать методы, вызываемые программой не на этапе компиляции, а в процессе исполнения программы, на что тратится дополнительное время[3, с.93].
  2. Значительная глубина абстракции. ООП-разработка часто приводит к созданию «многослойных» приложений, где выполнение объектом требуемого действия сводится к множеству обращений к объектам более низкого уровня. В таком приложении происходит очень много вызовов методов и возвратов из методов, что, естественно, сказывается на производительности.
  3. Инкапсуляция снижает скорость доступа к данным. Запрет на прямой доступ к полям класса извне приводит к необходимости создания и использования методов доступа[1, с. 86].
  4. Высокие начальные затраты. При переходе от структурного подхода к объектному, как при всякой смене технологии, необходимо вкладывать деньги в приобретение новых инструментальных средств, а также расходы на обучение.

Но стоит заметить, что многие эффекты снижения производительности могут сглаживаться или даже полностью устраняться за счёт качественной оптимизации кода компилятором.

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

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

требует большего времени для разработки. Объектное – когда важна управляемость проекта и его модифицируемость, а также скорость разработки.

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

Заключение

Объектно-ориентированное проектирование - проверенная технология. Этот метод проектирования успешно используется для создания множества сложных систем в самых разных областях.

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

Сегодня потребность в сложных программных системах расчета очень быстро растет. Ценностью объективно-ориентированного подхода является обеспечение легкости, наглядности и эффективности представления моделей Также ее достоинством является возможность автоматической генерации кода на основе построения моделей.

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

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

Библиография

  1. Буч, Г. Объектно-ориентированный анализ и проектирование с примерами приложений / Г. Буч, Р.А. Максимчук, М.У. Энгл и др. – М.: Вильямс, 2010. – 720 с.
  2. Лафоре, Р. Объектно-ориентированное программирование в С++ / Р. Лафоре. – СПб.: Питер, 2015. – 928 с
  3. Мамонова Т.Е. Информатика. Общая информатика. Основы языка C++: учебное пособие / Т.Е. Мамонова; Томский политехнический университет. - Томск: Изд-во Томского политехнического университета, 2011. - 206 с
  4. Орлов С. Технологии разработки программного обеспечения / С.Орлов. — СПб.: Питер, 2002. — 464 с.
  5. Основы разработки программного обеспечения вычислительной системы: Учебное пособие / И.В. Милованов, В.И. Лоскутов– Тамбов : Изд-во ГОУ ВПО ТГТУ, 2011. – 88 с.
  6. Ананьев П.И., Кайгородова М.А. Основы баз данных,2-еизд..: Учебное пособие/ Алт. госуд. технич.ун-тим. И.И. Ползунова.- Барнаул: 2015.- 189.
  7. Программирование. Учебное пособие / Н.А. Давыдова, Е.В. Боровская – М.: БИНОМ. Лаборатория знаний, 2012. –238 с.
  8. Васильев, А.Н. C#. Объектно-ориентированное программирование / А.Н. Васильев. – СПб.: Питер, 2012. – 320 с.
  9. Иванова Г.С. Объектно-ориентированное программирование. Учебник / Г.С. Иванова, Т.Н. Ничушкина. – М.: МГТУ им. Н. Э. Баумана, 2014. – 456 с
  10. Объектно-ориентированное программирование. Язык Smalltalk / Ю.А. Кирютенко, В.А. Савельев. — М.: Вузовская книга, 2006. — 328 с.
  11. Объектно-ориентированное программирование в действии/ Т. Бадд: пер. с англ. А. Бердникова СПб.: Питер, 1997. –460 с
  12. Ашарина, И.В. Язык С++ и объектно-ориентированное программирование в С++. Лабораторный практикум. Учебное пособие / И.В. Ашарина. – М.: Горячая Линия – Телеком, 2015. – 232 с.
  13. Лесневский, А.С. Объектно-ориентированное программирование для начинающих / А.С. Лесневский. – М.: Бином. Лаборатория знаний, 2010. – 232 с.
  14. И.П. Бесценный, Е.Н. Султанкин. Объектно-ориентированный анализ информационной системы для периодических изданий // Математические структуры и моделирование 2011, вып. 23, с. 49–57
  15. С.С. Гайсарян Объектно-ориентированные технологии проектирования прикладных программных систем. URL: http://lab.nix.ru/oop.pdf