
- •Визначувані типи
- •Опис визначуваного типу
- •Класифікація відомих визначуваних типів
- •Використання визначуваного типу
- •Підтипи
- •Перелічувані типи. 1
- •Перелічувані типи. 2
- •Об'єднаний тип
- •Складений тип
- •Рядковий тип
- •Представлення рядків
- •Представлення рядкового літерала в мові Pascal
- •Операції над рядковими знченнямив мові Pascal
- •Представлення рядкового літерала в мові с
- •Індексовані типи
- •Устрій одновимірних мультизначень
- •Устрій двовимірних мультизначень
- •Опис устрою мультизначення індексованого типу
- •Устрій паспорту індексованого типу
- •Приклади опису устрою індексованого типу. 1
- •Приклади опису устрою індексованого типу. 2
- •Індексатор
- •Основні властивості індексованих типів
- •Опис об'єктів індексованого типу. 1
- •Опис об'єктів індексованого типу. 2
- •Ініціалізація об'єктів індексованого типу
- •Ініціалізація при створенні об'єкту
- •Ініціалізація об'єкту оператором привласнення
- •Особливості індексованого типу в мові с.1
- •Особливості індексованого типу в мові с.2
- •Іменовані (комбіновані) типи
- •Механізм обробки значень іменованого типу
- •Відмінності в застосуванні іменованого та індексованого типів
- •Використання типізованих вказівних змінних іменованого типу
- •Спеціальний випадок використання типізованих вказівних змінних іменованого типу
- •Структури даних. Визначення
- •Структури даних. Визначення
- •Лінійні структури даних
- •Лінійний список
- •Лінійний список
- •Підходи до реалізації списку
- •Моделювання лінійного списку. 1
- •Векторне представлення лінійного списку. 1
- •Векторне представлення лінійного списку. 2
- •Векторне представлення стеку
- •Векторне представлення черги
- •Моделювання лінійного списку. 2
- •Зв’язане представлення черги. 2
- •Нелінійні структури даних
- •Представлення дерев
- •Устрій дерева як структури даних
- •Види дерев як структур даних
- •Моделювання дерева. Приклад 2
Визначувані типи
Часто буває, що наперед визначених типів для опису об'єктів у програмі недостатньо. Тоді використовується механізм визначення типів.
Визначувані типи описуються програмістом за певними правилами і забезпечують гнучкість програми, яку неможливо передбачити заздалегідь.
Тому визначувані типи грають дуже важливу роль у програмуванні і особливо це стосується абстрактних типів даних.
Опис визначуваного типу
Загальна форма опису визначуваного типу має вигляд:
type d = T;
де
d – позначення визначуваного типу (індикатор типу),
Т – опис властивостей визначуваного типу.
Здебільшого визначуваний тип описується на основі наперед визначуваних або раніше визначених типів. При цьому визначуваний тип має власну множину значень, але, як правило, успадковує операції та літерали того типу, на якому він визначається. У цьому разі зазначений тип називається базовим, основним, або батьківським типом.
Класифікація відомих визначуваних типів
Використання визначуваного типу
Усі визначувані типи можна використовувати двома способами: анонімно або явно.
Визначуваний тип без утворення позначення називається анонімним типом. Щоб указати множину значень анонімних типів можна вдатися до явного використання атрибутів раніше визначених або наперед визначених типів.
Отже, анонімні типи використовуються без попереднього оголошення, безпосередньо при опису програмного об'єкту. Це дає змогу скоротити текст програми та усунути надлишкові позначення типів. Проте анонімно оголошений тип не можна використовувати при опису інших програмних об'єктів, оскільки немає позначення типу.
Підтипи
Підтип (sybtype) – це нове позначення батьківського типу та пов'язане з ним уточнення.
При описі підтипу множину значень базового типу, на якому описується визначуваний підтип може бути обмежено (уточнено) за допомогою уточнення, яке здійснюється в будь-який прийнятним для батьківського типу спосіб.
Наприклад, для типу integer це може бути перелічування значень (2, 3, 5, 7) або значення дискретного діапазону значень – як 1..100.
Операції і зображення значень підтип успадковує від батьківського типу.
Pascal:
type
MyInteger = integer;
Days = 0..6;
var
nMyDays : Days;
nУourDays : Days;
nb : MyInteger;
begin
nb := 3;
nУourDays := nb;
nMyDays := nУourDays;
end.
Перелічувані типи. 1
Визначувані типи, повний набір значень яких явно перелічують в опису типу, називаються перелічуваними (enumeration type).
Значення в опису типу називається літералом перелічуваного типу. Кожний літерал у перелічуваному типі виробляє відмінне від інших літералів значення.
Наперед визначені операції відношення впорядкованості між літералами слідують порядку, що відповідає номерам їхніх позицій у переліку. Номер позиції першого літерала, а часто і його значення дорівнюють нулю, наступного – на одиницю більше і так далі.
Перелічувані типи. 2
У мовах Pascal і С значення літералів перелічуваного типу належать значенням цілого типу. Як позначення літерала перелічуваного типу в обох мовах використовується ідентифікатор.
У мові С можна встановлювати значення для літерала перелічуваного типу за допомогою R-виразу. Тоді значення наступного літерала в уточненні за замовчуванням дорівнюватиме значенню R-виразу, збільшеному на одиницю. Для різних літералів в мові С може бути призначено однакові значення, які можуть бути й від’ємними.
Pascal:
type numb = (One, two, five, six);
const MyNumb : numb = two;
var
color : (black, red, yellow);
nI : integer;
begin
MyNumb := five;
nI := integer(MyNumb);
color := red;
nI := integer(MyNumb) + integer(color);
color := MyNumb; {ошибка!}
end.
С:
enum numb {one, two, five = 5, six};
numb MyNumb;
MyNumb = two;
MyNumb = numb(int(two) + 5);
MyNumb = 10; //ошибка
MyNumb = numb(int(two) - int(one));
enum {FALSE, TRUE};
if (nI == FALSE)