Re: Математика и ООП: аналогии
От: Gaperton http://gaperton.livejournal.com
Дата: 03.11.03 12:42
Оценка: 68 (3)
Здравствуйте, Кирилл Осенков, Вы писали:

В целом наблюдение верное, позволю себе добавить несколько уточнений:
КО>Например, вот развитие понятия интерфейса в ООП. Начиналось все с того, что некоторые данные из structа научились скрывать. Потом началось повальное скрытие данных — инкапсуляция . И уже в то время оформились обратные идеи — вместо того, чтобы скрывать некоторые данные из всех доступных, надо скрыть все и выдать нагора тщательно отмеренную чуточку — интерфейс. Просто дать обязательство, что помимо всего прочего, я мол являюсь по совместительству и этим-то.

Началось все достаточно давно с появления концепции "Абстрактный Тип Данных" (то, что сейчас в ООП называется "инкапсуляцией"). Определение таково: тип данных, определяемый набором операций над ним. Концепция совершенно математическая, и вообще говоря самостоятельная. Известны языки, поддерживающие только инкапсуляцию, без наследования и полиморфизма. Уже в конце 70-х курс обучения программированию в Массачусетском технологическом институте был полностью основан на концепции ADT. Желающие могут ознакомиться с этим курсом и сейчас в замечательной книге "Использование абстракций и спецификаций при разработке программ" (Лисков Б., Гатэг Дж. 1989). Кстати, если кто не читал, рекомендую , получите массу удовольствия.

КО>С появлением Паттернов от Банды Четырех эта идея окончательно оформилась — вместо того, чтобы скрыть побольше, надо стремиться показать поменьше. Теперь у нас есть интерфейс, и мы можем с ним работать, ничего не зная о том, что за сущность за ним скрывается — и нам собственно все равно, главное, что она реализовывает нужный нам интерфейс.


Идея, соответственно, оформилась еще до вхождения в моду ООП. Единственное, что Gang of Four сделали действительно полезного — они дали паттернам имена, и теперь разработчики могут лучше понимать друг друга, когда обсуждают дизайн. Ну, кроме того, что они написали хорошую и интересную книгу

КО>Или вот еще — иерархия классов и множество теорем в математике. Если разрешить множественное наследование, то каждый новый класс наследует какое-то количество уже созданных, а каждая теорема опирается в доказательстве на какое-то подмножество уже доказанных. И при этом верхушки иерархий — интерфейсы или аксиоматические определения.


Отношение "следствие" в математике ИМХО не очень хорошая аналогия отношения тип-подтип в ООП. Наследование, это почти что отношение "подмножество". Почему "почти"? Вот пара задачек, как раз на эту тему:
1) Связанны-ли отношением "подкласс" действительные и комплексные числа. Если да, то как. Требуется аргументированный ответ.
2) То же для круга и эллипса.

Великолепные задачки, имхо. Позволяют на практике проверить, как именно человек понимает ООП.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.