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

Міністерство освіти і науки України

Горлівський технікум

Донецького національного університету

























Курсова робота

Об’єктно-орієнтоване програмування

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









Студент

М.С. Кравченко











2009


РЕФЕРАТ



Курсова робота: 20 сторінок,3 джерела, 1 додаток

Мета роботи: вивчити об’єктно-орієнтоване програмування та скласти програму мовою Borland C++ до методу

Предмет дослідження: об’єктно-орієнтоване програмування

Об’єкт дослідження: розрахунок оцінок 

Методи дослідження: інформаційний, графічний, методи програмування


ЗМІСТ



Вступ

Розділ 1. Базові засоби мови С++

	Розділ 2. Технологія складу програм

	Розділ 3. Об’єктно-орієнтоване програмування

Висновки

Перелік використаних джерел

Додаток A


ВСТУП



Мова C++ є однією з найпоширеніших сучасних мов програмування. Вона займає домінуюче положення в світі персональних комп'ютерів. C++ - універсальна мова високого рівня. Але окрім властивостей, властивих іншим мовам високого рівня (структурність, модульність програм), в неї включені засоби програмування, властиві мовам низького рівня типу Асемблера (побітові операції, операції зрушення, робота з адресами). C++ витончена і зручна для побудови багатомодульних структурованих програм. Вона є могутнім і гнучким засобом для написання на ній операційних систем, їх компонентів. Мова C++ є продовженням і розвитком мови С, розробленої Д. Рітчи на початку сімдесятих років і що набула широке поширення. Сама ж мова C++, розроблена Бьярном Страуструпом, з'явилася лише в 1983 р. До стандарту Д. Рітчи були додані нові елементи, можливості, що істотно розширили його. Це перш за все класи, додавання яких зробило C++ однією з самих широко використовуваних об'єктно-орієнтованих мов програмування. Не дивлячись на відносно недавню розробку, мова C++ до теперішнього часу вже завоювала велику популярність як у професійних, так і програмістів, що починають.


РОЗДІЛ 1.БАЗОВІ ЗАСОБИ МОВИ С++



Програма розв`язання будь-якої задачі на мові С++ складається з однієї або кількох програмних модулів, які називаються функціями. На зовнішньому носії інформації програма може записуватись в одному або кількох файлах. Файл – частина зовнішнього носія, яка має своє ім`я, і при обмінах з пам`яттю, іншими частинами даного носія або з іншими носіями розглядається як одне ціле.

Клас_пам`яті тип ім`я (опис формальних параметрів )

 { тіло функції }

Кожна функція має своє ім`я. Передбачені в ній обчислення записуються в тілі функції за допомогою послідовності операторів мови. При цьому можуть зустрічатись як дії над величинами, які обчислюються в самій функції, так і над невідомими величинами, які надходять в функцію у вигляді аргументів обчислювального процесу. Для прийому деяких аргументів і служать формальні параметри. Це величини,значення яких визначаються іншою функцією, яка визвала дану функцію. В заголовку функції (перший рядок) наводиться клас пам`яті та тип значення, що обчислюється, ім`я функції і опис формальних параметрів. Клас пам`яті показує область програми, де можна звернутись до даної функції. Тип задає тип обчислюємого функцією значення. Клас пам`яті та формальні параметри функції можуть бути відсутніми. Якщо функція крізь своє ім`я не передає значення , то тип задається словом void. При поставлених значеннях формальних параметрів х,у обчислює деяке значення цілого типу (int). Формальні параметри х та у мають відповідно типи цілий (int) та з плаваючою крапкою (float). Величини цілого типу – це цілі числа, які в пам’яті представляються своїми двійковими кодами так, що їх молодші розряди займають початкові чи кінцеві біти виділеного поля. Знак займає один біт й записується для позитивних чисел цифрою 0, для негативних – цифрою 1. В залежності від довжини величини цілого типу бувають короткими та довгими. Для їх опису прийняті відповідно специфікатори short int, int, long int. Величини типу short int в пам*яті займають 2 байти, типу long int – 4 байти і змінюються . довжина величин типу int на стандартній мові не визначена, вона залежить від комп’ютера і компілятора і співпадає з довжиною або short , або long. Для знакових цілих перед специфікатором типу наводиться модифікатор signed, для без знакових – модифікатор unsigned, наприклад , unsigned short. Для величин unsigned int тип можна наводити просто як unsigned, якщо модифікатор не наведений, то по умовчанню ціла величина вважається типу signed. Величини символьного типу – це двоїнні коди будь-яких символів. Для символьних величин прийнятий специфікатор типу shar. Як і цілі, символьні величини можуть бути знаковими (з модифікатором sixgned) і без знаковими (з модифікатором unsigned). По стандарту приймається signed. Величини з плаваючою крапкою або речові – це нормалізор. Таким чином, тип величини характеризує довжину його подання в пам’яті. Він суттєво використовується під час роботи з цією величиною. Нприклад, при множенні цілих чисел х та у виконується операція множення двійкових чисел х та у. Величину типу void використовуються для позначення об’єктів невизначеного типу. Оператори програми записуються у вільному форматі. Але для вірності кожний з них слід починати з нової строки. Наприклад:



 main()

 {



 {

 }

 }



Оператор вираження: е, являється будь-яким вираженням, котре закінчується крапкою з комою. Виконання цього оператора полягає у розрахуванні вираження е. Оператор безумовного переходу має вигляд goto мітка:. Цей оператор незалежно від стану рахунку передає керування на оператор даної функції, перед яким стоїть задана мітка.

Умовний оператор if має дві форми: простий if та оператор подвійного вибору if-else. Вони мають вигляд



If(e)s

If(e)s1 else s2



Оператор множинного вибору switch дозволяє проводити за однією з галузей множинного гілкування алгоритму.

Існує три типи операторів циклу. Це 



for (e1; e2; e3)s

while (e)s

do s while (e)



де e, e1, e2, e3 довільні вирази в тому числі й вирази, які мають в собі операції «кома», s - простий або складений оператор. 


РОЗДІЛ 2. ТЕХНОЛОГІЯ СКЛАДУ ПРОГРАМ



2.1 Структурне програмування



Процес програмування також організується по принципу «зверху до низу» : спочатку кодуються модулі верхнього рівня й складаються текстові приклади для їх відладки, при цьому на місце ще не написаних модулей наступного рівня ставляться тимчасові програми. Тимчасові програми у найпростішому випадку видають повідомлення про те, що їм передано керування, а після того повертають його у викликаючий модуль. В інших випадках тимчасові програми можуть видавати значення, задані заздалегідь або обчислені по спрощеному алгоритмі. Таким чином, спочатку створюється логічний кістяк програми, що потім обростає плоттю коду. Логічно застосовувати до процесу програмування висхідну технологію - написати й налагодити спочатку модулі нижнього рівня, а потім поєднувати їх у більші фрагменти, але цей підхід має ряд недоліків.

По-перше, у процесі кодування верхнього рівня можуть бути розкриті ті або інші труднощі проектування більш низьких рівнів програми. Якщо подібна помилка виявляється в останню чергу потрібні додаткові витрати на переробку вже готових модулів нижнього рівня.

По-друге, для налагодження кожного модуля, а потім більших фрагментів програми потрібно щораз складати свої текстові приклади, і програміст часто змушений імітувати те оточення, у якому повинен працювати модуль.



2.2 Модульне програмування



Згодом при проектуванні програм акцент змістився з організації процедур на організацію структур даних. Крім усього іншого це викликано й ростом розмірів програм.

Модулем звичайно називають сукупність зв'язаних процедур і тих даних, якими вони управляють. Визначте, які модулі потрібні; поділіть програму так, щоб дані були сховані в цих модулях. Ця парадигма відома також як "принцип приховання даних". Якщо в мові немає можливості згрупувати зв'язані процедури разом з даними, то він погано підтримує модульний стиль програмування. Тепер метод написання "гарних" процедур застосовується для окремих процедур модуля. Типовий приклад модуля – визначення стека. Тут необхідно вирішити такі завдання:

1. Надати користувачеві інтерфейс для стека (наприклад, функції push () і pop ()).

2. Гарантувати, що подання стека (наприклад, у вигляді масиву елементів) буде доступно лише через інтерфейс користувача.

3. Забезпечувати ініціалізацію стека перед першим його використанням.

Цілком можливо, що реалізація стека може змінитися, наприклад, якщо використати для зберігання зв'язаний список. Користувач у кожному разі не має безпосереднього доступу до реалізації: v й p - статичні змінні, тобто змінні локальні в тім модулі (файлі), у якому вони описані. Оскільки дані є єдина річ, що хочуть приховувати, поняття приховування даних тривіально розширюється до поняття приховування інформації, тобто імен змінних, констант, функцій і типів, які теж можуть бути локальними в модулі. Хоча С++ і не призначався спеціально для підтримки модульного програмування, класи підтримують концепцію модульності. Крім цього С++, природно, має вже продемонстровані можливості модульності, які є в С, тобто подання модуля як окремої одиниці трансляції.



2.3 Об’єктно-орієнтоване програмування



Проблема полягає в тому, що ми не розрізняємо загальні властивості фігур (наприклад, фігура має кольори, її можна намалювати й т.д.) і властивості конкретної фігури (наприклад, окружність - це така фігура, що має радіус, вона зображується за допомогою функції, що малює дуги й т.д.). Суть об’єктно-орієнтованого програмування в тім, що воно дозволяє виражати ці розходження й використовує їх. Мова, що має конструкції для вираження й використання подібних розходжень, підтримує об’єктно-орієнтоване програмування. Всі інші мови не підтримують його. Ті функції, для яких можна визначити заявлений інтерфейс, але реалізація яких (тобто тіло з операторною частиною) можлива тільки для конкретних фігур, відзначені службовим словом virtual (віртуальні). У Симулі й С++ віртуальність функції означає: "функція може бути визначена пізніше в класі, похідному від даного". Для визначення конкретної фігури варто вказати, насамперед, що це - саме фігура й задати її особливі властивості (включаючи й віртуальні функції. У мові С++ клас circle називається похідним стосовно класу shape, а клас shape називається базовим для класу circle. Можлива інша термінологія, що використає назви "підклас" й "суперклас" для класів circle й shape відповідно. Тепер парадигма програмування формулюється так: визначите, який клас вам необхідний; надайте повний набір операцій для кожного класу; спільність класів визначте явно за допомогою спадкування. Якщо спільність між класами відсутній, цілком достатньо абстракції даних. Наскільки застосовне об’єктно-орієнтоване програмування для даної області додатка.


РОЗДІЛ 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 відповідно. Тепер парадигма програмування формулюється так: Визначите, який клас вам необхідний; надайте повний набір операцій для кожного класу; спільність класів виразите явне за допомогою спадкування. Якщо спільність між класами відсутня, цілком достатньо абстракції даних. Наскільки застосовне об’єктно-орієнтоване програмування для даної області додатка визначається ступенем спільності між різними типами, що дозволяє використовувати спадкування і віртуальні функції. У деяких областях, таких, наприклад, як інтерактивна графіка, є широкий простір для об’єктно-орієнтованого програмування. В інших областях,

у яких використовуються традиційні арифметичні типи й обчислення над ними, важко знайти застосування для більш розвитих стилів програмування, чим абстракція даних. Цей засіб, що підтримує об’єктно-орієнтоване програмування, мабуть, надлишковий. Перебування спільності серед окремих типів системи являє собою нетривіальний процес. Ступінь такої спільності залежить від способу проектування системи. У процесі проектування виявлення спільності класів повинне бути постійною метою. Вона досягається двома способами: або проектуванням спеціальних класів, використовуваних як "цеглини" при побудові інших, або пошуком схожих класів для виділення їхньої загальної частини в один базовий клас. Отже, ми вказали, яку мінімальну підтримку повинна забезпечувати мова програмування для процедурного програмування, для заховування даних, абстракції даних і об’єктно-орієнтоване програмування. 


ВИСНОВКИ



Підводячи підсумок роботи, хочу зазначити, що в ході роботи було розглянуте об’єктно-орієнтоване програмування. Слід зазначити, що воно широко використовується у програмуванні. У ньому реалізовані основні складаючи: інкапсуляція, поліморфізм та наслідування. Це дає змогу об’єднання даних та використовувати їх функції в одне ціле, що робиться за допомогою класів. Є можливість позначати різні, але сходні дії однаковими іменами та створювати єдині інтерфейси для різних реалізацій одного й того ж алгоритму, позначаючи їх однаковими іменами. І третя властивість, яка є теж важливою – присвоєння одним класом властивостей другого класу.


СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ



		Калоєров С.А. Програмування на мові С++: учбовий посібник. – Д.: ООО «Юго – Восток, Лтд», 2004.

		Стауступ Б. Мова програмування С++. – 3-те вид. / Пер. з англ. – СПб.: БІНОМ, 1999.

Павловська Т.А. Програмування на мові високого рівня - СПб: Пітер, 2003 


ДОДАТОК А



Скласти клас для дослідження оцінок студента у сесії на якість (на «4» і «5») і неуспішність (наявність хоча б однієї оцінки «2»). Використовуючи цей клас, скласти програму знаходження кількості студентів групи, успішних на «4» і «5» та неуспішних, а також вирахувати процентне відношення для кожного з цих показників. Студенти у сесії здавали 4 іспиту.





n, rx45, rx2,k

ПОЧАТОК

rx45+=sr.r45(),

rx2+=sr.r2()

k<= n

rx45=0, rx2=0, k=1



























КІНЕЦЬ





Код програми:



#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<<"%";}



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