- •Методичні вказівки
- •«Системне програмування»
- •5.05010201«Обслуговування комп’ютерних систем і мереж»
- •Рецензія
- •Тема 3. Мова програмування Assembler ……………………………..……..135
- •1.1. Історія розвитку мов системного програмування Питання для опрацювання
- •Методичні рекомендації
- •1. Класифікація мов програмування
- •2. Розвиток мов системного програмування
- •Студент повинен
- •Питання для самоконтролю
- •Історія виникнення мови програмування с
- •2. Сфери застосування мови програмування с
- •1. Двійкова, вісімкова та шістнадцяткова системи числення.
- •2. Формати представлення чисел у різних системах числення.
- •3. Стандарти представлення чисел зі знаком.
- •Формати з плаваючою комою
- •Векторні формати
- •Приклади
- •Студент повинен
- •Питання для самоконтролю
- •Література
- •Питання для опрацювання
- •Методичні рекомендації
- •Приклад:
- •2. Керуючі послідовності
- •1. Види логічних операцій, які виконуються в комп’ютері.
- •За структурою
- •За типом запису даних
- •За архітектурними особливостями
- •За формою подання даних
- •Залежно від часу виконання операцій
- •Залежно від реалізації мікроалгоритму
- •Пристрій управління
- •Операційний пристрій
- •Регістри
- •2. Алгоритми виконання логічних операцій.
- •Побітові логічні операції
- •Бітові зсуви
- •Бітові операції як основа цифрової техніки[ред. • ред. Код]
- •Студент повинен
- •Питання для самоконтролю
- •Література
- •Питання для опрацювання
- •Методичні рекомендації
- •Студент повинен
- •Питання для самоконтролю
- •Література
- •Питання для опрацювання
- •Методичні рекомендації
- •Порядок використання вбудованих функцій під час написання програм.
- •2. Порядок практичного використання багатовимірних масивів під час створення програм.
- •Студент повинен
- •1. Порядок задання і створення масивів структур.
- •2. Порядок практичного використання масивів структур під час створення програм.
- •1. Створення динамічних масивів за допомогою вказівників.
- •2. Передача аргументів процедур та функцій з використанням вказівників.
- •3. Використання масивів вказівників.
- •Студент повинен
- •Питання для самоконтролю
- •1. Головні означення та властивості теорії графів.
- •Зображення графів на площині
- •1. Порядок переходу у графічний режим виводу інформації.
- •2. Функції для побудов геометричних фігур.
- •1. Базові поняття об’єктно‑орієнтованого програмування (ооп).
- •2. Успадкування та поліморфізм.
- •Практичні прийоми програмування з використанням об’єктів.
- •Студент повинен
- •Питання для самоконтролю
- •Література
- •Тема 3. Мова програмування Assembler
- •3.1. Спеціалізоване використання регістрів процесора Intel 8086 Питання для опрацювання
- •Методичні рекомендації
- •1. Спеціалізоване використання регістрів даних.
- •2. Спеціалізоване використання регістрів-вказівників.
- •3.2. Способи адресації пам’яті у процесорах Intel 8086
- •1. Регістрова адресація.
- •2. Безпосередня адресація.
- •3. Пряма адресація.
- •4. Непряма адресація та її різновиди.
- •Питання для самоконтролю
- •1. Особливості роботи з відеорежимами.
- •2. Порядок задання кольору для виведення даних.
- •1. Функції для керування роботою послідовного порту
- •2.Функції для керування роботою паралельного порту
2. Успадкування та поліморфізм.
В основі класів лежать три фундаментальні принципи - інкапсуляція, успадкування і поліморфізм.
Інкапсуляція. Проектування програмних і технічних систем базується на тій умові, що жодна підсистема даного рівня не повинна залежати від пристрою будь-якої іншої підсистеми цього рівня. Така незалежність внутрішнього устрою одного об'єкта від внутрішнього устрою іншого називається інкапсуляцією.
Методами класу є функції, які визначені для плів чи зовнішніх змінних.
Специфікатри доступу описують так:
private – доступність лише методів класу.
protected – доступність лише для методів класу та методів похідних класів.
public – доступність для будь-якої зовнішньої функції.
Принцип інкапсуляції використовувався в технології модульного програмування. У модулі в явній формі введена інкапсуляція шляхом поділу його на секції інтерфейсу і реалізації.
В об'єктно-орієнтованому програмуванні принцип інкапсуляції використовується для ізоляції класу від інших частин програми, щоб зробити його самодостатнім для вирішення конкретного завдання. Наприклад, клас TForm в середовищі Delphi містить (інкапсулює в собі) все необхідне для створення Windows-вікна, клас ТMemo представляє собою потужний текстовий редактор, клас TTimer забезпечує роботу програми з таймером.
Інкапсуляція досягається шляхом поєднання в одному записі мови програмування структур даних з процедурами і функціями, які маніпулюють полями даних цього запису, для отримання нового типу даних - класу. Інкапсуляція дозволяє захистити по інтерфейсу доступ до полів і методів. Доступ дозволяється лише до відкритих методів та полів. Повна сукупність методів і тонкощі їхньої реалізацій є прихованими.
Оголошення класу синтаксично є подібним до оголошення структури. Загальні формати оголошення класу мають такий вигляд:
Варіант 1 class ім'я_класу {
private:
закриті дані та функції класу
public:
відкриті дані та функції класу
} перелік_об'єктів_класy;
Варіант 2
class ім'я_класу {
private:
закриті дані та функції класу
public:
відкриті дані та функції класу
};
ім'я_класу перелік_об'єктів_класy;
Шляхом використання принципу інкапсуляції з'являється можливість здійснювати обмін готовими до роботи програмними заготовками. Наприклад, бібліотека класів C++ Builder - це, фактично, набір цеглинок для побудови прикладних програм.
Успадкування. Число абстракцій в складних програмних системах набагато перевищує наші можливості їхнього усвідомлення. Інкапсуляція частково допомагає усунути цю перешкоду, прибираючи з поля зору внутрішній зміст абстракцій.
Для визначення можливості доступу до елементів похідного класу керуються наступною таблицею:
Доступ у базовому класі |
Специфікатор доступу успадковування |
Доступ у похідному класі |
public |
public |
public |
private |
public |
Не доступний |
protected |
public |
protected |
public |
private |
private |
Private |
private |
Не доступний |
Protected |
private |
private |
Однак значне спрощення розуміння складних завдань досягається за рахунок ускладнення ієрархії. Під ієрархією тут розуміється впорядкування абстракцій, розташування їх за рівнями. Ускладнення ієрархії від рівня до рівня досягається за рахунок наслідування.
Принцип успадкування оперує з поняттями "предок - нащадок" і передбачає розширення набору властивостей нащадка за рахунок прийняття всіх властивостей предка.
Будь-який клас може бути породжений від іншого класу. Для цього при його оголошенні вказується ім'я класу-батька.
Породжений клас автоматично успадковує поля, методи і властивості свого батька та може доповнювати їх новими. Таким чином, принцип наслідування забезпечує поетапне створення складних класів та розробку власних бібліотек класів.
Усі класи в Object Pascal породжені від єдиного батька - класу TObject. Цей клас не має полів і властивостей, але містить у собі методи самого загального призначення, що забезпечують весь життєвий цикл будь-яких об'єктів - від їх створення до знищення. Тому програміст не може створити клас, який не був би дочірнім класом TObject. Наступні два оголошення ідентичні.
Принцип успадкування призводить до створення розгалуженого дерева класів. Кожен нащадок доповнює можливості свого батька новими і передає їх своїм нащадкам. Наприклад, клас TPersistent збагачує можливості свого батька TObject тим, що він вміє зберігати дані у файлі й отримувати їх з нього, в результаті це вміють робити і всі його нащадки. Клас TComponent, у свою чергу, вміє взаємодіяти із середовищем розробника і передає це вміння своїм нащадкам. TControl не тільки здатний працювати з файлами і середовищем розробника, але він ще вміє створювати та обслуговувати видимі на екрані зображення, а його нащадок TWinControl може створювати Windows-вікна тощо.
У Object Pascal можливо тільки так зване одиночне спадкування, але в реальному світі у нащадка два батьки, тому в ряді мов (наприклад, в C++) передбачений механізм множинного успадкування. Множинне успадкування більш логічне з точки зору моделювання реального світу, проте, воно ускладнює реалізацію мов програмування.
У наведеному нижче коді програми механізм оголошення та застосування класу myClass продемонстровано повністю. Для цього об'єднаємо всі разом вже знайомі нам частини коду програми і додано відсутні деталі.
Код програми 1. Демонстрація механізму оголошення классу та його застосування
#include <vcl>
#include <iostream> // Для потокового введення-виведення
#include < math> // Для використання математичних функцій
#include <conio> // Для консольного режиму роботи
using namespace std; // Використання стандартного простору імен
class myClass { // Оголошення класового типу
double a;
public:
void Init(); // Ініціалізація даних класу
void Get(double, double); // Введення в об'єкт значення
double Put(); // Виведення з об'єкта значення
};
// Ініціалізація даних класу myClass.
void myClass::Init()
{
a = 0;
}
// Введення в об'єкт значення.
void myClass::Get(double x, double y)
{
double a1 = pow(x,1.3);
double a2 = pow(fabs(3.2*x - y),0.4);
double a3 = pow(pow(cos(a2),2),1./3);
a = a1+a3;
}
// Виведення з об'єкта значення.
double myClass::Put()
{
return a;
}
int main()
{
myClass ObjA, ObjB; // Створення двох об'єктів класу.
double x = 2.6, y = 7.1;
ObjA.Init(); ObjB.Init();
ObjA.Get(x,y); ObjB.Get(x+y,y/x);
cout << "Вміст об'єкта ObjA: " << ObjA.Put() << endl;
cout << "Вміст об'єкта ObjB: " << ObjB.Put() << endl;
getch(); return 0;
}
Внаслідок виконання ця програма відображає на екрані такі результати:
Вміст об'єкта ObjA: 4.06663
Вміст об'єкта ObjB: 20.0294
Закриті члени класу доступні тільки функціям, які є членами цього класу.
Наприклад, таку настанову
ObjA.a = 0;
не можна помістити у функцію main() нашої програми.
