Ооп, об'єкти, класи. Успадкування та інтерфейси

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

Об`єктний підхід

В об`єктно-орієнтованій парадигмі розробки існують три основні інструменти, якими розробники користуються для написання хорошого коду:

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

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

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

Поняття успадкування

Для того, щоб зрозуміти суть процесу успадкування, можна навести приклад з життя. Існує абстрактне поняття»людина". У будь-якої людини є загальні характеристики, якими його можна описати. Це зріст, вага, колір волосся, тембр голосу, і так далі. Іванов Іван, учень 1 " А "класу-це конкретний представник поняття "людина" , тобто, висловлюючись мовою об`єктно-орієнтованого підходу, поняття Іванов Іван-спадкоємець поняття людина. Або, наприклад, сусідський кіт Барсик-спадкоємець поняття " кіт». Можна скласти більш складне успадкування: поняття Барсик успадковується від поняття мейн-кун, яке в свою чергу успадковується від поняття " кіт».

Як це описується мовою програмування?

В розробці програмне забезпечення процес успадкування дає можливість створювати клас на основі інших. Клас-батько називається базовим, а решта-спадкоємці-це похідні. Запозичення полягає в в тому, що нащадкам переходять методи, властивості і поля батьків. Синтаксис успадкування класів в мові програмування C# може виглядати наступним чином. Наприклад:

class Ivan: Person {//тіло класу{

Приклад механізму успадкування КЛАСІВ:

class Person{public int Age { get; set;}} class Ivan: Person{public void Talk () {//Іван розмовляє}}class Peter: Person{public void Walk () {//Петро йде}}class Program{static void Main (string [] args) {Ivan ivan = new Ivan (); ivan.Age = 29; / / позначаємо вікpeter peter = new Peter (); peter.Age = 35ivan.Talk();peter.Walk()();}}

На основі базового класу Person створюються класи спадкоємців, і властивість Age доступна для обох класів.

Конструктор базового класу

Створюючи клас з оголошеним конструктором і клас-спадкоємець, виникає логічне запитання: які конструктори за що відповідатимуть при створенні об`єктів цих класів?

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

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

public Ivan (int age) : base (age) {//тіло конструктора}

Успадкування методів КЛАСІВ-найважливіша властивість ООП. При створенні об`єкта класу-спадкоємця аргументи конструктора базового класу передаються в нього ж, після чого викликається його конструктор, а потім виконуються інші виклики конструктора спадкоємця.

Доступ до полів з дочірнього класу

Успадкування доступу до властивостей і методів базового класу з класу-спадкоємця стає можливим, якщо всі вони оголошуються з наступними ключовими словами:

1. Public.

Надає необмежений доступ до членів класу: з Main, з КЛАСІВ-спадкоємців, з інших аналогів.

2. Protected.

Доступ до члена залишається тільки з вихідного класу, або з похідних аналогів.

3. Internal.

Обмеження до члена локалізовано тільки даної збіркою проекту.

4. Protected internal.

Обмеження до члена лімітовано тільки даної збіркою проекту або з похідних класів.

Модифікатори доступу

Успадкування доступу до членів класу залежить від ключових слів. Якщо при оголошенні члена як таке не вказано, то доступність встановлюється за замовчуванням (private).

Множинне успадкування

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

Приклади інтерфейсів

Дані структури створюються за межами КЛАСІВ, оголошуються, використовуючи ключове слово interface:

interface IMyInterfave{void MyMethod (int someVar);}

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

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

class MyClass : IMyInterface{public void MyMethod (int someVar)}

Інтерфейс необхідні для того, щоб реалізовувати множинне успадкування. В мова програмування C++, ножове успадкування КЛАСІВ можливе; в мові C# для цих цілей використовуються інтерфейси. Клас може реалізовувати численну кількість інтерфейсів, в такому випадку вони перераховуються через кому після оголошення класу:

class MyClass: IMyFirstInterface, IMySecondInterface {//тіло класу}

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

Двійковий код

Ще трохи про успадкування КЛАСІВ

Java, C#, C++ - всі об`єктно-орієнтовані мови по-своєму реалізують механізм успадкування. Але суть скрізь одна: передати властивості батька об`єкту-нащадку. Інтерфейси, абстрактні класи - це все зручні інструменти для втілення цього завдання.

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