1
1. Составные части объектного подхода
Объектно-ориентированное программирование
() Владислав Лавров, vlavrov.com
2
Парадигма (стиль) программирования
– это совокупность идей и понятий, определяющих стиль
написания компьютерных программ
(подход к программированию).
Это способ построения программ, основанный на
определенных принципах программирования, и выбор
подходящего языка, который делает понятными
программы, написанные в этом стиле.
() Владислав Лавров, vlavrov.com
3
Основные парадигмы программирования:
1) процедурно-ориентированный (алгоритмы);
2) объектно-ориентированный (классы и объекты);
3) функциональный (функции);
4) логико-ориентированный (цели, часто выраженные в
терминах исчисления предикатов);
5) ориентированный на ограничения (инвариантные
соотношения)
() Владислав Лавров, vlavrov.com
4
Процедурно-ориентированный стиль
(императивный стиль, т.е. директивный, авторитарный)
• Программирование состоит из последовательности операторов
(инструкций), задающих процедуру (алгоритм) решения задачи.
В основе – принцип последовательного изменения вычислителя в
пошаговом режиме.
• Назначение: решение задач, для которых последовательное
исполнение каких-либо команд является естественным.
Например, управление современными аппаратными средствами
вычислительной техники
• Языки: Fortran (1954), Algol (1960), Basic (1963), Pascal (1970),
C (1972), Ada (1979).
Подробнее http://bourabai.ru/alg/system2.htm#2216
() Владислав Лавров, vlavrov.com
5
Объектно-ориентированный стиль
• Подход использует объектную декомпозицию, при которой
статическая структура системы описывается в терминах объектов и
связей между ними, а поведение системы описывается в терминах
обмена сообщениями между объектами.
• Назначение: любая предметная область
• Языки: Simula (1962), C++ (1983), Object Pascal (1984), Java (1995),
С # (2000).
Подробнее http://bourabai.ru/alg/system2.htm#222
() Владислав Лавров, vlavrov.com
6
Функциональный стиль
• Основан на способе составления программ, в которых
единственным действием является вызов функции. Функции
обмениваются между собой данными непосредственно, без
использования промежуточных переменных и присвоений.
• Назначение: обработка естественного языка, экспертные
консультирующие системы, проблемы зрительного восприятия.
• Языки: LISP (1958), РЕФАЛ (1968), Haskell (1990, 1998).
Подробнее http://bourabai.ru/alg/system2.htm#223
() Владислав Лавров, vlavrov.com
7
Логико-ориентированный стиль
• Программ содержит описание проблемы в терминах фактов и
логических формул (правил), а решение система выполняет с
помощью механизмов логического вывода.
• Назначение: экспертные системы, искусственный интеллект.
• Языки: Prolog (1971), LOGLISP (1982), T-Prolog (1983),
Mercury (1993)
Подробнее http://bourabai.ru/alg/system2.htm#224
() Владислав Лавров, vlavrov.com
8
Стиль, ориентированный на ограничения
• Подход, при котором в программах определяются тип данных
решения, предметная область решения и ограничения на значения
искомого решения. Программирование в терминах постановок
задач.
• Назначение: задачи исследования операций, искусственный
интеллект.
• Языки: УТОПИСТ (Универсальные Текстовые ОПИСания Терминов,
1980), OPL (1998).
Подробнее http://bourabai.ru/alg/system2.htm#225
() Владислав Лавров, vlavrov.com
9
• переход от расчетов по формулам к сложным задачам
моделирования систем
• увеличение объемов обрабатываемых данных
• повышение сложности программ, резкое увеличение объемов кода
(сотни тысяч и миллионы строк !)
Современные направления развития программ
() Владислав Лавров, vlavrov.com
Сложность современных
программ превышает
возможности одного человека !
10
Что делать?
() Владислав Лавров, vlavrov.com
• коллективная разработка;
• каждый делает свою часть независимо от других;
• части программы легко «собрать» вместе.
Как это сделать?
11
Борьба со сложностью
() Владислав Лавров, vlavrov.com
подзадача 1 подзадача 3
подзадача 2.1 подзадача 2.2 подзадача 2.3
задача
подзадача 2
Декомпозиция – это разбиение системы на подсистемы, каждая из
которых может изучаться и выполняться отдельно
> 100 000 строк???
«Техника борьбы со сложностью известна с античных
времен: “Divide et impera” (разделяй и властвуй)»
Э. Дейкстра
12
Описывает структуру объектов, составляющих систему,
их атрибуты, операции, взаимосвязи с другими
объектами.
В объектной модели должны быть отражены те понятия
и объекты реального мира, которые важны для
разрабатываемой системы.
Объектная модель
() Владислав Лавров, vlavrov.com
13
Принципы объектной модели:
• абстрагирование,
• инкапсуляция,
• модульность,
• иерархичность,
• типизация,
• параллелизм
• сохраняемость
главные
Дополнительные
(полезные)
() Владислав Лавров, vlavrov.com
14
1.1. Абстрагирование
Абстракция выделяет существенные характеристики некоторого
объекта, отличающие его от всех других видов объектов и, таким
образом, четко определяет его концептуальные границы с точки
зрения наблюдателя.
Абстрагирование концентрирует внимание на внешних особенностях
объекта и позволяет отделить самые существенные особенности
поведения от несущественных.
С точки зрения программирования, абстракция – это правильное
разделение программы на объекты.
() Владислав Лавров, vlavrov.com
15
Абстракция. Пример.
Структура компании
() Владислав Лавров, vlavrov.com
16
Абстракция. Пример.
Пользовательский интерфейс программных продуктов
() Владислав Лавров, vlavrov.com
17
1.2. Инкапсуляция
Инкапсуляция (лат. in capsula) – размещение в оболочке, изоляция,
закрытие чего-либо инородного с целью исключения влияния на
окружающее.
В программировании инкапсуляция – это процесс отделения друг от
друга элементов объекта, определяющих его устройство и
поведение; инкапсуляция служит для того, чтобы изолировать
контрактные обязательства абстракции от их реализации.
() Владислав Лавров, vlavrov.com
18
Полет на самолете с точки зрения пассажира
Инкапсуляция. Пример.
() Владислав Лавров, vlavrov.com
19
Авиаперелет (подготовка, управление, диспетчеризация и пр.)
Инкапсуляция. Пример.
() Владислав Лавров, vlavrov.com
20
1.3. Модульность
Модульность – это разделение программы на фрагменты, которые
компилируются по отдельности, но могут устанавливать связи с
другими модулями. Связи между модулями – это их представления
друг о друге.
В программировании модули выполняют роль физических
контейнеров, в которые помещаются определения классов и
объектов при логическом проектировании системы.
() Владислав Лавров, vlavrov.com
21
Структура программного модуля «Галактика. Транспорт»
Разделение на модули. Пример.
() Владислав Лавров, vlavrov.com
22
1.4. Иерархичность
Иерархия – это упорядочение абстракций, расположение
их по уровням.
В ООП основными видами иерархических структур
применительно к сложным системам являются:
• структура классов (иерархия "is-a", быть)
• структура объектов (иерархия "part of", часть).
() Владислав Лавров, vlavrov.com
23
Наследование по типу «is-a»
Иерархичность. Пример.
() Владислав Лавров, vlavrov.com
24
Наследование по типу «part of»
Иерархичность. Пример.
() Владислав Лавров, vlavrov.com
25
Наследование по типу «part of» (продолжение)
Иерархичность. Пример.
() Владислав Лавров, vlavrov.com
26
1.5. Наследование
Наиболее оптимальная стратегия создания объекта в реальной
жизни: берем существующее хорошее решение, немного его
дорабатываем, подгоняем под свои нужды и используем.
В программировании наследование – это специальное отношение
между двумя классами.
Есть возможность создавать один класс на основе другого. Новый
класс становится потомком (наследником) уже существующего, при
этом содержит 80%-90% нужных нам данных и методов.
() Владислав Лавров, vlavrov.com
27
1.6. Типизация и полиформизм
Тип – точная характеристика свойств, включая структуру
и поведение, относящуюся к некоторой совокупности
объектов.
Типизация – это способ защититься от использования
объектов одного класса вместо другого, или, по крайней
мере, управлять таким использованием.
() Владислав Лавров, vlavrov.com
28
Типизация. Пример.
=
Расстояние
Время
Скорость
Вес
() Владислав Лавров, vlavrov.com
29
Типизация. Пример.
Температура Х Сила = ?
Расстояние Х Сила = ? Работа
() Владислав Лавров, vlavrov.com
30
Полиморфизм
Понятие типизации связано с полиморфизмом: одно и то же имя
может означать объекты разных типов, но, имея общего предка, все
они имеют и общее подмножество операций, которые можно над
ними выполнять.
Полиморфизм описывает ситуацию, когда за одним интерфейсом
скрываются разные реализации. Он позволяет единообразно
обращаться к объектам различных классов (обычно имеющих
общего предка)
() Владислав Лавров, vlavrov.com
31
Полиформизм. Пример.
Водитель-доставки
() Владислав Лавров, vlavrov.com
32
Полиформизм. Пример.
Расчет объема геометрической фигуры
() Владислав Лавров, vlavrov.com
33
1.7. Параллелизм
Параллелизм позволяет различным объектам действовать
одновременно. Параллелизм – это свойство, отличающее активные
объекты от пассивных.
В параллельных системах недостаточно определить поведение
объекта, надо еще принять меры, гарантирующие, что он не будет
разрушен несколькими независимыми процессами.
() Владислав Лавров, vlavrov.com
34
Параллелизм. Пример.
Параллельные системы базы данных
() Владислав Лавров, vlavrov.com
35
1.8. Сохраняемость
– это способность объекта существовать во времени, переживая
породивший его процесс, и (или) в пространстве, перемещаясь из
своего первоначального адресного пространства.
Например:
• Промежуточные результаты вычисления выражений.
• Локальные переменные в вызове процедур.
• Собственные переменные, глобальные переменные и динамически
создаваемые данные.
• Данные, сохраняющиеся между сеансами выполнения программы.
• Данные, сохраняемые при переходе на новую версию программы.
() Владислав Лавров, vlavrov.com
36
Сохраняемость. Пример.
Сериализация в C#
() Владислав Лавров, vlavrov.com
37
Объектно-ориентированное программирование
(object-oriented programming, OOP)
– это методология программирования, основанная на представлении
программы в виде совокупности объектов, каждый из которых является
экземпляром определенного класса, а классы образуют иерархию
наследования.
В данном определении можно выделить три части:
1) OOP использует в качестве базовых элементов объекты,
а не алгоритмы;
2) каждый объект является экземпляром какого-либо определенного
класса;
3) классы организованы иерархически.
() Владислав Лавров, vlavrov.com

Составные части объектного подхода

  • 1.
    1 1. Составные частиобъектного подхода Объектно-ориентированное программирование () Владислав Лавров, vlavrov.com
  • 2.
    2 Парадигма (стиль) программирования –это совокупность идей и понятий, определяющих стиль написания компьютерных программ (подход к программированию). Это способ построения программ, основанный на определенных принципах программирования, и выбор подходящего языка, который делает понятными программы, написанные в этом стиле. () Владислав Лавров, vlavrov.com
  • 3.
    3 Основные парадигмы программирования: 1)процедурно-ориентированный (алгоритмы); 2) объектно-ориентированный (классы и объекты); 3) функциональный (функции); 4) логико-ориентированный (цели, часто выраженные в терминах исчисления предикатов); 5) ориентированный на ограничения (инвариантные соотношения) () Владислав Лавров, vlavrov.com
  • 4.
    4 Процедурно-ориентированный стиль (императивный стиль,т.е. директивный, авторитарный) • Программирование состоит из последовательности операторов (инструкций), задающих процедуру (алгоритм) решения задачи. В основе – принцип последовательного изменения вычислителя в пошаговом режиме. • Назначение: решение задач, для которых последовательное исполнение каких-либо команд является естественным. Например, управление современными аппаратными средствами вычислительной техники • Языки: Fortran (1954), Algol (1960), Basic (1963), Pascal (1970), C (1972), Ada (1979). Подробнее http://bourabai.ru/alg/system2.htm#2216 () Владислав Лавров, vlavrov.com
  • 5.
    5 Объектно-ориентированный стиль • Подходиспользует объектную декомпозицию, при которой статическая структура системы описывается в терминах объектов и связей между ними, а поведение системы описывается в терминах обмена сообщениями между объектами. • Назначение: любая предметная область • Языки: Simula (1962), C++ (1983), Object Pascal (1984), Java (1995), С # (2000). Подробнее http://bourabai.ru/alg/system2.htm#222 () Владислав Лавров, vlavrov.com
  • 6.
    6 Функциональный стиль • Основанна способе составления программ, в которых единственным действием является вызов функции. Функции обмениваются между собой данными непосредственно, без использования промежуточных переменных и присвоений. • Назначение: обработка естественного языка, экспертные консультирующие системы, проблемы зрительного восприятия. • Языки: LISP (1958), РЕФАЛ (1968), Haskell (1990, 1998). Подробнее http://bourabai.ru/alg/system2.htm#223 () Владислав Лавров, vlavrov.com
  • 7.
    7 Логико-ориентированный стиль • Программсодержит описание проблемы в терминах фактов и логических формул (правил), а решение система выполняет с помощью механизмов логического вывода. • Назначение: экспертные системы, искусственный интеллект. • Языки: Prolog (1971), LOGLISP (1982), T-Prolog (1983), Mercury (1993) Подробнее http://bourabai.ru/alg/system2.htm#224 () Владислав Лавров, vlavrov.com
  • 8.
    8 Стиль, ориентированный наограничения • Подход, при котором в программах определяются тип данных решения, предметная область решения и ограничения на значения искомого решения. Программирование в терминах постановок задач. • Назначение: задачи исследования операций, искусственный интеллект. • Языки: УТОПИСТ (Универсальные Текстовые ОПИСания Терминов, 1980), OPL (1998). Подробнее http://bourabai.ru/alg/system2.htm#225 () Владислав Лавров, vlavrov.com
  • 9.
    9 • переход отрасчетов по формулам к сложным задачам моделирования систем • увеличение объемов обрабатываемых данных • повышение сложности программ, резкое увеличение объемов кода (сотни тысяч и миллионы строк !) Современные направления развития программ () Владислав Лавров, vlavrov.com Сложность современных программ превышает возможности одного человека !
  • 10.
    10 Что делать? () ВладиславЛавров, vlavrov.com • коллективная разработка; • каждый делает свою часть независимо от других; • части программы легко «собрать» вместе. Как это сделать?
  • 11.
    11 Борьба со сложностью ()Владислав Лавров, vlavrov.com подзадача 1 подзадача 3 подзадача 2.1 подзадача 2.2 подзадача 2.3 задача подзадача 2 Декомпозиция – это разбиение системы на подсистемы, каждая из которых может изучаться и выполняться отдельно > 100 000 строк??? «Техника борьбы со сложностью известна с античных времен: “Divide et impera” (разделяй и властвуй)» Э. Дейкстра
  • 12.
    12 Описывает структуру объектов,составляющих систему, их атрибуты, операции, взаимосвязи с другими объектами. В объектной модели должны быть отражены те понятия и объекты реального мира, которые важны для разрабатываемой системы. Объектная модель () Владислав Лавров, vlavrov.com
  • 13.
    13 Принципы объектной модели: •абстрагирование, • инкапсуляция, • модульность, • иерархичность, • типизация, • параллелизм • сохраняемость главные Дополнительные (полезные) () Владислав Лавров, vlavrov.com
  • 14.
    14 1.1. Абстрагирование Абстракция выделяетсущественные характеристики некоторого объекта, отличающие его от всех других видов объектов и, таким образом, четко определяет его концептуальные границы с точки зрения наблюдателя. Абстрагирование концентрирует внимание на внешних особенностях объекта и позволяет отделить самые существенные особенности поведения от несущественных. С точки зрения программирования, абстракция – это правильное разделение программы на объекты. () Владислав Лавров, vlavrov.com
  • 15.
  • 16.
    16 Абстракция. Пример. Пользовательский интерфейспрограммных продуктов () Владислав Лавров, vlavrov.com
  • 17.
    17 1.2. Инкапсуляция Инкапсуляция (лат.in capsula) – размещение в оболочке, изоляция, закрытие чего-либо инородного с целью исключения влияния на окружающее. В программировании инкапсуляция – это процесс отделения друг от друга элементов объекта, определяющих его устройство и поведение; инкапсуляция служит для того, чтобы изолировать контрактные обязательства абстракции от их реализации. () Владислав Лавров, vlavrov.com
  • 18.
    18 Полет на самолетес точки зрения пассажира Инкапсуляция. Пример. () Владислав Лавров, vlavrov.com
  • 19.
    19 Авиаперелет (подготовка, управление,диспетчеризация и пр.) Инкапсуляция. Пример. () Владислав Лавров, vlavrov.com
  • 20.
    20 1.3. Модульность Модульность –это разделение программы на фрагменты, которые компилируются по отдельности, но могут устанавливать связи с другими модулями. Связи между модулями – это их представления друг о друге. В программировании модули выполняют роль физических контейнеров, в которые помещаются определения классов и объектов при логическом проектировании системы. () Владислав Лавров, vlavrov.com
  • 21.
    21 Структура программного модуля«Галактика. Транспорт» Разделение на модули. Пример. () Владислав Лавров, vlavrov.com
  • 22.
    22 1.4. Иерархичность Иерархия –это упорядочение абстракций, расположение их по уровням. В ООП основными видами иерархических структур применительно к сложным системам являются: • структура классов (иерархия "is-a", быть) • структура объектов (иерархия "part of", часть). () Владислав Лавров, vlavrov.com
  • 23.
    23 Наследование по типу«is-a» Иерархичность. Пример. () Владислав Лавров, vlavrov.com
  • 24.
    24 Наследование по типу«part of» Иерархичность. Пример. () Владислав Лавров, vlavrov.com
  • 25.
    25 Наследование по типу«part of» (продолжение) Иерархичность. Пример. () Владислав Лавров, vlavrov.com
  • 26.
    26 1.5. Наследование Наиболее оптимальнаястратегия создания объекта в реальной жизни: берем существующее хорошее решение, немного его дорабатываем, подгоняем под свои нужды и используем. В программировании наследование – это специальное отношение между двумя классами. Есть возможность создавать один класс на основе другого. Новый класс становится потомком (наследником) уже существующего, при этом содержит 80%-90% нужных нам данных и методов. () Владислав Лавров, vlavrov.com
  • 27.
    27 1.6. Типизация иполиформизм Тип – точная характеристика свойств, включая структуру и поведение, относящуюся к некоторой совокупности объектов. Типизация – это способ защититься от использования объектов одного класса вместо другого, или, по крайней мере, управлять таким использованием. () Владислав Лавров, vlavrov.com
  • 28.
  • 29.
    29 Типизация. Пример. Температура ХСила = ? Расстояние Х Сила = ? Работа () Владислав Лавров, vlavrov.com
  • 30.
    30 Полиморфизм Понятие типизации связанос полиморфизмом: одно и то же имя может означать объекты разных типов, но, имея общего предка, все они имеют и общее подмножество операций, которые можно над ними выполнять. Полиморфизм описывает ситуацию, когда за одним интерфейсом скрываются разные реализации. Он позволяет единообразно обращаться к объектам различных классов (обычно имеющих общего предка) () Владислав Лавров, vlavrov.com
  • 31.
  • 32.
    32 Полиформизм. Пример. Расчет объемагеометрической фигуры () Владислав Лавров, vlavrov.com
  • 33.
    33 1.7. Параллелизм Параллелизм позволяетразличным объектам действовать одновременно. Параллелизм – это свойство, отличающее активные объекты от пассивных. В параллельных системах недостаточно определить поведение объекта, надо еще принять меры, гарантирующие, что он не будет разрушен несколькими независимыми процессами. () Владислав Лавров, vlavrov.com
  • 34.
    34 Параллелизм. Пример. Параллельные системыбазы данных () Владислав Лавров, vlavrov.com
  • 35.
    35 1.8. Сохраняемость – этоспособность объекта существовать во времени, переживая породивший его процесс, и (или) в пространстве, перемещаясь из своего первоначального адресного пространства. Например: • Промежуточные результаты вычисления выражений. • Локальные переменные в вызове процедур. • Собственные переменные, глобальные переменные и динамически создаваемые данные. • Данные, сохраняющиеся между сеансами выполнения программы. • Данные, сохраняемые при переходе на новую версию программы. () Владислав Лавров, vlavrov.com
  • 36.
    36 Сохраняемость. Пример. Сериализация вC# () Владислав Лавров, vlavrov.com
  • 37.
    37 Объектно-ориентированное программирование (object-oriented programming,OOP) – это методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования. В данном определении можно выделить три части: 1) OOP использует в качестве базовых элементов объекты, а не алгоритмы; 2) каждый объект является экземпляром какого-либо определенного класса; 3) классы организованы иерархически. () Владислав Лавров, vlavrov.com