
- •1. Предпосылки возникновения методологии структурного программирования. Основные принципы структурного программирования. Теорема Бёма-Якопини.
- •2. Структурное программирование. Проектирование сверху вниз. Модульное программирование. Структурное кодирование
- •4. Функции. Компактность. Правило одной операции. Опасность смешения уровней абстракции
- •5. Функции. Правило понижения. Паттерн «Абстрактная фабрика» и использование оператора switch
- •6. Аргументы функций. Приемлемое количество и качество аргументов. Побочные эффекты в функциях. Примеры
- •7. Комментарии. Основные правила написания хороших комментариев. Комментарии todo.
- •8. Комментарии. Основные признаки плохих комментариев. Примеры.
- •9. Форматирование исходного кода. Цель форматирования. Вертикальное разделение концепций, вертикальное сжатие. Вертикальное расстояние
- •10. Форматирование исходного кода. Цель форматирования. Горизонтальное форматирование. Горизонтальное разделение и сжатие. Отступы
- •11. Объекты и структуры данных. Отличия процедурного и объектно-ориентированного кода. Случаи применения
- •12. Закон Деметры. Опасность построения гибридов объектов и структур данных. Объекты передачи данных и активные записи
- •13. Обработка ошибок. Исключения и коды ошибок. Использование паттерна «Особый случай».
- •14. Использование стороннего программного кода. Учебные тесты как инструмент исследования и анализа граничного кода.
- •15. Проблемы использования стороннего программного кода. Применение паттерна «Адаптер» для организации взаимодействия с недоступным кодом.
- •16. Класс. Размеры класса. Принцип единой ответственности (srp).
- •17. Понятие связности класса. Влияние связности на размер классов.
- •18. Структурирование класса с учетом его изменений. Принципы проектирования классов в ооп.
- •19. Понятие эффективности программы. Выбор между эффективностью и удобочитаемостью. Оптимизирующие компиляторы.
- •20. Методология разработки через тестирование (tdd). Последовательность этапов разработки при использовании методологии tdd. Три закона tdd.
- •21. Тестирование как важный этап процесса разработки по. Чистота тестов. Тесты как средство обеспечения изменений. Правило «одна концепция на тест».
- •22. Экономические аспекты процесса тестирования. Тестирование методами «черного» и «белого» ящика. Невозможность исчерпывающего тестирования.
- •23. Основные принципы тестирования программного обеспечения.
- •24. Понятие отладки. Отличие между отладкой и тестированием. Средства отладки. Защитное программирование
- •25. Понятие отладки. Основные принципы отладки. Принципы локализации ошибок. Принципы устранения ошибок.
- •26. Понятие отладки. Основные подходы к отладке программ. Методы «грубой силы», индуктивная отладка, дедуктивная отладка, обратная трассировка, отладка тестированием.
- •27. Проблема ограниченности вычислительных систем. Возможности преодоления некоторых типов ограничений.
- •28. Понятие правильности программ. Доказательство правильности программ. Правильность программ
- •29. Типы разложения вычислений (сочленение, выбор, повторение).
- •If условие then оператор 1 else оператор 2
- •30. Неоднозначность определения программы. Проблема сравнения программ.
- •32. Понятие рефакторинга. Рефакторинги «Согласование различий», «Миграция данных», «Выделение метода».
- •33. Понятие рефакторинга. Рефакторинги «Встраивание метода», «Выделение интерфейса», «Перемещение метода».
- •Inline method (встраивание метода)
- •34. Понятие рефакторинга. Рефакторинги «Метод в объект», «Добавление параметра», «Параметр метода в параметр конструктора».
7. Комментарии. Основные правила написания хороших комментариев. Комментарии todo.
КОММЕНТАРИИ
Желательность комментариев, казалось бы, очевидна, однако далеко не всегда их включают в программу. Комментарии опускают с целью экономии времени. Иногда утверждают, что «комментарии будут вставлены позже». Но такая отговорка неубедительна, потому что через удивительно короткое время авторы программы обнаруживают, что забыли ее многие детали. Программы с пояснительными комментариями значительно легче отлаживать, так как они содержат дополнительную информацию для работы с программой. Просматривая чужую программу, программист часто тратит много времени, отслеживая логику программы или просто переписывая недокументированную программу, если необходимо внести в нее изменения. В этом случае все первоначально «сэкономленное» время расходуется с превышением во много раз.
Некомментируемая программа — это, вероятно, наихудшая ошибка, которую может сделать программист, а также свидетельство дилетантского подхода (пусть даже программист имеет десятилетний опыт работы); более того, это веская причина для увольнения программиста. Последнее утверждение может показаться слишком сильным, но, вероятно, многие руководители одобрили бы его. Комментарии подобны ориентирам в незнакомом лесу. Только неразумный не оставляет ориентиров, затрудняя таким образом отладку и тестирование программы.
Делайте комментариев больше, чем это кажется необходимым.
Хорошие комментарии написать непросто. Так как цель комментариев — облегчить понимание программы, — они должны быть так же хорошо продуманы и проработаны, как и кодировка программы. Существуют три типа комментариев: вводные, оглавления и пояснительные.
ВВОДНЫЕ КОММЕНТАРИИ
Каждая программа, подпрограмма или процедура должна начинаться с комментариев, поясняющих, что она делает. Минимальная информация, содержащаяся в вводных комментариях, должна включать следующие пункты:
Назначение программы.
Указания по вызову программы и ее использованию.
Список и назначение основных, переменных или массивов.
Указания по вводу-выводу. Список всех файлов.
Список используемых подпрограмм.
Название применяемых математических методов, а также ссылки на литературные источники, где содержится их описание.
Сведения о времени выполнения программы.
Требуемый объем памяти.
Специальные указания оператору.
Сведения об авторе.
Дату написания программы.
Эти данные необходимы для документирования программы, и наилучшим местом для размещения этой информации является сама программа.
Делайте вводные комментарии.
Делайте оглавление в больших программах.
ПОЯСНИТЕЛЬНЫЕ КОММЕНТАРИИ
Пояснениями нужно сопровождать те части программы, которые трудно понять без комментариев. Перед существенными для понимания логики программы циклами или условными операторами должны появляться комментарии с указаниями действия, которое будет производиться. Надлежащим образом составленные комментарии обеспечивают словесное описание логики программы и изменения данных. Сопровождайте комментариями те действия, которые, с вашей точки зрения, могут быть не совсем понятны другому. Эта документация будет всегда находиться вместе с программой. Она поможет другому программисту понять вашу программу, а вам вспомнить написанные ранее разделы программы в то время, когда вы работаете над ее новыми разделами. Средней нормой можно считать одну строку комментариев на десять строк программы, написанной на языке высокого уровня.
Это вовсе не означает, что после каждых десяти строк программы следует давать одну строку комментариев. Каждый логически выделенный кусок программы следует комментировать.
Весьма существенно содержание комментариев. Нет необходимости переводить с английского каждый оператор программы. Считается, что читатель знаком с языком программирования. Следовательно, комментарии должны объяснять цель группы операторов программы, а не описывать действия, производимые этим» операторами.
/* ПРОВЕРИТЬ, ЯВЛЯЕТСЯ ЛИ ВЕЛИЧИНА ОТРИЦАТЕЛЬНОЙ */
Это плохой комментарий, потому что читающий программу знаком с языком программирования и в состоянии определить, что имеет место такая проверка. Но он не знает, зачем это делается. Предполагается, что именно комментарий должен ответить на этот вопрос. Оператор программы сообщает, какая операция выполняется, комментарии же должны пояснить ее цель. Вместо вышеприведенного бесполезного комментария следовало бы дать такой:
/* ВЫПОЛНИТЬ ОБРАБОТКУ ОТРИЦАТЕЛЬНОГО САЛЬДО (СУММАРНЫЕ РАСХОДЫ ПРЕВЫШАЮТ ДОХОДЫ.) */
Этот комментарий сообщает, зачем должна быть сделана проверка. Комментарии не должны объяснять синтаксис языка программирования, а должны указывать цель действия или объяснять логику программы. Делайте комментарии, содержащие полезную информацию.
комментарии должны содержать некоторую дополнительную информацию, а не перефразировать программу.
О качестве комментариев можно судить по тому, понятна ли логика программы только на основании комментариев (без обращения к какой-либо другой документации). Одна из причин слабой комментируемой программы — переоценка наших возможностей. Мы уверены, что легко вспомним логику той или иной части программы. Более того, мы не ожидаем большого количества ошибок в нашей программе, и комментарии кажутся нам излишними. Однако опыт говорит об обманчивости подобных ожиданий.
РАСПОЛОЖЕНИЕ КОММЕНТАРИЕВ
При составлении программ на языке ассемблера комментариями сопровождается большинство строк. Комментарии, которые перемежаются с текстом программы, легче читать, когда они выделены пустыми строками (до и после комментариев). Дополнительный метод выделения комментариев — заключение их в прямоугольник из специальных символов. Такой прямоугольник может быть использован в нескольких случаях:
Чтобы поместить в этот прямоугольник комментарии.
Чтобы сгруппировать множество команд. Это достигается расположением до и после этой группы команд строк комментариев, заполненных специальными символами.
Чтобы указать, что комментарий относится к нескольким строкам программы.
Для структурированных программ обычно требуется меньше комментариев, чем для неструктурированных, так как программы первого вида понятнее и в них меньше переходов.
Располагайте комментарии таким образом, чтобы это не делало ее менее наглядной.
ПРАВИЛЬНЫЕ КОММЕНТАРИИ
Комментарии должны быть правильными. Другими словами, они должны быть правильными сначала и изменяться в соответствии с изменениями программы. Очевидно, что неправильные комментарии — это хуже, чем их отсутствие, поскольку такие комментарии вводят в заблуждение.
Неправильные комментарии хуже, чем их отсутствие.
КОММЕНТАРИИ TODO
Иногда бывает полезно оставить заметки «на будущее» в форме комментариев //TODO. В следующем примере комментарий TODO объясняет, почему функция имеет вырожденную реализацию и что она должна делать в будущем.
// T0D0 - На данный момент эта функция не используется.
// Ситуация изменится при переходе к отладочной модели.
protected Versionlnfo makeVersionO throws Exception
{
return null;
}
Комментарии TODO напоминают о том, что, по мнению программиста, сделать необходимо, но по какой-то причине нельзя сделать прямо сейчас. Например, комментарий может напомнить о необходимости удаления устаревшей функции или предложить кому-то другому поучаствовать в решении проблемы — скажем, придумать более удачное имя или внести изменения, зависящие от запланированного события. Впрочем, чем бы ни был комментарий TODO, это не повод оставлять плохой код в системе.
В наши дни в любой хорошей рабочей среде имеется функция поиска всех комментариев TODO, так что потеря таких комментариев маловероятна. И все же код не должен загромождаться лишними комментариями TODO. Регулярно просматривайте их и удаляйте те, которые потеряли актуальность.