Выбрать главу
Листинг 4.2. ContainerBase.java (Tomcat)

public abstract class ContainerBase

  implements Container, Lifecycle, Pipeline,

  MBeanRegistration, Serializable {

  /**

   * Задержка процессора для этого компонента.

   */

  protected int backgroundProcessorDelay = -1;

  /**

   * Поддержка событий жизненного цикла для этого компонента.

   */

  protected LifecycleSupport lifecycle =

    new LifecycleSupport(this);

  /**

   * Слушатели контейнерных событий для этого контейнера.

   */

  protected ArrayList listeners = new ArrayList();

  /**

   * Реализация загрузчика, связанная с контейнером.

   */

  protected Loader loader = null;

  /**

   * Реализация журнального компонента, связанная с контейнером.

   */

  protected Log logger = null;

  /**

   * Имя журнального компонента.

   */

  protected String logName = null;

  /**

   * Реализация менеджера, связанная с контейнером.

   */

  protected Manager manager = null;

  /**

   * Кластер, связанный с контейнером.

   */

  protected Cluster cluster = null;

  /**

   * Удобочитаемое имя контейнера.

   */

  protected String name = null;

  /**

   * Родительский контейнер, по отношению к которому

   * данный контейнер является дочерним.

   */

  protected Container parent = null;

  /**

   * Загрузчик родительского класса, задаваемый при назначении загрузчика.

   */

  protected ClassLoader parentClassLoader = null;

  /**

   * Объект Pipeline, связанный с данным контейнером.

   */

  protected Pipeline pipeline = new StandardPipeline(this);

  /**

   * Объект Realm, связанный с контейнером.

   */

  protected Realm realm = null;

  /**

   * Объект ресурсов DirContext, связанный с контейнером

   */

  protected DirContext resources = null;

Недостоверные комментарии

Иногда с самыми лучшими намерениями программист делает в комментариях заявления, неточные и не соответствующие истине. Еще раз взгляните на совершенно лишний, но при этом слегка вводящий в заблуждение комментарий из листинга 4.1.

А вы нашли, в чем этот комментарий обманывает читателя? Метод не возвращает управление, когда значение this.closed становится истинным. Он возвращает управление, если значение this.closed истинно; в противном случае метод ожидает истечения тайм-аута, а затем инициирует исключение, если значение this.closed так и не стало истинным.

Эта крошечная дезинформация в комментарии, который читается хуже, чем сам код, может заставить другого программиста вызвать функцию в предположении, что она вернет управление сразу же, как только значение this.closed станет истинным. После этого бедный программист будет долго отлаживать программу, пытаясь понять, почему его код выполняется так медленно.

Обязательные комментарии

Правила, говорящие, что каждая функция должна иметь комментарий Javadoc или что каждая переменная должна быть помечена комментарием, — обычная глупость. Такие комментарии только загромождают код, распространяют недостоверную информацию и вызывают общую путаницу и дезориентацию.

Например, требование обязательного комментария Javadoc для каждой функции приводит к появлению монстров вроде листинга 4.3. Бессмысленные комментарии не приносят никакой пользы. Они только запутывают код, повышая риск обмана и недоразумений.

Листинг 4.3.

  /**

   *

   * @param title  Название диска

   * @param author Автор диска

   * @param tracks Количество дорожек на диске

   * @param durationInMinutes Продолжительность воспроизведения в минутах

   */

  public void addCD(String title, String author,

                     int tracks, int durationInMinutes) {

    CD cd = new CD();

    cd.title = title;