Тема 3. ООП и передача...

Preview:

Citation preview

Тема 3. ООП и передача сообщений

Автор:

А. С. Власовских

Лицензия:

Creative Commons Attribution-Noncommercial-Share Alike 3.0

Тема 3. ООП и передача сообщений 1

История

1967, Simula 67

Создан Кристеном Нюгардом, Оле-Йоханом Далем

Для моделирования дискретных событий

1969, Smalltalk

Создан Аланом Кэем в Xerox PARC, публичный релиз 1980

Под влиянием Simula 67, Lisp

Первые GUI, MVC, метаобъекты

1970-е, объектные расширения Lisp

LOOPS, Common Lisp + CLOS

1980-1990-е, объектные расширения процедурных языков

C++, Objective-C, Object Pascal

Perl, Tcl, Python, Java, JavaScript, Ruby

Тема 3. ООП и передача сообщений 2

Основные концепции

Объект

Изменяемое локальное состояние

Сообщение

Передача данных между объектами

Тема 3. ООП и передача сообщений 3

Признаки ООП (1)

Изменяемое состояние

Объекты независимо друг от друга изменяют состояние

Передача сообщений

Всё, что можно сделать, — послать сообщение

Инкапсуляция

Спрятать реализацию, изменение реализации не влияет на интерфейс

Всё — это объект

Все значения — объекты

Тема 3. ООП и передача сообщений 4

Признаки ООП (2)

Перегрузка

Ad hoc полиморфизм

Параметрический полиморфизм

Параметризованные типы

Наследование интерфейса

Подтипы, классы типов, интерфейсы

Наследование реализации

Можно плодить похожий код через наследование классов

Одиночная диспетчеризация

Код метода выбирается по типу первого параметра и имени метода

Тема 3. ООП и передача сообщений 5

Виды ООП

Передача сообщений через syscalls1.

Композиция и абстракция syscalls2.

ООП в своей памяти3.

Тема 3. ООП и передача сообщений 6

Передача сообщений через syscalls

Интерфейс программы с современной ОС

Пример с strace: cat, lsБайты и сериализация

Тема 3. ООП и передача сообщений 7

Композиция и абстракция syscalls

Протоколы + алгоритмы (сообщения + функции)

Использование АТД вместо байтов

Тема 3. ООП и передача сообщений 8

Пример ООП через syscalls: HTTP

HTTP — уже знакомый протокол

Прикладной протокол поверх TCP

В POSIX-системах поверх интерфейса сокетов

Примитивы, композиция и абстракция syscalls

Рассмотрим socket, httplib, urllib2

Свой пример: curl и aclu

Тема 3. ООП и передача сообщений 9

HTTP: Запрос HTTP

GET /path/to/resource HTTP/1.1Host: example.comConnection: close

Переносы строк \r\n, заголовки заканчиваются

дополнительным \r\n

Тема 3. ООП и передача сообщений 10

HTTP: Ответ HTTP

HTTP/1.1 404 Not FoundDate: Sun, 11 Oct 2009 17:39:30 GMTServer: Apache/2.2.3 (Red Hat)Content-Length: 291Connection: closeContent-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>404 Not Found</title></head><body><h1>Not Found</h1>...

Тема 3. ООП и передача сообщений 11

HTTP: Уровни абстракции

Тема 3. ООП и передача сообщений 12

HTTP: aclu

Another Curl-Like Utility

Пример особенностей ООП через syscalls и тестирования в Python

Основана на socket и aclu.socket2Абстракция Socket with Procedures

aclu.socket2 добавляет recvline, recvn, recvall

Тесты

Функциональные: bash + netcat

Unit-тесты: doctest, unittest, nosetests

Unit-тесты и mock-объекты: unittest, nosetests, minimock

Тема 3. ООП и передача сообщений 13

aclu: Граф вызовов

Обозначения:

Оранжевым отмечены (чистые) функции

Зелёным отмечены сообщения и процедуры с состоянием

Тема 3. ООП и передача сообщений 14

ООП в своей памяти

Каноническое ООП

Изменяемое состояние, функции над состоянием

Ad hoc полиморфизм, fake, proxy

Пример с моделью файла MemFile, StringIO

Тема 3. ООП и передача сообщений 15

ООП в Python

Объекты

Всё — это объект

Атрибуты на основе словарей (dict) атрибутов

Правила динамического разрешения атрибутов

Методы — атрибуты-функции с первым аргументом-объектом

Классы

class — это исполняемый statement, не декларация

Множественное наследование

Корень иерархии object

Есть метаклассы (классы классов)

Тема 3. ООП и передача сообщений 16

Пример объектов и классов Python (1)

class Base(object): def __init__(self, x, y): self.x = x self.foo = y

def method1(self, delta): self.x += delta return self.x

>>> x = Base(2, -1)>>> x.foo-1>>> x.method1(3)5>>> x.method1(3)8

Тема 3. ООП и передача сообщений 17

Пример объектов и классов Python (2)

class Derived(Base): bar = 4

def method1(self, delta): val = Base.method1(self, delta) import math return math.pow(val, 2)

>>> Derived.bar4>>> x = Derived(0, -3)>>> x.bar4>>> x.method1(3)9

Тема 3. ООП и передача сообщений 18

Типы и объекты в Python

Тема 3. ООП и передача сообщений 19

Атрибуты и методы в Python

Порядок разрешения атрибутов:

Словарь объекта

Словарь его класса

Словари базовых классов его класса

Пример:

class C(object): def __init__(self): self.y = 2 def f(self, x): return 4class D(C): pass>>> d = D()>>> d.y>>> # d.__dict__['y'] ... ok2>>> d.f(0)>>> # d.__dict__['f'] ... fail>>> # d.__class__.__dict__['f'] ... fail>>> # d.__class__.__bases__[0].__dict__['f'] ... ok4

Тема 3. ООП и передача сообщений 20

Возможные интерфейсы файла в Python

Тема 3. ООП и передача сообщений 21

Пример ООП в своей памяти: MemFile

Пример реализации класса memfileМожет быть использован как fake file object для тестирования

Класс StringIOБолее эффективные операции на манер строкового буфера

Тема 3. ООП и передача сообщений 22

Преимущества ООП

Естественный интерфейс программы с внешним миром

Передача сообщений: syscalls, IPC, распределённые системы, сети

Построение модульных систем с изменяемым локальным состоянием

Подходит для задач моделирования и GUI

Объекты в программе отражают изменяющиеся объекты мира

Классы совпадают с терминами в предметной области

Тема 3. ООП и передача сообщений 23

Недостатки ООП

Создание чрезмерных уровней и иерархий

Огромное количество классов и объектов, не имеющих отношения к задаче

Серьёзная проблема для библиотек C++, Java, где ООП применяется для любой

задачи

Более сложное тестирование

Нужно подделывать внешнее окружение: fakes, mocks, dummies, stubs, proxies

Число необходимых тестов резко растёт от числа состояний

Сложнее делать выводы о поведении программы

Графы состояний, протокольные последовательности, запрещённые переходы

Нужно знать как ведёт себя внешний мир

Тема 3. ООП и передача сообщений 24

Литература

Pilgrim M. Dive Into Python. — Apress, 2004. —

urn:isbn:978-1590593561, http://www.diveintopython.org/

Ch. 2 - Ch. 6. Your First Python Progam - Exceptions and File Handling

Себеста Р. У. Основные концепции языков программирования. —

Вильямс, 2001. — urn:isbn:5-8459-0192-8

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

Реймонд Э. Искусство программирования для Unix = The Art of

Unix Programming. — Вильямс, 2005. — urn:isbn:5-8459-00791-8,

http://www.faqs.org/docs/artu/

Разд. 4.5. Unix и объектно-ориентированные языки

Разд. 14.4. Сравнение языков программирования

Kay A. The Computer Revolution Hasn't Happend Yet [Electronic

Resource] // OOPSLA'97. — 1997. — http://video.google.com

/videoplay?docid=-2950949730059754521

Тема 3. ООП и передача сообщений 25

Recommended