Розрахункова робота з ООП

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

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

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

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

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

Міністерство освіти і науки Національний університет “Львівська політехніка” Кафедра ЕОМ / Звіт з розрахункової роботи з дисципліни: “Об’єктно-орієнтоване програмування” Теоретичні відомості Об'єктно-орієнтоване програмування - це метод програмування, заснований на поданні програми у вигляді сукупності взаємодіючих об'єктів, кожен з яких є екземпляром певного класу, а класи є членами певної ієрархії наслідування. Програмісти спочатку пишуть клас, а на його основі при виконанні програми створюються конкретні об'єкти (екземпляри класів). На основі класів можна створювати нові, які розширюють базовий клас і таким чином створюється ієрархія класів. Всі дії та розрахунки виконуються шляхом взаємодії (обміну даними) між об'єктами, при якій один об'єкт потребує, щоб інший об'єкт виконав деяку дію. Об'єкти взаємодіють, надсилаючи і отримуючи повідомлення. Повідомлення — це запит на виконання дії, доповнений набором аргументів, які можуть знадобитися при виконанні дії. Кожен об'єкт має незалежну пам'ять, яка складається з інших об'єктів. Кожен об'єкт є представником (екземпляром, примірником) класу, який виражає загальні властивості об'єктів. У класі задається поведінка (функціональність) об'єкта. Таким чином усі об'єкти, які є екземплярами одного класу, можуть виконувати одні й ті ж самі дії. Класи організовані у єдину деревоподібну структуру з загальним корінням, яка називається ієрархією успадкування. Пам'ять та поведінка, зв'язані з екземплярами деякого класу, автоматично доступні будь-якому класу, розташованому нижче в ієрархічному дереві. Таким чином, програма являє собою набір об'єктів, що мають стан та поведінку. Об'єкти взаємодіють використовуючи повідомлення. Будується ієрархія об'єктів: програма в цілому — це об'єкт, для виконання своїх функцій вона звертається до об'єктів що містяться у ньому, які у свою чергу виконують запит шляхом звернення до інших об'єктів програми. Звісно, щоб уникнути безкінечної рекурсії у зверненнях, на якомусь етапі об'єкт трансформує запит у повідомлення до стандартних системних об'єктів, що даються мовою та середовищем програмування. Стійкість та керованість системи забезпечуються за рахунок чіткого розподілення відповідальності об'єктів (за кожну дію відповідає певний об'єкт), однозначного означення інтерфейсів міжоб'єктної взаємодії та повної ізольованості внутрішньої структури об'єкта від зовнішнього середовища (інкапсуляції). Клас визначає абстрактні характеристики деякої сутності, включаючи характеристики самої сутності (її атрибути або властивості) та дії, які вона здатна виконувати (її поведінки, методи або можливості). Наприклад, клас Собака може характеризуватись рисами, притаманними всім собакам, зокрема: порода, колір хутра, здатність гавкати. Класи вносять модульність та структурованість в об'єктно-орієнтовану програму. Як правило, клас має бути зрозумілим для не-програмістів, що знаються на предметній області, що, у свою чергу, значить, що клас повинен мати значення в контексті. Також, код реалізації класу має бути досить самодостатнім. Властивості та методи класу, разом називаються його членами. Клас може мати «підкласи», спеціалізовані, розширені версії надкласу. Можуть навіть утворюватись цілі дерева успадкування. Наприклад, клас Собака може мати підкласи Коллі, Пекінес, Вівчарка і т.п. Так, Сірко може бути екземпляром класу Вівчарка. Підкласи успадковують атрибути та поведінку своїх батьківських класів, і можуть вводити свої власні. Успадкування може бути одиничне (один безпосередній батьківський клас) та множинне (кілька батьківських класів). Це залежить від вибору програміста, який реалізовує клас та мови програмування. Так, наприклад, в Java дозволене лише одинарне успадкування, а в С++ і те і інше. Поліморфізм означає залежність поведінки від класу, в якому ця поведінка викликається, тобто, два або більше класів можуть реагувати по-різному на однакові повідомлення. Наприклад, якщо Собака отримує команду голос(), то у відповідь можна отримати Гав; якщо Свиня отримує команду голос (), то у відповідь можна отримати Рох-рох. На практиці - це реалізовується шляхом реалізації ряду підпрограм (функцій, процедур, методи тощо) з однаковими іменами, але з різними параметрами. В залежності від того, що передається і вибирається відповідна підпрограма. Індивідуальне завдання 4. Створити об’єктно-орієнтовану модель обліку палива на АЗС та продемонструвати її використання. Обліковий запис повинен містити дані про марку палива, вартість одиниці, об’єм. Модель повинна доступатися та модифікувати поля класу. Також необхідно реалізувати додаткові функції для збільшення, зменшення об’єму. Застосовуючи успадкування, розширити функціональність попереднього класу для підтримки дати останнього надходження. Перевантажити операції збільшення, зменшення об’єму. Код програми AZS.h using namespace std; class AZS { protected: char name[4][5]; double volume[4]; double price[4]; public: AZS() {} ~AZS() {} int chooseFuel() { cout << "Виберiть паливо:" << endl; balance(); int i; menu: switch (_getch()) { case '1': i = 0; break; case '2': i = 1; break; case '3': i = 2; break; case '4': i = 3; break; default: goto menu; } return i; } void balance() { for (int i = 0; i < 4; i++) cout << "[" << i + 1 << "] " << name[i] << " Залишок: " << volume[i] << endl; } void prices() { for (int i = 0; i < 4; i++) cout << "[" << i + 1 << "] " << name[i] << " Цiна: " << price[i] << endl; } }; class GasStation : public AZS { private: char date[20]; int j = 0; public: GasStation(char name[][5], double *volume, double *price) { for (int i = 0; i < 4; i++) { strcpy_s(this->name[i], name[i]); this->volume[i] = volume[i]; this->price[i] = price[i]; } } ~GasStation() {} void changeVolume(int i, double liter) { volume[i] += liter; saveDate(); j = 1; } void changeVolume(int i, float liter) { volume[i] -= liter; if (volume[i] < 0) volume[i] = 0; } void saveDate() { time_t rawtime; struct tm *timeinfo; time(&rawtime); timeinfo = localtime(&rawtime); strftime(date, 20, "%d.%m.%Y %X", timeinfo); } void showDate() { if (j == 1) cout << "Дата останнього надходження:" << endl << date << endl; else if (j == 0) cout << "Дата останнього надходження невiдома" << endl; } }; main.cpp #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <conio.h> #include <ctime> #include "AZS.h" using namespace std; int main() { setlocale(LC_ALL, ""); char name[][5] = { "А-98", "А-95", "А-91", "А-80" }; double volume[] = { 1000, 1000, 1000, 1000 }; double price[] = { 25.3, 21.4, 20.5, 16.1 }; GasStation GasStation(name, volume, price); menu: system("cls"); cout << "Зробiть вибiр:" << endl << "[1] Збiльшити запаси палива" << endl << "[2] Зменшити запаси палива" << endl << "[3] Перегляд залишку палива" << endl << "[4] Перегляд цiн" << endl << "[5] Дата останнього надходження" << endl << "[0] Вихiд" << endl; int i; switch (_getch()) { case '1': system("cls"); i = GasStation.chooseFuel(); cout << endl << "На скiльки лiтрiв збiльшити?" << endl; double increase; cin >> increase; system("cls"); GasStation.changeVolume(i, increase); GasStation.balance(); _getch(); goto menu; case '2': system("cls"); i = GasStation.chooseFuel(); cout << endl << "На скiльки лiтрiв зменшити?" << endl; float reduce; cin >> reduce; system("cls"); GasStation.changeVolume(i, reduce); GasStation.balance(); _getch(); goto menu; case '3': system("cls"); GasStation.balance(); _getch(); goto menu; case '4': system("cls"); GasStation.prices(); _getch(); goto menu; case '5': system("cls"); GasStation.showDate(); _getch(); goto menu; case '0': return 0; default: goto menu; } } Результат виконання програми /
Антиботан аватар за замовчуванням

27.03.2016 19:03-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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