Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Лабораторная работа №2. Использование «исключений» при разработке устойчивых программных систем.

Читайте также:
  1. Credits / В разработке участвовали
  2. D. Использование несколькими пользователями.
  3. I. Работа с окнами
  4. I. ЧТО ЕСТЬ ДИПЛОМНАЯ РАБОТА И ЗАЧЕМ ОНА
  5. I.3. Чем дипломная работа может пригодиться после университета
  6. II. Использование различных типов фотоплёнок.
  7. II. Психокоррекционная и развивающая работа

 

Задание. Используя технологию объектно-ориентированного проектирования решить задачу разработки проблемно-ориентированного программного обеспечения (ПО). Средствами языка С++ разработать класс, предназначенный для хранения информации об некотором объекте информатизации (автоматизации). Все члены данных (атрибуты класса) должны быть определены в «закрытой» секции. Для всех вариантов заданий обязательным является требование о наличии в классе членов-данных, отвечающих за хранение информации о дате и времени «создания» объекта предметной области, подлежащего автоматизации. Для разрабатываемого класса определить следующие конструкторы: конструктор по умолчания, перегруженный конструктор, конструктор копирования. Открытый интерфейс класса должен как минимум содержать следующие методы, предназначенные для работы с атрибутами класса: get (), set (), print (). Кроме этого, необходимо определить дружественные перегруженные операции operator >> и operator << для ввода/вывода объектов в стандартные символьные потоки (Character OUTput, Character INput).

Создать две программы, демонстрирующие механизмы использование массива объектов экземпляров класса (динамический и статический массивы). Например:

/* Классы, предназначенные для хранения значения даты и времени */

/* ---------- класс, определенный пользователем ---------- */

class MyClass: public TTime, public TData {

...};

 

MyClass MyStorage{ /* Класс «Хранилище» */

private:

enum{SIZE=1024};

MyClass Arr[SIZE]; /* статический массив экземпляров объектов класса */

};

 

MyClass MyStorage{ /* Класс «Хранилище» */

private:

int SIZE;

MyClass* Arr; /* динамический массив … */

};

 

Объяснить, какие конструкторы были использованы в процессе создания массивом экземпляров класса. Предусмотреть программные средства контроля ошибок типа: передача некорректного значения индекса элемента массива, ошибки выделения памяти из «кучи». В качестве метода защитного программирования использовать «стандартный механизм обработки исключений» (try … catch). Для программ разработать тестовые примеры.

 

class MyClass {... }; // Класс для представления «объектов»

class MyStorage {... }; // Класс «хранилище»

int main() {

set_new_handler(); // Установить собственный обработчик

// «ошибок» выделения памяти в куче

MyClass* p = NULL;

int num_objects, i;

// ввод количества экземпляров «объектов»

cin >> num_objects;

MyStorage stash(num_objects);

// Загрузить экземпляры класса MyClass

for(i=0; i<num_objects; i++) {

p=new MyClass();

p.set();

stash.append(p);

}

// Выполнить обработку данных, затем удалить объекты…

for(i=0; i<num_objects; i++) {

stash[i]->print(); // stash.at(i)->print();

...

}

stash.clear();

}

 

При разработке программы исходить из следующего перечня «вариантов использования», то есть действий, поддерживаемых программой:

1. Создать «базу данных» (БД) для хранения экземпляров классов, соответствующих «объектам автоматизации».

2. Сохранить созданную в оперативной памяти, адресном пространстве приложения, БД в текстовом/бинарном файле. Предложить возможность сохранения файла в CSV -формате либо другом, «OpenDocumen»t -совместимом формате.

Загрузить БД из текстового/бинарного файла.

В контексте взаимодействия с БД должны поддерживаться следующие «прецеденты»:

1. Создать новую запись и задать для неё значения атрибут.

2. Сохранить новую запись в БД, то есть включить ее состав структуры хранения записей.

3. «Вставить» сохраняемую запись в БД в заданную позицию.

4. Вывести список существующих в БД записей в формате «номер записи: список атрибут». Если вся совокупность записей, сохраненных в БД, при выводе не умещаются на экране компьютера, в окне терминала, то необходимо организовать постраничный вывод.

5. Найти запись в БД по значению индекса, номера в массиве экземпляров класса объектов MyClass, и вывести ее на экран в формате «номер записи: список атрибут».

6. Редактировать атрибуты существующей в БД записи. Для указания записи пользователь вводит ее номер.

7. Очистить БД, то есть удалить из нее все записи.

8. Удалить из БД часть записей, указав значения диапазона индексов для записей подлежащих удалению. После удаления записей произвести «дефрагментацию» хранилища данных.

Общие требования к структуре класса MyStorage и его интерфейсам:

1. Создание динамического либо статического массива экземпляров объектов класса MyClass.

2. Разработать механизмы для работы с псевдо контейнером MyStorage, предназначенным для хранения информации об объекте автоматизации.

3. В случае, когда в классе MyStorage используется динамический массив экземпляров класса MyClass, предусмотреть контроль над процессом освобождения ресурсов.

4. Реализовать следующие механизмы обеспечения проверки правильности значения индекса: для operator [] использовать assert (), а для at () – trycatch (обработка исключения std:: out_of_range).

 

Создать шаблон myVector по аналогии со стандартным шаблоном-контейнером std:: vector. Организовать хранение объектов автоматизации в созданном контейнере. Для данного контейнера реализовать методы size (), resize (), capacity (), front (), back (), push_back (), push_front (), insert (), begin (), end (), reserve (), at (), operator [], конструкторы по умолчанию, копирования. Перегрузить конструктор по умолчанию для предоставления возможности задания размера контейнера.

Реализовать следующие механизмы обеспечения проверки правильности значения индекса: для operator [] использовать assert (), а для at () – trycatch (обработка исключения std:: out_of_range).

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

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

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

Процесс запуска программы в режим «автоматизированного тестирования» может быть представлен следующим образом:

$./myprogr002 < data<Enter>

Где текстовый файл data содержит все необходимые данные, вводимые пользователем с консоли.

 


Дата добавления: 2015-08-18; просмотров: 117 | Нарушение авторских прав


Читайте в этой же книге: Лабораторный практикум | К ЛАБОРАТОРНЫМ РАБОТАМ | Полезные и часто используемые команды ОС GNU/Linux |
<== предыдущая страница | следующая страница ==>
Лабораторная работа №1. Использование «утверждений» при разработке устойчивых программных систем.| Лабораторная работа №3 Программирование с использованием шаблонов

mybiblioteka.su - 2015-2024 год. (0.008 сек.)