BookSeriouslyGoodSoftware

Данный репозиторий создан с целью изучения книги Стильный Java. Код, который работает всегда и везде под авторством Марко Фаэлла.


1 Глава. Свойства кода и постановка задачи.

  • Оценка кода с разных точек зрения и в контексте разных целей.
  • Внутренние и внешние свойства кода.
  • Функциональные и нефункциональные свойства кода.
  • Взаимодействия и компромиссы между свойствами кода.

2 Глава. Эталонная реализация.

  • Стандартные коллекции.
  • Создание диаграмм для демонстрации структуры кода.
  • Выражение скорости выполнения через O-большое.
  • Оценка потребления памяти классом.

3 Глава. Жажда скорости: эффективность по времени.

  • Сравнение скорости выполнения основных структур данных, включая списки, множества и деревья.
  • Оценка скорости выполнения в худшем случае и средней скорости выполнения структуры данных в долгосрочной перспективе.
  • Концентрация вычислительной нагрузки в конкретном методе класса или ее распределение по всем методам

4 Глава. Эффективность по затратам памяти.

  • Написание классов, эффективных по затратам памяти.
  • Сравнение требований к памяти для основных структур данных, включая массивы, списки и множества.
  • Оценка компромиссов между скоростью выполнения и потреблением памяти.
  • Использование локальности в памяти для ускорения выполнения.

5 Глава. Надежность за счет мониторинга.

  • Написание спецификаций методов в форме контрактов.
  • Соблюдение контрактов во время выполнения.
  • Использование директив assert.
  • Проверка инвариантов классов как упрощенная альтернатива для постусловий.

6 Глава. Надежность за счет тестирования.

  • Проектирование набора модульных тестов.
  • Применение критериев покрытия ввода.
  • Оценка покрытия кода.
  • Оценка и улучшение тестируемости кода.

7 Глава. Удобочитаемость.

  • Написание удобочитаемого кода.
  • Документирование контрактов с использованием комментариев Javadoc.
  • Замена комментариев к реализации самодокументируемым кодом.

8 Глава. Потокобезопасность.

  • Выявление и предотвращение взаимных блокировок и состояний гонки.
  • Использование явных блокировок.
  • Синхронизация без блокировок.
  • Проектирование неизменяемых классов.

9 Глава. Повторное использование.

  • Расширенное представление программного продукта в более широком контексте.
  • Использование обобщений для написания классов, пригодных для повторного использования.
  • Использование и модификация изменяемых коллекторов для потоков данных