
- •Обчислення виразів
- •Типи виразів
- •Арифметичні вирази, відношення, логічні, базові вирази
- •Приклади виразів
- •Використання та зміна значення виразів
- •Правила конструювання виразів
- •Суворо типізована мова
- •Зведення типів
- •Явне зведення типів
- •Неявне зведення типів
- •Уникнення суворої типізації
- •Існування та дія програмних об'єктів
- •Період існування та область дії
- •Нумерація, номер і глибина вкладеності блока
- •Блокова структура програми
- •Мембранний ефект.
- •Регулювання області дії блока
- •Регулювання періоду існування
- •Блокова структура програми
- •Глобальне розрізнення видимості позначень (імен)
- •Стратегії розподілу пам'яті
- •Стратегія статичного розподілу пам'яті
- •Стратегія динамічного розподілу пам'яті на основі блока
- •Стратегія динамічного розподілу пам'яті на основі блока (продовження)
- •Стратегія розподілу пам'яті в купі
- •Стратегія розподілу пам'яті в купі (продовження)
- •Динамічний розподіл пам'яті на основі купи (Pascal)
- •Динамічний розподіл пам'яті на основі купи (c)
- •Приклади утворення сміття
Ініціалізація програмних об'єктів
Коли програмний об’єкт створюється, для нього встановлюється деяке значення.
Цей процес називається ініціалізацією (initialization) і може здійснюватися транслятором за певними правилами, або при виконанні програми за вказівкою програміста.
Очевидно, що значення літерала та константи можна встановити відразу такими, якими їх задано в описі. Установлення значення змінної визначається низкою умов і може виконуватися двома шляхами:
- при створенні змінної;
- при виконанні програми.
Створення змінної - для визначення значення використовується інформація, розміщена в опису змінної:;
При виконанні програми - значення встановлюється за допомогою оператора присвоювання або за вказівкою програміста.
Наприклад для мови Pascal:
- ініціалізація змінної при створенні:
const
flag : Boolean = false;
numb : іntеger = 10;
Тут для змінної flag встановлюється значення false, а для змінної numb – значення 10.
|
- при виконанні програми:
flag := false;
numb := 10;
Тіж самі дії, але за допомогою оператора присвоювання і під час виконання програми.
Теж для мови С:
- ініціалізація змінної при створенні:
int numb = 10;
int flag = 0;
- при виконанні програми:
numb = 10;
flag = 0;
|
В мові Pascal, якщо змінна ініціалізується при описі, то вона ще називається типізованою константою, але до константи вона не має ніякого відношення.
Вираз
Вираз (expression) - це конструкція, яка утворюється з позначень операцій, позначень програмних об'єктів (літералів, констант, змінних) і значення. Вираз є описом правила обробки значень, що містяться у програмних об'єктах, які входять до його складу. У результаті виконання правила утворюється значення. Це значення і є значенням виразу.
Виконання правила обробки, описаного виразом, називається обчисленням виразу. Оскільки, до моменту обчислення виразу не існує значення виразу, то говорять, що вираз виробляє значення в результаті його виконання.
Вираз є програмним об'єктом поряд із літералом, константою і змінною.
Обчислення виразів
Обчислення виразів залежно від їхнього типу може виконуватись тільки один раз при трансляції або один чи кілька разів при виконанні програми.
Зазвичай у мовах програмування з метою заощадження дужок установлюється пріоритет операцій, який вказує послідовність виконання операцій в виразі. Раніше використовуються операції з більшим пріоритетом.
При обчисленні виразів операції виконуються згідно зі пріоритетом у текстуальному порядку зліва направо. Для зміни того порядку обчислення виразу, який визначається пріоритетом операцій, застосовуються круглі дужки.
Типи виразів
R, L – вирази
R (Right)-вирази - це вирази, для обчислення яких не потрібно виконувати програму, тому їх називають статичними виразами. Вони можуть складатися лише з літералів і констант. Очевидно, що такі вирази можуть обчислюватися під час трансляції або макрогенерації програми й міститися лише у правій частині оператора присвоювання (звідси назва Right).
L (Left)-вирази - це вирази, значення яких формуються під час виконання програми, тому їх називають динамічними. Окрім літералів і констант ці вирази мають містити змінні. L – вирази можуть міститися в лівій частині оператора присвоювання (звідси назва Left).
Арифметичні вирази, відношення, логічні, базові вирази
Тип значення, що його виробляє вираз, такий самий як і тип значення результату що виробляє остання операція у виразі.
Залежно від типу операції, виконуваної останньої у виразі, вони поділяються на арифметичні (числовий тип результату), відношення (бульовий тип результату) і логічні (числовий тип результату).
Якщо у виразі використовуються тільки базові операції, то тоді він називається базовим. Такими виразами є позначення літерала, константи та змінної. При цьому, літерал і константа є R - виразами, а змінна - L - виразом.
Приклади виразів
Арифметичні:
26 - (12,5 * 2) + 7 / 3 23 mod 5 23%5
Відношення:
7 > 4 (5<=7)and((15<12)xor(25=13))
(5<=7)&&((15<12) (25= =13))
Логічні:
not(true) A and B
Базові:
pnVar^ *pnVar
Використання та зміна значення виразів
Оскільки вираз має значення, то це значення можна вживати використовуючи вираз. Найчастіше значення виразу можна використовувати для зміни значення змінної.
Оскільки значення виразу виробляється тільки в результаті обчислення виразу, то змінити значення виразу можна шляхом його обчислення заново. Очевидно, що в результаті обчислення заново, у процесі виконання програми можна змінити тільки значення L-виразу, оскільки він містить позначення змінних, значення яких можуть змінитися між обчисленнями виразу.
Правила конструювання виразів