top of page
Search

Բնութագիր

Updated: May 23


Բառաձեւերի, բառակապակցությունների համակցման եւ արհեստական (ծրագրավորողական) լեզուների ֆունկցիաների (մեթոդների) կատարման միջեւ կարելի է հետեւյալ զուգահեռները անցկացնել`

  1. քերականական կառուցվածքի գլխավոր անդամը (տե՛ս 2.6 Խոսքային կառույցների ընդհանրականությունը հատվածը) զուգորդվում է ֆունկցիայի անվան հետ

  2. կոնտեքտի մյուս ձեւույթները ֆունկցիայի արգումենտներ են: Բառաձեւերի դեպքում արգումենտները ածանցներն են, իսկ բառակապակցության դեպքում՝ գլխավոր անդամից բացի բառակապակցության մյուս անդամները` հատկացուցիչները եւ լրացումները

  3. քերականական ֆունկցիայի արժեքը ստացված քերականական միավորն է` բառաձեւը կամ բառակապակցությունն է

Բազմաձեւություն (polymorphism) սատարող ծրագրավորողական լեզուներում ֆունկցիաները տարբերակվում են ոչ միայն անուններով, այլ նաեւ արգումենտների քանակով եւ տեսակներով (նաեւ թվարկման հաջորդականությամբ): Ֆունկցիայի արգումենտների տեսակների հաջորդականությունը կոչվում է ֆունկցիայի բնութագիր (signature):

Ծրագրավորողական ֆունկցիան բնութագրվում է անունով, օրինակ` divide (բաժանել), եւ արգումենտներով, օրինակ` dividend (բաժանելի), divisor (բաժանորդ): Ֆունկցիան իրագործվում է որպես որեւէ ծրագրավորողական լեզվով գրված կոմպյուտերային հրահանգների հաջորդականություն, որը արգումենտների տրված արժեքների համար հաշվարկում է անվանը համապատասխանող ելքային կամ, այլ կերպ ասած, ֆունկցիայի արժեք: Սովորաբար ֆունկցիայի նկարագրությունն ունի հետեւյալ տեսքը`

integer divide (integer dividend, integer divisor)

Այս տողը մեկնաբանվում է որպես «բաժանելի (dividend) ամբողջը (integer) ամբողջ (integer) բաժանորդով (divisor) բաժանելու (divide) արդյունքում ստացվող ամբողջ (integer) քանորդ»: Այս ֆունկցիայի բնութագիրն է (integer, integer):

Քանի որ տվյալ ֆունկցիայի արգումենտները եւ արդյունքի արժեքը ամբողջ թվեր են, ուստի քանորդը առանց մնացորդի է հաշվարկվում` divide (5, 2) = 2:

Եթե ֆունկցիայի բնութագիրը եւ վերադարձվող արժեքը փոխենք, օրինակ`

float divide (float, integer),

ապա կպահանջվի նաեւ ներքին հրահանգների ձեւափոխում, որպեսզի արգումենտների նոր տեսակներով նոր տեսակի ելքային արժեք հաշվարկվի: Ֆունկցիայի իրագործման այս փոփոխությունն անհրաժեշտ է, քանի որ բաժանելիի եւ քանորդի համար իրական (float) թվերի գործածումը կ’երաշխավորի ավելի ճշգրիտ բաժանման արդյունք` divide (5.0, 2) = 2.5:

Այս երկու ֆունկցիաները, կրելով նույն անունը, տարբեր իրագործում են ենթադրում, տարբեր գործողություններ են կատարում եւ տարբեր արդյունք են տալիս բնութագրերի տարբերության շնորհիվ:

Բաժանում ֆունկցիան կարող է այլ բնութագրեր ունենալ` divide (polynomial, polynomial) կամ divide (matrix, matrix): Առաջին դեպքում գործ ունենք բազմանդամների, իսկ երկրորդ` մատրիցների, բաժանման հետ:

Դիտարկում: Մատրիցների բաժանում ասելով՝ հասկանում են մի մատրիցի՝ մի այլ մատրիցի հակադարձով բազմապատկում: «Ուղիղ» եւ «հակադարձ» մատրիցների բազմապատկման արդյունքը միավոր մատրիցն է (մատրիցի բոլոր արժեքները մեկեր են):

Ավելացրի չակերտներ, որ պարզ դառնա անգլերեն նշաններով (բառերով) ֆունկցիայի սահմանման հայերեն բառերով կազմված նախադասության համարժեքությունը (թարգմանությունը)

------

A program is a set of variable declarations and assignments  and a set of functions – routines – that take from 0 or more input variables, perform calculations using these variables, and return function value – the result of the performed calculations. In simple cases of calculations – arithmetic calculations – a function can take 2 integrers and return their sum or product depending on the code (implemented algorithm) of the function (routine). However, in more complex cases a function takes input data objects and creates and return output data object. For arithmetical functions data objects are typically integers or floating-point numbers (implementations of real numbers). Examples of more complex object are vectors, matrices, dates, user account, etc. It is obvious that incrementing an integer and date by one has close meaning, but different algoritm,  input types, and output results. For example, incrementOne (integer a) and incrementOne (date d) return diffrent outputs: the former one returns an integer a+1, the latter returns date let's assume in format YYYY/MM/DD – if you invoke incrementOne (2025/04/30) it will return 2025/05/01.

In object-oriented programming such polymorphic behaviour of functions is widely used. For code to perform correctly the compiler must distinguish  incrementOne (integer a) from incrementOne (date d). The name of the function is not enough for invoking the correct routine (algorithm). But if you consider input types along with the name of function then you can select the correct routine.

Sometimes the combination of function name, input variable types, and even output type is considered signature. In this essay only input variable types (and their order) is considered signature. The reason for this is that we consider the ordered list of input variable types it as specification of context for the function execution (application). In order to unambiguously identify which routine to execute for a polymorphic  function the compiler should know the name of the function and the argument types. The output type depends on type of function and its signature. That is why we suggest considering a triplet: output type, function name, signature as function specification.

 
 
 

Recent Posts

See All

コメント


bottom of page