Міністерствоосвіти і науки України
Горлівськийтехнікум
Донецькогонаціонального університету
Курсоваробота
Об’єктно-орієнтованепрограмування
Технологіяскладу програм. Базові засоби мови 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, longint. Величини типу 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)s1else s2
Оператормножинного вибору switch дозволяє проводити за однією з галузей множинногогілкування алгоритму.
Існуєтри типи операторів циклу. Це
for(e1; e2; e3)s
while(e)s
dos 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
{
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//Підключення бібліотек
class Student{
public: //Описчленів
void cinr();
void coutr();
int r45();
int r2();
private:
int s[4];}; //Масивввода оцінок
void Student ::cinr() //Функція ввода оцінок студента
{cout
for (int k=0;k
cin>>s[k];
}
void Student ::coutr() //Функція вивіда оцінок студента
{cout
for (int k=0;k
cout
}
int Student ::r45() //Функція дослідження оцінок
{int p=1;
for (int k=0;k
if(s[k]
return p;
}
int Student ::r2() //Функція дослідження оцінок на «2»
{int p=0;
for (int k=0;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
{sr.cinr();
sr.coutr();
rx45+=sr.r45();
rx2+=sr.r2();
}
cout
cout
Результати роботипрограми:
/>