Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Design patterns

.pdf
Скачиваний:
18
Добавлен:
13.02.2015
Размер:
292 Кб
Скачать
☆

State. Реализация на 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/Антипаттерн

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]