Файл: Применение объектно-ориентированного подхода при проектировании информационной системы (История развития технологий разработки программ).pdf
Добавлен: 03.04.2023
Просмотров: 330
Скачиваний: 4
Введение
Развитие современного информационного общества предъявляет значительные требования к автоматизированным системам, которые становятся реальным активом, неотъемлемой частью и залогом нормального функционирования и работы организаций. Процесс разработки и внедрения автоматизированных информационных систем становится все более сложной задачей, что связано как с применением современных способов разработки, так и необходимостью соблюдения требований по защите информации.
Процесс внедрения информационных технологий на сегодняшний день проходит стадию построения интегрированных информационных систем. Производится централизация информационных ресурсов, специалисты, работающие в удаленных офисах, получают возможности доступа к центральным серверам организаций, расширяются области использования систем электронного документооборота с применением криптографических систем и технологий защиты информации. Таким образом, в настоящее время автоматизация бизнес-процессов на предприятиях является актуальной задачей и способствует повышению эффективности работы организаций в целом.
Объектом исследования является технология разработки программного обеспечения.
Предмет исследования – использование объектно-ориентированного подхода (ООП) в процессе разработки приложений.
Целью данной работы является анализ использования объектно-ориентированного подхода (ООП) в процессе разработки приложений.
Задачи работы:
- анализ эволюции развития подходов к разработке программного обеспечения;
- анализ основных принципов создания моделей объектов предметной области;
- анализ основных принципов разработки приложений с использованием ООП;
- анализ стадий разработки проектов с использованием ООП;
- анализ средств разработки приложений с использованием ООП.
1.Структурные элементы объектно-ориентированного программирования
1.1. История развития технологий разработки программ
Технологии программирования включают совокупность методик и средств разработки (написания) программ и порядка использования данных методов и средств.
На ранних стадиях развития технологий разработки программ, когда их разработка проводилась в виде последовательно записанных машинных команд, отсутствовали специализированные технологии программирования.
Первые элементы технологии разработки программ были связаны с представлением кода через последовательность операторов. Написанию программного кода в форме последовательности команд предшествовала разработка алгоритма в форме блок-схемы, в которая отражалась последовательность использования операторов и описывались переходы между ними. Использование операторного подхода позволило проводить разработку первых программ для автоматизации разработки ПО.
С ростом сложности программных кодов программ получил распространение подход, связанный с разделением программ на обособленные элементы с оформлением их в форме подпрограмм. Некоторые из типовых подпрограмм, выполняющих стандартные операции, объединялась в библиотеки, модули которых можно было вызывать из рабочих программ и далее использовать для проведения вычислений.
Принцип использования библиотек при разработке программ используется в процедурном программировании, согласно которому разработка программ проводится через комбинацию множества библиотек.
Дальнейшее развитие технологий программирования было связано с принципами структурного программирования, в соответствии с которыми программы в целом и отдельные процедуры рассматриваются как последовательность канонических элементов, включающих линейные участки, циклы и разветвления. Появились возможности чтения и проверки программ как последовательного текста, что позволило ускорить процесс разработки приложений программистами. С целью повышения уровня структурированности программы выдвигались требования к большему уровню независимости подпрограмм, которые связываются с вызывающими их программами только через передачу им аргументов. Использование в подпрограммах переменных, которые принадлежат другим процедурам или главной программе, стало неэффективным.
Принципы процедурного и структурного программирования затронули прежде всего процессы, связанные с описанием алгоритмов в форме последовательности команд, которые посредством проводимых вычислений приводят к необходимому результату. Для решения специальных задач были разработаны языки программирования, которые ориентировались на определенный класс задач: например, СУБД, задачи имитационного моделирования, поддержки принятия решений и др.
При проведении разработки трансляторов больший приоритет отдавался процессу обнаружения ошибок в исходных кодах программ, что обеспечивало сокращение временных затрат на отладку программ.
Применение программ в самых разных областях человеческой деятельности привело к необходимости повышения надежности всего программного обеспечения. Одним из направлений совершенствования языков программирования стало повышения уровня типизации данных. Теория типов данных исходит из того, что каждое используемое в программе данное принадлежит одному и только одному типу данных. Тип данного определяет множество возможных значений данного и набор операций, допустимых над этим данным. Данное конкретного типа в ряде случаев может быть преобразовано в данное другого типа, но такое преобразование должно быть явно представлено в программе. В зависимости от степени выполнения перечисленных требований можно говорить об уровне типизации того или иного языка программирования. Стремление повысить уровень типизации языка программирования привело к появлению языка Паскаль, который считается строго типизированным языком, хотя и в нем разрешены некоторые неявные преобразования типов, например, целого в вещественное. Применение строго типизированного языка при написании программы позволяет еще при трансляции исходного текста выявить многие ошибки использования данных и этим повысить надежность программы. Вместе с тем строгая типизация сковывала свободу программиста, затрудняла применение некоторых приемов преобразования данных, часто используемых в системном программировании. Практически одновременно с Паскалем был разработан язык Си, в большей степени ориентированный на системное программирование и относящийся к слабо типизированным языкам.
Все универсальные языки программирования, несмотря на различия в синтаксисе и используемых ключевых словах, реализуют одни и те же канонические структуры: операторы присваивания, циклы и разветвления. Во всех современных языках присутствуют предопределенные (базовые) типы данных (целые и вещественные арифметические типы, символьный и, возможно, строковый тип), имеется возможность использования агрегатов данных, в том числе массивов и структур (записей). Для арифметических данных разрешены обычные арифметические операции, для агрегатов данных обычно предусмотрена только операция присваивания и возможность обращения к элементам агрегата. Вместе с тем при разработке программы для решения конкретной прикладной задачи желательна возможно большая концептуальная близость текста программы к описанию задачи. Например, если решение задачи требует выполнения операций над комплексными числами или квадратными матрицами, желательно, чтобы в программе явно присутствовали операторы сложения, вычитания, умножения и деления данных типа комплексного числа, сложения, вычитания, умножения и обращения данных типа квадратной матрицы. Решение этой проблемы возможно несколькими путями:
- Построением языка программирования, содержащего как можно больше типов данных, и выбором для каждого класса задач некоторого подмножества этого языка. Такой язык иногда называют языком-оболочкой. На роль языка-оболочки претендовал язык ПЛ/1, оказавшийся настолько сложным, что так и не удалось построить его формализованное описание. Отсутствие формализованного описания, однако, не помешало широкому применению ПЛ/1 как в Западной Европе, так и в СССР.
- Построением расширяемого языка, содержащего небольшое ядро и допускающего расширение, дополняющее язык типами данных и операторами, отражающими концептуальную сущность конкретного класса задач. Такой язык называют языком-ядром. Как язык-ядро были разработаны языки Симула и Алгол-68, не получившие широкого распространения, но оказавшие большое влияние на разработку других языков программирования.
Дальнейшим развитием второго пути явился объектно-ориентированный подход к программированию, рассматриваемый в следующем параграфе.
1.2 Принципы объектно-ориентированного подхода при разработке программного обеспечения
Основное отличие структурного и объектно-ориентированного подхода связано со способом декомпозиции системы. При использовании объектно-ориентированного подхода применяется объектная декомпозиция, описание статической структуры системы проводится в терминологии объектов и связей между ними, а описание поведения системы проводится с использованием терминологии обмена информацией между объектами. Каждому объекту системы свойственно собственное поведение, моделирующее поведение объекта реального мира. Термин "объект" первоначально был использован в 1990г. в технической документации, когда делались попытки модернизации традиционных подходов фон Неймана и преодоления барьера разработками высокого и низкого уровней абстрагирования.
Объектный подход использовался в языках программирования Simula, Smalltalk, C++, Object Pascal. Данный подход предполагает использование моделей данных типа «Сущность - Связь».
Концептуальная основа объектно-ориентированного подхода включает следующие элементы [7]:
- алгоритмы абстрагирования (abstraction);
- алгоритмы инкапсуляции (encapsulation);
- принципы модульности (modularity);
- принципы иерархичности (hierarchy).
Помимо основных применяются также дополнительные элементы разработки программ, не являющиеся в отличие от основных строго обязательными [4]:
- принципы типизации (typing);
- принципы параллелизма (concurrency);
- принципы устойчивости (persistence).
Принципы абстрагирования связаны с выделением основных характеристик объекта предметной области, отличающих его от всех других типов объектов, что позволяет четко определять его концептуальные границы относительно дальнейшего рассмотрения и анализа. С помощью абстрагирования выделяется основные свойства объекта предметной области, что позволяет выделять самые существенные особенности его поведения от особенностей их реализации. Выбор правильного набора абстракций для моделируемой предметной области является главной задачей при объектно-ориентированном проектировании [8].
Инкапсуляция – процесс, связанный с отделением друг от друга отдельных составляющих объекта, которые определяют его устройство и принципы поведения. Инкапсуляция используется для изоляции интерфейса объекта, отражающего особенности его внешнего поведения, способов внутренней реализации объекта. При использовании объектного подхода предполагается, что собственные ресурсы, которые используются только методами самого класса, являются скрытыми от внешней среды. При абстрагировании и инкапсуляции используются взаимодополняющие операции: при абстрагировании фокусируется внимание на внешних свойствах объекта, при инкапсуляции (или, иначе, ограничении доступа) устанавливаются ограничения для объектов-пользователей на различие внутреннего устройства объекта.
1.2.1 Объектно-ориентированный подход
Модульность – это свойство систем, которое предполагает возможности их декомпозиции на ряд внутренних составляющих, не имеющих связей между собой модулей. Посредством инкапсуляции и модульности проводится создание барьеров между абстракциями.
Иерархия представляет собой ранжированную или упорядоченную систему абстракций, с расположением их по уровням в соответствии с заданными принципами. Основные виды иерархических структур для сложных систем включают структуру классов (классификация по номенклатуре) и структуру объектов (классификация по составу). В качестве примеров иерархии классов можно рассматривать задачи простого и множественного наследования (в которых в одном классе используется структурная или функциональная части соответственно одного или нескольких других классов). Примерами иерархии объектов являются задачи агрегации.
Типизация представляет собой совокупность ограничений, накладываемых на класс объектов и препятствующих взаимозаменяемости разных классов (либо значительно сужающих их возможности). С помощью типизации возможно реализовать защиту от использования объектов одного класса вместо другого, либо создать возможности управления таким использованием.