Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_KAZYMYR.doc
Скачиваний:
14
Добавлен:
09.11.2019
Размер:
3.71 Mб
Скачать

2.7.Методи

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

Розрізняють 5 видів операцій над об'єктами:

  1. Модифікатори - операції, які змінюють стан об'єкта.

  2. Селектори - операції, що надають доступ до полів даних об'єктів.

  3. Ітератори - всі допоміжні операції.

  4. Конструктори - операції створення й ініціалізації об'єктів.

  5. Деструктори - операції руйнування об'єктів і звільнення займаної ними пам'яті.

В SmallTalk і Java всі операції задаються усередині методів. У С++ і Object Pascal операції над об'єктами можуть бути задані поза методами, наприклад у тілі "дружньої" функції. По суті методи, як і функції й процедури, є об'єднанням декількох або однієї операцій (крім абстрактних методів) і визначають ту або іншу дію об'єкта. Однак методи завжди інкапсульовані у класі.

2.7.1.Загальна схема визначення методу

Всі методи будуються за схемою:

<метод >:=< заголовок методу >< тіло методу >

<заголовок методу >:= [<тип >]<ім'я методу >[<параметри методу >]

Наприклад, у різних мовах програмування заголовок методу «Замінити елемент на об'єкт» виглядає в такий спосіб:

SmallTalk: at: anInt put: anObject

C++: void atPut(int anInt, x& anObject);

Delphi: atPut(anInt:integer; anObj:TObject);

Java: void atPut(int anInt, x& anObject);

2.7.2.Визначення методів в SmallTalk

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

Array new. // метод класу

Time now. // метод класу

Turtle home. // метод екземпляра класу, тому що Turtle об'єкт класу Pen

Pen new Count.

Методи класу адресуються класам, а методи екземплярів класу – об'єктам. Визначення методів класу й методів екземпляра класу виконується у вікні Browser Class, як це описано в п. 2.2. 1.

2.7.3.Визначення методів в C++

Особливості визначення:

  1. Всі методи реалізуються як функції, а значить при їхньому визначенні вказується тип значення, що повертається. Якщо нічого не вертається, вказується тип void.

  2. У прототипах функцій, що оголошуються в інтерфейсі, можуть вказуватися тільки типи параметрів:

void g(int, double, char);

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

void f (int);

int f (int); // помилка!

  1. Допускається використання параметрів за замовчуванням, які повинні бути зазначені останніми в списку параметрів:

void f (float x, int y=1, char a='A');

Дана функція може бути викликана у вигляді:

f (0.5); // x=0.5; y=1; a='A'

  1. Допускається визначення вкладених функцій (inline). Можливі два варіанти визначення таких функцій:

  • будь-яка функція, що визначена усередині класу, автоматично стає inline:

class X { int i;

void f() {

……………… // тіло функції

}

};

  • inline-функцію можна вказати явно в розділі реалізації

сlass X { int i;

void f();

………………

};

inline X::f() {...………………}

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

  1. Можуть бути визначені методи класу, які оголошуються із ключовим словом static:

class A { int i,j ; // змінні екземпляра класу

static int f() ; // метод класу

}a; *p;

Класові методи можна викликати без прив'язки до екземплярів класу, вказуючи як кваліфікацію ім'я класу:

A::f();

Оскільки статичні функції повинні використовувати тільки статичні поля, то їх можна викликати й через екземпляри класу:

a.f();

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]