Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
derzh.docx
Скачиваний:
8
Добавлен:
17.09.2019
Размер:
10.8 Mб
Скачать

3. Концепція типу у мові програмування. Аналіз відомих методів типізації

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

У зв’язку із введенням поняття типу даних слід сказати про існування статичної та динамічної типізації.

Статична типізація - змінна зв’язується із типом у момент оголошення змінної і тип не може бути змінений пізніше.(приклад - Pascal)

Динамічна типізація - змінна зв’язується із типом у момент присвоювання значення, а не у момент оголошення змінної(приклад - JavaScript).

Присвоєння типу даних (типізація) надає значення набору бітів. Як правило, типи надаються або значенням в пам'яті, або об'єктам, таким, як змінні.

Системи типізації виконують наступні функції:

  • Безпечність — застосування типів даних дозволяє компілятору знаходити беззмістовний або невірний код. Наприклад, можна визначити вираз "Привіт!" + 3 як невірний, оскільки додавання (в загальному розумінні) рядка до цілого числа не має сенсу.

  • Оптимізація — статична перевірка типів може повідомити додаткову інформацію компілятору.

  • Документування — у виразнішіх системах типізації, типи даних можуть служити як вид документації, оскільки вони можуть описувати наміри розробника. Наприклад, довжина може бути підтипом цілих чисел, але, якщо розробник об'являє повертаємий функцією тип даних як довжину, а не просто ціле число, це може частково описувати значення функції.

  • Абстрагування (або модульність) — типи даних дозволяють розробнику розмірковувати про програми на вищому рівні, не звертаючи увагу на деталі реалізації на нижчому рівні. Наприклад, розробник може вважати рядок значенням, замість простого масиву байт.

Якщо мова програмування вимагає точного зіставлення типів даних (тобто, дозволяючи лише такі операції автоматичного приведення типів, які не призводять до втрати інформації), така мова програмування має сильну типізацію, в іншому випадку, слабку.

Усі типи даних будемо поділяти на базові та складані. Серед базових (або стандартних, або простих, або елементарних) звичайно виділяють такі:

  • Integer - числа цілого типу.

  • Real - числа дійсного типу. Діапазон залежить від конкретної реалізації.

  • Boolean - дані логичного типу, з двома значеннями: true та false (правда та хибність).

  • Char - це множина символів, що можуть бути надруковані. Формально слід розрізнювати цей тип з типом Byte, хоча фактично для зберігання символу у пам'яті використовується рівно один байт, і, таким чином, є деяка відповідність між цими типами даних.

4. Вільні масиви в мові програмування Сі, їх призначення та відмінність від звичайних. Навести приклади опису та застосування.

Вільними будемо називати двовимірні масиви або матриці розмір кожного із рядків якого може бути різним. До них зручно звертатися за допомогою вказівників.

Приклад

char *message[]={“defghi”, “jklmnoprqst”, “abc”};// масив вказівників на початок строк

Така реалізація має очевидні переваги. Наприклад, що поміняти місцями дві строки, достатньо поміняти місцями у масиві їх вказівники. Таким чином, узагальнюючі можна сказати, що тут вирішуються одразу дві проблеми:

1) Складні керування пам’яттю

2) Великі накладні витрати при перестановці строк

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

Також слід розуміти і те, що можна створити масив вказівників і на цілі числа або на інший тип.

Приклад

int a[10][20]

int *b[10];

Для обох масивів синтаксично вірним буде звернення до деякого значення типу int a[3][4], b[3][4]. Однак тільки а є істино двовимірним: для 200 елементів типу int буде виділена пам’ять, а обчислення зміщення елемента a[строка][стовбець] від початку масиву буде вестись по формулі 20* строка+ стовбець. Для b визначено лише 10 вказівників, причому без ініціалізації.

5, 24. Принцип спадкування у Сі++. Віртуальні базові класи.

Використовуються поняття базовий та похідний класи. Похідний клас – розширення існуючого базового класу. Формування похідного класу записується в такий спосіб: <ключове слово><ім’я похідного класу>:<список базових класів>{<список членів класу>}.

Будь-який клас може бути базовим, а будь-який похідний клас віддзеркалює базовий. Похідний клас успадковує всі члени базового класу з атрибутами доступу public та protected. В Сі++ є можливість множинного спадкування, коли похідний клас має кілька базових. В цьому випадку базові класи в списку перераховуються через кому.

Для похідного класу можуть існувати непрямі базові, тобто ті, які є базовими для базових похідного. Якщо А – базовий клас для В, а В – базовий для С. То А – непрямий базовий клас, а В – прямий базовий клас для С.

При множинному спадкування жоден клас не може бути застосованим більше одного разу як пряма база, але може бути >1 разу застосованим як непряма база. При цьому об’єкти непрямого базового класу дублюються в похідному класі, це призводить до неоднозначності. Цього можна уникнути, використовуючи кваліфікацію імен або віртуальні базові класи.

Для оголошення базового класу віртуальним в списку базових класів перед іменем класу записується слово virtual. В цьому випадку об’єкт непрямого базового класу створюється тільки один раз і виклики його членів стають однозначними.

6, 25. Формування класів у Сі++ за допомогою ключових слів class, struct та union і їх особливості. Вказівник this.

В Сі++ класи формуються таким чином:

<ключове слово> <ім’я класу> {<список членів класу>};

В ролі ключового слова можуть бути слова class, struct та union. При описі класу з ключовим словом class всі члени класу мають за замовченням атрибут доступу private. В опис зі словом struct за замовченням всі члени мають атрибут public. В обох випадках атрибут доступу можна перевизначити, вказати явно.

При створенні класу з атрибутом union всі члени мають за замовчанням атрибут доступу public, який неможливо перевизначити. Такі класи не можуть брати участі в спадкуванні й мати віртуальні методи.

Клас не може бути анонімним зі словом class на відміну від struct та union.

Для того, щоб нестатична функція, що викликається «знала», з яким з об’єктів класу вона прицює, їй неявно передається ще один прихований параметр – вказівник-константа this. Цей параметр є видими у тілі функції, що викликається і в момент виклику встановлюється в значення адреси початку об’єкта і може використовуватися для звернення до членів об’єкта.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]