Файл: Применение объектно-ориентированного подхода при проектировании информационной системы (История развития объектно-ориентированного подхода).pdf

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

Категория: Курсовая работа

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

Добавлен: 13.03.2024

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

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

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

Содержание:

ВВЕДЕНИЕ

Врач, строитель и программист поспорили о том, чья профессия древнее. Врач заметил: "В Библии сказано, что Бог создал Еву из ребра Адама. Это мог сделать только хирург, поэтому моя профессия самая древняя в мире". Его пере­бил строитель: "Однако, как сказано в Книге Бытия, еще раньше Бог сотворил из хаоса сначала небо, а потом — землю. Это было первое и, несомненно, наибо­лее впечатляющее строительство. Следовательно, дорогой доктор, вы ошибаетесь. Именно моя профессия самая древняя в мире". Услышав это, программист отки­нулся на спинку кресла, улыбнулся и спросил доверительным тоном: "Ну а кто же, по-вашему, создал хаос?"

"Чем сложнее система, тем она уязвимее". Трудно себе представить стро­ителя, размышляющего, а не вырыть ли еще один подвальный этаж под уже построенным стоэтажным зданием. Такое мероприятие было бы слишком доро­гим и опасным. Как ни странно, пользователи программного обеспечения, не задумываясь, просят делать аналогичные изменения в программах. Более того, он считают, что для программиста эта задача не представляет никаких трудностей.

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

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

  1. Изучить все существующие на данный момент стили программирования.
  2. Выяснить отличительные особенности объектно-ориентированного подхода
  3. Раскрыть основные принципы и понятия объектно-ориентированного подхода
  4. Рассмотреть наиболее распространенные объектно-ориентированные языки программирования.


ГЛАВА 1ТЕОРЕТИЧЕСКИЕ АСПЕКТЫ ПРИМЕНЕНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПОДХОДА

1.1. История развития объектно-ориентированного подхода

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

Языки процедурного программирования используются до сих пор, наиболее распространенные из них: ассемблер, С, Basic, Pascal.

Следующим этапом развития языков программирования стало появление функциональных языков, или аппликативных.

Первым таким языком был LISP.

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

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

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

Новую область в программировании открыло появления языка PROLOG. Это язык логического, или реляционного программирования. Сейчас существует уже появились и другие языки данного типа, но PROLOG является наиболее развитым и распространенным, кроме того, он используется при программировании систем искусственного интеллекта.


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

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

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

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

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

1.2. Основные понятия и принципы ООП

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

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


  1. Абстракция
  2. Инкапсуляция
  3. Модульность
  4. Иерархия

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

Естественно, программирование на на таких языках, как Smalltalk, Object Pascal, C++, Eiffel или Ada возможно и безприменения объектной модели, однако тогда проект будет похож на программы, написанные на соответствующих процедурных языках. Выразительная мощность объектно-ориентированного языка будет либо утеряна, либо искажена. Кроме того, что еще более важно, в этом случае про­граммисты вряд ли справятся со сложностью задачи.

Абстрагирование — один из основных методов, позволяющих справиться со сложностью. Даль (Dahl), Дейкстра (Dijkstra) и Хоар (Ноаге) утверждают: "Аб­страгирование проистекает из распознавания сходства между определенными объ­ектами, ситуациями или процессами в реальном мире, и является результатом решения сконцентрировать внимание на общих свойствах и проигнорировать раз­личия" [1]. Шоу (Show) считает абстракцией "упрощенное описание, или специ­фикацию системы, выделяющую одни свойства и затеняющую другие, а хорошая абстракция подчеркивает значимые детали и отбрасывает несущественные на дан­ный момент" [2]. Берзинс (Berzins), Грей (Gray) и Науман (Naumann) рекоменду­ют "признавать идею абстракцией только, если она может быть описана, понята и проанализирована независимо от механизма ее дальнейшей реализации" [3]. Объединив все эти точки зрения, можно сформулировать следующее определение абстракции:

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

Абстракция концентрирует внимание на внешнем представлении объекта и по­зволяет отделить существенные особенности поведения от их реализации. Абель-сон (Abelson) и Суссман (Sussman) назвали такое разделение поведения от его реа­лизации принципом минимальных обязательств (principle of least commitment) [4], в соответствии с которым интерфейс объекта должен обеспечивать только суще­ственные аспекты его поведения и ничего больше [5]. Существует также до­полнительный принцип наименьшего удивления (principle of least astonishment), согласно данному принципу абстракция должна полностью описывать поведение объек­та, ни больше и ни меньше.

"Существует целый спектр абстракций, начиная с объектов, почти точно соот­ветствующих реалиям предметной области, и заканчивая совершенно излишними объектами" [6]. Перечислим абстракции в порядке убывания их полезности.


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

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

• Абстракция виртуальная Объект, группирующий операции, которые, либо машины вместе используются на более высоком уровне управления, либо сами используют некоторый набор операций более низкого уровня

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

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

Согласно данной концепции объекты делятся на 2 категории – клиенты и серверы. Клиентом называется любой объект, использующий ресурсы другого объекта. А объекта, ресурсы которого используются – называется сервером. Поведение объекта характеризуется услугами, которые он оказывает другим объектам, и операциями, которые он может выполнять над другими объектами. Такой подход концентрирует внимание на внешних проявлениях объекта и приводит к идее, которую Мейер (Meyer) назвал контрактной моделью программирования [7]: внешнее проявление объекта определяет его контракт с другими объектами, подлежащий выполнению его внутренним устройством (часто во взаимодействии с другими объектами). Контракт фиксирует все предположения, которые объект-клиент мо­жет формулировать относительно поведения объекта-сервера. Иначе говоря, кон­тракт определяет ответственность объекта, т.е. его обязательное поведение [8].

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

Главной идеей абстракции является концепция инварианта. Инвариант (in­variant) — это логическое условие (истинное или ложное), которое должно выпол­няться всегда. Для каждой операции, ассоциированной с объектом, можно задать предусловия (инварианты, предполагаемые операцией) и постусловия (инвариан­ты, которым удовлетворяет операция). Нарушение инварианта противоречит кон­тракту, связанному с абстракцией. Если нарушается предусловие, то это значит, что клиент не соблюдает свои обязательства и сервер не в состоянии надежно функционировать. Аналогично, если нарушается постусловие, то свои обязатель­ства не выполняет сервер, так что клиент больше не может ему доверять. При­знаком нарушения некоего инварианта является исключительная ситуация. Неко­торые языки позволяют объектам генерировать исключительные ситуации, чтобы отменить дальнейшую обработку данных и предупредить о возникшей проблеме другие объекты, которые в свою очередь могут перехватывать и обрабатывать исключения.