Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Safonov / AMPN_course_6.pptx
Скачиваний:
114
Добавлен:
16.04.2015
Размер:
136.29 Кб
Скачать

Архитектуры и модели программ и знаний

Лекция 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

Соседние файлы в папке Safonov