Границы применимости парадигм программирования
От: Borisman2 Киргизия  
Дата: 04.12.04 08:29
Оценка: 104 (7) +1
Вступление.
Совственно, к сабжу меня непосредственно привели 2 вещи
1) http://www.geocities.com/tablizer/oopbad.htm
пусть я не совсем согласен с автором касательно того, что ООП "в целом плохо", однако, как и у любой парадигмы (технологии, методологии, науки и вообще) у ООП, очевидно, есть границы применимости. Рекомендую сначала прочитать статью в приведенной ссылке.
2) Мой собственный печальный опыт. Недавно (2 мес назад) я закончил разработку собственной ООБД (на самом деле это очень простая штука, не пугайтесь), по прототипу www.prevayler.org Предполагалось применение этой ООБД в реальном проекте по учету кредитования.
Все хорошо, однако вот дальше разработки ООБД дело не пошло. Вся проблема заключалась в том, что я не смог получить удовлетворяющую меня модель предметной области с использованием ООБД. Сказались два фактора:
1) "Многоклассовость" реального мира, реальный мир неукладывается в рамки определенной строгой классификации (попытки обойти это подробно описаны здесь: http://www.rsdn.ru/Forum/Message.aspx?mid=833080&only=1
Автор: borisman2
Дата: 01.10.04
)
2) Навигационная сущность ООП. Для того, чтобы получить доступ к какому-то обхекту, необходимо сначала найти корневой объект и затем пройти по цепочке других объектов до нужного объекта. Вчера я с ужасом понял, что именно по такому пути шли навигационные базы данных, умершие с появлением РСУБД!!! Другие методы — например, назначение каждому обхетку OID или хуже того, применение экстентов — это ведь строго говоря, кусочки реляционного подхода, применненые к ООБД

Основная часть.
Всвязи с тем, что ООП явно не является лучшей (читай, универсальной) парадигмой, а также, похоже, не являются универсальными ни функциональное, нилогическое ни прочее другое программирование, я попытался хотя бы примерно обрисовать для себя границы применения этих парадигм. Т.е. ответить на вопрос: когда следует использовать фунцкиональный подход, когда ООП, когда процедурный и т.д. Оказалось не так-то просто ответить на этот вопрос.
Пока что мысли такие.

Для моделирования действительности лучше применять реляционный подход. К сожалению, предметная область (читай, реальный мир) как правило настолько сложна, что описать ДАННЫЕ (читай, атрибуты сущностей и отношения между ними) — уже дело не из легких. Если же сюда подключить еще и поведение (читай ООП), все настолько усложнится, что впору бросать проект.

Для реализации ПРОЦЕССОВ происходящих в реальном мире лучше подходит процедурное программирование.

Для описания ТРАНСФОРМАЦИЙ ДАННЫХ (например, между разными БД) лучший кандидиат, несомненно, функциональное прораммирование.

Для описания УПРАВЛЕНИЯ и реализации РЕАКТИВНЫХ СИСТЕМ лучше всего подходит автоматное программирование (www.softcraft.ru)

ООП хорошо для "внутреннего" использования, т.е. для работы с внутренними объектами, никак не связанными с объектами реального мира. Например, мой вебсервер является объектом, не имеющим аналогов в реальном мире. Например, подсистема управления транзакциями TransactionLog тоже к реальному миру имеет отдаленное весьма отношение. Т.е. ООП хорошо применять к таким объектам, над которыми мы имеем полную власть, т.е. над теми, которые мы сами придумали и сами изменяем при необходимости. Тогда не возникает такой ситуации, когда иерархия обектов перестает соответсвовать действительности.

Куда приткнуть логическое программирование, я, за недостатком образовния , просто ума не приложу.

Заключение
В общем, это довольно сумбурная попытка определить границы применимости каждой парадигмы. Если кто-нибудь знает о подобных попытках, проводимых в прошлом, просьба сообщить. Если у кого есть собственные соображения о границах применимости той или иной парадигмы — просьба высказываться.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.