-
Notifications
You must be signed in to change notification settings - Fork 17
exam13 2
Реферат к лекции 13 Научные методы в проектировании. Топология информационных систем.
Выполнила: Барабанова Анна ИДБ-18-06
Рассматривать связность классов и объектов следует в контексте ООП. Для четкого понимания рассматриваемых структур уточним понятия объектно-ориентированного подхода и другие основные понятия.
Фрейм (англ. frame — «каркас» или «рамка») — способ представления знаний в искусственном интеллекте, представляющий собой схему действий в реальной ситуации. Первоначально термин «фрейм» ввёл Марвин Минский в 70-е годы XX века для обозначения структуры знаний для восприятия пространственных сцен.
Фрейм — это модель абстрактного образа, минимально возможное описание сущности какого-либо:
- объекта
- явления
- события
- ситуации
- процесса
О системах программирования, основанных на фреймах, говорят, что они являются объектно-ориентированными. Каждый фрейм соответствует некоторому объекту предметной области, а слоты содержат описывающие этот объект данные, то есть в слотах находятся значения признаков объектов.
Идеологически ООП это подход к программированию как к моделированию информационных объектов, решающий на новом уровне основную задачу структурного программирования: структурирование информации с точки зрения управляемости, что существенно улучшает управляемость самим процессом моделирования, что, в свою очередь, особенно важно при реализации крупных проектов.
Обычный человеческий язык в целом отражает идеологию ООП, начиная с инкапсуляции представления о предмете в виде его имени и заканчивая полиморфизмом использования слова в переносном смысле, что в итоге развивает выражение представления через имя предмета до полноценного понятия-класса.
Объектно-ориентированный подход основан на систематическом использовании моделей для языково-независимой разработки программной системы, на основе из ее прагматики.
Рассмотрим детальнее понятие класса.
Класс — в объектно-ориентированном программировании, представляет собой шаблон для создания объектов, обеспечивающий начальные значения состояний: инициализация полей-переменных и реализация поведения функций или методов. Другие абстрактные типы данных — метаклассы, интерфейсы, структуры, перечисления, — характеризуются какими-то своими, другими особенностями. Мы будем рассматривать класс как определенную абстракцию к реально существующему объекту в рамках объектно-ориентированного подхода, не ограничиваясь объектно-ориентированным программированием.
Для примера рассмотрим используемые человеком классификации в зоологии, ботанике, химии, деталях машин, несут в себе основную идею, что любую вещь всегда можно представить частным случаем некоторого более общего понятия. Конкретное яблоко — это в целом некоторое яблоко, вообще яблоко, а любое вообще яблоко — фрукт. Рассмотрим наиболее общее понятие объекта.
Объект — некоторая сущность, обладающая определённым состоянием и поведением, имеющая определённые свойства и операции над ними. Как правило, при рассмотрении объектов выделяется то, что объекты принадлежат одному или нескольким классам (абстракциям), которые определяют поведение (являются моделью) объекта. Термины «экземпляр класса» и «объект» взаимозаменяемы.
Класс описывает свойства и методы, которые будут доступны у объекта, построенного по описанию, заложенному в классе. Экземпляры используются для представления (моделирования) конкретных сущностей реального мира.
Например, экземпляром класса стиральных машин может быть ваша стиральная машина, имеющая следующие свойства: компания-производитель «Вятка», наименование модели «Вятка-автомат», серийный номер изделия ВЯТ454647, ёмкость 20 л.
Рассмотрим интересующую нас меру характеристик классов.
Связность, или прочность (англ. cohesion, module strength), — мера силы взаимосвязанности элементов внутри модуля; способ и степень, в которой задачи связаны друг с другом.
В стандарте ISO/IEC/IEEE 24765 (направленном на объектно-ориентированное программирование) предлагается рассматривать следующие типы:
- Случайная связность - тип связности, при котором задачи, выполняемые программным модулем, не имеют функциональной взаимосвязи друг с другом.
- Коммуникационная связность - тип связности, при котором задачи, выполняемые программным модулем, используют одни и те же входные данные или участвуют в формировании одних и тех же выходных данных.
- Функциональная связность - тип связности, при котором все задачи, выполняемые программным модулем, вносят вклад в выполнение одной и той же функции.
- Логическая связность - тип связности, при котором задачи, выполняемые программным модулем, реализуют логически сходные функции (например, одинаково обрабатывают разные типы входных данных).
- Процедурная связность - тип связности, при котором все задачи, выполняемые программным модулем, участвуют в некоторой программной процедуре.
- Последовательностная связность - тип связности, при котором выходные данные одной задачи, выполняемой программным модулем, служат входным данными для другой задачи, выполняемой этим же модулем.
- Временна́я связность - тип связности, при котором все задачи, выполняемые программным модулем, требуются для некоторой фазы выполнения программы (например, модуль содержит все задачи для инициализации).
Связность обычно противопоставляется связанности. Их часто путают из-за похожих названий. Рассмотрим и это понятие.
Зацепление, сцепление, связанность, сопряжение (англ. coupling) — способ и степень взаимозависимости между программными модулями; сила взаимосвязей между модулями; мера того, насколько взаимозависимы разные подпрограммы или модули.
Приведем еще одно определение, которое хорошо описывает связанность.
Связанность - мера взаимосвязанности программных модулей (классов) между собой, отражаемая в количестве изменений, вносимых в зависимые классы при переписывании какого-то функционала основного класса.
Сильное зацепление рассматривается как серьёзный недостаток, поскольку затрудняет понимание логики модулей, их модификацию, автономное тестирование, а также переиспользование по отдельности. Слабое зацепление, напротив, является признаком хорошо структурированной и хорошо спроектированной системы, и, когда оно комбинируется с сильной связностью, соответствует общим показателям хорошей читаемости и сопровождаемости.
Типы зацепления, согласно стандарту ISO/IEC/IEEE 24765-2010, включают:
- Зацепление по общей области - тип зацепления, при котором два программных модуля совместно используют общую область данных.
- Зацепление по содержимому - тип зацепления, при котором некоторые или все программные модули включены в некоторый модуль как составные части.
- Зацепление по управлению - тип зацепления, при котором один программный модуль обменивается данными с другим модулем с явной целью повлиять на его последующее выполнение.
- Зацепление по данным - тип зацепления, при котором выходные данные одного программного модуля служат входными данными другого модуля.
- Смешанное зацепление - тип зацепления, при котором различные подмножества значений некоторого элемента данных используются в нескольких программных модулях для разных и несвязанных целей.
- Патологическое зацепление - тип зацепления, при котором один программный модуль зависит от деталей внутренней реализации другого модуля или влияет на них.
Приведем примеры практического использования этих понятий с точки зрения объектно-ориентированное программирования и определим разницу между связностью и связанностью классов.
Допустим, у нас есть класс Собака и Кошка.
Рассмотрим разные типы связности на примере класса Кошка и его возможных задач.
- Случайная связность. Кошка имеет функции: кушать, программировать, перевод с русского на английский. При таких функциях вероятно будет плохая читаемость и сложное сопровождение. Такой класс мог бы получится из-за некорректной технической документации.
- Коммуникационная связность. Рассмотрим функции с одними входными данными. Класс Кошка в нашем случае будет нацелен на игру с кошачьими игрушками. Название(чем, предмет).
- сМячиком (лапа, мяч);
- сЛентой(зубы, клубок);
- сКошачьейМятой(нос, мята);
- Функциональная связность. Класс Кошка в нашем случае будет нацелен на функцию питания. Такой класс мог бы быть в тамагочи.
- найтиХозяина();
- попроситьЕду();
- понюхатьЕду();
- съестьЕду();
- Логическая связность. Под этот тип связности так же подходит пример Кошки, нацеленной на игру с разными игрушками.
- Процедурная связность - Под этот тип связности так же подходит пример Кошки, созданной для тамагочи, где основная программная процедура – кормить животных.
- Последовательностная связность. Рассмотрим Кошку, созданную для получения еды, с точки зрения такого типа связности.
- найтиХозяина(комната); возвращает - хозяин
- попроситьЕду(хозяин); возвращает - еда
- понюхатьЕду(еда); возвращает - желаниеКушать
- съестьЕду(желаниеКушать); возвращает – удовлетворение
- Временна́я связность. Класс Кошка имел бы временную связность, если бы выполнялся именно в фазе выполнения программы «кормление кошки». Тогда класс назывался бы КошкаКормление, и потенциально присутствовали бы классы, например КошкаИгра и КошкаПрогулка.
Рассмотрим примеры различных зацеплений с точки зрения объектно-ориентированное программирования на классах Кошка и Собака.
- Зацепление по общей области. Например, если класс Кошка и Класс собака будут одновременно работать с общей областью Дом.
- Зацепление по содержимому. Такое возможно, если будет класс МоиПитомцы, который будет содержать экземпляры Кошки и Собаки.
- Зацепление по управлению. Например, если Кошка будет иметь функцию поцарапатьСобаку(лапа, нос, сильно), где будет подавать данные о носе собаки, а Собака как-то отреагирует.
- Зацепление по данным. У Кошки может быть функция поигратьССобакой() которая сама выбирает и возвращает название игры, а у Собаки функция поигратьСКошкой (названиеИгры).
- Смешанное зацепление. Такое тоже возможно, если у Кошки будут переменные Характер и Окрас, а Собака будет включать Характер, и будет еще класс КошкаИгрушечная, который включает Окрас.
- Патологическое зацепление. Подходит тот же вариант, где Кошка будет иметь функцию поцарапатьСобаку(лапа, нос, сильно), которая будет влиять на данные о носе собаки, причем напрямую.
8. Отличие связности между абстракциями (классами) между собой и конкретными экземплярами (объектами)
Начать стоит с того, что создание абстракций (классов) ставится с определенной целью, в общем смысле требуется создать четкую структуру реальных объектов, чтобы каждый из них можно было охарактеризовать с требуемой точностью. Требуется отбросить несущественные для цели признаки и структурировать существенные.
Абстракция, в прикладном смысле, это всегда результат умственной целенаправленной деятельности человека. У абстракций (классов) связность может быть сильной или слабой, это зависит от способа и целей созданий данной абстракции. У объектов же более высокая связность, так как это реально существующие единицы. Связность абстракций всегда меньше или равна, чем связность реальных объектов, потому что абстракция может содержать только те признаки и те процессы, которые есть у реальных объектов, и при этом часть из них может не содержать, если они были признаны несущественными при создании абстракции.
То же самое относится и к связанности. Если сильно обобщить, то можно сказать, что в реальном мире любой объект так или иначе взаимозависит от любого другого.
Однако если смотреть с точки зрения объектно-ориентированном программирования, где объект рассматривается как экземпляр класса, то там связность и связанность будет такая же, как и у классов, которым они принадлежат.
Классы (абстракции) обычно создаются с помощью индукции (экспликации). Они определяются по требуемым признакам некоторой выборки объектов. То есть можно сказать, что классы специально создаются под реальные объекты. Поэтому далеко не всегда какой-либо объект можно связать с каким-либо определенным классом.
В объектно-ориентированном программировании на практике все сводится к созданию некоторого количества классов, где после определения структуры классов и их функций создаются экземпляры этих классов и используются в программе. То есть в функционирующей программе, всегда взаимодействуют именно объекты классов, созданных заранее.
В данной работе были рассмотрены понятия связности и связанности, их типы, объяснена их необходимость использования в классах. Были подробно проанализированы типы этих мер и созданы примеры на конкретных классах. Было рассмотрено отличие связности между абстракциями (классами) между собой и конкретными экземплярами (объектами).