Объектная программа «Аудиторный фонд учебного заведения» — это объектная программа, предназначенная для хранения и обработки данных об аудиториях учебного заведения.
Введение
Учебное заведение представляет собой комплекс учебных корпусов, в котором все корпуса обладают своими уникальными номерами. При этом, каждый корпус состоит из определенного количества аудиторий, причем все аудитории также имеют свои уникальные номера и обладают параметром «Количество мест».
Разработка программы должна включать в себя определение требуемых объектов и описание их как классов, программную реализацию методик прибавления и удаления корпусов в учебное заведение и аудиторий в корпус с подсчетом суммарного количества мест, выполнение всестороннего тестирования при помощи консольного приложения и оконного (в окончательном варианте) приложения.
Для того чтобы объединить корпуса в учебное заведение, можно использовать структуру данных в форме адресного разомкнутого упорядоченного двунаправленного списка без заголовка. Для объединения аудиторий в корпусах можно использовать кольцевую очередь на базе обыкновенного массива.
Разработка должна выполняться с учетом следующих моментов:
- Наименования классов, свойств и методик обязаны иметь содержательный смысл и находиться в соответствии с информационной задачей.
- Необходимо обязательно соблюдать принцип инкапсуляции, то есть, использовать в классах, только закрытые свойства и реализовать необходимый набора методов доступа.
- Необходимо присутствие двух способов для сохранения всей объектной структуры во внешнем файле и обратной загрузки, причем типовые механизмы разрешено применять лишь как дополнение к самостоятельно реализованным методам.
- Тестовое оконное приложение должно иметь удобный интерфейс пользователя, позволяющий контролировать вводимые данные и отображать текущее состояние объектной структуры при помощи списковых и табличных элементов.
Разработка объектной программы для задачи «Аудиторный фонд учебного заведения»
Линейным списком является совокупность связанных однотипных компонентов, в которой каждый компонент каким-либо образом должен определять следующий за ним компонент. Добавить новый компонент можно в любом месте списка, также имеется возможность удаления любого компонента списка. Списковые структуры считаются достаточно гибкими, но и более сложными в реализации.
Типовая совокупность операций со списком имеет в своем составе следующие действия:
- Нахождение в списке требуемого компонента.
- Операция добавления нового компонента после требуемого или перед ним.
- Операция удаления заданного компонента.
- Операция прохода по списку от первого компонента к последнему с исполнением требуемых действий.
Динамическая реализация линейных списков базируется на процессе динамического выделения и очистки памяти для компонентов списка. Все компоненты списка обладают адресным полем, указывающим на последующий, а для двунаправленного списка еще и на предыдущий компонент, то есть, адресные связи должны выстраиваться от первого компонента к последнему, а последний компонент в адресном поле обладает нулевой адресацией. Логически последовательные компоненты списка физически могут быть размещены в любой области памяти. Для того чтобы управлять списком, нужно знать размещение в памяти первого компонента, для чего следует ввести основную переменную-указатель (к примеру, имеющую имя pFirst).
Особенность упорядоченного списка состоит в том, что при добавлении компонентов в список методика добавления должна находить в автоматическом режиме место для вставки. Рассмотрим процесс реализации не замкнутого двунаправленного списка, не имеющего заголовка. Инициализация списка выполняется следующей командой:
pFirst := nil;
Когда добавляются или удаляются компоненты, обычно прежде всего требуется осуществить операцию поиска. Рассмотрим алгоритм, способный реализовать эту операцию. Поиск может быть оформлен в виде функции, которая принимает входной параметр, являющийся искомым значением информационного поля, и возвращает итоговый результат поиска в виде либо адреса требуемого компонента, либо пустой адрес. Для этого следует выполнить следующие действия:
- Внутри функции следует объявить вспомогательную локальную переменную pTemp :pListItem, которая содержит адрес текущего компонента списка.
- В pTemp нужно записать адрес первого компонента списка.
- Далее следует организовать цикл по условию достижения конца списка.
- В теле цикла необходимо сравнить очередной компонент списка с искомой величиной.
- По итогам сравнения цикл должен быть прерван в случае обнаружения необходимого компонента с выводом адреса этого компонента, или следует выполнить переход к следующему компоненту списка.
- По завершении цикла без обнаружения требуемого компонента должен быть сформирован отрицательный результат поиска, а именно, Result := nil.
В широком смысле слова объектом является любая сущность, которая имеет определенную совокупность свойств (параметров, характеристик) и обладает определенным поведением, то есть, функциональностью. А Объектом в узком смысле слова является определенное формальное отображение изучаемой сущности, то есть, модель исходного объекта.
Класс является формальным методом описания однотипных объектов, то есть, объектов с аналогичной совокупностью свойств и методов. При описании класса должны перечисляться свойства и реализовываться методы соответствующих объектов. На базе одного класса может быть создано любое количество объектов, именуемых экземплярами этого класса.
Для того чтобы можно было использовать класс, следует объявить объектную переменную. Для всех переменных должно быть назначено уникальное имя и указана принадлежность к одному из известных классов. Это предоставляет возможность называть объектные переменные переменными классового типа.