Обьеткіге бағытталған бағдарламалау.

Автор работы: Пользователь скрыл имя, 17 Февраля 2015 в 04:59, курсовая работа

Описание работы

Қазіргі уақытта программалуда 3 концепция белгіленген:
 объектілі бағытталған программалау; (ОБП)
 унификацияланған модельдеу тілі (UML)
 программалық қамтамаларды құру арнайы жабдықтары.

Файлы: 1 файл

Обьеткіге бағытталған бағдарламалау.docx

— 55.61 Кб (Скачать файл)

тиым салынған, яғни А класының объектісі 
private бөліктегі берілгендерді көре алмайды.

А класының объектісі тек public бөліктегі 
берілгендерді ғана көре алады.

obj A

Енді мұрагерлік жағдайдағы көру спецификаторларын қарастырайық:

class В базалық класы 
Туынды класс D 
class D: public

obj B

obj D

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Кластар иерархиясы

 
Бір компанияның қызметкерлері жөнінде мәліметтер базасын құру керек болсын. Компаниядда қызметкерлердің үш категориясы жұмыс істесін, яғни менеджерлер, ғалымдар және жұмысшылар. Базада қызметкерлердің есімі және идентификциялық номерлері, сонымен қатар менеджерлер үшін олардың қызметінің есімі, гольф-клубқа төлейтін взностың нөмері, ғалымдар үшін олардың жарық көрген ғылыми еңбектер саны қажет болсын. 
Бұл программаны құру үшін empogee базалық класын сипаттаудан бастаймыз. Класта қызметкердің фамилиясы және номері беріледі және оларды енгізу және шығару әдістері беріледі. Бұл кластан туынды manager, scientist және laborer кластары алынады. Олар қосымша ақпараттарды қабылдайды.

emplogee

— private

— public

manager scientist laborer

manager scientist laborer

foreman 
foreman

Енді жұмысшылардың ішінде бригадир бар болатын болсын, онда туынды laborer класынан туынды foreman туынды класын аламыз. Бригадир жұмыс жоспарының орындалуын қадағаласын. Яғни туынды кластардан да туынды класты алуға болады. 
#include 
cons tint LEN=80; 
class employee 
{private: 
char name[LEN]; 
unsigned long number; 
public: 
void getdata() 
{cout<>name; 
cout<>number; 

void putdata() const 
{cout< cout< } 
}; 
class manager: public employee 
{private: 
char title[LEN]; 
double dues; 
public: 
void getdata() 

empoyee::getdata(); 
cout<>title; 
cout<>dues; 

void putdata() 

employee::putdata(); 
cout< cout< } 
}; 
class scientist: public employee 
{private: 
int pubs; 
public: 
void getdata() 

employee::getdata(); 
cout<>pubs; 

void putdata() 

employee::putdata(); 
cout< } 
}; 
class laborer: public employee 

}; 
class foreman: public laborer 
{private: 
float quotas; 
public: 
void getdata() 

laborer::getdata(); 
cout<>quotas; 

void putdata() 

laborer::putdata(); 
cout< }}; 
int main() 
{laborer l1; 
foreman f1; 
cout< l1.getdata(); 
cout< f1.getdata(); 
cout<<< l1.putdata(); 
cout< f1.putdata(); 
cout< return 0; 

Кластың әдістерін алуды реттеп отыруға болады. Оның бірі туынды кластарды анықтау барысында. Осы уақытқа дейін туынды класты public сөзінің көмегімен алдық. Яғни туынды кластың объектілері базаық кластың public бөлігіндегі берілгендерді көре алады. Енді private сөзінің көмегімен де туынды кластарды анықтауға болады. Бұл жағдайда туынды кластың объектілері, базалық кластың public бөлігіндегі берілгендерді ала алмайды. 
class A 
class C: private A 
class B:public A

obj A

obj B obj C

 

 

  1. Виртуальді әдістер

Виртуальді деген сөз көрінеді, бірақ нақты өмірде жоқ дегенді білдіреді. Виртуальді функцияларды қолдану барысында программа белгілі бір кластың функциясын шақырп тұрған сияқты, бірақ басқа кластың функциясы орындалады. Келесі мысалды қарастырайық.

#include 
class Base 
{public: 
void show() 
{cout< }; 
class Dev1: public Base 
{public: 
void show() 
{cout< }; 
class Dev2 : public Base 
{public: 
void show() 
{cout< }; 
void main() 
{ Dev1 dv1; 
Dev2 dv2; 
Base* ptr; 
ptr=&dv1; 
ptr->show(); 
ptr=&dv2; 
ptr->show(); 

Программада Dev1, Dev2 кластары — Base базалық класының туынды кластары. Әр класта show() функциясы анықталған. main() функциясында Dev1, Dev2 кластарының объектілері және Base класына көрсеткіш анықталған. Туынды кластың адресі базалық кластың көрсеткішіне меншіктелген. ptr->show() функциясы туынды класттың функциясын шақыру керек болып көрінгенмен, базалық класқа тиісті функция шақырылады. Программаны экранға келесі ақпарат шығарады: 
Base 
Base 
Туынды кластардың функцияларын орындату үшін негізгі кластағы show() функциясының жариялануының алдына virtual қызметші сөзін жазамыз. 
#include 
class Base 
{public: 
virtual void show() 
{cout< }; 
class Dev1: public Base 
{public: 
void show() 
{cout< }; 
class Dev2 : public Base 
{public: 
void show() 
{cout< }; 
void main() 
{ Dev1 dv1; 
Dev2 dv2; 
Base* ptr; 
ptr=&dv1; 
ptr->show(); 
ptr=&dv2; 
ptr->show(); 

Программаның орындалу нәтижесінде экранда 
Dev1 
Dev2 
ақпаратын аламыз, яғни туынды кластың функцияларының жұмыс істегені көрініп тұр. Функциялардың бұлай шақырылуы кешіктіріліп байланыс құру деп аталады. 
Объектілері ешқашан қолданылмайтын, бірақ туынды кластарды құру үшін қажет негізгі кластарды, яғни кластар иерархиясын құру үшін, абстракты кластар дейді. Абстракты класты ретсіз қолданудан программада қорғау үшін класқа таза виртуальді функция енгізеді. Таза виртуальді функция дегеніміз оның жариялануынан кейін ‘=0’ өрнегі көрсетілген функция. Жоғарыдағы мысалда Base класын келесі түрде анықтасақ 
class Base 
{public: 
virtual void show()=0; 
}; 
онда Base класының объектісін құру кезінде компилятор қате жөнінде хабарлама береді. Көп жағдайларда, мысалы операцияларды асыра жүктеу барысында, объектінің өзіне өзі сілтейтін көрсеткіш қолданылады. Ол this қызметші сөзімен анықталады.

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Көпфайлды программалар

Файларалық айнымалылар

Алдымен жариялаумен анықтаудың арасындағы айырмашылықты қарастырайық. Жариялау барысында жай анымалының типін және есімін көрсетеміз. Жариялау барысында бірден жадыдан орын бөлінбейді. Айнымалыны анықтау барысында ғана жадыдан орын бөлінеді. Яғни анықтау барысында ғана нақты айнымалы құрылады. 
Бірақ көпшілік жариялаулар бір мезгілде анықтаулар да болып келеді. Тек жалғыз ғана extern сөзі қолданылған жариялау анықтау болып есептелмейді, яғни бұл сөзбен сипатталған жариялау үшін жадыдан орын бөлінбейді. 
int sv; — жариялау және анықтау 
extern int v; — тек қана жариялау. 
Глобальді айнымалы программа бірнеше файлдардан тұрса да, бір ғана рет анықталынуы қажет. Программа А және В файлдарынан тұрсын. 
Файл А 
int globv; — А файлында анықтау 
Файл В 
int globv; — қате жариялау. 
Егер келесі түрде жазсақ, олда қате болады: 
Файл А 
int globv; — А файлында анықтау 
Файл В 
globv=3; — қате, себебі В файлында А файлындағы анықтау көрінбейді. 
Бұл қателерді extern сөзін қолдану арқылы жоя аламыз. 
Файл А 
int globv; — А файлында анықтау 
Файл В 
extern int globv; — extern сөзі бұл тек жариялау екендігін көрсетеді. Жадыдан 
globv=3; орын бөлінбейді. А файлындағы globv айнымалысы В 
файлында да көрінеді. 
еxtern жариялауында бірден инициализациялауға болмайды. 
Егер әртүрлі файлдарда бірдей есімді глобальді айнымалылырды қолдану керек болса, онда оларды static қызметші сөзінің көмегімен сипаттау керек. Ол кезде глобальді айнымалының көріну облысы файлдың көлемі болады, яғни сондай есіммен басқа айнымалыларды (жадыда бөлінген орындар) өзге файлдарда қолдана беруге болады. 
Файл А 
static int globv; — тек А файлында көрінеді 
Файл В 
static int globv; — тек В файлында көрінеді 
const сөзінің көмегімен сипатталған айнымалы тек сол файлда ғана көрінетіндігін білеміз. Бірақ оны басқа файлдарда да көрінетін етуге болады. Ол үшін extern сөзін қолдану керек. 
Файл А 
еxtern const int с=99; (анықтау) 
Файл В 
еxtern const int с; — жариялау. В файлында А файлында анықталған с көрінеді.

 

 

 

Файларалық функциялар

Функцияны жариялау дегеніміз оның есімін, қайтаратын типін және аргументтерінің типтерін көрсету. Анықтау дегеніміз – ол жариялау және функияның коды. Сондықтан функцияларды бір файлда анықтап, басқа файлдарда жариялап, содан соң шақыра беруге болады.

Файл А 
int add(int a, int b) – функцияны анықтау 
{return a+b;} 
Файл В 
int add(int, int); — функцияны жариялау 
……………….. 
int d=add(2,3); — функцияны шақыру 
Бұл жағдайда extern сөзінің қажеті жоқ. Айнымалылар сияқты функцияны да басқа файлда көрсетпеуге болады. 
Файл А 
static int add(int a, int b) — функцияны анықтау 
{return a+b;} 
Файл В 
static int add(int a, int b) — басқа функция 
{return a+b;} 
Файларалық кластар

Кластың жай айнымалыдан өзгешелігі, класты анықтау жадыдан орын бөлуді білдірмейді. Ол тек класқа нелер кіретіндігін, яғни құрамын көрсетеді. Сондықтан кез келген файлдан класты көру үшін әр файлда класты қайта анықтау керек. 
Көптеген компиляторлар көпфайлды қосымшаларды басқарады, оларды проекттер деп атайды. Файлдарды біріктіру жөнінде ақпарат арнайы файлда сақталады. Ол проект файлы деп аталады. Microsoft ортасында проекттінің кеңеймесі .DSP болады. Проект файлы автоматты түрде жаңарып отырады. Негізгі және тақырыптық файлдар компиляцияланып, .OBJ және .LIB файлдары біріктіріліп орындалатын .EXE файлы құрылады. 
Тақырыптық файлда класты қайталанып анықталуынан қорғау үшін файлды келесі препроцессор директивасынан бастау керек: 
#if !defined (My_cl) — егер My_cl лексемасы анықталмаса 
#define My_cl — оны анықтау 
………… — класты анықтау 
#endif — директиваның шартын жабу 
Бұл әдісті тақырыптық файлды негізгі файлдарға бірнеше рет қосу керек болған жағдайларда қолдану қажет. 
Көпфайлды проектіні құру алгоритмі: 
1. Projects -> Win 32 Console Application 
2. Проект есімін енгізу 
3. File -> New -> Files 
4. C/C++ Header File 
5. Тақырыптық файл есімін енгізу 
6. Тақырыптық файл мәтінін енгізу 
7. File -> New ->Files 
8. C++ Source ->File 
9. Кеңеймесі .срр болатын класс әдістерімен негізгі программа сақталатын файл есімін енгіземіз 
10. Build – компиляциялау және біріктіру 
11. Execute – орындау. 
Екі бағытталған тізім негізінде құрылған көпфайлды программа мысалы: 
// m_cl_cl.cpp файлы 
#include «m_cl.h» 
void main() 

pl d,d2,d3; 
int xx; 
for (int i=0;i { 
cout< cout << strcat (sun, moon) << endl; 

Бұл программа қандай нәтиже береді? 
1) sunmoon 2) MOONSUN 3) sun+moon 4) moonsun 5) 5

109. Программа нені экранға шығарады? 
int *c, *v, cl, c2, m; 
с1=5; c2=4; с=& cl; v=& c2; m=*c**v/*с; сout< 1) Программа m айнымалысының мәнін есептеу барысында қате жіберілуі жөнінде хабарлама береді 
2) 1 3) 2 4) 20 5) 5/4

110. Обьектілі бағытталған программалаудың негізгі принцптеріне не жатады: 
1) Инкапсуляция, полиморфизм; 
2) Инкапсуляция, полиморфизм, мұрагерлік; 
3) Полиморфизм, мұрагерлік; 
4) Инкапсуляция, мұрагерлік; 
5) Класс, полиморфизм, мұрагерлік; 
111. Келесі кластар және объектілер бар болсын. 
class a {private: int i; void d(); protected: int z; void r(); public: int k; void l(); }; 
class b : public a {private: int y; public : void h();}; 
a obja; b objb; 
Қате жіберілген жауапты анықтаңыз 
1) objb.h(); 
2) int w=objb.k; 
3) int s=obja.k; 
4) int v=objb.i; 
5) obja.l(); 
112. Туынды кластың public бөлігіндегі берілгендер 
1) тек туынды кластың ішінде ғана көрінеді; 
2) тек туынды кластың ішінде көрінеді және туынды кластың объектісі ғана көре алады; 
3) базалық класc көре алады; 
4) туынды кластың объектісі ғана көре алады; 
5) базалық кластың объектісі ғана көре алады және туынды кластың ішінде ғана көрінеді.

 

 

 

 

 

ПАЙДАЛАНЫЛҒАН ӘДЕБИЕТТЕР

  1. Лофоре Р. Объектно-ориентированное программирование в С++. Классика Computer Science.4-издание. – Санкт-Петербург: «Питер», 2004 г.
  2. Коплиен Дж. Программирование на С++. Классика Computer Science. – Санкт-Петербург: «Питер», 2005 г.
  3. Вирт Н. Алгоритм + структура данных = программы. – М.: «Мир», 1985г.
  4. Бурин Е.А. Введение в основы информатики и ВТ – Алматы, «Мектеп», 1989г.
  5. Касьянов В.Н., Сабельфельд В.К. Сборник заданий по практикуму на ЭВМ.-М.:Наука,1986.
  6. Климова Л.М. Практическое программирование. Решение типовых задач. – М.:Кудиц-Образ, 2000.
  7. Любимский Э.З., Мартынюк В.В., Трифонов Н.П. Программирование. – М.: Наука, 1980.
  8. Анисимов А.В. Рекурсивные преобразователи информации. – Киев: «Вища школа», 1987г.
  9. Сауханова Ж.С. Динамикалық құрылымды берілгендер және олардың қолданылуы.-Астана: Л.Н. Гумилев атындағы Еуразия ұлттық университеті, 2005ж.

 

 

 

 


Информация о работе Обьеткіге бағытталған бағдарламалау.