9.1.Иерархические уровни описаний проектируемых объектов
В основе блочно-иерархического подхода к проектированию лежит принцип разделения описания объекта по степени детализации его отображаемых свойств и характеристик. Это приводит к появлению уровней
абстрагирования.
На каждом иерархическом уровне используются свои понятия системы и элементов. На уровне 1(верхнем уровне) объект S рассматривается как система S из n взаимосвязанных и взаимодействующих элементов Si(рис.9.1).
S
S1 S2 ……………………….. Sn
S11 S12 ……… S1m1 ….. Sn1 Sn2 .
Рис.9.1.Иерархическая структура описания объекта
Каждый из элементов в описании уровня 1 представляет собой также сложный объект, который в свою очередь рассматривается как система Si
на уровне 2. Элементами систем Si являются объекты Sij, j=1,2,…,mi(где mi- количество элементов в описании системы Si). Как правило, выделение элементов Sij происходит по функциональному признаку. Деление элементов на уровни происходит вплоть до появления элементов, которые дальнейшему делению не подлежат. Такие элементы по отношению к S называются базовыми.
Примером иерархического описания объектов является структура технологического процесса изготовления детали с уровнями: маршрут- > операция -> переход -> проход; другим примером является декомпозиция конструкции изделия принятая в спецификации: изделие — узел — деталь.
Таким образом, принцип иерархичности означает структурирование представлений об объектах проектирования по степени детальности описаний, а принцип декомпозиции(блочности) — разбиение представлений каждого уровня на ряд составных блоков с возможностью раздельного поблочного проектирования.
9.2.Аспекты описаний проектируемых объектов
Кроме иерархического описания объекта используется описание по характеру отображаемых свойств, т.е. аспектов описаний. Наиболее важными аспектами для технических объектов являются конструкторский и технологический и функциональный аспекты.
Функциональный аспект связан с отображением основных принципов функционирования, характера физических и информационных процессов, протекающих в объекте, и находит выражение в принципиальных, функциональных, структурных, кинематических схемах и сопровождающих их документах.
Конструкторский аспект связан с реализацией результатов функционального проектирования, т.е. с определением геометрических форм объектов и их взаимным расположением в пространстве.
Технологический аспект относится к реализации результатов конструкторского проектирования, т.е. связан с описанием методов и средств изготовления объектов.
Возможно более дифференцированное описание свойств объекта, а внутри каждого аспекта возможно специфическое выделение иерархических уровней.
9.3.Составные части процесса проектирования
Процесс проектирования расчленяется на стадии, этапы, проектные процедуры и операции.
Стадии:
предпроектные исследования;
техническое задание;
эскизный проект;
технический проект;
рабочий проект;
испытание;
внедрение в производство.
Этап проектирования — часть процесса проектирования, включающая в себя формирование всех требующихся описаний объекта, относящихся к одному или нескольким иерархическим уровням и аспектам.
Составные части этапа проектирования называют проектными процедурами. Проектная процедура- часть этапа, которая заканчивается получением проектного решения. Более мелкие составные части процесса проектирования, входящие в состав проектных процедур, называются проектными операциями. Например, для проектной процедуры оформления чертежа изделия проектной операцией может быть вычерчивание типового
графического изображения зубчатого венца и т.п.
Причуды абстракций / Хабр
За годы преподавания и коммерческой разработки я повстречал много студентов и разработчиков, которые не до конца понимают смысл слова абстракция. Из многочисленных попыток разъяснить смысл этого термина получилась настоящая статья. Что Вы найдете под катом:
- Определение понятия абстракции и объяснение откуда оно взялось в ООП.
- Объяснение на простых примерах, что такое барьер абстракции, побочный эффект абстракции.
- Как получается хардкод.
Что такое абстракция?
Википедия определяет абстракцию и процесс абстрагирования следующим образом:
Абстра́кция (от лат. abstractio — отвлечение) — отвлечение в процессе познания от несущественных сторон, свойств, связей объекта (предмета или явления) с целью выделения их существенных, закономерных признаков; абстрагирование; теоретическое обобщение как результат такого отвлечения.
В европейской философии и логике абстрагирование трактуется как способ поэтапного продуцирования понятий, которые образуют всё более общие модели — иерархию абстракций. Наиболее развитой системой абстракций обладает математика. Степень отвлечённости обсуждаемого понятия называется уровнем абстракции. В зависимости от целей и задач, можно рассуждать об одном и том же объекте на разных уровнях абстракции.
Гради Буч определяет понятие абстракции значительно проще, но смысл тот же:
Абстракция выделяет существенные характеристики некоторого объекта, отличающие его от всех других объектов.
Зачем нужна абстракция?
Абстракции выполняют защитную функцию и помогают нам не сойти с ума от переизбытка информации. Представьте, как бы нам жилось, если при письме шариковой ручкой пришлось бы думать о том, что миллиарды молекул чернил взаимодействуют с молекулами бумаги, чтобы получилась буква. Другими словами, не тратя время на ненужные подробности, мы можем ухватить самую суть — взглянуть на проблему «сверху».
Если бы не фотография с высоты птичьего полета, можно ли было бы себе представить насколько правильно спроектирована Барселона? Кстати, про пример с шариковой ручкой, читать бы тоже не получилось — начертания одной и той же буквы на письме отличаются даже у одного человека.
Абстрактное мышление — это механизм, который позволяет нам перерабатывать и усваивать кучу новых сведений. Если бы не было абстракции, то единственный вариант для нас — это остаться очень примитивными существами.
В Бразилии живет племя небольшое племя индейцев Пираха. Представители этой народности обладают крайне скудным абстрактным мышлением. Их алфавит состоит из трех гласных и восьми согласных. У них нет слов, обозначающих цифры, вместо цифр у них два понятия — несколько и много. У них нет цветов — только понятия светлый и темный, времени и истории — они живут только сегодняшним днем и помнят только то. что помнит старейший из ныне живущих; нет — религии, ремесел, искусства. У них еще много чего нет в нашем привычном понимании. И это все потому, что не развито абстрактное мышление. Правда, справедливости ради, стоит отметить, что при этом они себя ощущают абсолютно счастливыми людьми!
Итак, абстрагирование нам нужно как способ познания и описания окружающего мира, для обмена информацией друг с другом. Абстракции позволяют провести декомпозицию предметной области на набор понятий и связей между ними.
На картинке изображен Legoland в Лондоне. Несмотря на то, что все предметы собраны из детского конструктора, мы без труда узнаем в них дома, окна, двери, городские кварталы, людей.
Барьеры и побочные эффекты абстракций
Чтобы понять ключевые свойства абстракций проведем аналогию с построением проекций на плоскость.
Предположим, что у нас есть три фигуры: шар, цилиндр и параллелепипед, при этом ось симметрии цилиндра, проходящая через центры окружностей в основании, параллельна какой-нибудь оси симметрии параллелепипеда. Очевидно, что можно выбрать две плоскости для построения проекций таким образом, что шар и цилиндр спроецируются в окружности, а цилиндр и параллелепипед — в прямоугольники.
Проекция в нашем примере иллюстрирует абстракцию объекта — геометрической фигуры. Что мы видим — на одной плоскости не отличишь проекции шара и цилиндра, а на другой — цилиндра и параллелепипеда. Этот эффект называется барьером абстракции. Абстракция представляет не весь объект целиком, а только лишь его существенный набор характеристик.Нужно быть готовым к тому, что некоторые очень непохожие друг на друга объекты, могут стать неразличимыми. Если это неудобно, то нужно выбирать другой набор абстракций.
С другой стороны, как мы видим из примера, цилиндр, может проецироваться и в окружность, и в прямоугольник — объекты с различными геометрическими свойствами, отличными от тех, что есть у цилиндра. разрядность (8, 16, 32, 64 бита)
Классы
Гради Буч так определяет ООП:
Объектно-ориентированное программирование — это методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования.
В этом определении самый важный момент — это иерархия наследования. Потому что именно наследование отличает ООП от всех других методологий.
Два основных принципа человеческого мышления — это группировка и обобщение. Классы — это, по сути, абстракции механизмов группировки и обобщения человеческого мозга. Естественно, со своими побочными эффектами и барьером. При этом группировка достигается тем, что похожим объектам сопоставляется один класс, а обобщение в ООП достигается за счет иерархии классов. Иерархии классов реализуются через полиморфизм.
ООП, кстати, интересно еще хотя бы и тем, что это, пожалуй, последняя парадигма программирования на данный момент, которая поддерживается на аппаратном уровне.
Главный побочный эффект классов — они отражают опыт, стереотипы, предубеждения того программиста, который их написал. Отсюда следует, что разные люди получат разный набор классов для одной и той же задачи. Более того, один и тот же человек, решая одну и туже задачу, но в разные моменты времени, получит разный набор классов, просто потому что его жизненный опыт меняется.
Второй побочный эффект, который стоит отметить — чужой код всегда менее понятный, чем свой собственный.
Разберемся почему так происходит. Когда человек пишет код, для него естественнее двигаться снизу вверх — от более низкоуровневых компонент к более высокоуровневым. Сначала написали один класс, потом второй, который зависит от первого, затем третий, который зависти от первого и второго, четвертый — от третьего и т.д.
Когда же человек пытается понять чужой код, он как раз двигается наоборот — сверху вниз. То есть сначала понимает общую суть, затем разбивает на компоненты, потом пытается понять суть каждого компонента и т.д. Часто эти движения мысли снизу вверх и сверху вниз у разных людей не совпадают. Естественно, что изучающему чужой код было бы легче, если разбиение кода на компоненты совпадало с его собственными убеждениями, как надо делать. Если это не так, придется затрачивать определенные усилия, чтобы понять ход мыслей разработчика. Поэтому, когда кто-то говорит, что здесь «полный хардкод», но если я перепишу, то будет все проще и понятнее. Это всегда 100% правда… Но только для него, для остальных ценность переписывания уже не так очевидна.
Кстати, если ничего не предпринимать специально, то при разработке снизу вверх, код становится сильно связанным между собой, то есть не повторно используемым. Чтобы побороть этот эффект надо следовать принципу инверсии зависимостей (The Dependency Inversion Principle).
Проиллюстрируем как проявляется описанный побочный эффект на простом примере. Многие жители крупных городов закупаются в крупных супермаркетах. Предположим, что жена отправляет мужа за покупками и, чтобы он не забыл, как обычно, чего-нибудь, составляет список «для тех кто в танке».
Постараемся проследить ход ее мыслей:
— Так чего я сегодня буду готовить на ужин?
— Надо приготовить чего-нибудь вкусненькое, чтобы побаловать ребенка.
— Так, нужна будет мука, молоко.
— Кажется в миксере сели батарейки.
— Стоп! Ребенку нужны витамины. Морковь. Буду делать морковный сок. и мандарины. Скоро же Новый год!
— А хлеб дома есть? Нет, кажется, нет.Значит, надо купить!
— Еще надо купить масло.
— Забыла про ребенка — витамины. Купить яблоки.
— Чего-то ручка плохо пишет. Наверное скоро кончатся чернила. Надо купить!
— Так, ребенку надо купить сока.
— А еще игрушку — пусть порадуется.
— Картошка у нас есть на борщ? На борщ хватит, но на неделю нет. Значит тоже надо купить.
— Чуть не забыла учительница просила принести две тетради.
— К борщу нужна сметана.
— Вроде сахар кончился.
— Ребенок любит виноград.
— И еще надо купить бутилированной воды.
В итоге получаем следующий список:
- мука
- молоко
- батарейки
- морковь
- мандарины
- хлеб
- масло
- яблоки
- ручка
- сок
- игрушка
- картофель
- тетради
- сметана
- сахар
- виноград
- вода
Когда приходит муж в магазин то, что он обнаруживает? Указанные в списке товары оказываются в разных частях магазина. Обычно список длинный, поэтому запомнить что-либо, что было уже куплено достаточно трудно. На это накладывается, что какие-то отделы временно закрыты — идет выгрузка товаров, какого-то товара нет в продаже, плюс толчея, зимняя одежда. Более опытные товарищи ходят с карандашом или ручкой с очень озабоченным видом и постоянно смотрят в свой список. Но, в итоге, все равно, что-нибудь да забудешь купить. По своему опыту могу сказать, что это «что-нибудь» окажется самым важным, из-за чего вообще и стоило ехать в магазин.
Какой список был бы удобен мужу? Тот, в котором все товары сгруппированы по отделам, отдельные группы идут в очередности, соответствующей порядку обхода магазина. Например, для магазина, в который хожу я было бы удобно сгруппировать товары следующим образом:
- Батарейки
- Детские тетради
- Ручка
- Вода
- Сок
- Сахар
- Морковь
- Апельсины
- Яблоки
- Виноград
- Картофель
- Масло
- Хлеб
- Молоко
- Сметана
- Мука
- Детская игрушка
Еще одно важное наблюдение — невозможно по самим абстракциям определить насколько удачными они получились. Это можно сделать, только если мы попытаемся их использовать на практике. И тут уж выясняется, что одни абстракции лучше подходят для задачи, а другие — хуже. А если еще немного изменить исходные условия, то и прежний «хороший» набор абстракций уже может не работать. Например, второй список покупок из примера перестанет работать, если прийти с ним в другой магазин с иным порядком выкладки товаров. Он станет ничем не лучше, чем первый.
Отсюда вывод — невозможно придумать набор классов, который подойдет на все случаи жизни. В статье The Open-Closed Principle это называется стратегическая замкнутость.
Естественный вопрос, а как сразу создавать хорошие абстракции. Увы, но на этот счет нет точного ответа. Зато со временем выработался набор практик, который говорит, как надо поступать, и обещает, что в этом случае будет хороший результат. К таким практикам относится рефакторинг, стандарты кодирования, code review, объектная гимнастика и т.д. Цель данных практик — направить ход мыслей группы разработчиков в одном направлении, тогда шансов, что чужой код будет понятнее, станет больше. Отношение к каждой из практик у отдельно взятого человека зависит лишь от приобретенного им опыта использования практики. Часто слова «Это не работает» надо интерпретировать как «Я пробовал — у меня не получилось». Нет никаких объективных аргументов «ЗА», равно как и «ПРОТИВ».
Так зачем нужно тогда ООП?
Проведем параллели между естественным языком и ООП
естественный язык | ООП |
---|---|
Слово | класс |
Правила | Синтаксис |
Жанр | Архитектура |
литературные приемы | паттерны |
Любые свои мысли человек выражает словами естественного языка. Есть два типа задач:
- Для решения надо хорошо знать сам язык. Например, чтобы написать Войну и Мир.
- Сложность не зависит от языка. Неважно сколько и какие языки Вы знаете. Это никак не помогает при решении. Например, теорема Ферма.
ООП — это инструмент, который создавался с прицелом на большие по размеру программы. Но, это всего лишь один из инструментов, который потребуется, чтобы написать крупный проект.
Меня всегда удивляют, статьи в стиле Почему я люблю X или Почему я не люблю X. Все прекрасно понимают, что X — инструмент. Ведь нет же таких статей про лопату. Хотя, кто знает, ведь ООП существует несколько десятилетий, а лопата несколько тысяч, и быть может где-нибудь в в каменном веке шли жестокие холивары на тему, что лучше лопатка мамонта или мотыга из камня?
Литература по теме
1. Гради Буч Объектно-ориентированный анализ и проектирование с примерами приложений на С++
Данная книга в представлении не нуждается. Одна из наиболее цитируемых книг по программированию.
2. Барбара Минто Принципы Пирамиды Минто.
Работая консультантом McKinsey Барбара Минто создала свой собственный метод написания аналитических документов, основанный. на том, как человек воспринимает информацию. В книге достаточно много места уделено принципам группировки и обобщения.
3. Роберт Мартин (Uncle Bob)
Роберт Мартин написал серию статей и книг про принципы ООП. Наиболее известные из них S.O.L.I..D. На русском языке вышла книжка Роберт Мартин Быстрая разработка программ. Принципы, примеры, практика, в которой описаны эти принципы. Но на мой взгляд про них лучше прочитать в статьях The Single Responsibility Principle, The Open-Closed Principle, The Liskov Substitution Principle, The Interface Segregation Principle, The Dependency Inversion Principle.
ГЛАВА 10
ГЛАВА 10
ПОНЯТИЕ АБСТРАКЦИИ
Абстракция позволяет собирать экземпляры сущностей в группы, в которых их общие атрибуты учитывать не нужно.
Два виды абстракций в языках программирования — это абстракция процессов и данных. абстракция.
концепция абстракции процесса один из старейших. Все подпрограммы абстракции процесса, потому что они предоставляют программе способ указать, что какой-то процесс должен быть выполнен, без предоставления подробностей о том, как это должно быть сделанный.
Процесс абстракция имеет решающее значение для процесса программирования. Возможность абстрагироваться от многих деталей алгоритмов в подпрограмм позволяет создавать, читать и понимать большие программы.
Все подпрограммы, включая параллельные подпрограммы и обработчики исключений, абстракции процессов
ИНКАПСУЛЯЦИЯ
Инкапсуляция — это группа подпрограмм и данных, которыми они управляют
Ан инкапсуляция обеспечивает абстрактную систему и логическую организацию для набор связанных вычислений
Они часто помещаются в библиотеки и становятся доступными для повторного использования в других программах. чем те, для которых они написаны
ВВЕДЕНИЕ К АБСТРАКЦИИ ДАННЫХ
Ан абстрактный тип данных — это просто инкапсуляция, включающая только данные представление одного конкретного типа данных и подпрограмм, обеспечивающих операции для этого типа
Ан экземпляр абстрактного типа данных называется объектом
Объектно-ориентированный программирование является результатом использования абстракции данных КАК РЕЗЮМЕ ТИП ДАННЫХ
Все встроенные типы являются абстрактными типами данных, даже в FORTRAN I
Плавающая запятая Типы используют ключевую концепцию абстракции данных: сокрытие информации. Фактический формат данных в ячейка с плавающей запятой скрыта от пользователя.
ПОЛЬЗОВАТЕЛЬ ОПРЕДЕЛЕННЫЕ ТИПЫ РЕФЕРАТНЫХ ДАННЫХ
концепция определяемых пользователем абстрактных типов данных появилась относительно недавно
Они необходимо указать:
— А определение типа, которое позволяет программным модулям объявлять переменные типа, но скрывает представление этих переменных
— А набор операций по работе с объектами типа
Ан абстрактный тип данных — это тип данных, который удовлетворяет двум условиям
— представление или определение типа и операции содержатся в единая синтаксическая единица
— представление объектов типа скрыто от модулей программы, использующих тип, так что только прямые операции, возможные на этих объектах, являются теми, предусмотрено в определении типов
Программа единицы, использующие определенный абстрактный тип данных, называются клиентами этого тип.
А Преимуществом сокрытия информации является повышенная надежность. Это связано с тем, что клиенты не могут изменить лежащие в основе представления объектов напрямую, либо намеренно, либо посредством аварии, тем самым повысив целостность объекта
ДИЗАЙН ВОПРОСЫ
А средство для определения абстрактных типов данных в языке должно обеспечивать синтаксическая единица, которая может инкапсулировать определение типа и подпрограмму определения операций абстракции
Параллельно Pascal, Smalltalk, C++ и Java напрямую поддерживают абстрактные типы данных
Некоторый проблемы проектирования, выходящие за рамки инкапсуляции, заключаются в том, какие виды типов могут быть абстрактные должны быть ограничены, могут ли абстрактные типы данных быть параметризованы, и какие средства управления доступом предоставляются, и как такие средства управления указано
ЯЗЫК ПРИМЕРЫ
Simula 67
— Данные абстракция, хотя и неполная по определению, появилась в конструкции класса Симула 67.
— Simula классы являются динамическими в куче, что означает, что они создаются динамически в куче по запросу программы пользователя
— Simula Вклад 67 в абстракцию данных — инкапсуляция класса построить.
— Переменные объявленные в классе Simula 67, не скрыты от клиентов, создающих объекты этого класса, нарушающие требование сокрытия информации определения абстрактного типа данных.
— Simula Классы 67s гораздо менее надежны, чем настоящий абстрактный тип данных, из-за нарушение.
— Хотя Конструкция класса Simula 67 обеспечивает инкапсуляцию, но не обеспечивает сокрытие информации.
Ада
— Ада предоставляет средства инкапсуляции, которые можно использовать для имитации абстрактных данных. типов, включая возможность скрывать их представления.
— конструкции инкапсуляции в Аде называются пакетов .
— Каждый пакет состоит из двух частей.
— Первый, это пакет спецификаций , который обеспечивает интерфейс инкапсуляции
— Второй, это пакет тела , который обеспечивает реализацию сущностей, назван в спецификации.
— пользователь может сделать объект видимым для клиентов или предоставить только информация об интерфейсе.
Модуль-2
— модули Модулы-2 аналогичны пакетам Ады, поэтому они обеспечивают аналогичный уровень поддержки абстрактных типов данных
— Основное различие между ними состоит в том, что в Модуле-2 все типы, представления, скрытые в модулях, должны быть указателями.
С++
— В отличие от Ады и Модулы-2, которые обеспечивают инкапсуляцию, которая может используемый для имитации абстрактных типов данных, C++ предоставляет класс, который более непосредственная поддержка абстрактных типов данных
— данные, определенные в классе, называются членами данных ; функции, определенные в классе называются функций-членов .
— Классы может содержать как скрытые, так и видимые сущности.
Джава
— Java поддержка абстрактных типов данных аналогична C++
— Там однако есть несколько отличий, например, все пользовательские типы данных в Java классы и все объекты выделяются из кучи и доступны через ссылочные переменные и поддержка абстрактных типов данных в Java могут быть только определяется в классах
— Джава также включает пакеты в качестве одной из своих конструкций инкапсуляции.
ПАРАМЕТРИЗИРОВАННЫЙ РЕЗЮМЕ ТИПЫ ДАННЫХ
А параметризованный абстрактный тип данных означает, что тип данных является общим
Оба Ада и C++ допускают общие или параметризованные абстрактные типы данных
Эти общие типы считаются шаблонами
Абстрактные представления – Пути Каминао
Цель
Бизнес-требования неизбежно являются частичными и предвзятыми, и символические представления должны быть определены соответствующим образом, что означает удаление нерелевантных контекстов и функций.
Репрезентации обязательно частичны и предвзяты (Джон Девлин)Область действия
Артефакты называются абстрактными, если они не могут быть напрямую сопоставлены с реальными аналогами. Применительно к моделям анализа это означает описания категорий без расширения в виде бизнес-объектов; применительно к проектным моделям это означает классы, используемые для создания программных компонентов; power-types двойственны, являясь как описаниями, так и суррогатами. Строго говоря, символические представления (также известные как суррогаты) всегда должны быть конкретными, по крайней мере, на уровне требований; абстрактные представления — это один шаг вверх по уровням абстракции, они уже отделены от бизнес-требований, но еще не являются источником системных реализаций. Их не следует путать с частичными описаниями, которые на один шаг ниже описания компонентов системы.
Абстрактные описания бизнес-объектов (без расширения) или системных (без конкретизации)С инженерной точки зрения, это требует некоторого обоснования, а именно (1) как они появляются в процессе моделирования и (2) почему они нужно потом. Роли и разделы должны отвечать на вопрос «как», архитектуры — «почему».
Разделы и роли
Роли описывают роль, которую объекты играют в действиях, и, таким образом, роли фокусируют внимание на некоторых аспектах, игнорируя остальные. Таким образом, нет достаточных оснований для введения объектных абстракций, которые не могут возникнуть до тех пор, пока аспекты не будут отделены от их исходного контекста для использования в других контекстах.
В то время как роли могут вводить абстракцию с точки зрения действий, подмножества и разделы делают то же самое с точки зрения объектов, выделяя функции, значения которых единообразно устанавливаются подмножествами объектов или действий. И здесь этого недостаточно для оправдания абстракций, пока эти подмножества не могут быть связаны с дополнительными функциями.
Избирательная демократия приходит с разделением, но что такое гражданин?Варианты объекта
Следовательно, в зависимости от механизмов идентификации и использования, варианты на уровне требований могут быть описаны разделами, подмножествами или ролями.
Требования к статическим и динамическим вариантам (объектам)Варианты действий
Варианты поведения связаны с точками расширения и могут быть описаны на тех же принципах, что и варианты объектов, если модели должны быть консолидированы на уровне анализа. С этой точки зрения элементы управления можно рассматривать как своего рода абстракцию, поскольку они описывают поведение, общее для всех вариантов.
Требования к статическим и динамическим вариантам (деятельности)От требований к моделям анализа
Вообще говоря, системные архитектуры можно описать как набор ресурсов и ограничений, с которыми приходится справляться бизнес-процессам. В соответствии с этой линией рассуждений архитектурное содержание моделей должно быть полностью отделено от любой ссылки на реальные бизнес-объекты и процессы, т. е. без расширения. Другими словами, архитектурные особенности должны описываться абстрактными представлениями, и это основная причина использования абстрактных квалификаторов в моделях анализа.
Следовательно, проблема состоит в том, чтобы понять, как такое обоснование должно управлять переводом моделей требований в модели анализа, т. е. как роли, подмножества и разделы, полученные из требований, должны отображаться в типы и подтипы, определяемые анализом:
- Дано единый набор идентифицированных объектов, специализация добавит конкретные описания к его подмножествам.
- При наличии различных наборов объектов, каждый из которых имеет свой собственный механизм идентификации, обобщение введет абстрактное описание, которое будет применяться ко всем наборам.
Следует отметить, что специализация и обобщение несимметричны: в то время как первая добавляет к существующим описаниям, не изменяя их, это не относится к последней, которая вводит общие функции с возможным влиянием на родные.
Как упоминалось ранее, архитектура — это прежде всего вопрос связывания ограничений между контекстами и представлениями системы, постоянными или временными. При строгой идентификации постоянных и переходных единиц и встроенной прослеживаемости можно выполнять встроенные проверки абстракций, введенных с помощью моделей анализа:
- Если идентификаторы управляются независимо в моделях требований, они должны оставаться такими же в типах и подтипах анализа.
- И наоборот, если объекты требований управляются одним и тем же механизмом идентификации, он должен быть представлен как таковой с помощью типов и подтипов анализа.