Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5fan_ru_ПАРАДИГМИ ПРОГРАМУВАННЯ.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
3 Мб
Скачать
☆

2.2 Чисто об'єктно-орієнтовані і гібридні мови програмування

Розрізняють чисті і гібридні об'єктно-орієнтовані мови програмування. Чисті — це ті, які дозволяють використовувати тільки одну модель програмування — об'єктно-орієнтовану. Ви можете оголошувати класи і методи, але не можете визначити глобальні змінні і звичайні функції або процедури.

Прикладами “чистих” мов ООП сьогодні є Java, C#.

C++, Object Pascal і VB, VBA - гібридні мови, які дозволяють використовувати, при необхідності, процедурний підхід.

Корисним результатом наслідування стала велика кількість повторно-використовуваних об'єктів, зібраних у бібліотеки класів. Такі бібліотеки включають практично весь програмний інтерфейс операційної системи і дозволяють задіяти при програмуванні засоби більш високого рівня, ніж просто виклики функцій. Базові конструкції і класи можуть багатократно використовуватися при створенні нової програми. При цьому скорочується час розробки програм. Як приклад подібної системи можна навести бібліотеку Microsoft Foundation Class (MFC) для компілятора MS Visual C++.

Подібні реалізації є і в інших компіляторах. Далі детальніше розглянемо реалізацію об’єктно-ораєнтованої парадигми у мові C# та платформі MS.NET.

2.3. Реалізація принципів ооп в мові c#

Мова C# є чисто об'єктною мовою програмування. Це означає, що всі визначення змінних і процедур (методів) повинні знаходитися в тілі класу.

Для того, щоб можна було створювати програми в C# клас грає дві різні ролі: модуля і типу даних.

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

У мові C# дозволяється оголосити клас, який не розглядається як тип даних, і в якого зберігається єдина роль – роль модуля. Такий клас оголошується з модифікатором static. В такому класі можуть бути задані константи, лише статичні поля і лише статичні методи. У нього немає конструкторів в звичайному сенсі цього слова, що дозволяють створювати об'єкти – екземпляри класу.

Статичний клас не може розглядатися як тип даних.

Приклад – клас Program консольної програми зі статичним методом main.

Приклад Генерація масиву чисел і його сортування

class Program

{ // генератор даних

static void ValsGenerator(int[] Vals)

{

// Random - клас для генерації випадкових чисел

Random aRand = new Random();

// заповнення масиву

for (int i = 0; i < Vals.Length; i++)

Vals[i] = aRand.Next(100);

}

static void Main(string[] args)

{

const int N = 10;

int[] Data = new int[N];

ValsGenerator(Data);

Array.Sort(Data);

Console.WriteLine("Друк відсортованих даних");

for (int i = 0; i < Data.Length; i++)

Console.WriteLine("Data[" + i + "] = " + Data[i]);

Console.ReadLine();

}

}

Практично велику систему, що створюється колективом розробником, без розділення системи на модулі побудувати неможливо.

Модульність побудови – основний засіб боротьби із складністю системи.

2. Друга роль класу. Клас – це тип даних, який задає реалізацію деякої абстракції даних, характерної для проблемної області, для якої створюється програмна система.

Склад класу як типу даних визначається не архітектурними міркуваннями, а тією абстракцією даних, яку повинен реалізувати клас. Якщо ви створюєте клас Account, що реалізовує таку абстракцію, як банківський рахунок, то в цей клас не можна додати поля з класу Car, задаючого автомобіль. З іншого боку в цьому класі мають бути всі поля і всі методи, необхідні клієнтам класу, що оперують з банківськими рахунками.

В С# оголошення класів вводяться ключовим словом class.

Клас є основою для створення об'єктів. В класі визначаються дані і код, який працює з цими даними.

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

Об'єкти є екземплярами класу. Це динамічні об'єкти, вони створюються при виконанні програми в області видимості і знищуються після виходу з неї.

Формально клас описується таким чином:

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

тип доступу class им’я_класу {

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

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

…

тип_доступу тип_результату

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

}

де тип_доступу визначає область видимості класу. Для класів визначено такі модифікатори доступу:

public - клас доступний для інших компонент;

internal - клас видимий в середині цього компонента (збірки).

Для членів класу (даних і методів) визначені такі модифікатори доступу:

рublic - члени класу доступні за межами даного класу;

internal - члени класу доступні в межах однієї збірки;

рrotected - члени класу доступні усередині даного класу;

private - члени класу доступні тільки для інших членів даного класу.

За замовчанням застосовується модифікатор internal.

Членами класу можуть бути:

• Константи (const)

• Поля (field)

• Конструктори (у тому числі без параметрів)

• Деструктори

• Методи

• Властивості (property)

• Індексатори (властивості з параметрами)

• Події (event)

• Вкладені типи.

Звернення до поля класу виконується за допомогою операції доступу (крапка). Праворуч від крапки задається ім'я поля, зліва — ім'я екземпляра для звичайних полів або ім'я класу для статичних. Створення об’єкту класу виконується оператором new.

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

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

Приклад. Визначається простий клас Demo і два способи звернення до його полів.

using System;

namespace ConsoleApplication1

{

class Demo

{

public int a = 1; // поле даних

public const double c = 1.66; // константа

public static string s = "Demo"; // статичне поле класу

double y; // закрите поле даних

}

class Class1

{ static void Main()

{

Demo x = new Demo(); // створення екземпляра класу Demo

Console.WriteLine( x.a ); // x.a - звернення до поля класу

Console.WriteLine( Demo.c ); // Demo.c - звернення до константи

Console.WriteLine( Demo.s ); // звернення до статичного поля

}

}

}

Питання

1. Які основні принципи об’єктно-орієнтованої парадигми?

2. У чому полягає сутність механізму абстракції даних?

3. Які парадигми підтримуються у С++?

4. Які концепції покладено в основу об’єктно-орієнтованої парадигми?

5. Назвіть основні відміни об’єктно-орієнтованого програмуванні від структурного.

6. Що таке об’єкт у об’єктно-орієнтованому програмуванні і як він використовується?

7. Що таке “властивість” об’єкта?

8. Що таке “наслідування”. Навести приклад

9. Що таке “поліморфізм” і стосовно якої парадигми він використовується?

10. Що таке “інкапсуляція” і до якої парадигми належить це поняття?

11. Яка особливість реалізації принципів ООП в C# порівняно з C++?

12. Які дві ролі класу в C#?