Суббота, 12.09.2026
Мой сайт
Статистика

Онлайн всего: 1
Непрошеных гостей: 1
Пользователей: 0
Форма входа

46.      Информационные модели. Объекты и их связи. Основные структуры в информационном моделировании. Примеры информационных моделей. Объектно-ориентированное программирование. Свойства ООП: инкапсуляция, наследование и полиморфизм. Класс и объектный тип. Структура класса, поля, методы и свойства. Абстрактные, виртуальные, динамические и перегружаемые методы.


ИНФОРМАЦИОННЫЕ МОДЕЛИ представляют объекты или процессы в образной или знаковой форме. Рисунки, фотографии, учебные плакаты – это  образные информационные модели. Примеры знаковых информационных моделей:  программа на языке программирования, формулы законов физики, химии, биологии,  периодическая таблица химических элементов, географическая карта.

Информационные модели (знаковые): описательная, табличная, математическая (интегральная, дифференциальная, имитационная, дискретная и др.).

Информационные модели (знаковые) по структуре организации данных: иерархическая, сетевая, табличная, линейная.

Описательная информационная модель – совокупность данных, содержащих текстовую информацию об объекте-оригинале. Для создания описательных информационных моделей используются естественные языки.

Табличная информационная модель – таблица, содержащая информацию об объекте-оригинале. Например, таблица, содержащая информацию о планетах Солнечной системы (расстояние, размеры, температуру, период обращения вокруг Солнца).

Математическая информационная модель – математические формулы, описывающие форму или поведение объекта-оригинала.

В том числе имитационная (математическая) модель. При имитационном моделировании воспроизводится алгоритм функционирования системы во времени – поведение системы; причем имитируются элементарные явления, составляющие процесс, с сохранением их логической структуры и последовательности протекания, что позволяет по исходным данным получить сведения о состояниях процесса в определенные моменты времени, дающие возможность оценить характеристики системы. Основным преимуществом имитационного моделирования является возможность решения сложных задач. Имитационные модели позволяют достаточно просто учитывать такие факторы, как наличие дискретных и непрерывных элементов, нелинейные характеристики элементов системы, многочисленные случайные воздействия и другие, которые часто создают трудности при аналитических исследованиях. В настоящее время имитационное моделирование – наиболее эффективный метод исследования систем, а часто и единственный практически доступный метод получения информации о поведении системы.

 

По структуре организации данных информационные модели могут быть иерархические, сетевые, модели линейной структуры, табличные.

Иерархическая информационная модель имеет упорядоченную структуру, где объект нижнего уровня связан только с одним объектом предыдущего уровня, но любой объект вышестоящего уровня может быть связан с несколькими объектами последующего уровня.

Современная классификация представителей животного мира  является иерархической информационной моделью.

Табличная информационная модель – таблица, содержащая информацию об объекте-оригинале. Например, таблица, содержащая информацию о планетах Солнечной системы (расстояние, размеры, температуру, период обращения вокруг Солнца).

В сетевой модели объекты не упорядочены по уровням. Вспомните сетевую модель баз данных.

В линейной структуре объекты соединены в одну цепь.

Существует три вида  связи :

  • один-к-одному (рис. 1),
  • один-ко-многим (рис. 2) и
  • многие-ко-многим (рис. 3).

     Связь  один-к-одному существует, когда один экземпляр одного  объекта  связан с единственным экземпляром другого.  Связь  один-к-одному обозначается стрелкой:


Рис.1.  Связь  один-к-одному

     Связь  один-ко-многим существует, когда один экземпляр первого  объекта  связан с одним или более экземпляром второго  объекта , но каждый экземпляр второго связан только с одним экземпляром первого. Множественность  связи изображается двойной стрелкой:


Рис.2.  Связь  один-ко-многим

     Связь  многие-ко-многим существует, когда один экземпляр первого  объекта  связан с одним или большим количеством экземпляров второго и каждый экземпляр второго  объекта  связан с одним или многими экземплярами первого:


Рис.3.  Связь  многие-ко-многим

    Помимо множественности,  связи  могут подразделяться на безусловные и условные. В безусловной  связи  для участия в ней требуется каждый экземпляр  объекта . В условной  связи  принимают участие не все экземпляры объекта  Связь  может быть условной как с одной, так и с обеих сторон

Пример информационной модели

Представьте себе, что нужно отгадать загадку. Вам предлагают перечень свойств реального предмета: круглое, зеле­ное, глянцевое, прохладное, полосатое, звонкое, зрелое, ароматное, сладкое, сочное, тяжелое, крупное, с сухим хвостиком...

Список можно продолжать, но вы, наверное, уже догадались, что речь идет об арбузе. Информация о нем дана самая разнообразная: и цвет, и запах, и вкус, и даже звук... Очевидно, ее гораздо больше, чем требуется для решения этой задачи. Попробуйте выбрать из всех пере­численных признаков и свойств минимум, по­зволяющий безошибочно определить объект. В русском фольклоре давно найдено решение: «Сам алый, сахарный, кафтан зеленый, бархат­ный».

Если бы информация предназначалась художнику для написания натюрморта, можно было ограничиться следующими свойствами объек­та: круглый, большой, зеленый, полосатый. Чтобы вызвать аппетит у сладкоежки выбрали бы другие свойства: зрелый, сочный, ароматный, сладкий. Для человека, выбирающего арбуз на бахче, можно предложить- крупный, звонкий, с сухим хвостиком.

 

Объектно-ориентированное программирование

ООП возникло в результате развития идеологии процедурного программирования, где данные и подпрограммы (процедуры, функции) их обработки формально не связаны. Для дальнейшего развития объектно-ориентированного программирования часто большое значение имеют понятия события (так называемое событийно-ориентированное программирование) и компонента (компонентное программирование, КОП).

Формирование КОП от ООП произошло, как случилось формирование модульного от процедурного программирования: процедуры сформировались в модули — независимые части кода до уровня сборки программы, так объекты сформировались в компоненты — независимые части кода до уровня выполнения программы. Взаимодействие объектов происходит посредством сообщений. Результатом дальнейшего развития ООП, по-видимому, будет агентно-ориентированое программирование, где агенты — независимые части кода на уровне выполнения. Взаимодействие агентов происходит посредством изменения среды, в которой они находятся.

Языковые конструкции, конструктивно не относящиеся непосредственно к объектам, но сопутствующие им для их безопасной (исключительные ситуации, проверки) и эффективной работы, инкапсулируются от них в аспекты (в аспектно-ориентированном программировании). Субъектно-ориентированное программирование расширяет понятие объект посредством обеспечения более унифицированного и независимого взаимодействия объектов. Может являться переходной стадией между ООП и агентным программирование в части самостоятельного их взаимодействия.

Первым языком программирования, в котором были предложены принципы объектной ориентированности, была Симула. В момент своего появления (в 1967 году), этот язык программирования предложил поистине революционные идеи: объекты, классы, виртуальные методы и др., однако это всё не было воспринято современниками как нечто грандиозное. Именно он стал первым широко распространённым объектно-ориентированным языком программирования.

Инкапсуляция 

Инкапсуляция — это свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе и скрыть детали реализации от пользователя.

Наследование 

Наследование — это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс — потомком, наследником или производным классом.

Полиморфизм 

Полиморфизм — это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.

Класс и объектный тип

Базовыми блоками объектно-ориентированной програм­мы являются объекты и классы. Содержательно объект мож­но представить как что-то ощущаемое или воображаемое и имеющее хорошо определенное поведение. Таким образом, объект можно либо увидеть, либо потрогать, либо, по край­ней мере, знать, что он есть, например, представлен в виде информации, хранимой в памяти компьютера. Дадим определение объекта, придерживаясь мнения Гради Буча: «Объект – осязаемая сущность, которая четко проявляет свое поведение».

Объект — это часть окружающей нас реальности, т. е. он существует во времени и в пространстве (впервые понятие объекта в про­граммировании введено в языке Simula ). Формально объект определить довольно трудно. Это можно сделать че­рез некоторые свойства, а именно: объект имеет состояние, поведение и может быть однозначно идентифицирован (дру­гими словами, имеет уникальное имя).

Класс — это множество объектов, имеющих общую структуру и общее поведение. Класс — описание (абстракция), которое показывает, как построить существующую во време­ни и пространстве переменную этого класса, называемую объектом.Смысл предложений «описание переменных клас­са» и «описание объектов класса» один и тот же.

Объект имеет состояние, поведение и паспорт (средство для его однозначной идентификации); структура и поведение объектов описаны в классах, переменными которых они яв­ляются .

Структура класса

По своей природе, класс – это генеральный контракт между абстракцией и всеми ее клиентами. Выражением обязательства класса служит его интерфейс.
Класс задается своим типом (именем класса), информацией о суперклассах и реализуемых интерфейсах, а также своими членами (полями, методами и внутренними абстракциями). Члены класса могут реализовывать свойства объекта (поля и методы экземпляра), а могут реализовывать свойства собственного класса (статические поля и методы).
Для поддержки принципа инкапсуляции, существует четыре основных уровня доступа к членам класса:

o                Открытый (public) доступ – члены класса видимы всем клиентам класса;

o                Защищенный (protected) – члены этого уровня видимы самому классу, его подклассам и абстракциям, находящимся с ним в одном пакете.

o                Пакетный (в java) – члены этого уровня доступны только самому классу и абстракциям, находящимися с ним в одном пакете.

o                Закрытый (private) – члены этого уровня видимы только изнутри самого класса.

 

Абстрактные методы и классы

Свойство: При построении сложной иерархии, для обеспечения полиморфизма программисты часто вынуждены вводить методы в классы верхнего уровня, даже если эти методы ещё не определены для этой специфической абстракции. Здесь можно было бы оставить пустые методы, но многие ОО языки предлагают такой специфический механизм, как определение абстрактных методов, то есть методов без реализации. Классы, имеющие хотя бы один абстрактный метод, часто называются абстрактными классами.

C++: В C++ абстрактные методы или чисто виртуальные функции получаются добавлением так называемого чистого описателя (=0) в определение метода. Абстрактные классы являются просто классами с одним или более абстрактным методом (или наследующие их). Вы не можете создать объект абстрактного класса.

OP: Object Pascal для выделения этих методов использует ключевое слово abstract. Кроме того, абстрактными классами являются классы, имеющие или наследующие абстрактные методы. Вы можете создать объект абстрактного класса (хотя компилятор выдаст предупреждающее сообщение). Это подвергает программу риску вызвать абстрактный метод, что приведёт к генерации ошибки времени выполнения и завершению программы.

Виртуальные методы

Наследование позволяет создавать иерархические, связанные отношениями подчинения, структуры данных. Следует, однако, заметить, что при использовании этой возможности могут возникнуть проблемы. Предположим, что в нашей графической программе необходимо определить объект Circle, который является потомком другого объекта Point:

Type

Circle = object (point)

Radius: Integer;

Procedure Show;

Procedure Hide;

Procedure Expand(ExpandBy: Integer);

Procedure Contact(ContactBy: Integer);

End;

Новый объект Circle соответствует окружности. Поскольку свойства окружности отличаются от свойств точки, в объекте-наследнике придется изменять процедуры Show и Hide, которые отображают окружность и удаляют её изображение с экрана. Может оказаться, что метод Init (см. предыдущий пример) объекта Circle, унаследованный от объекта Point, также использует методы Show и Hide, впредь во время трансляции объекта Point использует ссылки на старые методы. Очевидно в объекте Circle они работать не будут.

Можно, конечно, попытаться «перекрыть» метод Init. Чтобы это сделать, нам придётся полностью воспроизвести текст метода. Это усложни работу, да и не всегда возможно, поскольку исходного текста программы может не оказаться под рукой (если объект-родитель уже находиться в оттранслированном модуле).

Для решения этой проблемы используется виртуальный метод. Связь между виртуальным методом и вызывающими их процедурами устанавливается не во время трансляции (это называется ранним связанием), а во время выполнения программы (позднее связание.

Чтобы использовать виртуальный метод, необходимо в описании объекта после заголовка метода добавить ключевое слово virtual. Заголовки виртуальных методов родителя и наследника должны в точности совпадать.

 

Динамическое создание объектов

Переменные объектного типа могут быть динамическими, то есть размещаться в памяти только во время их использования. Для работы с динамическими объектами используются расширенный синтаксис процедур New и Dispose. Обе процедуры в этом случае содержат в качестве второго параметра вызов конструктора или деструктора для выделения или освобождения памяти переменной объектного типа:

New(P, Construct) или

Dispose(P, Destruct)

Где P - указатель на переменную объектного типа, а Construct или Destruct - конструктор и деструктор этого типа.

Действие процедуры New в случае расширенного синтаксиса равносильно действию следующей пары операторов:

New(P);

P^.Construct;

Эквивалентом Dispose является следующее:

Перегруженные методы

В процедурном программировании тоже существует понятие полиморфизма, которое отличается от рассмотренного механизма в  ООП . Процедурный полиморфизм предполагает возможность создания нескольких процедур или функций с одним и тем же именем, но разным количеством или различными типами передаваемых параметров. Такие одноименные функции называются  перегруженными , а само явление - перегрузкой (overloading). Перегрузка функций существует и в  ООП  и называется перегрузкой  методов 
Copyright MyCorp © 2026
Сделать бесплатный сайт с uCoz