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

Design patterns

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

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/Антипаттерн

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