Page 32 - 4836
P. 32
допустиме множинне спадкування, які існують обмеження на
іменування класів, як описуються поля і методи, набір
існуючих типів даних та багато іншого. Таким чином, клас
можна розглядати як об'єкт, у якого є властивості (ім'я, список
полів та їх типи, список методів, список аргументів для
кожного методу і т.д.). Також клас може мати певну
поведінку, тобто підтримувати методи. А раз для будь-якого
об'єкта існує шаблон, що описує властивості і поведінку цього
об'єкта, отже, його можна визначити і для класу. Такий
шаблон, що задає різні класи, називається метакласом.
Щоб уявити собі, що таке метакласи, розглянемо
приклад якоїсь бюрократичної організації. Будемо вважати,
що всі класи в такій системі мають суворі інструкції, які
описують, що потрібно зробити, щоб породити новий об'єкт
(наприклад, найняти нового службовця або відкрити новий
відділ). Як і годиться класам, вони описують всі властивості
нових об'єктів (наприклад, зарплату і професійний рівень для
співробітників, площа та майно для відділів) та їх поведінка
(обов'язки службовців і функції підрозділів).
У свою чергу, написання нової інструкції можна строго
регламентувати. Скажімо, необхідно використовувати
спеціальний бланк, дотримуватися правил оформлення і
заповнити всі обов'язкові поля (наприклад, номер інструкції та
прізвища відповідальних працівників). Така "інструкція
інструкцій" і буде представляти собою метаклас в ООП.
Отже, об'єкти породжуються від класів, а класи - від
метакласів. Він, як правило, в системі тільки один. Але
існують мови програмування, в яких можна створювати і
використовувати власні метакласи, наприклад мова Python.
Зокрема, функціональність метакласів може бути така: при
формуванні класу він буде переглядати список усіх методів у
класі і, якщо ім'я методу має вид set_XXX або get_XXX,
автоматично створювати поле з ім'ям XXX, якщо такого не
існує.
30