Написана очередная
порция заметок по парадигмам
программирования. Получилось
нудно, скучно и длинно. Дурной
пример того, как из трех страничек
текста можно сделать пятьдесят.
Куча мелких и тривиальных примеров
с намеками на сверхбольшие
программы. Вот куда, бывает, заводят
попытки разобраться в собственных
мыслях! Зато, можно скачать архив с
первой страницы или просто
прочитать ниже краткое содержание.
В предлагаемых заметках
анализируется техника
построения и использования
программных объектов. При этом
я попытался абстрагироваться
от методологических, ресурсных
и функциональных аспектов.
Рассматривается применение
техники построения
программных объектов в
эволюционном программировании
(кодировании). Упор сделан на
процедурное и объектно-ориентированное
программирование.
Эволюционное программирование
используется при разработке
больших программных систем.
Оно позволяет расширять
функциональные и структурные
возможности программы с
минимальными изменениями уже
написанного кода.
Проведено разделение техники
кодирования на процедурную и
объектно-ориентированную. Это
чисто субъективное решение
основано на использовании ряда
методов построения программ в
"дообъектную" эпоху.
Независимо от техники и
парадигм программирования мы
создаем программные объекты и
отношения между ними,
используя такие понятия как
агрегат и обобщение. К одному и
тому же конечному результату
можно прийти различными путями.
Рассмотрена техника создания
агрегатов и обобщений при
процедурном и объектно-ориентированном
подходах. Сделана попытка
проиллюстрировать ее серий
мелких и тривиальных примеров.
Процедурное агрегирование
обладает большей гибкостью по
сравнению с объектно-ориентированным,
а метафора автономного
полнофункционального объекта
не всегда удобна, так как
вступает в противоречие с
ассоциациями, необходимыми при
построении эволюционно
наращиваемых программ. При
этом можно, используя
процедурный подход, вообразить,
что мы работам с объектами, или
изменить язык
программирования таким
образом, чтобы обычные внешние
процедуры "прикидывались"
внутренними методами объектов.
Объектное обобщение обладает
неоспоримыми преимуществами
при создании эволюционно
расширяемых альтернатив и
агрегатов с неизменяемым
интерфейсом. Эти достоинства,
на мой взгляд, и предопределили
ход дальнейшего практического
использования парадигм
программирования. Хотя, и у
объектных обобщений имеется
ряд недостатков, вместо
исправления которых проще
использовать методы
процедурного программирования.
Высокоэффективное
эволюционное программирование
должно быть многоруким. Иначе,
оно не будет эффективным.
Поэтому, даже в языках,
считающихся чисто объектными,
всегда существуют механизмы
поддержки процедурного стиля,
к коим можно отнести анализ
типа объекта во время
выполнения (даже, если внешне
он прикидывается внутренним
методом).
Будущее за
мультипарадигматическим
программированием (по
Страуструпу). Следовательно, и
методологии скоро вновь начнут
"плыть" в сторону
поддержки смешанных способов
представления программных
объектов, обеспечивая большую
гибкость при проектировании.