class piram
|
float f
|
+piram(float
f1,float a):kvadrat(a) +float pl() +float v()
|
2.2.3 Структура об'єктів
Об'єкти системи:.
Діаграма об'єктів - показує структуру системи в конкретний
момент часу, об'єкти, їх атрибути.
Діаграми об'єктів дозволяють моделювати екземпляри сутностей,
які містяться в діаграмах класів. На діаграмі об'єктів показано безліч об'єктів
і відносин між ними в певний момент часу.
Застосовують при моделюванні статичних видів системи з точки
зору проектування і процесів. При цьому моделюється "знімок" системи
в даний момент часу і зображується безліч об'єктів, їх станів і відносин між
ними.
Вони важливі не тільки для візуалізації, визначення
специфікацій та документування структурних моделей, але і для конструювання
статичних аспектів системи за допомогою прямого і зворотного проектування.
x(xx): kvadrat
|
a=5
|
|
class: piram
|
|
|
|
|
3. РОБОЧЕ ПРОЕКТУВАННЯ
Для реалізації класу згідно технічного завдання обрано мову
програмування С++. Мова програмування С++ підтримує об’єктно-орієнтироване
програмування.
Клас - складовий тип данних, елементами якого є функції
ізмінні. В основу поняття клас покладений той факт, що «над об'єктами можна
здійснювати різні операції ». Властивості об'єктів описуються за допомогою
полів класів, а дії над об'єктами описуються за допомогою функцій, які
називаються методами класу. Клас має ім'я, складається з полів, званих членами
класу і функцій - методів класу.
Опис класу має наступний формат:<ім'я класу>
{
// Опис відкритих членів і методів класу public:
// Опис закритих членів і методів класу private:
// Опис захищених членів і методів класу protected:
}
Відкриті та закриті члени класу:
На відміну від полів структури доступних завжди, в класах
можуть бути члени і методи різного рівня доступу:
Відкриті public (публічні), виклик відкритих членів і методів
класу здійснюється за допомогою оператора. ("точка");
Закриті private (приватні), доступ до яких можливий тільки з
допомогою відкритих методів.
Захищені методи (protected).
Об'єктом називається математичне уявлення сутності реального
світу (або предметної області), яке використовується для моделювання.
Об'єкти зберігаються в купі (для класів і посилальних типів)
- Об'єкти необхідно ініціалізувати
оператором;
- Класи можуть успадковувати
властивості інших класів (одиничне спадкування коду);
- Класи можуть реалізовувати множинні
інтерфейси (множинне успадкування типів).
Реалізація
інкапсуляції
Інкапсуляція - це властивість об'єктів приховувати деякі свої
дані і способи їх обробки (методи) від навколишнього цифрового середовища і,
зокрема , від малодосвідчених програмістів, залишаючи «зовні» тільки необхідні
та/або необхідні властивості і функціональні можливості .
З точки зору стороннього програміста об'єкт виглядає таким
собі «чорним ящиком» , у якого є входи і виходи. Подаючи на входи дані і
застосовуючи функціональні методи можна отримати результат на виході.
На сьогоднішній день існує три рівні інкапсуляції public,
protected і private.
Дані модифікатори покликані регулювати видимість властивостей
і методів всередині і зовні класу і об'єктів класу.
В базовому класі закритими є поле float a. Доступ до закритих
полів класу реалізовано за допомогою відкритих функцій членів класу kvadrat(int
t)конструктор з параметрами, виконує ініціалізацію об’єкта х(хх), kvadrat()
конструктор без параметрів,який виконує початкову ініціалізацію об’єкта, float
ploshat() функція обчислення площі квадрата,float perim() функція обчислення
периметра квадрату, функція обчислення діагоналей квадрату float diag(),void
show() функція виводу даних про об’єкт, float Geta() функція яка повертає
значення об’єкту.
В похідному класі закритими є поле float f. Доступ до закритих полів класу
реалізовано за допомогою відкритих функцій членів класу: piram(float f1,float
a):kvadrat(a) ) конструктор з параметрами, виконує ініціалізацію об’єкта
похідного класу, float pl() функція обчислення площі піраміди, float v()
функція обчислення об’єму піраміди.
Реалізація успадкування
У програмуванні існує поняття програмного інтерфейсу, що
означає перелік можливих обчислень, які може виконати та чи інша частина
програми, включаючи опис того, які аргументи і в якому порядку потрібно
передавати на вхід алгоритмам з цього переліку, а також що і в якому вигляді
вони будуть повертати . Абстрактний тип даних інтерфейс придуманий для
формалізованого опису такого переліку. Самі алгоритми, тобто дійсний програмний
код, який буде виконувати всі ці обчислення, інтерфейсом не задається,
програмується окремо і називається реалізацією інтерфейсу.
Програмні інтерфейси, а також класи, можуть розширюватися
шляхом успадкування, яке є одним з важливих засобів повторного використання
готового коду в ООП. Успадкованих клас або інтерфейс буде містити в собі все,
що зазначено для всіх його батьківських класів. Клас дозволяє задати не тільки
програмний інтерфейс до самого себе і до своїх екземплярів, а й в явному
вигляді написати код, відповідальний за обчислення. Якщо при створенні свого
нового типу даних успадковувати інтерфейс, то ми отримаємо можливість
передавати примірник свого типу даних в будь-який алгоритм, який вміє працювати
з цим інтерфейсом. Однак нам доведеться самим написати реалізацію інтерфейсу,
тобто ті алгоритми, якими буде користуватися цікавить нас алгоритм для
проведення обчислень з використанням нашого екземпляра. У той же час,
наслідуючи клас, ми автоматично успадковуємо готовий код під інтерфейс. У цій
можливості успадковувати готовий код і проявляється те, що в
об'єктно-орієнтованої програми тип даних клас визначає одночасно і інтерфейс, і
реалізацію для всіх своїх екземплярів.
В даній курсовій роботі при розробці класів реалізовано
просте відкрите успадкування.
Базовий клас - kvadrat та похідний від нього клас - piram.
Успадкування - це не просто створення точної копії класу, а розширення вже
існуючого класу, щоб нащадок міг виконувати нові, характерні лише йому функції.
Принцип успадкування вирішує проблему модифікації властивостей об'єкта.
Послідовне проведення в життя принципу «успадковуй і змінюй» добре узгодиться з
поетапним підходом до розробки великих програмних проектів і вбагатому стимулює
такий підхід.
Реалізація поліморфізму
Поліморфізм - це властивість, яка дозволяє одне і те ж ім'я
використовувати для вирішення двох або більше схожих, але технічно різних
завдань. Метою поліморфізму, стосовно об'єктно-орієнтованого програмування, є
використання одного імені для завдання загальних для класу дій. Виконання
кожного конкретного дії буде визначатися типом даних. Наприклад, для мови Сі, в
якому поліморфізм підтримується недостатньо, знаходження абсолютної величини
числа вимагає трьох різних функцій: abs (), labs () і fabs (). Ці функції
підраховують і повертають абсолютну величину цілих, довгих цілих і чисел з
плаваючою точкою відповідно. В С + + кожна з цих функцій може бути названа abs
(). Тип даних, який використовується при виконанні функції, визначає, яка
конкретна версія функції дійсно виконується. В С + + можна використовувати одне
ім'я функції для безлічі різних дій. Це називається перевантаженням функцій.
У більш загальному сенсі, концепцією поліморфізму є ідея
"один інтерфейс, безліч методів". Це означає, що можна створити
загальний інтерфейс для групи близьких за змістом дій. Перевагою поліморфізму є
те, що він допомагає знизить складність програм, дозволяючи використання того ж
інтерфейсу для завдання єдиного класу дій. Вибір же конкретного дії, залежно
від ситуації, покладається на компілятор.
В курсовому проекті поліморфізм реалізовано в розділені класу
на інтерфейс, реалізацію.
3.3 Тестування працездатності системи класів
Для тестування працездатності базового класу kvadrat задамо наступне значення для об’єкту
х(8), де параметр це довжина сторони квадрату.
Отримаємо результат
Рисунок 1. Результати роботи базового класу.
Розрахунки проведені в ручну підтверджують правильність
роботи класу.
Для тестування працездатності похідного класу perim задамо
наступне значення для об’єкту dl(12,5), де перший параметр це довжина апофеми
піраміди а другий параметр довжина сторони квадрату.
Отримаємо результат
Рисунок 2. Результати роботи похідного класу.
Розрахунки проведені в ручну підтверджують правильність
роботи класу.
3.4 Обґрунтування вибору структур даних
В програмі, яка демонструє роботу розробленого класу,
оглушуються об’єкти даного класу, ініціюються за допомогою функцій членів
класу.
Функції виводу: void show();
Функції ініціалізації: kvadrat(), kvadrat(int t), piram(float
f1,float a):kvadrat(a);
Функція обчислення: float ploshat(), float perim(), float
diag(), float pl(), float v().
3.5 Обґрунтування вибору алгоритмів
Рисунок 3. Блок - схема головної програми.
Висновки
В даній курсовій роботі розроблений програмний комплекс з
використанням об'єктно-орієнтованого підходу і користувальницьких класів».
Поглиблені знання з об’єктно-орієнтованого
проектування та аналізу. ООП дозволяє ефективно розробляти програмне
забезпечення та має ряд важливих переваг перед модульно-структурним
програмуванням.
Основні ідеї об'єктно-орієнтованого підходу спираються на
наступні положення:
модель реального світу або її частини може бути описана як
сукупність взаємодіючих між собою об'єктів.
об'єкт описується набором параметрів, значення яких
визначають стан об'єкта, і набором операцій (дій), які може виконувати об'єкт.
Практично всі об'єктно-орієнтовані мови програмування є
розвиваються мовами, їхні стандарти регулярно уточнюються і розширюються.
Найбільш поширеною об'єктно-орієнтованою мовою програмування безумовно є C + +.
Вільно поширювані комерційні системи програмування C++ існують практично на
будь-якій платформі.
Під час виконання курсового проекту вирішувалися такі основні
завдання:
вивчити сутність об'єктно-орієнтованого підходу до
програмування;
розглянути об'єктно-орієнтований аналіз;
вивчити процес об'єктно-орієнтованого проектування.
розробити програмний комплекс з використанням об’єктно-орієнтованого програмування.
Поставлені завдання виконані.
СПИСОК ЛІТЕРАТУРИ
1.
Г. Шилдт.
Самоучитель С++:Пер. с англ. - 3-е изд.: - СПб.:БХВ-Петербург,2001. - 688 с.
2.
В.П.
Румянцев. Азбука программирования в Win 32 API. - 3-е изд.: - Москва, «Горячая
линия - телеком», 2001.
3.
Мешков
А., Тихомиров Ю. Visual C++ и MFC.:В трех томах. Том 1 - СПб.:BHV -- Санкт -
Петербург, 1997. - 451 с.,ил.
4.
Мешков
А., Тихомиров Ю. Visual C++ и MFC.:В трех томах. Том 2 - СПб.:BHV -- Санкт -
Петербург, 1997. - 464 с.,ил.
5.
Глинский
Я.М., Анохін В.Є., Ряжська В.А. С++ Bulder Навчальний посібник Львів
2004р.-192с.
6.
Давыдов
В.Г. Технология программирования С++ СПб: БХВ-Петербург, 2005-672с.
7.
Савитч,
Уолтер Язык С++. Курс объектно-ориентированного программирования. 3-е изд. М.:
Издательский дом «Вильямс», 2001-704с.
8.
Подбельский
В.В., Фомин С.С. Программирование на языке Си: Учеб. пособие. - М.: Финансы и
статистика, 1998. - 600 с.: ил.
ДОДАТКИ
Додаток А
Керівництво програміста
Призначення програми - демонстрація роботи розробленого
класу. Мінімальні системні вимоги: операційна система Windows XP або DOS,
монітор з мінімальним розширенням екрану 640 на 480 пікселів, відеокарта,
клавіатура.
Програма працює в текстовому режимі. Управління передається
через методи об’єктів. Інформація, що отримується від користувача - введення
даних з клавіатури. Вихідні дані - обчислення .
Додаток Б
Керівництво оператора
Розроблена програма призначена для учбових цілей, демонструє
роботу розробленого класу.
Мінімальні системні вимоги: операційна система Windows XP або
DOS, монітор з мінімальним розширенням екрану 640 на 480 пікселів, відеокарта,
клавіатура.
Додаток В
Текст прогарами
Файл інтерфейсу kirtr.hkvadrat { //создание класса kvadrat
float a ;//
public://модификатор доступа
float Geta();//прототип метода ...(что он делает)
kvadrat();//прототип конструктора без параметров
kvadrat(int t);//прототип конструктора с параметрами
float ploshat();//еще один метод
float perim();//
float diag();//
void show();//
};piram: public kvadrat{//создание класса piram
float f;//apofema
public://модификатор доступа
piram(float f1,float a):kvadrat(a)//конструктор с параметрами piram с
наследованием из класса kvadrat
{=f1;//
}
float pl();//прототип метода
float v();//прототип метода
};
Файл реалізації kirtr.cpp
#include "kirtr.h"
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <locale.h>
#include <dirent.h>kvadrat::Geta(){ return a;}//сам метод
Geta()
kvadrat::kvadrat(){a=0;}//сам конструктор без параметров::kvadrat(int
t){a=t;}//сам конструктор с параметрами
float kvadrat::ploshat()//сам метод ploshat()
{ return a*a;}//возращает значениеkvadrat::perim()//сам метод
perim()
{return 4*a;}//возращает значениеkvadrat::diag()//сам метод
diag()
{return (a*a+a*a);}//возращает значениеkvadrat::show()//сам метод
show()
{cout<<a<<endl;}//выводит ответ на экранpiram::pl()//сам
метоад
{
float SB;//обявление переменной SB
SB=0.5*perim()*Geta();//присваивание переменной SB такогото значения
return SB+ ploshat();//возврат переменной SB + результат функции
ploshat()
}piram::v()//
{
float h,t;//
h=sqrt(f*f-((Geta()/(2*tan(45))*(2*tan(45)))));//
t=(float)1/3;//
return t*ploshat()*h;//
}
Файл основного програмного додатку kirman.cpp
#include "kirtr.cpp"
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <locale.h>
int k;
while (1)
{();<<"Bb|bepute nynkt menu"<<endl;
cout<<"1.Pabotu c klaccom
bzoBb|m"<<endl; <<"2.Pabotu c klaccom proizvodnim"<<endl;
cout<<"5.Vixod"<<endl;
cin>>k;
switch(k)
{1:{
int xx;
cout<<"Vvedite dliny ctoroni kvadrata\n";
cin>>xx;
kvadrat x(xx);
cout<<"perim "<<x.perim()<<endl;
cout<<"plochad
"<<x.ploshat()<<endl; cout<<"diagonal
"<<x.diag()<<endl; getch();
break;//
}2:{ piram d(12,5);//
cout<<"Plochad "<<d.pl()<<endl;
cout<<"Obem "<<d.v()<<endl;
getch();
break;
}
}(k==5) break;
}
}
Додаток Д
Экранні форми
Рисунок 1.
Рисунок 2.