- •1. Назначение языка
- •2. Способы использования языка
- •3. Нотация языка uml
- •Виды диаграмм uml
- •5. Диаграмма прецедентов (use case diagram)
- •6. Диаграмма классов (class diagram)
- •7. Диаграмма объектов (object diagram)
- •8. Диаграмма последовательностей (sequence diagram)
- •9. Диаграмма взаимодействия (кооперации, collaboration diagram)
- •10. Диаграмма состояний (statechart diagram)
- •11. Диаграмма активности (деятельности, activity diagram)
- •12. Диаграмма развертывания (deployment diagram)
- •13. Ооп и последовательность построения диаграмм
- •14. Отображение класса и его элементов на диаграмме uml
- •15. Способы использования объектов класса
- •16. Моделирование наследования в uml
- •17. Отношения между классами
- •18. Отношение зависимости между классами
- •19. Отношение ассоциации между классами
- •20. Композиция и агрегация классов
- •21. Сравнение диаграмм активностей и блок-схем
- •22. Моделирование процессов диаграммами активности
- •23. Моделирование операций диаграммами активности
- •24. Правила построения диаграммам активности
- •Составление перечня деятельностей в системе
- •Принятие решения о необходимости построения диаграммы деятельностей
- •25. Диаграмма кооперации
- •26. Диаграмма последовательностей как диаграмма взаимодействия
- •27. Диаграмма кооперации как альтернатива диаграмм последовательностей
- •28. Диаграмма кооперации как диаграмма взаимодействий объектов
- •29. Типы сообщений: синхронные, асинхронные и ответные, потерянные и найденные.
- •30. Уровни экземпляров и спецификации в диаграммах кооперации
- •31. Мультиобъекты, композитные и активные объекты в диаграммах кооперации.
- •32. Диаграммы взаимодействия с разветвленным потоком управления
- •33. Нефункциональные требования и их отображение на диаграммах прецедентов
- •34. Понятие эктора и отношения между экторами
- •35. Отношения включения и расширения между экторами
- •36. Причины использования прецедентов.
- •37. Прецеденты в прямом и обратном проектировании
- •38. Обзор case-средств для построения диаграмм uml
- •Visio поддерживает множество локальных языков
- •39. Критерии выделения прецедентов
- •40. Понятие шаблона проектирования
- •41. Основные шаблоны grasp
- •Information Expert (Информационный эксперт)
- •Indirection (Посредник)
- •42. Описание шаблонов проектирования GoF
- •43. Классификация шаблонов проектирования GoF
- •44. Структурные шаблоны проектирования
- •56. Понятие рефакторинга программ
- •57. Анти-шаблоны управления разработкой программ
- •Раздувание по (Software bloat): Разрешение последующим версиям системы требовать всё больше и больше ресурсов
- •58. Анти-шаблоны разработки программ
- •59. Анти-шаблоны в объектно-ориентированном программировании
- •60. Анти-шаблоны в программировании
- •61. Методологические анти-шаблоны
- •62. Анти-шаблоны управления конфигурацией
- •63. Примеры организационных анти-шаблонов
- •64. Социальные анти-шаблоны
- •Шаблоны параллельного программирования (Concurrency)
- •Другие типы шаблонов
- •66. Шаблон делегирования
- •Простой пример
- •67. Шаблон функционального дизайна
- •68. Неизменяемый объект (шаблон проектирования)
- •69. Интерфейс (шаблон проектирования)
- •70. Порождающие шаблоны проектирования
- •71. Абстрактная фабрика (шаблон проектирования)
- •72. Строитель (шаблон проектирования)
- •73. Фабричный метод (шаблон проектирования)
- •74. Отложенная инициализация (шаблон проектирования)
- •75. Объектный пул (шаблон проектирования)
- •76. Прототип (шаблон проектирования)
- •77. Получение ресурса есть инициализация (шаблон проектирования)
- •78. Одиночка (шаблон проектирования)
- •79. Структурные шаблоны
- •80. Адаптер (шаблон проектирования)
- •81. Мост (шаблон проектирования)
- •82. Компоновщик (шаблон проектирования)
- •83. Декоратор (шаблон проектирования)
- •84. Фасад (шаблон проектирования)
- •85. Приспособленец (шаблон проектирования)
- •86. Заместитель (шаблон проектирования)
- •87. Поведенческие шаблоны
- •88. Цепочка ответственности (шаблон проектирования)
- •89. Команда (шаблон проектирования)
- •90. Интерпретатор (шаблон проектирования)
- •91. Итератор (шаблон проектирования)
- •92. Посредник (шаблон проектирования)
- •93. Хранитель (шаблон проектирования)
- •94. Наблюдатель (шаблон проектирования)
- •95. Состояние (шаблон проектирования)
- •96. Стратегия (шаблон проектирования)
- •97. Шаблоны параллельного программирования Шаблоны параллельного программирования (Concurrency)
- •Пример реализации Пример c#
- •Следствия
- •98. Модель-представление-контроллер (шаблон проектирования)
- •99. Технология использования шаблонов проектирования
58. Анти-шаблоны разработки программ
Анти-паттерны в разработке ПО
Инверсия абстракции (Abstraction inversion): Создание простых конструкций поверх сложных (спорный)
Инве́рсия абстра́кции (abstraction inversion) — ошибка проектирования программного модуля, когда в сложном модуле для пользователя закрыты простые, но нужные функции. В результате пользователю приходится писать простую функциональность, надстраивая её над сложной, иногда с использованием недокументированных возможностей и побочных эффектов, в то время когда она уже написана.
Последствия
Уменьшается скорость программы, увеличиваются расходы памяти.
Пользователям приходится писать то, что уже написано.
Как обойти
Разработчикам модуля:
Если в модуле есть сходные функции (например, критическая секция и мютекс), тщательно выясните, что писать с нуля, и что делать «обёрткой».
Не заставляйте пользователей писать то, что у вас написано.
Пользователям модуля:
Выбирайте, какой модуль использовать. Иногда более новая версия имеет эту проблему, в то время как более старая свободна от неё.
Неправильное применение термина
Этим словом неправильно называют сложный модуль с простым интерфейсом (что, как правило, желательно).
Иногда это навешивают как «ярлык» на ненравящуюся архитектуру.
Примеры
В объектно-ориентированных языках программирования простые конструкции приходится реализовывать сложными путями. Например, чтобы создать поток в Java, нужно подключить интерфейс Runnable и переопределить метод run(). Иногда это служит единственным объяснением классу.
Во многих библиотеках работы с графикой в Windows палитра реализуется через WinAPI (даже если библиотека WinAPI не используется). В этом случае могут быть проблемы с созданием палитровых рисунков с количеством цветов, близким к 256 (так как Windows резервирует несколько цветов в палитре для собственных нужд).
Неопределённая точка зрения (Ambiguous viewpoint): Представление модели без спецификации её точки рассмотрения
Большой комок грязи (Big ball of mud): Система с нераспознаваемой структурой
Блоб (Blob): см. Божественный объект (God object)
Бензиновая фабрика (Gas factory): Необязательная сложность дизайна
Затычка на ввод данных (Input kludge): Забывчивость в спецификации и выполнении поддержки возможного неверного ввода
Раздувание интерфейса (Interface bloat): Изготовление интерфейса очень мощным и очень трудным для осуществления
Магическая кнопка (Magic pushbutton): Выполнение результатов действий пользователя в виде неподходящего (недостаточно абстрактного) интерфейса. Например, в системах типа Delphi это написание прикладной логики в обработчиках нажатий на кнопку
Магическая кнопка (англ. Magic pushbutton) — это анти-паттерн, очень распространённый в средах визуальной разработки. В этом случае, программист сначала рисуетпользовательский интерфейс, а затем пишет бизнес-логику в автоматически созданных методах.
Проблемы этого анти-паттерна:
Код обработчиков элементов интерфейса неконтролируемо растёт
Изменение пользовательского интерфейса (или добавление нового интерфейса) становится сложным
Усложняется тестирование кода
Перестыковка (компьютер) (Re-Coupling): Процесс внедрения ненужной зависимости
Дымоход (Stovepipe system): Редко поддерживаемая сборка плохо связанных компонентов
Гонки (Race hazard, Race condition): непредвидение возможности наступления событий в порядке, отличном от ожидаемого
Состоя́ние го́нки (англ. race condition) — ошибка проектирования многозадачной системы, при которой работа системы зависит от того, в каком порядке выполняются части кода. Название ошибка получила от похожей ошибки проектирования электронных схем (см. Гонки (электроника)).
Состояние гонки — специфическая ошибка, проявляющаяся в случайные моменты времени и «затихающая» при попытке её локализовать.