Перейти к содержимому
шпаргалка.
Esc
навигацияоткрыть⌘Jпредпросмотр
На этой странице

Принципы и паттерны программирования

Все темы QA

Что такое SOLID? Приведите примеры.

SOLID — это акроним, обозначающий пять основных принципов объектно-ориентированного программирования и дизайна, сформулированных Робертом Мартином (Uncle Bob).

Описание каждого принципа с примерами:

  1. Принцип единственной ответственности (Single Responsibility Principle, SRP):

    • Каждый класс должен иметь одну и только одну причину для изменений.

    • Пример: Класс Customer должен отвечать только за данные и операции, связанные с клиентом, но не за логирование или базу данных.

  2. Принцип открытости/закрытости (Open/Closed Principle, OCP):

    • Программные сущности (классы, модули, функции) должны быть открыты для расширения, но закрыты для модификации.

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

  3. Принцип подстановки Барбары Лисков (Liskov Substitution Principle, LSP):

    • Объекты в программе должны быть заменяемыми на экземпляры их подтипов без изменения корректности программы.

    • Пример: Если для работы требуется класс Shape, то любой его подтип (например, Circle, Rectangle) должен работать корректно без изменений в коде, который использует Shape.

  4. Принцип разделения интерфейса (Interface Segregation Principle, ISP):

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

    • Пример: Имеется интерфейс Document, который предоставляет методы для чтения и записи документов. Классы, не имеющие необходимости в записи, не должны реализовывать методы записи.

  5. Принцип инверсии зависимостей (Dependency Inversion Principle, DIP):

    • Зависимости внутри системы должны строиться на абстракциях. Модули верхнего уровня не должны зависеть от модулей нижнего уровня, а оба типа модулей должны зависеть от абстракций.

    • Пример: Использование интерфейсов для взаимодействия между компонентами приложения, что позволяет легко заменять реализации интерфейсов без изменения клиентского кода.

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


Что такое DRY, KISS, YAGNI?

Описание каждого из этих принципов:

  1. DRY (Don’t Repeat Yourself):

    • Принцип программирования, направленный на избегание повторения кода.

    • Основная идея заключается в том, чтобы каждая часть знаний (например, функции, классы, модули) должна иметь одну и только одну представляющую себя версию во всей системе.

    • Пример: Использование функций или классов для избегания дублирования одинаковых блоков кода.

  2. KISS (Keep It Simple, Stupid):

    • Принцип, согласно которому системы должны быть созданы настолько просто, насколько это возможно, без излишних сложностей.

    • Основная идея: простота решений обеспечивает их легкость в понимании, разработке и поддержке.

    • Пример: Предпочтение простым и понятным алгоритмам и структурам данных перед сложными и трудно поддерживаемыми.

  3. YAGNI (You Aren’t Gonna Need It):

    • Принцип, утверждающий, что не следует включать функциональность в программное обеспечение до тех пор, пока она не станет абсолютно необходимой.

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

    • Пример: Отказ от добавления функций “на всякий случай” или “для будущего использования”, если нет явных и текущих потребностей.

Эти принципы помогают разработчикам создавать более эффективное, легко поддерживаемое и понятное программное обеспечение, сосредотачиваясь на его простоте, минимизации повторений и избегании излишней функциональности.


Какие паттерны GOF вам известны? Приведите примеры их использования.

Паттерны проектирования GOF (Gang of Four) — это основные шаблоны проектирования, описанные в книге “Design Patterns: Elements of Reusable Object-Oriented Software”. Вот некоторые из них с примерами использования:

  1. Фабричный метод (Factory Method):

    • Определяет интерфейс для создания объекта, но оставляет подклассам решение, какой класс инстанциировать.

    • Пример: базовый Dialog объявляет метод createButton(), а WindowsDialog и WebDialog переопределяют его, создавая разные реализации Button. Calendar.getInstance() является статическим фабричным методом и не демонстрирует этот механизм переопределения.

  2. Абстрактная фабрика (Abstract Factory):

    • Предоставляет интерфейс для создания семейств взаимосвязанных или зависимых объектов без указания их конкретных классов.

    • Пример: Создание GUI компонентов (кнопок, текстовых полей) в зависимости от операционной системы (Windows или macOS) с использованием различных фабрик.

  3. Одиночка (Singleton):

    • Гарантирует, что класс имеет только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру.

    • Пример: один экземпляр конфигурации приложения с контролируемой точкой доступа. Нужно учитывать потоки, тестирование и жизненный цикл; глобальный доступ не всегда удачен.

  4. Строитель (Builder):

    • Разделяет процесс создания сложного объекта на несколько шагов, позволяя конструировать объект пошагово.

    • Пример: Построение объекта StringBuilder в Java для динамической конкатенации строк с использованием методов append().

  5. Декоратор (Decorator):

    • Динамически добавляет объектам новые обязанности, оборачивая их в объекты-декораторы.

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

Эти паттерны являются основой для создания гибких, расширяемых и поддерживаемых объектно-ориентированных систем, обеспечивая повторное использование кода и упрощение разработки сложных приложений.

Эта страница была полезной?