JavaRush /Java блог /Random UA /Огляд книги "Паттерни проєктування" (Head First Design Pa...
Alex
37 рівень

Огляд книги "Паттерни проєктування" (Head First Design Patterns)

Стаття з групи Random UA
Серед людей, які хоча б мінімально знайомі із серією Head First, є чимало тих, хто вважає подібну літературу досить поверховим чтивом для новачків. Що сказати, глибоко вивчити складну тему в галузі програмування за 48 годин навряд чи вийде. Однак складно посперечатися, що книга "Паттерни проєктування" — книга, яка буде корисним посібником з програмування для початківців. Ця книга входить до десятки найпопулярніших на Stackoverflow, і небезпідставно. Легкість подачі, фундаментальна тема та якісні приклади роблять книгу затребуваною і зараз і, як на мене, ще протягом багатьох років. Огляд книги "Паттерни проєктування" (Head First Design Patterns) - 1

Особливості книги

Head first design patterns розповідає нам, що таке патерни, як ними користуватися та як ними думати. Паттерн — це шаблон, універсальне рішення для певного набору завдань. Паттерни проєктування — це, у свою чергу, архітектурні рішення, що часто використовуються, за допомогою яких можна писати зручні і гнучкі додатки. Розробники у всьому світі вирішують однакові завдання з однаковими підходами. Як говориться в інструкції, якщо ви не бажаєте винаходити велосипед, використовуйте готові шаблони (патерни) проєктування, роботі з якими присвячена ця книга. Окремо варто відзначити подачу матеріалу: книги серії Head First славляться простотою і читаються на одному диханні. "Паттерни проєктування" — не виняток. У ній також дотримано ключових принципів:
  1. Наочність
  2. Розмовний стиль викладу
  3. Велика кількість ілюстрацій
  4. Активна участь читача
  5. Звернення до емоцій
  6. Привернення уваги читача
Автори книги грамотно використовують теорію метапізнання для викладу матеріалу: мені перші 100 сторінок пролетіли непомітно. Вся краса підходу в тому, що мозок справді запам'ятовує прочитане. Поєднання кількох стилів оповіді, цікаві питання, надмірність та креатив — усе це допомагає читачеві не втратити інтерес до головної теми. Перед покупкою книги я сумнівався, що читав неоднозначні рецензії. Однак побіжно погортавши кілька інших джерел з цієї теми, прийняв рішення: щоб поринути в патерни, ця книга — те, що потрібно.

Основна тема та ключова думка

"Напевно, ваше завдання хтось вже вирішував" — так починається перший розділ книги, передаючи весь сенс патернів проєктування в програмуванні. Основна мета — правильно донести читачеві їхній зміст, адже насамперед програміст повинен знати, для чого потрібні патерни і в якийсь момент їх необхідно застосувати. По суті, спочатку шаблони потрібно розкласти по поличках у себе в голові, і лише після цього впроваджувати їх у програми. Якщо новачок у програмуванні розуміється на патернах “на трієчку”, їх використання може сильно ускладнити код (а має спрощувати!). На питання "Чому слід застосовувати патерни проєктування?"книга дає однозначну відповідь: “Знання таких концепцій, як абстракція, наслідування та поліморфізм, ще не робить із вас хорошого проєктувальника. Паттерни містять перевірений досвід проєктування.”

"Короткий виклад"

Книга поділена на 14 розділів плюс вступ. Спочатку автори книги намагаються підготувати читача, налаштувати його мозок на правильне сприйняття інформації про дизайн патернів. Перший розділ пояснює основний принцип патернів, а також те, для яких цілей вони служать. Легко і ненав'язливо розглядається один із найбільш застосовуваних патернів — стратегія. Розділи з другої по одинадцяту присвячені докладному розбору окремих патернів:
  1. Спостерігач. Розповсюджує по об'єктах події, які зацікавлені у їхньому настанні.
  2. Декоратор. Інший погляд на успадкування Java і наділення класів Java новими можливостями без модифікації коду.
  3. Фабрика. Паттерн рятує код від небажаних залежностей.
  4. Одинак. Також відомий як Singleton дозволяє створювати єдиний на всю програму об'єкт класу.
  5. Команда. Паттерн дає змогу зручно інкапсулювати виклик методу, розширюючи можливості.
  6. Адаптер та Фасад. Вирішення проблеми несумісності інтерфейсів, а також упаковка об'єктів для спрощення їхнього інтерфейсу.
  7. Шаблонний метод. Інкапсулювання алгоритмічних блоків, що дозволяє субкласам будь-якої миті зв'язуватися з потрібним алгоритмом обробки.
  8. Ітератор та Компонувальник. Паттерн надає зручний інструмент для перебору колекцій незалежно від їх типу. Додатково у розділі дається порція інформації про суперколекції.
  9. Стан. Об'єкти наділяються здатністю керувати своєю поведінкою через зміну внутрішнього стану.
  10. Заступник Дуже зручний патерн для керування доступом до об'єкта.
У розділі 12 розглядаються складові патерни, а точніше комбінації деяких розглянутих патернів, за допомогою яких можна будувати потужні архітектури програм. Глава 13 присвячена застосуванню патернів у реальних завданнях, представлена ​​класифікація патернів, їх різновиди та посібник із використання. Як додаток у книзі служить розділ 14, у якій розглядається ширший спектр патернів. Кожен із них по-своєму корисний, тому знати їх більш ніж бажано. Зрозуміло, вони не такі популярні, як патерни з розділів 2-11, але це не робить їх менш корисними. Книга не претендує на академічно точний виклад теорії патернів. Але якщо книги серії Head First будуть такими прискіпливими, у розробників-початківців не буде шансів розібратися, що до чого і прояснити для себе основи основ. Це простий і зручний спосіб дізнатися, що таке шаблони проєктування для тих, хто з ними не знайомий. За твердженням авторів, "Паттерни проєктування" — книга, яка підійде тим, хто вже знайомий з Java (або C #), бажає вивчити принципи об'єктно-орієнтованого проєктування і віддає перевагу жвавій бесіді нудним лекціям. Ця книга —не довідник! Якщо ви професійний розробник зі стажем і працюєте хоча б з частиною цих патернів, навряд чи книга буде вам цікава. Важливою складовою книги є вправи: їх не варто пропускати. При уважному прочитанні книги і, у крайньому випадку, мінімальному пошуку в інтернеті, їхнє рішення не додасть вам головного болю. А ось користь точно буде. Принаймні глибше розберетеся в теорії, що викладається у книзі.

Переваги й недоліки

Я, як і багато хто з тих, хто навчається на JavaRush, холодно ставлюся до нудних лекцій, зубріння матеріалу та іншого насильства над психікою учня, який прагне знань. Час, витрачений на заучування незрозумілих текстів, як на мене, найкраще спрямувати на пошук альтернативних джерел навчання. Ця книга — одна з тих, на яку варто витратити свій час та зусилля. Відмінний стиль викладу, грамотне керування увагою читача, повторюваність ключових моментів формують головну перевагу цієї книги – легкість засвоєння матеріалу. Велика кількість ілюстрацій – додатковий плюс. На мій погляд, у книзі кожна картинка на своєму місці: всі вони дозволяють проілюструвати слова авторів та глибше зрозуміти суть матеріалу. Як я вже писав вище, ця книга — не довідник: її автори не мають на меті перерахувати всі патерни. Її головне завдання — дати розуміння та розповісти про основні шаблони, щоб інші, складніші, сприймалися легше. І з цим вона справляється на всі 100%. Серед недоліків можна виділити те, що Head first design patterns у перекладі читається не так гладко, як англійською. Звичайно ж, кожен розробник повинен володіти англійською, але у програмістів-початківців ця навичка не завжди прокачана до такого ступеня, щоб читати книги в оригіналі. Тим не менш, це можна вважати натягнутим мінусом, тому що матеріал подається досить точно і зміст зберігається.

Додаткові книги про патерни проєктування

Я прихильник думки, що фундаментальні теми краще вивчати з кількох джерел і шукати в них відповідний стиль подачі. Коли захочете поринути в патерни і почитати додаткову теорію, повірте, вам буде чим зайняти свої вечори.
  1. Design patterns: elements of reusable object-oriented software (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides).
    Це серйозніше видання, довідник патернів, дуже шанована книга від "Банди чотирьох". Багато хто називає її біблією проєктування. У мережі думки розробників діляться на 3 табори:
    • одні стверджують, що книга застаріла, і через стиль викладу читати її неможливо
    • інші рекомендують використовувати книгу виключно як довідник з патернів, не більше
    • треті кажуть, що книга — святий грааль патернів проєктування, і її має прочитати кожен, хто хоче якось стати Senior Java Developer
    Я прихильник другої групи: вважаю, що книга справді гідна, але читати її для розвитку, а не з метою пошуку будь-якої інформації, дуже складно.
    Важливо:приклади у книзі написані на С++.
  2. Professional Java EE Design Patterns (Murat Yener, Alex Theedom).
    Ця книга присвячена проєктуванню Enterprise-додатків: у ній розглядається безліч прикладів реальних прикладних завдань.
  3. Java Enterprise Design Patterns: Patterns in Java (Mark Grand).
    У книзі яскраво демонструється, як застосування шаблонів заощаджує час розробників, наведено огляд мови UML та описано 47 шаблонів проєктування

Паттерни проєктування на JavaRush

У курсі JavaRush патерни проєктування вивчаються лише на рівні 7 квесту Java Collections. Лекції 1 і 2 присвячені найпоширенішим шаблонам, а лекції 4 можна вирішити завдання з цієї теми.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ