Парадигма объектно-ориентированного
программирования.
Виталий Унгурян
unguryan@itstep.org
Высказывания великих
«Объектно-ориентированное
программирование — это
исключительно плохая идея, которую
могли придумать только в
Калифорнии.”
Эдсгер Вибе Дейкстр
один из основателей концепции
структурного программирования
Парадигма
(от греч. παράδειγμα,
пример, модель, образец) то система
идей, взглядов и понятий, различных
моделей решения множества проблем,
принятых, как привило, в научном
сообществе и являющихся основной
методологической базой для всего
мирового научного сообщества.
Парадигма
—
это совокупность идей и понятий,
определяющих стиль написания
компьютерных программ
(подход к программированию).
Парадигма программирования
Дэниела Бобров
«стиль программирования как описания
намерений программиста».
Брюс Шрайвер (Bruce Shriver)
«модель или подход к решению
проблемы»
Линда Фридман (Linda Friedman)
«подход к решению проблем
программирования».
Парадигма программирования
Памела Зейв (Pamela Zave)
«способ размышления о
компьютерных системах»
Питер Вегнер (Peter Wegner)
«правила классификации языков
программирования в соответствии с
некоторыми условиями, которые
могут быть проверены».
Парадигма программирования
Памела Зейв (Pamela Zave)
«способ размышления о
компьютерных системах»
Питер Вегнер (Peter Wegner)
«правила классификации языков
программирования в соответствии с
некоторыми условиями, которые
могут быть проверены».
Начнем с древних времен
Парадигма ООП
В соответствии с концепцией
фон-Неймана
(основателя теоретической концепции
компьютерной техники)
процессор обрабатывает данные,
выполняя инструкции (команды),
которые находятся в той же
оперативной памяти, что и данные.
Парадигма
Можно выделить две основные
сущности процесса обработки
информации:
код (инструкций) и данные.
Все программы в соответствии с выбранной
технологией программирования концептуально
организованы вокруг своего кода или вокруг своих
данных.
Императивный подход
Императивное программирование
программы = инструкции + данные.
Первыми императивными языками
были машинные инструкции (коды) —
команды, готовые к исполнению
компьютером.
Императивный подход
Языки поддерживающие данную парадигму:
Как основную:
•Ассемблер
•Fortran
•Algol
•Cobol
•Pascal
•C
•C++
•Ada
Как вспомогательную:
•Python
•Ruby
•Java
•C#
•PHP
•Haskell (через монады)
Пример кода на языке Ассемблер
.model tiny
.code
org 100h
begin:
jmp start
coded db 0c9h,0cbh,0bbh,0cch,0ceh,0b9h,0c8h,0cah,0bch,0d7h
start:
mov ah,01h
int 16h
jz start
xor ax,ax
int 16h
cmp al,1bh
je exit
cmp al,30h
jl start
cmp al,39h
Императивное программирование
Императивное
программирование.
Описывает процесс вычисления в
виде заданной последовательности
инструкций, изменяющих состояние
программы.
Декларативный подход
Декларативное
программирование.
Описывает процесс как нечто
готовое, а не указывет как его
создать.
Порядок выполнения и способ
достижения не важен.
Декларативный подход
Декларативное описание задачи
более наглядно и легче
формулируется, так как мы чаще
знаем, чего хотим, но не знаем как
это сделать.
Функциональное программирование
программы = функции + функции.
Примеры функциональных языков:
Lisp, Haskel, Scala
Примеры кода
Haskell
guess :: Int -> [Char]
guess 7 = "Much 7 very wow."
guess x = "Ooops, try again."
Scala
object HelloWorld {
def main(args: Array[String]) =
println("Привет, МИР!")
}
Структурное программирование
программы = инструкции +
инструкции
При структурном подходе любая
программа строится без
использования оператора
безусловного перехода (goto) из
трёх базовых управляющих
структур: последовательность,
ветвление и цикл
Структурное программирование
Процедурное программирование
Процедурное программирование
программы = данные +
алгоритмы.
Разбиение алгоритмов
решающие задачи на более
мелкие (процедуры).
Процедурное программирование
Процедура — самостоятельный
участок кода, который можно
выполнить как одну инструкцию.
Модульное программирование
Программы составлялись из отдельных
независимых модулей, содержащих
десяток-другой процедур и функций.
программы =
модули + данные.
Модульное программирование
— функционально
законченный фрагмент программы.
Оформляется в виде отдельного файла
с исходным кодом или поименованной
непрерывной части.
Некоторые языки предусматривают
объединение модулей в пакеты.
ООП
Объектно-ориентированное
программирование
– это методология
программирования, основанная на
представлении совокупности
объектов решаемой задачи в виде
абстракций.
(класса объектов).
Основные целии ООП
Цели ООП:
•Упрощение сложности модели
реальной задачи
•Повышение коэфициента
повторного использования
кода.
Экономия мышления
В обыденной жизни люди
используют
(пусть даже неосознанно)
различные приемы
“экономии мышления”,
позволяющие осмысливать и
выражать сложные явления в
простых понятиях.
Типичные приемы “экономии мышления”
· абстрагирование (отбрасывание
несущественных деталей);
· обобщение (выделение общих
существенных признаков у разных
явлений или предметов);
· классификация (осознание связи
между явлениями и степени их
схожести).
Абстрагирование
Абстрагирование — это
способ выделить набор значимых
характеристик объекта, исключая
из рассмотрения не значимые.
Соответственно, абстракция — это
набор всех таких характеристик.
Абстрагирование
Разные наблюдатели классифицируют один и
тот же объект по-разному.
Абстракция
Смысл абстракции заключается в
том, что сущность произвольной
сложности можно рассматривать, а
также производить определенные
действия над ней, как над единым
целым, не вдаваясь в детали
внутреннего построения и
функционирования.
Степень абстракции
При проектировании класса
очень важно выбрать
правильную степень
абстракции.
Степень абстракции
Слишком высокая степень даст
только приблизительное
описание объекта, не позволит
правильно моделировать его
поведение.
Степень абстракции
Слишком низкая степень
абстракции сделает модель очень
сложной, перегруженной деталями,
и потому непригодной.
Абстракция
Абстракция
связвает красной нитью
все три приципа ООП и
является центральной идеей
парадигмы ООП.
Класс
Обобщение – это мысленное
объединение предметов и явлений
по их общим и существенныи
признакам.
Класс
Классификация – это мысленное
распределение предметов на
классы в соответствии с наиболее
схожими существенными
признаками.
Проведи классификацию
Парадигма ООП
ООП рассматривает программу
как совокупность фрагментов кода,
обрабатывающих отдельные
совокупности данных – объекты.
Подобно тому, как столяр взявший
в руки молоток начинает видеть во
всем окружающем только гвозди,
проектировщик
с объектно-ориентированным
мышлением должен воспринимать
весь мир в виде объектов.
Парадигма ООП
Парадигма ООП
Объекты реального мира
взаимодействуют с окружающей
средой посредством открытых
интерфейсов.
Парадигма ООП
Интерфейс — это контракт
между системой и внешним
окружением.
Парадигма ООП
Интерфейс — это сопряжение
системы с внешним окружением.
Парадигма ООП
Реализация — это система
минус интерфейс.
Класс
Класс – это способ описания
сущности, определяющий
состояние и поведение,
зависящее от этого состояния, а
также правила для взаимодействия
с данной сущностью (контракт).
Класс
Интерфейс класса – это открытая
часть класса доступная для
использования извне.
Закрытая часть класса, называется
реализацией.
Класс
Класс описывает
содержание и поведение
некой совокупности
данных и действий над
этими данными.
Класс
Класс является абстракцией
набора сущностей, из
предметной облости, в
которой мы решаем задачу.
Класс
Класс является моделью
ещё не существующей
сущности (объекта)
описаной в исходном коде.
Класс
Фактически класс
описывает устройство
объекта, являясь своего
рода чертежом, моделью
для создания объектов.
public сlass Cat {
private static int num;
private String name;
public String getName() {
return name;
}
}
Имя классаСпецификатор
доступа
Ключевое
слово
Начало
тела класса
Конец тела
класса
Переменная
экземпляра
Переменная
класса
Метод
экземпляра
Переменные экземпляра
Переменные, определённые
в теле класса (вне методов),
называются переменными
экземпляра и доступны
методам внутри класса.
Члены класса
Методы и переменные
объявленные
внутри тела класса
являются членами класса.
Объект
Объект - это экземпляр
созданный на основе
класса.
Объект = Данные + Операции
Объект
Класс - это логическая
абстрактная конструкция.
Объект – это физическая
реальность.
Объект
Оператор new создаёт
экземпляр (объект)
указанного класса и
возвращает ссылку на
созданный объект.
Cat myCat = new Cat();
Тип
переменной
Имя
переменной
Оператор
создания
объектов
Конструктор
Члены класса
Для доступа к методам и
переменным экземпляра вне тела
класса используется точка после
названия переменной (.).
Cat myCat = new Cat();
myCat.name = "Tom";
ООП ориентировано на
разработку крупных
программных комплексов,
разрабатываемых командой
программистов
(часто очень большой).
Проектирование
Проектирование системы в целом,
создание отдельных компонентов и
их объединение в конечный
продукт при этом часто
выполняется разными людьми, и
нет ни одного специалиста,
который знал бы о проекте всё.
Проектирование
Объектно-ориентированное
проектирование состоит в описании
структуры и поведения проектируемой
системы, то есть, фактически, в ответе
на два основных вопроса:
Из каких частей состоит система.
В чём состоит ответственность
каждой из частей.
Проектирование
Три основные парадигмы
Парадигма объектно-ориентированного программирования.

Парадигма объектно-ориентированного программирования.