Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
конспект_укр.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.07 Mб
Скачать

Призначення патерна Factory Method

В системі часто потрібно створювати об'єкти самих різних типів. Патерн Factory Method (фабричний метод) може бути корисним у вирішенні наступних завдань:

  • Система повинна залишатися розширюваної шляхом додавання об'єктів нових типів. Безпосереднє використання виразу new є небажаним, так як в цьому випадку код створення об'єктів із зазначенням конкретних типів може вийти розкиданим по всьому додатком. Тоді такі операції як додавання в систему об'єктів нових типів або заміна об'єктів одного типу на іншій будуть скрутними (докладніше в розділі Що породжують патерни). Патерн Factory Method дозволяє системі залишатися незалежною як від самого процесу породження об'єктів, так і від їх типів.

  • Заздалегідь відомо, коли потрібно створювати об'єкт, але невідомий його тип.

Опис патерну Factory Method

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

Для забезпечення щодо простого додавання в систему нових типів патерн Factory Method локалізує створення об'єктів конкретних типів в спеціальному класі-фабриці. Методи цього класу, за допомогою яких створюються об'єкти конкретних класів, називаються фабричними. Існують два різновиди паттерна Factory Method:

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

UML-діаграма класів паттерна Factory Method. узагальнений конструктор

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

UML-діаграма класів патерна Factory Method. Класична реалізація

Реалізація патерна Factory Method

Розглянемо обидва варіанти реалізації паттерна Factory Method на прикладі процесу породження військових персонажів для нашої стратегічної гри. Її докладний опис можна знайти в розділі Що породжують патерни. Для спрощення демонстраційного коду будемо створювати військові персонажі для якоїсь абстрактної армії без урахування особливостей воюючих сторін.

// #include <iostream>

#include <vector>

  

enum Warrior_ID { Infantryman_ID=0, Archer_ID, Horseman_ID };

  

// Иерархия классов игровых персонажей

class Warrior

{

  public:

    virtual void info() = 0;    

    virtual ~Warrior() {}

    // Параметризированный статический фабричный метод

    static Warrior* createWarrior( Warrior_ID id );

};

  

class Infantryman: public Warrior

{

  public:

    void info() {

      cout << "Infantryman" << endl;

    }

};

  

class Archer: public Warrior

{

  public:

    void info() {

      cout << "Archer" << endl;

    }

};

  

class Horseman: public Warrior

{

  public:   

    void info() {

      cout << "Horseman" << endl;

    }

};

  

  

// Реализация параметризированного фабричного метода

Warrior* Warrior::createWarrior( Warrior_ID id )

{

    Warrior * p;

    switch (id)

    {

        case Infantryman_ID:

            p = new Infantryman();          

            break;     

        case Archer_ID:

            p = new Archer();          

            break;

        case Horseman_ID:

            p = new Horseman();          

            break;             

        default:

            assert( false);

    }

    return p;

};

  

  

// Создание объектов при помощи параметризированного фабричного метода

int main()

{   

    vector<Warrior*> v;

    v.push_back( Warrior::createWarrior( Infantryman_ID));

    v.push_back( Warrior::createWarrior( Archer_ID));

    v.push_back( Warrior::createWarrior( Horseman_ID));

  

    for(int i=0; i<v.size(); i++)

        v[i]->info();

    // ...

}

Представлений варіант паттерна Factory Method користується популярністю завдяки своїй простоті. У ньому статичний фабричний метод createWarrior () визначений безпосередньо в полиморфном базовому класі Warrior. Цей фабричний метод є параметризованих, тобто для створення об'єкта деякого типу в createWarrior () передається відповідний ідентифікатор типу.

З точки зору "чистоти" об'єктно-орієнтованого коду у цього варіанту є такі недоліки:

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

  • Подібне використання оператора switch (як в коді фабричного методу createWarrior ()) в об'єктно-орієнтованому програмуванні також не вітається.

Зазначені недоліки відсутні в класичній реалізації патерна Factory Method.

//

#include <iostream>

#include <vector>

  

// Иерархия классов игровых персонажей

class Warrior

{

  public:

    virtual void info() = 0;    

    virtual ~Warrior() {}

};

  

class Infantryman: public Warrior

{

  public:

    void info() {

      cout << "Infantryman" << endl;

    };

};

  

class Archer: public Warrior

{

  public:

    void info() {

      cout << "Archer" << endl;

    };    

};

  

class Horseman: public Warrior

{

  public:   

    void info() {

      cout << "Horseman" << endl;

    };

};

  

  

// Фабрики объектов

class Factory

{

  public:   

    virtual Warrior* createWarrior() = 0;

    virtual ~Factory() {}

};

  

class InfantryFactory: public Factory

{

  public:   

    Warrior* createWarrior() {

      return new Infantryman;

    }

};

  

class ArchersFactory: public Factory

{

  public:   

    Warrior* createWarrior() {

      return new Archer;

    }

};

  

class CavalryFactory: public Factory

{

  public:   

    Warrior* createWarrior() {

      return new Horseman;

    }

};

  

  

// Создание объектов при помощи фабрик объектов

int main()

{   

    InfantryFactory* infantry_factory = new InfantryFactory;

    ArchersFactory*  archers_factory  = new ArchersFactory ;

    CavalryFactory*  cavalry_factory  = new CavalryFactory ;

  

    vector<Warrior*> v;

    v.push_back( infantry_factory->createWarrior());

    v.push_back( archers_factory->createWarrior());

    v.push_back( cavalry_factory->createWarrior());

  

    for(int i=0; i<v.size(); i++)

        v[i]->info();

    // ...

}

Класичний варіант паттерна Factory Method використовує ідею полиморфной фабрики. Спеціально виділений для створення об'єктів поліморфний базовий клас Factory оголошує інтерфейс фабричного методу createWarrior (), а похідні класи його реалізують.

Представлений варіант паттерна Factory Method є найбільш поширеним, але не єдиним.

Можливі такі варіації:

  • Клас Factory має реалізацію фабричного методу createWarrior () за замовчуванням.

  • Фабричний метод createWarrior () класу Factory параметризованих типом створюваного об'єкта (як і у представленого раніше, простого варіанту Factory Method) і має реалізацію за замовчуванням. В цьому випадку, похідні від Factory класи необхідні лише для того, щоб визначити нестандартну поведінку createWarrior ().

Результати застосування патерну Factory Method

Перегваги патерна Factory Method - створює об'єкти різних типів, дозволяючи системі залишатися незалежною як від самого процесу створення, так і від типів створюваних об'єктів.

Недоліки паттерна Factory Method - у разі класичного варіанту патерна навіть для породження єдиного об'єкта необхідно створювати відповідну фабрику.

Питання для самоконтролю.

  1. Призначення патерна Factory Method.

  2. Наведіть опис патерну Factory Method

  3. Наведіть UML діаграму класів патерну Factory Method.

  4. Приведіть реалізацію патерна.

  5. Усунення недоліків реалізації патерна у класичний спосіб.

  6. Переваги та недоліки використання патерну.

Практичне заняття №24

Тема: Адміністративна контрольна робота.

Мета: Перевірка отриманих за семестр знань.

(див документ Адміністративна контрольна робота №2 )

Практичне заняття №25

Тема: Підсумкове заняття. Узагальнення вивченого матеріалу за семестр.

Мета: Узагальнення вивченого матеріалу за семестр. Аналіз контрольної роботи.

Узагальнення вивченого матеріалу відбувається на базі аналізу результатів виконання адміністративної контрольної роботи у вигляді тестового контролю знань, або дискусійного обговорення питань, що пов’язані з перспективами розвитку конструювання програмних продуктів.

Приклади тестових питань:

1. Виберіть правильний опис змінної для роботи з COM сервером Word

 

1) var a:comobj;

2) var a:object;

3) var a:wordobj;

4) var a:variant;

 

2. Який модуль потрібно підключити до проекту для роботи з COM об'єктом Word?

 

1) comobj

2) objcom

3) wordcom

4) wordobj

 

3. Який метод об'єкта COM дозволяє підключитися до запущеного екземпляра програми?

 

1) linkactiveoleobject(ім'я_програми)

2) getactiveoleobject(ім'я_програми)

3) createoleobject(ім'я_програми)

4) newoleactiveobject(ім'я_програми)

 

4. Який метод об'єкта COM дозволяє запустити новий екземпляр програми?

 

1) newoleobject(ім'я_програми)

2) getoleobject(ім'я_програми)

3) openoleobject(ім'я_програми)

4) createoleobject(ім'я_програми)

 

5. Яка властивість об'єкта COM робить вікно програми видимим?

 

1) visible

2) vision

3) active

4) show

 

6. Який метод об'єкта COM дозволяє стоврити в програмі Word новий документ?

 

1) w.document.add

2) w.activedocument.add

3) w.documents.add

4) w.document.item(i).add

 

7. Який метод об'єкта COM дозволяє створити в програмі Word новий документ на основі шаблону?

 

1) w.document.add(ім'я_шаблону)

2) w.activedocument.add(ім'я_шаблону)

3) w.documents.add (ім'я_шаблону)

4) w.document.item(i).add(ім'я_шаблону)

 

8. Який метод об'єкта COM дозволяє зберегти в програмі Word файл на диску?

 

1) w.activedocument.saveas

2) w.documents.saveas

3) w.activedocument.save

4) w.documents.save

 

9. Який метод об'єкта COM дозволяє в програмі Word закрити поточний документ?

 

1) w.documents.close

2) w.activedocument.close

3) w.activedocument.quit

4) w.documents.quit

 

10. Яка властивість об'єкта Com дозволяє в програмі Word указати зразок вихідного тексту для заміни?

 

1) w.selection.find.value

2) w.selection.find.replace

3) w.selection.text

4) w.selection.find.text

 

11. Яка властивість об'єкта COM дозволяє в програмі Word указати зразок нового тексту для заміни?

 

1) w.selection.find.replacement

2) w.selection.find.replacement.text

3) w.selection.find.replacement.value

4) w.selection.replacement.text

 

12. Який метод об'єкта COM дозволяє в програмі Word виконати заміну тексту на новий фрагмент?

 

1) w.selection.find.execute

2) w.selection.find.replace

3) w.selection.execute

4) w.selection.replace

 

13. Яка властивість об'єкта Com дозволяє в програмі Word звернутися до таблиці?

 

1) w.activedocument.table

2) w.activedocument.tables[i]

3) w.activedocument.tables.item[i]

4) w.activedocument.tables.items[i]

 

14. Яка властивість об'єкта COM дозволяє в програмі Word звернутися до рядка таблиці?

 

1) w.activedocument.tables[i].rows[j]

2) w.activedocument.tables.item[i].rows[j]

3) w.activedocument.tables[i].rows.item[j]

4) w.activedocument.tables.item[i].rows.item[j]

 

15. Яка властивість об'єкта COM дозволяє в програмі woRd звернутися до стовпчика таблиці?

 

1) w.activedocument.tables[i].columns.item[j]

2) w.activedocument.tables.item[i].columns.item[j]

3) w.activedocument.tables.item[i].columns[j]

4) w.activedocument.tables[i].columns[j]

 

16. Яка властивість об'єкта COM дозволяє в програмі Word звернутися до чарунки таблиці?

 

1) w.activedocument.tables.item[i].cell[m,n]

2) w.activedocument.tables[i].cell[m,n]

3) w.activedocuments.tables[i].cell[m,n]

4) w.activedocument.tables.item[i].cell[m,n]

 

17. Яка властивість об'єкта COM дозволяє в програмі Word звернутися до тексту чарунки таблиці?

 

1) . . .cell[m,n].range.text

2)  . . .cell[m,n].range.value

3)  . . .cell[m,n].text

4)  . . .cell[m,n].range

 

18. Яка властивість об'єкта COM дозволяє в програмі Word визначити кількість рядків у таблиці?

 

1) w.activedocument.tables.item[i].rows.count

2) w.activedocument.tables[i].rows.count

3) w.activedocument.tables.items[i].rows.count

4) w.activedocument.table.items[i].rows.count

 

19. Яка властивість об'єкта COM дозволяє в програмі Word визначити кількість стовпчиків у таблиці?

 

1) w.activedocument.table.items[i].columns.count

2) w.activedocument.tables[i].columns.count

3) w.activedocument.tables.item[i].columns.count

4) w.activedocument.tables.items[i].columns.count

 

20. Яка властивість таблиці в програмі Word дозволяє задати колір тла?

 

1) shading.backgroundpatterncolorindex

2) shading.colorindexbackgroundpattern

3) shading.backgroundcolorindexpattern

4) shading.patternbackgroundcolorindex

 

21. Яка властивість таблиці в програмі Word дозволяє задати ширину зовнішньої границі?

 

1) borders.outsidewidth

2) borders.outsidelinewidth

3) borders.linewidth

4) borders.outlinewidth

 

22. Яка властивість таблиці в програмі Word дозволяє задати ширину внутрішньої границі?

 

1) borders.inlinewidth

2) borders.insidewidth

3) borders.insidelinewidth

4) borders.insidewidthline

22. Виберіть правильний опис змінної для роботи з COM серверів Excel

 

1) var a:object;

2) var a:xlsobj;

3) var a:comobj;

4) var a:variant;

 

23. Який модуль потрібно підключити до проекту для роботи з COM об'єктом Excel?

 

1) xlsobj

2) objcom

3) comobj

4) xlscom

 

24. Який метод об'єкта COM дозволяє додати в програмі Excel нову книгу?

 

1) e.workbook.add

2) e.activeworkbook.add

3) e.add.workbooks

4) e.workbooks.add

 

25. Який метод об'єкта COM дозволяє додати в програмі Excel новий документ на основі шаблону?

 

1) e.workbooks.add(ім'я_шаблону)

2) e.workbook.add(ім'я_шаблону)

3) e.add.workbook(ім'я_шаблону)

4) e.activeworkbook.add(ім'я_шаблону)

 

26. Який метод об'єкта COM дозволяє зберегти в програмі Excel файл на диску?

 

1) e.activeworkbooks.saveas

2) e.workbooks.saveas

3) e.activeworkbook.save

4) w.activeworkbook.saveas

 

27. Який метод об'єкта COM дозволяє в програмі Excel закрити поточний документ?

 

1) e.workbooks.close

2) w.activeworkbook.close

3) w.activeworkbook.quit

4) w.activeworkbooks.quit

 

28. Яка властивість об'єкта COM дозволяє в програмі Excel звернутися до потрібного аркуша?

 

1) e.activeworkbook.sheets[i]

2) e.activeworkbooks.sheets.item[i]

3) e.activeworkbook.sheets.item[i]

4) e.activeworkbooks.sheets[i]

 

29. Який метод об'єкта COM дозволяє в програмі Excel додати новий аркуш у книгу?

 

1) e.activeworkbook.sheets.item[i].add

2) e.activeworkbook.sheets[i].add

3) e.activeworkbook.sheets.item[i].new

4) e.activeworkbooks.sheets[i].add

 

30. Який метод об'єкта COM дозволяє в програмі Excel вилучити аркуш із книги?

 

1) e.activeworkbooks.sheets.item[i].delete

2) e.activeworkbooks.sheets[i].delete

3) e.activeworkbook.sheets[i].delete

4) e.activeworkbook.sheets.item[i].delete

 

31. Який метод об'єкта COM дозволяє в програмі Excel скопіювати аркуш книги?

 

1) e.activeworkbooks.sheets.item[i].copy

2) e.activeworkbook.sheets.item[i].copy

3) e.activeworkbook.sheets[i].copy

4) e.activeworkbooks.sheets[i].copy

 

32. Яка властивість об'єкта COM дозволяє в програмі Excel звернутися до імені аркуша книги?

 

1) e.activeworkbook.sheets[i].name

2) e.activeworkbook.sheets.item[i].name

3) e.activeworkbook.sheets.item[i].listname

4) e.activeworkbooks.sheets[i].listname

 

33. Яка команда об'єкта COM дозволяє «подавити» видачу повідомлень Excel при видаленні аркуша книги?

 

1) e.displayalerts:=false;

2) e.displayerrors:=false;

3) e.showallerts:=false;

4) e.displayconfirm:=false;

 

34. Який метод об'єкта COM дозволяє в програмі Excel виконати заміну тексту?

 

1) e.activeworkbook.sheets.item[i].cell.replace

2) e.activeworkbook.sheets.item[i].cells.replacement

3) e.activeworkbook.sheets.item[i].cells.replace

4) e.activeworkbooks.sheets.item[i].cell.replacement

 

35. Яке ім'я має параметр для завдання тексту-зразка при виклику методу заміни в програмі Excel?

 

1) text

2) what

3) firsttext

4) example

 

36. Яке ім'я має параметр для завдання нового тексту при виклику методу заміни в програмі Excel?

 

1) secondtext

2) replacetext

3) secondtext

4) replacement

 

37. Яка властивість об'єкта COM дозволяє в програмі Excel звернутися до вмісту чарунки?

 

1) e.activeworkbooks.sheets.item[i].cell[i,j].text

2) e.activeworkbook.sheets.item[i].cells[i,j].value

3) e.activeworkbook.sheets.item[i].cell[i,j].text

4) e.activeworkbook.sheet.items[i].cells[i,j].value

 

38. Який метод об'єкта COM дозволяє в програмі Excel виділити діапазон чарунок?

 

1) e.activeworkbook.sheets.item[i].range[].select

2) e.activeworkbook.sheets.items[i].range[].select

3) e.activeworkbooks.sheets.item[i].range[].select

4) e.activeworkbook.sheets[i].range[].select

 

39. Який метод об'єкта COM дозволяє в програмі Excel вставити виділений діапазон у зазначене місце аркуша?

 

1) e.activeworkbook.sheets[i].range[].paste

2) e.activeworkbook.sheets.item[i].paste

3) e.activeworkbook.sheets.item[i].range[].paste

4) e.activeworkbook.sheets[i].paste

 

40. Яка властивість об'єкта COM дозволяє в програмі Excel звернутися до формули чарунки?

 

1) e.activeworkbook.sheets.item[i].cell[i,j].formula

2) e.activeworkbooks.sheets.item[i].cell[i,j].formula

3) e.activeworkbook.sheets.item[i].cells[i,j].formula

4) e.activeworkbook.sheets.item[i].cell[i,j].formula

41. До якого з видів довідок відноситься дане визначення: забезпечує користувачеві доступ до докладного опису окремих функцій програми 

 

1) контекстна довідка

2) процедурна довідка

3) довідник

4) концептуальна довідка

 

42. До якого з видів довідок відноситься дане визначення: містить відомості про призначення, можливосты і технологію використання програми 

 

1) контекстна довідка

2) процедурна довідка

3) довідник

4) концептуальна довідка

 

43. До якого з видів довідок відноситься дане визначення: забезпечує негайну допомогу користувачеві. Найчастіше описує окремі елементи інтерфейсу 

 

1) контекстна довідка

2) процедурна довідка

3) довідник

4) концептуальна довідка

 

44. До якого з видів довідок відноситься дане визначення: надає відомості про те, як виконати певну дію у програмі 

 

1) контекстна довідка

2) процедурна довідка

3) довідник

4) концептуальна довідка

 

45. З наведених вимог до довідника виберіть невідповідне: 

 

1) прийнятна компактність

2) підтримка мультимедіа

3) наявність на комп'ютерах користувачів простого ПО для перегляду довідки

4) легка інтеграція в програми

 

46. Яка із властивостей відноситься до довідки у форматі WinHelp 

 

1) незалежність платформи, на якій працюють користувачі

2) генерація файлів з розширенням CHM

3) можливість підготовки розділів довідки в будь-якому текстовому редакторі

4) стильове оформлення довідника на основі таблиць стилів

 

47. Яка із властивостей не відноситься до довідки у форматі WinHelp 

 

1) генерація файлів з розширенням HLP

2) не вимагає установки на комп'ютер спеціальної програми для перегляду файлів допомоги

3) розділи довідки являють собою RTF файли

4) новий формат довідок, що вперше з'явився в Windows 98

 

48. Яка із властивостей не відноситься до довідки у форматі HTML 

 

1) використання в довідці всіх доступних WEB-технологій

2) наповнення довідки графікою й мультимедіа

3) одержання єдиного файлу допомоги

4) рятує авторів від вивчення інструментальних засобів створення файлів допомоги

 

49. Який з наведених недоліків не відноситься до довідки у форматі HTML 

 

1) застаріла технологія, що не використовується в сучасних програмах

2) потрібно від розроблювача гарне знання HTML і інших засобів розробки

3) велика кількість файлів, що робить довідку складною для перенесення й зберігання

4) для перегляду довідки потрібна наявність на комп'ютері браузера

 

50. Яка із властивостей не відноситься до довідки у форматі HTML Help

 

1) генерується файл у форматі CHM

2) може включати графіку й мультимедіа

3) для створення розділів довідки можна використовувати будь-який текстовий редактор

4) є стандартом для створення довідкових систем у сучасних програмах

  

51. З наведених типів файлів укажіть той, який не може бути створений утилітою HTML Help Workshop

 

1) CHM

2) TXT

3) HTM

4) HLP

 

52. Файл змісту при створення довідки в  HTML Help Workshop має розширення 

 

1) HHС

2) H

3) HHI

4) HHK

 

 

53. Файл покажчика при створення довідки в  HTML Help Workshop має розширення 

 

1) HHT

2) H

3) HHI

4) HHK

 

 

54. Яка з команд використовується при створенні заголовного файлу в контекстній довідці 

 

1) #define номер ім'я_розділу

2) #define ім'я_розділу #номер

3) #define #ім'я_розділу номер

4) #define ім'я_розділу номер

  

55. Яке розширення має заголовний файл у проекті 

 

1) HHС

2) H

3) HHI

4) HH

 

56. Укажіть команду, яка дозволяє відкрити файл допомоги в програмі на Delphi

 

1) application.help(help_contents,0)

2) application.helpcommand(help_contents,0)

3) application.help_command(helpcontents,0)

4) application.help(helpcontents,0)

 

57. Укажіть команду, яка дозволяє викликати контекстний розділ довідки

 

1) application.helpcontents(номер розділу)

2) application.help_context(номер розділу)

3) application.help_contents(номер розділу)

4) application.helpcontext(номер розділу)

 

58. Для присвоювання формі або компоненту на ній контекстного розділу довідки необхідно використовувати властивість

 

1) helpid

2) helpcontext

3) helpcontextid

4) helpidcontext

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]