Программирование >>  Структурное программирование 

1 ... 76 77 78 [ 79 ] 80 81 82 ... 342


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

4. Теперь разделите факты для каждого объекта на две группы. Пометьте первую группу как Атрибуты, а вторую группу как Другие Факты. В дальнейшем действия (варианты поведения) должны помещаться в группу Другие Факты. Как только вы поместили действие в группу Другие Факты, посмотрите, не надо ли создать дополнительные элементы в группе Атрибуты. Например, факт лифт закрывает свои двери - это действие, которое входит в группу Другие Факты, но оно указывает, что атрибут дверей - это то, что они либо открыты, либо закрыты. Факт этаж занят заставляет ввести атрибут этажа, который в любой момент времени будет показывать, занят ли этаж (пассажиром), или не занят. Приведем еще некоторые атрибуты лифта: движется он или стоит, имеет пассажира или нет, а если движется, то вверх или вниз. Атрибут кнопки - включена или выключена . Атрибут пассажира - нужный ему этаж. И так далее.

Замечания

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

2. Добавляйте соответствующие атрибуты, как только становится очевидной их необходимость.

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

4. Один объект может быть атрибутом другого объекта. Это называется композицией. Например, объекты-кнопки этажа 1 и этажа 2 внутри лифта - пассажир нажимает одну из этих кнопок, чтобы выбрать нужный ему этаж. Для целей данного лабораторного задания будем считать все объекты независимыми - не образующими композиции. Мы включим композицию в модель лифта в главе 5.

5. В этой главе вы научились создавать случайность . Когда вы со временем разработаете модель лифта, можно будет использовать оператор

arrivalTime = currentTime + (5 + rand() % 16);

для планирования случайного прибытия пассажира на этаж. Резюме

Лучший способ разработки и поддержки большой программы - разделить ее на несколько меньших модулей, каждый из которых более



управляем, чем исходная программа. Модули пишутся на С++ в виде функций и классов.

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

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

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

Тип данных double - тип с плаваюш;ей запятой, подобный float. Переменная типа double может хранить значения гораздо большего диапазона и точности, чем float.

Каждый аргумент функции может быть константой, переменной или выражением.

Локальная переменная известна только в описании данной функции. Функции не знают детали реализации другой функции (включая локальные переменные).

Общий формат описания функции:

Тип-возвращаемого-значения имя-функции (список-параметров) {

объявления и операторы

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

Аргументы, передаваемые функции, должны быть согласованы по количеству, типу и порядку следования с параметрами в описании функции.

Когда программа доходит до вызова функции, управление передается из точки активации к вызываемой функции, функция выполняется и управление возвращается оператору вызова.

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

return;

Если функция возвращает значение, оператор

return выражение;

возвращает значение выражения.



Глава 3

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

Прототипы функций дают возможность компилятору проверить, правильно ли вызывается функция.

Компилятор игнорирует имена переменных, упомянутые в прототипе функции.

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

Программист может и должен создавать свои собственные заголовочные файлы.

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

Функция rand генерирует целое число, лежащее в интервале от О до значения RAND MAX, которое определяется равным по меньшей мере 32767.

Прототипы функций rand и srand содержатся в <stdlib.h>.

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

Чтобы рандомизировать программу, используйте функцию srand стандартной библиотеки С.

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

Чтобы рандомизировать, не вводя каждый раз новое начальное значение числа, используемого для генерации случайной последовательности, можно использовать функцию srand(time(NULL)). Функция time обычно возвращает календарное время в секундах. Прототип функции time находится в файле <time.h>.

Общее уравнение для масштабирования и сдвига случайного числа имеет- вид:

п = а + rand О % Ь;

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

Перечисление, вводимое ключевым словом enum перед именем типа, - это набор целых констант, представленных своими идентификаторами.



1 ... 76 77 78 [ 79 ] 80 81 82 ... 342

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика