Содержание
- 2. Анализ и проектирование Анализ – это исследование задачи и требований к её реализации. Ключевой момент, это
- 3. Объектная декомпозиция Основная задача проектирования при объектной декомпозиции – это выполнение двух условий. Условия декомпозиции: Высокое
- 4. Два главных принципа ООП «Минимизация связей между классами» не означает «отказ от связей вообще» - в
- 5. Low coupling, high cohesion!
- 6. Понятие архитектуры Архитектура – это понимание того, как система разделена на компоненты, и как эти компоненты
- 7. Гибкость системы Чем меньше в нашей системе необратимого, тем лучше. Парадоксально, но получается, что чем меньше
- 8. Качество архитектуры Как определить качество архитектурного решения? Нужно задать себе вопрос: «А что, если я ошибся,
- 9. Рекомендации к архитектуре Подумать, что придется реализовать жёстко и явно, а что можно реализовать динамически Всё,
- 10. Итого Анализ – это исследование Проектирование – это концептуальное решение Архитектура – это понимание разделения системы
- 11. Абстрагирование Абстрагирование – это выделение существенных характеристик объекта и отбрасывание несущественных. Абстракция – это обобщение. А
- 12. Абстр.классы и интерфейсы Абстрактный класс – это заготовка для будущих классов. Мы делегируем реализацию тех методов,
- 13. Пример абстрактного класса https://bit.ly/3K9fWeE https://gist.github.com/sunmeat/777658c60dbebc4cffd716050ff84f94
- 14. Пример интерфейса https://bit.ly/3nonZdO https://gist.github.com/sunmeat/4752da83f5198bd762158ef538c19a55
- 15. Реализация 2 интерфейсов
- 16. ООП в 3 строчках :)
- 17. Разница между Интерф. и АК С одной стороны, ничего общего: один – набор требований, чистая абстракция,
- 18. Итого Абстрактный класс – это заготовка Интерфейс – это контракт Интерфейсы дают нам максимальную возможность абстрагироваться
- 19. Принципы S.O.L.I.D. Что такое S.O.L.I.D? Это принципы проектирования классов Всего их 5 штук Основные идеи 1.
- 20. SRP Single Responsibility Principle (SRP) – принцип единственной обязанности, принцип разделения обязанностей (на каждый класс должна
- 21. SRP: bad example https://bit.ly/3K7al8x https://gist.github.com/sunmeat/3caae0b8fa625ded1d8d92f3bc9ceb9e
- 22. SRP: good example https://bit.ly/3Fq5Rq6 https://gist.github.com/sunmeat/599c1e9e6d55302af4aaf4b2b493f308
- 23. SRP На предыдущем слайде показан простой пример и тут очевидно, сколько и какие обязанности были у
- 24. SRP В примере выше, если вдруг изменится способ вывода заказа на печать, то достаточно будет поправить
- 25. OCP Open/Closed Principle (OCP) – принцип открытости/закрытости (программные сущности должны быть открыты для расширения, но закрыты
- 26. OCP: bad example https://bit.ly/3Ftsr19 https://gist.github.com/sunmeat/93b6d02fcfe13953f47c9af3598a574b
- 27. OCP: good example https://bit.ly/33yxtw7 https://gist.github.com/sunmeat/2478549dbb21550ef4e35671bc5c6b9f
- 28. OCP Суть принципа ОСР в том, что единожды созданные классы не следует изменять под конкретные нужды
- 29. LSP Liskov Substitution Principle (LSP) – принцип замещения (функции, которые используют указатели на базовые классы, должны
- 30. LSP: bad example https://bit.ly/3rguJLS https://gist.github.com/sunmeat/07b01f99bba5b2150a3fc7f53967d6be
- 31. LSP: good example Достаточно перенести вызов метода LoadExcelLibrary() в тело метода GenerateReport() класса ExcelReporter.
- 32. LSP То есть, нужно корректно реализовывать публичный контракт интерфейса не только физически (переопределяя абстрактные методы), но
- 33. ISP Interface Segregation Principle (ISP) – принцип разделения интерфейса – клиент, реализующий интерфейс, не должен вынуждено
- 34. ISP: bad example https://bit.ly/3rp6pYu https://gist.github.com/sunmeat/bc829ddad45261695fcb9a1c189921cb
- 35. ISP: good example https://bit.ly/3qqm9Le https://gist.github.com/sunmeat/6eacb206150ced7ea786cbf7ba792c67
- 36. ISP Мы обязываем класс интерфейс реализовывать, а он не нужен весь. Если ваш интерфейс охватывает больше
- 37. DIP Dependency Inversion Principle (DIP) – принцип инверсии зависимостей, который говорит, что: Модули верхних уровней не
- 38. DIP Инверсия зависимостей предлагает избавиться от жёстко прописанных зависимостей между классами, инвертировав их в зависимости от
- 39. DIP Паттерны реализации принципа инверсии зависимости, в данном случае паттерны проектирования: Factory Method Service Locator Dependency
- 40. DIP: bad example https://bit.ly/3qrzxir https://gist.github.com/sunmeat/0a799f98b3bba0aa5eb99bff681c142b
- 41. DIP: good example https://bit.ly/34Sb6Cr https://gist.github.com/sunmeat/6d1223ca4efca9719a875c89e65b2103
- 42. DIP Анти-паттерн здесь – это Anti-DIP: Принцип инверсии сознания или DI головного мозга. Это ситуация, когда
- 43. Пример
- 44. Проблема Здесь класс Http представляет собой высокоуровневый компонент, а XMLHttpService — низкоуровневый. Такая архитектура нарушает пункт
- 45. Решение Создадим абстракцию для низкоуровнего модуля XMLHttpService и теперь модуль Http будет зависить от неё.
- 46. Решение Теперь, вне зависимости от того, что именно используется для организации взаимодействия с сетью, класс Http
- 47. Решение
- 48. Решение Как можно заметить, здесь высокоуровневые и низкоуровневые модули зависят от абстракций. Класс Http (высокоуровневый модуль)
- 49. Краткое описание принципов 1. Single Responsibility Principle – делай модули меньше. 2. Open/Closed Principle – делай
- 50. Что каждый принцип делает 1-й принцип (SRP) – реализация концепции «high cohesion», 4-й сюда же. 2-й
- 51. Общие итоги Архитектура – это то, что потом СЛОЖНО изменить Программируйте интерфейсами, а не реализациями. Абстракция
- 53. Скачать презентацию