25
Тема 3. ООП и передача сообщений Автор: А. С. Власовских Лицензия: Creative Commons Attribution-Noncommercial-Share Alike 3.0 Тема 3. ООП и передача сообщений 1

Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

  • Upload
    others

  • View
    12

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

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

Автор:

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

Лицензия:

Creative Commons Attribution-Noncommercial-Share Alike 3.0

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

Page 2: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

История

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

Page 3: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

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

Объект

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

Сообщение

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

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

Page 4: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

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

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

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

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

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

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

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

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

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

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

Page 5: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

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

Перегрузка

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

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

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

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

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

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

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

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

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

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

Page 6: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

Виды ООП

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

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

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

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

Page 7: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

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

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

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

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

Page 8: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

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

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

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

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

Page 9: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

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

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

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

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

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

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

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

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

Page 10: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

HTTP: Запрос HTTP

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

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

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

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

Page 11: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

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

Page 12: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

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

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

Page 13: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

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

Page 14: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

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

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

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

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

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

Page 15: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

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

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

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

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

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

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

Page 16: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

ООП в Python

Объекты

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

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

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

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

Классы

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

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

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

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

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

Page 17: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

Пример объектов и классов 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

Page 18: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

Пример объектов и классов 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

Page 19: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

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

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

Page 20: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

Атрибуты и методы в 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

Page 21: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

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

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

Page 22: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

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

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

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

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

Page 23: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

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

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

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

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

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

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

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

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

Page 24: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

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

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

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

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

задачи

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

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

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

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

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

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

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

Page 25: Тема 3. ООП и передача сообщенийkspt.icc.spbstu.ru/media/files/2009/course/lang/slides/...Интерфейс программы с современной ОС

Литература

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