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
Есть и другие полезные ресурсы, особенно для тех, кто говорит по-японски. Трудно перечислять онлайновые ресурсы в печатном издании, поскольку они постоянно изменяются. Поисковая машина — ваш лучший друг.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Групповое изменение стилей
Групповое изменение стилей Если мы уже задумались над максимально быстрым изменением интерфейса нашего веб-приложения (отрисовке) через свойство style, то стоит иметь в виду следующий момент. Мы можем изменять свойство cssText, которое отвечает за компилируемые стили
Создание стилей CSS
Создание стилей CSS Обычный формат определения стиля CSS иллюстрирует листинг 7.1. Листинг 7.1 <селектор> { <атрибут стиля 1>: <значение 1>; <атрибут стиля 2>: <значение 2>; . <атрибут стиля n-1>: <значение n-1>; <атрибут стиля n>: <значение n> } Вот основные правила
Таблицы стилей
Таблицы стилей Мы рассмотрели пять разновидностей стилей CSS. Четыре из них — стилевые классы, стили переопределения тега, именованные и комбинированные стили — могут присутствовать только в таблицах стилей. Это мы уже знаем.Таблицы стилей, в зависимости от места их
Создание стилей CSS
Создание стилей CSS Обычный формат определения стиля CSS иллюстрирует листинг 7.1. Листинг 7.1 <селектор> { <атрибут стиля 1>: <значение 1>; <атрибут стиля 2>: <значение 2>; . <атрибут стиля n-1>: <значение n-1>; <атрибут стиля n>: <значение n> } Вот основные правила
Таблицы стилей
Таблицы стилей Мы рассмотрели пять разновидностей стилей CSS. Четыре из них — стилевые классы, стили переопределения тега, именованные и комбинированные стили — могут присутствовать только в таблицах стилей. Это мы уже знаем.Таблицы стилей, в зависимости от места их
Мой опыт в различных проектах
Мой опыт в различных проектах В Центральном Банке Норвегии работает около 40 штатных программистов и вполовину меньше контрактников, и надо сказать, им приходится решать на удивление много разнообразных задач.В то время, когда я там находился, основным проектом был
Панель стилей
Панель стилей Панель стилей Styles, показанная на рис. 2.7, предназначена для создания новых текстовых, размерных и табличных стилей. Рис. 2.7. Панель стилейПанель содержит следующие инструменты: Text Style… – создание новых и редактирование имеющихся текстовых стилей; Dimension Style…
Поддержка распределенных приложений и отсоединенной модели программирования
Поддержка распределенных приложений и отсоединенной модели программирования В технологии ADO.NET предусмотрена эффективная и гибкая поддержка приложений, распределенных между несколькими компьютерами (серверами баз данных, серверами приложений и клиентскими рабочими
Создание пользовательских стилей
Создание пользовательских стилей Несмотря на то что в каждой версии Word количество заготовленных стилей увеличивается, весьма вероятно, что вы не найдете среди них именно то, что нужно вам в данный момент. По этой причине в Microsoft Word предусмотрена также возможность
Использование стилей
Использование стилей Вы можете быстро применить стиль оформления к выделенному диапазону ячеек. Стиль включает в себя цвет заливки, а также цвет и атрибуты шрифта.Чтобы применить к ячейке или диапазону готовый стиль, нужно предварительно выделить эту ячейку или
Панель стилей
Панель стилей Панель стилей Styles, показанная на рис. 2.6, предназначена для создания новых текстовых, размерных и табличных стилей. Рис. 2.6. Панель стилейПанель содержит следующие инструменты: Text Style… – создание новых и редактирование имеющихся текстовых стилей; Dimension
Панель стилей
Панель стилей Панель стилей Styles, показанная на рис. 2.7, предназначена для создания новых текстовых, размерных и табличных стилей. Рис. 2.7. Панель стилейПанель содержит следующие инструменты: Text Style… – создание новых и редактирование имеющихся текстовых стилей; Dimension Style…
Панель стилей
Панель стилей Панель стилей Styles, показанная на рис. 2.3, предназначена для создания новых текстовых, размерных и табличных стилей. Рис. 2.3. Панель стилейПанель содержит следующие инструменты: Text Style… – создание новых и редактирование имеющихся текстовых стилей; Dimension Style…
Создание стилей
Создание стилей Вы установили основные параметры текста для ввода технических требований. Однако прежде чем закрыть данное окно, сохраним эти настройки. Иначе каждый раз перед вводом технических требований на очередном листе вашего проекта придется вводить все
21.2.9. Применение различных цветов
21.2.9. Применение различных цветов Благодаря применению цвета можно придать экрану, где. отображается поток ввода, более привлекательный вид. При работе с цветами используется стандарт ANSI. Однако не все цвета можно применить во всех системах. Предлагаем перечень наиболее
Инфицирование различных платформ
Инфицирование различных платформ Самой большой проблемой, с которой создатели вирусов сталкиваются в наши дни, является невозможность заражения всех возможных компьютеров. Несмотря на монополию фирмы Microsoft, существуют пользователи, работающие в операционных системах,