8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру"

8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру"

8 Ортогональность

Ортогональность очень принципиальна, если вы желаете создавать системы, которые просто поддаются проектированию, сборке, тестированию и расширению. Но этому принципу изредка учят конкретно. Нередко он является только сокрытым достоинством других различных методик, которые вы исследуете 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру". Это некорректно. Как вы научитесь конкретно использовать принципы ортогональности, вы сходу заметите, как стало лучше качество создаваемых вами систем.

^ Что такое ортогональность?

Термин «ортогональность» взят из геометрии. Две полосы являются ортогональными 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", если они пересекаются под прямым углом, к примеру, оси координат на графике. В определениях векторной алгебры две такие полосы являются независящими. Если двигаться повдоль одной из линий, то проекция передвигающейся 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" точки на другую линию не изменяется.



Этот термин был введен в информатике для обозначения некоторой разновидности независимости либо несвязанности. Два либо более объекта ортогональны, если конфигурации, вносимые в какой-то из них, не оказывают влияние 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" на хоть какой другой. В хорошо спроектированной системе программка базы данных будет ортогональной к интерфейсу юзера: вы сможете поменять интерфейс юзера без воздействия на базу данных и поменять местами 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" базы данных, не меняя интерфейса.

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

Неортогонольноя система

Представим, вы находитесь в экскурсионном вертолете, совершающем полет над Гранд-Каньоном, когда пилот, который сделал 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" ошибку, наевшись рыбы за обедом, в один момент вскрикивает и теряет сознание. По счастливой случайности это происходит, когда вы парите на высоте 30 метров. Вы догадываетесь, что рычаг управления общим шагом несущего 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" винта7 обеспечивает подъем машины, так что, если его немного опустить, вертолет начнет плавненько понижаться. Но когда вы пытаетесь сделать это, то понимаете, что жизнь – не такая уж обычная штука. Вертолет клюет носом 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", и вас начинает крутить по спирали на лево. В один момент вы осознаете, что управляете системой, в какой каждое воздействие имеет побочные эффекты. При нажатии на левый рычаг вам придется сделать уравновешивающее движение вспять правым 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" рычагом и надавить на правую педаль. Но при всем этом каждое из этих действий вновь воздействует на все органы управления. Внезапно вам приходится жонглировать неописуемо сложной системой, в какой 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" хоть какое изменение оказывает влияние на все другие управляющие воздействия. Вы испытываете феноменальную нагрузку: ваши руки и ноги находятся в неизменном движении, пытаясь уравновесить все взаимодействующие силы.

Органы управления вертолетом точно не являются 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" ортогональными.

^ Достоинства ортогональности

Как указывает пример с вертолетом, неортогональные системы труднее изменять и держать под контролем. Если составляющие системы отличаются высочайшей степенью взаимозависимости, то нереально убрать какую-либо неисправность только на локальном 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" уровне.


Подсказка 13: Исключайте взаимодействие меж объектами, не относящимися друг к другу


Мы желаем спроектировать составляющие, которые являются самодостаточными: независящими, с единственным, точным предназначением; в книжке Йордона и Константина [YC86] это явление именуется 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" сцеплением (cohesion). Когда составляющие изолированы друг от друга, вы убеждены, что можно поменять какой-то из них. не заботясь об других. Пока наружные интерфейсы этого компонента остаются постоянными, вы сможете быть размеренны, что не 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" создадите заморочек, которые распространятся по всей системе.

С созданием ортогональных систем у вас появятся два огромных достоинства: повышение производительности и понижение риска.

Повышение производительности

• Изменения в системе локализуются, потому периоды разработки 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" и тестирования сократятся. Легче написать относительно маленькие, самодостаточные составляющие, чем один большой программный модуль. Обыкновенные составляющие могут быть спроектированы, запрограммированы, протестированы и потом позабыты – не надо безпрерывно поменять имеющийся текст по мере того, как 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" к нему добавляются новые куски.

• Ортогональный подход также содействует неоднократному использованию компонент. Если составляющие имеют определенную, четкую сферу ответственности, они могут комбинироваться с новыми компонентами методами, которые не предполагались при их начальной 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" реализации. Чем меньше связанность в системах, тем легче их перенастроить и провести их оборотное проектирование.

• При комбинировании ортогональных компонент происходит чуть приметное повышение производительности. Представим, что один компонент способен 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" производить AJ, а 2-ой – N разных операций. Если эти составляющие ортогональны и комбинируются, то в сумме они способны выполнить М х N разных операций. Но если два компонента не являются ортогональными, то они будут 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" перекрываться и итог их деяния будет наименьшим по сопоставлению с ортогональными компонентами. Вы получаете большее количество многофункциональных способностей в пересчете на единичное усилие, если комбинируете меж собой ортогональные составляющие.

Понижение риска 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру"

Ортогональный подход приводит к понижению уровня риска, присущего хоть какой разработке.

• Ошибочные куски текста программки изолируются. Если модуль содержит ошибку, то возможность ее распространения на всю систему миниатюризируется. Не считая того, неверный 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" кусок может быть извлечен и заменен новым (исправленным).

• Конечный продукт (система) становится наименее хрупким. Задачи, появляющиеся при внесении маленьких конфигураций и устранении недостатков на определенном участке, не проходят далее этого участка 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру".

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

• Вы не будете очень очень привязаны к определенному субподрядчику, программному продукту либо платформе, так как интерфейсы меж компонентами 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", производимыми фирмами-субподрядчиками, не будут играть главенствующей роли в проекте.

Разглядим некие из методов, с помощью которых вы можете ввести принцип ортогональности в вашу работу.

^ Проектные группы

Приходилось ли вам замечать, как отлично 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" работают проектные команды, все члены которых знают, что делать, и стопроцентно отдают себя делу, тогда как в других командах сотрудники повсевременно препираются меж собой и не собираются ни в чем уступать 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" друг дружке?

Часто это не что другое, как неувязка ортогональности. Если команды организованы с огромным числом перекрытий, то сотрудники путают свои должностные обязанности. Для хоть какого конфигурации нужно собирать всю команду 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", так как оно, может быть, затронет каждого.

Как разбить команду на группы с четкими обязательствами и наименьшим перекрытием? На этот вопрос нет обычного ответа. В некой степени это находится в зависимости от 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" проекта и вашего анализа областей, которые в перспективе могут поменяться. Это зависит также от людей, находящихся в вашем распоряжении. Мы предпочитаем отделять инфраструктуру от приложения. Каждому из главных инфраструктурных компонент (база данных, интерфейс связи 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", промежуточное программное обеспечение и т. д.) приписывается только ему принадлежащая группа. Схожим образом делается и разделение многофункциональных способностей приложения. После чего мы изучаем людей, которые имеются в нашем распоряжении сейчас (либо 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" планируем их возникновение в дальнейшем), и сообразно этому корректируем состав групп.

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

Проектирование

Большая часть разработчиков знакомо с потребностью в проектировании ортогональных систем, хотя они наверное употребляют определения «модульный», "компонентно-ориентированный" и «многоуровневый» для описания определенного процесса. Системы должны быть скомпонованы из набора 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" взаимодействующих модулей, любой из который реализует многофункциональные способности независимо от других. Время от времени эти составляющие объединены в уровни, любой из которых обеспечивает некоторый уровень абстракции. Данный многоуровневый подход является массивным способом проектирования ортогональных 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" систем. Так как на каждом уровне употребляются только абстракции, обеспеченные на низших уровнях, можно просто поменять главные реализации, не затрагивая самой программки. Иерархическое представление также уменьшает риск возникновения неконтролируемых 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" зависимостей меж модулями. Иерархическое представление нередко показываются при помощи диаграмм, как на рисунке 2.1.

Рис. 2.1. Обычная диаграмма иерархической структуры



Существует обычный тест на ортогональность проектирования. Как вы составили схему компонент, спросите себя: "Сколько модулей подвергнутся воздействию 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", если я резко изменю требования по определенной функции?" В ортогональной системе ответ должен быть «один».8 Перемещение кнопки на панели графического интерфейса юзера не должно добиваться внесения конфигураций в схему базы данных 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру". Добавление контекстно-зависимой справки не должно поменять подсистему выставления счетов.

Разглядим сложную систему контроля и управления отопительной установкой. Сначало требовалось наличие графического интерфейса, но потом требования были изменены, с тем чтоб добавить систему 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" речевого ответа и управления установкой с помощью телефона с тональным набором. В ортогонально спроектированной системе для этого вам пришлось бы поменять только модули, связанные с интерфейсом юзера, а основная логика 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" управления предприятием остается постоянной. По сути, если вы кропотливо структурируете систему, то у вас должна быть возможность поддержки обоих интерфейсов при наличии одной и той же программной базы. В разделе "Всего только представление" говорится о 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" написании программ, в каких отсутствует связанность, используя парадигму "модель-представление-контроллер" (Model-View-Controller), подходящую в данной ситуации.

Стоит спросить себя, как защитить вашу конструкцию от конфигураций в внешнем мире. К примеру 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", вы пользуетесь номером телефона в качестве идентификатора заказчика. Что произойдет, если телефонная станция изменит коды междугородной связи? Не полагайтесь на характеристики предметов, которыми не сможете управлять.

^ Инструментарии и библиотеки 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру"

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

В один прекрасный момент создатели работали над проектом, в каком требовалось, чтоб некоторый кусок программки 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" на языке Java производился автономно – на сервере и в удаленном режиме – на клиентской машине. В данном случае вероятными вариациями рассредотачивания классов были технологии RMI и CORBA. Если удаленный доступ к 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" классу обеспечивался с помощью RMI, то в данном случае каждое воззвание к удаленному способу в этом классе могло бы привести к генерации исключения, значащей, что эта доверчивая реализация востребовала бы от нас 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" обработки этого исключения каждый раз при использовании удаленных классов. В этом случае внедрение RMI очевидно не ортогонально: программка, обращающаяся к удаленным классам, не должна зависеть от их физического расположения. Другой метод – разработка 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" CORBA – не налагает подобного ограничения: мы можем написать программку, для которой не имеет значения, где на физическом уровне находятся классы.

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

Увлекательным примером ортогональности является система Enterprise Java Beans 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" (EJB). В большинстве диалоговых систем обработки запросов прикладная программка должна обозначать начало и окончание каждой транзакции. В системе EJB эта информация выражена описательно в виде метаданных вне всех программ. Та же 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" самая прикладная программка может работать в разных транзакционных средах EJB без каких-то конфигураций. Возможно, это станет прототипом многих операционных сред грядущего.

Другой увлекательной проверкой на ортогональность является разработка Aspect-Oriented Programming (АОР 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру") – исследовательский проект конторы Xerox Pare ([KLM+97] и [URL 49]). Разработка АОР позволяет выразить в одном-единственном месте линию поведения, которая в неприятном случае была бы распределена по всему начальному тексту программки. К примеру 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", журнальные сообщения обычно генерируются методом очевидных воззваний к некой функции записи в журнальчик по всему начальному тексту. Используя технологию АОР, вы реализуете функцию записи в журнальчик ортогонально к записываемым 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" данным. Используя версию АОР для языка Java можно записать сообщение журнальчика при входе в хоть какой способ класса Fred, запрограммировав нюанс:

aspect Trace {

advise * Fred.*(…) {

static before {

Log.write("-» Entering " + thisJoinPoint.methodName);

}

}

}

При вплетении 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" этого нюанса в текст вашей программки будут генерироваться трассировочные сообщения. Если этого не сделать, не будет и сообщений. В обоих случаях начальный текст остается постоянным.

^ Написание текста программки

Каждый раз 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", когда вы пишете программку, вы подвергаетесь риску понижения уровня ортогональности вашего приложения. Если вы повсевременно не отслеживаете не только лишь то, что вы делаете, да и весь контекст приложения, то существует опасность нечаянного дублирования многофункциональных 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" способностей в неком другом модуле либо выражения имеющихся познаний два раза.

Есть ряд методик, которые можно использовать для поддержки ортогональности:

• ^ Сохраните вашу программку «несвязанной». Напишите «скромную» программку – модули, которые не открывают ничего 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" излишнего для других модулей и не полагаются на их внедрение. Попытайтесь применить закон Деметера [LH89], который дискуссируется в разделе "Несвязанность и закон Деметера". По мере надобности конфигурации состояния объекта это 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" должен делать сам объект. В таком случае программка остается изолированной от реализации другой программки, а возможность того, что система остается ортогональной, возрастает.

• ^ Опасайтесь глобальных данных. Каждый раз, когда ваша программка ссылается на 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" глобальные данные, она привязывается к другим компонентам, использующим эти данные. Даже глобальные переменные, которые вы собираетесь использовать только для чтения, могут вызвать трудности (к примеру, если вам нужно срочно поменять программку 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", сделав ее многопоточной). Вообщем программка станет проще в осознании и сопровождении, если вы очевидно перешлете хоть какой требуемый контекст в ваши модули. В объектно-ориентированных приложениях контекст нередко пересылается как параметр к конструкторам объектов. В 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" другой программке вы сможете сделать конструкции, содержащие контекст, и обходить ссылки на их.

Шаблон Singleton, упомянутый в книжке "Design Patterns" [GHJV95], представляет собой метод подтвердить существование единственного представителя объекта определенного 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" класса. Многие употребляют эти объекты типа Singleton как собственного рода глобальную переменную (в особенности при работе с языками типа Java, которые по другому не поддерживают технологию глобальных переменных). Будьте внимательны с шаблонами 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" Singleton – они также могут приводить к ненадобному связыванию.

• ^ Подобные функции. Часто вы сталкиваетесь с набором функций, схожих друг на друга; может быть, они употребляют общий кусок сначала и конце программки, но 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" в ее середине любая пользуется своим методом. Дублированная программка является признаком структурных заморочек. Для того чтоб составить программку лучше, следует направить внимание на шаблон Strategy в книжке "Design Patterns".

Пусть неизменное критичное отношение к 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" вашей программке войдет у вас в привычку. Отыскиваете любые способности реорганизации для усовершенствования ее конструкции и увеличения уровня ортогональности. Этот процесс именуется реорганизацией, и он важен так, что в книжке ему посвящен целый 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" раздел (см. "Реорганизация").

Тестирование

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

Процедура сборки модульного теста сама по для себя является увлекательным тестом на ортогональность. Что требуется, чтоб собрать и скомпоновать тест модуля? Должны 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" ли вы использовать огромную часть системы только для того, чтоб скомпилировать либо скомпоновать тест? В данном случае модуль прекрасно связан с оставшейся частью системы.

Момент устранения ошибки также подходит для оценки 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" ортогональности системы в целом. Когда вы сталкиваетесь с неувязкой, оцените, как локален процесс ее устранения. Необходимо поменять только один модуль, либо конфигурации должны происходить по всей системе? Когда вы меняете что-либо, устраняются ли 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" при всем этом все ошибки либо происходит таинственное возникновение новых? Это успешный момент для внедрения автоматизации. Если вы применяете систему управления начальным текстом (что вы будете делать, прочитав раздел "Средства регулирования начальным 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" текстом"), комментируйте устранение ошибок, когда вы осуществляете возвращение модифицированного модуля в библиотеку после тестирования. Потом вы сможете генерировать каждомесячные отчеты, где анализируются тенденции в ряде начальных файлов, в каких выполнялось 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" устранение ошибок.

Документация

Что умопомрачительно, ортогональность применима и к документации. Координатами являются содержание и представление. Если документация вправду ортогональна, вы сможете значительно поменять внешний облик, не изменяя содержания. Современные текстовые микропроцессоры содержат стили 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" и макрокоманды, которые помогают в этом (см. "Все эти сочинения").

^ Жизнь в критериях ортогональности

Ортогональность плотно сплетена с принципом DRY ("Не повторяй себя самого"). Используя этот принцип, можно свести к 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" минимуму дублирование в границах системы, а с помощью ортогональности уменьшить взаимозависимость меж компонентами системы. Звучит неуклюже, но если вы используете принцип ортогональности в тесноватой связи с принципом DRY, вы обнаружите, что разрабатываемые вами 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" системы становятся более гибкими, более понятными и поболее ординарными в отладке, тестировании и сопровождении.

Когда вы присоединяетесь к проекту, в каком люди ведут отчаянную борьбу за внесение конфигураций, а каждое изменение приводит к 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" возникновению 4 новых заморочек, вспомните ужас с вертолетом. Возможно, проект сконструирован и запрограммирован неортогонально. Настало время реорганизации.

Другие разделы, относящиеся к этой теме:

• Пороки дублирования

• Средства управления начальным текстом

• Проектирование по договору

• Несвязанность и закон Деметера

• Метапрограммирование

• Всего только 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" представление

• Реорганизация

• Программа, которую просто тестировать

• Злые волшебники

• Команды прагматиков

• Все эти сочинения

Вопросы для обсуждения

• Рассмотрим различие меж большенными инструментальными средствами, нацеленными на графический интерфейс, которые обычно находятся в системах в среде Windows, и 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" маленькими, но сочетаемыми меж собой утилитами, работающими в режиме командной строчки и присутствующими в командных оболочках. Какой набор является более ортогональным и почему? Какой из их легче использовать конкретно для той цели 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", для которой он предназначен? Какой из их легче скомбинировать с другими инструментальными средствами для решения вновь появившихся проблемных вопросов?

• Язык С++ поддерживает множественное наследование, а язык Java позволяет классу реализовывать множественные интерфейсы. Как оказывает влияние 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" на ортогональность внедрение этих средств? Есть ли различие в воздействии, которое оказывается в процессе использования множественного наследования и множественных интерфейсов? Есть ли разница в применении делегирования и наследования?

Упражнения

1. Создается класс Split 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", который расщепляет вводимые строчки на поля. Какая из 2-ух обозначенных ниже сигнатур класса Java имеет более ортогональную конструкцию? (Ответ см. в Приложении В.)

class Split 1 {

public Splitl(InputStreamReader rdr) {…

public void readNextLine 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру"() throws IOException {…

public int numFields() {…

public String getField(int fieldNo) {…

}


class Split2 {

public Split2(String line) {…

public int numFields() {…

public String getField(int fieldNo) {…

}

2. Какая конструкция обладает большей ортогональностью: немодальные либо модальные 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" диалоговые окна? (Ответ см. в Приложении В.)

3. Сравним процедурные языки и объектно-ориентированные технологии. Что дает более ортогональную систему? (Ответ см. в Приложении В.)


9 Обратимость

^ Нет ничего опаснее идеи 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", если это единственное, что у вас есть.

Эмиль-Огюст Шартье, Разговор о религии, 1938


Технические спецы предпочитают обыкновенные и конкретные решения задач. Математические испытания, дозволяющие с большой уверенностью сказать, что х = 2, намного лучше 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", чем нечеткие, но страстные очерки о миллионах обстоятельств Французской революции. К техническим спецам присоединяются и менеджеры: конкретные и легкие ответы отлично вписываются в электрические таблицы и проектные планы.

Если б это находило 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" отклик в реальном мире! К огорчению, сейчас икс может быть равен двум, а завтра он должен быть равен 5, а на последующей неделе – трем. Ничто не вечно, и если вы серьезно полагаетесь на некое 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" явление, то этим вы фактически гарантируете, что оно обязательно поменяется.

Для реализации чего-либо всегда есть не единственный метод и не одна фирма-субподрядчик. Если вы начинаете работать над проектом, некомпитентно полагая, что для 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" его воплощения имеется единственный метод, то вы сможете быть неприятно удивлены. Многим проектным командам открывают глаза принудительно, по мере развития событий:


"Но вы же произнесли, чтоб мы использовали базу данных 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" XYZI. Мы написали 85 % текста проекта – мы не можем поменять его на этот момент", – протестует программер. "Очень жалко, но наша компания решила заместо нее взять за базу базу PDQ – для всех проектов 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру". Это немое решение. Мы все должны переписывать тексты программ… Всем вам придется работать и по выходным – до особенного распоряжения".


Естественно, принимаемые меры не должны быть настолько драконовскими, сколь и неотложными. Но так как 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" время течет, а ваш проект продвигается, вы сможете оказаться в шатком положении. С принятием каждого принципиального решения проектная команда ставит впереди себя все более неширокую цель – ограниченную версию реальности, в какой имеется наименьшее 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" число вариантов.

К тому времени, когда многие принципиальные решения уже приняты, цель уменьшится так, что, если она двинется с места либо ветер изменит направление, либо же бабочка в Токио взмахнет своими крылышками 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", вы промахнетесь.9 И здорово промахнетесь.

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

Как вы решите использовать базу данных этой конторы либо строительный шаблон, либо определенную модель 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" развертывания (к примеру, «клиент-сервер» заместо автономной модели), то вы становитесь на путь, с которого нереально свернуть – только ценой большущих издержек.

Обратимость

Многие из тем, затронутых в данной книжке, нацелены на создание гибкого, просто 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" адаптируемого программного обеспечения. Следуя их советам – в особенности принципу DRY, принципу несвязанности и использованию метаданных (см. ниже), нет нужды в принятии многих принципиальных необратимых решений. Это и отлично, так как 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" сначала мы не всегда принимаем лучшие решения. Мы придерживаемся некой технологии только для того, чтоб в один красивый денек найти, что не в состоянии нанять достаточное количество людей, владеющих необходимыми способностями. Стоит нам 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" приостановить собственный выбор на некой фирме-субподрядчике, как ее сходу перекупают соперники. Требования, юзеры и аппаратные средства меняются резвее, чем мы разрабатываем программное обеспечение.

Представим, что сначала проекта вы решили использовать 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" реляционную базу данных, производимую компанией А. Позднее, во время нагрузочного тестирования, вы обнаруживаете, что база данных очень неспешная, а объектная база данных компании В работает резвее. Почти всегда, вам не везет. Огромную 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" часть времени воззвания к программкам фирм-субподрядчиков запутываются в тексте программ. Но если вы вправду вычленили идею базы, поместив ее снаружи – в точку, где она просто обеспечивает сохранение состояния объектов (как служба), тогда вы обладаете 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" достаточной гибкостью, чтоб поменять жеребцов на переправе.

Представим, что проект начинается по модели «клиент-сервер», но потом, когда карты уже сданы, отдел маркетинга решает, что для неких заказчиков серверы очень 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" дороги и они желают сделать автономную версию. Как сложным будет вам этот переход? Так как идет речь о развертывании, для этого будет нужно минимум некоторое количество дней. Если б времени требовалось больше, вы бы 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" и не задумывались об обратимости. Оборотная задачка еще увлекательнее. Что будет, если возникнет необходимость в развертывании автономной версии разрабатываемого вами проекта по схеме «клиент-сервер» либо по n-звенной модели 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру"? Это также не должно представлять затруднений.

Ошибка состоит в предположении, что хоть какое решение высечено на камне, и в неготовности к случайностям, которые могут появиться. Заместо того, чтоб высекать решения на 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" камне, рассматривайте их так, будто бы они начерчены на морском песке. В хоть какой момент может накатиться большая волна и смыть их.


Подсказка 14: Не существует окончательных решений


^ Эластичная архитектура

В то время как многие 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" люди пробуют сохранить свои программки гибкими, вам также стоит пошевелить мозгами о том, чтоб обеспечить упругость архитектуры, развертывания и интеграции товаров фирм-субподрядчиков.

Технологии, подобные CORBA, могут посодействовать в защите компонент проекта 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" от конфигураций, происходящих в языке, на котором ведется разработка, либо в платформе. Вдруг производительность Java на этой платформе не соответствует ожиданиям? Снова напишите программку клиента на языке С++, и больше ничего поменять не надо 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру". Подсистема правил в С++ не отличается достаточной гибкостью? Перейдите к версии на языке Smalltalk. При работе с архитектурой CORBA вы должны уделять свое внимание лишь на заменяемый компонент, другие составляющие 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" трогать не надо.

Вы разрабатываете программки для Unix? Какой версии? Вы разглядели все из качеств переносимости? Вы пишете для определенной версии Windows? Какой – 3.1, 95, 98, NT, СЕ либо же 2000? Как трудно будет обеспечить поддержку других версий 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру"? Если ваши решения характеризуются мягкостью и пластичностью, то это будет совершенно нетрудно. Но это будет нереально, если пакет безуспешно сформирован, есть высочайший уровень связанности, а в тексты программ встроена логика 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" либо характеристики.

Вы не понимаете точно, как отдел маркетинга собирается развертывать систему? Задумайтесь об этом заблаговременно, и вы можете обеспечить поддержку автономной модели, модели "клиент – сервер" либо n-звенной модели только за счет конфигураций 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" в файле конфигурации. Мы делали программки, которые действуют схожим образом.

Обычно вы сможете просто скрыть продукт фирмы-субподрядчика за точным, абстрактным интерфейсом. По сути мы могли это сделать с хоть каким проектом 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", над которым мы работали. Но представим, что вы не смогли изолировать его довольно верно. Вам пришлось раскидать некие аннотации по всей программке? Расположите это требование в метаданные и воспользуйтесь автоматическим механизмом 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", наподобие Aspect (см. "Инструментарии и библиотеки") либо Perl для вставки нужных инструкций в саму программку. Какой бы механизм вы ни использовали, сделайте его обратимым. Если что-то добавляется автоматом, то оно 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" может и удаляться автоматом.

Никто не знает, что может произойти в дальнейшем, в особенности мы! Дайте вашей программке работать в темпе рока: когда можно – качаться, а когда необходимо – энергично вертеться.

Другие 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" разделы, относящиеся к этой теме:

• Несвязанность и закон Деметера

• Метапрограммирование

• Всего только представление

Вопросы для обсуждения

• Немного квантовой механики – пример с кошкой Шрёдингера. Представим, что в закрытом ящике посиживает кошка, и в нем же находится радиоактивная частичка. Возможность 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" распада частички на две равна 50 %. Если распад произойдет, кошка умрет. Если не произойдет, кошка остается живая. Итак, погибает кошка либо остается живая? Согласно Шрёдингеру, правильно и то, и другое. Каждый 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" раз, когда происходит ядерная реакция, у которой имеются два вероятных результата, происходит клонирование мира. В одном из 2-ух миров данное событие вышло, а в другом – нет. Кошка живая в одном из миров и 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" мертва в другом. Только открыв ящик, вы понимаете, в каком из миров находитесь вы.

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

Но задумайтесь об эволюции программки по аналогии с ящиком 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", в каком находится огромное количество кошек Шрёдингера: каждое решение приводит к возникновению другой версии грядущего. Сколько сценариев грядущего поддерживает ваша программка? Какие из их более возможны? Как трудно будет поддерживать их в определенный момент 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" в дальнейшем?

Хватит ли у вас смелости открыть ящик?


^ 10 Стрельба трассирующими

На изготовку, по цели – пли!


Существует два метода стрельбы из пулемета в черное время суток.10 Вы сможете узнать точно 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", где находится ваша цель (расстояние, высота и азимут). Вы сможете найти погодные условия (температура, влажность, давление, направление ветра и т.д.). Вы сможете точно найти свойства применяемых вами патронов и пуль 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" и их взаимодействие с реальным пулеметом, из которого вы стреляете. Потом вы сможете пользоваться таблицами либо компом для вычисления четкого азимута и угла возвышения ствола пулемета. Если все работает в четком согласовании с 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" чертами, таблицы корректны, а погодные условия не изменяются, то пули должны лечь близко к цели. Можно также использовать трассирующие пули.

Трассирующие пули помещаются на пулеметную ленту через равные промежутки вместе с обыкновенными боеприпасами 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру". При стрельбе фосфор, находящийся в их, зажигается и оставляет пиротехнический след, идущий от пулемета до хоть какого места, в которое эти пули попадают. Если в цель попадают трассирующие пули, то 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", означает, в нее попадут и обыденные.

Не умопомрачительно, что стрельбу трассирующими предпочитают математическим расчетам. Оборотная связь появляется немедля, и так как трассирующие пули работают в той же среде, что и обыденные боеприпасы, то наружные воздействия 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" сведены к минимуму.

Может быть это очень мощная аналогия, но она применима к новым проектам, в особенности когда вы создаете то, чего ранее не было. Подобно стрелкам, вы пытаетесь 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" поразить цель в мгле. Ваши юзеры никогда ранее не лицезрели ничего подобного, потому их требования могут быть расплывчатыми. Вы же, в свою очередь, наверное применяете методы, методики, языки либо библиотеки, с которыми не знакомы 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", другими словами сталкиваетесь с огромным количеством неведомых. И так как для выполнения проекта требуется время, вы сможете с уверенностью гарантировать, что к моменту окончания работы среда, в какой вы работаете, поменяется.

Традиционный метод 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" решения задачи – максимально специфицировать систему. Написать горы картонной документации, регламентирующих каждое требование, связывая каждое неведомое и ограничивая рабочую среду. Стрелять с помощью жесткого расчета. Один большой подготовительный расчет, потом 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" стрельнуть и возлагать.

Но программисты-прагматики предпочитают стрелять трассирующими.

^ Программка, которую видно в мгле

Стрельба трассирующими пулями эффективна, так как эти пули работают в той же самой среде и подвержены этим же ограничениям, что 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" и реальные пули. Они стремительно оказываются у цели, так что стрелок получает незамедлительную оборотную связь. И с практической точки зрения они представляют собой относительно экономное решение.

Чтоб достигнуть такого же эффекта в 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" программках, мы ищем нечто такое, что позволяет нам стремительно, наглядно и неоднократно проходить путь от требования до некой свойства конечной версии системы.


Подсказка 15: Пользуйтесь трассирующими пулями, для того чтоб отыскать цель


В один 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" прекрасный момент мы работали над сложным рекламным проектом с базой данных «клиент-сервер». Частью требований была способность определять и делать промежные запросы. Серверами являлся ряд реляционных и специализированных баз данных. Клиентский графический 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" интерфейс юзера, написанный на языке Object Pascal, использовал набор библиотек С для обеспечения интерфейса с серверами. Запрос юзера хранился на сервере с внедрением системы обозначений, схожей Lisp, до момента преобразования в оптимизированный SQL 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру"-запрос, предыдущего его выполнению. При всем этом появилось много неведомых и много разных сред, и никто не знал наверное, как поведет себя графический интерфейс юзера.

Это был хороший повод 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" для внедрения программки трассировки. Мы разработали «скелет» наружного интерфейса, библиотеки для представления запросов и конструкцию для преобразования сохраненного запроса в запрос, определенный базой данных. Потом мы свели все воедино и проверили, работает ли 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" это. Все, что мы были в состоянии сделать в начальном варианте, был запрос, который выдавал список всех строк в таблице, но он обосновал, что интерфейс юзера мог вести взаимодействие с библиотеками, библиотеки могли 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" конвертировать запрос в поочередную и параллельную форму, а из результата сервер мог сгенерировать SQL-запрос. В протяжении последующих месяцев мы равномерно разрабатывали основную конструкцию, добавляя новейшую многофункциональную возможность методом параллельного наращивания каждого компонента 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" программки трассировки. Когда интерфейс юзера добавлял новый тип запроса, библиотека увеличивалась, и генерация SQL-запроса становилась более утонченной.

Программка трассировки не является разовой: вы пишете ее, чтоб сохранить. Она содержит 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" всю проверку ошибок, структурирование, документацию и самоконтроль, которые имеются в любом куске рабочей программки. Она просто не обладает всеми многофункциональными способностями. Но, как вы достигнули сквозного соединения меж компонентами вашей системы, вы сможете проверить 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", как близко вы находитесь к цели, и в случае необходимости внести коррективу. Как вы попали в цель, добавление многофункциональных способностей облегчается.

Разработка программ трассировки находится в согласии с той 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" мыслью, что проект никогда не кончается: всегда будет потребность в конфигурациях и добавлении функций. Это – инкрементальный подход.

Рядовая кандидатура является собственного рода тяжеловесным техническим подходом: программка делится на модули, которые программируются в вакууме 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру". Модули объединены в подсистемы, которые потом подлежат предстоящему объединению, пока в один красивый денек вы не получаете завершенное приложение. И только тогда приложение в целом может быть представлено юзеру и протестировано 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру". Разработка программки трассировки имеет много преимуществ:

• ^ Юзеры могут узреть нечто, работающее еще до выпуска конечной версии. Если вам удалось передать сущность делаемого вами (см. "Огромные надежды"), то ваши юзеры будут обдумывать, что лицезреют впереди 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" себя еще нечто незрелое. Они не будут разочарованы отсутствием многофункциональных способностей; будут пылать желанием узреть некоторый видимый прогрессе разработке их системы. По мере того как проект будет продвигаться, они начнут делать вложения 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру". Эти юзеры и станут теми людьми, которые произнесут вам о том, как близко к цели находится та либо другая итерация.

• ^ Разработчики выстраивают некоторую структуру, в какой они работают. Больший ужас вызывает 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" лист бумаги, на котором ничего не написано. Если вы разработали все механизмы взаимодействия меж модулями вашего приложения и воплотили их в тексте программки, то вашей команде не придется почти все высасывать 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" из пальца. Это делает труд каждого члена команды более производительным и содействует последовательности в их работе.

• ^ У вас есть платформа для интеграции. Как все составляющие системы связаны вместе, возникает некоторая среда, в которую 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" можно добавлять новые куски программ, прошедшие модульное тестирование. Вы будете заниматься интеграцией каждый денек (время от времени пару раз вдень), не пытаясь интегрировать все сходу по способу "огромного скачка". Воздействие каждого вновь вносимого 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" конфигурации становится более естественным, взаимодействия более ограниченными, потому отладка и тестирование будут более резвыми и точными.

• ^ У вас есть что показать. Спонсоры проекта и управление стремятся узреть демо версии в самое 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" неподходящее время. При наличии программки трассировки у вас всегда будет то, что можно им показать.

• ^ Вы лучше ощущаете прогресс. При разработке программки трассировки программеры работают над сценариями использования системы по очереди 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру". Они кончают один сценарий и перебегают к последующему. При всем этом еще проще найти производительность и показать юзеру продвижение проекта. Так как любая персональная разработка меньше по объему, вы избежите сотворения цельных программных 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" блоков, о которых каждую неделю сообщается, что они готовы на 95 %.

^ При стрельбе трассирующими вы не всегда попадаете в цель

Трассирующие пули демонстрируют, что вы куда-то попали. Это не непременно должна быть ваша 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" цель. Потом вы корректируете прицел, пока пули не попадают в цель. В этом-то все и дело.

То же самое относится и к программке трассировки. Вы используете методику в ситуациях, когда не 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" убеждены на 100 %, куда же вам двигаться. Не стоит удивляться, если две первых пробы сорвались: юзер гласит: "Это совершенно не то, что я имел в виду", нужные данные становятся труднодоступными в самый неподходящий 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" мо-мент, и очевидно появляются трудности с производительностью. Выработайте подход для конфигурации того, что мешает приблизиться к цели, и будьте признательны судьбе, что вы используете небогатую методологию разработки. Маленький кусок программки 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" отличается малой инерцией – его просто и стремительно поменять. Вы можете собрать отклики на ваше приложение и сгенерировать новейшую, более точную версию резвее и дешевле. И так как каждый основной компонент приложения представлен 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" в программке трассировки, ваши юзеры могут быть убеждены – то, что они лицезреют, основано на действительности, а не на картонных спецификациях.

^ Программка трассировки и создание прототипов

Вы могли бы пошевелить мозгами, что принцип программки 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" трассировки – это то же самое, что и чем создание прототипов, только с более брутальным заглавием. Отличие есть. Цель работы с макетом – исследование определенных черт (качеств) конечной версии системы. Создавая настоящий макет 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", вы отбросите все то, что критиковали при опробовании принципа, и перепишете его соответствующим образом, используя приобретенные уроки.

К примеру, вы создаете приложение, которое помогает транспортным компаниям определять, как упаковывать ящики необычного размера 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" в контейнеры. Кроме всего остального, интерфейс юзера должен быть интуитивно понятным, а методы, применяемые для определения хорошей упаковки, очень сложны.

Вы могли бы сделать интерфейс для конечных юзеров с помощью соответственных инструментальных 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" средств. Вашей программки довольно для того, чтоб сделать интерфейс восприимчивым к действиям юзера. Как юзеры согласятся с сборкой интерфейса, вы сможете откинуть его и переписать сейчас на базе бизнес-логики, используя мотивированной 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" язык. Аналогично, вы сможете возжелать сделать макет ряда алгоритмов, которые производят реальную упаковку. Вы сможете запрограммировать многофункциональные испытания на высокоуровневом, «всепрощающем» языке типа Perl и потом запрограммировать низкоуровневые испытания производительности на языке, который 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" более близок к машинному. В любом случае, как вы приняли решение, нужно начать поначалу и запрограммировать методы в конечной версии среды, которая ведет взаимодействие с наружным миром. Это и есть создание прототипов 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", и это очень полезно.

Подход типа "стрельба трассирующими" обращается к другой дилемме. Вам следует знать, как работает приложение в целом. Вы желаете показать вашим юзерам, как на практике осуществляется взаимодействие, и дать 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" им «скелет» архитектуры, на который нарастает тело программки. В данном случае вы сможете сконструировать программку трассировки, состоящую из очевидной реализации метода упаковки контейнера (может быть, нечто вроде FIFO), и обычный 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", но работающий интерфейс юзера. Как вы соедините все составляющие приложения, у вас уже есть каркас, который можно представить вашим юзерам и разработчикам. Спустя некое время вы добавляете к этому каркасу новейшую многофункциональную возможность, заменяя заглушки 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" программками. Но сам остов остается нетронутым, и вы понимаете, что система будет вести себя так же, как и тогда, когда завершалась 1-ая программка трассировки.

Различие довольно принципиально, чтоб гарантировать 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" повторяемость. Макеты генерируют разовую программку. Программка трассировки является небогатой, но завершенной; она образует часть «скелета» конечной версии системы. Рассматривайте создание прототипов как рекогносцировку и сбор данных разведки до начала стрельбы трассирующими.

Другие 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" разделы, относящиеся к этой теме:

• Приемлемые программки

• Прототипы и памятные записки

• Западня спецификации

• Большие надежды


^ 11 Макеты и памятные записки

Для опробования определенных мыслях в почти всех отраслях индустрии употребляются макеты; это дешевле, чем организовывать полномасштабное создание. К примеру 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", в авто индустрии для новейшей модели автомобиля может быть выстроено несколько разных прототипов. Любой из их конструируется для проверки определенных параметров автомобиля – аэродинамики, дизайна, параметров конструкции и т. д. Для тесты в аэродинамической 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" трубе изготовляется модель из глины, для отдела дизайна создается модель из бальзовой древесной породы и склейкой ленты и т. д. Некие авто компании идут далее и производят значительную часть работы по моделированию 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" с помощью компов, что приводит к еще большему сокращению расходов. В данном случае нет необходимости в реальном изготовлении рискованных частей конструкции для их опробования.

Мы создаем макеты программ этим же 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" образом и по этим же причинам – для анализа и выявления риска, предлагая способности для корректировки при значительно наименьших издержек. Подобно тому, как это делается в авто индустрии, мы можем использовать макет для опробования 1-го 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" либо нескольких черт проекта.

Мы склонны считать, что основой прототипов являются программки, но не так бывает не всегда. Подобно тому, как это делается в авто индустрии, мы можем строить макеты из 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" разных материалов. Памятные записки потрясающе подходят для сотворения прототипов таких динамических объектов, как логика документооборота и прикладная логика. Макет интерфейса может моделироваться на лекционной доске, как модель без многофункциональных способностей 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", изображенная при помощи графической программки либо программы-построителя интерфейса.

Макеты разрабатываются для того, чтоб ответить только на несколько вопросов, потому их разработка намного дешевле и резвее, чем приложения, которые идут в создание. Программка 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" может игнорировать малозначительные подробности – малозначительные на этот момент, но позднее способные оказаться для юзера очень необходимыми. Если, например, вы создаете макет графического интерфейса юзера, то сможете смириться с неверными плодами либо данными. С другой 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" стороны, если вы просто исследуете свойства вычислений либо производительности, сможете обойтись небогатым графическим интерфейсом юзера либо вообщем без него.

Но если вы работаете в среде, где нельзя отрешиться от подробностей 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", тогда нужно спросить себя, а необходимо ли вообщем создавать макет. Может быть, в данном случае идеальнее всего подходит стиль разработки типа "стрельба трассирующими" (см. "Стрельба трассирующими").

^ Зачем создаются макеты

Какие объекты 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" можно учить с помощью прототипов? Все, что характеризуются наличием риска. Все, что не подвергались тестированию ранее либо являются полностью критическими для конечного варианта системы. Вес, что является недоказанным, экспериментальным либо непонятным. Вес то, с чем 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" вы еще не акклиматизировались. Вы сможете создавать макеты:

• Архитектуры

• Новой многофункциональной способности уже имеющейся системы

• Структуры либо содержания наружных данных

• Инструментальных средств либо компонент, выпущенных фирмами-субподрядчиками

• Рабочих черт

• Дизайна интерфейса юзера

Создание прототипов содействует 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" приобретению опыта. Значение этого опыта заключается не в сделанной программке, а в приобретенных уроках. В этом и состоит смысл сотворения прототипов.


Подсказка 16: Создавайте макеты, чтоб обучаться на их


^ Как использовать макеты

Какими деталями можно 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" пренебречь при построении макета?

• Корректность. Там, где это приемлемо, вы можете использовать фиктивные данные.

• Завершенность. Макет может работать только в ограниченном смысле, может быть, только с одним наперед данным куском входных данных и одним 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" пт меню.

• Надежность. Процедура проверки ошибок, возможно, будет неполной либо будет отсутствовать вполне. Если вы отклоняетесь от определенного пути, то макет может выйти из строя и сгореть, как ракета 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру". Это нормально.

• Стиль. Неприятно признавать это, но макет программки не имеет огромного значения для комментариев либо документации. При работе с макетом можно написать горы документации, но сравнимо малая ее часть будет посвящена фактически 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" макету системы.

Так как в макете детали отодвигаются на 2-ой план, а в центре рассмотрения оказываются определенные нюансы системы, вам может показаться реальным создание прототипов с внедрением языка очень высочайшего уровня – выше 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" уровня языка остальной части проекта (язык типа Perl, Python либо Tel). Язык сценариев высочайшего уровня позволяет опускать многие детали (включая указание типов данных) и при всем этом создавать многофункциональный (хотя и неполный 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" и неспешный) кусок программки.11 Если вам нужно сделать макет интерфейсов юзеров, изучите инструментальные средства типа Tcl/Tk, Visual Basic, Powerbuilder либо Delphi.

Языки сценариев неплохи для использования в качестве «клея» при 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" соединении низкоуровневых фрагментов в новые сочетания. При работе в системе Windows язык Visual Basic может «скреплять» средства регулирования СОМ. В более общем смысле вы сможете использовать языки типа Perl и Python для связывания воедино 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" низкоуровневых библиотек языка С – вручную либо автоматом с помощью инструментов наподобие бесплатного SWIG [URL 28]. Используя этот подход, вы сможете стремительно собрать имеющиеся составляющие в новые конфигурации, чтоб поглядеть, как они работают.

^ Создание прототипов 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" архитектуры

Многие макеты создаются, чтоб смоделировать рассматриваемую систему в целом. В отличие от подхода типа "стрельба трассирующими", ни один из отдельных модулей в макете системы не должен быть в 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" особенности многофункциональным. По сути вам даже не надо писать программку для сотворения прототипов – вы сможете сделать макет на лекционной доске, с помощью памятных записок либо каталожных карточек. Вы пытаетесь осознать то, как система смотрится в 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" собранном виде, опуская детали. Вот некие из определенных областей, которые вы сможете найти в строительном макете:

• Четко ли определены обязанности главных компонент, и являются ли они применимыми?

• Четко ли определена совместная 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" работа главных компонент?

• Сведено ли к минимуму связывание?

• Можно ли идентифицировать потенциальные источники дублирования?

• Можно ли применить определения интерфейсов и ограничения?

• Обладает ли любой из модулей методом доступа к данным, требуемым ему в 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" процессе выполнения? Может ли он получить таковой доступ в случае необходимости?

Последний пункт приносит большая часть сюрпризов и более ценных результатов, основанных на опыте сотворения прототипов.

^ Как не нужно использовать макеты

Перед 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" тем как вы займетесь созданием хоть какого макета, основанного на программке, удостоверьтесь, что все понимают – вы пишете разовую программку. Макеты могут быть обманчиво симпатичными для людей, которые не знают, что это 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" всего только макеты. Вы должны очень верно уяснить – эта программка разовая, незавершенная и не может быть завершена.

Просто впасть в заблуждение из-за тривиальной завершенности демо макета, и спонсоры проекта либо менеджмент могут 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" настаивать на развертывании макета (либо его потомства), если вы заблаговременно не обусловьте, что можно ждать от макета. Напомните им, что вы, естественно, сможете сделать прекрасный макет новейшей модели автомобиля из бальзовой 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" древесной породы и склейкой ленты, но вы же не поедете на нем в час пик!

Если вы полагаете, что в вашей среде либо культуре существует большая возможность того, что предназначение макета программки может 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" быть истолковано некорректно, вам лучше пользоваться подходом "стрельба трассирующими". Вы получите некоторый жесткий каркас, на котором можно основывать будущие разработки.

При соответствующем использовании макет может сберечь вам неограниченное количество времени, средств, мигрени 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" и мучений за счет идентификации и исправления возможных заморочек в самом начале цикла разработки – издержки на устранение ошибок будут дешевыми и не вызовут затруднений.

Другие разделы, относящиеся к этой теме:

• Мой 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" начальный текст съел кот Мурзик

• Общайтесь!

• Стрельба трассирующими

• Большие надежды

Упражнения

4. Специалисты по маркетингу желали бы сесть и вкупе с вами провести мозговой штурм по дизайну нескольких интернет-страниц. Они задумываются об активных картах 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" ссылок – для перехода к другим страничкам. Но они не могут обусловиться с моделью ссылки: это могут быть изображения автомобиля, телефона либо дома. У вас имеется список мотивированных страничек и содержания; они желали бы узреть 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" несколько прототипов. Да, кстати, в вашем распоряжении 15 мин. Какими инструментами вы могли бы пользоваться? (Ответ см. в Приложении В.)


^ 12 Языки, отражающие специфику предметной области

Границы моего языка есть границы моего мира 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру".

Людвиг фон Витгенштейн


Языки программирования оказывают влияние на то, как вы думаете о дилемме, и на то, как вы думаете об общении. В каждом языке имеются свои особенности – ученые словечки типа "статический 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" и динамический контроль типов", "преждевременное и позже связывание", "модели наследования" (обычное, множественное либо отсутствие) – они все могут предложить определенные решения либо затруднить их. Решение, создаваемое в стиле Lisp, отличается от решения, основанного на 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" мышлении приверженца языка С, и напротив. Правильно и оборотное (и по нашему воззрению, более принципиальное) – язык, отражающий специфику данной области, может, со собственной стороны, предложить решение в области программирования.

Мы всегда пытаемся 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" написать программку, используя словарь, соответствующий для прикладной области (см. "Ловушка требований", где предлагается использовать проектный глоссарий). В ряде всевозможных случаев можно перейти на последующий уровень и вправду программировать, пользуясь словарем, синтаксисом и 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" семантикой предметной области.

Юзеры предложенной системы должны быть в состоянии точно выложить, как она должна работать:


Ждать прихода сообщений, определенных нормативом 12.3 компании ABC, по каналам связи Х.25, конвертировать их в формат 43В 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" компании XYZ, ретранслировать на спутниковый канал связи и сохранить для анализа в дальнейшем.


Если ваши юзеры располагают набором схожих точных инструкций, то вы сможете изобрести мини-язык, скорректированный в согласовании 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" с прикладной областью и выражающий конкретно то, что им необходимо:

From X25LINE1 (Format=ABC123) {

Put TELSTAR1 (Format=XYZ43B);

Store DB;

}

Этот язык не должен быть исполняемым. В собственном начальном виде 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" он мог бы просто фиксировать требования юзера – спецификации. Но вы наверное посчитали вероятным пойти далее и практически воплотить язык. Ваша спецификация перевоплотился в исполняемую программку.

После того как вы написали приложение, юзеры предъявляют вам 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" новое требование: сообщения с отрицательным балансом не должны сохраняться и должны отсылаться назад по каналам связи Х.25 в начальном формате:

From X25LINE1 (Format=ABC123) {

if (ABC123.balance «0) {

Put X25L 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру"1NE1 (Format=ABC123);

}

else {

Put TELSTAR1 (format=XYZ43B);

Store DB;

}

}

Нетрудно? При наличии соответствующей поддержки вы сможете программировать существенно поближе к прикладной области. Мы не предлагаем, чтоб ваши конечные юзеры программировали 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" на этих языках. Заместо этого вы даете себе инструмент, который позволяет вам работать поближе к их области.


Подсказка 17: Программируйте поближе к предметной области вашей задачки


Мы полагаем, что вам следует разглядеть методы перемещения 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" вашего объекта поближе к предметной области препядствия – будь то простой язык для конфигурирования и управления прикладной программкой либо же более непростой язык для обозначения правил либо процедур. При составлении программки на более высочайшем 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" уровне абстракции вам просто сосредоточиться на решении заморочек предметной области и вы сможете проигнорировать маленькие детали, связанные с реализацией.

Помните, что с приложением работают многие юзеры. Существует конечный юзер, который осознает правила предметной 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" области и то, что должно быть на выходе программки. Есть также вторичные юзеры: обслуживающий персонал, менеджеры, специализирующиеся конфигурированием и тестированием, программеры служб поддержки и сопровождения и будущие поколения разработчиков 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру". У каждого из этих юзеров есть собственная предметная область, и для всех их вы сможете генерировать мини-среды и языки.

Ошибки, отражающие специфику предметной области

Если вы работаете в определенной предметной области, то сможете выполнить 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" и проверку корректности данных, соответствующих для нее, сообщая о дилеммах языком, понятным вашим юзерам. Разглядим программку коммутации каналов, приведенную выше. Представим, что юзер некорректно обозначил наименование формата:

From X 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру"25LINE1 (Format=AB123)

Если схожее происходит в универсальном языке программирования, то выдается стандартное сообщение об ошибке:

Syntax error: undeclared identifier

Используя мини-язык, заместо этого можно сделать сообщение об ошибке, используя словарь предметной области 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру":

"АВ123" is not a format. Known formats are ABC123, XYZ43B, PDQB, and 42.

Реализация мини-языка

В самом простом варианте мини-язык может реализовываться в строчно-ориентированном, просто анализируемом формате. Фактически мы используем эту 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" форму больше, чем всякую другую. Ее просто проанализировать с помощью инструкций switch либо используя постоянные выражения в языках сценариев типа Perl. Ответ к упражнению 5 (Приложение В) указывает ординарную реализацию мини-языка 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" на языке С.

Вы сможете воплотить и поболее непростой язык с более формальным синтаксисом. Хитрость заключается в том, чтоб сначала найти синтаксис, используя систему обозначений, схожую обычной форме Бэкуса-Наура.12 Как 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" вы обусловили грамматику, ее обычно просто конвертировать во входной синтаксис для генератора. Программеры, работающие с языками С и С++, издавна употребляют уасс (либо его бесплатную версию bison [URL 27]). Подробное описание этих программ приводится в 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" книжке "Lex and Yacc" [LMB92]. Программеры, работающие с языком Java, могут поработать с программкой javaCC, которая находится на веб-сайте [URL 26]. В ответе к упражнению 7 (Приложение В) дана программка грамматического 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" разбора, написанная при помощи bison. Пример указывает, что как вы изучите синтаксис, написание мини-языков не представит трудности.

Существует другой метод реализации мини-языка: расширить имеющийся. К примеру, можно интегрировать многофункциональные способности 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" на уровне приложения с помощью Python [URL 9] и написать нечто вроде:13

record = X25UNE1.get(format=ABC123)

if (record.balanc<0):

X25UNE1.put(record, format=ABC123)

else:

TELSTR1.put(record, format=XYZ43B)

DB 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру".store(record)

Языки управления данными и процедурные языки

Реализуемые вами языки могут употребляться 2-мя разными методами.

^ Языки управления данными делают некоторую форму структуры данных, применяемой приложением. Эти языки нередко употребляются 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" для представления конфигурации.

К примеру, программка sendmail применяется в мире для маршрутизации электрической почты в сети Веб. Она обладает многими плюсами и преимуществами, которые управляются большим файлом конфигурации, написанном на своем языке конфигурирования программки sendmail 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру":


Mlocal, P=/usr/bin/procmail,

F=lsDFMAw5:/|@qSPfhn9,

S=10/30, R=20/40,

T=DNS/RFC822/X-Unix,

A=procmail – Y – a $h – d $u


Разумеется, удобочитаемость не является сильной стороной sendmail.

Уже издавна компания 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" Microsoft употребляет язык данных, который может обрисовывать меню, реквизиты окон, диалоговые окна и другие ресурсы Windows. На рис. 2.2 показан кусок обычного файла ресурсов. Он читается намного легче, чем пример с программкой sendmail, но 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" употребляется точно так же – компилируется для генерации структуры данных.

Рис. 2.2. Файл. rc для Windows


^ MAIN_MENU MENU

{

POPUP " &File"

{

MENUITEM "&New", CM_FILENEW

MENUITEM "&Open…", CM_FILEOPEN

MENUITEM "&Save", CM_FILESAVE

}

}

MY_DIALOG_BOX DIALOG 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" 6,15,292,287

^ STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU

CAPTION "My Dialog Box"

FONT 8, "MS Sans Serif"



DEFPUSHBUTTON «OK», ID_OK, 232,16, 50,14

PUSHBUTTON «Help», ID.HELP, 232, 52, 50,14

CONTROL "Edit Text Control", ID 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" EDIT1, «EDIT», WS_BODER


^ Процедурные языки идут далее. В данном случае язык является исполняемым и потому может содержать аннотации, конструкции управления и т. п. (подобные сценарию на с. 50).

Вы также сможете использовать собственные процедурные 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" языки, чтоб облегчить сопровождение программки. К примеру, вас требуют интегрировать информацию из унаследованного приложения в новейшую разработку графического интерфейса. Как правило это осуществляется с помощью "экранного кармашка"; ваше приложение связывается 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" с главным (mainframe) приложением так, как если б это обыденный пользователь-человек, генерируя нажатия кнопок и «считывая» принимаемые отклики. Вы сможете сделать сценарий взаимодействия с помощью мини-языка.14

locate prompt "SSN:"

type "%s" social_security 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру"_number

type enter

waitfor keyboardunlock

if text_at(10,14) is "INVALID SSN" return bad_ssn

if text_at(10,14) is "DUPLICATE SSN" return dup_ssn

# etc…

Когда приложение определяет, что пора вводить номер SSN, то по этому сценарию оно 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" вызывает интерпретатор, который потом управляет транзакцией. Если интерпретатор встроен в приложение, то они даже могут вместе использовать данные (к примеру, с помощью механизма оборотного вызова).

В данном случае вы 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" программируете в предметной области программера сопровождения. Когда меняется основное приложение и поля смещаются, программер может просто обновить высокоуровневое описание, заместо того чтоб копаться в подробностях программки на языке С.

Автономные и интегрированные языки 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру"

Чтоб приносить пользу, мини-язык не должен употребляться приложением впрямую. Можно неоднократно использовать язык спецификации для сотворения искусственных объектов (включая метаданные), которые компилируются, считываются либо употребляются самой программкой другим образом (см. "Метапрограммирование 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру"").

К примеру, в разделе "Обработка текста" описывается система, в какой мы использовали Perl, чтоб генерировать огромное количество выводов из начальной спецификации схемы. Мы изобрели общий язык, чтоб представить схему базы данных, и потом 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" сгенерировали все его формы, которые нам нужны, – SQL, С, веб-страницы, XML и др. Приложение не использовало спецификацию впрямую, но оно полагалось на выходные данные, приобретенные из нее.

Обыкновенной практикой является встраивание 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" процедурных языков высочайшего уровня конкретно в ваше приложение, так, чтоб они исполнялись, когда исполняется ваша программка. Разумеется, что это массивное средство; можно изменять поведение приложения, варьируя сценарии, которые оно считывает, при этом 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" все это

Легкая разработка либо несложное сопровождение?

Мы разглядели несколько разных грамматик – от обычных строчно-ориентированных форматов до более сложных, которые смотрятся как реальные языки. Если для реализации требуются дополнительные усилия, тогда для чего 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" выбирать более сложную грамматику?

Компромиссом являются расширяемость и сопровождение. В то время как программка грамматического разбора «реального» языка может быть более сложной в написании, для юзера она будет намного понятнее, и ее 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" будет легче расширить за счет прибавления новых средств и многофункциональных способностей. Очень обыкновенные языки могут быть легкими для грамматического разбора, но они могут быть зашифрованными – подобно примеру с программкой sendmail 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" (см. "Языки управления данными и процедурные языки").

Беря во внимание, что срок службы большинства прикладных программ превосходит ожидаемый, вам лучше примириться с грозной реальностью и принять заблаговременно более непростой и удобочитаемый язык 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру". Усилия, затраченные сначала, неоднократно окупятся за счет понижения издержек на поддержку и сопровождение.

Другие разделы, относящиеся к этой теме:

• Метапрограммирование

Вопросы для обсуждения

• Можно ли выразить некие из требований проекта, над которым вы работаете 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" в текущее время, на языке, отражающем специфику предметной области? Может быть ли написать компилятор либо транслятор, который мог бы сгенерировать огромную часть требуемой программки?

• Если вы решили принять мини-язык как метод 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" программирования, близкий к предметной области, вы принимаете и то, что для их реализации потребуются некие усилия. Как выдумаете, есть ли методы, при которых «скелет», разработанный для 1-го проекта, может неоднократно употребляться в 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" других?

Упражнения

5. Требуется воплотить мини-язык управления обычным графическим пакетом (может быть, с графикой в относительных командах). Язык состоит из однобуквенных команд. После неких команд указывается число. К примеру, последующий кусок изображает на 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" дисплее прямоугольник. (Ответ см. в Приложении В.)

Р 2 # select pen 2

D # pen down

W 2 # draw west 2cm

N 1 # then north 1

E 2 # then east 2

S 1 # then back south

U # pen up

Составьте программку, которая 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" анализирует этот язык. Она должна быть разработана так, чтоб операция прибавления новых команд была легкой.

6. Спроектируйте грамматику BNF (обычной формы Бэкуса-Наура), чтоб провести грамматический разбор спецификаций времени. Все обозначенные примеры должны быть удачно проанализированы 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру". (Ответ см. в Приложении В.)

4pm, 7:38pm, 23:42, 3:16, 3:16am

7. Реализуйте программку грамматического разбора для грамматики обычной формы Бэкуса-Наура в упражнении 6, используя программки уасс, bison либо аналогичный генератор грамматического разбора. (Ответ 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" см. в Приложении В.)

8. Реализуйте программку грамматического разбора времени, используя Perl. (Подсказка: постоянные выражения позволяют написать отличные программки грамматического разбора.) (Ответ см. в Приложении В.)

13 Оценка

Сколько времени будет нужно для пересылки "Войны и 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" мира" по модемной полосы в 56 б? Какое место займет на диске миллион имен и адресов? Сколько времени пригодится для прохождения 1000-байтового блока через маршрутизатор? Сколько месяцев будет нужно, чтоб окончить ваш проект 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру"?

С одной стороны, все эти вопросы глупы – информация, содержащаяся в их, недостаточна для ответа. И все же, на все из их можно ответить, если вы можете провести оценку. В процессе работы над генерацией 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" оценки, вы придете к большему осознанию мира, в каком обитают ваши программки.

Научившись оценивать и развивая этот навык до уровня, на котором у вас возникает интуитивное чувство величины того либо другого 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" предмета, вы можете показать очевидно волшебную способность к определению их выполнимости. Если кто-нибудь гласит: "Мы вышлем вам запасную копию по каналу ISDN в центральный кабинет", вы можете интуитивно понять, имеет ли это 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" смысл. Когда вы составляете программку, вы можете осознать, какие подсистемы нуждаются в оптимизации, а какие необходимо бросить в покое.


Подсказка 18: Проводите оценки во избежание сюрпризов


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

^ Как четкой является "применимая точность"?

До некой степени все ответы представляют собой оценки. Просто 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" некие из их поточнее других. Так что первым вопросом, который вам придется задать себе, когда кто-нибудь просит вас об оценке, является вопрос о контексте, в каком будет приниматься данный вами 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" ответ. Нужна ли тут высочайшая точность, либо идет речь о примерной цифре?

• Если ваша бабушка спрашивает, когда вы покажетесь, она, возможно, задается вопросом, готовить вам обед либо ужин. С другой стороны, водолаз, оказавшийся 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" в подводной ловушке и испытывающий недочет воздуха, интересуется ответом с точностью до секунды.

• Каково значение числа «пи»? Если вас интересует, какое количество бордюрного камня пригодится для дизайна цветочной клумбы, то цифра 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" 3 возможно будет применимой.15 На школьном уровне неплохим приближением является 22/7. Ну а если вы работаете в NASA, то 12-ти цифр после запятой будет полностью довольно.

Одной из увлекательных особенностей оценки является тот факт 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", что интерпретация ее результата находится в зависимости от применяемых вами единиц измерения. Если выговорите, что для некоего деяния будет нужно 130 рабочих дней, то люди будут ждать пришествия этого действия в довольно узеньком интервале. Но 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" если вы скажете "около 6 месяцев", они будут знать, что этого действия следует ждать через 5–7 месяцев. Обе числа обозначают одну и ту же длительность, но "130 дней", возможно, предполагает огромную точность, чем 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" вы полагаете. Мы советуем последующую градацию оценок времени:

Длительность == Оценка (порядок)

1-15 дней == деньки

3-8 недель == недели

8-30 недель == месяцы

30 и поболее недель == перед тем, как оценить, стоит хорошо поразмыслить

Так, если после всей нужной работы, вы придете к решению 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", что проект займет 125 рабочих дней (25 недель), он может быть оценен как "приблизительно за 6 месяцев".

Те же принципы применимы к оценкам всех количеств: изберите единицы, в каких будет дан ответ, чтоб 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" отразить точность, которую вы хотят передать.

^ Из чего исходят оценки?

Все оценки основаны на моделях препядствия. Но перед тем как углубиться в методики построения моделей, нужно упомянуть о главной хитрости, которая всегда дает отличные результаты 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру": спросите того, кто уже делал это. Перед тем как впритирку заняться построением модели, обернитесь вокруг в поисках тех, кто ранее находился в схожей ситуации. Поглядите, как они решали свою 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" задачку. Маловероятно, что вы обнаружите четкое совпадение, но будете удивлены, сколь нередко вы удачно обращались к опыту других.

^ Осознание сущности данного вопроса

Первой частью хоть какого упражнения в составлении оценки является осознание сущности данного 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" вопроса. Как и в случае с вопросами точности, обсуждаемыми выше, вам нужно понять масштаб предметной области. Часто он неявно выражен в самом вопросе, но понимание масштаба, перед тем как начать строить 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" догадки, должно войти у вас в привычку. Часто избранная вами предметная область отчасти сформировывает ответ, который вы даете: "Если представить, что по дороге не будет аварий и машина заправлена, я буду там через 20 минут".

^ Построение 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" модели системы

Эта часть процесса оценки – самая увлекательная. Исходя из вашего осознания данного вопроса, постройте в уме скелет действующей модели. Если вы оцениваете время отклика, то в вашей модели может иметься узел обслуживания 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" и некоторый входной поток. При работе над проектом моделью могут послужить стадии, которые ваша организация употребляет в разработке, вместе с очень грубым представлением того, как система может быть реализована.

Построение модели 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" может быть творческим процессом, полезным в длительной перспективе. Часто построение модели приводит к открытию схем и процессов, лежащих в базе чего-либо и не видимых невооруженным глазом. У вас даже может появиться желание 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" повторно изучить начальный вопрос: "Вы попросили дать оценку X. Но, похоже, что У, являющийся вариантом X, может быть выполнен приблизительно вдвое резвее, и при всем этом вы теряете только одну характеристику 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру"".

Построение модели заносит погрешности в процесс оценки. Это и безизбежно, и полезно. Вы жертвуете простотой модели ради точности. Удвоение усилий, прилагаемых к модели, может прирастить точность только некординально. Ваш опыт 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" даст подсказку вам, когда окончить процесс совершенствования.

^ Декомпозиция модели

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

Вы обнаружите, что 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" обычно каждый компонент будет владеть параметрами, которые определяют его воздействие на модель в целом. На этой стадии довольно легко обозначить каждый параметр.

^ Присвоение значения каждому параметру

Как в вашем распоряжении появились характеристики 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", вы сможете пойти напролом и присвоить некоторое значение каждому из их. На этой стадии вы ждете внесения некой ошибки. Хитрость заключается в том, чтоб осознать, какие характеристики оказывают наибольшее воздействие на итог, и сосредоточиться 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" на их четком получении. Обычно характеристики, чьи значения добавляются к результату, являются наименее значительными, чем те, что производят умножение либо деление. Удвоение скорости канала связи может прирастить в два раза объем 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" данных, получаемых в течение часа, тогда как добавление транзитной задержки, равной 5 мс, не даст приметного эффекта.

У вас должен иметься обоснованный метод вычисления этих критичных характеристик. В примере с формированием 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" очереди вы захотели измерить реальную интенсивность входного потока транзакций в имеющейся системе либо отыскать для измерения схожую систему. Аналогично, вы могли найти время, нужное для обслуживания запроса, либо провести оценку, используя методики 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", описанные в этом разделе. По сути, вам нередко придется основывать свою оценку на других вспомогательных оценках. Конкретно в этом месте и появляются наибольшие ошибки.

^ Вычисление ответов

Исключительно в самом ординарном случае ваша оценка будет 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" иметь единственный ответ. Вы счастливый человек, если сможете сказать: "Я могу пройти по городку 5 кварталов за 15 минут". Но так как системы все усложняются, вам захочется подстраховать ваши ответы. Проведите неоднократные вычисления, изменяя 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" значения критичных характеристик, пока не выясните, какие из их вправду управляют моделью. Суровую помощь в этом может оказать электрическая таблица. Потом сформулируйте ваш ответ исходя из убеждений этих характеристик. "Время отклика 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" составляет (грубо) три четверти секунды, если система имеет шину SCSI и объем памяти 64 Мбайт; и секунду при объеме памяти 48 Мбайт". (Заметьте, что "три четверти секунды" дает другое чувство точности, ежели 750 мс.)

Уже 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" на стадии вычислений возникают ответы, которые могут показаться необычными. Не торопитесь игнорировать их. Если ваша математика правильна, то, возможно, ваше осознание трудности либо модель неверны. Это ценная информация.

^ Отслеживание уровня мастерства

Мы полагаем, что было бы 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" здорово вести учет ваших оценок так, чтоб вы могли оценить, как четким был ваш прогноз. Если общая оценка включала в себя вспомогательные, учитывайте и их. Нередко будет оказываться, что 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" ваши оценки удачны – по сути, спустя некое время вы придете к этому.

Если оценка оказывается неправильной, не стоит пожимать плечами и уходить. Стоит узнать, почему она отличалась от предполагаемой. Может быть, выбраны характеристики, не 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" соответствовавшие реальной дилемме. Может быть, сама модель была неправильной. Какова бы ни была причина, нужно не спеша прояснить, что все-таки случилось. Если сделать это, то последующая оценка будет лучше.

Оценка 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" графиков выполнения проекта

Обыденные правила оценки могут нарушаться перед лицом сложностей и капризов разработки суровой прикладной программки. Мы считаем, что часто единственным методом определения графика выполнения проекта является практический опыт, приобретенный при 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" работе над этим проектом. Это не непременно феномен, если вы практикуете разработку при помощи приращений, повторяя последующие шаги.

• Проверить требования

• Проанализировать риск

• Осуществить проектирование, реализацию, интеграцию

• Проверить корректность при работе с юзерами

Сначало у вас может быть 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" только ориентировочная оценка того, сколько итераций пригодится либо какова будет их длительность. Некие способы требуют, чтоб вы зафиксировали это как часть начального плана, но для всех способов, кроме более очевидных 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру", это будет ошибкой. Если вы не создаете приложение, аналогичное предшествующему, с той же командой и по той же технологии, вам придется делать догадки.

Итак, вы завершаете составление текста программки и проверку начальной многофункциональной способности и 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" отмечаете это как конечную точку первого приращения. Основываясь на этом опыте, вы сможете уточнить ваше изначальное предположение о числе итераций и о том, что может быть включено в каждую из их. С 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" каждым разом уточнение становится все совершеннее, и вкупе с этим вырастает уверенность в корректности графика.


Подсказка 19: Уточняйте график проекта на базе текста программки


Это может не приглянуться управлению, которому обычно нужна единственная 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" надежная цифра еще до начала проекта. Вам придется посодействовать им понять, что команда, ее производительность и среда будут определять график выполнения. Формализуя эту функцию и уточняя график (что является частью итерационного 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" процесса), вы можете дать управлению самые четкие оценки графика выполнения, какие только можете.

^ Что сказать, если вас требуют оценить что-либо

Гласите "Я вернусь к вам с этим позднее".

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

Другие разделы, относящиеся к этой теме:

• Скорость метода

Вопросы для обсуждения

• Заведите журнальчик регистрации изготовленных вами оценок. Для каждой оценки 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" укажите, как четкой она оказалась. Если отклонение превысило 50 %, постарайтесь узнать, где была допущена ошибка.

Упражнения

9. Спрашивается: какой из 2-ух каналов обладает более широкой полосой пропускания: линия связи со скоростью 1 Мбайт/сек 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" либо человек, двигающийся от компьютера к компу со стриммерной кассетой объемом 4 Гбайт в кармашке? Какие ограничения накладываются на ответ, чтоб гарантировать его правильность в определенной области? (К примеру, можно указать, что временем 8 Ортогональность - Книга "Программист-прагматик. Путь от подмастерья к мастеру" доступа к ленте можно пренебречь.) (Ответ см. в Приложении В.)

10. Так какой из 2-ух каналов обладает более широкой полосой пропускания? (Ответ см. в Приложении В.)




8-proekt-dogovora-dokumentaciya-po-provedeniyu.html
8-programma-formirovaniya-kulturi-osnovnaya-obrazovatelnaya-programma-nachalnogo-obshego-obrazovaniya-mkou-udachinskaya-sosh.html
8-programma-korrekcionnoj-raboti-osnovnaya-obrazovatelnaya-programma-nachalnogo-obshego-obrazovaniya-municipalnogo.html