Розробка програми з принципами об"єктно-орієнтованого програмування
Конструктор схожий зі звичайним методом, але і має ряд суттєвих відмінностей. Він не має явним чином визначеного типу даних, що повертаються, не унаслідується і зазвичай має різні правила для модифікаторів, що розглядаються. Конструктори часто виділяють однойменністю з класом, в якому об’являються. Їх задача — ініціалізувати члени об'єкти і визначити інваріанти класу. Об'єкти, що не змінюються… Читати ще >
Розробка програми з принципами об"єктно-орієнтованого програмування (реферат, курсова, диплом, контрольна)
Міністерство освіти і науки України Сумський державний університет Кафедра інформатики Курсова робота з дисципліни
«Системне програмування»
Варіант № 3
Виконала:
студентка групи ІН-82
Данечкіна Яна Перевірила:
Скаковська А. М.
Суми
Зміст
- Постановка задачі
- Пояснювальна записка
- Опис послідовності дій
- Пояснення призначення кожної з функцій
- Пояснення призначення кожного з ідентифікаторів
- Код програми
- Результати роботи програми
- Література
- Постановка задачі
- Швидкість витікання ідеального газу із посудини під тиском обчислюється за формулою:
- ,
- де R — універсальна газова константа, M — молекулярна маса газу, T — температура в посудині, P0 — тиск газу в посудині, P — зовнішній тиск.
- ,
- де — відхилення теплоємностей при постійному тиску і постійному об'ємі .
- Описати абстрактний клас «Об'кт_обчислення» з елементом даних «Обчислювальний_параметр». Передбачити чисті віртуальні функції:
- 1. ведення даних;
- 2. розрахунок обчислюваного параметру;
- 3. виведення результату і даних.
- Описати клас «Ідеальний_газ», похідний від абстрактного класу. У ньому додати лементи R, T, Kg, M, P, P0.
- Крім віртуальних функцій передбачити перевантажені операції присвоєння, порівняння (= =, ! =, <, < =, >, > =), а також конструктори: пустий, з ініціалізацією і копіювання.
- Привести приклад програми, в якій застосовуються усі конструктори, члени-функції і перевантажені оператори.
- При введенні даних слід мати на увазі:, ,. Порядок значень інших параметрів:, , .
- Дані читати з файлу, а результат розрахунку вивести на екран.
Пояснювальна записка
Теоретичний огляд
Клас — різновид абстрактного типу в об'єктно-орієнтованому програмуванні (ООП), що характеризується способом своєї побудови. Суть відмінності від інших абстрактних типів даних полягає у тому, що при заданні типу даних клас визначає одночасно і інтерфейс, і реалізацію для всіх своїх екземплярів, а виклик метода — конструктора є обов’язковим.
Абстрактний клас — це базовий клас (шаблон), котрий не передбачає створення екземплярів. Абстрактний клас може мати або не мати абстрактні методи та властивості. Абстрактні методи не реалізуються для класу, в якому вони описані, але повинні бути описані для його не абстрактних нащадків. Абстрактні класи є найбільш загальними абстракціями.
Конструктор — спеціальний блок інструкцій, що викликаються при створенні об'єкту, при чому при його описанні (знаходяться у стеку чи статичній прам’яті) чи динамічно (знаходяться в купи при використанні ключового слова new).
Конструктор схожий зі звичайним методом, але і має ряд суттєвих відмінностей. Він не має явним чином визначеного типу даних, що повертаються, не унаслідується і зазвичай має різні правила для модифікаторів, що розглядаються. Конструктори часто виділяють однойменністю з класом, в якому об’являються. Їх задача — ініціалізувати члени об'єкти і визначити інваріанти класу. Об'єкти, що не змінюються, теж повинні бути проініціалізовані конструктором. В С++ конструктор може бути перевантаженим.
Конструктор за замовчуванням — конструктор, що не приймає аргументів.
Конструктор копіювання — конструктор, що приймає в якості аргументу об'єкт, того ж класу, або посилання на нього.
Оператор присвоєння — оператор, що розміщує значення виразу джерела в змінну — значення. У своїх програмі я перевантажив оператор присвоєння з метою присвоєння одному екземпляру класу значень іншого екземпляру класу.
Чиста віртуальна функція — це функція, яка нічого не виконує і не доступна для виклику. Її прототип є шаблоном для функцій, що заміщають, у похідних класах.
Опис послідовності дій
Спочатку я створила абстрактний клас Object_Of_Computing та визначила в ньому поле techParameter і чисті віртуальні функції virtual void input ()=0, virtual void calculation ()=0, virtual void output ()=0. Далі я створила похідний клас від Object_Of_Computing — клас IdealGas, у якому визначила поля R, T, Kg, M, P, P0, конструктори — пустий, з ініціалізацією та копіювання, перевантажені операції = =, ! =, <, < =, >, > = та операції лівого і правого зсувів, описала функції, прототипи яких містяться у абстрактному класі, реалізувала головну функцію void main (), у якій по черзі перевірила працездатність кожного з елементів данних, конструктори та методи.
Пояснення призначення кожної з функцій
Функція | Призначення | |
virtual void input () | віртуальна функція, що призначена для зчитування даних з файлу | |
virtual void output () | віртуальна функція, що призначена для виведення даних на екран | |
virtual void calculation () | віртуальна функція, що призначена для розрахунку обчислювального параметру (швидкості витікання ідеального газу із посудини під тиском) | |
void clrscr (); | стандартна функція бібліотеки, призначена для очищення екрану | |
void getch (); | стандартна функція бібліотеки, призначена для затримки екрану | |
double sqrt (число) | стандартна функція бібліотеки, призначена для обчислення квадратного кореня числа | |
double pow (double x, double y) | стандартна функція бібліотеки, призначена для піднесення числа х до степеня у. | |
Оператор | Призначення | |
friend void operator = =(IdealGas &a, IdealGas &b) friend void operator≠(IdealGas &a, IdealGas &b) friend void operator<(IdealGas &a, IdealGas &b) friend void operator<=(IdealGas &a, IdealGas &b) friend void operator>(IdealGas &a, IdealGas &b) friend void operator>=(IdealGas &a, IdealGas &b) | оператори перевантаження операцій порівняння | |
friend ifstream &operator>>(ifstream &ifs, IdealGas &ig) | оператор перевантаження правого зсуву для файлового введення | |
friend ostream &operator<<(ostream &os, IdealGas &ig) | оператор перевантаження лівого зсуву для виведення на екран | |
Конструктор | Призначення | |
IdealGas () | пустий конструктор | |
IdealGas (float r, float t, float kg, float m, float p, float p0) | конструктор з ініціалізацією даних | |
IdealGas (const IdealGas &src) | конструктор копіювання | |
Пояснення призначення кожного з ідентифікаторів
В умові | У програмі | |
R, універсальна газова константа | float R | |
M, молекулярна маса газу | float M | |
T, температура в посудині | float T | |
P0, тиск газу в посудині | float P0 | |
P, зовнішній тиск | float P | |
Kg | float Kg | |
Обчислювальний_параметр | float techParameter | |
Код програми
#include
#include
#include
#include
#include
#include
class Object_Of_Computing
{
protected:
float techParameter;
public:
virtual void input ()=0;
virtual void calculation ()=0;
virtual void output ()=0;
};
class IdealGas: public Object_Of_Computing
{
private:
float R, T, Kg, M, P, P0;
public:
friend void operator==(IdealGas &a, IdealGas &b);
friend void operator≠(IdealGas &a, IdealGas &b);
friend void operator<(IdealGas &a, IdealGas &b);
friend void operator<=(IdealGas &a, IdealGas &b);
friend void operator>(IdealGas &a, IdealGas &b);
friend void operator>=(IdealGas &a, IdealGas &b);
friend ifstream &operator>>(ifstream &ifs, IdealGas &ig);
friend ostream &operator<<(ostream &os, IdealGas &ig);
IdealGas (float r, float t, float kg, float m, float p, float p0)
{
R=r;
T=t;
Kg=kg;
M=m;
P=p;
P0=p0;
}
IdealGas ()
{
}
IdealGas (const IdealGas &src)
{
R=src.R;
T=src.T;
Kg=src.Kg;
M=src.M;
P=src.P;
P0=src.P0;
}
virtual void input ()
{
ifstream ifs («input.txt»);
if (!ifs)
{
cout<<" Error: file «dan.txt» was not found" <<'n';
getch ();
exit (1);
}
ifs>>R;
ifs>>T;
ifs>>Kg;
ifs>>M;
ifs>>P;
ifs>>P0;
}
virtual void output ()
{
cout<
cout<
cout<
cout<
cout<
cout<
cout<
cout<<" «;
}
virtual void calculation ()
{
techParameter=sqrt (((2*R*T)/(Kg*M))*(1-pow ((P/P0), Kg)));
}
};
void operator==(IdealGas &a, IdealGas &b)
{
cout<<" n Operator '==':n" ;
if (a.techParameter==b.techParameter)
cout<<" 'a' and 'b' are equal. n" ;
else
cout<<" 'a' and 'b' are not equal. n" ;
}
void operator≠(IdealGas &a, IdealGas &b)
{
cout<<" n Operator '≠':n" ;
if (a.techParameter≠b.techParameter)
cout<<" 'a' and 'b' are not equal. n" ;
else
cout<<" 'a' and 'b' are equal. n" <
}
void operator<(IdealGas &a, IdealGas &b)
{
cout<<" n Operator '<':n" ;
if (a.techParameter
cout<<" 'a' is smaller than 'b'.n" ;
else
cout<<" 'a' is bigger or equals than 'b'.nn" ;
}
void operator<=(IdealGas &a, IdealGas &b)
{
cout<<" n Operator '<=':n" ;
if (a.techParameter<=b.techParameter)
cout<<" 'a'is smaller or equals than 'b'.n" ;
else
cout<<" 'a'is bigger than 'b'.n" ;
}
void operator>(IdealGas &a, IdealGas &b)
{
cout<<" n Operator '>':n" ;
if (a.techParameter>b.techParameter)
cout<<" 'a'is bigger than 'b'.n" ;
else
cout<<" 'a'is smaller or equals than 'b'.n" ;
}
void operator>=(IdealGas &a, IdealGas &b)
{
cout<<" n Oerator '>=':n" ;
if (a.techParameter>=b.techParameter)
cout<<" 'a' is bigger or equals than 'b'.n" ;
else
cout<<" 'a' is smaller than 'b'.n" ;
}
ifstream &operator>>(ifstream &ifs, IdealGas &ig)
{
ifs>>ig.R;
ifs>>ig.T;
ifs>>ig.Kg;
ifs>>ig.M;
ifs>>ig.P;
ifs>>ig.P0;
return ifs;
}
ostream &operator<<(ostream &os, IdealGas &ig)
{
os<
os<
os<
os<
os<
os<
return os;
}
void main ()
{
clrscr ();
IdealGas ig1; // працює пустий конструктор
IdealGas ig2(8.31 696,600,0.2867,28.96,1,5); // працює конструктор з ініціалізацією
ig1.input (); // працює функція зчитування з файлу
ig1.calculation (); // працює функція розрахунку обчислюваль;
// ного параметру
ig2.calculation ();
ig1==ig2; // працюють оператори порівняння
ig1≠ig2;
ig1
ig1<=ig2;
ig1>ig2;
ig1>=ig2;
IdealGas ig3(ig1); // працює конструктор копіювання
cout<<" Knstrurtor of copyn" <
cout<<" Output the information" <
ig1.output (); // працює функція виведення результатів на
// екран
getch ();
}
Вхідні та вихідні дані
Вхідними даними є файл, у якому записані цілі або дробові числа, які характеризують параметри швидкості витікання ідеального газу з посудини під тиском. Також вхідними даними є ті ж параметри швидкості, які передаються як параметри у конструктор з ініціалізацією.
Вихідними даними є дані на екрані, ними є відомі параметри швидкості витікання ідеального газу та обчислена в ході виконання програми сама швидкість витікання ідеального газу.
Програма містить 1 файл — input. txt, це файл, у якому міститься інформація про відомі параметри швидкості витікання ідеального газу з посудини під тиском. Всі дані в ньому записані з нового рядка.
газ витікання програма функція
Результати роботи програми
input.txt
8.31 696
0.2867
28.96
Вихідні дані:
Висновок
В результаті виконання курсової роботи я вдосконалила своє вміння розробки програм з принципами ООП, вдосконалила вміння використовувати віртуальні функції, перевантажені оператори, роботу з файлами та потоками.
Мною була створена консольна програма для обчислення швидкості витікання ідеального газу з посудини під тиском за заданою формулою і заданими параметрами та порівняння таких швидкостей у двох об'єктів класу IdealGas
Література
1. Конспект лекцій з дисципліни «Алгоритмічні мови».
2. Б. Страуструп — Язык программирования С++. Второе дополненное издание.
3. http://ru.wikipedia.org/wiki/C%2B%2B — інформація по С++.