Содержание
- 2. Что такое SOLID SOLID - это аббревиатура пяти основных принципов дизайна классов в объектно-ориентированном проектировании. Аббревиатура
- 3. Основные принципы Single responsibility - Принцип единственной обязанности Open-closed - Принцип открытости/закрытости Liskov substitution - Принцип
- 4. Single responsibility Принцип единственной обязанности Класс или модуль должны иметь одну и только одну причину измениться.
- 5. Пример нарушения принципа SRP class Order { public void calculate(){ ... } public void addItem(Product product){
- 6. Как исправить class Order { public void calculate(); public void addItem(Product product){ ... } public List
- 7. Но... Существует, например, паттерн Active Record, который нарушает принцип SRP Active Record может быть успешно использован
- 8. Open-closed Принцип открытости/закрытости Объекты проектирования (классы, функции, модули и т.д.) должны быть открыты для расширения, но
- 9. Пример нарушения OCP class MessageSender { … public void send(String message, MessageType type){ if(type == MessageType.SMS)
- 10. Как исправить Воспользуемся паттерном “Стратегия” interface SendingStrategy { void send(String message); } class MessageSender { private
- 11. Как исправить(продолжение) Конкретные стратегии отправки class EmailSendingStrategy implements SendingStrategy { @Override public void send(String message) {
- 12. Liskov substitution Принцип подстановки Барбары Лисков Роберт С. Мартин определил этот принцип так: Функции, которые используют
- 13. Замещение T S Объекты типа T могут быть замещены объектами типа S без каких-либо изменений желательных
- 14. Нарушение принципа LSP Circle-ellipse problem Square-rectangle problem
- 15. Square-rectangle problem Является ли класс Квадрат подклассом класса Прямоугольник? Rectangle Square ?
- 16. Класс Rectangle class Rectangle { private double width; private double height; public double getWidth() { return
- 17. Класс Square class Square extends Rectangle { public void setWidth(double width) { this.setSide(width); } public void
- 18. В чем же проблема? public class LiskovViolation { public static void main(String[] args) { Rectangle rectangle
- 19. Как исправить Если использовать концепцию неизменяемого объекта (immutable object), то принцип не будет нарушаться. Необходимо убрать
- 20. Interface segregation Принцип разделения интерфейса Слишком «толстые» интерфейсы необходимо разделять на более маленькие и специфические, чтобы
- 21. “Толстый” интерфейс Если среди методов интерфейса можно выделить группы методов, которые нужны определенным пользователям интерфейса, то
- 22. Пример нарушения ISP interface Person { void goToWork(); void withdrawSalary(); void eat(); } Если мы захотим
- 23. Как исправить public interface Person { void eat(); } public interface Worker { void goToWork(); void
- 24. Dependency inversion Принцип инверсии зависимостей Все взаимосвязи в программе должны поддерживаться с помощью абстракных классом или
- 25. Нарушение принципа DIP public class Crawler { public void saveHtmlDocument() { DomBasedHtmlParser parser = new DomBasedHtmlParser();
- 26. Как исправить. Вариант 1 public class Crawler { private HtmlParser parser; public Crawler(HtmlParser parser) { this.parser
- 28. Скачать презентацию