Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Готове ООП.doc
Скачиваний:
6
Добавлен:
07.07.2019
Размер:
671.23 Кб
Скачать

ІІ. Дисципліна – „Об’єктно-орієнтоване програмування”

1. Аргументи функцій мови С++ з типом посилання мають властивості:

  1. структури

  2. об’єднання

  3. вказівника

г) розіменованого вказівника

д) класу

2. Функції мови С++ можуть бути перевантажені, якщо вони:

а) відрізняються типами результату

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

в) відрізняються типами аргументів T, T&, const T, const T&, volatile T, де T – деякий тип

г) відрізняються типами аргументів T*, const T*

д) відрізняються аргументами за замовчуванням

3. Принцип інкапсуляції полягає у:

а)об’єднанні даних та методів у класі

б)здійсненні однакових дій різними способами

в)перевантаженні операцій

г)перевизначенні функцій

д) заховуванні елементів класу оголошенням класу

4. Принцип наслідування полягає у:

  1. порядку розміщення класів у програмі

  2. копіювання даних та методів базового класу у похідний клас

в) імпорті оголошень даних та методів базового класу у похідний клас

г) оголошенні одного класу у межах іншого класу

д) оголошенні об’єкта одного класу у протоколі іншого класу

5. Принцип поліморфізму полягає у:

  1. зміні значень елементів даних об’єкта в ході виконання програми

  2. перевантаженні методів класу

  3. розмежуванні елементів об’єкта, які визначають його будову і поведінку

  4. реалізації віртуальних функцій наслідуваних класів різними способами

  5. багатократному використанні одного і того ж об’єкта

6. Принцип пізнього зв’язування полягає у:

  1. пов’язуванні методів з об’єктами під час компіляції програми

  2. пов’язуванні даних з об’єктами під час компіляції програми

  3. пов’язуванні конкретної реалізації віртуальних методів з об’єктами під час виконання програми

  4. перевантаженні методів класу

  5. оголошенні віртуальних методів чистими функціями

7. Клас мови С++ - це:

  1. структурований тип даних, який містить дані та методи для їх опрацювання

  2. множина елементів одного типу

  3. об’єднання елементів різного типу

  4. процес

  5. потік

8. Об’єкт (екземпляр) класу – це:

  1. оголошення класу

  2. визначення елементів класу

  3. змінна або константа з типом класу

  4. вказівник на клас

  5. функція програми

9. Встановіть відповідність між оголошенням рівнів захисту та правами доступу до елементів класу.

Рівні захисту:

  1. private

  2. protected

  3. public

Права доступу:

A. дані та методи класу доступні з усіх місць програми у межах дії встановленого простору імен

B. дані та методи доступні тільки для методів і друзів даного класу

C. дані та методи доступні для методів і друзів даного класу та похідних від нього класів

D. дані та методи доступні тільки для методів даного класу

  1. 1-D, 2-A, 3-B

  2. 1-B, 2-C, 3-A

  3. 1-A, 2-D, 3-C

  4. 1-C, 2-B, 3-D

  5. 1-B, 2-D, 3-A

10. Метод класу не може бути:

  1. звичайним, без модифікаторів в оголошенні

  2. константним

  3. статичним

  4. віртуальним

  5. зовнішнім

11. Які властивості не притаманні конструктору:

  1. призначений для ініціалізації полів даних класу

  2. допускає перевантаження

  3. викликається автоматично при створенні об’єкта

  4. може бути віртуальним

  5. існує за замовчуванням

12. Вкажіть, яке твердження для конструктора копіювання є хибним:

  1. викликається при передачі об’єкта у функцію або поверненні об’єкта з функції через вказівник або посилання

  2. не допускає перевантаження

  3. викликається при створенні нового об’єкта та його ініціалізації існуючим об’єктом цього ж класу

  4. викликається при передачі об’єкта у функцію або поверненні об’єкта з функції через список параметрів „по значенню”

  5. існує за замовчуванням

13. Які властивості притаманні деструктору:

  1. призначений для звільнення відведенної для об’єкта пам’яті

  2. допускає перевантаження

  3. може мати аргументи

  4. викликається тільки явно

  5. не може бути віртуальним

14. Друг класу:

  1. є методом класу

  2. наслідується

  3. має доступ до усіх частин класу

  4. може бути статичним

  5. може бути віртуальним

15. Операторні методи, крім (), [], ->, =, new, delete, не можуть бути:

  1. статичними

  2. друзями класу

  3. членами класу

  4. наслідуваними

  5. віртуальними

16. Вкажіть порушення доступу до елементів класу при наслідуванні:

  1. нащадок може викликати закритий метод, наслідуваний від свого предка

  2. нащадок може викликати захищений метод, наслідуваний від свого предка

  3. нащадок може викликати відкритий метод, наслідуваний від свого предка

  4. нащадок не надає права доступу до своїх елементів друзям предка

  5. предок не має прямого доступу до елементів класу-нащадка

17. Віртуальний метод не може бути:

  1. чистим

  2. динамічним

  3. наслідуваним

  4. статичним

  5. операторним

18. Вкажіть правильну відповідність між рівнями захисту даних

для protected-режиму наслідування класів.

Базовий клас: 1-private; 2-protected, 3-public

Наслідуваний клас: A-private; B-protected, C-public

  1. 1-A; 2-B; 3-C

  2. 1-A; 2,3-B

  3. 1,2,3-A

  4. 1,2-A; 3-B

  5. 1,2,3-B

19. Вкажіть яке твердження стосовно віртуальних методів є неправильним:

  1. Для кожного класу, який містить віртуальні методи, компілятор будує таблицю віртуальних методів (ТВМ).

  2. Кожен об'єкт класу містить захований вказівник на ТВМ.

  3. Компілятор автоматично включає у конструктор фрагмент коду для ініціалізації вказівника на ТВМ.

  4. Для будь-якої заданої ієрархії класів адреса віртуальної функції має однакове зміщення у всіх ТВМ.

  5. Різні об’єкти одного класу мають різні ТВМ.

20. Виберіть невірне твердження:

  1. Абстрактний клас містить один або декілька чистих віртуальних методів.

  2. Не можна оголосити об'єкт абстрактного класу

  3. Можна оголосити вказівник або посилання на абстрактний клас.

  4. Абстрактний клас не можна використати для явного перетворення типу, в якості типу аргументів або типу функції.

  5. Деструктор абстрактного класу не повинен бути віртуальним.

21. Визначіть дію, яка порушує послідовність виклику конструкторів при множинному наслідуванні класів:

  1. викликається конструктор похідного класу

  2. викликаються конструктори базових класів у порядку, вказаному у списку ініціалізації

  3. викликаються конструктори за замовчуванням для тих базових класів, які не вказані у списку ініціалізації; такі конструктори викликаються в порядку запису списку наслідування класів

  4. викликаються конструктори полів даних похідного класу;

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

22. Для забезпечення існування тільки одного екземпляра класу при множинному наслідуванні з загальною базою режим наслідування повинен бути:

  1. private

  2. protected

  3. public

  4. virtual

  5. static

23. Який із операторів забезпечує поліморфне приведення типів:

  1. const_cast

  2. static_cast

  3. dynamic_cast

  4. reinterpret_cast

  5. virtual_cast

24. Нехай А є іменем базового, а B – похідного класу. Визначіть, який обробник буде викликано при викиданні виключної ситуації throw B:

  1. catch(A)

  2. catch(B)

  3. catch(A*)

  4. catch(void *)

  5. catch(...)

25. Визначіть, яке твердження про операцію приведення типу є невірним:

  1. виконує перетворення типу класу в інший тип, в т.ч. у тип іншого класу

  2. оголошується як функція-член класу

  3. в протоколі класу може бути оголошена тільки одна операторна функція приведення типу

  4. операція приведення типу не має явної специфікації типу та не має аргументів

  5. може бути віртуальною, наслідується

26. Якщо бінарна операція перевантажується як член класу, то вона:

  1. не повинна мати аргументів

  2. повинна мати один (перший) аргумент з типом класу, посиланням або вказівником на клас

  3. повинна мати один аргумент (другий)

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

  5. повинна мати два аргументи, причому перший може мати будь-який тип

27. Визначіть варіант, коли не викликається конструктор перетворення типу:

  1. при ініціалізації об’єкта класу значенням, тип якого є відмінним від типу цього класу

  2. при явному перетворенні будь-якого типу до типу класу

  3. при передачі параметрів у функцію, коли формальний параметр має класовий тип, а фактичний - інший тип

  4. при поверненні значення функцією, коли функція має класовий тип, а вираз оператора return має інший тип

  5. при передачі об’єктів класу у функцію через список параметрів „по значенню”

28. Статичні дані класу:

  1. є спільними для усіх об’єктів класу та похідних від нього класів (при відсутності перевизначення у похідному класі)

  2. є окремими для об’єктів класу

  3. є окремими для об’єктів базового і похідного класів

  4. вимагають ініціалізації конструктором

  5. існують тільки після виділення пам’яті для об’єкта

29. Вкажіть правильний варіант потокового введення з клавіатури дійсного числа (float х;):

  1. x=cin.get();

  2. cin.get((char&)&x);

  3. cin.getline((char*)&x,sizeof(x),’\n’);

  4. cin>>x;

  5. cin.read((float*)&x,sizeof(x));

30. Вкажіть правильний варіант потокового введення дійсного числа з двійкового файлу:

char fname[]="1.txt";

float x;

ifstream ifs(fname,ios::in|ios::binary);

  1. ifs.getline((float*)&x,sizeof(x),’\n’);

  2. ifs.read((char *)&x,sizeof(x));

  3. гifs>>x;

  4. ifs.get((char&)&x);

  5. x=ifs.get();

ІІ. Дисципліна – „Об’єктно-орієнтоване програмування”

  1. Базові поняття об’єктно-орієнтованого програмування.

Об'єктно-орієнтоване програмування - це новий спосіб підходу до програмування. Таке програмування, узявши кращі риси структурного програмування, доповнює його новими ідеями, які переводять в нову якість підхід до створення програм. Найбільш важливе поняття мов об'єктно-орієнтованого програмування - це поняття об'єкту (object). Об'єкт - це логічна одиниця, яка містить дані і правила (методи) обробки цих даних. У мові С++ як такі правила обробки виступають функції, тобто об'єкт в Borland C++ об'єднує в собі дані і функції, оброблювальні ці дані. Одним з найголовніших понять мови С++ є поняття класу (class). На мові С++ для того, щоб визначити об'єкт, треба спочатку визначити його форму за допомогою ключового слова class. Найближчою аналогією класу є структура. Пам'ять виділяється об'єкту тільки тоді, коли клас використовується для його створення.

Цей процес називається створенням екземпляра класу (class instance). Будь-який об'єкт мови С++ має однакові атрибути і функціональність з іншими об'єктами того ж класу. За створення своїх класів і поведінку об'єктів цих класів повну відповідальність несе сам програміст. Працюючи в деякому середовищі, програміст дістає доступ до обширних бібліотек стандартних класів. Зазвичай, об'єкт знаходиться в деякому унікальному стані, визначуваному поточними значеннями його атрибутів. Функціональність об'єктного класу визначається можливими операціями над екземпляром цього класу. Шаблони, або типи, що параметризуються, дозволяють конструювати сімейство зв'язаних функцій або класів. Узагальнений синтаксис визначення шаблону має вигляд:template список шаблонних типів. Розрізняють шаблони функцій і шаблони класів. Шаблон класів задає зразок визначень сімейства класів. Над елементами цього класу, що типізуються, виконуються однакові базові операції незалежно від конкретного типу елементів.

  1. Технології та інструментальні засоби проектування програмних систем.

  1. Розширення мови С++.

Перш ніж перейти безпосередньо до дослідження конструктивних особливостей мови програмування C #, розглянемо хід його розвитку.

Історія основної гілки мов програмування, яка призвела до появи C #, сходить до 60-х років, а саме, до часу виникнення мови B. Останній є типовим представником ранніх імперативних мов програмування. Мова B була придумана у 1963 році творчим колективом розробників, основним творцем мови прийнято вважати К. Томпсона з Технологічного інституту Массачусетсу (Ken Thompson, MIT). Основною метою розробки мови була реалізація операційної системи UNIX. Вже існувала мова PL / I, що застосовувалася у той час для мейнфреймів виробництва компанії IBM, була досить громіздкою і менше підходила для поставленої задачі, ніж нове, оригінальне рішення вчених-практиків.

Наступним кроком в "алфавіті" мов програмування, провідному до мови C #, стала мова C, яка була винайдена на основі мови B в 1972 році. Авторами нової мови програмування стали К. Томпсон і Д. Рітчі (Dennis Ritchie), які працювали в дослідницькій лабораторії компанії AT & T (AT & T Bell Telephone Laboratories). У варіанті C мови B розширився за рахунок явного використання типів, структур і ряду нових операцій. Подальший розвиток мови відбувалося в тій же організації. І знову приблизно через 10 років, в 1984 році, Б. Страуструп (Bjarne Stroustrup, Bell Labs) виступив з проектом мови С + + - ООП-розширення мови C, в якому вводиться поняття класу як об'єкта даних.

Зауважимо, що назва C + + для нової мови запропонував Р. Маскітті (Rics Mascitti, Bell Labs).

Нарешті, вже в 2000 році, тобто більш ніж через 15 років, корпорація Microsoft випустила у світ C + + нового покоління під назвою C # ("Сі шарп"), основним постулатом якого є вислів: "будь-яка сутність є об'єкт". Мова заснована на строгій компонентній архітектурі і реалізує передові механізми забезпечення безпеки коду.

Як вже зазначалося в ході лекції, мова програмування C # об'єднала кращі риси цілого ряду попередників. Крім згаданої раніше гілки мов BC-C + +, необхідно вказати ще кілька знакових для нашого часу мов програмування, а саме, Java і Visual Basic.

Незважаючи на дуже серйозні розбіжності між компонентною об'єктною моделлю COM (основного стандарту Microsoft для компонентного проектування та реалізації програмного забезпечення) і моделлю Java Beans, базовим стандартом Sun Microsystems для компонента (залежної від мови реалізації), мова програмування C # має досить багато спільного з мовою Java . Природно, чимало рис мова програмування C # успадкував і від свого попередника, створеного корпорацією Microsoft, мови Visual Basic.

Як вже зазначалося, мова програмування C # заснований на строгій компонентній архітектурі і реалізує передові механізми забезпечення безпеки коду.

Перелічимо найбільш характерні риси подібності мов програмування C # і Java. Перш за все, обидві мови належать до категорії об'єктно-орієнтованих і припускають єдиність наслідування. Іншими важливими особливостями, які зближують мови програмування C # і Java, є механізми інтерфейсів, обробки виняткових ситуацій, а також процесів або "ниток" (threads). "Збірка сміття" і простору імен реалізовані у цих двох мовах подібним чином. Обидві мови програмування характеризуються сильною (суворою) типізацією та динамічним завантаженням коду при виконанні програми.

Від свого прямого попередника, мови програмування C + +, мовою C # успадковані наступні механізми: "перевантажені" оператори, небезпечні арифметичні операції з плаваючою точкою, а також ряд інших особливостей синтаксису. Але незважаючи на те, що цілий ряд конструктивних синтаксичних механізмів і особливостей реалізації успадкований мовою програмування C # від прабатьків (C + +, Visual Basic і Java), можливості цього нового мови програмування не обмежуються сумою можливостей його історичних попередників.