Design patterns
.pdfState. Реализация на Python
import itertools |
class Radio(object): |
|
class State(object): |
def __init__(self): |
|
self.amstate = AmState(self) |
||
def scan(self): |
self.fmstate = FmState(self) |
|
print("Scanning... Station is", next(self.stations), self.name) |
self.state = self.amstate |
|
class AmState(State): |
def toggle_amfm(self): |
|
def __init__(self, radio): |
self.state.toggle_amfm() |
|
self.radio = radio |
def scan(self): |
|
self.stations = itertools.cycle(["1250", "1380", "1510"]) |
||
self.name = "AM" |
self.state.scan() |
|
def toggle_amfm(self): |
|
|
print("Switching to FM") |
|
|
self.radio.state = self.radio.fmstate |
|
|
class FmState(State): |
|
|
def __init__(self, radio): |
|
|
self.radio = radio |
https://github.com/gennad/Design-Patterns-in-Python |
|
self.stations = itertools.cycle(["81.3", "89.1", "103.9"]) |
|
|
self.name = "FM" |
Тюльпин А.А, 2013 |
|
|
||
|
|
|
|
|
|
Антипаттерны
●Andrew Koenig, 1995
○Anti-pattern is just like pattern, except instead of solution it gives something that looks superficially like a solution, but isn’t one
●Brown et al,1998
○AntiPatterns are Negative Solutions that presents more problems than they address
○AntiPatterns are natural extension to design patterns
○AntiPatterns bridge the gap between architectural concept and realworld implementations
○Understanding AntiPatterns provides the knowledge to prevent or recover from them
●Согласно Brown et al,1998 есть три категории антипаттернов:
○Development AntiPatterns
○Architecture AntiPatterns
○Management AntiPatterns.
Bulajic A. Design Patterns Past and Future, 2011
Антипаттерны разработки ПО
●Copy and Paste Programming
○Когда от программиста требуется написание двух схожих функций, самым «простым» решением является написание одной функции, её копирование и внесение некоторых изменений в копию.
●Spaghetti code
○Спагетти-код — слабо структурированная и плохо спроектированная система, запутанная и очень сложная для понимания. В ООП спагетти-код может быть представлен в виде небольшого количества объектов с огромными, по размеру кода,
методами. |
http://habrahabr.ru/post/59005/ |
|
Антипаттерны разработки ПО
●Golden hammer
○Уверенность в полной универсальности любого решения. На практике, это — применение одного решения (чаще всего какого-либо одного паттерна проектирования) для всех возможных и невозможных задач.
●Magic numbers
○Магическое число — константа, использованная в коде для чего либо (чаще всего — идентификации данных), само число не несёт никакого смысла без соответствующего комментария.
●Hard code
○Жёсткое кодирование — внедрение различных данных об окружении в реализацию. Например — различные пути к файлам, имена процессов, устройств и так далее.
http://habrahabr.ru/post/59005/
Антипаттерны разработки ПО
●Soft code
○Мягкое кодирование — параноидальная боязнь жёсткого кодирования.
●Accidental complexity
○Простыми словами — это заумность решения
●God Object
○Божественный объект — анти-паттерн, который довольно часто встречается у ООП разработчиков. Такой объект берет на себя слишком много функций и/или хранит в себе практически все данные.
http://habrahabr.ru/post/59005/
Антипаттерны разработки ПО
●Programming by permutation
○Многие начинающие программисты пытаются решать некоторые задачи методом перебора — не брутфорсом решения, а именно подбором параметров, порядка вызова функций и так далее.
●Blind faith
○Недостаточная проверка корректности входных данных, исправления ошибки или результатов работы кода.
●Reinventing the square wheel
○Изобретение квадратного колеса
http://habrahabr.ru/post/59005/
Архитектурные антипаттерны
●Singleton Overuse
○Переизбыток в использовании шаблонов-одиночек
●Functional Decomposition
○Избыточная декомпозиция
○Пример - класс с одним методом
●Poltergeist
○Объекты, чьё единственное предназначение — передавать информацию другим объектам
http://ru.wikipedia.org/wiki/Антипаттерн
http://en.wikibooks. org/wiki/Introduction_to_Software_Engineeri ng/Architecture/Anti-Patterns
Архитектурные антипаттерны
●Blob
○Класс со множеством атрибутов и методов.
●God object
○Объект, который умеет делать “все”
●Abstraction inversion
○Сокрытие части функциональности от внешнего использования, в надежде на то, что никто не будет его использовать
http://ru.wikipedia.org/wiki/Антипаттерн
http://en.wikibooks. org/wiki/Introduction_to_Software_Engineeri ng/Architecture/Anti-Patterns
Архитектурные антипаттерны
●Constant interface
○Объявление константы в интерфейсе
●Sequential coupling
○Методы класса должны вызываться в определенном порядке
●Database-as-IPC
○Использование базы данных для межпроцессного взаимодействия
http://ru.wikipedia.org/wiki/Антипаттерн
http://en.wikibooks. org/wiki/Introduction_to_Software_Engineeri ng/Architecture/Anti-Patterns
References
1.http://ru.wikipedia.org/wiki/Шаблон_проектирования
2.Hsueh N. L., Kuo J. Y., Lin C. C. Object-oriented design: A goal-driven and pattern-based approach // Software & Systems Modeling. – 2009. – Т. 8. – №. 1. – С. 67-84.
3.Borchers J. O. A pattern approach to interaction design // AI & SOCIETY. – 2001. – Т. 15. – №. 4. – С. 359-376
4.Johnson R., Helm R., Vlissides J. Design Patterns: Elements of Reusable Object-Oriented Software. – Addison-Wesley Professional, 1995.
5.Booch G. The Unified Modeling Language User Guide, 2/E. – Pearson Education India, 2005.
6.http://habrahabr.ru/post/65625/
7.http://stackoverflow.com/questions/6760685/creating-a-singleton-in-python
8.https://github.com/gennad/Design-Patterns-in-Python
9.Bulajic A. Design Patterns Past and Future, 2011
10.http://habrahabr.ru/post/59005/
11.http://en.wikibooks.org/wiki/Introduction_to_Software_Engineering/Architecture/Anti-Patterns
12.https://sites.google.com/site/metamodelingantipatterns/catalog/uml
13.http://ru.wikipedia.org/wiki/Антипаттерн