Поліморфізм і його реалізація через віртуальні функції 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Поліморфізм і його реалізація через віртуальні функції



Курсова робота

з предмету «Об'єктно-орієнтоване програмування»

Тема: "Створення бази даних «Розклад потягів»"

 

Студента III курсу групи ПР-9-12

напрямку підготовки: програмна інженерія

спеціальності: розробка програмного забезпечення

Гребенюка Івана Андрійовича

Керівник викладач вищої категорії Морозова О.В.

 

Національна шкала _________________________

 

Члени комісії _______ _________________

 

_______ _________________

 

_______ ________________

 

 

Сміла 2014


ЗАВДАННЯ

Для курсового проекту з предмету «Об'єктно-орієнтоване програмування»

Студента Гребенюка Івана Андрійовича

Тема: Створення бази даних «Розклад потягів»

Курсовий проект на вказану тему виконується студентом коледжу в слідуючому обсязі:

ПОЯСНЮВАЛЬНА ЗАПИСКА


Вступ

1. Абстрагування

2. Інкапсуляція

3. Успадкування

4. Поліморфізм

операцій

5. Класи

6. Потоки введення/виведення С++

7. Динамічний розподіл пам’яті

Висновок

Список використаної літератури

Додаток 1. Лістинг програми

Додаток 2. Результати роботи програми

Додаток 3. CD-диск з програмою


 

РОЗРАХУНКОВА ЧАСТИНА

Базу даних “Розклад потягів” описати через клас який має поля:

¾ Назва пункту призначення;

¾ Номер потягу;

¾ Час відправлення.

В класі мають бути методи:

¾ введення даних в масив об’єктів;

¾ дані відсортувати по назві пункту призначення;

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

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

 

 

Дата видачі ______________________ ____р.

 

Термін закінчення ________________ ____ р.

 

Зав.відділенням _______________

Викладач _____________________

РЕЦЕНЗІЯ

 

Студента _________________________________________________________

Групи ПР 9-12

Спеціальність 5.05010301

2. З дисципліни Об'єктно-орієнтоване програмування

Тема курсової роботи _______________________________________

__________________________________________________________

3. Позитивні сторони _______________________________________

_________________________________________________________

_________________________________________________________

_________________________________________________________

_________________________________________________________

_________________________________________________________

__________________________________________________________________________________________________________________

 

4. Недоліки курсової роботи, включаючи стиль і грамотність написання _________________________________________________

_________________________________________________________

_________________________________________________________

_________________________________________________________

_________________________________________________________

_________________________________________________________

_________________________________________________________

5. Попередня оцінка курсової роботи: _________________

 

□ Робота допускається до захисту

□ Робота не допускається до захисту

 

Кінцева оцінка дається після захисту роботи: _______________

 

«___» _________________ 20__р. ____________/Морозова О.В./

 

Зміст

 

Вступ. 5

1. Абстрагування. 6

2. Інкапсуляція. 7

3. Успадкування. 8

3.1 Загальні поняття. 8

3.2 Одиночне успадкування. 9

4. Поліморфізм. 10

4.1 Загальні поняття. 10

4.2 Поліморфізм і його реалізація через віртуальні функції 11

4.3 Абстрактні та віртуальні базові класи. 12

4.4 Перевантаження функцій і операцій. 13

5. Класи. 15

5.1 Інтерфейс і реалізація в класі 15

5.2 Конструктори і деструктори. 17

6. Потоки введення/виведення С++. 18

7. Динамічний розподіл пам’яті 19

8.Висновок. 21

9.Список використаної літератури. 22

Додаток 1. Лістинг програми. 23

Додаток 2. Результати роботи програми. 28

Додаток 3. CD – диск з програмою.. 34

 


Вступ

До кінця 1970-х розмір проектів став наближатися до критичного, при перевищенні якого методика структурного програмування і язик С "опускали руки". Тому стали з'являтися нові підходи до програмування, що дозволяють вирішити цю проблему. Один з них одержав назву об’єктно - орієнтованного програмування (ООП). Використовуючи ООП, програміст міг впоратися із програмами набагато більшого розміру, чим колись. Але все лихо полягало в тому, що С, сама популярна на той час мова, не підтримувала ООП. Бажання працювати з об’єктно-орієнтированою версією язика С і привело до створення C++.
Мова C++ була розроблена Бьярни Страуструпом у компанії Bell Laboratories, і роком створення вважається 1979-й. Спочатку творець нової мови назвав його "С с класами", але в 1983 році це ім'я було змінено на C++. C++ повністю включає елементи мови С. Таким чином, С можна вважати фундаментом, на якому побудований C++. Більшість доповнень, які Страуструп вніс у С, були призначені для підтримки ООП. По суті, C++ - це об’єктно-орієнтирована версія мови С.
Зводячи "будинок" C++ на фундаменті С, Страуструп забезпечив плавний перехід багатьох програмістів на "рейки" ООП. Замість необхідності вивчати зовсім нова мова, С-програмістові досить було освоїти лише нові засоби, що дозволяють використати переваги обєктно-орієнтированої методики.
Протягом 1980-х років C++ інтенсивно розвивався й до початку 1990-х уже була готова для широкого використання. Ріст його популярності носив вибухоподібний характер, і до кінця цього десятиліття він став самим широко використовуваною мовою програмування. У наші дні мова C++ як і раніше має незаперечна перевага при розробці високопродуктивних програм системного рівня.

Абстрагування

 

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

Це важливий інструмент ООП поряд з поліморфізмом, успадкуванням та інкапсуляцією.

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

Фундаментальна ідея полягає в розділенні несуттєвих деталей реалізації підпрограми і характеристик, істотних для коректного її використання. Такий поділ може бути виражено через спеціальний «інтерфейс», зосереджують опис всіх можливих застосувань програми.

Інкапсуляція

 

 

Інкапсуляція — один з трьох основних механізмів об'єктно-орієнтованого програмування. Йдеться про те, що об’єкт вміщує не тільки дані, але і правила їх обробки, оформлені в вигляді виконуваних фрагментів (методів). А також про те, що доступ до стану об'єкта напряму заборонено, і ззовні з ним можна взаємодіяти виключно через заданий інтерфейс (відкриті поля та методи), що дозволяє знизити зв'язність. Таким чином контролюються звернення до полів класів та їхня правильна ініціалізація, усуваються можливі помилки пов'язані з неправильним викликом методу. Оскільки користувачі працюють лише через відкриті елементи класів, то розробники класу можуть як-завгодно змінювати всі закриті елементи і навіть перейменовувати та видаляти їх, не турбуючись, що десь хтось їх використовує у своїх програмах.

Користувач не може використовувати закриті дані і методи. Реалізується за допомогою ключових слів: private, protected, internal.

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


 

Успадкування

 

Загальні поняття

 

В об'єктно-орієнтованому програмуванні, успадкува́ння — механізм утворення нових класів на основі використання вже існуючих. При цьому властивості і функціональність батьківського класу переходять до класу нащадка(дочірнього).

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

Застосування механізму успадкування дозволяє покращити повторне використання коду шляхом використання вже визначених властивостей та методів (поведінки) базових класів.

 

Приклад успадкування в С++:

class Tehnikum{ //базовий клас

};

class Student: public Tehnikum { //public успадкування

};

class Ychitelya: protected Tehnikum { //protected успадкування

};

class Inshi_pracivniki: private Tehnikum { //private успадкування

};

 

Одиночне успадкування

 

Клас може мати «підкласи», спеціалізовані, розширені версії надкласу. Можуть навіть утворюватись цілі дерева успадкування. Наприклад, клас Собака може мати підкласи Коллі, Пекінес, Вівчарка і т.п. Так, Сірко може бути екземпляром класу Вівчарка. Підкласи успадковують атрибути та поведінку своїх батьківських класів, і можуть вводити свої власні. Успадкування може бути одиничне (один безпосередній батьківський клас) та множинне (кілька батьківських класів). Це залежить від вибору програміста, який реалізовує клас та мови програмування.

Множинне успадкування — властивість деяких об'єктно орієнтовних мов програмування, в яких класи можуть успадкувати поведінку і властивості більш ніж від одного суперкласу (безпосереднього батьківського класу). Це відрізняється від простого успадкування, у випадку якого клас може мати тільки один суперклас.

Одиничне успадкування — властивість деяких об'єктно орієнтовних мов програмування, в яких класи можуть успадкувати поведінку і властивості тільки від одного класу.


 

Поліморфізм

 

Загальні поняття

 

 

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

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

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

Спільні властивості об'єктів об'єднуються в систему, яку можуть називати по різному: інтерфейс, клас. Спільність має зовнішнє і внутрішнє вираження. Зовнішня спільність проявляється як однаковий набір методів з однаковими іменами і сигнатурами (типами аргументів і результатів).Внутрішня спільність є однакова функціональність методів. Її можна описати інтуїтивно виразити у вигляді строгих законів, правил, яким повинні підкорятись методи. Можливість приписувати різну функціональність одному методу (функції, операції) називається перевантаженням методу.

 

Класи

Конструктори і деструктори

 

Конструктор викликається щоразу, коли створюється об'єкт даного типу; деструктор — при знищенні. При перетвореннях типів, присвоєнні, передачі параметра теж викликаються конструктори і при необхідності деструктори. Конструктор викликається автоматично. Конструктор – це метод класу, який має ім’я класу, він ініціалізує об’єкти класу. Деструктор руйнує об’єкти, звільняє пам'ять. Він також має ім’я класу, але з символом на початку «~». Конструктор і деструктор протилежні один від одного і завжди оголошуються в розділі public. При оголошення конструктора та деструктора не вказується тип даних, вони не повертають значення. В класі можна створювати декілька конструкторів і вони можуть бути з параметрами, деструктор в класі може бути тільки один.

Приклад:

class rozklad_potyagiv //Клас "Розклад потягiв"

{

public: //Оголошення публiчного доступу до наведених нижче змiнних та методiв

string punkt_priznachennya; //Оголошення змiнної "Пункт призначення"

string nomer_potyagy; //Оголошення змiнної "Номер потягу"

rozklad_potyagiv(); //Конструктор

~rozklad_potyagiv(); //Деструктор

};

rozklad_potyagiv::rozklad_potyagiv() //Конструктор

{

punkt_priznachennya=nomer_potyagy="\nПусто";//Надається змiнним значення "Пусто"}

rozklad_potyagiv::~rozklad_potyagiv() //Деструктор

{

//Працює деструктор

}

6. Потоки введення/виведення С++

 

Введення / виведення на найнижчому рівні інтерпретується як передача послідовності байтів між об'єктами. Ця послідовність байтів називається потоком. На цьому рівні поняття типу даних відсутня. У мові С ++ управління потоками здійснюється за допомогою функцій бібліотеки вводу / виводу, успадкованої від С і оголошеної в заголовному файлі «iostream», або за допомогою операторів потоку введення / виведення. До переваг першого способу відноситься можливість більш гнучкого управління форматуванням і його повна сумісність з С. Використовуючи оператори потоку введення / виводу, можна не замислюватися про форматах виведення інформації, якщо це не має принципового значення. Крім того, цей метод дозволяє перевизначити форму виводу для будь-якого класу.

Функції введення/виведення:
cin>> //Введення;

cout<< //Виведення;

printf () //Виведення;

scanf() //Введення.

Для файлів:

fprintf () //Виведення;

fscanf () //Введення.


 

Динамічний розподіл пам’яті

 

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

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

Завдання виконання запиту розподілу полягає в знаходженні блока невикористаної пам'яті достатнього розміру.

Проблеми при виконанні запиту розподілу:

Внутрішня і зовнішня фрагментації. Зменшення фрагментації потребує особливої уваги, що робить реалізацію складнішою. Виділення метаданих може збільшити кількість (окремих) малих виділень; Формування блоків намагається зменшити цей ефект.

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

Мова С ++ визначає два оператора динамічного виділення пам'яті - new і delete. Операції new і delete призначені для динамічного розподілу пам'яті комп'ютера. Операція new виділяє пам'ять з області вільної пам'яті, а операція delete вивільняє виділену пам'ять. Виділювана пам'ять, після її використання повинна вивільнятися, тому операції new і delete використовуються парами. Навіть якщо не вивільняти пам'ять явно, то вона звільниться ресурсами ОС по завершенню роботи програми. Операція new створює об'єкт заданого типу, виділяє йому пам'ять і повертає вказівник правильного типу на дану ділянку пам'яті. Якщо пам'ять неможливо виділити, наприклад, у разі відсутності вільних ділянок, то повертається нульовий вказівник, тобто вказівник поверне значення 0. Виділення пам'яті можливо під будь-який тип даних: int, float, double, char і т.д.

Приклад:

int * kyrsova = new int;

delete kyrsova;

 


 

Висновок

На данній курсовій роботі було створено базу даних «Розклад потягів» з масивом об’єктів, конструктом, деструктором, методами вводу / виводу, методом сортування по «пункту призначенню» бульбашковим способом, пошуку по часу відправлення. Також в програмі було створено додаткова функція «автозаповнення» і функція «справка». Введення / виведення здійснюється через масив об’єкту «china[5]» (china - китай) класу «rozklad_potyagiv». Функція «автозаповнення» може автоматично заповнити 5 об’єктів масиву china[5].

Функція «справка» виводить дані: який студент створив програму (курсову), на яку тему (Розклад потягів) та з якими можливостями (функціями та методами). Дана програма була протестована різними комбінаціями, для перевірки її робото – здатності.

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

На данній курсовій роботі я закріпив знання по темі «класи» в об’єктно – орієнтованому програмуванні.

Додаток 1. Лістинг програми

#include <cstdlib>

#include <iostream>

#include <string.h>

using namespace std;

 

class rozklad_potyagiv //Клас "Розклад потягiв"

{

public: //Оголошення публiчного доступу до наведених нижче змiнних та методiв

string punkt_priznachennya; //Оголошення змiнної "Пункт призначення"

string nomer_potyagy; //Оголошення змiнної "Номер потягу"

string chas_vidpravlenya; //Оголошення змiнної "Час вiдправлення"

rozklad_potyagiv(); //оглошення конструктора

void vvod(); //Оглошення методу класу - "Введення даних"

void vuvod(); //Оглошення методу класу - "Виведення даних"

void sort_punkt_priznachnya(); /*Оголошення методу сортуван-ня*/

void vuvod_po_poisky(); /*Оголошення методу пошуку по часу*/

~rozklad_potyagiv(); //Оголошення деструктора

}china[5]; //Оголошення масиву об’єктів

rozklad_potyagiv::rozklad_potyagiv() //Конструктор

{

punkt_priznachennya=nomer_potyagy="\nПусто";//Надається змiнним значення "Пусто"

chas_vidpravlenya="\nПусто";//Надається змiнним значення "Пусто"

}

rozklad_potyagiv::~rozklad_potyagiv() //Деструктор

{

//Працює деструктор

}

/* Методи */

void rozklad_potyagiv::vvod() //Описує метод "Введення даних" класу "Розклад потягiв"

{

cout<<"Введiть пункт прибуття:\t\t";

cin>>punkt_priznachennya;

cout<<"Введiть номер поїзду:\t\t";

cin>>nomer_potyagy;

cout<<"Введiть час вiдправлення:\t";

cin>>chas_vidpravlenya;

}

void rozklad_potyagiv::vuvod() //Описує метод "Виведення даних" класу "Розклад потягiв"

{

cout<<"\n\nПункт прибуття:\t\t"<<punkt_priznachennya<<'\n';

cout<<"Номер поїзду:\t\t"<<nomer_potyagy<<'\n';

cout<<"Час вiдправлення:\t"<<chas_vidpravlenya<<'\n';

}

void rozklad_potyagiv::vuvod_po_poisky()/*Опис функцiї пошуку по часу*/

{

string chas_poisk; //Оголошення змiнної, по якiї буде вiдбуватись пошук по часу

int i,k=0;

cout<<"\n_____________________________________________________________\n";

cout<<"\t\tВведiть час для пошуку: = ";

cin>>chas_poisk;

for(i=0;i<5;i++)

if(china[i].chas_vidpravlenya==chas_poisk) /*Перевiрка умови, якщо умова виконується, то повертає значення "iстина"*/

{

cout<<"\t\t*******************\n\t\t\tНайдено\t\t\n\t\t*******************\n";

china[i].vuvod();k++;

}

if(k==0) cout<<"Не найдено!\n"; /*Перевiрка умови, якщо не буде знайдено даних по часу, то виведеться повiдомлення*/

}

void rozklad_potyagiv::sort_punkt_priznachnya() /*Опис методу сортування по пункту призначення(це бульбашкови метод сортування)*/

{

for (int i = 0; i < 5; i++)

for (int j = 0; j < 5; j++)

if (china[i].punkt_priznachennya <= china[j].punkt_priznachennya)

swap(china[i], china[j]); /*Функцiя swap() обмiнює значення своїх аргументiв, в даному випадку*/

//змiннi будуть розашовуватись по алфавiту

}

/* Функцiї */

void spravka();

void dop_f_autozapolnenie(); //Додаткова функція "Автозаповнення"

//Головна функцiя

int main()

{

setlocale(LC_ALL,"Russian"); //Функція для виводу в консолі кирилицю

spravka(); //Виклик справки

int menu; //Оголошення змiнної, для введення вибору

while(1) //Цикл з передумовою

{

cout<<"\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";

cout<<"\t\tКурсова робота на тему \"Розклад потягiв\"\n";

cout<<"\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";

cout<<"\t\t\t0.Вихiд\n";

cout<<"1.Ввести данi\t\t\t\t2.Вивiд всiх отриманих даних\n";

cout<<"3.Очистити консоль\t\t\t4.Пошук по часу вiдправлення\n";

cout<<"5.Автозаповнення\t\t\t6.Справка\n";

cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";

cout<<"Ваш вибiр: ";

cin>>menu; //Введення вибору

switch(menu) //Оператор вибору

{

case 1:

cout<<"\n~~~~~~~~~~~~~~~Ввод даних~~~~~~~~~~~~~~~~~~~\n";

for(int i=0;i<5;i++)

{

cout<<"\n~*~*~*#Заповнення пункту номер "<<i+1<<"#~*~*~*~*~**~\n";

china[i].vvod();

}

break;

case 2:

china[0].sort_punkt_priznachnya(); /*Викликаємо через будь який (в даному випадку через "0") обєкт масиву метод "сортування"*/

cout<<"\n~~~~~~~~~~~~~~~Вивiд даних~~~~~~~~~~~~~~~~~~~\n";

for(int i=0;i<5;i++)

{

cout<<"\n~*~*~*#Отриманi данi номер "<<i+1<<"#~*~*~*~*~**~\n";

china[i].vuvod();

}

;break;

case 0:return 0;break;

case 3:system("cls");break;

case 4:china[0].vuvod_po_poisky();break; /*Викликаємо через будь який (в даному випадку через "0") обєкт масиву метод "пошуку по часу"*/

case 5:dop_f_autozapolnenie();break;

case 6:spravka();break;

default:cout<<"Невiрно вибраний пункт меню!\tВиберiть заново:\n";

break;

}

}

system("PAUSE>>int"); //Консольна команда паузи

}

void dop_f_autozapolnenie() //Опис функції "Автозаповнення"

{

string dop_punkt_prizn[5],dop_ch_vidp[5],dop_n_p[5]; //масиви рядкiв

dop_punkt_prizn[0]="Балаклея";dop_punkt_prizn[1]="Санжариха";

dop_punkt_prizn[2]="Одеса";dop_punkt_prizn[3]="Смела";

dop_punkt_prizn[4]="Севастополь";

dop_ch_vidp[0]="1:05";dop_ch_vidp[1]="15:45";

dop_ch_vidp[2]="16:30";dop_ch_vidp[3]="19:00";

dop_ch_vidp[4]="8:15";

dop_n_p[0]="ЛОДР-1548";dop_n_p[1]="ОРКС-0156";

dop_n_p[2]="НАДР-1789";dop_n_p[3]="МЕРТ-3655";

dop_n_p[4]="ПРИТ-7845";

int i;

for(i=0;i<5;i++)

{

china[i].punkt_priznachennya=dop_punkt_prizn[i];

china[i].chas_vidpravlenya=dop_ch_vidp[i];

china[i].nomer_potyagy=dop_n_p[i];

}

}

void spravka()

{

cout<<"Дана курсова робота написана на мовi С++\n";

cout<<"На тему \"Розклад поїздiв\"\n";

cout<<"Виконав студент групи ПР - 9 - 12\n";

cout<<"Гребенюк Iван Андрiйович\n";

cout<<"З предмету Обєктно - орiєнтоване програмування\n";

cout<<"///////////////////////////////////////////////\n";

cout<<"В даннiй програмi є можливiсть вводити данi,\n";

cout<<"виводити даннi, їх сортувати та виводити вже вiдсортовану iнформацiю\n";

cout<<"про розклад потягiв.\n";

cout<<"В данiй програмi є клас \"розклад потягiв\",\n";

cout<<"в якому є метод вводу даних в об\'єкт,\n";

cout<<"виводу їх, також є метод сортування та пошуку даних.\n";

cout<<"Також в програмi присутня головна функцiя main() \n";

cout<<"в якому мiститься меню вибору певної дiї.\n";

cout<<"Є функцiя автозаповнення, яка автоматично заповнює даннi\n";

cout<<"в нiй автоматично може заповнитись до 5 об\'єктiв\n";

cout<<"///////////////////////////////////////////////\n";

}

Курсова робота

з предмету «Об'єктно-орієнтоване програмування»

Тема: "Створення бази даних «Розклад потягів»"

 

Студента III курсу групи ПР-9-12

напрямку підготовки: програмна інженерія

спеціальності: розробка програмного забезпечення

Гребенюка Івана Андрійовича

Керівник викладач вищої категорії Морозова О.В.

 

Національна шкала _________________________

 

Члени комісії _______ _________________

 

_______ _________________

 

_______ ________________

 

 

Сміла 2014


ЗАВДАННЯ

Для курсового проекту з предмету «Об'єктно-орієнтоване програмування»

Студента Гребенюка Івана Андрійовича

Тема: Створення бази даних «Розклад потягів»

Курсовий проект на вказану тему виконується студентом коледжу в слідуючому обсязі:

ПОЯСНЮВАЛЬНА ЗАПИСКА


Вступ

1. Абстрагування

2. Інкапсуляція

3. Успадкування

4. Поліморфізм

операцій

5. Класи

6. Потоки введення/виведення С++

7. Динамічний розподіл пам’яті

Висновок

Список використаної літератури

Додаток 1. Лістинг програми

Додаток 2. Результати роботи програми

Додаток 3. CD-диск з програмою


 

РОЗРАХУНКОВА ЧАСТИНА

Базу даних “Розклад потягів” описати через клас який має поля:

¾ Назва пункту призначення;

¾ Номер потягу;

¾ Час відправлення.

В класі мають бути методи:

¾ введення даних в масив об’єктів;

¾ дані відсортувати по назві пункту призначення;

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

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

 

 

Дата видачі ______________________ ____р.

 

Термін закінчення ________________ ____ р.

 

Зав.відділенням _______________

Викладач _____________________

РЕЦЕНЗІЯ

 

Студента _________________________________________________________

Групи ПР 9-12

Спеціальність 5.05010301

2. З дисципліни Об'єктно-орієнтоване програмування

Тема курсової роботи _______________________________________

__________________________________________________________

3. Позитивні сторони _______________________________________

_________________________________________________________

_________________________________________________________

_________________________________________________________

_________________________________________________________

_________________________________________________________

__________________________________________________________________________________________________________________

 

4. Недоліки курсової роботи, включаючи стиль і грамотність написання _________________________________________________

_________________________________________________________

_________________________________________________________

_________________________________________________________

_________________________________________________________

_________________________________________________________

_________________________________________________________

5. Попередня оцінка курсової роботи: _________________

 

□ Робота допускається до захисту

□ Робота не допускається до захисту

 

Кінцева оцінка дається після захисту роботи: _______________

 

«___» _________________ 20__р. ____________/Морозова О.В./

 

Зміст

 

Вступ. 5

1. Абстрагування. 6

2. Інкапсуляція. 7

3. Успадкування. 8

3.1 Загальні поняття. 8

3.2 Одиночне успадкування. 9

4. Поліморфізм. 10

4.1 Загальні поняття. 10

4.2 Поліморфізм і його реалізація через віртуальні функції 11

4.3 Абстрактні та віртуальні базові класи. 12

4.4 Перевантаження функцій і операцій. 13

5. Класи. 15

5.1 Інтерфейс і реалізація в класі 15

5.2 Конструктори і деструктори. 17

6. Потоки введення/виведення С++. 18

7. Динамічний розподіл пам’яті 19

8.Висновок. 21

9.Список використаної літератури. 22

Додаток 1. Лістинг програми. 23

Додаток 2. Результати роботи програми. 28

Додаток 3. CD – диск з програмою.. 34

 


Вступ

До кінця 1970-х розмір проектів став наближатися до критичного, при перевищенні якого методика структурного програмування і язик С "опускали руки". Тому стали з'являтися нові підходи до програмування, що дозволяють вирішити цю проблему. Один з них одержав назву об’єктно - орієнтованного програмування (ООП). Використовуючи ООП, програміст міг впоратися із програмами набагато більшого розміру, чим колись. Але все лихо полягало в тому, що С, сама популярна на той час мова, не підтримувала ООП. Бажання працювати з об’єктно-орієнтированою версією язика С і привело до створення C++.
Мова C++ була розроблена Бьярни Страуструпом у компанії Bell Laboratories, і роком створення вважається 1979-й. Спочатку творець нової мови назвав його "С с класами", але в 1983 році це ім'я було змінено на C++. C++ повністю включає елементи мови С. Таким чином, С можна вважати фундаментом, на якому побудований C++. Більшість доповнень, які Страуструп вніс у С, були призначені для підтримки ООП. По суті, C++ - це об’єктно-орієнтирована версія мови С.
Зводячи "будинок" C++ на фундаменті С, Страуструп забезпечив плавний перехід багатьох програмістів на "рейки" ООП. Замість необхідності вивчати зовсім нова мова, С-програмістові досить було освоїти лише нові засоби, що дозволяють використати переваги обєктно-орієнтированої методики.
Протягом 1980-х років C++ інтенсивно розвивався й до початку 1990-х уже була готова для широкого використання. Ріст його популярності носив вибухоподібний характер, і до кінця цього десятиліття він став самим широко використовуваною мовою програмування. У наші дні мова C++ як і раніше має незаперечна перевага при розробці високопродуктивних програм системного рівня.

Абстрагування

 

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

Це важливий інструмент ООП поряд з поліморфізмом, успадкуванням та інкапсуляцією.

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

Фундаментальна ідея полягає в розділенні несуттєвих деталей реалізації підпрограми і характеристик, істотних для коректного її використання. Такий поділ може бути виражено через спеціальний «інтерфейс», зосереджують опис всіх можливих застосувань програми.

Інкапсуляція

 

 

Інкапсуляція — один з трьох основних механізмів об'єктно-орієнтованого програмування. Йдеться про те, що об’єкт вміщує не тільки дані, але і правила їх обробки, оформлені в вигляді виконуваних фрагментів (методів). А також про те, що доступ до стану об'єкта напряму заборонено, і ззовні з ним можна взаємодіяти виключно через заданий інтерфейс (відкриті поля та методи), що дозволяє знизити зв'язність. Таким чином контролюються звернення до полів класів та їхня правильна ініціалізація, усуваються можливі помилки пов'язані з неправильним викликом методу. Оскільки користувачі працюють лише через відкриті елементи класів, то розробники класу можуть як-завгодно змінювати всі закриті елементи і навіть перейменовувати та видаляти їх, не турбуючись, що десь хтось їх використовує у своїх програмах.

Користувач не може використовувати закриті дані і методи. Реалізується за допомогою ключових слів: private, protected, internal.

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


 

Успадкування

 

Загальні поняття

 

В об'єктно-орієнтованому програмуванні, успадкува́ння — механізм утворення нових класів на основі використання вже існуючих. При цьому властивості і функціональність батьківського класу переходять до класу нащадка(дочірнього).

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

Застосування механізму успадкування дозволяє покращити повторне використання коду шляхом використання вже визначених властивостей та методів (поведінки) базових класів.

 

Приклад успадкування в С++:

class Tehnikum{ //базовий клас

};

class Student: public Tehnikum { //public успадкування

};

class Ychitelya: protected Tehnikum { //protected успадкування

};

class Inshi_pracivniki: private Tehnikum { //private успадкування

};

 

Одиночне успадкування

 

Клас може мати «підкласи», спеціалізовані, розширені версії надкласу. Можуть навіть утворюватись цілі дерева успадкування. Наприклад, клас Собака може мати підкласи Коллі, Пекінес, Вівчарка і т.п. Так, Сірко може бути екземпляром класу Вівчарка. Підкласи успадковують атрибути та поведінку своїх батьківських класів, і можуть вводити свої власні. Успадкування може бути одиничне (один безпосередній батьківський клас) та множинне (кілька батьківських класів). Це залежить від вибору програміста, який реалізовує клас та мови програмування.

Множинне успадкування — властивість деяких об'єктно орієнтовних мов програмування, в яких класи можуть успадкувати поведінку і властивості більш ніж від одного суперкласу (безпосереднього батьківського класу). Це відрізняється від простого успадкування, у випадку якого клас може мати тільки один суперклас.

Одиничне успадкування — властивість деяких об'єктно орієнтовних мов програмування, в яких класи можуть успадкувати поведінку і властивості тільки від одного класу.


 

Поліморфізм

 

Загальні поняття

 

 

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

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

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

Спільні властивості об'єктів об'єднуються в систему, яку можуть називати по різному: інтерфейс, клас. Спільність має зовнішнє і внутрішнє вираження. Зовнішня спільність проявляється як однаковий набір методів з однаковими іменами і сигнатурами (типами аргументів і результатів).Внутрішня спільність є однакова функціональність методів. Її можна описати інтуїтивно виразити у вигляді строгих законів, правил, яким повинні підкорятись методи. Можливість приписувати різну функціональність одному методу (функції, операції) називається перевантаженням методу.

 

Поліморфізм і його реалізація через віртуальні функції

 

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



Поделиться:


Последнее изменение этой страницы: 2016-04-23; просмотров: 638; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.43.140 (0.312 с.)