РОЗДІЛ 3. ОБ’ЄКТНО-ОРІЄНТОВАНЕ ПРОГРАМУВАННЯ
Ми не розрізняємо загальні властивості фігур (наприклад, фігура має колір, її можна намалювати і т.д.) і властивості конкретної фігури (наприклад, окружність - це така фігура, що має радіус, вона зображується за допомогою функції, що малює дуги і т.д.). Суть об’єктно-орієнтованого програмування в тім, що воно дозволяє виражати ці розходження і використовує них. Мова, що має конструкції для вираження і використання подібних розходжень, підтримує об’єктно-орієнтоване програмування. Всі інші мови не підтримують його. У цьому програмуванні основну роль грає механізм спадкування, запозичений з мови Симула. Спочатку визначимо клас, що задає загальні властивості усіх фігур:
їclass shape
{
point center;
color col;
// ...
public:
point where () { return center; }
void move ( point to ) { center = to; draw(); }
virtual void draw ();
virtual void rotate ( int );
// ...
};
Ті функції, для яких визначаємо заявлений інтерфейс, але реалізація яких (тобто тіло з операторною частиною) можлива тільки для конкретних фігур, відзначені службовим словом vіrtual (віртуальні). У Симуле і С++ віртуальність функції означає: "функція може бути визначена пізніше в класі, похідному від даного". З урахуванням такого визначення класу пишу загальні функції, що працюють з фігурами:
void rotate_all ( shape v [], int size, int angle )
// повернути всі елементи масиву "v" розміру "size"
// на кут рівний "angle"
{
int i = 0;
while ( i<size )
{
v [ i ] . rotate ( angle );
i = i + 1;
}
}
Для визначення конкретної фігури варто вказати, насамперед , що це - саме фігура і задати її особливі властивості (включаючи і віртуальні функції):
class circle : public shape
{
int radius;
public:
void draw () { /* ... */ };
void rotate ( int ) {} // да, поки функція порожня
};
У мові С++ клас cіrcle називається похідним стосовно класу shape, а клас shape називається базовим для класу cіrcle. Можлива інша термінологія, що використовує назви "підклас" і "суперклас" для класів cіrcle і shape відповідно. Тепер парадигма програмування формулюється так: Визначите, який клас вам необхідний; надайте повний набір операцій для кожного класу; спільність класів виразите явне за допомогою спадкування. Якщо спільність між класами відсутня, цілком достатньо абстракції даних. Наскільки застосовне об’єктно-орієнтоване програмування для даної області додатка визначається ступенем спільності між різними типами, що дозволяє використовувати спадкування і віртуальні функції. У деяких областях, таких, наприклад, як інтерактивна графіка, є широкий простір для об’єктно-орієнтованого програмування. В інших областях,
у яких використовуються традиційні арифметичні типи й обчислення над ними, важко знайти застосування для більш розвитих стилів програмування, чим абстракція даних. Цей засіб, що підтримує об’єктно-орієнтоване програмування, мабуть, надлишковий. Перебування спільності серед окремих типів системи являє собою нетривіальний процес. Ступінь такої спільності залежить від способу проектування системи. У процесі проектування виявлення спільності класів повинне бути постійною метою. Вона досягається двома способами: або проектуванням спеціальних класів, використовуваних як "цеглини" при побудові інших, або пошуком схожих класів для виділення їхньої загальної частини в один базовий клас. Отже, ми вказали, яку мінімальну підтримку повинна забезпечувати мова програмування для процедурного програмування, для заховування даних, абстракції даних і об’єктно-орієнтоване програмування.
ВИСНОВКИ
Підводячи підсумок роботи, хочу зазначити, що в ході роботи було розглянуте об’єктно-орієнтоване програмування. Слід зазначити, що воно широко використовується у програмуванні. У ньому реалізовані основні складаючи: інкапсуляція, поліморфізм та наслідування. Це дає змогу об’єднання даних та використовувати їх функції в одне ціле, що робиться за допомогою класів. Є можливість позначати різні, але сходні дії однаковими іменами та створювати єдині інтерфейси для різних реалізацій одного й того ж алгоритму, позначаючи їх однаковими іменами. І третя властивість, яка є теж важливою – присвоєння одним класом властивостей другого класу.
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
1. Калоєров С.А. Програмування на мові С++: учбовий посібник. – Д.: ООО «Юго – Восток, Лтд», 2004.
2. Стауступ Б. Мова програмування С++. – 3-те вид. / Пер. з англ. – СПб.: БІНОМ, 1999.
Павловська Т.А. Програмування на мові високого рівня - СПб: Пітер, 2003
ДОДАТОК А
Скласти клас для дослідження оцінок студента у сесії на якість (на «4» і «5») і неуспішність (наявність хоча б однієї оцінки «2»). Використовуючи цей клас, скласти програму знаходження кількості студентів групи, успішних на «4» і «5» та неуспішних, а також вирахувати процентне відношення для кожного з цих показників. Студенти у сесії здавали 4 іспиту.
Код програми:
#include<iostream.h> //Підключення бібліотек
class Student{
public: //Опис членів
void cinr();
void coutr();
int r45();
int r2();
private:
int s[4];}; //Масив ввода оцінок
void Student :: cinr() //Функція ввода оцінок студента
{cout<<"Vvedite ocenky studenta: ";
for (int k=0; k<4; k++)
cin>>s[k];
}
void Student :: coutr() //Функція вивіда оцінок студента
{cout<<"Ocenky studenta: \n";
for (int k=0; k<4; k++)
cout<<s[k];
}
int Student :: r45() //Функція дослідження оцінок
{int p=1;
for (int k=0; k<4; k++)
if (s[k]<4)p=0;
return p;
}
int Student :: r2() //Функція дослідження оцінок на «2»
{int p=0;
for (int k=0; k<4; k++)
if (s[k]==2)p=1;
return p;
}
void main()
{int n; //Кількість студентів в групі
cin>>n;
int rx45=0;
int rx2=0;
Student sr;
for (int k=1; k<=n; k++)
{sr.cinr();
sr.coutr();
rx45+=sr.r45();
rx2+=sr.r2();
}
cout<<"Na 4 i 5 sdaly"<<rx45<<"studentov ili"
<<rx45*100.0/n<<"%";
cout<<"Hotya by odnu 2 imeyut"<<rx2<<"studentov ili"
<<rx2*100.0/n<<"%";}
Результати роботи програми: