при зверненні до неїзамінюються фактичними предметами. У цьому випадку є небезпека викликупідпрограми з неправильними даними, що може призвести до збою програми її аварійного завершення при виконанні. Тому природним узагальненням традиційного підходу до програмування є об'єднання даних підпрограм (процедур і функцій), призначених для їх обробки.
. Об'єкти
Базовим в об'єктно-орієнтованому програмуванні є поняття об'єкта. Об'єкт має певні властивості. Стан об'єкта задається його ознак. Об'єкт «знає», як вирішувати певні завдання, тобто розпорядженні методами рішення. Програма, написана з використанням ООП, складається з об'єктів, які можуть взаємодіяти між собою.
Раніше зазначалося, що програмна реалізація об'єкта являє собою об'єднання даних і процедур їх обробки. Змінні об'єктного типу називають екземплярами об'єкта. Тут потрібне уточнення - екземпляр можна лише формально назвати змінної. Його опис дається в пропозицію опису змінних, але насправді екземпляр - щось більше, ніж звичайна змінна.
На відміну від типу «запис», об'єктний тип містить не тільки поля, які описують дані, а також процедури та функції, опису міститься в описі об'єкта. Ці процедури і функції називають методами. Методам об'єкта доступні його поля. Слід зазначити, що методи та їх параметри визначаються в описі об'єкта, а їх реалізація дається поза цього опису, у тому місць програми, яке передує викликом даного методу. В описі об'єкта фактично міститися лише шаблони звернення до методів, які необхідні компілятору для перевірки відповідності кількості та їх типів при зверненні до методів. Ось приклад опису об'єкта [1]:
=bject
X, Y: Integer; Init (InitX, InitY: Integer); GetX: Integer; GetY: Integer;
End;
Тут описується об'єкт, який може використовуватися надалі, скажімо, в графічному режимі і який призначений для визначення на екрані довільного графічного елементу. Об'єкт описується за допомогою зарезервованих слів object ... end, між якими перебувати опис полів і методів. У нашому прикладі об'єкт містить два поля для зберігання значень графічних координат, а також для опису процедури і двох функцій - це методи даного об'єкта. Процедура призначена для завдання початкового положення об'єкта, а функція - для зчитування його координат.
. Інкапсуляція
Інкапсуляція є найважливішою властивістю об'єктів, на якому будується об'єктно-орієнтоване програмування. Інкапсуляція полягає в тому, що об'єкт приховує в собі деталі, які несуттєві для використання об'єкта. У традиційному підході до програмування з використанням глобальних змінних програміст не був застрахований від помилок, пов'язаних з використанням процедур, не призначених для обробки даних, пов'язаних з цими змінними. Припустимо, наприклад, що мається" не-ООП» програма, призначена для нарахування заробітної плати співробітникам якоїсь організації, а в програмі є два масиви. Один масив зберігає величину заробітної плати, а інший - телефонні номери співробітників (для складання звіту для податкової інспекції). Що відбудеться, якщо програміст випадково переплутає ці масиви? Очевидно, для бухгалтерії почнуться важкі часи. «Жорстке» связаное даних і процедур їх обробки в одному об'єкті дозволить уникнути неприємностей такого роду. Інкапсуляція і є засобом організації доступу до даних тільки через відповідні методи.
У нашому прикладі опис об'єкта процедура ініціалізації Init і функції GetX і GetY вже не існують як окремі самостійні об'єкти. Це невід'ємні частини об'єктного типу Location. Якщо в програмі є опис декількох змінних зазначеного типу, то для кожної змінної резервується своя власна область пам'яті для зберігання даних, а покажчики на точки входу в процедуру і функції - спільні. Виклик кожного методу можливий тільки за допомогою складного імені, явно вказує, для обробки яких даних призначений даний метод.
. Спадкування
Спадкування - це ще одне базове поняття об'єктно-орієнтованого програмування. Успадкування дозволяє визначати нові об'єкти, використовуючи властивості колишніх, доповнюючи або змінюючи їх. Об'єкт-спадкоємець отримує все поля і методи «батька», до яких він може додати власні поля та методи чи замінити («перекрити») їх своїми методами.
Приклад опису об'єкта-спадкоємця дається нижче:
Tipe=bject (Location): Boolean; Int (IntX, IntY: Integer); Show; Hide; IsVisible: Boolean; MoveTo (NewX, NewY: Integer);
End;
Спадкоємцем тут є об'єкт Point, що описує графічну точку, а батьком - об'єкт Location. Спадкоємець не містить опис полів і методів батька....