Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

одного типа в контексте, где ожидается другой тип, ему придется определить явное

преобразование типа (иногда называемое явным приведением, casts).

Совместимость типов и неявное приведение.

В конкретном контексте многие языки не требуют эквивалентности типов. Вместо

этого говорят, что значения типов должны быть совместимы с тем контекстом,

в котором они появляются.

Существует много случаев, в которых ожидаются величины определенных типов.

В операторе присваивания тип в правой части должен быть совместим с типом из

левой части. Типы операндов сложения должны быть совместимы или с целым,

или с вещественным типом.

В операторе вызова подпрограммы типы аргументов должны быть совместимы

с типами соответствующих формальных параметров.

Если язык позволяет использовать значение одного типа в контексте, где ожида-

ется другой тип, то реализация языка должна выполнять автоматическое, неявное

преобразование к ожидаемому типу. Такое преобразование называется неявным

приведением типа (coercion).

Статическая и динамическая проверка типов.

Контроль типов может осуществляться в период выполнения программы (динамический контроль типов) или в период компиляции (статический контроль типов). Значительное преимущество применения универсальных языков программирования состоит в том, что в их реализациях предусмотрен контроль типов для операций. Отсюда

вывод — программист защищен от этих коварных ошибок. Большинство традиционных императивных и объектно-ориентированных языков программирования ориентировано на повсеместное применение статического контроля типов (в период компиляции).

НЕ нашли? Не то? Что вы ищете?

Организация статического контроля типов:

Во-первых, для каждой операции определены количество и типы данных для

операндов и результата.

Во-вторых, тип каждого объекта данных (переменной или экземпляра типа)

известен и не меняется в ходе выполнения программы.

В-третьих, типы всех констант тоже понятны. Тип литерала легко определяется

из синтаксиса его записи в тексте программы, а тип именованной константы за-

фиксирован в ее определении.

Динамический контроль типов для операндов некоторой операции осуществляется в период вычислений, непосредственно перед исполнением операции. Реализация динамического контроля базируется на использовании сложного дескриптора, который хранится вместе с объектом данных и описывает его тип и другие атрибуты.

Организация и использование процедур.

Объявление подпрограммы описывает ее содержание и включает следующие

элементы:

‰. имя;

‰. формальные параметры (обозначают места для подстановки фактических па-

раметров);

‰. тип результата (отсутствует в случае процедуры);

‰. тело (объявления локальных переменных и операторы).

Синтаксис языка C и С++ для тела подпрограммы достаточно прост:

float Fun (float А, int В) // спецификация подпрограммы

{float M(10); int С; // - объявления локальных объектов данных

... // последовательность операторов,

} // определяющая действия подпрограммы

Рекурсия. Преимущества процедур.

Процедура (функция) рекурсивна, если она запускается из собственного тела (это

может быть косвенный или прямой вызов). Рекурсия может быть запущена много-

кратно.

К основным преимуществам процедур следует отнести следующее:

1. Уменьшение сложности программирования (за счет повышения уровня абстрак-

ции). Использование только имени подпрограммы (sort) позволяет абстра-

гироваться от деталей реализации, думать в терминах операций, относящихся

к решаемой проблеме.

2. Закрытость реализации — модификация алгоритма внутри подпрограммы не

воздействует на остальную часть программы.

3. Модульность программ — подпрограммы используют для разбиения программы

на небольшие куски, которые можно рассматривать отдельно. Поэтому подпро-

граммы позволяют нам управлять более крупными программами, чем те, которые

мы можем мысленно обозревать.

4. Расширение возможностей языков программирования — создание библиотек

(стандартных коллекций полезных подпрограмм). Операции типа + и ∗ встраи-

ваются в язык, но математические функции типа sin( ), log( ) обеспечиваются

библиотекой, как и процедуры ввода-вывода.

Методы передачи параметров

Формальные параметры в объявлении подпрограммы — это места для подста-

новки фактических параметров. Фактические параметры используют в вызовах

подпрограмм. Например, в операторе вызова F(2) двойка является фактическим

параметром. Рассмотрим формальный параметр х в следующем объявлении

функции:

int square (int x)

{

return x ∗ x

};

Методы передачи параметров — это способы, которыми параметры передаются

в подпрограмму и/или возвращаются из нее.

Позиционное сопоставление. Соответствие между фактическими и формаль-

ными параметрами устанавливается на основе их позиций в списках фактических

и формальных параметров: два параметра, которые занимают одинаковые по-

зиции в списках, образуют пару. Таким образом, первый фактический и первый

формальный параметр составляют пару, затем — вторые параметры из обоих

списков и т. д.

Сопоставление по имени. В языке Ada и в некоторых других языках при вызове

подпрограммы можно явно указать, какой формальный параметр должен соответ-

ствовать данному фактическому параметру

Вызов по значению.

При передаче по значению формальный параметр (placeholder) х подпрограммы Р(х)

получает значение фактического параметра. Иначе говоря, если параметр переда-

ется по значению, то r-значение фактического параметра передается формальному

параметру вызванной подпрограммы. Передача по значению используется чаще всего. В языках Pascal и С она рассматривается как основной метод передачи параметров.

Вызов по ссылке

Передача по ссылке является, вероятно, наиболее распространенным механизмом

передачи параметров. При передаче по ссылке формальный параметр превращается

в синоним места размещения фактического параметра. Иными словами, передача

объекта данных с помощью этого механизма означает, что подпрограмме становится

доступным указатель на местоположение этого объекта (то есть его l-значение). При

этом расположение объекта данных в памяти не изменяется. В начале выполнения

подпрограммы l-значения всех фактических параметров используются для ини-

циализации локальных областей памяти, отведенных под формальные параметры.

Вызов по значению-результату.

Второе название этого способа передачи параметров — ≪copy-in / copy-out≫.

В этом способе вначале фактические параметры копируются в формальные

параметры, а в конце работы формальные параметры копируются обратно в фак-

тические параметры.

Фактические параметры-выражения (например, 2+3), не имеющие места раз-

мещения, передаются по значению. Фактические параметры, имеющие место раз-

мещения, обрабатываются так:

1. Этап copy-in. Вычисляются значения и места размещения фактических пара-

метров. Значения присваивают формальным параметрам. Места размещения

сохраняют до этапа copy-out.

2. Выполнение тела подпрограммы. Здесь обрабатываются формальные параметры.

3. Этап copy-out. После выполнения тела подпрограммы конечные значения фор-

мальных параметров копируются обратно в места размещения, вычисленные

на этапе copy-in.

Правила видимости для имен

В тексте программы имя может обозначать все, что угодно (переменную, константу,

тип, процедуру,…). Чтобы что-нибудь сказать об имени, нужно посмотреть объяв-

ление (описание) имени:

var Z : T; -- Z является переменной, имеющей тип Т

Объявление имени задает его смысл.

Базовая идея состоит в следующем: из точки, где появилось интересующее нас

имя, должно быть видимо объявление, разъясняющее его смысл. Эту видимость

должно обеспечивать правило области видимости. Правило области видимости

очерчивает область, внутри которой объявление ≪обслуживает≫ любое вхождение

некоторого имени.

Макрорасширение

Если тело подпрограммы просто копируется или подставляется в точку вызова,

то мы получаем динамическую область видимости. Такая подстановка называется

макрорасширением. Ее выполняет макропроцессор.

Вызов по имени.

Правила для передачи по имени устраняют конфликты именования за счет пере-

именования локальных переменных. Рассмотрим шаги устранения конфликтов.

Шаг 1. Вместо формальных параметров текстуально подставляются фактические

параметры. В теле подпрограммы возможны конфликты имен (между именами

в теле и именами фактических параметров). Конфликты устраняют переименова-

нием локальных переменных тела процедуры.

Шаг 2. Модифицированное тело процедуры подставляется в точку вызова.

Возможны конфликты между нелокальными переменными в теле подпрограммы

и локальными переменными в точке вызова. Их устраняют переименованием ло-

кальных переменных в точке вызова.

Область видимости объявления. Вложенные области видимости: Си и Паскаль.

Будем различать связывающее и ограниченное вхождения имени.

Связывающее вхождение имени вводит новый смысл его использования. Осталь-

ные вхождения этого имени называют ограниченными.

Связывающее вхождение является объявлением имени.

Правила области видимости определяют: какое объявление применимо к огра-

ниченным вхождениям имени. Говорят, что каждое ограниченное вхождение имени

находится в области видимости его связывающего вхождения (объявления)

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6