Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Анализ объявления и реализации




 

Численное описание (т.е. данные) класса представлено следующими полями

 

Имя поля Тип Описание
Name string Уникальный идентификационный код самолета. В Российской фелерации гражданские самолеты имеют идентификацию вида RA-XXYYYY, где ХХ – код фирмы-разработчика, YYYY – серийный номер. Например, идентификационный код ИЛ-96-300 с серийным номером 7 будет RA-96007.
Speed Integer Текущая скорость полета, выраженная в км/час.
Altitude Integer Текущая высота полета, выраженная в метрах. Не может быть меньше 50м или больше чем потолок для данного типа самолета.
Heading Integer Курс. Может принимать значения от 0 до 360 градусов
Status Integer Состояние. Может принимать значение одной из следующих констант TakingOff, Cruising, Landing, OnRamp.
Kind Integer Тип самолета. Может принимать значение одной из следующих констант Airliner, Commiter, PrivateCraft
Ceiling Integer Потолок – максимально возможная высота для данного типа самолета.

 

При управлении воздушным движением диспетчер дает «пилоту» команды. Команда может быть выполнена если не противоречит текущему состоянию самолета. Например, нельзя посадить самолет, который еще не взлетел. Факт выполнения команды фиксируется изменением значений полей Speed, Altitude, Heading и Status. Все поля скрытые. В данном случае необходимость сокрытия полей от пользователя очевидна. Действительно, диспетчер, как пользователь объекта рассматриваемого класса, сам не может изменить ни скорость, ни высоту полета самолета. Он это делает через посредника – пилота, который держит «рычаги управления». В рамках нашей абстракции роль пилота будет выполнять специальный метод, который имеет право изменять состояние и параметры движения самолета.

Класс TAirplane имеет 2 скрытых и 8 публичных методов. Сначала рассмотрим функции публичных методов в порядке их появления в объявлении класса.

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

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

Входными параметрами являются:

Msg – код команды диспетчера. Возможные коды команд предопределены константами с именами MsgXXXX в разделе const модуля AirplanU;

Spd – новое значение скорости полета;

Dir – новый курс;

Alt – новый эшелон (высота полета).

Выходной параметр метода – строка Response. Сюда заносится текст «реакции» пилота на команду диспетчера.

Метод с помощью оператора case анализирует код команды и выполняет соответствующие действия. Читателю предлагается разобраться в логике этого метода самостоятельно. Обратим внимание на то что здесь используются два защищенных метода TakeOff и Land, реализующие правила взлета и посадки.

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

«RA–96007 Высота: 10000 Курс: 129 Скорость: 950».

Во втором случае (т.е. когда при обращении к GetStatus параметры не указаны), метод – функция просто вернет текущее значение поля Status.

Смысл остальных методов GetXXXX очевиден.

Защищенные (protected) методы TakeOff и Land предназначены для инкапсуляции правил взлета и посадки. Поскольку методы защищены, к ним нельзя обратиться вне метода SendMessage. С другой стороны, гражданские (пассажирские) самолеты взлетают и приземляются не так, как это делают высокоманевренные военные истребители. Следовательно, нам следует позаботиться о возможности модификации класса в будущем. Такая возможность поддерживается вынесением правил в отдельные методы, которые можно перекрыть (т.е. изменить поведение), не затрагивая «систему управления» – метод SendMessage. Отметим, что объявление этих методов виртуальными (virtual) означает, что в будущем код этих методов будет перекрыт особым образом. Тонкости перекрытия методов рассматриваются ниже в разделе «Наследование».

 




Поделиться с друзьями:


Дата добавления: 2015-04-29; Просмотров: 507; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.