Класи ооп. Об'єктно-орієнтоване програмування

Термін "об`єкт" і "клас" знайомі кожній людині. Однак для комп`ютерників вони мають свій підтекст. Це основні поняття в об`єктно-орієнтованому програмуванні. Класи-визначається розробником тип даних, який характеризується способом їх передачі і зберігання, профілем використання і набором дій, які можуть з ними проводитися. Вони відрізняються тим, що можуть реалізовуватися в якості інтерфейсу.

Що таке ООП (об`єктно-орієнтоване програмування)

Досвідчені розробники добре знають мови COBOL і C. Написані на них програми представляли собою послідовність покрокових інструкцій. Вони використовували процедури і функції для того, щоб зробити програму модульною. Ця парадигма була зосереджена на логіці, а не на даних, і на методах їх об`єднання.

Об`єктно орієнтоване програмування класи

Сучасні мови програмування Delphi, Java, C# та інші дотримуються об`єктно-орієнтованого підходу. При цьому важливість віддається даним, а не просто написанню інструкцій для виконання завдання. Об`єкт-це річ чи ідея, яку ви хочете змоделювати. Їм може бути що завгодно, наприклад, співробітник, банківський рахунок, автомобіль, різні предмети обстановки і так далі.

Поняття об`єктно-орієнтованого програмування (ООП) невід`ємно пов`язане з наступними критеріями:

  • Абстракція.
  • Інкапсуляція.
  • Успадкування.
  • Поліморфізм.

Розглянемо кожен з них більш детально.

Абстракція

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

Ми намагаємось вибірково зосередитись лише на тих речах, які важливі для нас (у житті) або для нашого модуля (у програмуванні). Зміна одного незалежного модуля не впливає на інші. Єдине, що потрібно знати, - це те, що він нам дає. Людина, яка використовує цей модуль, не повинна турбуватися про те, як завдання вирішується, що саме відбувається у фоновому режимі.

Конструктор класу з

Повсякденні об`єкти, які ми використовуємо, мають абстракції, що застосовуються на різних рівнях. Одним із прикладів об`єктно-орієнтованого програмування є застосування гальмування в автомобілі. Ця система абстрактна: автолюбителю досить натиснути на педаль, щоб транспортний засіб сповільнило швидкість і зупинилося. Внесення змін до системи прискорення не впливає на гальмівну систему, оскільки вони незалежні. Водієві не потрібно розбиратися у внутрішній роботі гальм. Від нього вимагається тільки вчасно натиснути на педаль. При цьому гальмо (і дисковий, і барабанний) спрацює, а машина сповільнить швидкість.

Інкапсуляція

Ця концепція тісно пов`язана з абстракцією. Інкапсуляція-це розкриття вирішення проблеми, не вимагає від користувача повного розуміння її предметної області. Вона пов`язує дані і поведінку в єдине ціле і не дозволяє клієнту або Користувачеві модуля дізнатися про внутрішній поданні, в якому реалізовано поведінку Абстракції.

Система об`єктно орієнтованого програмування

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

Успадкування

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

Приклад успадкування: папуга-це птах, Російський рубль-це вид валюти. Однак фраза "банк - це банківський рахунок" не вірна. Цей зв`язок очевидна, коли потрібно описати якусь сутність в даній постановці завдання. За допомогою успадкування можна визначити загальну реалізацію ООП і його поведінку, а потім для спеціалізованих класів перевизначити або змінити ці показники на щось більш конкретне. Успадкування не працює назад. Исходник (так званий батько) не матиме властивостей похідного (дочірнього класу).

Важливо відзначити, що при спробі змоделювати рішення не варто додавати кілька рівнів успадкування. Потрібно спробувати визначити загальні атрибути і поведінку в об`єктах, які змодельовані. Далі на основі цього можна продовжити рефакторинг коду, що визначає відповідний батьківський клас. Загальна реалізація може бути переміщена в нього.

Поліморфізм

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

Наприклад, якщо стоїть завдання написати повідомлення на аркуші паперу, можна використовувати ручку, олівець, маркер або перо. Досить того, щоб інструмент міг вміститися в руці і мав можливість залишати слід при зіткненні з папером. Виходить, що певні дії людини роблять напис на аркуші, А який при цьому використовується інструмент, це не настільки важливо для передачі інформації.

Іншим прикладом поліморфізму в об`єктно-орієнтованій системі програмування є літак і космічний човник, які можна назвати літаючими об`єктами. Як саме вони переміщуються в просторі? Зрозуміло, в їх роботі є велика різниця. Тобто способи реалізації їх руху неоднакові. Однак з точки зору глядача обидва об`єкти летять.

Реалізація ООП

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

Існує ще одна форма поліморфізму, яка називається перевантаженням, при якій успадкування не враховується. Назва методу буде однаковою, але аргументи в методі різні.

Особливості понять "клас" і "об`єкт"

Щоб почати працювати з об`єктно-орієнтованим програмуванням, нам потрібно розібратися, що таке клас ООП і об`єкт. Важливо розуміти різницю між ними. Клас-це план створення об`єкта. Він визначає атрибути та поведінку. Це схоже на інженерний малюнок будинку. Об`єкт є екземпляром класу. Ось така між ними різниця. У прикладі нижче показано, яким чином оголошуються клас "TForml" і змінна "Forml" на мова програмування Delphi:

typeTForml =class(TForm)Buttonl: TButton;procedure ButtonlClick(Sender: TObject);end;varForml: TForml;

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

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

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

Об`єкт 1Об`єкт 2
модель: Ваз 2107модель: Ваз 2109
Паливо: БензинПаливо: Дизель
Колір: Червонийколір: Зелений
метод запуску двигуна: Start ()метод запуску двигуна: Start ()
метод гальмування: Break ()метод гальмування: Break ()
метод прискорення: Acceleration ()метод прискорення: Acceleration ()

Таким чином об`єктно-орієнтоване програмування дозволяє легко моделювати поведінку складної системи реального світу. За допомогою ООП дані та функції (атрибути та методи) об`єднуються в об`єкті. Це запобігає необхідності будь-яких спільних або глобальних даних з ООП. Такий підхід є основною відмінністю об`єктно-орієнтованого і процедурного підходів.

Що таке клас в ООП

Класи ООП складаються з елементів різних типів:

  1. Поля даних: зберігають стан класу за допомогою змінних та структур.
  2. Методи: підпрограми для маніпулювання зазначеними даними.
  3. Деякі мови допускають третій тип-властивості. Це щось середнє між першими двома.

Метод

Поведінка класу або його екземплярів визначається за допомогою методів. Це підпрограми з можливістю оперувати об`єктами. Дані операції можуть змінити стан об`єкта або просто надати способи доступу до нього.

Існує багато методів. Їх підтримка залежить від мови. Одні створюються і викликаються кодом програміста, інші (спеціальні, такі як конструктори, деструктори і оператори перетворення) створюються і викликаються згенерованим компілятором кодом. Мова може дозволити програмісту визначити ці спеціальні методи.

Інтерфейс

Це визначення групи абстрактних дій. Він з`ясовує, яку поведінку повинен демонструвати певний об`єкт без вказівки того, як воно повинно бути реалізовано.

Об`єкт може мати кілька ролей, а користувачі мають можливість використовувати його з різних точок зору. Наприклад, об`єкт типу "людина" може мати ролі:

  • Солдата (з поведінкою "стріляй в противника").
  • Чоловіка (з поведінкою "люби свою дружину").
  • Платника податків (з поведінкою "плати податки") і так далі.

Однак кожен об`єкт реалізує свою поведінку по-своєму: Міша платить податки вчасно, Андрій з простроченням, А Петро взагалі цього не робить. Те саме можна сказати про кожен об`єкт та інші ролі.

Що таке ООП

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

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

Конструктор

Цей критерій відповідає за підготовку об`єкта до дії, наприклад, встановлення початкових значень для всіх його даних та їх елементів. Хоча він відіграє особливу роль, конструктор-це лише ще одна функція, за допомогою якої можна передавати інформацію через список аргументів. Їх можна використовувати для його ініціалізації. Ім`я функції конструктора і класу однакові.

Наступний приклад пояснює концепцію конструктора класу на C++ (Загальна мова програмування):

#includeusingnamespace std;classLine{public:voidsetLength(double len );doublegetLength(void);Line();// Оголошення конструктораprivate:double length;};// Визначення функцій, включаючи конструкторLine::Line(void){cout <<"Об`єкт створено"<< endl;}void Line::setLength(double len ){length = len;}double Line::getLength(void){return length;}// Тіло програмиintmain(){Line line;// Довжина рядкаline.setLength(6.0);cout <<"Length of line : "<< line.getLength()<<endl;return0;}

Коли наведений вище код компілюється та виконується, він дає такий результат:

Об`єкт створено

Length of line: 6

Деструктор

Це спеціальна функція класу, яка знищує об`єкт, як тільки закінчується область його дії. Деструктор автоматично викликається компілятором, коли об`єкт виходить із сфери дії.

Синтаксис для деструктора такий же, як і для конструктора, проте ім`я класу використовується в даному випадку для нього зі знаком тильди "~" в якості префікса.

Наступний приклад на мові C++ пояснює поняття деструктора:

#includeusingnamespace std;classLine{public:voidsetLength(double len );doublegetLength(void);Line();// Оголошення конструктора~Line();// Оголошення деструктораprivate:double length;}// Визначення функцій, включаючи конструкторLine::Line(void){cout <<"Об`єкт створено"<< endl;}Line::~Line(void){cout <<"Об`єкт видалено"<< endl;}void Line::setLength(double len ){length = len;}double Line::getLength(void){return length;}// Тіло програмиintmain(){Line line;// Довжина рядкаline.setLength(6.0);cout <<"Length of line : "<< line.getLength()<<endl;return0;}

Коли наведений вище код компілюється та виконується, він дасть такий результат:

Об`єкт створено

Length of line: 6

Об`єкт видалено

У чому полягають гідності КЛАСІВ

Переваги організації програмне забезпечення класи об`єктів поділяються на три категорії:

  • Швидкий розвиток.
  • Простота обслуговування.
  • Повторне використання коду та дизайну.
Основні поняття об`єктно орієнтованого програмування

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

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

Статті на тему