Шрифт:
Все сказанное стимулирует наш интерес к структуре кода.
• Если в программе есть ошибка (каждая большая программа содержит ошибки), то найти ее легче, если программа имеет четкую структуру.
• Если программу необходимо объяснить постороннему или как-то модифицировать, то четкую структуру понять намного легче, чем мешанину низкоуровневых деталей.
• Если программа испытывает проблемы с производительностью, то настроить высокоуровневую программу, как правило, намного легче (поскольку она точнее соответствует общим принципам и имеет хорошо определенную структуру), чем низкоуровневую. Для начинающих программистов высокоуровневая структура намного понятнее. Кроме того, высокоуровневый код намного легче тестировать и настраивать, чем низкоуровневый.
22.1.2.2. Общие подходы
Существуют два подхода к созданию правильного программного обеспечения.
• Снизу–вверх. Система компонуется только из составляющих частей, правильность которых уже доказана.
• Сверху–вниз. Система компонуется из составляющих частей, предположительно содержащих ошибки, а затем вылавливаются все ошибки.
• Мы не можем создать и проверить основные компоненты, заранее устранив все источники ошибок.
• Мы не можем полностью компенсировать недостатки основных компонентов (библиотек, подсистем, иерархий классов и т.д.), объединив их в законченную систему.
Однако сочетание этих двух подходов может дать больше, чем каждый из них по отдельности: мы можем создать (или позаимствовать, или приобрести) компоненты, имеющие достаточно высокое качество, так что остальные проблемы можно устранить с помощью обработки ошибок и систематического тестирования. Кроме того, если мы продолжаем создавать все более хорошие компоненты, то из них можно создавать все большие части системы, сокращая долю необходимого “беспорядочного специального” кода.
22.1.2.3. Непосредственное выражение идей
• Выражение идей непосредственно в коде. Например, аргумент лучше представлять с помощью специального типа (например,
• Независимое представление в коде независимых идей. Например, за некоторым исключением, стандартная функция
• Представление отношений между идеями непосредственно в коде. Наиболее общими отношениями, которые можно непосредственно выразить в коде, являются наследование (например, класс
• Свободное сочетание идей, выраженных в коде, там и только там, где такая комбинация имеет смысл. Например, функция