Порождающие паттерны
Это паттерны, которые создают объекты, или позволяют получить доступ к существующим. Порождающие паттерны — это паттерны, которые абстрагируют процесс порождения классов и объектов. Среди них выделяются следующие:
Абстрактная фабрика (Abstract Factory)
Строитель (Builder)
Фабричный метод (Factory Method)
Прототип (Prototype)
Одиночка (Singleton)
Структурные паттерны
Другая группа паттернов — структурные паттерны — рассматривает, как классы и объекты образуют более крупные структуры — более сложные по характеру классы и объекты. К таким шаблонам относятся:
Адаптер (Adapter)
Мост (Bridge)
Компоновщик (Composite)
Декоратор (Decorator)
Фасад (Facade)
Приспособленец (Flyweight)
Заместитель (Proxy)
Поведенческие паттерны
Третья группа паттернов называются поведенческими — они определяют алгоритмы и взаимодействие между классами и объектами, то есть их поведение. Среди подобных шаблонов можно выделить следующие:
Цепочка обязанностей (Chain of responsibility)
Команда (Command)
Интерпретатор (Interpreter)
Итератор (Iterator)
Посредник (Mediator)
Хранитель (Memento)
Наблюдатель (Observer
Состояние (State)
Стратегия (Strategy)
Шаблонный метод (Template method)
Посетитель (Visitor)
Выбор паттерна
Прежде всего при решении какой-нибудь проблемы надо выделить все используемые сущности и связи между ними и абстрагировать их от конкретной ситуации. Затем надо посмотреть, вписывается ли абстрактная форма решения задачи в определенный паттерн. Причем лучше не сразу взять какой-то определенный паттерн — первый, который показался нужным, а посмотреть на несколько родственных паттернов из одной группы, которые решают одну и ту же задачу.
При этом важно понимать смысл и назначение паттерна, явно представлять его абстрактную организацию и его возможные конкретные реализации. Один паттерн может иметь различные реализации, и чем чаще вы будете сталкиваться с этими реализациями, тем лучше вы будете понимать смысл паттерна. Но не стоит использовать паттерн, если вы его не понимаете, даже если он на первый взгляд поможет вам в решении задачи.
И в конечном счете надо придерживаться принципа KISS (Keep It Simple, Stupid) — сохранять код программы по возможности простым и ясным. Ведь смысл паттернов не в усложнении кода программы, а наоборот в его упрощении.
Параллелизм. Закон Амдала. Классификация параллельных вычислительных систем. Распараллеливание алгоритмов.
Эффективный способ повышения производительности компьютера специалисты видят в использовании параллелизма. Однако на практике основные усилия разработчиков сосредоточены на создании все более быстродействующих однопроцессорных машин. Сейчас, когда дальнейшее совершенствование процессоров последовательного действия связано с серьезными технологическими трудностями, параллелизм, возможно, остается единственным способом повышения эффективности вычислений. К сожалению, на этом пути возникают новые проблемы — касающиеся организации вычислительной системы.
Уровни параллелизма
Методы и средства реализации параллелизма зависят от того, на каком уровне он должен обеспечиваться. Обычно различают следующие уровни параллелизма:
|