Смекни!
smekni.com

Моделирование структуры книги (стр. 3 из 3)

5.Перегрузить для нового класса среди прочих конструктор по умолчанию.

Т.о. в нашем случае неизбежно приходится применять механизм наследования классов. Как только мы объявили класс книги производным от CObject, нам разрешается использовать сериализацию данных.

Кроме выполнения вышеуказанных пяти пунктов необходимо также перегрузить метод Serialize() и для класса документа:

void CBookDoc::Serialize(CArchive& ar)

{

m_Book.Serialize(ar);

}

Также как и метод Serialize() класса документа перегруженный метод Serialize() класса книги не выполняет непосредственное чтение текста книги из файла. Этот метод извлекает из файла только лишь служебную информацию, определяя название книги и количество ее разделов. Далее в цикле создаются объекты класса раздела, им делегируется загрузка из файла разделов, затем происходит добавление разделов в коллекцию разделов книги. Аналогично раздел, загрузив служебную информацию раздела, делегирует загрузку глав классу главы; глава, в свою очередь, делегирует загрузку страниц классу страницы; а уже страница вызывает оператор загрузки из архива, определенный в MFC-классе CString.

Реализация зависимостей

Здесь подробно остановимся на механизме «перелистывания» страниц, т.е. на переходе к предыдущей и последующей страницам. При работе с определенными элементами меню, кнопками панели инструментов или при нажатии специальных виртуальных клавиш в программе осуществляется «перелистывание» одной страницы вперед или назад. При этом управление передается членам-функциям класса документа OnPagedown() и OnPageup(). Эти функции вызывают члены-функции класса книги SetNextActivePage() и SetPreviousActivePage(), которые после обновления номера активной страницы вызывают закрытую член-функцию класса книги RenewCtrls(). Эта функция вызывает глобальные функции RenewTree() и RenewList(), передавая им в качестве аргументов указатели на элементы управления, отвечающие за отображение книги на экране, и указатель на объект книги. Данные глобальные функции, получив доступ к активной странице через указатель на объект книги, обновляют отображения оглавления и страницы в соответствии с номером активной страницы.

Для реализации зависимости между элементом просмотрового окна дерева оглавления и класса книги в классе страницы определен атрибут – указатель на элемент дерева:

class CPage : public CObject

{

private:

HTREEITEM m_TreeItem;

};

Данный указатель позволяет при щелчке мыши по номеру страницы в оглавлении отображать страницу с этим номером, а при «перелистывании» страниц – выделять в оглавлении номер активной страницы. Последнее осуществляется через вызов вышеупомянутой функции RenewTree():

void RenewTree(CTreeCtrl* TreeCtrl,CBookClass* Book)

{

CPage* Page=(CPage*)Book->GetPages()->GetAt(Book->

GetActivePage());

TreeCtrl->Select(Page->GetTreeItem(),TVGN_CARET);

}

Анализ полученных результатов и выводы

В ходе изучения объектно-ориентированных возможностей языка C++ была разработана программа, активно использующая объектно-ориентированные технологии создания программных комплексов, включая Microsoft Foundation Classes. Данные технологии позволяют в короткий срок за счет экономии времени на этапах проектирования и реализации объектной модели создавать довольно сложные программные продукты с богатыми функциональными возможностями. Это обусловлено двумя причинами:

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

2)Библиотека Microsoft Foundation Classes предлагает программисту использовать некоторые стандартные для этой библиотеки концепции программирования, такие как документ/представление, сериализация данных и т.д. Т.о. среда Visual C++ является не только инструментальной средой разработки программ, но также эта среда во многом может помочь и на этапе проектирования, предоставляя программисту в использование некоторые полезные мастера.

Объектно-ориентированный подход позволяет не только эффективно и наглядно описать на языке C++ структуру книги, но также легко создать удобную для использования программу. Такая модель книги достаточна для организации всех действий, которые необходимы программе просмотра электронных книг.


Снимок экрана программы


Литература

1.К. Грегори. Использование Visual C++ 6. Специальное издание. – М.;СПб.;К.: Издательский дом «Вильямс», 2003

2.К. Джамса. Учимся программировать на языке C++. – М.: Мир, 2001.

3.Сабуров С. Языки программирования C и C++. – М.: Познавательная книга плюс, 2001.

4.Страуструп Б. Дизайн и эволюция языка C++. – М.: ДМК-Пресс, 2000.

5.Фридман А. C/C++. Архивы программ. – СПб.: БИНОМ, 2001.