Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРОГРАМУВАННЯ ТА АЛГОРИТМІЧНІ МОВИ.doc
Скачиваний:
23
Добавлен:
28.10.2018
Размер:
543.74 Кб
Скачать
  1. Об’єктно-зорієнтоване програмування. Класи і об’єкти. Основні поняття.

Об'є́ктно-орієнто́ване програмува́ння (ООП) — одна з парадигм програмування, яка розглядає програму як множину «об'єктів», що взаємодіють між собою. В ній використано декілька технологій від попередніх парадигм, зокрема успадкування, модульність,поліморфізм та інкапсуляцію. Незважаючи на те, що ця парадигма з'явилась в 1960-тих роках, вона не мала широкого застосування до1990-тих. Сьогодні багато мов програмування (зокрема, Java, C#, C++, Python, PHP, Ruby та Objective-C, ActionScript 3) підтримують ООП.

Паради́гма програмува́ння — основні принципи програмування (не плутати з розробкою програм), або, парадигмне програмування.

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

На відміну від традиційних поглядів, коли програму розглядали як набір підпрограм, або як перелік інструкцій комп'ютеру, ООП програми можна вважати сукупністю об'єктів. Відповідно до парадигми об'єктно-орієнтованого програмування, кожний об'єкт здатний отримуватиповідомлення, обробляти дані, та надсилати повідомлення іншим об'єктам. Кожен об'єкт — своєрідний незалежний автомат з окремим призначенням та відповідальністю[2].

В результаті дослідження Дебори Дж. Армстронг (англ. Deborah J. Armstrong)[3] комп'ютерної літератури, що була видана протягом останніх 40 років, вдалось відокремити фундаментальні поняття (принципи), використані у переважній більшості визначень об'єктно-орієнтованого програмування. До них належить:

Клас 

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

Об'єкт 

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

  1. Опис класів і об’єктів.

Мові програмування, в якій кожний об'єкт створюється від класа, об'єкт називається екземпляром цього класа. Створення екземпляра класа іноді називається інстациацієюкласа

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

Методи і змінні, складові клас, називаються членами класу. При визначенні класу оголошуються дані, які він містить, і код, який маніпулює цими даними. Дані містяться в змінних екземпляра, які визначені класом, а код міститься в методах. У мові С # визначені кілька специфічних різновидів членів класу. До них відносяться: змінні екземпляра, статичні змінні, константи, методи, конструктори, деструктори, індексатори, події, оператори і властивості.

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

Класси

Синтаксис визначення класу:

 

class імя_класу

{

тип_доступу тип імя_змінної1;

тип_доступу тип імя_змінної2;

...

тип_доступу повертаємий_тип

імя_методу1 (список_параметрів)

{Тіло_методу}

}

де тип_доступу може приймати одне з наступних значень: public, private, protected, internal. Члени класу з типом доступу public є загальнодоступними (тобто доступні з будь-якої точки програми за межами даного класу), з типом доступу protected - всередині членів даного класу і його похідних, з типом доступу private - тільки для інших членів даного класу. Тип доступу internal застосовується для типів, доступних у межах однієї збірки.

Наведемо приклад опису класу:

class Animal

{

public string Name;

private int Weight;

protected int Type;

public int Animal (int W, int T, string N)

{

Weight = W;

Type = T;

Name = N;

}

public int GetWeight ()

{

return Weight;

}

}

Обєкт

Для створення об'єкта необхідно використовувати наступний синтаксис:

імя_класу імя_обєкту = new імя_класу ();

При створенні об'єкта (тобто екземпляра класу) відбувається виклик відповідного конструктора класу. Поняття конструктора і деструктора.

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

Конструктор існує для будь-якого класу, незалежно від того, визначено він в явному вигляді чи ні. Замовчування мова С # передбачено наявність конструктора, який присвоює нульові значення всім змінним примірники (для змінних типів-значень) та значення null (для змінних посилального типу). У випадку явного визначення конструктора класу конструктор за умовчанням не використовується.

Синтаксис опису конструктора:

імя_класу (список_параметрів)

{Тіло_конструктора}

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

Синтаксис опису деструктора:

~ Імя_класу () {тіло_деструктора}