
- •Архитектуры и модели программ и знаний
- •Литература по ООП
- •Объектно-ориентированный подход
- •Первоначальная концепция ООП
- •Язык SIMULA-67
- •SIMULA-67: основные возможности
- •Объектно-ориентированное программирование: Smalltalk и Eiffel
- •Недостатки (“pitfalls”) ООП.
- •“Ловушки” объектно-ориентированного анализа (1/3)
- •“Ловушки” объектно- ориентированного анализа (2/3)
- •“Ловушки” объектно-ориентированного анализа (3/3)
- •Вопросы и домашнее задание к лекции 6

Архитектуры и модели программ и знаний
Лекция 6
Объектно-ориентированное программирование, его модели, достоинства и недостатки
Сафонов Владимир Олегович
Профессор кафедры информатики Заведующий лабораторией Java-технологии
(http://polyhimnie.math.spbu.ru/jtl)
Санкт-Петербургский государственный университет
Email: vosafonov@gmail.com
WWW: http://www.vladimirsafonov.org

Литература по ООП
1.Буч Г. Объектно-ориентированный анализ.- М.: Мир, 1991
2.Страуструп Б. Дизайн и эволюция C+ +. – М., 2001
3.У. Дал, У.Мюрхауг, К. Нюгорд. Язык программирования SIMULA-67. – М.: Мир, 1968
4.Webster B.F. "Pitfalls of Object- Oriented Development," M&T Books, New York, 1995
(C)Сафонов В.О. 2012

Объектно-ориентированный подход
Основатели – O.-J. Dahl, K. Nugaard
(Норвегия), авторы языков SIMULA и SIMULA 67, разработанных в 1960-х гг.
SIMULA – язык моделирования систем с
дискретными событиями. Именно для этой цели в 1960-х гг. была предложена концепция класса
Основные возможности языка SIMULA –
объекты, классы, наследование, виртуальные функции и т.д. – все они впоследствии вошли в широко известные языки C++, Java, C#
SIMULA не является чисто объектно-
ориентированным языком, так как данный язык был разработан как расширение процедурного языка ALGOL-60
(C) Сафонов В.О. 2012

Первоначальная концепция ООП
Каждый объект принадлежит некоторому классуКлассы образуют иерархию, которая определяет, каким
образом наследуются элементы каждого классаОбъекты взаимодействуют с помощью сообщений. Для
любого вида сообщений в классе-получателе должна быть определена реакция на него – метод (обработки сообщений данного вида) . Полный набор методов класса определяется в общем случае во время выполнения (как в языке Smalltalk)
Типичная конструкция Smalltalk - цикл whiledo,
основанный на передаче сообщений:
B whiledo: S (вместо общепринятого while B do S), где: B – булевский объект, whiledo – имя
сообщения, S – тело сообщения, посылаемого объекту BЯзык Smalltalk разработан фирмой Xerox PARC (США);
историческая роль Smalltalk-системы также в том, что она стала одной из первых в мире интегрированных сред разработки программ. Разработчики Smalltalk впервые реализовали just-in-time компилятор и ввели термин
байт-код
(C) Сафонов В.О. 2012

Язык SIMULA-67
class Stack (size); integer size; begin
integer sp;
integer array stack_body[1:size]; integer procedure Pop; …; procedure Push(x); integer x; …
end Stack
ref(Stack) s :- new Stack(100); s.Push(1);
Но следующая (небезопасная) конструкция также возможна:
s.sp := 0; comment в SIMULA нет инкапсуляции данных класса;
(C) Сафонов В.О. 2012

SIMULA-67: основные возможности
Структура определения класса - заголовок и сигнатура (возможны параметры) - поля и функции (методы)
- ВСЕ ОБЪЕКТЫ - АКТИВНЫ: часть определения каждого класса – сценарий поведения объекта; последовательность операторов, исполняемая “бесконечно” – до завершающего end или до оператора передачи управления другому объекту Все объекты сосуществуют, взаимодействуют, и их сценарии исполняются параллельно
Завершенное состояние объекта – он превращается в пассивные данные, когда его сценарий заканчивает работу
Операторы resume (p) / detach; отношения между активными объектами – как между сопрограммами (coroutines)
Блок с префиксом: Stack begin … end
Иерархия (сочленение) классов: MyStack class Stack; …
(C) Сафонов В.О. 2012

Объектно-ориентированное программирование: История C++ (1/2)
1979, Осло, Норвегия: Б. Страуструп –
стажер (intern) К. Нюгорда в Норвежском вычислительном центре. Тема его исследования – компилятор языка SIMULA- 67. Б. Страуструп предлагает идею расширения C классами в стиле SIMULAНеэффективность представления данных и
сборки мусора в реализации SIMULA => Б. Страуструп приходит к идее замены
ссылочной объектной модели на контейнерную, из соображений эффективности
Язык “C with classes” – 1979
(C) Сафонов В.О. 2012

Объектно-ориентированное программирование: История C++ (2/2)
1984: Фирма AT&T заинтересовалась новым
языком и обеспечила коммерческую поддержку проекта. Язык был переименован в C++. Первые 5000 пользователей
1989 – новая версия C++: введены
исключения; ссылки; шаблоны1993 – новая версия C++: введены
пространства имен, RTTI (динамическая информация о типах)
Только в 1997 г. вышел ANSI-стандарт C++Комитет по стандартизации C++ : 70
экспертов
Turbo C++ (Borland) – 1990Visual C++ (Microsoft) – 1990е гг.
(C) Сафонов В.О. 2012

Объектно-ориентированное программирование: Smalltalk и Eiffel
Язык Smalltalk (Xerox PARC): 1972 –
1980 и далее
Язык Eiffel (Dr. Bertrand Meyer,
1985) – классы; объекты; парадигма Design-by-Contract
public double Remainder (int x, int y) require y > 0;
return (x mod y);
mod y; ensure Remainder(x, y) == x end Remainder;
(C) Сафонов В.О. 2012

Недостатки (“pitfalls”) ООП.
Особенности ООП, не соответствующие TWC
Концептуальный взрывНепредсказуемость поведения класса, вследствие
его зависимости от сложной иерархии классов, разработанных другими фирмами и программистамиНаследование реализаций – способ взлома
инкапсуляции (рекомендация: его замена наследованием интерфейсов – Dr. J. Gosling)
Знания о предметных областях не сводятся только к
иерархиям (в общем случае, они представимы в виде семантических сетей)
Некоторые идеи, методы, виды функциональности
(concerns) не могут быть реализованы лишь иерархией классов; например, security; релизация подобной функциональности (cross-cutting concerns) “пронизывает” всю программуВывод: Необходимы “пост-объектные технологии”,
дополняющие концепции и методы ООП
(C) Сафонов В.О. 2012