ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Моделювання структури книги
         

     

    Інформатика, програмування

    Зміст


    Введення

    3


    Аналіз та опис предметної області проекту 4


    Розробка об'єктної моделі
    5

    Визначення об'єктів і класів

    5

    Підготовка словника даних

    5

    Визначення атрибутів об'єктів
    6

    Визначення методів класів

    7

    Спрощення класів при використанні успадкування і графічне зображення об'єктної моделі 7


    Реалізація об'єктної моделі на мові програмування C + +

    9

    Реалізація класу книги

    9

    Породження об'єктів

    19

    Виклик операцій

    20

    Використання успадкування

    21

    Реалізація залежностей

    22


    Аналіз отриманих результатів та висновки 23


    Знімок екрану програми

    24


    Література

    25

    Введення

    Темою даної курсової роботи є вивчення об'єктно -орієнтованих можливостей мови C + + (номер варіанта 34). Предметнаобласть курсової роботи згідно варіанту - моделювання структури книги.

    У методичному додатку були наведені особливості предметноїобласті, розглянутої в даній роботі, - у книзі виділяються компоненти:сторінка, глава, розділ. За умовою задачі необхідно реалізувати об'єктнумодель книги і написати програму з використанням класу C + +, якийвідображає структуру книги і наочно демонструє ефективністьвикористання об'єктно-орієнтованої технології розробки програм.

    Для підвищення ефективності створення програмних комплексів іскорочення часу, відведеного на проектування і реалізацію кінцевогопродукту, фірма Microsoft рекомендує використовувати розроблену неюбібліотеку класів MFC (Microsoft Foundation Classes), що поставляється вскладі середовища розробки програм Microsoft Visual C + + 6. Томудодаток, створений під час написання даної курсової роботи, єдодатком, що використовує бібліотеку MFC, та розроблено у візуальній середовищі
    Microsoft Visual C + + 6. Призначення цієї програми - наочнеподання у візуальній формі структури книги.

    Аналіз та опис предметної області проекту

    Предметна область даної курсової роботи була обрана в методичномудодатку: моделювання структури книги (варіант № 34).

    Книга містить текстову інформацію (у простому випадку) і маєдеревоподібну структуру - книга складається з кількох розділів, розділскладається з кількох розділів, голова, у свою чергу, складається зі сторінок.
    Особливий компонент книги, що полегшує її використання, - зміст, що маєтакож деревоподібну структуру. Недолік паперової книги - необхідністьчасто відкривати сторінки, що містять зміст, для визначення номерівпотрібних сторінок, далі необхідно здійснювати пошук цих сторінок повідомим номерами, на що знову йде якийсь час. В електроннихкнигах (наприклад, створених для перегляду за допомогою програми Adobe Acrobat
    Reader) зміст завжди знаходиться перед очима читача і перехід напотрібну сторінку здійснюється простим клацанням миші по елементу,відповідному деякої сторінці. Крім того, у таких зміступоказуються всі сторінки, а не тільки перші сторінки голів, що такожспрощує навігацію по книзі. І в паперових, і в електронних книгах завждиприсутня можливість перевернути одну сторінку вперед або назад. Дляспрощення завдання і здійснення сумісності з книгами, створеними дляперегляду на ПК, орієнтованих на текстові операційні системи (типу
    DOS), сторінку ми будемо розглядати як об'єкт, що містить винятковотекстову інформацію, видиму єдиним шрифтом і не містить жодногоформатування. Таким чином, можна уявити сторінку як масив зконстантним кількістю розташованих вертикально зверху внизгоризонтальних рядків, що містять константні кількість символів (у разівикористання немоношірінних шрифтів рядки мають постійну довжину,виражену у фізичних одиницях: сантиметрах, дюймах, пікселях і т.п.).

    Розробка об'єктної моделі

    Визначення об'єктів і класів

    Згідно з моделлю програми, яка використовується бібліотекою MFC, будь-яке SDI -додаток повинен мати визначення наступних класів: клас додатки,породжений від CWinApp, клас вікна, породжений від CFrameWnd, класдокумента, породжений від CDocument, і клас подання, породжений від
    CView. Оскільки додаток для перегляду книг виконано в стилі "Explorer", тотакож визначено клас подання змісту книги, породжений від
    CTreeView. Крім того, клас подання сторінки книги породжений небезпосередньо від класу CView, а від успадкованого від CView класу - класу
    CListView. Тобто сторінка книги має уявлення у вигляді списку її строк.

    Клас, що відображає структуру книги, має назву CBookClass.
    Визначено класи колекцій розділів, глав і сторінок - клас CRazdels,клас CGlavas і клас CPages відповідно; а також класи власнерозділу, глави та сторінки - клас CRazdel, клас CGlava і клас CPageвідповідно.

    Підготовка словника даних

    Додаток - глобальний об'єкт класу програми, що використовується дляузгодження роботи об'єктів інших стандартних класів MFC і длядозволу посилань всередині одних об'єктів на інші об'єкти.

    Вікно програми - об'єкт візуального подання додатка,організовує взаємне розташування візуальних компонентів програми наекрані і реалізує стандартний інтерфейс взаємодії користувача зпрограмою.

    Документ - інформація, яку користувач може зберігати в процесіроботи з додатком і потім зчитувати.

    Представлення - засоби представлення документа користувачеві впроцесі виконання програми.

    Призначена в основу MFC концепція документ/подання дозволяєвідокремити дані від засобів, за допомогою яких користувач маєможливість проглянути ці дані та маніпулювати ними. Об'єкти-документивідповідальні за зберігання, завантаження і вивантаження даних, а об'єкти -подання, які являють собою ті ж вікна, дозволяютькористувачеві переглядати дані на екрані і редагувати їхвідповідно логіці роботи програми. Об'єкт класу поданнямістить покажчик на об'єкт класу документа, який використовується длядоступу до членів-змінним цього класу, де власне і зберігаються дані.

    Значення термінів книга, розділ, глава, сторінка, рядок і змісточевидні і не підлягають поясненню.

    Визначення атрибутів об'єктів

    У класі документа визначено відкритий атрибут - об'єкт класу
    CBookClass:

    class CBookDoc: public CDocument

    (public:

    CBookClass m_Book;

    );

    В клас документа включений відкритий член з тим, щоб не ускладнюватидоступ до нього з об'єктів класів подання. Визначення атрибутівінших класів відповідають класичному об'єктно-орієнтованогопідходу, який вимагає включати в клас закриті або захищені члени -змінні і відкриті члени-функції зчитування і модифікації цихзмінних.

    Класи книги, розділу, глави і сторінки мають закриту член-зміннуm_Name класу CString. Оскільки книга має деревовидну структуру, то класикниги, розділу і глави відповідають гілкам дерева, а клас сторінки --листу цього дерева. Тому класи-гілки містять член-змінну класуколекції більш дрібних об'єктів (книга містить колекцію розділів, голова --колекцію сторінок), а сторінка містить член-змінну - масив об'єктівкласу CString (рядки цієї сторінки). Класи розділу і глави містятьчлени-змінні типу WORD - номери першої та останньої сторінок,належать даному розділу або чолі. Клас розділу містить такожномера першої і останньої голів, що належать до цього розділу.

    У класі книги визначено закритий атрибут типу WORD, який зберігає номерсторінки, яка в даний момент часу проглядається користувачем.
    Крім того, в класі книги визначені члени-покажчики на елементиуправління CTreeCtrl і CListCtrl, що дозволяють здійснювати при читанні книгиперехід від однієї сторінки до іншої. Для цієї ж цілі в класі сторінкивизначена член-змінна - вказівник на елемент дерева - типу HTREEITEM.

    Для перебору всіх сторінок книги зручно користуватися не деревом, амасивом сторінок. Тому в класі книги визначена член-змінна --масив покажчиків на сторінки книги - MFC-класу CPtrArray.

    Визначення методів класів

    Крім відкритих членів-функцій, що здійснюють читання і модифікаціюзакритих членів-змінних, у класах, які використовуються в програмі, визначеніта інші члени-функції.

    У класі книги визначені відкриті члени-функції, що здійснюютьперехід при читанні книги до попередньої і наступної сторінок. Крім того,в цьому класі визначена закрита член-функція RenewCtrls (), якавикликається вищезгаданими функціями при переході до іншої сторінки. Данафункція викликає глобальні функції RenewTree () і RenewList (), якіоновлюють візуальне зміст уявлень змісту та сторінкивідповідно.

    Класи колекцій розділів, глав і сторінок (CRazdels, CGlavas і CPages)мають відкриті члени-функції DeleteRazdels (), DeleteGlavas () і
    DeletePages () відповідно. Дані члени-функції здійснюютьзвільнення пам'яті, виділеної під зберігання книги, при відкритті іншогокниги або завершення роботи програми.

    У класі книги перевантажені конструктор і деструктор за замовчуванням.
    Конструктор обнуляє номер поточної сторінки для того, щоб при відкриттінової книги автоматично відображалася перша сторінка. Деструкторзапускає механізм звільнення пам'яті.

    Спрощення класів при використанні успадкування і графічне зображенняоб'єктної моделі

    Об'єктно-орієнтований підхід в програмуванні має одну дужепривабливу рису - можливість повторного використання вжерозробленого коду. По-перше, можна використовувати класи, створенііншими розробниками, не піклуючись про деталі реалізації методів усерединікласу. Прикладом можуть служити сотні класів з бібліотеки MFC. Але більшістотні переваги дає повторне використання коду, що реалізовуєтьсячерез механізм спадкоємства.

    Клас, який використовує код іншого класу, називається похідним абопідкласом. Клас, що надає свій код іншого класу,називається базовим або суперкласу. Якщо є необхідність надатиметодам породженого класу можливість прямого доступу до члена-змінноїбазового класу, замість кваліфікаторов доступу private можна використовуватикваліфікаторов protected. Може виявитися, що методи базового класу,успадковані породженим класом, не зовсім відповідають специфіціостаннього і потребують певної модифікації. Для цього буде потрібнорозробити окремий метод Імя_Класса:: Метод (). Це і є перевантаженняметодів базового класу. Якщо бажано, щоб метод Імя_Класса:: Метод ()виконував те ж, що й метод базового класу, а потім і ще щось, тонайкращим способом досягти такого результату буде виклик
    Імя_Базового_Класса:: Метод () всередині Імя_Класса:: Метод (). Але при цьому потрібновикористовувати повне ім'я методу базового класу, тобто саме
    Імя_Базового_Класса:: Метод ().

    У додатку класи книги, розділу, глави та сторінки успадковані від
    CObject. Це необхідно для реалізації механізму завантаження документа зфайлу - метод Serialize () в цих класах перевантажується також, як і вкласі документа: void CBookDoc:: Serialize (CArchive & ar)

    (m_Book.Serialize (ar);

    )

    Класи CRazdels, CGlavas і CPages успадковані від класу CObArray.
    Тому для об'єктів цих класів можна викликати всі члени-функції,властиві класу масиву об'єктів.

    Об'єктна модель книги





    Реалізація об'єктної моделі на мові програмування C + +

    Реалізація класу книги

    BookClass.h:

    # if _MSC_VER> 1000
    # pragma once
    # endif// _MSC_VER> 1000

    # include "Razdels.h"

    class CBookClass;extern void RenewTree (CTreeCtrl *, CBookClass *);extern void RenewList (CListCtrl *, CBookClass *);

    class CBookClass: public CObject
    (
    DECLARE_SERIAL (CBookClass)private:

    CRazdels m_Razdels;

    CPtrArray m_pPages;

    CTreeCtrl * pTreeCtrl;

    CListCtrl * pListCtrl;

    CString m_Name;

    WORD m_ActivePage; void RenewCtrls ()

    (

    RenewTree (pTreeCtrl, this);

    RenewList (pListCtrl , this);

    )public:

    CRazdels * GetRazdels ()

    (return & m_Razdels;

    )

    CPtrArray * GetPages () < p> (return & m_pPages;

    ) void SetTreeCtrl (CTreeCtrl * TreeCtrl)

    (pTreeCtrl = TreeCtrl;) void SetListCtrl (CListCtrl * ListCtrl)

    (pListCtrl = ListCtrl;

    )

    CString * GetName ()

    (return & m_Name;

    )

    WORD GetActivePage ()

    (return m_ActivePage;

    ) void SetActivePage (WORD Page)

    (m_ActivePage = Page;

    RenewList (pListCtrl , this);

    ) void SetPreviousActivePage ()

    (if (m_ActivePage> 0)

    (m_ActivePage -;

    RenewCtrls ();

    )

    ) void SetNextActivePage ()

    (if (m_ActivePage 1> m_Name;

    WORD Count, Counter ; ar>> Count; for (Counter = 0; CounterSerialize (ar); m_Razdels.Add (Razdel);

    ) for (Counter = 0; CounterGetSize (); Counter2 ++)

    (

    CGlava * Glava = (CGlava *) Razdel-> GetGlavas () -
    > GetAt (Counter2); for (WORD Counter3 = 0; Counter3GetPages () -
    > GetSize (); Counter3 + +) m_pPages.Add (Glava-> GetPages () -
    > GetAt (Counter3 ));

    )

    )

    )
    )

    Razdels.h:

    # if _MSC_VER> 1000
    # pragma once
    # endif// _MSC_VER> 1000

    # include "Razdel.h"

    class CRazdels: public CObArray
    (public: void DeleteRazdels ();
    );

    Razdels.cpp:

    # include "stdafx.h"
    # include "Razdels.h"

    void CRazdels:: DeleteRazdels ()
    (

    WORD Counter; for (Counter = 0; CounterGetGlavas () -> DeleteGlavas (); delete Razdel;

    )

    RemoveAll ();
    )

    Razdel.h:

    # if _MSC_VER> 1000
    # pragma once
    # endif// _MSC_VER> 1000

    # include "Glavas.h"

    class CRazdel: public CObject
    (
    DECLARE_SERIAL (CRazdel)private:

    CGlavas m_Glavas;

    CString m_Name;

    WORD m_FirstGlava;

    WORD m_LastGlava;

    WORD m_FirstPage;

    WORD m_LastPage;public:

    CGlavas * GetGlavas ()

    (return & m_Glavas;

    )

    CString * GetName () < p> (return & m_Name;

    )

    WORD GetFirstGlava ()

    (return m_FirstGlava;

    ) void SetFirstGlava (WORD FirstGlava)

    (m_FirstGlava = FirstGlava;

    )

    WORD GetLastGlava ()

    (return m_LastGlava;

    ) void SetLastGlava (WORD LastGlava)

    (m_LastGlava = LastGlava;

    )

    WORD GetFirstPage ()

    (return m_FirstPage;

    ) void SetFirstPage (WORD FirstPage)

    (m_FirstPage = FirstPage;

    )

    WORD GetLastPage ()

    (return m_LastPage;

    ) void SetLastPage (WORD LastPage)

    (m_LastPage = LastPage;

    )

    CRazdel () () ; void Serialize (CArchive &);
    );

    Razdel.cpp:

    # include "stdafx.h"
    # include "Razdel.h"

    IMPLEMENT_SERIAL (CRazdel, CObject, 0)

    void CRazdel:: Serialize (CArchive & ar)
    (

    CObject:: Serialize (ar); if (ar.IsLoading ())

    (ar>> m_Name>> m_FirstGlava>> m_LastGlava>> m_FirstPage>>m_LastPage;

    WORD Count, Counter; ar>> Count; for (Counter = 0; CounterSerialize (ar); m_Glavas.Add (Glava);

    ) < p>)
    )

    Glavas.h:

    # if _MSC_VER> 1000
    # pragma once
    # endif// _MSC_VER> 1000

    # include "Glava.h"

    class CGlavas: public CObArray
    (public: void DeleteGlavas ();
    );

    Glavas.cpp:

    # include "stdafx.h"
    # include "Glavas.h"

    void CGlavas:: DeleteGlavas ()
    (

    WORD Counter; for (Counter = 0; CounterGetPages () -> DeletePages (); delete Glava;

    )

    RemoveAll ();
    )

    Glava.h:

    # if _MSC_VER> 1000
    # pragma once
    # endif// _MSC_VER> 1000

    # include "Pages.h"

    class CGlava: public CObject
    (
    DECLARE_SERIAL (CGlava)private:

    CPages m_Pages;

    CString m_Name;

    WORD m_FirstPage;

    WORD m_LastPage;public:

    CPages * GetPages ()

    (return & m_Pages;

    )

    CString * GetName () < p> (return & m_Name;

    )

    WORD GetFirstPage ()

    (return m_FirstPage;) void SetFirstPage (WORD FirstPage)

    (m_FirstPage = FirstPage;

    )

    WORD GetLastPage ()

    (return m_LastPage;

    ) void SetLastPage (WORD LastPage)

    (m_LastPage = LastPage;

    )

    CGlava (){}; void Serialize (CArchive &);
    );

    Glava.cpp:

    # include "stdafx.h"
    # include "Glava.h"

    IMPLEMENT_SERIAL (CGlava, CObject, 0)

    void CGlava:: Serialize (CArchive & ar)
    (

    CObject:: Serialize (ar); if (ar.IsLoading ())

    (ar>> m_Name>> m_FirstPage>> m_LastPage;

    WORD Count, Counter; ar>> Count; for (Counter = 0; CounterSerialize (ar); m_Pages.Add (Page);

    )

    )
    )

    Pages.h:

    # if _MSC_VER> 1000
    # pragma once
    # endif// _MSC_VER> 1000

    # include "Page.h"

    class CPages: public CObArray
    (public: void DeletePages ();
    );

    Pages.cpp:

    # include "stdafx.h"
    # include "Pages.h"

    void CPages:: DeletePages ()
    (

    WORD Counter; for (Counter = 0; Counter 1000
    # pragma once
    # endif// _MSC_VER> 1000

    # define CountOfStrings 37

    class CPage: public CObject
    (
    DECLARE_SERIAL (CPage)private:

    CString m_Strings [CountOfStrings];

    CString m_Name;

    HTREEITEM m_TreeItem;public:

    CString * GetString (BYTE Index)

    (return & m_Strings [Index];

    )

    CString * GetName ()

    (return & m_Name;

    )

    HTREEITEM GetTreeItem ()

    (return m_TreeItem;

    ) void SetTreeItem (HTREEITEM TreeItem)

    (m_TreeItem = TreeItem;

    )

    CPage (){}; void Serialize (CArchive &);
    );

    Page.cpp:

    # include "stdafx.h"
    # include "Page.h"

    IMPLEMENT_SERIAL (CPage, CObject, 0)

    void CPage:: Serialize (CArchive & ar)
    (

    CObject:: Serialize (ar); if (ar.IsLoading ())

    (ar>> m_Name;

    BYTE Counter; for (Counter = 0; Counter> m_Strings [Counter];

    )
    )


    Породження об'єктів

    У файлі Book.cpp оголошується глобальна змінна - об'єкт класупрограми CBookApp:

    CBookApp theApp;

    У перевантаженій функції-члені InitInstance () класу CBookApp створюютьсяоб'єкти класів документа, вікна та подання змісту:

    BOOL CBookApp:: InitInstance ()

    (

    CSingleDocTemplate * pDocTemplate; pDocTemplate = new CSingleDocTemplate (

    IDR_MAINFRAME,

    RUNTIME_CLASS (CBookDoc),

    RUNTIME_CLASS (CMainFrame),

    RUNTIME_CLASS (CLeftView ));

    AddDocTemplate (pDocTemplate); return TRUE;

    )

    Клас вікна CMainFrame містить захищений атрибут класу CSplitterWnd,що надає доступ до подання сторінки за допомогою виклику відкритоїчлен-функції класу CMainFrame:

    class CMainFrame: public CFrameWnd

    (protected:

    CSplitterWnd m_wndSplitter; public:

    CBookView * GetRightPane ();

    );

    Об'єкт класу книги є відкритим атрибутом класу документа:

    class CBookDoc: public CDocument

    (public:

    CBookClass m_Book;

    );

    Всі структурні елементи книги (розділи, глави і сторінки) створюються вмомент завантаження файлу книги з диска через оператор new:

    CRazdel * Razdel = new CRazdel; m_Razdels.Add (Razdel);

    Виклик операцій

    Виклик операцій для об'єктів в C + + може бути організований двомаспособами:

    1) Якщо потрібно викликати операцію для змінної, яка є об'єктом якого-небудь класу, то використовується оператор .*:

    Object.MemberFunc ();

    2) Якщо змінна є покажчиком на об'єкт класу, то доступ до методів, що підтримуються даним класом, організовується через оператор -> *: pObject-> MemberFunc ();

    Оскільки об'єкт класу книги є відкритим атрибутом класу документа,то доступ до членів класу книги здійснюється через вказівник на об'єкткласу документа. Т.ч., щоб викликати функцію-член доЛасса CBookClass,необхідно отримати спочатку покажчик на об'єкт класу CBookDoc:

    CBookDoc * pDoc = GetDocument (); pDoc-> m_Book.SetTreeCtrl (& refCtrl);

    Якщо члени-функції викликаються всередині їх класу, то виклик цих функційздійснюється безпосередньо без зазначення імені класу. Наприклад, усередині функції
    CRazdels:: DeleteRazdels () здійснюється виклик членів-функцій, успадкованихвід базового класу CObArray:

    void CRazdels:: DeleteRazdels ()

    (

    WORD Counter; for (Counter = 0; CounterGetGlavas () -> DeleteGlavas ( ); delete Razdel;

    )

    RemoveAll ();

    )

    Використання успадкування

    Згідно з концепцією об'єктно-орієнтованого програмування функціязавантаження файлу книги з диска повинна бути інкапсульовані в самому класі
    CBookClass. Основні етапи створення класу, який може самостійноорганізувати збереження-відновлення (в документації на MFC застосовуєтьсятермін serialize-сериализация) власних членів-змінних перерахованінижче:

    1.Об'явіть клас як похідний від CObject.

    2.В оголошення класу включити макрос DECLARE_SERIAL.

    3.В реалізацію класу включити макрос IMPLEMENT_SERIAL.

    4.Перегрузіть метод Serialize (), успадкований від базового класу.

    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;

    ); < p> Даний покажчик дозволяє при натисканні мишею по номеру сторінки взмісті відображати сторінку з цим номером, а при «гортання»сторінок - виділяти у змісті номер активної сторінки. Останняздійснюється через виклик вищезгаданої функції 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.


         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status