![](/user_photo/_userpic.png)
Яп
.pdf![](/html/75508/276/html_8rnNSBwA5c.Iz7G/htmlconvd-6VjTN_101x1.jpg)
Принцип открытости/закрытости
401
Принцип подстановки Барбары Лисков
403
2/27/2023
Принцип подстановки Барбары Лисков
•Поведение наследуемых классов не должно противоречить поведению, заданному базовым классом.
•Подкласс не должен требовать от вызывающего кода больше, чем базовый класс, и не должен предоставлять вызывающему коду меньше, чем базовый класс.
402
Принцип разделения интерфейса
•Клиенты не должны зависеть от методов, которые они не используют.
•Слишком «толстые» интерфейсы необходимо разделять на более маленькие и специфические, чтобы клиенты маленьких интерфейсов знали только о методах, которые необходимы им в работе.
•При изменении метода интерфейса не должны меняться клиенты, которые этот метод не используют.
404
101
![](/html/75508/276/html_8rnNSBwA5c.Iz7G/htmlconvd-6VjTN_102x1.jpg)
Принцип разделения интерфейса
405
Принцип инверсии зависимостей
407
2/27/2023
Принцип инверсии зависимостей
•Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций.
•Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
406
ОЦЕНКА КАЧЕСТВА ДЕКОМПОЗИЦИИ ПРЕДМЕТНОЙ ОБЛАСТИ
408
102
![](/html/75508/276/html_8rnNSBwA5c.Iz7G/htmlconvd-6VjTN_103x1.jpg)
409
Типы зацеплений
•Content coupling (Высокая)
•Common coupling
•External coupling
•Control coupling
•Stamp coupling (Data-structured coupling)
•Data coupling
•Message coupling (low)
•No coupling
411
2/27/2023
Критерии оценки декомпозиции
• Для оценки качества декомпозиции существуют:
1.Зацепление – способ и степень взаимозависимости между разными программнымимодулями; мера того, насколькосвязаны подпрограммыили модули.
2.Связность(прочность) – степень взаимодействия между элементами отдельного модуля; мера силы взаимосвязанности элементов внутри модуля.
3.Достаточность– степень необходимого для реализации логичного и эффективногоповедения в классе.
4.Полнота– в интерфейсной части класса должны быть учтены все характеристикиабстракции.
5.Примитивность– примитивнымиявляются только те
операции,которыетребуют доступа к внутренней |
|
реализации абстракции. |
410 |
Content coupling
•Contentcoupling(Pathologicalcoupling),
зацепление по содержимому.
•Появляетсяв случае, если один модуль зависит от внутренней структурыдругого модуля.
•Например,имеет доступ к локальным данным другого модуля. Любое изменениевнутренней структуры модуля влечет изменение зависимогомодуля.
412
103
![](/html/75508/276/html_8rnNSBwA5c.Iz7G/htmlconvd-6VjTN_104x1.jpg)
Common coupling
•Зацепление по общей области (Common coupling)
•Появляется, когда два модуля разделяют одни и те же глобальные данные, например, глобальную переменную (или синглтон).
•Изменение общего ресурса влечет за собой изменение всех модулей, использующих его.
413
Control coupling
•Зацепление по управлению (Control coupling)
•Появляется, когда один модуль управляет работой другого, передавая ему информацию о том, что делать, например, передавая флаг.
415
2/27/2023
External coupling
•Внешнее зацепление (External coupling)
•Появляется когда два модуля разделяют:
1.общий формат данных, описанный в ином месте
2.протокол обмена данными
3.интерфейс устройства.
•В основном это связано с связи с внешними инструментами и устройствами.
414
Stamp coupling
•Зацепление поструктурированным данным (Stamp coupling, data-structured coupling).
•Появляется, когда модули разделяют структуру данных и используют только ее части, возможно, разные части (например, передавая всю запись в функцию, которой нужна только ее часть).
416
104
![](/html/75508/276/html_8rnNSBwA5c.Iz7G/htmlconvd-6VjTN_105x1.jpg)
Data coupling
•Зацепление по данным (Data coupling)
•Появляется, когда модули обмениваться данными посредством, например, параметров. При этом, каждый элемент данных это только простые данные (встроенные).
•Например, передача целого числа в функцию, которая вычисляет квадратный корень.
417
Типы связности
•Coincidental cohesion (worst)
•Logical cohesion
•Temporal cohesion
•Procedural cohesion
•Communicational/informational cohesion
•Sequential cohesion
•Functional cohesion (best)
419
2/27/2023
Message coupling
•Обмен между модулями осуществляется только путем вызова методов (передачи сообщений).
418
Coincidental cohesion
•Случайная связность - части модуля сгруппированы произвольно.
•Множественные, абсолютно несвязанные действия.
•Нет повторного использованиякода, трудно поддерживатьили улучшать
420
105
![](/html/75508/276/html_8rnNSBwA5c.Iz7G/htmlconvd-6VjTN_106x1.jpg)
Logical Cohesion
•Логическая связность, когда часть модуля сгруппированы, потому что они логически делают то же самое, даже если они отличаются по своей природе.
•В примере выше информация просто выводится на экран, поэтому все объединено.
421
Temporal Cohesion
•Временная связность: части модуля сгруппированыпо времени когда они работают. Внешне мы контролируем времяих жизни.
•Часто происходитпри инициализацииили завершении работы.
•Деградирует до логической связности, если время действия меняется.
•Для добавления подсистем могутпотребоваться дополнения к несколькиммодулям, например, выключение, запуск…
423
2/27/2023
Logical Cohesion
•Первичная логическая связь должна продумываться на самой высокой стадии декомпозиции.
•Однакочасто включает в себя действия как высокого так и низкого уровня (с точки зрения абстракции) в одном классе.
•Часто включает неиспользуемые параметры
•Трудно понять интерфейс, действия несвязанные.
422
Procedural Cohesion
•Процедурная связность: части модуля сгруппированы, потому что они выполняются всегда в определенной последовательности.
•Изменения в порядке выполнения шагов требуют изменения абстракции элементов.
•Ситуации, в которых применяется эта конкретная последовательность, часто ограничены. 424
106
![](/html/75508/276/html_8rnNSBwA5c.Iz7G/htmlconvd-6VjTN_107x1.jpg)
Communicational Cohesion
•Коммуникационная (информационная) связность: части модуля сгруппированы, поскольку они работают на одних и тех же данных.
•Действия связаны, но все еще не полностью разделены
•Элемент нельзя использовать повторно
425
Functional Cohesion
•Функциональная связность: части модуля сгруппированы, потому что все они вносят свой вклад в единственную четко определенную задачу модуля.
•Высокое повторное использование, потому что элемент полностью независим (в своих действиях) от других элементов.
•Легко заменяется при необходимости,легко тестировать, изменять под другой тип платформы и
т.д. |
427 |
2/27/2023
Sequential Cohesion
•Последовательная связность: части модуля сгруппированы, потому что выход из одной части является входом в другую часть, как на сборочной линии.
•Не обязательно плохо, если в названии метода нет четкой абстракции.
426
Informational Cohesion
•Каждое действие имеет свою собственную точку входа и независимый код.
•Все действия выполняются в разделяемой общей структуре данных.
•Истинно объектно-ориентированный подход!
428
107
![](/html/75508/276/html_8rnNSBwA5c.Iz7G/htmlconvd-6VjTN_108x1.jpg)
ПАРАЛЛЕЛЬНОЕ
ПРОГРАММИРОВАНИЕ
429
•Одновременные события - происходят в течение одного и того же временного интервала.
•Параллельные события - когда задачи выполняются в течение одного и того же временного интервала.
2/27/2023
Цель технологий параллелизма
•Обеспечить условия, позволяющие компьютерным программам делать больший объем работы за тот же интервал времени.
•Проектирование программ должно ориентироваться на одновременное выполнение нескольких задач, на которые предварительно должна быть разбита программа.
•В однопроцессорной среде параллельные задачи существуют в одно и то же время и выполняются в течение одного и того же интервала времени за счет контекстного переключения.
•В многопроцессорной среде, если свободно достаточное количество процессоров, параллельные задачи могут выполняться в одни и те же моменты времени в течение одного и того же периода времени.
108
![](/html/75508/276/html_8rnNSBwA5c.Iz7G/htmlconvd-6VjTN_109x1.jpg)
2 подхода к параллельности
•Методы параллельного программирования
позволяют распределить работу программы между двумя (или больше) процессорами в рамках одного физического или одного виртуального компьютера.
•Методы распределенного программирования
позволяют распределить работу программы между двумя (или больше) процессами, причем процессы могут существовать на одном и том же компьютере или на разных.
2/27/2023
Архитектура параллельной программы
Быстрее = лучше!
Архитектура распределенной программы
Схемы параллелизма
•Программаделитсяна части – снижаетсяобщаясложность.
•Использованиелокальнойсети или сети Интернет.
•Использованиеразных информационныхсред.
•Резервированиеоборудованияи вычислений.
•Совместноеиспользованиедорогостоящихресурсов.
109
![](/html/75508/276/html_8rnNSBwA5c.Iz7G/htmlconvd-6VjTN_110x1.jpg)
2/27/2023
Single-Program, Multiple-Data (SPMD) |
Multiple-Programs, Multiple-Data (MPMD) |
|
• процессорывыполняют различные виды работы |
||
|
||
|
• при этом все они вместе пытаются решить одну проблему |
|
|
• каждому из них выделяется свой аспект этой проблемы |
•однапрограмма,несколькопотоковданных.
•всепроцессорывыполняютодни и те жеоперации,но с различными данными.
Простейшие модели распределенного программирования
Клиент - Сервер
•Сервер обеспечиваетопосредованныйдоступ к огромной базе данных, дорогостоящемуоборудованию или некоторой коллекцииприложений.
•Клиент можетзапросить интересующие его данные, сделать запрос на выполнениевычислительной процедуры или обработку другого типа.
110