Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
M_RIO2.DOC
Скачиваний:
7
Добавлен:
21.03.2015
Размер:
1.01 Mб
Скачать

2.3. Проектирование

2.3.1. Идентификация классов и объектов

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

По отношению к программной системе должны возникать внешние события: сигнал первоначальной расстановки, сигнал начала моделирования. Кроме того, необходимо предусмотреть дополнительное событие - сигнал об окончании работы программной системы. Поэтому синтезируем класс "событие" (TEvent).

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

Проектируемая система должна обеспечивать отображение моделируемых объектов в виде графических фигур на экране дисплея. Каждый объект привязывается к определенной точке экрана. Поэтому вводим класс "точка" (TPiont) и класс "фигура" (TFigure), последний обобщает графические свойства всех графических объектов.

2.3.2. Идентификация содержания классов

На этом шаге последовательно рассмотрим все классы, полученные в процессе выполнения анализа и синтеза.

Класс TPoint. Положение точки определяется координатами X и Y, которые являются атрибутами. Строго говоря, реальные объекты и их графические образы имеют разные линейные размеры и системы координат, поэтому для рассматриваемого класса следовало бы ввести еще один атрибут - масштаб. В данном проекте этот атрибут опустим, считая, что размеры реальных объектов даны в единицах измерения экрана дисплея.

Класс TFigure. Графические объекты в целом характеризуются своим положением на экране, поэтому атрибутом класса TFigure является точка положения геометрического центра (theCenter). Графический объект при создании должен сразу располагаться в каком-то месте, поэтому для него требуется соответствующий конструктор. При моделировании передвижения фигур требуется убирать их изображения и перерисовывать, поэтому вводятся соответствующие правила Hide и Show. Для управления фигурами необходимо ввести операции определения местоположения (GetCenter) и его изменения (SetCenter).

Класс TEvent. Событие характеризуется некоторым значением, по которому одно событие отличается от другого. Для хранения такого значения вводим общедоступный атрибут What.

Класс TTimer. Характеристиками таймера является длительность периода theInterval между генерируемыми событиями и количество тактов theCounter, прошедших после очередного события. При создании соответствующего объекта следует установить его в начальное состояние и запомнить длительность периода генерации событий, для чего и вводится конструктор. Кроме того, основным назначением таймера является генерация событий и передача потребителю, что реализуется методом HandleEvent.

Далее рассмотрим классы, которые были "открыты" на стадии системного анализа.

Класс TBall. В постановке задачи было указано, что шары имеют различное поведение в зависимости от того, находятся ли они на поле или находятся в лузе. Это явный признак того, что объекты данного класса должны обладать атрибутом состояния theState, который принимает значения stOnField, если шар находится в поле, и stOnHole, если шар находится в лузе. Остальные атрибуты класса были получены на стадии анализа. Шар может быть принудительно установлен в поле, например, при начальной расстановке, поэтому нужно предусмотреть соответствующую операцию SetOnTable. Уточним, что операция Move реализует передвижение шара за один дискрет времени.

Классы TWhiteBall и TBlackBall полностью наследуют атрибуты TBall, но по-разному изображаются. Поэтому для этих классов надо ввести замещающее правило Show.

Класс TTable. Атрибутами этого класса являются содержащиеся в нем объекты, то есть это - агрегат из различных объектов: совокупность всех стенок Walls, луз Holes и шаров Balls. Однако один из шаров является особым, только он подвергается первоначальному воздействию, поэтому вводим атрибут PTheWhiteBall - указатель на белый шар. Внешние события должны восприниматься объектом класса TTable, поэтому необходимо ввести соответствующий метод HandleEvent. Кроме того, необходимо предусмотреть метод Update который изменяет состояние всех составных частей объекта класса TTable так, как будто прошел интервал времени единичной длины.

Класс TReality. Объект этого класса содержит в себе сам бильярдный стол theTable. Кроме того, в качестве атрибута он должен содержать таймер theTimer.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]