Файл: Руководство по стилю программирования и конструированию по.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 823
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
ГЛАВА 4 Основные решения, которые приходится принимать при конструировании
65
лишь мечтать. Производители часто выпускают новые версии компиляторов, при этом каждая новая версия отказывается поддерживать значительные части ваше- го кода. Инструменты не интегрированы, из-за чего UI, модули работы с БД, со- ставления отчетов и бизнес-логики приходится разрабатывать при помощи раз- ных средств. Из-за плохой совместимости инструментов и частого появления новых компиляторов и библиотек программисты тратят много усилий только на под- держание работоспособности имеющейся инфраструктуры. При возникновении проблем в Интернете можно найти кое-какую документацию, но она не отлича- ется достоверностью и полнотой.
Вам может показаться, что я рекомендую избегать программирования в ранних средах, но это не так. В ранних средах были разработаны программы, давшие начало некоторым из самых инновационных приложений, такие как Turbo Pascal,
Lotus 123, Microsoft Word и браузер Mosaic. Я просто хочу сказать, что от стадии развития технологии зависит то, как будет протекать ваша работа. В зрелой сре- де вы можете посвящать большую часть дня постепенной реализации новой функ- циональности. Работая в ранней среде, исходите из того, что вам придется тра- тить много времени на выяснение недокументированных возможностей выбран- ного языка программирования, отладку ошибок, которые в итоге окажутся дефек- тами библиотек, проверку того, что написанный код будет работать с новой вер- сией библиотеки какого-нибудь производителя и т. д.
При работе в примитивной среде методики программирования, описанные в этой книге, могут оказаться еще более полезными, чем в зрелых средах. Как сказал Дэвид
Грайс (Gries, 1981), подход к программированию не должен определяться исполь- зуемыми инструментами. В связи с этим он проводит различие между програм- мированием
на языке (programming in language) и программированием с исполь-
зованием языка (programming into language). Разработчики, программирующие «на»
языке, ограничивают свое мышление конструкциями, непосредственно поддер- живаемых языком. Если предоставляемые языком средства примитивны, мысли программистов будут столь же примитивными.
Разработчики, программирующие «с использованием» языка, сначала решают, какие мысли они хотят выразить, после чего определяют, как выразить их при помощи конкретного языка.
Пример программирования с использованием языка
Разрабатывая программу на Visual Basic, который тогда находился на раннем эта- пе развития, я с огорчением обнаружил, что язык не поддерживает встроенных способов разделения бизнес-логики, кода GUI и кода работы с БД. Я знал, что, если буду невнимателен, со временем некоторые из моих «форм» Visual Basic включат в себя код бизнес-логики, другие — код доступа к БД, а остальные не будут содер- жать ни того, ни другого — в итоге я не смогу вспомнить, какая форма за что отвечает. Я только что завершил работу над проектом C++, в котором разделение кода было выполнено плохо, и не хотел еще раз наступать на те же грабли.
Поэтому я принял конвенцию, в соответствии с которой файлам .frm (файлам формы) дозволялось только извлекать данные из БД и сохранять их обратно, но не передавать эти данные другим частям программы. Все формы поддерживали
6 6
ЧАСТЬ I Основы разработки ПО
метод IsFormCompleted(), который сообщал вызвавшему его методу, сохранила ли активная форма свои данные. IsFormCompleted()
был единственным открытым методом, который могли иметь формы. Код форм также не мог включать никакой бизнес-логики. Весь остальной код, в том числе проверяющий корректность вво- димых в форму данных, должен был содержаться в ассоциированном файле .bas.
Visual Basic не поощрял такого подхода. Он поощрял программистов включать в файл .frm максимальный объем кода, и это отнюдь не облегчало реализацию вза- имодействия межу файлами .frm и .bas.
Принятая мной конвенция была очень проста, но по мере развития проекта я обнаружил, что она помогла мне избежать многих случаев, в которых мне при- шлось бы писать неестественный код. Так, мне пришлось бы загружать формы, но держать их скрытыми, чтобы можно было вызвать реализованные в них методы проверки корректности данных, или мне пришлось бы копировать код форм в другие места программы и сопровождать этот параллельный код. Кроме того,
конвенция IsFormCompleted() позволила все упростить. Все формы работали оди- наково, поэтому я мог не предполагать семантику IsFormCompleted() — вызовы этого метода всегда имели одинаковый смысл.
Visual Basic не поддерживал такой подход непосредственно, но простая конвен- ция программирования — программирование
с использованием языка — позво- лила мне реализовать отсутствующую в то время структуру языка и помогла упростить проект до приемлемого уровня.
Понимание различия между программированием на языке и програм ми рованием с использованием языка — важнейшее условие понима- ния этой книги. Большинство важных принципов программирования зависит не от конкретных языков, а от способа их использования. Если язык не поддерживает нужные конструкции или имеет другие недостатки, попробуйте их компенсировать. Создайте свои конвенции кодирования, стандарты, библио- теки классов и другие средства.
4.4. Выбор основных методик конструирования
При подготовке к конструированию следует решить, какие из доступных эффек- тивных методик вы будете использовать. Некоторые проекты предусматривают пар- ное программирование и предварительное создание тестов, тогда как другие —
индивидуальное программирование и проведение формальных инспекций. Обе комбинации методик могут быть удачными, но при их выборе следует учитывать специфические особенности проекта.
Специфические методики конструирования, которые должны быть осознанно приняты или отвергнуты, указаны ниже. В оставшейся части книги эти методики будут описаны подробнее.
1 ... 6 7 8 9 10 11 12 13 ... 104
ГЛАВА 4 Основные решения, которые приходится принимать при конструировании
67
Контрольный список: основные методики
конструирования
Кодирование
Решили ли вы, какая часть проекта приложения будет разработана предва- рительно, а какая во время написания кода?
Выбрали ли вы конвенции именования программных элементов, оформле- ния комментариев и форматирования кода?
Выбрали ли вы специфические методики кодирования, определяемые архи- тектурой приложения? Определили ли вы, как будут обрабатываться ошиб- ки, как будут решаться проблемы, связанные с безопасностью, какие конвенции будут использоваться при разработке интерфейсов классов, каким стандар- там должен будет отвечать повторно используемый код, сколько внимания нужно будет уделять быстродействию приложения при кодировании и т. д.?
Определили ли вы стадию развития используемой технологии и адаптиро- вали ли к ней свой подход? Если это необходимо, определились ли вы с тем, как будете программировать с использованием языка, вместо того чтобы ограничиваться программированием на нем?
Работа в группе
Определили ли вы процедуру интеграции? Иначе говоря, какие специфи- ческие действия программист должен будет выполнить перед включением своего кода в исходный код всего проекта?
Будут ли программисты программировать парами, индивидуально или эти подходы будут скомбинированы?
Гарантия качества
Должны ли будут программисты разработать тесты для своего кода до написания самого кода?
Должны ли будут программисты разработать блочные тесты для своего кода?
Должны ли будут программисты перед включением своего кода в исходный код всего проекта проанализировать его в отладчике?
Должны ли будут программисты выполнить интеграционное тестирование своего кода до его включения в исходный код проекта?
Будут ли программисты выполнять взаимные обзоры или инспекцию кода?
Инструменты
Выбрали ли вы инструмент управления версиями?
Выбрали ли вы язык, версию языка и версию компиля- тора?
Выбрали ли вы платформу программирования (такую как
J2EE или Microsoft .NET) или явно решили не использовать ее?
Приняли ли вы решение о том, можно ли будет использовать нестандарт- ные возможности языка?
Определили ли вы другие средства, которые будете применять: редактор,
инструмент рефакторинга, платформу для тестирования, модуль проверки синтаксиса и т. д.? Приобрели ли вы их?
http://cc2e.com/0496
Перекрестная ссылка Гарантия качества рассматривается в гла- ве 20.
Перекрестная ссылка Об инст- рументах программирования см.
главу 30.
6 8
ЧАСТЬ I Основы разработки ПО
Ключевые моменты
쐽
Каждый язык программирования имеет достоинства и недостатки. Вы долж- ны знать отдельные достоинства и недостатки используемого языка.
쐽
Определите конвенции программирования до начала программирования.
Позднее адаптировать к ним код станет почти невозможно.
쐽
Методик конструирования слишком много, чтобы использовать все в одном проекте. Тщательно выбирайте методики, наиболее подходящие для вашего про- екта.
쐽
Спросите себя, являются ли используемые вами методики программирования ответом на выбранный язык программирования или их выбор был определен языком. Помните, что программировать следует с использованием языка, а не на языке.
쐽
Эффективность конкретных подходов и даже возможность их применения за- висит от стадии развития соответствующей технологии. Определите стадию раз- вития используемой технологии и адаптируйте к ней свои планы и ожидания.
ГЛАВА 4 Основные решения, которые приходится принимать при конструировании
69
Часть II
ВЫСОКОКАЧЕСТВЕННЫЙ
КОД
쐽
Глава 5. Проектирование при конструировании
쐽
Глава 6. Классы
쐽
Глава 7. Высококачественные методы
쐽
Глава 8. Защитное программирование
쐽
Глава 9. Процесс программирования с псевдокодом
70
ЧАСТЬ
II
Высококачественный код
Г Л А В А 5
Проектирование
при конструировании
Содержание
쐽
5.1. Проблемы, связанные с проектированием ПО
쐽
5.2. Основные концепции проектирования
쐽
5.3. Компоненты проектирования: эвристические принципы
쐽
5.4. Методики проектирования
쐽
5.5. Комментарии по поводу популярных методологий
Связанные темы
쐽
Разработка архитектуры ПО: раздел 3.5
쐽
Классы: глава 6
쐽
Характеристики высококачественных методов: глава 7
쐽
Защитное программирование: глава 8
쐽
Рефакторинг: глава 24
쐽
Зависимость конструирования от объема программы: глава 27
Некоторые программисты могут заявить, что проектирование не связано с кон- струированием, но при работе над небольшими проектами конструирование часто включает другие процессы, в том числе проектирование. В некоторых бо- лее крупных проектах формальная архитектура может давать ответы только на во-просы системного уровня, при этом значительная часть проектирования может быть намеренно оставлена на этап конструирования. В других крупных проектах проектирование может быть проведено в таком объеме, что кодирование стано- вится почти механическим, однако это случается редко — официально или нет, программисты обычно сами проектируют некоторые фрагменты программы.
В случае небольших неформальных проектов значительная часть проектирования выполняется за клавиатурой. «Про- ектирование» может выражаться в простом написании ин- терфейса класса на псевдокоде до разработки его деталей.
Оно может выражаться в рисовании диаграмм отношений http://cc2e.com/0578
Перекрестная ссылка Об уров- нях формальности, требуемой при работе над крупными и не- большими проектами, см. гла- ву 27.