Внутренние программные классы



Мы поможем в написании ваших работ!


Мы поможем в написании ваших работ!



Мы поможем в написании ваших работ!


ЗНАЕТЕ ЛИ ВЫ?

Внутренние программные классы



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

Внутренние программные классы инкапсулируют различные структуры данных (стеки, очереди, таблицы данных), выбранные проектировщиком. Примерами внут­ренних классов являются также классы-разъемы

Применение наследования при проектировании

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

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

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

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

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

Примеры наследования

Примеры суперклассов и подклассов. В банковской системе класс Счет имеет два атрибута: номерСчета и баланс.

Пример полиморфизма и динамического связывания. Рассмотрим теперь создание объектов этих классов, а также пример полимор­физма и динамического связывания.

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

Рис.9.11. Пример абстрактного суперкласса и подклассов

Спецификация интерфейса класса

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

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

– критерий, на основании которого был выделен данный класс;

– предположения, сделанные при специфицировании класса: могут разные за­дачи получать одновременный доступ к операциям объекта этого класса или доступ должен быть строго последовательным;

– предположительные модификации, побуждающие проектировать с учетом возможных изменений;

– суперкласс (если есть);

– унаследованные операции (если есть);

– операции класса. Для каждой операции необходимо определить:

выполняемую функцию;

предусловие (условие, которое должно выполняться перед вызовом опе­рации);

постусловие (условие, которое должно выполняться после вызова опе­рации);

инвариант (условие, которое должно выполняться всегда);

входные параметры;

выходные параметры;

вызываемые операции других классов.

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

Детальное проектирование ПО

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



Последнее изменение этой страницы: 2016-04-23; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.204.48.64 (0.006 с.)