/** Page structure tweaks for layout editor wireframe */ body#layout #main, body#layout #sidebar { padding: 0; } -->

понедельник, 19 декабря 2011 г.

ՏԵՍԱՆԵԼԻՈՒԹՅԱՆ ՏԻՐՈՒՅԹ ԵՎ ԿՅԱՆՔԻ ՏԵՎՈՂՈՒԹՅՈՒՆ


Նույնարկողի տեսանելիության տիրույթը  - դա ելակետային ծրագրի այն ենթատեքստն է , որտեղ  տվյալ  նույնարկողը կարող է հանդես գալ միևնույն նշանակությամբ:
C++ լեզվում   ցանկացած նույնարկողի համար նախատեսված   են երեք կարգի տեսանելիության տիրույթներ`



1. Տեղական տեսանելիության տիրույթը  -  դա ելակետային ծրա-    գրի ենթատեքստի  այն մասն է, որտեղ սահմանվում է ֆունկցիան   (կամ բլոկը): Բոլոր  ֆունկցիաները  ունեն  իրենց սեփական տեղական   տեսանելիության տիրույթները: Ֆունկցիայի ենթատեքստում պարու-նակվող յուրաքանչյուր բաղադրյալ հրահանգ (կամ բլոկ) առանձին նույնպես հանդիսանում է տեղական տեսանելիության տիրույթ:
2. Անունների տարածության տեսանելիության տիրույթ  -  ելակե-տային ծրագրի այն մասն է, որը  չի գտնվում ֆունկցիաների հայտա-րարումների և սահմանումների, ինչպես նաև դասերի սահմանումների տեքստերի մեջ: Ընդ որում,  ֆունկցայի հայտարման ժամանակ տրվում     է նրա անունը, վերադարձվող արժեքների տիպերը և պարամետրերի ցուցակը: Ֆունկցիայի սահմանման ժամանակ բացի այդ ինֆորմացիա- յից տրվում է նաև ֆունկցիայի մարմինը, որը հրահանգների համա-    խումբ է գրված ձևավոր փակագծերի մեջ:  
Տիրույթի ամենաարտաքին մասին (ֆունկցիաների հայտարարումնե-րի և սահմանումների, ինչպես նաև դասերի սահմանումների տեքստերից դուրս գտնվող մասին ) անվանում են գլոբալ տեսանելիության տիրույթ կամ անունների տարածության գլոբալ տեսանելիության տիրույթ :
3. Դասի տեսանելիության տիրույթ  -   Դասի  յուրաքանչյուր  սահ-մանում ստեղծում է դասի առանձին  տեսանելիության տիրույթ :
Ֆունկցիայի հայտարարումը գլոբալ տեսանելիության տիրույ- թում ստեղծում է գլոբալ ‎ֆունկցիա, իսկ փոփոխականի հայտարարու-   մը` գլոբալ օբյեկտ:  Լռելյայն գլոբալ փոփոխականին տրվում է զերո սկզբնական արժեք:
Եթե ֆունկցիայի մարմնում գլոբալ օբյեկտի նույնարկողը օգտա-գործվում է որպես լոկալ փոփոխականի անուն, ապա  ֆունկցիայի կա-տարման ժամանակ առաջնահերթությունը տրվում է լոկալ փոփոխա-կանին:
Ծրագրում  գլոբալ օբյեկտը կարելի է սահմանել միայն մեկ անգամ: Քանի որ  ելակետային ‎ֆայլում նախքան օգտագործելը այն պետք է հայտարաված լինի, ապա մի քանի ֆայլերից բաղկացած ծրագրում անհրաժեշտ է հնարավորություն տալ հայտարարել օբյեկտը առանց     այն սահմանելու: Այդ նպատակի համար C++ լեզվում   նախատեսված       է extern պահեստավորված բառը: Օրինակª
                 extern  int  i1;
հրահանգը ցույց է տալիս, որ ծրագրում գոյություն ունի
                                                 int  i1;
հայտարարում:
extern հայտարարումը օբյեկտի համար տեղ չի հատկացնում:    Այն միևնույն ելակետային ֆայլում կամ միևնույն ծրագրի տարբեր ֆայ-լերում  կարող է հանդես գալ մի քանի անգամ:
Եթե extern հայտարարումը պարունակում է օբյեկտի սկզբնական արժեքի վերագրում, ապա օբյեկտը համարվում է սահմանված և նրա համար հիշողության մեջ տեղ է հատկացվում: Այդ դեպքում նույն   օբյեկտի այլ հայտարարում չի թույլատրվում: Օրինակ, եթե ունենք
                                         extern  const  double  d1=12.5;
ապա d1 հաստատունի նորից հայտարարումը
                                         const  double d1;
կլինի սխալ:
Կյանքի տևողությունը -  այն ժամանակահատվածն է, որի ընթացքում տվյալ  օբյեկտը տեղ է զբաղեցնում հիշողության մեջ:
Գլոբալ օբյեկտը գոյատևում  է ծրագրի կատարման  սկզբից   մինչև վերջ: Ծրագրի կյանքի տևողությունը սկսվում է նրա թողարկման ժամանակից մինչև  ավարտը:
C++ լեզվում  լոկալ օբյեկտների  կյանքի տևողության տրման համար սահմանված է հիշողության երեք տիպերª ինքնաբերաբար, ռե-գիստրային և ստատիկ:
Լոկալ  ինքնաբերաբար  փոփոխականների համար հիշողութ- յունը առանձնացվում է անմիջապես ֆունկցիայի ակտիվացման կամ    բլոկ մտնելու ժամանակ և  հիշողությունը ազատվում է ֆունկցիայի ավարտի կամ բլոկից դուրս գալու  ժամանակ: Այդ տիպի օբյեկտների կյանքի տևողությունը վերջանում է ֆունկցիայի ավարտի հետ միաժա-մանակ և նրա արժեքը ջնջվում է:
Ըստ լռելյայն բլոկի ներսում հայտարարված բոլոր օբյեկտները ինքնաբերաբար տիպի լոկալ օբյեկտներ  են:
         Ինքնաբերաբար տիպի օբյեկտները կարելի է հայտարարել     register առանցքային բառով և այդ դեպքում օբյեկտը բեռնավորում է մեքենայական ռեգիստրների վրա: Իսկ եթե այդ անհնարին է, օբյեկտը մնում է հիշողության մեջ: Ռեգիստրների օգտագործումը բավականին արագացնում է ծրագրի կատարման ընթացքը: Հետևյալ կրկնական հրահանգներում օգտագործվող զանգվածների ինդեքսները և ցուցա-նշիչները հանդիսանում են ռեգիստրային  տիպի օբյեկտներª
                     for (register int i1=0; i1<ia;  i1++)                      
                     for (register int  *p =array;  p<arreySize;  p++)
Ստատիկ լոկալ օբյեկտը, դա այնպիսի օբյեկտ է, որի  համար հիշողությունը մնում է առանձնացված ծրագրի կատարման սկզբից    մինչև վերջ: C++ լեզվում   նախատեսված է  static  պահեստավորված բառը, որը հնարավորություն է տալիս լոկալ օբյեկտին վերագրել ստա-տիկ տիպ: Օրինակª
                      static  int  io;
Սովորաբար ավելի լավ է լոկալ փոփոխականը հայտարարել ստատիկ և այն օտագործել  գլոբալ փոփոխականի փոխարեն, քանի որ այդ դեպքում գլոբալ փոփոխականի նման նրան հատկացված հիշո-ղությունը մնում է առանձնացված ծրագրի կատարման սկզբից մինչև վերջ, բայց այդ փոփոխականի լոկալ բնույթը արգելում է ծրագրի այլ ֆունկցիաների մուտքը  իր մեջ :

Комментариев нет:

Отправить комментарий