oops concepts c object oriented programming concept tutorial
Цей посібник пояснює концепції OOPS у C #. Ви можете дізнатися про принципи об’єктно-орієнтованого програмування, такі як поліморфізм, інкапсуляція, успадкування та абстракція:
Об'єктно-орієнтоване програмування - це модель програмування, яка працює за принципом, який обертається навколо об'єктів, а не дії чи логіки. Це дозволяє користувачам створювати об'єкти на основі вимоги, а потім створювати методи для роботи з цими об'єктами.
Робота над цими об’єктами для отримання бажаного результату є метою об’єктно-орієнтованого програмування.
=> Ознайомтесь із цілою серією навчальних посібників C # тут
Давайте переглянемо деякі концепції, які ми вивчили в наших попередніх підручниках !!
Простір імен
Простір імен у C # - це сукупність класів. Він надає структуру для збереження одного імені класу окремо від імені іншого класу, оголошуючи їх в іншому просторі імен. Щоб класи з однаковою назвою не конфліктували між собою.
Клас
Клас - це проект типу даних. Це насправді колекція предметів. Він містить об’єкти та визначення операції, яку потрібно виконати з цим об’єктом.
Об'єкти
Об'єкти - це екземпляри класу.
У наших попередніх підручниках ми вже детально дізналися про клас та об'єкти.
Що ви дізнаєтесь:
Концепції OOPS на C #
Об'єктно-орієнтоване програмування пропонує кілька переваг перед іншими моделями програмування, такими як:
- Точний та чіткий модульний підхід до програм пропонує легке розуміння та обслуговування.
- Класи та об'єкти, створені в проекті, можуть використовуватися в рамках проекту.
- Модульний підхід дозволяє різним модулям існувати незалежно, тим самим дозволяючи декільком різним розробникам працювати над різними модулями разом.
У цьому підручнику ми більше зосередимося на інших основних концепціях OOPS:
- Капсуляція
- Поліморфізм
- Спадщина
- Абстракція
Капсуляція
Інкапсуляція - це об’єктно-орієнтована концепція програмування, яка дозволяє програмістам обертати дані та фрагменти коду всередині корпусу. За допомогою програми інкапсуляції ви можете приховати учасників одного класу від іншого класу. Це як оточення логічного елемента в пакеті. Він надає лише відповідну інформацію, доступну та видиму зовні, а також лише для конкретних членів.
Інкапсуляція реалізується за допомогою специфікаторів доступу. Специфікатор доступу використовується для визначення видимості та доступності члена класу в C #.
C # містить такі специфікатори доступу.
хто відповідає за цінність бізнесу, яку надає команда сутичок?
- Громадський
- Приватна
- Захищений
- Внутрішній
Специфікатори доступу визначають видимість класу та його значення. Це дозволяє зробити дані видимими для певної частини коду та приховати їх від іншої частини. Найчастіше використовується видимість - це державна та приватна.
Давайте подивимось на них.
Публічний: Публічне ключове слово дозволяє його учасникам бути видимими з будь-якої точки проекту. Цей специфікатор доступу має найменше обмеження видимості.
Приватна: До приватних учасників може отримати доступ лише той учасник, що знаходиться в тому ж класі. Тут є одна з найбільш обмежених видимості.
Захищений: Захищена доступність дозволяє члену отримати доступ з класу та з іншого класу, який успадковує цей клас.
Внутрішні: Внутрішня забезпечує доступність у межах проекту. Ще одна подібна внутрішня доступність - захищена внутрішня. Це дозволяє те саме, що і внутрішнє, і єдина відмінність полягає в тому, що дочірній клас може успадкувати цей клас і дістатись до його членів навіть з іншого проекту.
Поліморфізм
Поліморфізм походить від грецького словника, він означає такий, що має багато форм. Poly означає багато, а Morph означає форми. Це дозволяє класу в C # мати кілька реалізацій з однаковим ім'ям.
Поліморфізм в основному поділяється на дві частини:
- Поліморфізм під час компіляції
- Поліморфізм часу виконання
# 1) Статичний або компільований часовий поліморфізм
Поліморфізм під час компіляції також відомий як статичний поліморфізм. Перевантаження методів - один із способів досягнення поліморфізму під час компіляції. Він відомий як поліморфізм під час компіляції, оскільки рішення про виклик методу приймається під час компіляції.
Це досягається тим, що ім'я методу залишається однаковим, але передається різні набори параметрів. При перевантаженні методу система спочатку перевіряє використовуваний параметр і на основі набору параметрів вирішує викликати відповідний метод.
Приклад:
class Program { void print(int i, int j) { Console.WriteLine('Printing int: {0}', (i+j) ); } void print(string a, string b) { Console.WriteLine('Printing String: ' , (a+b)); } static void Main(string() args) { Program prog = new Program(); // Call print for sum of integers prog.print(5, 6); // Call to concatenate strings prog.print('Hello','World'); Console.ReadKey(); } }
У наведеному вище прикладі ми двічі називали один і той же метод «друк» із використанням різних параметрів. Спочатку ми передаємо два цілі числа як параметри, потім ми передали два рядки як параметри. Існує два методи друку з однаковою назвою.
Коли ми передаємо параметр із цілочисельною системою, він шукатиме метод із назвою «print», який приймає два цілочисельні параметри, і виконуватиме той, ігноруючи інші методи з тим самим іменем.
У другій частині ми передали параметр string. Знову система буде шукати метод, який приймає два рядкові параметри. Отже, на основі переданих параметрів перший метод додасть два цілих числа, а наступний об’єднає два рядки.
# 2) Динамічний поліморфізм або поліморфізм виконання
Поліморфізм виконання або динамічний поліморфізм виникає, коли і назва методу, і підпис методу мають однакові ім'я та параметри. Заміна методу є прикладом динамічного поліморфізму. Це дозволяє користувачеві створити абстрактний клас із частковою реалізацією інтерфейсу.
Заміна методу досягається за допомогою успадкування. Щоб досягти перевизначення методу як базового класу, так і похідного класу, слід мати однакові імена та параметри. Під час компіляції компілятор не може розпізнати метод заміщення, отже, він не видає жодної помилки. Рішення про запуск методу приймається під час виконання.
Приклад:
class Program { public void print() { Console.WriteLine('Printing from class Program'); } } class Execute : Program { public void print() { Console.WriteLine('Printing from class Execute'); } public static void Main(string() args) { Execute exe = new Execute(); exe.print(); Console.ReadLine(); } }
Якщо ми запустимо вищезазначену програму, ми отримаємо такий результат:
Printing from class Execute
Незважаючи на те, що клас Execute успадкував усі методи програми класу, але коли ми викликали метод print, який присутній в обох класах, метод, присутній у дочірньому класі, замінить метод із батьківського класу.
Динамічний поліморфізм використовується для реалізації абстракції. Це дозволяє користувачеві створити абстрактний клас, який використовується для забезпечення реалізації інтерфейсу, коли він успадковується похідним класом. Абстрактний клас може містити імена / підпис методів, а похідний клас може мати більш спеціалізоване визначення методу.
Спадщина
Спадщина є важливою частиною концепції ООПС. У спадок ми визначаємо батьківські та дочірні класи. Дочірній клас може успадкувати всі методи, об'єкти та властивості батьківського класу. Дочірній клас також може мати власні методи та конкретну реалізацію.
Батьківський клас також відомий як базовий клас, а дочірній клас, який успадковує базовий клас, також відомий як похідний клас.
Приклад:
class Program { public void print() { Console.WriteLine('Printing from class Program'); } } class Execute : Program { public static void Main(string() args) { Execute exe = new Execute(); exe.print(); Console.ReadLine(); } }
Тут ми маємо клас, названий програмою, яка має один метод. У нас є інший клас Execute, який успадковує клас Program. Клас Execute є похідним класом, а програма класу відома як базовий клас.
Тепер, замість створення екземпляра об’єкта для програми класу, ми створили екземпляр об’єкта для класу Execute. За допомогою цього екземпляра ми можемо отримати доступ до методу друку з базового класу.
Отже, результат вищевказаного коду буде:
Printing from class Program
Похідний клас не лише успадковує методи, він також успадковує майже всі члени класу, такі як поля, властивості тощо, залежно від видимості. Спадкування в C # не дозволяє використовувати декілька спадкоємств, тобто один клас не може успадковувати з декількох різних класів, однак один клас може успадкувати з іншого класу, який може успадкувати з іншого класу.
Абстракція
Абстракція є одним з основних принципів об’єктно-орієнтованого програмування. Абстракція дозволяє програмісту відображати світу лише необхідні деталі, приховуючи інші. Абстракція досягається в C # за допомогою класу та інтерфейсу Abstract.
Клас можна оголосити абстрактним класом, використовуючи ключове слово “Abstract”. Клас Abstract у C # завжди є базовим класом в ієрархії. Що відрізняє їх від інших класів, так це те, що їх неможливо створити. Абстрактний клас C # потрібно успадкувати.
Приклад:
class Program { static void Main(string() args) { Hyundai hyn = new Hyundai(); String descp = hyn.Describe(); Console.WriteLine(descp); Console.ReadKey(); } } abstract class Car { public void Describe() { return 'Description of the car'; } } class Hyundai : Car { }
Результатом є:
Description of the car
Якщо порівняти це з нашими попередніми прикладами під час успадкування або динамічного поліморфізму, то ви виявите подібність. Найвідоміша відмінність - використання абстрактного ключового слова перед класом Автомобіль. Якщо ви хочете перевизначити це або надати власну реалізацію, подібну до того, що ми робили в динамічному поліморфізмі. Тоді ви можете досягти цього наступним чином.
class Program { static void Main(string() args) { Hyundai hyn = new Hyundai(); String descp = hyn.Describe(); Console.WriteLine(descp); Console.ReadKey(); } } abstract class Car { public virtual string Describe() { return 'Description of the car'; } } class Hyundai : Car { public override string Describe() { return 'Description of the car is now Hyundai'; } }
Отже, якщо ви виконаєте цей код зараз, він дасть такий результат:
Description of the car is now Hyundai
Похідний метод класу замінює метод базового класу. Таким чином, ви можете створити інший похідний клас, такий як Ferrari, Porsche, BMW тощо, із власними методами реалізації.
Якщо ви уважно придивитесь, то побачите, що наш метод опису в абстрактному класі не містить жодної реалізації.
Тоді, чому ми визначаємо порожні методи?
Це пояснюється тим, що клас Abstract забезпечує підпис методів і зобов’язує підкласи створити реалізацію для всіх цих методів. Це дозволяє надавати спільний доступ до базового класу, але в той же час він також контролює реалізацію методу похідного класу.
Інтерфейс
У C # інтерфейс є проектом класу. Інтерфейс схожий на абстрактний клас і використовується для досягнення стовідсоткової абстракції. Усі методи, описані в інтерфейсі, за замовчуванням абстрактні. Він не має жодного тіла методу, і його неможливо створити.
Інтерфейс в основному використовується для досягнення багаторазового успадкування та повної абстракції. Вся сигнатура методу, оголошена всередині інтерфейсу, повинна забезпечуватися реалізацією з класу або структури, яка його реалізує.
Приклад:
class Program { static void Main(string() args) { Hyundai hyn = new Hyundai(); String descp = hyn.Describe(); Console.WriteLine(descp); Console.ReadKey(); } } interface Car { string Describe(); } class Hyundai : Car { public string Describe() { return 'Description of the car is now Hyundai'; } }
Результатом роботи вищезазначеного коду буде:
Description of the car is now Hyundai
Тут ми створили інтерфейс Car. Оскільки інтерфейс не може мати жодного визначення методу, ми щойно вказали ім’я методу та тип повернення в інтерфейсі. Потім ми застосували інтерфейс Car до іншого класу Hyundai. У реалізованому класі ми надали визначення методів, визначених всередині інтерфейсу.
Висновок
У концепції об’єктно-орієнтованого програмування кожна частина програми розглядається як об’єкт. Клас - це колекція подібних типів елементів, а об'єкт є екземпляром класу.
Інкапсуляція в C # дозволяє користувачеві встановити видимість класу та його членів. Поліморфізм дозволяє методам мати однакову назву, але з різними параметрами всередині одного класу або з однаковим параметром в іншому класі.
Спадкування - це коли дочірній клас, який також відомий як похідний клас, успадковує всі властивості, включаючи методи, об'єкти, поля тощо батьківського класу, який також відомий як базовий клас. Абстракція дозволяє програмі відображати лише підпис, приховуючи деталі реалізації.
Зведена програма
class Program { void print(int i, int j) { Console.WriteLine('Printing int: {0}', (i + j)); } void print(string a, string b) { Console.WriteLine('Printing String '+ a + b); } static void Main(string() args) { Program prog = new Program(); // Call print for sum of integers prog.print(5, 6); // Call to concatenate strings prog.print('Hello', 'World'); Hyundai hyn = new Hyundai(); String descp = hyn.Describe(); Console.WriteLine(descp); Console.ReadKey(); } } abstract class Car { public virtual string Describe() { return 'Description of the car'; } } class Hyundai : Car { public override string Describe() { return 'Description of the car is now Hyundai'; } }
=> Ознайомтесь із цілою серією навчальних посібників C # тут
Рекомендована література
- ООП Java: Вступ до об’єктно-орієнтованого програмування на Java
- Об'єктно-орієнтоване програмування на C ++
- Підручник з труб Unix: Труби в програмуванні Unix
- Підручник з Python DateTime із прикладами
- Сховище об’єктів у QTP - Підручник №22
- Концепції ООП Python (класи, об'єкти та спадкування Python)
- Підручник QTP №7 - Парадигма ідентифікації об’єктів QTP - Як QTP унікально ідентифікує об’єкти?
- Дізнайтеся про вдосконалені концепції сценаріїв Groapy для SoapUI - Підручник SoapUI №9