- •2. Структурное программирование. Проектирование сверху вниз. Модульное программирование. Структурное кодирование
- •4. Функции. Компактность. Правило одной операции. Опасность смешения уровней абстракции
- •5. Функции. Правило понижения. Паттерн «Абстрактная фабрика» и использование оператора switch
- •6. Аргументы функций. Приемлемое количество и качество аргументов. Побочные эффекты в функциях. Примеры
- •7. Комментарии. Основные правила написания хороших комментариев. Комментарии todo.
- •8. Комментарии. Основные признаки плохих комментариев. Примеры.
- •9. Форматирование исходного кода. Цель форматирования. Вертикальное разделение концепций, вертикальное сжатие. Вертикальное расстояние
- •10. Форматирование исходного кода. Цель форматирования. Горизонтальное форматирование. Горизонтальное разделение и сжатие. Отступы
- •11. Объекты и структуры данных. Отличия процедурного и объектно-ориентированного кода. Случаи применения
- •12. Закон Деметры. Опасность построения гибридов объектов и структур данных. Объекты передачи данных и активные записи
- •13. Обработка ошибок. Исключения и коды ошибок. Использование паттерна «Особый случай».
- •14. Использование стороннего программного кода. Учебные тесты как инструмент исследования и анализа граничного кода.
- •16. Класс. Размеры класса. Принцип единой ответственности (srp).
- •17. Понятие связности класса. Влияние связности на размер классов.
- •18. Структурирование класса с учетом его изменений. Принципы проектирования классов в ооп.
- •19. Понятие эффективности программы. Выбор между эффективностью и удобочитаемостью. Оптимизирующие компиляторы.
- •20. Методология разработки через тестирование (tdd). Последовательность этапов разработки при использовании методологии tdd. Три закона tdd.
- •21. Тестирование как важный этап процесса разработки по. Чистота тестов. Тесты как средство обеспечения изменений. Правило «одна концепция на тест».
- •22. Экономические аспекты процесса тестирования. Тестирование методами «черного» и «белого» ящика. Невозможность исчерпывающего тестирования.
- •23. Основные принципы тестирования программного обеспечения.
- •24. Понятие отладки. Отличие между отладкой и тестированием. Средства отладки. Защитное программирование
- •25. Понятие отладки. Основные принципы отладки. Принципы локализации ошибок. Принципы устранения ошибок.
- •26. Понятие отладки. Основные подходы к отладке программ. Методы «грубой силы», индуктивная отладка, дедуктивная отладка, обратная трассировка, отладка тестированием.
- •28. Понятие правильности программ. Доказательство правильности программ. Правильность программ
- •29. Типы разложения вычислений (сочленение, выбор, повторение).
- •If условие then оператор 1 else оператор 2
- •30. Неоднозначность определения программы. Проблема сравнения программ.
- •32. Понятие рефакторинга. Рефакторинги «Согласование различий», «Миграция данных», «Выделение метода».
- •33. Понятие рефакторинга. Рефакторинги «Встраивание метода», «Выделение интерфейса», «Перемещение метода».
- •Inline method (встраивание метода)
- •34. Понятие рефакторинга. Рефакторинги «Метод в объект», «Добавление параметра», «Параметр метода в параметр конструктора».
6. Аргументы функций. Приемлемое количество и качество аргументов. Побочные эффекты в функциях. Примеры
АРГУМЕНТЫ ФУНКЦИЙ
В идеальном случае количество аргументов функции равно нулю. Далее следуют унарные, бинарные, тернарные, полиарные.
Аргументы усложняют функции.
Аргументы создают еще больше проблем с точки зрения тестирования.
Если уж обойтись без аргументов никак не удается, постарайтесь хотя бы ограничиться одним входным аргументом.
СТАНДАРТНЫЕ УНАРНЫЕ ФОРМЫ
Не следует использовать так называемые аргументы флаги. Их наличие явно указывает наличие у функций более одного действия. Передача логического значения функции — воистину ужасная привычка. Она немедленно усложняет сигнатуру метода, громко провозглашая, что функция выполняет более одной операции. При истинном значении флага выполняется одна операция, а при ложном — другая!
БИНАРНЫЕ ФУНКЦИИ
Функцию с двумя аргументами понять сложнее, чем унарную функцию. Например, вызов writeField(name) выглядит более доступно, чем writeField(outputStream.name). Во второй форме первый параметр должен игнорироваться. Это создает проблемы, потому что никакие части кода игнорироваться не должны.
ТЕРНАРНЫЕ ФУНКЦИИ
Разобраться в функции с тремя аргументами значительно сложнее, чем в бинарной функции. Проблемы соблюдения порядка аргументов, приостановки чтения и игнорирования увеличиваются более чем вдвое.
ИЗБАВЬТЕСЬ ОТ ПОБОЧНЫХ ЭФФЕКТОВ
Побочные эффекты суть ложь. Ваша функция обещает делать что-то одно, но делает что-то другое, скрытое от пользователя. Иногда она вносит неожиданные изменения в переменные своего класса – скажем, присваивает им значения параметров, переданных функции, или глобальных переменных системы.
Для примера возьмем функцию из листинга 3.6.
Листинг 3.6. UserValidator.java
public class UserValidator {
private Cryptographer cryptographer;
public boolean checkPassword(String userName, String password) {
User user = UserGateway.findByName(userName);
if (user != User.NULL) {
String codedPhrase = user.getPhraseEncodedByPasswordO;
String phrase = cryptographer.decrypt(codedPhrase. password);
if ("Valid Password".equals(phrase)) {
Session.initialize();
return true;
} }
return false;
} }
Побочным эффектом является вызов Session.initialize(). Имя checkPassword сообщает, что функция проверяет пароль. Оно ничего не говорит о том, что функция инициализирует сеанс. Таким образом, тот, кто поверит имени функции, рискует потерять текущие сеансовые данные, когда он решит проверить данные пользователя.
7. Комментарии. Основные правила написания хороших комментариев. Комментарии todo.
КОММЕНТАРИИ
Программы с пояснительными комментариями значительно легче отлаживать.
Делайте комментариев больше, чем это кажется необходимым.
Цель комментариев — облегчить понимание программы, — они должны быть так же хорошо продуманы и проработаны, как и кодировка программы. Существуют три типа комментариев: вводные, оглавления и пояснительные.
ВВОДНЫЕ КОММЕНТАРИИ
Минимальная информация, содержащаяся в вводных комментариях, должна включать следующие пункты:
Назначение программы.
Указания по вызову программы и ее использованию.
Список и назначение основных, переменных или массивов.
Название применяемых математических методов, а также ссылки на литературные источники, где содержится их описание.
Сведения об авторе.
Дату написания программы.
ПОЯСНИТЕЛЬНЫЕ КОММЕНТАРИИ
Пояснениями нужно сопровождать те части программы, которые трудно понять без комментариев. Сопровождайте комментариями те действия, которые, с вашей точки зрения, могут быть не совсем понятны другому. Эта документация будет всегда находиться вместе с программой. Она поможет другому программисту понять вашу программу. Средней нормой можно считать одну строку комментариев на десять строк программы.
Комментарии должны объяснять цель группы операторов программы, а не описывать действия, производимые этим» операторами.
Комментарии должны содержать некоторую дополнительную информацию, а не перефразировать программу.
РАСПОЛОЖЕНИЕ КОММЕНТАРИЕВ
Располагайте комментарии таким образом, чтобы это не делало ее менее наглядной.
ПРАВИЛЬНЫЕ КОММЕНТАРИИ
Комментарии должны быть правильными. Они должны быть правильными сначала и изменяться в соответствии с изменениями программы. Неправильные комментарии вводят в заблуждение.
КОММЕНТАРИИ TODO
Иногда бывает полезно оставить заметки «на будущее» в форме комментариев //TODO.
Комментарии TODO напоминают о том, что, по мнению программиста, сделать необходимо, но по какой-то причине нельзя сделать прямо сейчас.
Код не должен загромождаться лишними комментариями TODO.
