Клас

Версія від 16:49, 27 грудня 2011, створена Yunko (обговореннявнесок) (Створена сторінка: =Клас= '''Клас''' - Деяка абстракція сукупності об'єктів, які мають загальний набір властиво…)
(різн.) ← Попередня версія • Поточна версія (різн.) • Новіша версія → (різн.)

Клас

Клас - Деяка абстракція сукупності об'єктів, які мають загальний набір властивостей і мають однакову поведінку, і визначається як список своїх членів. В об'єктно-орієнтованому програмуванні, класи використовуються для групування пов'язаних змінних та функцій. Клас описує набір інкапсульованих змінних екземпляра та методів (функцій), можливо, разом з реалізацією цих типів разом з конструктором, який може використовуватись для створення екземплярів класа.


Клас є зв'язанним пакетом, який складається із спеціальних метаданих часу компіляції. Він описує правила за якими діють об'єкти; ці об'єкти називаються "екземплярами" цього класа. Клас визначає структуру даних, що містить кожний екземпляр, і, також, методи (функції) які обробляють дані екземпляра та виконують завдання; ці методи часто називають "поведінкою". Метод є функцією, що має доступ до даних об'єкта. Клас є найспецифічнішим типом даних об'єкта по відношенню до окремого прошарку. Клас може мати представлення (метаоб'єкт) під час виконання програми, який надає допомогу в роботі з метаданими класа.


Клас визначає абстрактні характеристики деякої сутності, включаючи характеристики самої сутності (її атрибути або властивості) та дії, які вона здатна виконувати (її поведінки, методи або можливості). Наприклад, клас Собака може характеризуватись рисами, притаманними всім собакам, зокрема: порода, колір хутра, здатність гавкати. Класи вносять модульність та структурованість в об'єктно-орієнтовану програму. Як правило, клас має бути зрозумілим для не-програмістів, що знаються на предметній області, що, у свою чергу, значить, що клас повинен мати значення в контексті. Також, код реалізації класу має бути досить самодостатнім. Властивості та методи класу, разом називаються його членами.

Відносини між класами

  • Спадкування (Генералізація) - об'єкти дочірнього класу успадковують всі властивості батьківського класу.
  • Асоціація - об'єкти класів вступають у взаємодію між собою.
  • Агрегація - об'єкти одного класу, входять в об'єкти іншого.
  • Композиція - об'єкти одного класу, входять в об'єкти іншого і залежать один від одного за часом життя.
  • Клас-метакласи - ставлення, при якому примірниками одного класу є інші класи.

Види класів

  • Базовий (батьківський) клас
  • Похідний клас (спадкоємець, нащадок)
  • Абстрактний (віртуальний) клас

Члени класів

Клас визначається як список своїх членів. До членів класу відносяться його поля (властивості) і функції (методи). Кожному члену класу можна встановити його область доступу (access control level). Область доступу члена класу визначає ділянки коду, з яких до цього члену буде можливо звертатися. У більшості об'єктно-орієнтованих мов програмування підтримуються наступні області доступу:

private (закритий, внутрішній член класу) - звернення до члена допускаються тільки з коду методів класу, в якому цей член визначений. Будь-які спадкоємці класу вже не зможуть отримати доступ до цього члену;
protected (захищений, внутрішній член ієрархії класів) - звернення до члена допускаються з коду методів класу, в якому цей член визначений, або з будь-яких його класів-спадкоємців;
public (відкритий член класу) - звернення до члена допускаються з будь-якого коду.

Область видимості

Область видимості членів класу (тобто область коду, з якої до них можна звертатися за некваліфікованого імені - без вказівки імені класу чи об'єкта) не залежить від їх області доступу, і завжди збігається з кодом методів класу.

Область видимості самого класу по-різному визначається в різними мовами програмування. В одних мовах (таких як Delphi) усі класи мають глобальну видимість (з урахуванням видимості модуля), в інших (таких як Java) область видимості класу пов'язана з змістом його одиниці компіляції (в Java - з пакетом), в третіх (таких як C + + і C #) область видимості класу визначається просторами імен (), які задаються програмістом явно і можуть співпадати або не співпадати з одиницями компіляції.

Розробка класів

Класи розробляються для досягнення певної мети. Найчастіше програміст починає з нечітко обкресленої ідеї, яка поступово, у міру розробки проекту, поповнюється деталями. Іноді справа закінчується декількома класами, вельми схожими один на одного. Щоб уникнути подібного дублювання код в класах, слід розбити їх на дві частини, визначивши загальну частину в батьківському класі, а що відрізняються залишити в похідних. Оголошення класу повинне передувати його використанню. Як правило, прикладний програміст користується готовими базовими класами, причому йому зовсім не обов'язково розбиратися у всіх специфікаціях і у внутрішній реалізації. Проте, щоб використовувати базовий клас, треба обов'язково знати які члени даних і методи доступні.