Слайд 1ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ПОДХОД К РАЗРАБОТКЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Слайд 2ОБЪЕКТНЫЙ ПОДХОД
По мере развития программирования выделились две основные тенденции:
Переход от программирования
отдельных деталей к программированию более крупных компонентов,
Совершенствование языков программирования высокого уровня.
Задачи, решаемые программистами, становились все сложнее, и при их реализации методами структурного проектирования возникали определенные трудности. В результате был создан новый подход, в основу которого было положено понятие «ОБЪЕКТ», которое объединило в себе данные и обрабатывающие их функции.
Если рассматривать объект, как часть чего-то большего, и базируясь на этом строить иерархию, то мы получим структуру объектов (или структурную иерархию). Если рассматривать объект как нечто, принадлежащее к определенному типу – классу, то мы получим структуру классов (или типовую иерархию).
Слайд 3ОБЪЕКТНЫЙ ПОДХОД
Объектно-ориентированное проектирование базируется на объектной декомпозиции. В структурном проектировании под
декомпозицией мы понимали такое разделение системы, при котором каждый модуль выполняет одну из функций, т. е. один из этапов общего процесса. И этот принцип лежал в основе построения иерархической структуры системы.
При объектной декомпозиции систему можно разделить, выбрав в качестве критерия декомпозиции принадлежность ее элементов к различным абстракциям данной предметной области.
Абстракцией является такая идея, которую можно изложить, проанализировать и понять независимо от механизмов ее реализации. Обнаружение общих абстракций и их механизмов облегчает понимание системы.
Словарем предметной области будем называть набор понятий для данной задачи.
Слайд 4ОБЪЕКТНЫЙ ПОДХОД
Если при функциональной декомпозиции мы разделяли задачу на шаги:
получить изменения
,
прибавить к контрольной сумме, то есть при объектно-ориентированной декомпозиции мы будем идентифицировать объекты:
- файл изменений,
- контрольная сумма.
Хотя обе эти конструкции служат для решения одной и той же задачи, они делают это различными способами.
К вопросу о том, какой же способ декомпозиции более правильный, необходимо подходить комплексно, т.е. попытаться разложить систему, как одним, так и другим способом. Однако невозможно сконструировать систему, применяя одновременно и тот и другой метод, т.к. они различны по сути.
Слайд 5ОБЪЕКТНЫЙ ПОДХОД
Объектная декомпозиция предполагает эволюционный путь развития системы, базирующийся на устойчивых
промежуточных формах. При этом снижается риск создания сверх сложной системы, поскольку система развивается на базе небольших подсистем, что делает систему более открытой, гибкой и легко модернизируемой.
Правильно разделив систему на небольшие автономные подсистемы и по отдельности отладив каждую из них, можно получить конечный продукт практически свободный от ошибок.
Слайд 6СЛОЖНАЯ СИСТЕМА С ТОЧКИ ЗРЕНИЯ ОБЪЕКТНОГО ПОДХОДА
1) Сложная система представляется в
виде иерархии подсистем и состоит из взаимодействующих подсистем, каждая из которых так же может быть разделена на подсистемы, и так до самых нижних уровней абстракции.
2) Выбор нижнего уровня абстракции произволен и зависит от наблюдателя. И, следовательно, нижний уровень для одного может оказаться достаточно высоким для другого. Кроме того, в процессе развития системы объекты, которые на начальных этапах считались сложными на более поздних этапах рассматриваются, как элементы нижних уровней абстракции, из которых строятся более сложные компоненты.
3) Иерархическая система называется разложимой, если она может быть разделена на независимые части и почти разложимой, если ее составляющие не являются абсолютно независимыми.
Слайд 7СЛОЖНАЯ СИСТЕМА С ТОЧКИ ЗРЕНИЯ ОБЪЕКТНОГО ПОДХОДА
4) Сложная система, как правило
состоит из нескольких подсистем разного типа, которые реализуются в различном порядке и в разных комбинациях.
5) Сложная иерархическая система имеет тенденцию к развитию во времени. Причем этот процесс идет значительно быстрее, если для нее существуют устойчивые промежуточные формы.
Если объединить понятия структуры классов, структуры объектов и вышеперечисленные признаки сложной системы, то легко заметить, что фактически любую программную систему можно представить одной и той же формой сложной декомпозиции.
Слайд 8ОСНОВНЫЕ ПОЛОЖЕНИЯ ОБЪЕКТНОГО ПОДХОДА
Методика ООП основана на описании и обработке классов
и объектов.
Каждый объект в системе обладает определенными свойствами и поведением, моделирующим поведение реального объекта, и принадлежит к определенному классу.
Объект можно определить как некую сущность, которая четко проявляет свое поведение. Главным в определении объекта является объединение идей абстрагирования данных и алгоритмов. Объект обладает целостностью, которую не следует нарушать. Объект может менять свое состояние, поведение, управлять или подвергаться управлению со стороны других объектов. Каждый объект в системе обладает неизменными качествами, но может менять свое состояние.
ПРИМЕР. Рассмотрим в качестве объекта лифт:
Он может быть исправным или нет.
Двигаться вверх, вниз или не двигаться вовсе.
Может быть загруженным или пустым.
Грузовым или пассажирским, оставаясь при этом тем, что он есть и двигаясь в пределах своих направляющих
Слайд 9ОСНОВНЫЕ ПОЛОЖЕНИЯ ОБЪЕКТНОГО ПОДХОДА
При создание программы с использованием объектного подхода можно
выделить три основных этапа:
Объектно-ориентированный анализ (ООА).
Объектно-ориентированное проектирование (OOD).
Объектно-ориентированное программирование (ООР).
Объектно-ориентированный анализ направлен на создание моделей близких к реальности. Это методология, при которой требования формируются на основе классов и объектов, которые составляют словарь предметной области. На результатах ООА строятся модели, на которых базируется OOD, создающее основу для ООР. Говоря о ООА нельзя не вспомнить о прикладном анализе. Его методы аналогичны методам ООА, но если ООА используется для решения какой-то конкретной задачи, то прикладной анализ направлен на поиск общих классов и объектов, свойственных всем переменным внутри определенной сферы применения.
Слайд 10ОСНОВНЫЕ ПОЛОЖЕНИЯ ОБЪЕКТНОГО ПОДХОДА
Если при проектировании системы возникают сложности в определении
ключевых абстракций, прикладной анализ может помочь, указав на абстракции, которые были определены в родственных системах. В прикладном анализе можно выделить следующие этапы:
Построение каркаса модели.
Изучение уже существующих систем данной предметной области.
Определение схожести и различий между разрабатываемой системой и уже существующей (после консультации с экспертами, в качестве которых могут выступать пользователи, т. е. Специалисты, которые не являются программистами, но близко знакомы с исследуемой проблемой),
Пересмотр существующей системы на основе предъявляемых требований.
Слайд 11ОСНОВНЫЕ ПОЛОЖЕНИЯ ОБЪЕКТНОГО ПОДХОДА
Объектно-ориентированное программирование основано на представлении программы в виде
совокупности объектов, причем каждый объект является реализацией определенного класса, а классы образуют иерархию на принципах наследования, которое наряду с полиморфизмом и инкапсуляцией можно рассматривать, как основные концепции ООР.
Можно выделить три основных требования, предъявляемых к ООР:
В качестве элемента конструкции должны использоваться не алгоритмы а объекты.
Каждый объект является реализацией какого-нибудь класса.
Классы должны быть организованы иерархически.
Если методология программирования подразумевает правильное и эффективное использование механизмов языков программирования, то методы проектирования основное внимание уделяют правильности и эффективности структурирования сложной системы.
Слайд 12ОСНОВНЫЕ ПОЛОЖЕНИЯ ОБЪЕКТНОГО ПОДХОДА
Объектно-ориентированное проектирование – это методология проектирования, которая объединяет
процесс объектной декомпозиции и приемы и представления логической, физической, статической и динамической моделей проектируемой системы, т. е. используется многообразие приемов представления моделей отражающих логическую (структура классов и объектов) и физическую (архитектура модулей и процессов) структуры системы. Общий вид модели объектно-ориентированного проектирования можно представить следующим образом:
Слайд 13СОСТАВЛЯЮЩИЕ ОБЪЕКТНОГО ПОДХОДА
При объектном подходе можно выделить четыре главных составляющих, без
которых подход не может считаться объектно-ориентированным :
Абстрагирование
Ограничение доступа
Модульность
Иерархия
Кроме главных существуют три дополнительных, которые являются необязательными:
Типизация
Параллелизм
Устойчивость
Слайд 14СОСТАВЛЯЮЩИЕ ОБЪЕКТНОГО ПОДХОДА
Абстрагирование. Оно заключается в нахождении сходств, не обращая внимания
на различия между рассматриваемыми объектами, т. е. Это упрощенное описание системы при котором существенные для рассмотрения и использования детали выделяются, а несущественные, на данный момент, опускаются.
Абстракция – это такие существенные характеристики некоторого объекта, которые отличают его от всех других видов объектов, т. е. четко определяют особенности данного объекта с точки зрения его дальнейшего рассмотрения и анализа.
Абстрагирование концентрирует внимание на внешних особенностях объекта, позволяет определить самые существенные из них и отделить их от деталей реализации. Такое разделение поведения и осуществления называется барьером абстракции.
Слайд 15СОСТАВЛЯЮЩИЕ ОБЪЕКТНОГО ПОДХОДА
Абстракция должна охватывать только самую суть объекта. Это называется
принципом наименьшей выразительности.
1. Существует множество абстракций рассмотрим некоторые из них:
2. Абстракция сущности объекта – объект представляет собой модель существенных сторон предметной области.
3. Абстракция поведения – объект состоит из множества операций, каждая из которых выполняет определенную функцию.
4. Абстракция в виде виртуальной машины – объект включает группу операций виртуальной машины, которые используются либо для управления объектом, либо соответствует функциям нижнего уровня (т. е. Либо управляют прерываниями, либо сами являются прерываниями).
5. Произвольная абстракция – объект включает в себя набор независимых по отношению друг к другу операций и т. д.
Слайд 16СОСТАВЛЯЮЩИЕ ОБЪЕКТНОГО ПОДХОДА
Выбор достаточного множества абстракций для заданной предметной области является
одной из основных задач OOD. Наиболее интересной из перечисленных выше абстракций является абстракция сущности объекта, потому что она соответствует словарю предметной области.
Описание поведения объекта заключается в описании операций, которые объект выполняет над другими объектами и операций, которые выполняются над данным объектом. Это называется протоколом.
Все абстракции обладают, как статическими, так и динамическими свойствами.
Пример. Рассмотрим объект – файл. Он требует определенного объема памяти, имеет имя и содержание. Эти атрибуты являются статическими, а их конкретные значения, которые изменяются в процессе использования объекта, являются динамическими.
Протокол полностью определяет поведение объекта, как со статической, так и с динамической точки зрения.
Слайд 17СОСТАВЛЯЮЩИЕ ОБЪЕКТНОГО ПОДХОДА
Ограничение доступа. Созданию абстракции какого-нибудь объекта предшествует решение о
способе ее реализации, который должен быть скрыт и защищен от большинства объектов-пользователей, которые обращаются к данной абстракции. Иначе говоря, никакая часть сложной системы не должна зависеть от подробностей реализации и внутреннего устройства других частей той же системы. Ограничение доступа дает возможность вносить в программу изменения, сохраняя ее надежность, целостность и сводя к минимуму затраты.
Абстрагирование и ограничение доступа взаимодополняют друг друга. Абстрагирование концентрирует внимание на внешних особенностях объекта, а ограничение доступа не позволяет объектам-пользователям углубляться во внутреннее устройство объекта. Как в том, так и в другом случае объекты верхних уровней абстракции не связаны непосредственно с подробностями их реализации на более низких уровнях.
Рассмотрим ограничение доступа на примере стека. Пусть у нас объявлен массив, организованный, как стек. Мы можем пользоваться им как стеком, но можем так же, при необходимости, обратиться непосредственно к каждому элементу, т. к. объявлен он как массив. А если мы объявим его, как стек, то доступ будет ограничен, и мы сможем им пользоваться как стеком и только.
Слайд 18СОСТАВЛЯЮЩИЕ ОБЪЕКТНОГО ПОДХОДА
Модульность. В таких ЯП, как С++ модульность является элементом
конструкции, а классы и объекты составляют логическую структуру системы. Эти абстракции организуются в модули, формируя физическую структуру системы.
Модульность – это свойство системы, связанное с возможностью ее декомпозиции на ряд тесно связанных и взаимодействующих модулей.
Иерархия. Если не считать самых простых случаев, число абстракций в системе намного превышает возможность их одновременного контроля. Ограничение доступа несколько упрощает задачу, убирая из рассмотрения внутреннее устройство абстракции. Модульность в свою очередь упрощает задачу, объединяя логически связанные абстракции в группы, на этого не достаточно. Создание иерархической структуры из абстракций значительно упрощает понимание сложной системы. Иерархию можно рассматривать, как упорядоченную систему абстракций.
При объектном подходе выделяются две иерархические структуры: структура классов (или иерархия по типу) и структура объектов или (иерархия по составу).
Основным видом иерархии по типу является иерархия наследования. Наследование – это такое соотношение между классами, когда один класс использует структурную или функциональную часть другого класса или классов, соответственно простое или множественное наследование.
Слайд 19СОСТАВЛЯЮЩИЕ ОБЪЕКТНОГО ПОДХОДА
Типизация. Тип – это точное определение свойств, строения или
поведения которые присущи некоторой совокупности объектов. Типизация является ограничением, налагаемым на класс объектов, которое препятствует взаимозамене различных классов.
Типизация позволяет выполнить описание абстракции т. е., что реализуется поддержка проектных решений на уровне ЯП. ЯП могут быть типизированы строго и нестрого.
Строгая типизация ограничивает перечень абстракций, которые могут быть использованы в конкретных процедурах, т. е. ЯП строго типизирован, если требует описания типа каждой переменной, параметра или поля. В таких ЯП все переменные проходят проверку на соответствие типов.
Если концепция строгой типизации связана с контролем соответствия типов, то концепция связей относится ко времени, когда имена связываются с определенными типами. Статическая или ранняя связь означает, что типы всех переменных определены уже на этапе компиляции. При динамической или поздней связи типы переменных определяются только на этапе выполнения программы.
Концепции типизации и связей являются независимыми, а следовательно ЯП может быть строго типизирован как со статическими, так и с динамическими связями.
Слайд 20СОСТАВЛЯЮЩИЕ ОБЪЕКТНОГО ПОДХОДА
Параллелизм. Каждая программа включает по крайней мере один канал
управления. В параллельной системе таких каналов может быть несколько. Некоторые из них могут быть временными, а другие сохраняться в течении всего времени выполнения программы. Реальная параллельность достигается только в многопроцессорных системах, а системы с одним процессором имитируют параллельность только за счет разделения времени. Параллелизм связан с абстрагированием процессов и синхронизацией. Объект является основой, объединяющей обе эти концепции. Каждый объект, как абстракция реальности может представлять собой отдельный канал управления, т. е. абстракцию процесса. Такой объект называется активным. Для сложных систем, построенных на основе OOD реальность может быть представлена, как совокупность взаимодействующих объектов , часть которых является активными. Исходя из этого, параллелизм можно определить как свойство объектов находиться в активном или пассивном состоянии. Проще говоря, параллелизм – это возможность одновременного функционирования некоторого числа объектов.
Слайд 21СОСТАВЛЯЮЩИЕ ОБЪЕКТНОГО ПОДХОДА
Устойчивость. Каждый объект в программе занимает определенное место и
существует в течении определенного времени. Он может существовать или во время определенных вычислений, или в течении всего времени выполнения программы, а объекты, хранящиеся в БД существуют вне пределов программы.
Существует несколько видов устойчивости объектов:
Промежуточные результаты вычислений
Локальные переменные
Глобальные переменные
Данные, сохраняемые между вызовами основной программы
Данные, не изменяющиеся в различных версиях программы
Данные, которые переживают программу
Устойчивость позволяет сохранять объектам не только свое состояние, но и принадлежность к определенному классу. Устойчивость – это свойство объекта существовать во времени независимо от процесса, породившего этот объект, и (или) в пространстве, т. е. возможность перемещения объекта из адресного пространства в котором он был создан.
Слайд 22ОБЪЕКТЫ
Объект с точки зрения его восприятия человеком можно определить, как нечто
воспринимаемое мыслью, или как нечто, на что направлена мысль или действие, или как осязаемый или видимый предмет.
Впервые в программировании это понятие было введено в языке simula и означало какой-либо аспект моделируемой реальности.
Обобщив сказанное выше можно дать следующее определение объекта:
Объект представляет собой опознаваемую сущность, предмет или блок – реальные или абстрактные, имеющие важное функциональное значение в данной предметной области.
С точки зрения ООР можно дать следующее определение:
Объект – это некоторая сущность, обладающая состоянием, поведением и индивидуальностью.
Структура и состояние сходных объектов определяет общий для них класс. Понятия объект и экземпляр класса являются взаимозаменяемыми.
Слайд 23ОБЪЕКТЫ
Поведение объекта определяется последовательностью совершаемых над ним действий.
Состояние объекта характеризуется перечнем
всех возможных (обычно статических) свойств данного объекта и текущими значениями (как правило динамическими) каждого из этих свойств.
К числу свойств объекта относятся присущие ему или приобретенные характеристики, делающие данный объект самим собой.
Все свойства объекта характеризуются значениями их параметров. Эти значения могут быть простыми количественными характеристиками или определяться при помощи других объектов.
ПРИМЕР. Рассмотрим лифт: его состояние можно определить
- при помощи цифры, обозначающей номер этажа на котором он в данный момент находится;
- наличием пассажиров, которых можно рассматривать, как самостоятельные объекты;
- количеством пассажиров, т. е количеством самостоятельных объектов, характеризующих состояние данного объекта.
Слайд 24ОБЪЕКТЫ
Тот факт, что каждый объект характеризуется состоянием означает, что он занимает
определенное пространство физически или в памяти машины. Внутри каждого объекта в защищенном виде хранятся элементы, характеризующие его состояние, а состояние системы в целом распределено между составляющими ее объектами.
Объекты не могут существовать изолированно. Они воздействуют сами или подвергаются воздействию со стороны других объектов. Поведение характеризует, как объект воздействует или подвергается воздействию с точки зрения изменения состояния взаимодействующих объектов. Иначе говоря поведение объекта полностью определяется его действиями.
Операцией называется определенное воздействие одного объекта на другой с целью вызвать определенную реакцию. В объектно-ориентированных языках программирования операции, выполняемые над данным объектом называются методами или методической частью объекта.
Слайд 25ОБЪЕКТЫ
Можно выделить 5 основных видов операций над объектами:
Модификатор (операция, которая изменяет
состояние объекта)
Селектор (операция, дающая доступ для определения состояния объекта без его изменения)
Итератор (операция доступа к содержимому объекта по частям в определенной последовательности)
Конструктор (операция создания и (или)инициализации объекта)
Деструктор (операция разрушения объекта и (или) освобождения занимаемой памяти)
Индивидуальность – это такие свойства объекта, которые отличают его от любого другого объекта.
В большинстве ЯП для идентификации временных объектов, их адресации используются имена переменных.
Слайд 26ОТНОШЕНИЯ МЕЖДУ ОБЪЕКТАМИ
Отношения между двумя объектами основываются на предположении, что каждый
объект имеет информацию о другом объекте: об операциях, которые над ним можно выполнять и об ожидаемом поведении. Рассмотрим два типа отношений между объектами: отношения использования или старшинства и отношения включения или родства.
Отношения использования. Каждый объект, включенный в эти отношения, может выполнять одну из трех следующих функций:
Воздействие, т. е объект может воздействовать, никогда не подвергаясь воздействию со стороны других объектов, что соответствует понятию – активный объект
Исполнение, в этом случае объект подвергается воздействию со стороны другого объекта, никогда не выступая в роли активного
Посредничество, такой объект может быть, как воздействующим, так и исполнителем, он создается для выполнения операций в интересах некоторого активного объекта или другого посредника
Слайд 27ОТНОШЕНИЯ МЕЖДУ ОБЪЕКТАМИ
Пересылка сообщений между объектами, как правило, однонаправлена, но встречаются
и двунаправленные связи. При пересылке сообщений от одного объекта к другому они должны быть определенным образом синхронизированы. Для последовательной системы такая синхронизация реализуется, как правило, через вызов подпрограмм. В параллельной системе ситуация значительно сложнее. Отсюда вытекает следующий способ классификации объектив:
Объект-транслятор – пассивный объект с одним каналом управления
Блокированный объект – пассивный объект с несколькими каналами управления
Параллельный объект – активный объект с несколькими каналами управления
Слайд 28ОТНОШЕНИЯ МЕЖДУ ОБЪЕКТАМИ
Отношение включения. Если некоторый объект можно определить, как состоящий
из других объектов, которые являются элементами состояния данного объекта, то это и характеризует отношение включения.
Отношения включения и использования тесно связаны. Отношения включения имеют то преимущество, что при их использовании сокращается число обрабатываемых объектов. Однако в этом случае возникает сильная зависимость между объектами, чего можно избежать в том случае, когда будут задействованы отношения использования.
Слайд 29КЛАССЫ
В то время, как объекты отражают конкретную сущность, определенную в пространстве
и во времени, класс определяет абстракцию, которая отражает сущность объекта, т. е. класс – это группа или множество объектов с общими свойствами или свойством.
С точки зрения ООD можно дать следующее определение: класс – это множество объектов, связанных общностью структуры и поведения.
Каждый объект является экземпляром какого-либо класса, а каждый класс может порождать любое необходимое количество объектов. Как правило классы статичны. Все их особенности и содержание определяется уже в процессе компиляции, а следовательно каждый создаваемый объект относится к строго определенному классу. Объект является динамической составляющей системы, и в процессе ее реализации может создаваться, модифицироваться и разрушаться. Объект не может быть классом, но класс может быть объектом. Класс, экземплярами которого являются классы называется метаклассом.
В то время, как объект существует и играет в системе определенную роль, класс содержит описание структуры и поведения всех объектов, связанных отношениями общности, то есть класс в системе играет роль соглашения о связях в отношении абстракции и всех ее реализаций. В языках со строгой типизацией и ранними связями нарушение таких соглашений можно выявить уже на этапе компиляции.
Слайд 30КЛАССЫ
Существует внешнее и внутреннее проявление класса. Интерфейсная часть описания класса соответствует
его внешнему проявлению, подчеркивает его абстрактность, но скрывает структуру и особенности поведения. (!!!!!Интерфейсная часть класса состоит из перечня действий, которые допускает описание других классов, констант, переменных, необходимых для полного определения данной абстракции)
Интерфейсную часть класса можно разделить на три составляющие:
Общедоступная – та часть, в которой даются определения, видимые для всех объектов пользователей
Защищенная, где даются определения, видимые только для объектов, относящихся к подклассам данного класса
Обособленная, в которой даются определения, скрытые для объектов всех других классов
Слайд 31ОТНОШЕНИЕ МЕЖДУ КЛАССАМИ
Существует 3 основных типа отношений между классами:
Разновидность, определяющая степень
общности,
Составная часть, которая определяет агрегатирование объектов (т. е. показывает, что какой-то объект является частью другого объекта),
Ассоциативность – т. е. смысловая связь между классами, которые не связаны никакими другими типами отношений.
Объектно-ориентированные ЯП реализуют перечисленных выше отношения несколькими общими способами:
Наследование
Использование
Представление
Метаклассы
Слайд 32ОТНОШЕНИЕ МЕЖДУ КЛАССАМИ
Особый подход к реализации наследования называется делегированием. В этом
случае объекты рассматриваются в качестве прототипов, которые делегируют свои свойства другим объектам, тем самым ограничивая потребность в создании новых классов.
Наследование является наиболее эффективным типом отношений. Его можно использовать как для отражения общности, так и для отражения ассоциативности.
Использование применимо для реализации агрегатирования.
Представление, как и наследование охватывает и общность и ассоциативность, но несколько иным способом.
Особым типом отношений является метакласс. Это класс, который позволяет рассматривать классы в качестве объектов.