- •1) Програма. Комп’ютерна програма. Програма, як система.
- •2) Програмне забезпечення. Життєвий цикл.
- •7) Лексичний рівень інкапсуляції. Алфавіт мови. Лексеми. Лексичний аналіз. Лексичний устрій тексту програм.
- •8)Напередвизначені позначення. Позначення, що визначаються.
- •9) Тип, загальні положення.
- •Класифікація напередвизначених типів
- •12) Прості змінні
- •13) Зміна значень програмних об’єктів
- •Оператор присвоювання
- •14) Вираз
- •15) Блок
- •Нумерація, номер і глибина вкладеності блока
- •Мембранний ефект. Регулювання області дії
- •16) Регулювання періоду існування
- •Глобальне розрізнення видимості позначень (імен)
- •17) Суворо типізована мова
- •17, 18) Зведення типів
- •Явне зведення типів
- •Неявне зведення типів
- •Уникнення суворої типізації
- •21) Стратегія динамічного розподілу пам'яті на основі блока
- •22) Стратегія розподілу пам'яті в купі
- •Реалізація стратегії статичного розподілу пам'яті
- •Динамічний розподіл пам'яті на основі блока
- •Динамічний розподіл пам'яті на основі купи.
- •24) Структурна капсула
- •25) Структурні оператори
- •26) Оператори вибору
- •27) Оператор повторення
- •Форма оператора повторення do
- •Форма оператора повторення while
Явне зведення типів
Явне зведення типів (explicit casting types) може використовуватися як у суворо, так і не суворо типізованих мовах.
Для явного зведення типів використовується кваліфікація виразу індикатором типу, наприклад, таким чином T(E), де Т - це індикатор типу, до якого необхідно звести значення; Е - вираз, що позначає значення, яке необхідно привести до типу Т. Наприклад, char(65) або int(‘A’), тут Т це char, int, а E це 65, ‘A’.
Щоразу, коли можливе зведення типу, так само можливе й обернене зведення.
У мові Pascal для явного зведення можуть використовуватися стандартні підпрограми, хоча це нетипово для суворо типізованих мов.
У мові С, поряд із зазначеною формою кваліфікації, може використовуватися друга форма, виду (Т)Е. Дві форми необхідні, щоб розв’язувати синтаксичні конфлікти, які іноді виникають.
Неявне зведення типів
У не суворо типізованих мовах, передбачається широке використання неявного зведення типів.
Неявне зведення типів (implicit casting types) – це автоматичне зведення значень одного типу в значення іншого типу за правилами, передбаченими реалізацією мови. Ці правила необхідно знати навіть в тому разі, коли програміст не використовує неявних зведень, оскільки вони можуть застосовуватися в тих конструкціях, які програміст бере готовими. Тому неявне зведення – це мовно-залежний механізм, застосування якого різко знижує мобільність програм.
У мові Ada неявні зведення повністю заборонені. У мові Pascal виконується неявне зведення лише значень цілих типів у значення дійсного типу. У мові С передбачено широке використання неявного зведення типів, а в операторах присвоювання неявні зведення здійснюються навіть із втратою точності.
Уникнення суворої типізації
Наведемо один спосіб уникнення суворої типізації шляхом застосування нетипізованих вказівних змінних. Нехай U1, U2 – позначення типізованих вказівних змінних різних типів; R – позначення простій змінної типу, відмінного від типу змінної U2; Р – нетипізована вказівна змінна; type's U2 – явне зведення типу (до типу змінної U2). Необхідно виконати оператори присвоювання такого виду:
у мові Pascal:U2 := U1; або U2 := @R;
у мові C:U2 = U1; або U2 = &R; .
Згідно з суворої типізацією мов виконати такі оператори присвоювання неможливо через різнотипності змінних U1, U2 та U2 і R. Уникнути суворої типізації можна в такий спосіб:
У мові Pascal:Р := U1;абоР := @R;і даліU2 := Р;
У мові С:Р = U1;абоР = &R;і даліU2 = (typ`s U2)Р;
Отже, для уникнення суворої типізації використовується нетипізована вказівна змінна Р, значенням вмісту якої є адреса.
19)Стратегії розподілу пам'яті
Для будь-якої програми, на жаль, доступно обмежену кількість пам'яті, а тому при компіляції та виконанні програми дуже важливу роль відіграє стратегія розподілу пам'яті. На неї, вирішальний вплив мають, як мова програмування, так і операційна система, під управлінням якої виконується програма.
Зазвичай слід розглядати дві стратегії розподілу пам'яті - статичну і динамічну. Остання, у свою чергу, поділяється ще на дві – динамічний розподіл пам'яті на основі блока та динамічний розподіл пам'яті в купі.
20) Стратегія статичного розподілу пам'яті
Цю стратегію можна схарактеризувати так:
зв'язок між ім’ям змінної та генерованим вмістом установлюється один раз і лишається незмінним упродовж усього часу виконання програми;
розподіл пам'яті відбувається до початку виконання програми, під час трансляції або редагування зв'язків, тому не має потреби вставляти у програму жодних додаткових виконуваних операторів;
усі об'єкти в програмі є глобальними, мають глобальний період існування, глобальну область дії;
захоплення та вивільнення пам'яті відбуваються автоматично;
вміст змінної ініціалізується нулем відповідного типу;
пам'ять розміщується в .EXE файлі, займаючи обмежене місце (зазвичай сегмент 64К).