Новое веяние - сервис-ориентированное программирование, отменяет ООП или дополняет? Попробуем разобраться...
В SO все основные понятия OO сохранились, т.е. есть объекты, есть обмен
сообщениями, есть интерфейсы (контракты).
Замечу, что классы,
наследования, шаблоны и т.д. в mainstream OO введены только для того, чтобы
быстрее реализовать код, и эти концепции никак не помогают
взаимодействию между объектами.
Т.е. наследование, классы, шаблоны
— все это есть только на этапе разработке, как только мы программу запустили, то
никакого наследования (наследования реализации), классов, шаблонов — нет. Есть
только объекты, сообщения (вызовы методов) и интерфейсы(контракты) и все.
В данном случае, мы имеем не отрицание ОО, а скорее смещение центра
тяжести. Если в обычном программировании — мы сами управляем каждым объектом.
временем его и жизни и т.д., то в распределенном мире (в мире сервисе) мы уже не
можем управлять чужими объектами, мы можем только с ними общаться.
Вот мы
и имеем смещение, в первую очередь, к общению между объектами, вместо более
раннего центра тяжести — реализации объектов. Смещение к этапу выполнения вместо
этапа разработки.
Все три кита ООП остались и в СОП (местами немного модифицировавшись):
1. Инкапсуляция - полностью осталась, и даже пошла дальше. Вместо слов public, protected, private - появились роли, которые намного гибче регулирует доступность внутреннего состояния сервиса. например, роль "пользователь" в форуме одно, а роль "модератор" - уже больше, а роль "админ" вообще почти всё.
2. Наследование - заменилось на агрегацию, как еще в древнем COM-е (в котором тоже не было наследования, но была агрегация)
3. Полиморфизм - полностью остался, и активно продвигается на всех уровнях - появились такие стандарты как rss, ajax, openid и т.д., а под этими стандартами самые различные реализации