Термінова допомога студентам
Дипломи, курсові, реферати, контрольні...

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

КурсоваДопомога в написанніДізнатися вартістьмоєї роботи

Конструктор схожий зі звичайним методом, але і має ряд суттєвих відмінностей. Він не має явним чином визначеного типу даних, що повертаються, не унаслідується і зазвичай має різні правила для модифікаторів, що розглядаються. Конструктори часто виділяють однойменністю з класом, в якому об’являються. Їх задача — ініціалізувати члени об'єкти і визначити інваріанти класу. Об'єкти, що не змінюються… Читати ще >

Розробка програми з принципами об"єктно-орієнтованого програмування (реферат, курсова, диплом, контрольна)

Міністерство освіти і науки України Сумський державний університет Кафедра інформатики Курсова робота з дисципліни

«Системне програмування»

Варіант № 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 — інформація по С++.

Показати весь текст
Заповнити форму поточною роботою