Розробка абстрактного класу pruzhyna в об’єктно-орієнтованому програмуванні
Поняття абстрактного класу в об’єктно-орієнтованому програмуванні. Описання класу pruzhyna, створення консольної програми для обчислення коефіцієнта передачі пружини стискання з циліндричної проволоки круглого перетину за заданою формулою і параметрами.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 25.11.2011 |
Размер файла | 100,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Міністерство освіти і науки України
Сумський державний університет
Кафедра інформатики
Курсова робота
з дисципліни
Системне програмування
Варіант № 14
Виконав: студент групи ІН-82
Родін Іван
Перевірила: Скаковська А.М.
Суми 2010
Зміст
- Постановка задачі
- Пояснювальна записка
- Опис послідовності дій
- Пояснення призначення кожної з функцій
- Пояснення призначення кожного з ідентифікаторів
- Код програми
- Результати роботи програми
- Література
Постановка задачі
Коефіцієнт передачі пружини стискання з циліндричної проволоки круглого перетину обчислюється за формулою:
,
де D - діаметр пружини, d - діаметр проволоки, n - кількість робочих витків пружини, G - модуль зсуву.
Описати абстрактний клас «Об'єкт_обчислення» з елементом даних «Обчислювальний_параметр». Передбачити чисті віртуальні функції:
1. прочитання даних з файлу;
2. розрахунок обчислюваного параметру;
3. виведення результату і даних у файл.
Описати клас «Пружина», похідний від абстрактного класу. У ньому додати лементи D, d, n, G.
Крім віртуальних функцій передбачити перевантажені операції присвоєння, порівняння (= =, ! =, <, < =, >, > =), а також конструктори: пустий, з ініціалізацією і копіювання.
Привести приклад програми, в якій застосовуються усі конструктори, члени-функції і перевантажені оператори.
Порядок значень параметрів: модуль зсуву для сталі 8100 кг/мм2 - константа. Значення D, d, n задати самостійно.
Пояснювальна записка
Теоретичний огляд
Клас -- різновид абстрактного типу в об'єктно-орієнтованому програмуванні (ООП), що характеризується способом своєї побудови. Суть відмінності від інших абстрактних типів даних полягає у тому, що при заданні типу даних клас визначає одночасно і інтерфейс, і реалізацію для всіх своїх екземплярів, а виклик метода - конструктора є обов'язковим.
Абстрактний клас - це базовий клас (шаблон), котрий не передбачає створення екземплярів. Абстрактний клас може мати або не мати абстрактні методи та властивості. Абстрактні методи не реалізуються для класу, в якому вони описані, але повинні бути описані для його не абстрактних нащадків. Абстрактні класи є найбільш загальними абстракціями.
Конструктор -- спеціальний блок інструкцій, що викликаються при створенні об'єкту, при чому при його описанні (знаходяться у стеку чи статичній пам'яті ) чи динамічно (знаходяться в купи при використанні ключового слова new).
Конструктор схожий зі звичайним методом, але і має ряд суттєвих відмінностей. Він не має явним чином визначеного типу даних, що повертаються, не унаслідується і зазвичай має різні правила для модифікаторів, що розглядаються. Конструктори часто виділяють однойменністю з класом, в якому об'являються. Їх задача - ініціалізувати члени об'єкти і визначити інваріанти класу. Об'єкти, що не змінюються, теж повинні бути проініціалізовані конструктором. В С++ конструктор може бути перевантаженим.
Конструктор за замовчуванням - конструктор, що не приймає аргументів.
Конструктор копіювання - конструктор, що приймає в якості аргументу об'єкт, того ж класу, або посилання на нього.
Оператор присвоєння - оператор, що розміщує значення виразу джерела в змінну - значення. У своїх програмі я перевантажив оператор присвоєння з метою присвоєння одному екземпляру класу значень іншого екземпляру класу.
Чиста віртуальна функція - це функція, яка нічого не виконує і не доступна для виклику. Її прототип є шаблоном для функцій, що заміщають, у похідних класах.
Опис послідовності дій
Спочатку я створив абстрактний клас оbject та визначив в ньому поле К і чисті віртуальні функції virtual void fileread()=0, virtual void calcu()=0, virtual void filesave ()=0. Далі я створив похідний клас від оbject - клас pruzhyna, у якому визначив поля D, d, n, G, конструктори - пустий, з ініціалізацією та копіювання, перевантажені операції = =, ! =, <, < =, >, > = та операції лівого і правого зсувів, описав функції, прототипи яких містяться у абстрактному класі, реалізував головну функцію void main(), у якій по черзі перевірив працездатність кожного з елементів даних, конструктори та методи.
Пояснення призначення кожної з функцій
Функція |
Призначення |
|
virtual void fileread() |
віртуальна функція, що призначена для зчитування даних з файлу |
|
virtual void filesave () |
віртуальна функція, що призначена для виведення даних на екран |
|
virtual void calc() |
віртуальна функція, що призначена для розрахунку обчислювального параметру (коефіцієнта передачі пружини стискання з циліндричної проволоки круглого перетину) |
|
void clrscr(); |
стандартна функція бібліотеки <conio.h>, призначена для очищення екрану |
|
void getch(); |
стандартна функція бібліотеки <conio.h>, призначена для затримки екрану |
|
double pow(double x, double y) |
стандартна функція бібліотеки <math.h>, призначена для піднесення числа х до степеня у. |
|
Оператор |
Призначення |
|
pruzhyna & operator = (pruzhyna&src)pruzhyna & operator = (pruzhyna&src)pruzhyna & operator != (pruzhyna&src)pruzhyna & operator < (pruzhyna&src)pruzhyna & operator <= (pruzhyna&src)pruzhyna & operator > (pruzhyna&src)pruzhyna & operator >= (pruzhyna&src) |
оператори перевантаження операцій |
|
friend ifstream &operator>>(ifstream &ifs, pruzhyna &x)friend ostream &operator<<(ostream &os, pruzhyna &x) |
оператори перевантаження правого та лівого зсуву для файлового введення/виведення |
|
Конструктор |
Призначення |
|
pruzhyna() |
пустий конструктор |
|
pruzhyna(double _D, double _d, double _n, double _G):D(_D),d(_d),n(_n),G(_G) |
конструктор з ініціалізацією даних |
|
pruzhyna(const pruzhyna & src) |
конструктор копіювання |
Пояснення призначення кожного з ідентифікаторів
В умові |
У програмі |
|
D, діаметр пружини |
float D |
|
d, діаметр проволоки |
float d |
|
n, кількість робочих витків пружини |
float n |
|
G, модуль зсуву |
float G |
|
Обчислювальний_параметр |
float K |
Код програми
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<fstream.h>
#include<conio.h>
#include<iostream.h>
class object
{
protected:
float K;
public:
virtual void fileread()=0;
virtual void calc()=0;
virtual void filesave()=0;
};
class pruzhyna: public object
{
private:
float D;
float d;
float n;
float G;
public:
friend ostream &operator<<(ostream &os, pruzhyna &x);
friend ifstream &operator>>(ifstream &ifs, pruzhyna &x);
friend ofstream &operator<<(ofstream &ofs, pruzhyna &x);
//konstruktor s inicial. danux
pruzhyna(double _D, double _d, double _n, double _G):D(_D),d(_d),n(_n),G(_G)
{
}
//konstruktor kopirovaniya
pruzhyna(const pruzhyna & src)
{
D=src.D;
d=src.d;
n=src.n;
G=src.G;
}
//pustoy konstruktor
pruzhyna()
{
}
//vvod danykh s faylu
void fileread()
{
ifstream in("dan.txt");
in>>D>>d>>n>>G;
cout<<"dani z fayla \"dan.txt\":\n D="<<D<<" d="<<d<<" n="<<n<<" G="<<G;
in.close();
}
//raschet danux
void calc()
{
K=(8*pow(D,3)*n)/(G*pow(d,4));
cout<<"K="<<K<<endl;
}
//vivod v fayl rezyltat i vxodyasch. danux
void filesave()
{
ofstream ofs("rez.txt");
ofs<<"D="<<D<<" d="<<d<<" n="<<n<<" G="<<G<<"K="<<K;
cout<<"resultat bil zapisan v fayl rez.txt";
ofs.close();
}
//peregruzka operaciy prusv.
pruzhyna & operator = (pruzhyna&src)
{
D=src.D;
d=src.d;
n=src.n;
G=src.G;
return *this;
}
//peregruzka operaciy sravnenia
pruzhyna & operator == (pruzhyna&src)
{
cout<<"\n operator ==";
if(K==src.K)
cout<<" K1 i K2 ravnu.";
else
cout<<" K1 i K2 ne ravnu.";
return *this;
}
pruzhyna & operator != (pruzhyna&src)
{
cout<<"\n operator !=";
if(K!=src.K)
cout<<"K1 i K2 ne ravnu.";
else
cout<<"K1 i K2 ravnu.";
return *this;
}
pruzhyna & operator < (pruzhyna&src)
{
cout<<"\n operator <";
if(K<src.K)
cout<<"K1 < K2.";
else
cout<<"K1 ne menwe K2.";
return *this;
}
pruzhyna & operator <= (pruzhyna&src)
{
cout<<"\n operator <=";
if(K<=src.K)
cout<<"K1 <= K2.";
else
cout<<"K1 bolshe K2.";
return *this;
}
pruzhyna & operator > (pruzhyna&src)
{
cout<<"\n operator >";
if(K>src.K)
cout<<"K1 > K2.";
else
cout<<"K1 ne bolwe K2.";
return *this;
}
pruzhyna & operator >= (pruzhyna&src)
{
cout<<"\n operator >=";
if(K>=src.K)
cout<<"K1 >= K2.";
else
cout<<"K1 menwe K2.";
return *this;
}
};
ifstream &operator>>(ifstream &ifs, pruzhyna &x)
{
ifs>>x.D;
ifs>>x.d;
ifs>>x.n;
ifs>>x.G;
return ifs;
}
ofstream &operator<<(ofstream &ofs, pruzhyna &x)
{
ofs<<x.D<<endl;
ofs<<x.d<<endl;
ofs<<x.n<<endl;
ofs<<x.G<<endl;
return ofs;
}
ostream &operator<<(ostream &os, pruzhyna &x)
{
os<<x.D<<endl;
os<<x.d<<endl;
os<<x.n<<endl;
os<<x.G<<endl;
return os;
}
void main()
{
clrscr();
pruzhyna p1;
pruzhyna p2(1,2,3,8100);
p1.fileread();
p1.calc();
p2.calc();
p1==p2;
p1!=p2;
p1<p2;
p1<=p2;
p1>p2;
p1>=p2;
pruzhyna p3;
p3=p1;
cout<<"operatsiya prisvoeniya\n"<< p3 <<endl;
pruzhyna p4(p2);
cout<<"konstruktor copirovaniya\n"<< p4 <<endl;
cout<<"vivod informatsii"<<endl;
p1.filesave();
getch();
}
Вхідні та вихідні дані
Вхідними даними є файл, у якому записані цілі або дробові числа, які характеризують параметри коефіцієнта передачі пружини стискання з циліндричної проволоки круглого перетину. Також вхідними даними є ті ж параметри коефіцієнта передачі пружини стискання з циліндричної проволоки круглого перетину, які передаються як параметри у конструктор з ініціалізацією.
Вихідними даними є дані у файл, ними є відомі параметри коефіцієнта передачі пружини стискання з циліндричної проволоки круглого перетину та обчислена в ході виконання програми сам коефіцієнт.
Програма містить 2 файли - dan.txt - це файл, у якому міститься інформація про відомі параметри коефіцієнта передачі пружини стискання з циліндричної проволоки круглого перетину, і rez.txt, куди заносяться обчислені дані.
програма абстрактний клас pruzhyna
Результати роботи програми
Вхідні дані:
Вихідні дані:
Висновок
В результаті виконання курсової роботи я вдосконалив своє вміння розробки програм з принципами ООП, вдосконалив вміння використовувати віртуальні функції, перевантажені оператори, роботу з файлами та потоками.
Мною була створена консольна програма для обчислення коефіцієнта передачі пружини стискання з циліндричної проволоки круглого перетину за заданою формулою і заданими параметрами та порівняння таких коефіцієнтів передачі пружини стискання з циліндричної проволоки круглого перетину у двох об'єктів класу pruzhyna.
Література
1. Конспект лекцій з дисципліни «Алгоритмічні мови»
2. Б. Страуструп - Язык программирования С++. Второе дополненное издание
3. http://ru.wikipedia.org/wiki/C%2B%2B - інформація по С++
Размещено на Allbest.ru
Подобные документы
Поняття об’єктно-орієнтовного програмування, поява відносин класів. Структури як складені типи даних, побудовані з використанням інших типів. Область дії класу і доступ до його елементів. Конструктор та деструктор класу. Розробка базового класу STRING.
курсовая работа [280,9 K], добавлен 19.08.2010Концепції об'єктно-орієнтованого програмування. Методи створення класів. Доступ до методів базового класу. Структура даних, функції. Розробка додатку на основі діалогових вікон, програми меню. Засоби розробки програмного забезпечення мовами Java та С++.
курсовая работа [502,5 K], добавлен 01.04.2016Об’єктно-орієнтоване програмування мовою С++. Основні принципи об’єктно-орієнтованого програмування. Розробка класів з використанням технології візуального програмування. Розробка класу classProgressBar. Базовий клас font. Методи тестування програми.
курсовая работа [211,3 K], добавлен 19.08.2010Сутність прикладної програми – класу, який містить процедуру main, в якому створюється вікно з кнопками управління. Аплет – пакет класу Java, який виконується різними прикладними програмами. Ініціалізація змінних та встановлення розміру вікна аплету.
лабораторная работа [11,8 K], добавлен 09.06.2012Поняття та види векторів. Прості математичні операції над ними. Векторний добуток, його геометричні та алгебраїчні властивості. Визначення та реалізація програмного класу багатовимірних векторів. Перевантажені оператори та дружні оператор-функції.
курсовая работа [110,1 K], добавлен 15.01.2012Характеристика системи обробки даних в програмно-орієнтованому програмуванні. Класифікація та різновиди обчислювальних комплексів. Підходи до реалізації алгоритмів. Класифікація Хендлера. Компонентно-ієрархічний підхід до розробки ПООСІК, його принципи.
курс лекций [2,1 M], добавлен 25.03.2011Основні аспекти використання стандартних компонентів ООС програмування Delphi для створення звітної документації. Опис компонентів – QReport, PrintDialog та PrintSetupDialog. Приклади створення звітів. Iнше програмне забезпечення для побудови звітів.
курсовая работа [488,4 K], добавлен 08.12.2008Розробка програми на мові програмування С++ з використанням об’єктно-орієнтованого програмування, яка включає в себе роботу з файлами, класами, обробку числової інформації і роботу з графікою. Структура класів і об’єктів. Лістинг та алгоритм програми.
курсовая работа [104,4 K], добавлен 14.03.2013Розробка методу-члену класу для створення нового одновимірного масиву з кількості всіх негативних елементів кожного рядка заданого двовимірного динамічного масиву. Особливість виводу змісту масиву на екран. Аналіз перевірки правильності роботи програми.
лабораторная работа [131,2 K], добавлен 18.11.2021Особливості об'єктно-орієнтованого програмування. Розробка програми для елементарних математичних розрахунків, виведення результату на екран та запису у файлі. Сортування слів у рядку. Програма, яка реалізовує ходи шахових фігур. Програма-калькулятор.
отчет по практике [2,0 M], добавлен 19.03.2015