- •Вопрос 2 3
- •Вопрос 2 Структурное программирование. Проектирование сверху вниз. Модульное программирование. Структурное кодирование
- •Вопрос 4 Функции. Компактность. Правило одной операции. Опасность смешения уровней абстракции
- •Вопрос 5 Функции. Правило понижения. Паттерн «Абстрактная фабрика» и использование оператора switch
- •Вопрос 6 Аргументы функций. Приемлемое количество и качество аргументов. Побочные эффекты в функциях. Примеры
- •Вопрос 9 Форматирование исходного кода. Цель форматирования. Вертикальное разделение концепций, вертикальное сжатие. Вертикальное расстояние
- •Вопрос 10 Форматирование исходного кода. Цель форматирования. Горизонтальное форматирование. Горизонтальное разделение и сжатие. Отступы
- •Вопрос 11 Объекты и структуры данных. Отличия процедурного и объектно-ориентированного кода. Случаи применения
- •Вопрос 12 Закон Деметры. Опасность построения гибридов объектов и структур данных. Объекты передачи данных и активные записи
- •Вопрос 16 Класс. Размеры класса. Принцип единой ответственности (srp)
- •Вопрос 17 Понятие связности класса. Влияние связности на размер классов
- •Вопрос 18 Структурирование класса с учетом его изменений. Принципы проектирования классов в ооп
- •Вопрос 19 Понятие эффективности программы. Выбор между эффективностью и удобочитаемостью. Оптимизирующие компиляторы
- •Вопрос 24 Понятие отладки. Отличие между отладкой и тестированием. Средства отладки. Защитное программирование
- •Вопрос 28 Понятие правильности программ. Доказательство правильности программ
Вопрос 4 Функции. Компактность. Правило одной операции. Опасность смешения уровней абстракции
Функция — это поименованная часть программы, которая может вызываться из других частей программы столько раз, сколько необходимо. Функция, в отличие от процедуры, обязательно возвращает значение.
Функции образуют первый уровень структуризации в любой программе.
Компактность
Первое правило: функции должны быть компактными. Второе правило: функции должны быть еще компактнее. Функции должны иметь небольшой размер, порядка 20 строк.
Правило одной операции
ФУНКЦИЯ ДОЛЖНА ВЫПОЛНЯТЬ ТОЛЬКО ОДНУ ОПЕРАЦИЮ. ОНА ДОЛЖНА ВЫПОЛНЯТЬ ЕЕ ХОРОШО. И НИЧЕГО ДРУГОГО ОНА ДЕЛАТЬ НЕ ДОЛЖНА.
Проблема в том, что иногда бывает трудно определить, что же считать «одной операцией».
Если функция выполняет только те действия, которые находятся на одном уровне абстракции под объявленным именем функции, то эта функция выполняет одну операцию.
Уровень абстракции предоставляет способ сокрытия деталей реализации определенного множества функциональных возможностей.
В конце концов, функции пишутся, прежде всего, для разложения более крупной концепции (иначе говоря, имени функции) на последовательность действий на следующем уровне абстракции.
Итак, чтобы определить, что функция выполняет более одной операции, попробуйте извлечь из нее другую функцию, которая бы не являлась простой переформулировкой реализации.
Один уровень абстракции на функцию
Чтобы убедиться в том, что функция выполняет «только одну операцию», необходимо проверить, что все команды функции находятся на одном уровне абстракции. Смешение уровней абстракции внутри функции всегда создает путаницу. Не всегда понятно, является ли некоторое выражение важной концепцией или второстепенной подробностью. При их смешении функция постепенно начинает обрастать все большим количеством второстепенных подробностей.
Вопрос 5 Функции. Правило понижения. Паттерн «Абстрактная фабрика» и использование оператора switch
Функция — это поименованная часть программы, которая может вызываться из других частей программы столько раз, сколько необходимо. Функция, в отличие от процедуры, обязательно возвращает значение.
Правило понижения
Код должен читаться как рассказ — сверху вниз. За каждой функцией должны следовать функции следующего уровня абстракции. Это позволяет читать код, последовательно спускаясь по уровням абстракции в ходе чтения списка функций. Такой подход называется «правилом понижения».
сформулировать и иначе: программа должна читаться так, словно она является набором ТО-абзацев, каждый из которых описывает текущий уровень абстракции и ссылается на последующие ТО-абзацы следующего нижнего уровня.
Чтобы включить начальные и конечные блоки, мы сначала включаем начальные блоки, затем содержимое тестовой страницы, а затем включаем конечные блоки.
- Чтобы включить начальные блоки, мы сначала включаем пакетные начальные блоки, если имеем дело с пакетом тестов, а затем включаем обычные начальные блоки.
- Чтобы включить пакетные начальные блоки, мы ищем в родительской иерархии страницу и добавляем команду include с путем к этой странице.
Паттерн «Абстрактная фабрика» и использование оператора switch
Команды switch следует использовать с осторожностью. Общее правило гласит, что команда switch должна использоваться для создания полиморфных объектов и скрываться за отношением наследования.
Решение проблемы заключается в том, чтобы похоронить команду switch в фундаменте АБСТРАКТНОЙ ФАБРИКИ и никому ее не показывать. Фабрика использует команду switch для создания соответствующих экземпляров потомков, а вызовы функций проходят полиморфную передачу через интерфейс.
