Складові типи даних, операції над ними

ОД (об'єкт даних) - змінні, константи - абстрактне місце, де можуть зберігатися дані.

1) Статична - в момент трансляції, збірка (лінковка) - з точки зору ЯП.

2) Динамічне - під час роботи програми - між ОД і його значенням: V = 30;

3) квазістатична (константи: const C = 20;)

Більшість імперативних ЯП - статичне зв'язування.

Java Scrypt, php ... - динамічне зв'язування. (В основному такі мови є інтерпретуються).

Ада 83. Будь ОД має тип.

У традиційних ЯП - будь-який ОД має єдиний тип.

ООЯП - будь-який ОД має статичний тип. (Base d;)

Однак деякі ОД можуть мати динамічний тип.

С ++. покажчики і посилання. (Base * p;)

Визначальне входження винятків - це пастка:

Відбувається динамічно (навіть в статичних ЯП - С ++)

Статичні перевірки - перевірки при компіляції програми. Перевіряються дані не змінюються в різних викликах функції (запусках програми)

A: array [1..100] of integer;

a [10] = 10; статична перевірка

Квазістатичні перевірки - перевірки при виконанні. Квазистатическим вони називаються тому, що перевіряються дані можуть змінюватися в різних викликах

функції (запусках програми). Тому ці перевірки робляться саме при виконанні.

Компілятор виявляє небезпечне місце в програмі і вставляє в це місце квазістатичний код, який виконається в процесі роботи програми.

a: array [1..100] of integer;

a [n] = 10; n не відома в момент компіляції. Якщо мова підтримує

квазістатичні перевірки, то тут буде вставлений контроль виходу за кордон масиву.

У машинних мовах немає квазистатических перевірок. Тому немає і в Сі.

В яких класах пам'яті можуть розміщуватися дані в мовах

програмування? В яких класах пам'яті розміщуються об'єкти класів

У мові C # об'єкти класів розміщуються тільки в динамічної пам'яті.

2. Базисні типи даних в мовах програмування: прості і

складові типи даних, операції над ними

Арифметичні типи даних: цілі, плаваючі, фіксовані.

Фіксація уявлення: Java, C #.

Діапазон: всі інші

Проблеми представлення чисел і способи їх вирішення в ЯП.

Є неявне приведення: С ++ і С.

Приведення тільки явне: в Модулі-2 існували два типи INTEGER і CARDINAL. І приведення одного в інший допускалося тільки явне (існував спеціальний оператор для такого присвоювання):

I: INTEGER; J: CARDINAL; I: = INTEGER (J);

У Обероне існує лише один беззнаковий тип byte (0..255)

Так в С # вирішили допускати тільки розширюються перетворення (так як вони безпечні). Зворотні перетворення допускалися тільки явно.

Ада. Вони ввели узагальнені числові типи даних. Об'єкти різних типів були несумісні ні за яку безлічі операцій, але були сумісні об'єкти підтипів. Тобто різні підтипи сумісні між собою і зі своїм предком.

Type Length is new integer;

Type Width is new integer;

Length і Width - нові цілочисельні типи даних, при цьому їх не можна ні привласнювати один одному, ні порівнювати. Однак можна робити перетворення явним.

Type Length in new integer range 0..MAXN.

У чому плюс узагальнених типів, так це що всі помилки виявлялися на етапі компіляції.

Якщо потрібні неявні перетворення, вводилися підтипи.

Sybtype t1 is t2 range 0..N.

І тоді перетворення з T1 в T2 допускалися. При цьому компілятор сам вибирає

оптимальне представлення для таких чисел. Тепер компілятор транслюючи присвоювання таких типів даних або перевіряє можливість такого присвоювання на етапі трансляції, або ж вставляє код з перевірки допустимості такого присвоювання (квазістатичний контроль). У разі помилки виходу за кордон в Ада збуджується range error.

Символьні та логічні типи даних

Aда. type Boolean is (False, True); // уявлення типу Boolean

p. Boolean: = True;

До речі З єдина мова з неявним перетворення int в bool

Delphi, Pascal. var p: boolean

Порядкові типи: діапазони і перерахування. Особливості реалізації перерахувань в сучасних ЯП.