Презентация на тему: » Методология объектно- ориентированного программирования.» — Транскрипт:
1 Методология объектно- ориентированного программирования
2 Объектно-ориентированный подход к проектированию основан на представлении предметной области задачи в виде множества моделей для независимой от языка разработки программной системы на основе ее прагматики. Объектно-ориентированный подход к проектированию основан на представлении предметной области задачи в виде множества моделей для независимой от языка разработки программной системы на основе ее прагматики.
3 Семантика (смысл программы с точки зрения выполняющего ее компьютера) и прагматика (смысл программы с точки зрения пользователей)
4 Объектно-ориентированный подход обладает преимуществами уменьшение сложности программного обеспечения; повышение надежности программного обеспечения; обеспечение возможности модификации отдельных компонентов программного обеспечения без изменения остальных его компонентов; обеспечение возможности повторного использования отдельных компонентов программного обеспечения.
Как МОЗГ решает в кого нам ВЛЮБИТЬСЯ?
5 Объекты Будем называть объектом понятие, абстракцию или любой предмет с четко очерченными границами, имеющий смысл в контексте рассматриваемой прикладной проблемы. Введение объектов преследует две цели: понимание прикладной задачи (проблемы); введение основы для реализации на компьютере. Объект — это мыслимая или реальная сущность, обладающая характерным поведением и отличительными характеристиками и являющаяся важной в предметной области. Каждый объект имеет состояние, обладает четко определенным поведением и уникальной идентичностью.
6 Состояние Состояние (state) — совокупный результат поведения объекта: одно из стабильных условий, в которых объект может существовать, охарактеризованных количественно; в любой момент времени состояние объекта включает в себя перечень (обычно статический) свойств объекта и текущие значения (обычно динамические) этих свойств.
7 Поведение В терминологии объектно-ориентированного подхода понятия «действие», «сообщение» и «метод» являются синонимами. Т.е. выражения «выполнить действие над объектом», «вызвать метод объекта» и «послать сообщение объекту для выполнения какого-либо действия» эквивалентны. Поведение (behavior) — действия и реакции объекта, выраженные в терминах передачи сообщений и изменения состояния; видимая извне и воспроизводимая активность объекта.
8 Уникальность Уникальность (identity) — свойство объекта; то, что отличает его от других объектов. В машинном представлении под параметром уникальности объекта чаще всего понимается адрес размещения объекта в памяти.
9 Классы Все объекты одного и того же класса описываются одинаковыми наборами атрибутов. Однако объединение объектов в классы определяется не наборами атрибутов, а семантикой. Класс — это шаблон поведения объектов определенного типа с заданными параметрами, определяющими состояние. Все экземпляры одного класса (объекты, порожденные от одного класса) имеют один и тот же набор свойств и общее поведение, то есть одинаково реагируют на одинаковые сообщения.
Точка. Запуск Threads, Учения по изоляции интернета, Отслеживание переписки в мессенджерах
10 Графическое представление класса в UML
11 Инкапсуляция Инкапсуляция (encapsulation) — это сокрытие реализации класса и отделение его внутреннего представления от внешнего (интерфейса).
12 Наследование Наследование (inheritance) — это отношение между классами, при котором класс использует структуру или поведение другого класса (одиночное наследование), или других (множественное наследование) классов. Наследование вводит иерархию «общее/частное», в которой подкласс наследует от одного или нескольких более общих суперклассов. Подклассы обычно дополняют или переопределяют унаследованную структуру и поведение.
14 Полиморфизм Слово «полиморфизм» греческого происхождения и означает «имеющий много форм».
15 Полиморфизм Для описанной выше иерархии классов, используя полиморфизм, можно написать следующий код: … Point p[] = new Point[1000]; p[0] = new Circle(); p[1] = new Box(); p[2] = new Line(); … for(int i = 0; i
16 Полиморфизм Под полиморфизмом в ООП понимают способность одного и того же программного текста x.M (где М — виртуальный метод) выполняться по-разному, в зависимости от того, с каким объектом связана сущность x. Полиморфизм гарантирует, что вызываемый метод M будет принадлежать классу объекта, связанному с сущностью x.
17 Типы отношений между классами агрегация (Aggregation); ассоциация (Association); наследование (Inheritance); метаклассы (Metaclass).
18 Агрегация Отношение между классами типа «содержит» (contain) или «состоит из» называется агрегацией, или включением. // определение класса Fish public class Fish < private Aquarium home; public Fish() < >> // определение класса Aquarium public class Aquarium < private Fish inhabitants[]; public Aquarium() < >>
19 Ассоциация Объекты одного класса ссылаются на один или более объектов другого класса, то ни в ту, ни в другую сторону отношение между объектами не носит характера «владения», или контейнеризации public class Programmer < private Computer computers[]; public Programmer() < >> public class Computer < private Programmer programmers[]; public Computer() < >>
20 Метаклассы Каждый класс, или описание, всегда имеет строгий шаблон, задаваемый языком программирования или выбранной объектной моделью. Шаблон, задающий различные классы, называется метаклассом. Итак, объекты порождаются от классов, а классы — от метакласса.
Источник: www.myshared.ru
Объектно-ориентированные языки программирования
Объектно-ориентированный (ОО) подход основан на систематическом использовании моделей для языково-независимой разработки программной системы (ПС), на основе из ее прагматики. Последний термин нуждается в пояснении. Прагматика определяется целью разработки ПС: для обслуживания клиентов банка, для управления работой аэропорта и т.п.
В формулировке цели участвуют предметы и понятия реального мира, имеющие отношение к разрабатываемой программной системе (см. рис. 1.1). При ОО подходе эти предметы и понятия заменяются моделями, т.е. определенными формальными конструкциями, представляющими их в ПС.
Рис. 1.1. Семантика (смысл программы с точки зрения выполняющего ее компьютера) и прагматика (смысл программы с точки зрения ее пользователей)
Модель содержит не все признаки и свойства представляемого ею предмета (понятия), а только те, которые существенны для разрабатываемой ПС. Тем самым модель «беднее», а, следовательно, проще представляемого ею предмета (понятия). Но главное даже не в этом, а в том, что модель есть формальная конструкция: формальный характер моделей позволяет определить формальные зависимости между ними и формальные операции над ними. Это упрощает как разработку и изучение (анализ) моделей, так и их реализацию на компьютере. В частности, формальный характер моделей позволяет получить формальную модель разрабатываемой ПС как композицию формальных моделей ее компонентов.
Таким образом, ОО подход помогает справиться с такими сложными проблемами, как
· уменьшение сложности программного обеспечения (ПО);
· повышение надежности ПО;
· обеспечение возможности модификации отдельных компонентов ПО без изменения остальных его компонентов;
· обеспечение возможности повторного использования отдельных компонентов ПО.
Систематическое применение ОО подхода позволяет разрабатывать хорошо структурированные, надежные в эксплуатации, достаточно просто модифицируемые ПС. Этим объясняется интерес программистов к ОО подходу и ООЯ программирования. ОО подход является одним из наиболее интенсивно развивающихся направлений теоретического и прикладного программирования.
Объектно-ориентированный подход имеет два аспекта:
· объектно-ориентированная разработка ПО;
· объектно-ориентированная реализация ПО.
Объектно-ориентированная разработка программ
ОО разработка ПО связана с применением ОО моделей при разработке ПС и их компонентов. Говоря об ОО разработке, я имею в виду:
· объектно-ориентированные методологии (технологии) разработки ПС;
· инструментальные средства, поддерживающие эти технологии.
ОО разработка может начаться на самом первом этапе ЖЦ; она не связана с языком программирования, на котором предполагается реализовать ПС: этот язык может и не быть ОО. На этапе разработки объекты — это некоторые формальные конструкции (например, прямоугольники с закругленными углами, с помощью которых они изображаются на схемах), никак пока не связанные с их будущей реализацией на одном из языков программирования.
ОО разработка ПО связана с применением ОО методологий (технологий). Обычно эти ОО методологии поддерживаются инструментальными программными средствами, но и без таких средств они полезны, так как позволяют понять различные аспекты и свойства разрабатываемой ПС, что в последующем существенно облегчает ее реализацию, тестирование, сопровождение, разработку новых версий и более существенную модификацию.
Объектно-ориентированные языки программирования
Реализация ПО связана с использованием одного из языков программирования. Показано, что наиболее удобными для реализации ПС, разработанных в рамках ОО подхода, являются ООЯ программирования, хотя возможна реализация и на не ООЯ.
ООЯ программирования пользуются в последнее время большой популярностью среди программистов, так как они позволяют использовать преимущества ОО подхода не только на этапах проектирования и конструирования ПС, но и на этапах их реализации, тестирования и сопровождения.
Первый ООЯ программирования Simula 67 был разработан в конце 60-х годов в Норвегии. Авторы этого языка очень точно угадали перспективы развития программирования: их язык намного опередил свое время. Но достоинства языка Simula 67 были замечены некоторыми программистами, и в 70-е годы было разработано большое число экспериментальных ООЯ программирования, а в результате их исследования были разработаны современные ООЯ программирования: C++, Smalltalk, Eiffel и др.
Сквозной пример
В качестве сквозного примера будет рассмотрена задача о разработке ПО банковской сети (рис. 1.3). В состав этой сети входит центральный компьютер, принадлежащий объединению банков (консорциуму), компьютеры банков, к которым непосредственно (минуя центральный компьютер) присоединены кассовые терминалы, обслуживаемые кассирами, и сеть терминалов для клиентов банка (банкоматов).
Рис. 1.3. Схема банковской сети
Клиенты банков имеют пластиковые банковские карточки (один клиент может иметь несколько карточек); карточка содержит код карточки, код банка, код клиента и другую информацию, обеспечивающую доступ к счету (счетам) клиента в этом банке. Клиент может вставить свою карточку в ATM (банкомат) и, при условии, что код карточки и код банка верны, начать банковскую проводку. Данные с карточки поступают в центральный компьютер, который распределяет их по компьютерам банков в соответствии с кодами банков до начала проводки; после окончания проводки ее результаты поступают снова в центральный компьютер, который распределяет их по ATM. Являясь распределителем данных между компьютерами банков и ATM, центральный компьютер должен регулировать коллективный доступ со стороны клиентов и банков, организуя и поддерживая соответствующие очереди.
Компьютер банка поддерживает счета клиентов, т.е. хранит их в своей БД и выполняет проводки над этими счетами по запросам с ATM (удаленная проводка) или с кассовых терминалов (проводка кассира, данные о которой вводятся кассиром).
Несмотря на внешнюю простоту, эта задача достаточно сложна, чтобы на ее примере можно было продемонстрировать основные особенности ОО подхода к разработке ПС: в этой задаче есть и необходимость распределения по сети компьютеров (банкомат, который мы будем для краткости называть ATM, тоже можно рассматривать как специализированный компьютер), и асинхронные процессы, и необходимость синхронизации таких процессов для организации параллельного обслуживания нескольких клиентов, и работа с БД (информация о клиентах хранится в БД банков), в частности, обслуживание транзакций (транзакциями являются банковские проводки). Наряду с описанным примером будет рассмотрено достаточно большое число других примеров, предназначенных для демонстрации особенностей, не охватываемых этим основным примером.
Источник: megalektsii.ru
Процедурно-ориентированный и объектно-ориентированный подход в программировании
Основой такой методологии разработки программ являлась процедурная, или алгоритмическая, организация структуры программного кода.
Исходным в данной методологии было понятие алгоритма. Алгоритм — это способ решения вычислительных и других задач, точно описывающий определенную последовательность действий, которые необходимо выполнить для достижения заданной цели. Примерами алгоритмов являются хорошо известные правила нахождения корней квадратного уравнения или системы линейных уравнений.
При увеличении объемов программ для упрощения их разработки появилась необходимость разбивать большие задачи на подзадачи. В языках программирования возникло и закрепилось новое понятие процедуры. Использование процедур позволило разбивать большие задачи на подзадачи и таким образом упростило написание больших программ. Кроме того, процедурный подход позволил уменьшить объем программного кода за счет написания часто используемых кусков кода в виде процедур и их применения в различных частях программы.
Со временем вычислительные задачи становились все сложнее, а значит, и решающие их программы увеличивались в размерах. Их разработка превратилась в серьезную проблему. Когда программа становится все больше, ее приходится разделять на все более мелкие фрагменты.
Основой для такого разбиения как раз и стала процедурная декомпозиция, при которой отдельные части программы, или модули, представляли собой совокупность процедур для решения одной или нескольких задач. Одна из основных особенностей процедурного программирования заключается в том, что оно позволило создавать библиотеки подпрограмм (процедур), которые можно было бы использовать повторно в различных проектах или в рамках одного проекта. При процедурном подходе для визуального представления алгоритма выполнения программы применяется так называемая блок-схема.
Дальнейшее увеличение программных систем способствовало формированию новой точки зрения на процесс разработки программ и написания программных кодов, которая получила название методологии структурного программирования. Ее основой является процедурная декомпозиция предметной области решаемой задачи и организация отдельных модулей в виде совокупности процедур. В рамках этой методологии получило развитие нисходящее проектирование программ, или проектирование «сверху вниз».
В этот период основным показателем сложности разработки программы считался ее размер. Вполне серьезно обсуждались такие оценки сложности программ, как количество строк программного кода. Правда, при этом делались некоторые предположения относительно синтаксиса самих строк, которые должны были соответствовать определенным требованиям.
Например, каждая строка кода должна была содержать не более одного оператора. Общая трудоемкость разработки программ оценивалась специальной единицей измерения — «человеко-месяц», или «человеко-год». А профессионализм программиста напрямую связывался с количеством строк программного кода, который он мог написать и отладить в течение, скажем, месяца.
Методология объектно-ориентированного программирования
Увеличение размеров программ приводило к необходимости привлечения большего числа программистов, что, в свою очередь, потребовало дополнительных ресурсов для организации их согласованной работы. В процессе разработки приложений заказчик зачастую изменял функциональные требования, что еще более усложняло процесс создания программного обеспечения.
Как показала практика, традиционные методы процедурного программирования не способны справиться ни с нарастающей сложностью программ и их разработки, ни с необходимостью повышения их надежности. Во второй половине 80-х годов возникла настоятельная потребность в новой методологии программирования, которая была бы способна решить весь этот комплекс проблем. Ею стало объектно-ориентированное программирование (ООП).
После составления технического задания начинается этап проектирования, или дизайна, будущей системы. Объектно-ориентированный подход к проектированию основан на представлении предметной области задачи в виде множества моделей для независимой от языка разработки программной системы на основе ее прагматики.
Последний термин нуждается в пояснении. Прагматика определяется целью разработки программной системы, например, обслуживание клиентов банка, управление работой аэропорта, обслуживание чемпионата мира по футболу и т.п. В формулировке цели участвуют предметы и понятия реального мира, имеющие отношение к создаваемой системе (см. рисунок 2.2 [3]). При объектно-ориентированном подходе эти предметы и понятия заменяются моделями, т.е. определенными формальными конструкциями.
Рис. 2.2. Семантика (смысл программы с точки зрения выполняющего ее компьютера) и прагматика (смысл программы с точки зрения ее пользователей) [3].
Модель содержит не все признаки и свойства представляемого ею предмета или понятия, а только те, которые существенны для разрабатываемой программной системы. Таким образом, модель «беднее», а следовательно, проще представляемого ею предмета или понятия.
Простота модели по отношению к реальному предмету позволяет сделать ее формальной. Благодаря такому характеру моделей при разработке можно четко выделить все зависимости и операции над ними в создаваемой программной системе. Это упрощает как разработку и изучение (анализ) моделей, так и их реализацию на компьютере.
Объектно-ориентированный подход обладает такими преимуществами, как:
· уменьшение сложности программного обеспечения;
· повышение надежности программного обеспечения;
· обеспечение возможности модификации отдельных компонентов программного обеспечения без изменения остальных его компонентов;
· обеспечение возможности повторного использования отдельных компонентов программного обеспечения.
Систематическое применение объектно-ориентированного подхода позволяет разрабатывать хорошо структурированные, надежные в эксплуатации, достаточно просто модифицируемые программные системы. Этим объясняется интерес программистов к объектно-ориентированному подходу и объектно-ориентированным языкам программирования. ООП является одним из наиболее интенсивно развивающихся направлений теоретического и прикладного программирования.
Сущность объектно-ориентированного подхода
Объектно-ориентированный подход использует объектную декомпозицию, при этом статическая структура системы описывается в терминах объектов и связей между ними, а поведение системы описывается в терминах обмена сообщениями между объектами. Каждый объект системы обладает своим собственным поведением, моделирующим поведение объекта реального мира.
Понятие «объект» впервые было использовано около 30 лет назад в технических средствах при попытках отойти от традиционной архитектуры фон Неймана и преодолеть барьер между высоким уровнем программных абстракций и низким уровнем абстрагирования на уровне компьютеров. С объектно-ориентированной архитектурой также тесно связаны объектно-ориентированные операционные системы. Однако наиболее значительный вклад в объектный подход был внесен объектными и объектно-ориентированными языками программирования: Simula, Smalltalk, C++, Object Pascal. На объектный подход оказали влияние также развивавшиеся достаточно независимо методы моделирования баз данных, в особенности подход «сущность-связь».
Концептуальной основой объектно-ориентированного подхода является объектная модель. Основными се элементами являются:
Кроме основных имеются еще три дополнительных элемента, не являющихся в отличие от основных строго обязательными:
Абстрагирование — это выделение существенных характеристик некоторого объекта, которые отличают его от всех других видов объектов и, таким образом, четко определяют его концептуальные границы относительно дальнейшего рассмотрения и анализа. Абстрагирование концентрирует внимание на внешних особенностях объекта и позволяет отделить самые существенные особенности его поведения от деталей их реализации. Выбор правильного набора абстракций для заданной предметной области представляет собой главную задачу объектно-ориентированного проектирования.
Инкапсуляция — это процесс отделения друг от друга отдельных элементов объекта, определяющих его устройство и поведение. Инкапсуляция служит для того, чтобы изолировать интерфейс объекта, отражающий его внешнее поведение, от внутренней реализации объекта. Объектный подход предполагает, что собственные ресурсы, которыми могут манипулировать только методы самого класса, скрыты от внешней среды. Абстрагирование и инкапсуляция являются взаимодополняющими операциями: абстрагирование фокусирует внимание на внешних особенностях объекта, а инкапсуляция (или, иначе, ограничение доступа) не позволяет объектам-пользователям различать внутреннее устройство объекта.
Модульность — это свойство системы, связанное с возможностью ее декомпозиции на ряд внутренне связных, но слабо связанных между собой модулей. Инкапсуляция и модульность создают барьеры между абстракциями.
Иерархия — это ранжированная или упорядоченная система абстракций, расположение их по уровням. Основными видами иерархических структур применительно к сложным системам являются структура классов (иерархия по номенклатуре) и структура объектов (иерархия по составу). Примерами иерархии классов являются простое и множественное наследование (один класс использует структурную или функциональную часть соответственно одного или нескольких других классов), а иерархии объектов — агрегация.
Типизация — это ограничение, накладываемое на класс объектов и препятствующее взаимозаменяемости различных классов (или сильно сужающее ее возможность). Типизация позволяет защититься от использования объектов одного класса вместо другого или по крайней мере управлять таким использованием.
Параллелизм — свойство объектов находиться в активном или пассивном состоянии и различать активные и пассивные объекты между собой.
Устойчивость — свойство объекта существовать но времени (вне зависимости от процесса, породившего данный объект) и/или в пространстве (при перемещении объекта из адресного пространства, в котором он был создан).
Источник: studopedia.org