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

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
О
Факультет:
КН
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2018
Тип роботи:
Курсова робота
Предмет:
Об’єктно-орієнтоване програмування

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет «Львівська Політехніка» Кафедра ЕОМ Курсова робота з предмету: «Програмування, частина 2 (Об’єктно- орієнтоване програмування)» на тему: «Базові принципи об’єктно-орієнтованого програмування» Індивідуальне завдання: «Кафе» АНОТАЦІЯ ЗМІСТ ВСТУП ОГЛЯД ТА ОБҐРУНТОВУВАННЯ ВИБОРУ ТЕХНОЛОГІЙ ОБ’ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ Об'єктно-орієнтоване програмування (ООП) - це модель програмування яка базується на стверджені того, що програма це сукупність об’єктів які взаємодіють між собою. Кожен об’єкт в цій моделі є незалежним, і він здатний отримувати, обробляти дані та відправляти ці дані іншим об’єктам. В ООП використано моделі успадкування, модульності, поліморфізму та інкапсуляції. Успадкування (наслідування) – це здатність об’єктів (класів) переймати деякі властивості у своїх прабатьків. Це призводить до повторного використання вже написаного одного разу коду. Дочірні класи успадковують атрибути та поведінку своїх батьківських класів, і можуть мати нові власні атрибути. Тобто утворюється ієрархія з класів, де від основного класу (так званого, предка) походять усі інші класи. Наслідування дозволяє спростити програму, адже не потрібно для кожного дочірнього класу прописувати код вже написаний у батьківському, а всього-на-всього викликати і використовувати його. Кількість дочірніх класів є необмеженою. Тому добре продуманий алгоритм може суттєво зменшити обсяг загального коду і відповідно пришвидшити виконання програми. Ця властивість ООП є дуже вагомою, коли йдеться мова про великі проекти, де наслідування крім спрощення, ще додає читабельності. Інкапсуляція – зміст якої полягає у приховуванні від зовнішнього користувача деталей реалізації об'єкта, замість цього надаючи інтерфейс взаємодії з ним, слугує захисним елементом для програми, зменшуючи шанси втрутитись і змінити поведінку роботи останньої. Поліморфізм – це властивість ООП, яка дає змогу змінювати поведінку програми під час її виконання, тобто два і більше класів можуть по різному реагувати на однакові повідомлення. Це спричинене зміною в одного з класів якогось методу (процедури, функції), шляхом запису іншого алгоритму. Перевагою поліморфізму є те, що він допомагає зменшити складність програм, а також використовувати один інтерфейс для єдиного класу дій. У даній курсовій роботі я використовуватиму всі три властивості об’єктно-орієнтованого програмування, які я описував вище (інкапсуляцію, поліморфізм, наслідування). Інкапсуляцію я вибрав через те, що вона допомагає приховати дані від зовнішнього перегляду, зменшуючи вразливість програми. А також, оскільки класи, які не є дочірніми не бачитимуть даних, що містяться в класі, що використовує інкапсуляцію, то це полегшить виявлення мною помилок, які можна помилково допустити. Наслідування – це одна із найважливіших властивостей ООП, що найчастіше зустрічається при написанні програм. Я, звичайно, використовую її для зменшення обсягу написаного мною коду, та пришвидшення роботи програми, а також вона будує логічну ієрархію, з якою в процесі легше працювати. Поліморфізм я застосовую у даній роботі, тому, що він додає гнучкості програмі, розширює її функціонал, дозволяє змінити подію у ході виконання. 2. АНАЛІЗ ТА РОЗРОБКА АЛГОРИТМУ ЗГІДНО ІНДИВІДУАЛЬНОГО ЗАВДАННЯ 2.1.ОПИС АЛГОРИТМУ ТА ОЦІНКА ЙОГО СКЛАДНОСТІ. / Рис.1 Діаграма прецедентів На початку програми зчитуються необхідні дані: назва товару, кількість товару та його ціна. Після цього нам потрібно вибрати ким ми є: 1. Покупець, 2.Адміністратор. При виборі покупця, ми можемо подивитися меню, зробити замовлення, оплатити замовлення, отримати чек, залишити відгук, подивитися книгу відгуків та відкрити калькулятор. Відповідно, натиснувши подивитися меню, нам відкривається таблиця із стравами нашого кафе. Натиснувши зробити замовлення, ми викличемо меню, де потрібно буде вказати, який з якого елементу меню робити замовлення, пізніше вказати кількість різних позицій того підменю і нарешті яку страву і скільки штук замовляти. Натиснувши оплатити замовлення, нам вискакує міні-таблиця у якій пише загальна сума замовлення для кожного підменю, а також загальна сума в цілому. Натиснувши отримати чек, ми відкриваємо текстовий файл у якому містяться дані про замовлення. Натиснувши залишити відгук, ми відкриваємо меню, де необхідно набрати дату, та текст (відгук, про кафе). Натиснувши подивитися книгу відгуків, нам відкривається текстовий файл, у якому містяться відгуки клієнтів. Натиснувши відкрити калькулятор, нам відкриється меню, де ми можемо вибрати яким калькулятором користуватися простим, чи складним. При виборі адміністратора, ми можемо дивитися меню, складати меню, робити замовлення, дивитися книгу відгуків, оплачувати замовлення, дивитися звіт, відкривати калькулятор. Натиснувши скласти меню, з’являється можливість ввести до якого підменю нам потрібно занести страви. Вибравши правильний пункт, ми отримуємо можливість внести скільки, а пізніше і по черзі їх додати до підменю. Натиснувши дивитися меню, ми отримуємо таблицю, де відображаються підменю страв із описом їх кількості, ціни, назви та порядкового номеру. Натиснувши отримати чек, ми відкриваємо текстовий файл у якому містяться дані про зроблені замовлення. Всі решта методи, які можна виконувати з-під адміністратора (я перелічив вище), працюють аналогічно до тих що я описував при виборі покупця. 2.2. АНАЛІЗ ОСОБЛИВОСТЕЙ АЛГОРИТМУ У моєму коді є одна гілка класів. Вона починається із класу меню, який в свою чергу наслідує абстрактний клас людина. Класи адміністратор і клієнт наслідують властивості, методи та функції абстрактного класу людина. Крім того є ще один шаблонний клас калькулятор. Кожен клас містить свої властивості і методи, які по-різному є видимі для зовнішніх програм (інкапсуляція), що створюється за допомогою використання різних специфікаторів: protected, private або public. Клас меню зберігає дані про кожен елемент меню та підменю, його кількість, ціну, та наповнений методами, які дозволяють звертатися до меню і виконувати певні операції, наприклад: складати меню, переглядати меню. Абстрактний клас людина, наслідує методи та функції класу меню, а також розширює можливості додаючи ще власні методи: зробити замовлення, листи замовлень, заплатити за замовлення, калькулятор. Клас клієнт наслідує методи класу людина і відповідно всіх його прабатьків, тому є одним з двох найобширніших класів за кількістю видимих методів та функцій. У ньому перевизначається віртуальна функція абстрактного класу людина, отримати документ, як отримати чек, що показує основи поліморфізму, оскільки можна змінювати виконання коду, під час виконання програми. А також є метод додати відгук. Клас адміністратор є другим широким за обсягом класом, оскільки також наслідує інформацію від батьківських класів. У ньому перевизначаєтся метод отримати документ класу людина, як отримати звіт. Також, клас містить метод встановити меню, який дозволяє змінити, або початково ввести меню харчового закладу. 2.3. ОПИС АЛГОРИТМУ У ПСЕВДОКОДІ Початок Поки(істина) { Вивід: Введіть ким ви є: 1. Покупець; 2. Адміністратор; 3. Вихід з програми Ініціалізація змінної: а; Ввід: а; Якщо а=1 то { Вивід: Виберiть, що ви бажаєте зробити: 1. Подивитись меню 2. Зробити замовлення 3. Оплатити замовлення 4. Отримати чек 5. Залишити вiдгук 6. Подивитися книгу вiдгукiв 7. Вiдкрити калькулятор 8. Повернутися до попереднього меню Ініціалізація змінної: вибір; Ввід: b; Якщо b=1 то { Дивимось меню кафе } Якщо b=2 то { Вивід: 1. Зробити замовлення піци 2. Зробити замовлення сендвіча(ів) 3. Зробити замовлення бургера(ів) 4. Оплатити замовлення 5. Вийти в попереднє меню Ініціалізація змінної: вибір; Ввід: вибір Якщо вибір=1 то { Замовляємо піцу } Якщо вибір=2 то { Замовляємо сендвічі } Якщо вибір=3 то { Замовляємо бургери } Якщо вибір=4 то { Оплачуємо всі вибрані замовлення } Якщо вибір=5 то { Виходимо до попереднього меню } Якщо b=3 то { Оплачуємо замовлення } Якщо b=4 то { Отримуємо вивід чеку } Якщо b=5 то { Вивід: Ввести дату. Ввід: дата. Вивід: Ввести текстове повідомлення. Ввід: відгук. } Якщо b=6 то { Відкривається книга відгуків } Якщо b=7 то { Вивід: Простий калькулятор. Складний калькулятор. Ввід: c Якщо c=1 то { Відкрити простий калькулятор } Якщо c=2 то { Відкрити складний калькулятор } Якщо b=8 то { Вихід в попереднє меню. } } Якщо а=2 то { Вивід: Виберiть, що ви бажаєте зробити: Подивитись меню Зробити замовлення Оплатити замовлення Скласти меню Сформувати звiт Подивитися книгу відгукiв Вiдкрити калькулятор Повернутися до попереднього меню Ініціалізація змінної: b Ввід: b; Якщо b=1 то { Дивимось меню кафе } Якщо b=2 то { Вивід: 1. Зробити замовлення піци 2. Зробити замовлення сендвіча(ів) 3. Зробити замовлення бургера(ів) 4. Оплатити замовлення 5. Вийти в попереднє меню Ініціалізація змінної: вибір; Ввід: вибір Якщо вибір=1 то { Замовляємо піцу } Якщо вибір=2 то { Замовляємо сендвічі } Якщо вибір=3 то { Замовляємо бургери } Якщо вибір=4 то { Оплачуємо всі вибрані замовлення } Якщо вибір=5 то { Виходимо до попереднього меню } Якщо b=3 то { Оплачуємо замовлення } Якщо b=4 то { Вивід: Щоб додати страву до меню виберiть, до якого пункту вона вiдноситься: 1. Сендвiч 2. Бургер 3. Пiца 4. Вийти з меню Ініціалізація змінної: вибір; Ввід: вибір Якщо вибір=1 то { Додаємо сендвічі до меню } Якщо вибір=2 то { Додаємо бургери до меню } Якщо вибір=1 то { Додаємо піцу до меню } Якщо b=5 то { Отримуємо вивід звіту } Якщо b=6 то { Відкривається книга відгуків } Якщо b=7 то { Вивід: Простий калькулятор. Складний калькулятор. Ініціалізація змінної: c Ввід: c Якщо c=1 то { Відкрити простий калькулятор } Якщо c=2 то { Відкрити складний калькулятор } Якщо b=8 то { Вихід в попереднє меню. } } Якщо а=3 то { Вихід з програми } 2.4. РОЗРОБКА БЛОК-СХЕМИ АЛГОРИТМУ На даній блок-схемі схематично показано функціональність програми: графічно описано структуру коду, основні вузли його виконання та змодельовано кінцевий варіант виконання.  ПРОГРАМНА РЕАЛІЗАЦІЯ ОПИС ПОСЛІДОВНОЇ ВЕРСІЇ ПРОГРАМНОЇ РЕАЛІЗАЦІЇ. ОПИС СТРУКТУР ДАНИХ ПРОГРАМИ. У файлі menu.h описано клас menu. У цьому класі зберігаються відомості про страви: назва страви, інформація про страву, номер позиції, ціна, сума, вартість загальна, кількість страв. string name; - назва страви string inf; - інформація про страву int amount = 0; - кількість заготовок для певної страви int price = 0; - ціна на страву int number = 0; - кількість страв (для замовлення) int sum = 0; - сума 1 страви (ціна на страву помножена на кількість її замовлення) int sandwich_sum=0, burger_sum=0, pizza_sum=0; - сума всіх sum (всіх замовлених страв), для кожного підменю. int total_sum = 0; - сума всіх sandwich_sum, burger_sum, pizza_sum (загальна сума замовлення). У файлі human.h описано абстрактний клас human. У цьому класі є властивості, які є актуальними як для клієнта, так і для адміністратора. Клас містить наслідувані властивості класу menu. У файлі client.h описано клас client, який окрім наслідуваних властивостей від попередніх класів, має ще свої: дата та відгук. string date; - дата залишення відгука char review[150]; - текстова інформація У файлі admin.h описується клас admin. Він має наслідувані властивості від попередніх класів. У файлі calc.h описується контейнерний клас calc. Цей клас не наслідує властивостей інших класів, але має свої: операнд (1,2),результат, операція. type a; - операнд 1 type b; - операнд 2 double r; - результат char o; - операція Всі вищенаведені текстові інформативні файли з’єднуються з файлами виконавчого підключенням заголовку, наприклад запис #include “menu.h” дозволяє компілятору розуміти, де дивитися опис певного модуля. ОПИС РЕАЛІЗАЦІЇ ОСНОВНИХ ФУНКЦІЙ (МЕТОДІВ) У класі menu є шість методів та функцій: void set_dish(); - цей метод дозволяє редагувати, або заново створювати 1 позицію страви. Він звертається до таких властивостей, як: name, number, info, amount, price, та записує у них відповідні дані. void get_menu_custumer(); - цей метод виводить на екран відомості про всі страви, які є у меню. Він звертається до тих самих властивостей, що і минулий метод, але в кінцевому результаті, він формує із них матрицю даних, яку клієнт бачить, як меню. Відмінністю цього метода від get_menu_admin(), полягає те, що клієнт не бачитиме скільки є заготовок до кожної страви, оскільки йому цього знати не потрібно. void get_menu_custumer_(int); - це функція, яка виводить інформацію для того підменю, яке буде передане їй, як параметр. Вона використовує властивості: price, name, number. void get_menu_admin(); - метод аналогічний до методу get_menu_custumer() і виводить на екран відомості про всі страви, які є у меню. Відмінність між методами я описав нижче. void get_details_of_ordery(int a_o); - ця функція виводить деталі про замовлення, номер якого входить у неї, як параметр. Також вона звертається до властивостей sum, number, name, price та формує інформаційну матрицю, для виводу на екран. int get_sum(int a_o); - ця функція знаходить підсумовану ціну на декілька замовлень 1 страви. Кількість замовлень входить у функцію параметром. Функція звертається до властивостi price. У класі human є шість власних методів та функцій, та шість успадкованих: virtual void get_document() = 0; - ця віртуальна функція описана, щоб переоприділятися у дочірних класах. void order_list_pizza(int n_o, int a_o); - ця функція призначена виводити лист замовлень із підменю Pizza. Вона приймає як параметр порядковий номер страви у листі замовлення та кількість замовлених страв. Також функція звертається до властивості sum. void order_list_burger(int n_o, int a_o); - ця функція призначена виводити лист замовлень із підменю Burger. Вона приймає як параметр порядковий номер страви у листі замовлення та кількість замовлених страв. Також функція звертається до властивості sum. void order_list_sandwich(int n_o, int a_o); - ця функція призначена виводити лист замовлень із підменю Sandwich. Вона приймає як параметр порядковий номер страви у листі замовлення та кількість замовлених страв. Також функція звертається до властивості sum. void make_an_order(); - цей метод дає можливість зробити замовлення. У ньому використовуються три попередні функції, а також властивості: name, price, number, sum. void pay_for_order(); - цей метод дає змогу здійснювати оплату покупки. Для цього виводиться на екран загальна сума до оплати, після чого потрібно внести гроші. Цей метод використовує такі властивості, як: pizza_sum, sandwich_sum, burger_sum, total_sum. У класі client є два власних методи і дванадцять успадкованих методів та функцій: void set_review(); - цей метод є створеним для того, щоб можна було здійснювати ввід тексту у файл під назвою REVIEW_LIST.txt тобто книгу відгуків. void get_document()override; - ця функція, призначена для відкривання чеку, тобто відкриття файлу CHECK.txt. У класі admin є два власних методи і дванадцять успадкованих методів та функцій: void set_menu(); - цей метод дозволяє редагувати, або заново створювати меню. Він звертається до таких властивостей, як: name, number, info, amount, price, та записує у них відповідні дані. void get_document()override; - ця функція, призначена для відкривання звіту про куплені товари. У класі calc є три методи та функції: void set_arguments(); - ця функція призначена для збирання даних type calculate(type a, type b); - ця функція здійснює дії void calc_program(); - цей метод об’єднює попередні функції і виконує калькуляцію. ОПИС ПРОГРАМНОЇ РЕАЛІЗАЦІЇ АЛГОРИТМУ. ДІАГРАМА КЛАСІВ І ЇЇ ОПИСПИС. На цій діаграмі показано класи моєї програми та їх наслідування. Для прикладу, клас menu є батьківським класом, та зберігає в собі основні методи та властивості роботи програми. Клас human наслідує menu та має свої методи та властивості. Класи client та admin наслідують властивості та методи усіх попередніх класів. СХЕМА ВИКЛИКІВ ФУНКЦІЙ АБО ДІАГРАМА КЛАСІВ На цій діаграмі, показано класи моєї програми, та зв’язки між ними. Також тут можна побачити у яких специфікаторах доступу описані методи і властивості певного класу. Наприклад: 1) # означає захищений тип (protected), 2) + означає загальнодоступний тип (public) 3) – означає приватний тип (private) Також, для відображення взаємозв’язку між класами використовують позначки: Асоціація Наслідування Реалізація / Імплементація Залежність Агрегація Композиція На цій діаграмі показано, що клас human наслідує функціонал від класу menu, класи client та admin наслідують функціонал від класу human, а клас calc перебуває у асоціації з класом human. Крім того, ми добре бачимо інкапсуляцію, оскільки всі специфікатори доступу явно відображені на діаграмі. Функції класу menu викликаються напряму, оскільки він є батьківським класом. Але, якщо викликати успадковані методи та функції із дочірних класів, то останній звертатиметься до батьківського класу, беручи код потрібного методу або функції і виконуючи його. Тому, для прикладу метод set_dish() описаний у класі меню, буде успадкований класами human, admin, client, що означає – вони матимуть доступ до коду, який міститься всередині методу. У моїй програмі класами, які безпосередньо працюють зі всіма методами та функціями програми є admin та client. Для них доступний код кожного метода, що дає змогу робити програму гнучкішою, та наповненішою. Використання наслідування у даному випадку відіграє велику роль, тому, що мені не потрібно переписувати той самий код певного методу по кілька разів, а достатньо звернутися до класу батька і “попросити” необхідний метод, функцію або властивість. ВІДЛАГОДЖЕННЯ ТА ТЕСТУВАННЯ РЕАЛІЗОВАНОЇ ПРОГРАМИ ЗГІДНО ІНДИВІДУАЛЬНОГО ЗАВДАННЯ ОПИС СТРУКТУРИ ПРОГРАМИ - КОРОТКО ЯКИЙ ФРЕЙМВОРК БУВ ОБРАНИЙ ДЛЯ ЮНІТ ТЕСТУВАННЯ
Антиботан аватар за замовчуванням

22.04.2019 03:04-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!