русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Пример описания объекта


Дата добавления: 2014-02-04; просмотров: 983; Нарушение авторских прав


 

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

Первый этап– выделение характерных свойств и методов реального объекта. Для электродвигателя примем следующее:

 

Свойства Методы
Потребляемая мощность Включить двигатель
Текущая частота вращения Изменить частоту вращения
Направление вращения Остановить двигатель
Номинальная частота вращения Изменить направление вращения
Аварийный останов

 

Методы "остановить двигатель" и "Аварийный останов" отличаются тем, что в первом случае напряжение питания снижается в плавно, а во втором – мгновенно.

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

 

Свойство реального объекта Название поля Тип данных
Потребляемая мощность Power REAL
Текущая частота вращения RPM WORD
Направление вращения Direction Tdir
Сигнал аварийного останова BR Boolean
Номинальная частота вращения Nominal WORD

 

Свойство BR будет устанавливаться в TRUE при подаче команды «Авария».



А как быть с типом данных направления вращения? Конечно, можно договориться, что, к примеру, "1" или True означает вращение по часовой стрелке, а "2" или False – против часовой, но это неудобно.

Нормальные люди поступают следующим образом: вводят свой перечислимый тип данных TDir:

 

TYPE TDir=(CLOCKWISE, COUNTERCLOCKWISE);

 

Обратите внимание, что название типа данных (TDir) может быть выбрано произвольно. Оно никак не связано с названием переменной Dir. Просто обычно названия типов начинают с буквы "Т", чтобы не путать их с именами переменных. Аналогично классу нашего объекта присвоим название TMotor.

Теперь в программе можно создавать переменные типа Tdir, которые принимают только два значения: CLOCKWISE иCOUNTERCLOCKWISE.

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

- текущая частота вращения n:WORD (чтение/запись);

- номинальная частота вращения Nominal:WORD (только чтение, ее вообще нельзя менять);

- текущая потребляемая мощность pwr:REAL (только чтение, так как она зависит от частоты);

- текущее направление вращения dir:TDir (чтение/запись).

Имена свойств не должны совпадать с именами полей. Так как номинальная частота вращения является константой, ее можно не объявлять как поле, а представить только как свойство. Зададим набор процедур и функций для чтения/записи свойств:

 

Имя свойства Процедура записи Функция чтения
n PROCEDURE TMotor.Feed(newRPM:WORD); VAR i:WORD; s:INTEGER; BEGIN IF RPM-newRPM>0 THEN s:=-1 ELSE s:=1; FOR i:=1 TO ABS(RPM-newRPM) DO BEGIN if br then exit; RPM:=RPM+s; Sleep(10); p; Power:=GetPower END END;   FUNCTION TMotor.GetRPM:word;   begin result:=rpm end;  
Nominal - FUNCTION TMotor.GetNominal: WORD;   begin result:=1000 end;
pwr - FUNCTION TMotor.GetPower:REAL;   BEGIN GetPower:=формула расчета мощности END;
dir PROCEDURE TMotor.Flip(newd:TDir); VAR oldRPM:WORD; BEGIN IF (RPM=0) or (direction=newd) THEN { мотор стоит? ничего не делаем } EXIT; oldRPM:=RPM; { запомнили текущую частоту } Feed(0); { остановились } Direction:=newd; Feed(oldRPM) { установили прежнее значение частоты } END; FUNCTION TMotor.GetDr: TDir;   begin result:=direction end;

 

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

Рассмотрим более подробно процедуру изменения частоты вращения Feed. Ей на вход подается новое значение частоты NewRPM. Нужно иметь в виду, что частота может как увеличиваться, так и уменьшаться. Делать два цикла – один с TO, а другой с DOWNTO – неразумно. Лучше поступить следующим образом: ввести переменную s, принимающую значения +1 или –1 в зависимости от того, надо ли увеличивать или уменьшать значение частоты, а затем в цикле s добавлять к значению RPM.

Оператор

 

if br then exit;

 

обеспечивает выполнение аварийного останова: если поле br оказывается установленным в True, выполнение цикла (и всей процедуры) тут же прервется. Задержка (Sleep(10)) необходима для плавного разгона/торможения мотора. Строка Power:=GetPower обеспечивает пересчет потребляемой мощности при изменении частоты вращения. А что такое p? Очевидно, это вызов процедуры с именем p. Но откуда она взялась? Об этом чуть позже, в разделе 6.4.

Процедура смены направления вращения Flip сначала проверяет, не остановлен ли двигатель (тогда нечего менять) и не совпадает ли требуемое направление вращения newd с уже имеющимся (тогда тоже ничего не надо делать). Затем запоминается текущая частота вращения, двигатель останавливается командой Feed(0), направление вращения меняется, и двигатель снова разгоняется до запомненной частоты.

Нашему объекту также потребуется конструктор, в котором будут заданы начальные значения полей (частота – 0, направление вращения – по часовой и т.д.) и пустой деструктор: объект не использует динамическую память.

 



<== предыдущая лекция | следующая лекция ==>
Виртуальные методы | Параметры-процедуры


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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