Стильный Java. Код, который работает всегда и везде
Book information
Description
Перевел с английского Е. Матвеев. В современном мире разработки успешность приложения уже не определяется параметром «просто работает». Хороший программист должен знать возможности языка, практические приемы проектирования и платформенные средства для достижения максимальной производительности и жизнеспособности программ. Эта книга написана для разработчиков, которые хотят создавать качественный софт. Затронуты все ключевые показатели ПО: скорость, затраты памяти, надежность, удобочитаемость, потоковая безопасность, универсальность и элегантность. Реальные задачи и прикладные примеры кода на Java помогут надежно усвоить концепции. Пройдя все этапы создания центрального проекта книги, вы сможете уверенно выбрать правильный путь оптимизации собственного приложения. Предисловие Введение Благодарности О книге Об авторе Об обложке От издательства Часть IОтправная точка Глава 1. Свойства кода и постановка задачи 1.1. Свойства кода 1.1.1. Внутренние и внешние свойства 1.1.2. Функциональные и нефункциональные свойства 1.2. Преимущественно внешние свойства 1.2.1. Правильность 1.2.2. Стабильность 1.2.3. Удобство использования 1.2.4. Эффективность 1.3. Преимущественно внутренние свойства кода 1.3.1. Удобочитаемость 1.3.2. Возможность повторного использования 1.3.3. Удобство тестирования 1.3.4. Удобство сопровождения 1.4. Взаимодействие свойств кода 1.5. Специфичные свойства 1.5.1. Потокобезопасность 1.5.2. Лаконичность 1.6. Сквозной пример: система резервуаров для воды 1.6.1. API 1.6.2. Сценарий использования 1.7. Модель данных и представления 1.7.1. Хранение объема воды 1.7.2. Хранение информации о соединениях 1.8. Hello, резервуары! [Novice] 1.8.1. Поля и конструктор 1.8.2. Методы getAmount и addWater 1.8.3. Метод connectTo Итоги Дополнительная литература Глава 2. Эталонная реализация 2.1. Код [Reference] 2.1.1. Диаграммы распределения памяти 2.1.2. Методы 2.2. Требования к памяти 2.2.1. Требования к памяти в Reference 2.3. Временнˆая сложность 2.3.1. Временная сложность в Reference 2.4. Применим изученное Итоги Ответы на вопросы и упражнения Дополнительная литература Часть IIСвойства программного кода Глава 3. Жажда скорости: эффективность по времени 3.1. Добавление воды с постоянным временем [Speed1] 3.1.1. Временная сложность 3.2. Добавление соединений за постоянное время [Speed2] 3.2.1. Представление групп в виде циклических списков 3.2.2. Отложенные обновления 3.3. Лучший баланс: алгоритмы поиска объединений [Speed3] 3.3.1. Поиск представителя группы 3.3.2. Соединение деревьев 3.3.3. Временная сложность в наихудшем случае 3.3.4. Амортизированная временная сложность 3.3.5. Амортизированный анализ массивов с изменяемым размером 3.4. Сравнение реализаций 3.4.1. Эксперименты 3.4.2. Теория и практика 3.5. А теперь совсем другое 3.5.1. Быстрая вставка 3.5.2. Быстрые запросы 3.5.3. Все операции 3.6. Реальные сценарии использования 3.7. Применим изученное Итоги Ответы на вопросы и упражнения Дополнительная литература Глава 4. Эффективность по затратам памяти 4.1. Первые шаги [Memory1] 4.1.1. Временная сложность и затраты памяти 4.2. Простые массивы 4.2.1. Временная сложность и затраты памяти 4.3. Отказ от объектов [Memory3] 4.3.1. API без объектов 4.3.2. Поля и метод getAmount 4.3.3. Создание резервуаров фабричным методом 4.3.4. Соединение резервуаров по идентификаторам 4.3.5. Временная сложность и затраты памяти 4.4. Черная дыра [Memory4] 4.4.1. Временная сложность и затраты памяти 4.5. Баланс затрат памяти и времени 4.6. А теперь совсем другое 4.6.1. Малое количество дубликатов 4.6.2. Большое количество дубликатов 4.7. Реальные сценарии использования 4.8. Применим изученное Итоги Ответы на вопросы и упражнения Дополнительная литература Глава 5. Надежность за счет мониторинга 5.1. Контрактное проектирование 5.1.1. Предусловия и постусловия 5.1.2. Инварианты 5.1.3. Правильность и стабильность 5.1.4. Проверка контрактов 5.1.5. Более широкая картина 5.2. Контрактное проектирование резервуаров 5.3. Резервуары, проверяющие свои контракты [Contracts] 5.3.1. Проверка контракта addWater 5.3.2. Проверка контракта connectTo 5.4. Резервуары, проверяющие свои инварианты [Invariants] 5.4.1. Проверка инвариантов в connectTo 5.4.2. Проверка инвариантов в addWater 5.5. А теперь совсем другое 5.5.1. Контракты 5.5.2. Эталонная реализация 5.5.3. Проверка контрактов 5.5.4. Проверка инвариантов 5.6. Реальные сценарии использования 5.7. Применим изученное Итоги Ответы на вопросы и упражнения Дополнительная литература Глава 6. Надежность за счет тестирования 6.1. Основные понятия тестирования 6.1.1. Покрытие в тестировании 6.1.2. Тестирование и контрактное проектирование 6.1.3. JUnit 6.2. Тестирование резервуаров [UnitTests] 6.2.1. Инициализация тестов 6.2.2. Тестирование addWater 6.2.3. Тестирование connectTo 6.2.4. Выполнение тестов 6.2.5. Оценка покрытия кода 6.3. Тестируемость [Testable] 6.3.1. Управляемость 6.3.2. Наблюдаемость 6.3.3. Isolation: разделение зависимостей 6.4. А теперь совсем другое 6.4.1. Повышение удобства тестирования 6.4.2. Набор тестов 6.5. Реальные сценарии использования 6.6. Применим изученное Итоги Ответы на вопросы и упражнения Дополнительная литература 7 Глава 7. Удобочитаемость 7.1. Разный взгляд на удобочитаемость 7.1.1. Корпоративные руководства по стилю программирования 7.1.2. Составляющие удобочитаемости 7.2. Структурные факторы удобочитаемости 7.2.1. Управляющие команды 7.2.2. Выражения и локальные переменные 7.3. Внешние факторы удобочитаемости 7.3.1. Комментарии 7.3.2. Выбор имен 7.3.3. Пропуски и отступы 7.4. Код [Readable] 7.4.1. Документирование заголовка класса комментариями Javadoc 7.4.2. Чистка метода connectTo 7.4.3. Чистка addWater 7.5. Напоследок об удобочитаемости 7.6. А теперь совсем другое 7.7. Реальные сценарии использования 7.8. Применим изученное Итоги Ответы на вопросы и упражнения Дополнительная литература Глава 8. Потокобезопасность 8.1. Проблемы потокобезопасности 8.1.1. Уровни конкурентности 8.1.2. Политика конкурентности для резервуаров 8.2. Взаимоблокировки 8.2.1. Атомарные последовательности блокировок 8.2.2. Упорядоченные последовательности блокировок 8.2.3. Скрытое состояние гонки 8.3. Потокобезопасные резервуары [ThreadSafe] 8.3.1. Синхронизация connectTo 8.3.2. Синхронизация addWater и getAmount 8.4. Неизменяемость 8.4.1. API 8.4.2. Реализация 8.5. А теперь совсем другое 8.6. Реальные сценарии использования 8.7. Применим изученное Итоги Ответы на вопросы и упражнения Дополнительная литература 9 Глава 9. Повторное использование 9.1. Определение границ 9.2. Общая структура 9.2.1. API атрибутов 9.2.2. Изменяемые коллекторы 9.2.3. Адаптация Attribute для функциональных интерфейсов 9.3. Обобщенная реализация резервуара 9.4. Общие соображения 9.5. Использование готового кода [Generic] 9.5.1. Обновленный сценарий использования 9.5.2. Проектирование конкретного атрибута 9.5.3. Определение класса для резервуара 9.6. Посты в соцсетях 9.7. А теперь совсем другое 9.7.1. Интерфейс для параметрических функций 9.7.2. Схема коммуникаций 9.8. Реальные сценарии использования 9.9. Применим изученное Итоги Ответы на вопросы и упражнения Дополнительная литература Приложения Приложение А. Программный гольф: компактность A.1. Самая короткая программа, которая у меня получилась [Golfing] Дополнительная литература Приложение Б. Финальная версия класса для резервуара с водой Б.1. Улучшения удобочитаемости Б.2. Улучшения надежности
Similar books
Методология научных исследований и прикладной аналитики: Учебник. Изд. 5-е, дополн. и перераб. В 2 т. Т.2: Научные исследования: Мастерство и искусство научного мышления и научной работы / Methodology of Scientific Research and Practical Analytics: A Textbook: Fifth Edition. In two volumes. Vol.2: Scientific research: Art of scientific thinking and scientific work / Méthodologie de la recherche scientifique et de l’analytique appliquée: Manuel: Cinquième édition. En 2 tomes. T.2: Recherches scientifiques: Art de la pensée scientifique et du travail scientifique
2025 · PDF
Методы и понятия философии искусства: практикум : уровень подготовки кадров высшей квалификации: ассиснтурв-стажировка : специальности: 54.09.03 "Искусство дизайна (по видам)", 54.09.02 "Мастерство декоративно-прикладного искусства и народных промыслов (по видам)" : укрупненная группа специальностей: 54.00.00 "Изобразительное и прикладные виды искусств" : квалификация выпускника: "Преподаватель творческих дисциплин в высшей школе. Дизайнер", "Преподаватель творческих дисциплин в высшей школе. Художник декоративно-прикладного искусства" : форма обучения: очная
2022 · PDF
Разработка графического интерфейса пользователя информационной системы с использованием библиотеки QT: учебное пособие для студентов 1 курса направлений подготовки 09.04.02 "Информационные системы и технологии", 27.04.03 "Системный анализ и управление" очной формы обучения, 2 курса направления подготовки 10.05.03 "Информационная безопасность автоматизированных систем" очной формы обучения и 3 курса направления подготовки 09.03.02 "Информационные системы и технологии" очной и заочной форм обучения : учебное электронное издание
2021 · PDF
Археологические культуры Сибири в контексте кросс-культурных контактов в Евразии: к 300-летию первых научных археологических раскопок в Сибири (1722 г.) =: Archaeological Cultures of Siberia in the context of Cross-cultural contacts in Eurasia: dedicated to the 300th anniversary of the first scientific archaeological excavations in Siberia (1722) : материалы Международной археологической конференции молодых исследователей "Археологические культуры Сибири в контексте кросс-культурных контактов в Евразии: к 300-летию первых научных археологических раскопок в Сибири (1722 г.)" (Новосибирск, 21-25 ноября 2022 г.)
2022 · PDF
Трешниковские чтения - 2023. Современная географическая картина мира и технологии географического образования =: Treshnikov readings - 2023. Modern geographical global picture and technology of geographic education : материалы Всероссийской научно-практической конференции с международным участием, посвящённой памяти знаменитого российского океанолога, исследователя Арктики и Антарктики, академика Алексея Фёдоровича Трёшникова и 60-летию Ульяновского областного отделения Всероссийской общественной организации "Русское гаографическое общество" (13 апреля 2023)
2023 · PDF
Управление объектами интеллектуальной собственности. Искусство изобретать: учебник для обучающихся по направлениям подготовки 23.00.00 , направлениям подготовки 23.03.01 "Технология транспортных процессов", уровень образования-"бакалавриат", 23.03.03 "Эксплуатация транспортно-технологических машин и комплексов", уровень образования-"бакалавриат", 23.04.01 "Технология транспортных процессов", уровень образования- "магистратура", 23.04.03 "Эксплуатация транспортно-технологических машин и комплексов", уровень образования- "магистратура"
2022 · PDF
Философия. Учебно-методический комплекс дисциплины по направлениям подготовки: 51.03.03 (071800.62) «Социально-культурная деятельность», профили подготовки: «Социально-культурные технологии в индустрии досуга», «Менеджмент социально-культурной деятельности», «Менеджмент детско-юношеского досуга», «Постановка и продюсирование культурно-досуговых программ», «Социально-культурная анимация и рекреация»; 38.03.02 (080200.62) «Менеджмент», профили подготовки: «Управление человеческими ресурсами», «Управление малым бизнесом», квалификации (степень) выпускника – «бакалавр»
2014 · PDF
Проектирование устройств приема и обработки сигналов: учебно-методическое пособие по курсу "Устройства приема и обработки сигналов" для студентов всех форм обучения специальностей: 210400.62 Радиотехника. Бакалавр Б.3.10. Основы цифровой обработки сигналов; 210700.62 Системы мобильной связи. Бакалавр Б.3.19. Радиоприемные устройства систем мобильной связи; 210601.65 Радиоэлектронные системы и комплексы. Специалист С.3.18. Устройства приема и обработки сигналов; 090302.65 Защита информации в системах связи и управления. Специалист С.3.30. Устройства приема и обработки сигналов
2015 · PDF