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

1 ... 99 100 101 [ 102 ] 103 104 105 ... 342


dent], который указывает, что в average передается отдельная строка двумерного массива studentGrades. Например, аргумент studentGrades[l] представляет собой четыре значения (одномерный массив оценок), хранимый во второй строке двумерного массива studentGrades. Двумерный массив можно рассматривать как массив с элементами, представляющими собой одномерные массивы. Функция average подсчитывает сумму элементов массива, делит ее на количество результатов экзаменов и возвращает результат в форме с плавающей запятой.

4.10. Размышления об объектах: идентификация поведений объектов

в разделах Размышления об объектах в конце глав 2 и 3 мы выполнили два первых этапа объектно-ориентированного проектирования для нашей модели лифта, а именно, идентификацию объектов, необходимых для разработки модели, и идентификацию атрибутов этих объектов.

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

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

Как мы увидим, объекты обычно не определяют свое поведение случайным образом. Тот или иной вариант поведения определяется посылкой объекту сообщения, требующего, чтобы объект выработал именно такой способ поведения. Это созвучно вызову функции - тому, как посылаются сообщения объектам в C-f-+.

Лабораторное задание 3 по лифту

1. Продолжите работу с файлом фактов, созданным вами в главе 3. Вы разделили факты, относящиеся к каждому объекту, на две группы. Вы пометили первую группу как Атрибуты, а вторую - как Другие Факты.

2. Для каждого объекта добавьте третью группу, названную Варианты поведения. Поместите в эту группу каждый вариант поведения этого объекта, которьи! может быть вызван какой-либо переданной ему информацией, т.е. посылкой объекту некоторого сообщения. Например, кнопка может быть нажата (пассажиром), так что включите в список вариантов поведения кнопки как объекта элемент нажатие кнопки - pushButton. Функцию pushButton и другие варианты поведения объекта кнопка называют функциями-элементами объекта кнопка. Атрибуты объекта (такие как положение кнопки включено и выключено ) называются данными-элементами объекта кнопка. Функции-элементы объекта обычно манипулируют данными-элементами объекта (подобно тому как pushButton изменяет один из атрибутов кнопки на включено ). Функции-элементы обычно посылают сообщения другим объектам (подобно тому, как объект кнопка посылает сообщение иди ко мне - comeGetMe, чтобы вызвать лифт). Допустим, что лифт будет



Глава 4

иметь световые кнопки, которые зажигаются при их нажатии. Когда объект лифт прибывает на этаж, он захочет послать сообщение выключить кнопку - resetButton, чтобы выключить освещение кнопки. Объект лифт может захотеть определить, была ли нажата определенная кнопка, так что мы можем предусмотреть еще одно поведение - получение состояния кнопки - getButton, которое анализирует кнопку и возвращает 1 или О, указывающие текущее состояние клавиши: включено или выключено . Возможно, вы захотите, чтобы двери лифта посылали сообщения двери открыты. - openDoors, двери закрыты - closeDoors и так далее.

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

Замечания

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

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

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

4. Как видите, на этом этапе проектирования весьма трудно собирать по крохам возможные варианты поведения. Возможно, вы добавите новые варианты поведения вашего объекта при продолжении задания в главе 5.

Резюме

С-Ы- хранит списки значений в массивах. Массив - это последовательная группа связанных ячеек памяти. Эти ячейки связаны тем, что все они имеют одно и то же имя и один и тот же тип. Чтобы сослаться на отдельную ячейку или элемент массива, нужно указать имя массива и индекс.

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

Важно различать ссылку на седьмой элемент массива и элемент массива семь. Седьмой элемент массива имеет индекс 6, тогда как элемент массива семь имеет индекс 7 (в действительности, это восьмой элемент массива). Это источник ошибок типа завышения (или занижения) на единицу.



Массивы занимают место в памяти. Чтобы зарезервировать память для 100 элементов массива целых значений b и 27 элементов массива целых значений х, программист пишет

int b[100], х[27];

Массив типа char можно использовать для хранения строки символов.

Элементам массива можно задавать начальные условия тремя способами: в объявлении, присваиванием или при вводе.

Если в списке инициализации начальных значений меньше, чем элементов массива, остаюш;иеся элементы массива принимают нулевые начальные значения.

С-Ы- не предотвраш;ает ссылок на элементы, находяш,иеся за пределами массива.

Массиву символов можно задавать начальные условия, используя литеральную константу.

Все строки заканчиваются нулевым символом (\0).

Символьным массивам можно задавать начальные значения с помош;ью символьных констант в списке инициализации.

К отдельным символам строки, храняш;имся в массиве, можно обращаться прямо, используя запись индексов массива.

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

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

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

В С-Ы- имеется спецификация типа const, которая запрещает модификацию значений массива в функции. Когда параметру-массиву предшествует спецификатор const, элементы массива становятся константами в теле функции и любая попытка модифицировать элементы массива внутри тела функции приводит к ошибке трансляции.

Массив можно сортировать, используя технику пузырьковой сортировки. Выполняется несколько проходов массива. На каждом проходе сравниваются пары последовательных элементов. Если элементы пары расположены в нужном порядке (или элементы равны), они оставляются на своих местах. Если требуемый порядок нарушен, значения переставляются местами. Для небольших массивов пузырьковая сортировка приемлема, но для больших массивов она неэффективна по сравнению с другими, более сложными алгоритмами сортировки.



1 ... 99 100 101 [ 102 ] 103 104 105 ... 342

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