11.2.11. Поддержка различных стилей программирования

11.2.11. Поддержка различных стилей программирования

Brother, can you paradigm?

Граффити на здании IBM в Остине, 1989

В различных кругах популярны разные философии программирования. Часто их трудно охарактеризовать с точки зрения объектной ориентированности или динамичности, а некоторые вообще не зависят от того, является ли язык динамическим или объектно-ориентированным.

Поскольку мы отнюдь не эксперты в этих вопросах, будем полагаться в основном на чужие слова. Так что воспринимайте то, что написано ниже, с некоторой долей скепсиса.

Некоторые программисты предпочитают стиль ООП на основе прототипов (или ООП без классов). В этом мире объект не описывается как экземпляр класса, а строится с нуля. На базе такого прототипа могут создаваться другие объекты. В Ruby есть рудиментарная поддержка такого стиля программирования, поскольку допускаются синглетные методы, имеющиеся только у отдельных объектов, а метод clone клонирует синглеты. Интересующийся читатель может также обратить внимание на простой класс OpenStruct для построения объектов в духе языка Python; не забывайте также о том, как работает метод method_missing.

Парочка ограничений в Ruby препятствует реализации ООП без классов. Некоторые объекты, например Fixnum, хранятся как непосредственные значения, а не ссылки, поэтому не могут иметь синглетных методов. В будущем ситуация, вероятно, изменится, но пока невозможно предсказать, когда это произойдет.

В функциональном программировании (ФП) упор делается на вычисление выражений, а не на исполнение команд. Функциональным называется язык, поддерживающий ФП, но на этом всякая определенность заканчивается. Почти все согласятся, что Haskell — настоящий функциональный язык, a Ruby таковым, безусловно, не является.

Но в Ruby есть минимальная поддержка ФП, он располагает богатым набором методов для манипулирования массивами (списками) и поддерживает объекты Proc, позволяющие инкапсулировать и многократно вызывать код. Ruby также допускает сцепление методов, весьма распространенное в ФП. Правда, дело портят «восклицательные» методы (например, sort! или gsub!), которые возвращают nil, если вызывающий объект не изменился в результате выполнения.

Предпринимались попытки создать библиотеку, которая стала бы «уровнем совместимости» с ФП, заимствуя некоторые идеи из языка Haskell. Пока эти попытки ни к чему завершенному не привели.

Интересна идея аспектно-ориентированного программирования (АОП). Это попытка рассечь модульную структуру программы. Иными словами, некоторые задачи и механизмы системы разбросаны по разным участкам кода, а не собраны в одном месте. То есть мы пытаемся придать модульность вещам, которым в традиционном объектно-ориентированном или процедурном программировании с трудом поддаются «модуляризации». Взгляд на программу оказывается перпендикулярен обычному.

Разумеется, Ruby создавался без учета АОП. Но это гибкий и динамический язык, поэтому не исключено, что такой подход может быть реализован в виде библиотеки. Уже сейчас существует библиотека AspectR, представляющая собой первую попытку внести аспектно-ориентированные черты в Ruby; последнюю ее версию можно найти в архиве приложений Ruby.

Идея «проектирования по контракту» (Design by Contract — DBC) хороша знакома поклонникам языка Eiffel, хотя и вне этого круга она тоже известна. Смысл состоит в том, что некоторый кусок кода (метод или класс) реализует контракт; чтобы код правильно работал, должны выполняться определенные предусловия, и тогда гарантируется, что по завершении работы будут выполнены некоторые постусловия. Надежность системы можно существенно повысить, введя возможность формулировать контракт явно и автоматически проверять его во время выполнения. Полезность такого подхода подкрепляется наследованием информации о контракте при расширении классов.

В язык Eiffel методология DBC встроена явно, в Ruby — нет. Однако имеется по крайней мере две работающие библиотеки, реализующие DBC, и мы рекомендуем вам выбрать одну из них и изучить внимательнее.

Паттерны проектирования стали темой оживленных дискуссий на протяжении последних нескольких лет. Конечно, они мало зависят от конкретного языка и могут быть реализованы на самых разных языках. Но необычайная гибкость Ruby, возможно, делает их практически более полезными, чем в других средах. Хорошо известные примеры приведены в других местах; паттерн Visitor (Посетитель) реализуется стандартным итератором each, а многие другие паттерны входят в стандартный дистрибутив Ruby (библиотеки delegator.rb и singleton.rb).

С каждым днем все больше приверженцев завоевывает методология экстремального программирования (Extreme Programming — XP), поощряющая, среди прочего, раннее тестирование и постоянную переработку (рефакторинг).

XP — технология, не зависящая от языка, хотя к некоторым языкам она, возможно, более приспособлена. Разумеется, на наш взгляд, в Ruby рефакторинг реализуется проще, чем во многих языках, но это субъективное мнение. Однако, наличие библиотеки Test::Unit (и других) позволяет «поженить» Ruby и XP. Эта библиотека облегчает автономное тестирование компонентов, она функциональна богата, проста в использовании и доказала свою полезность в ходе разработки эксплуатируемых в настоящее время программ на Ruby. Мы горячо поддерживаем рекомендуемое XP раннее и частое тестирование, а тем, кто желает воплотить этот совет в Ruby, предлагаем ознакомиться с Test::Unit. (ZenTest — еще один отличный пакет, включающий некоторые возможности, которые в Test::Unit отсутствуют.)

Когда вы будете читать этот раздел, многие обсуждаемые в нем технологии усовершенствуются. Как обычно, самую актуальную информацию можно найти на следующих ресурсах:

Конференция comp.lang.ruby

Архив приложений Ruby

rubyforge.org

ruby-doc.org

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

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Мой опыт в различных проектах

Из книги Каждому проекту своя методология автора Коуберн Алистэр

Мой опыт в различных проектах В Центральном Банке Норвегии работает около 40 штатных программистов и вполовину меньше контрактников, и надо сказать, им приходится решать на удивление много разнообразных задач.В то время, когда я там находился, основным проектом был


Групповое изменение стилей

Из книги Разгони свой сайт автора Мациевский Николай

Групповое изменение стилей Если мы уже задумались над максимально быстрым изменением интерфейса нашего веб-приложения (отрисовке) через свойство style, то стоит иметь в виду следующий момент. Мы можем изменять свойство cssText, которое отвечает за компилируемые стили


Создание стилей

Из книги ArchiCAD 11 автора Днепров Александр Г

Создание стилей Вы установили основные параметры текста для ввода технических требований. Однако прежде чем закрыть данное окно, сохраним эти настройки. Иначе каждый раз перед вводом технических требований на очередном листе вашего проекта придется вводить все


Использование стилей

Из книги Excel. Мультимедийный курс автора Мединов Олег

Использование стилей Вы можете быстро применить стиль оформления к выделенному диапазону ячеек. Стиль включает в себя цвет заливки, а также цвет и атрибуты шрифта.Чтобы применить к ячейке или диапазону готовый стиль, нужно предварительно выделить эту ячейку или


Панель стилей

Из книги AutoCAD 2009 для студента. Самоучитель автора Соколова Татьяна Юрьевна

Панель стилей Панель стилей Styles, показанная на рис. 2.7, предназначена для создания новых текстовых, размерных и табличных стилей. Рис. 2.7. Панель стилейПанель содержит следующие инструменты: Text Style… – создание новых и редактирование имеющихся текстовых стилей; Dimension Style…


Поддержка распределенных приложений и отсоединенной модели программирования

Из книги Обработка баз данных на Visual Basic®.NET автора Мак-Манус Джеффри П

Поддержка распределенных приложений и отсоединенной модели программирования В технологии ADO.NET предусмотрена эффективная и гибкая поддержка приложений, распределенных между несколькими компьютерами (серверами баз данных, серверами приложений и клиентскими рабочими


Панель стилей

Из книги AutoCAD 2009. Начали! автора Соколова Татьяна Юрьевна

Панель стилей Панель стилей Styles, показанная на рис. 2.3, предназначена для создания новых текстовых, размерных и табличных стилей. Рис. 2.3. Панель стилейПанель содержит следующие инструменты: Text Style… – создание новых и редактирование имеющихся текстовых стилей; Dimension Style…


Создание пользовательских стилей

Из книги Word 2007.Популярный самоучитель автора Краинский И

Создание пользовательских стилей Несмотря на то что в каждой версии Word количество заготовленных стилей увеличивается, весьма вероятно, что вы не найдете среди них именно то, что нужно вам в данный момент. По этой причине в Microsoft Word предусмотрена также возможность


Создание стилей CSS

Из книги HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов. автора Дронов Владимир

Создание стилей CSS Обычный формат определения стиля CSS иллюстрирует листинг 7.1. Листинг 7.1 <селектор> { <атрибут стиля 1>: <значение 1>; <атрибут стиля 2>: <значение 2>; . <атрибут стиля n-1>: <значение n-1>; <атрибут стиля n>: <значение n> } Вот основные правила


Таблицы стилей

Из книги HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов автора Дронов Владимир

Таблицы стилей Мы рассмотрели пять разновидностей стилей CSS. Четыре из них — стилевые классы, стили переопределения тега, именованные и комбинированные стили — могут присутствовать только в таблицах стилей. Это мы уже знаем.Таблицы стилей, в зависимости от места их


Создание стилей CSS

Из книги AutoCAD 2009. Учебный курс автора Соколова Татьяна Юрьевна

Создание стилей CSS Обычный формат определения стиля CSS иллюстрирует листинг 7.1. Листинг 7.1 <селектор> { <атрибут стиля 1>: <значение 1>; <атрибут стиля 2>: <значение 2>; . <атрибут стиля n-1>: <значение n-1>; <атрибут стиля n>: <значение n> } Вот основные правила


Таблицы стилей 

Из книги AutoCAD 2008 для студента: популярный самоучитель автора Соколова Татьяна Юрьевна

Таблицы стилей  Мы рассмотрели пять разновидностей стилей CSS. Четыре из них — стилевые классы, стили переопределения тега, именованные и комбинированные стили — могут присутствовать только в таблицах стилей. Это мы уже знаем.Таблицы стилей, в зависимости от места их


Панель стилей

Из книги Защита от хакеров корпоративных сетей автора Автор неизвестен

Панель стилей Панель стилей Styles, показанная на рис. 2.7, предназначена для создания новых текстовых, размерных и табличных стилей. Рис. 2.7. Панель стилейПанель содержит следующие инструменты: Text Style… – создание новых и редактирование имеющихся текстовых стилей; Dimension Style…


Панель стилей

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид

Панель стилей Панель стилей Styles, показанная на рис. 2.6, предназначена для создания новых текстовых, размерных и табличных стилей. Рис. 2.6. Панель стилейПанель содержит следующие инструменты: Text Style… – создание новых и редактирование имеющихся текстовых стилей; Dimension


Инфицирование различных платформ

Из книги автора

Инфицирование различных платформ Самой большой проблемой, с которой создатели вирусов сталкиваются в наши дни, является невозможность заражения всех возможных компьютеров. Несмотря на монополию фирмы Microsoft, существуют пользователи, работающие в операционных системах,


21.2.9. Применение различных цветов

Из книги автора

21.2.9. Применение различных цветов Благодаря применению цвета можно придать экрану, где. отображается поток ввода, более привлекательный вид. При работе с цветами используется стандарт ANSI. Однако не все цвета можно применить во всех системах. Предлагаем перечень наиболее