Смекни!
smekni.com

Технологія складу програм. Базові засоби мови C++ (стр. 2 из 2)


РОЗДІЛ 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: &bsol;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<<"%";}

Результати роботи програми: