OOP.pptx
- Количество слайдов: 59
Вступ до об'єктноорієнтованого програмування
1. 2. 3. 4. 5. 6. Основні поняття ООП. Поняття класу. Поля класу. Методи. Конструктори. Властивості.
Абстрагування та інкапсуляція • При представленні реального об'єкта за допомогою програмного потрібно виділити особливості та ігнорувати несуттєві. Цею процес називається абстрагуванням. • Деталі реалізації об'єкта приховані, він використовується через його інтерфейс - Сукупність правил доступу. • Приховування деталей реалізації називається інкапсуляцією. Це дозволяє представити програму в укрупненому вигляді - на рівні об'єктів та їх взаємозв'язків, а отже, керувати великим обсягом інформації.
Успадкування • Успадкування – це метод створення нових класів на основі вже існуючих. • Успадкування застосовується для: – виключення з програми повторюваних фрагментів коду; – спрощення модифікації програми; – спрощення створення нових програм на основі існуючих. • Успадкування буває 2 -х видів: – класичне успадкування (відношення «є» - is); – успадкування відповідно до моделі делегування (відношення “має” – has).
Поліморфізм • Поліморфізм дає підкласу спосіб визначення власної версії методу, визначеного в базовому класі за допомогою процесу, який називається перевантаженням. • Найчастіше поняття поліморфізму пов'язують з механізмом віртуальних методів.
Переваги ООП • використання при програмуванні понять, близьких до предметної області; • можливість успішно управляти великими обсягами вихідного коду завдяки інкапсуляції, тобто приховування деталей реалізації об'єктів і спрощення структури програми; • можливість багаторазового використання коду за рахунок успадкування; • порівняно проста можливість модифікації програм; • можливість створення і використання бібліотек об'єктів.
Недоліки ООП • деяке зниження швидкодії програми, пов'язане з використанням віртуальних методів; • ідеї ООП непрості для розуміння і особливо для практичного використання; • для ефективного використання існуючих об'єктно-орієнтованих систем вимагається великий обсяг первинних знань; • неграмотне застосування ООП може призвести до значного погіршення характеристик розроблюваної програми.
1. 2. 3. 4. 5. 6. Основні поняття ООП. Поняття класу. Поля класу. Методи. Конструктори. Властивості.
Поняття класу • Клас є типом даних, який визначається користувачем. • Він повинен представляти єдину логічну сутність, наприклад, бути моделлю реального об'єкта або процесу. Елементами класу є дані і функції, призначені для їх обробки (методи). • Всі класи. NET мають спільного предка - клас object, і організовані в єдину ієрархічну структуру.
Об'єктно-орієнтоване програмування • Подання об'єктів реального світу Працівник Ім'я Прізвище Розмір зарплати ID співробітніка
Об'єктно-орієнтоване програмування • Подання об'єктів реального світу Працівник Ім'я: string name; Прізвище: string surname; Розмір зарплати: double payment; ID співробітніка: int emp. ID;
Чому застосовувати класи? / /Працівник Ірина string name. Ira; double payment. Ira; / /Працівник Катерина string name. Katya; double payment. Katya;
Чому застосовувати класи? / /Працівник Ірина string name. Ira; double payment. Ira; / /Працівник Катерина string name. Katya; double payment. Katya; / /Працівник Катерина string name. Katya 2; double payment. Katya 2; Katya 2?
Чому застосовувати класи? / /Працівник Ірина string name. Ira; double payment. Ira; / /Працівник Катерина string name. Katya; double payment. Katya; / /Працівник Катерина string name. Katya 2; double payment. Katya 2; 500 працівників? Katya 2?
Чому застосовувати класи? Прізвище Ім'я Зарплата. . . Працівник 1
Чому застосовувати класи? Прізвище Ім'я Зарплата Працівник 1 Працівник 2 Працівник 3 . . І ще 497 працівників. . .
Чому застосовувати класи? Прізвище Ім'я Зарплата . . . Працівник 1 Прізвище Ім'я Зарплата . . . Працівник 2 Прізвище Ім'я Зарплата . . . Працівник 3 Факультет І ще 497 працівників. . .
Чому застосовувати класи? І ще 497 працівників. . . Працівник 1 Працівник 2 Працівник 3 . . . Студент 1 Студент 2 Факультет Студент 3
Чому застосовувати класи? Працівники [] [] Студенти Факультети
Чому застосовувати класи? Працівники Студенти [] [] Факультет 1 Університет Факультет 2
Опис класу [атрибути] [специфікатори] class імя_класу [: предки] тіло_класу • Ім'я класу задається за загальними правилами. • Тіло класу - список описів його елементів, укладений у фігурні дужки. • Атрибути задають додаткову інформацію про клас. • Специфікатори визначають властивості класу, а також доступність класу для інших елементів програми. • Найпростіший приклад опису класу: class Demo {} / / порожній клас
Специфікатори класу Специфікатор Опис new (для вкладених класів). Задає новий опис класу взамін успадкованого від предка. Застосовується в ієрархіях public Доступ не обмежений protected Використовується для вкладених класів. Доступ лише з елементів даного і похідних класів internal Доступ тільки з даної програми (збірки) protected internal Доступ тільки з даного і похідних класів або з даної програми (збірки) private (для вкладених класів). Доступ лише з елементів класу, всередині якого описаний даний клас abstract Абстрактний клас. Застосовується в ієрархіях sealed Безплідний клас. Застосовується в ієрархіях static Статичний клас.
Елементи класу • поля; • властивості; • методи; • події; • конструктори; • делегати.
Загальна структура Працівника public class Employee { Поля Методи }
Опис класу public class Employee { string name; string surname; double payment; int emp. ID; public Give. Bonus (double amount) { emp. ID+ = Amount; } }
Опис об'єкта (екземпляра) • Клас є узагальненим поняттям, що визначає характеристики і поведінку безлічі конкретних об'єктів цього класу, які називаються екземплярами (об'єктами) класу. • Створення екземпляру класу здійснюється за допомогою операції new: Employee Kateryna = new Employee(); Employee Iryna = new Employee(“Ірина”); • Для кожного об'єкта при його створенні в пам'яті виділяється окрема область для зберігання його даних. • Крім того, в класі можуть бути присутніми статичні елементи, які існують в єдиному екземплярі для всіх об'єктів класу.
Приклад створення об'єктів (екземплярів) class Employee {. . . } class Class 1 { static void Main () { Employee X = new Employee (); } }
Присвоювання і порівняння об'єктів Хіп Стек Значення Посилання а • b=c b c Об'єкти • Величини посилального типу рівні, якщо вони посилаються на одні і ті ж дані (b == c, але a! = b навіть при рівності їх значень або якщо обидва посилання дорівнюють null).
1. 2. 3. 4. 5. 6. Основні поняття ООП. Поняття класу. Поля класу. Методи. Конструктори. Властивості.
Дані: поля і константи • Дані, що містяться в класі, можуть бути змінними або константами. • Змінні, описані в класі, називаються полями класу. • При описі полів можна вказувати атрибути та специфікатори, що задають різні характеристики елементів: [атрибути] [специфікатори] [const] тип ім'я [= початкове_значення] public int a = 1; public static string s = "Demo"; double y; • Всі поля спочатку автоматично ініціалізуються нулем відповідного типу (наприклад, для полів типу int присвоюється 0, а для посилань на об'єкти значення null). Після цього полю присвоюється значення, задане при його явній ініціалізації.
Приклад класу using System; namespace CA 1 {сlass Demo {public int a = 1; / / поле даних public const double c = 1. 66; / / константа public static string s = "Demo"; / / Статичне поле класу double y; / / Закрите поле даних } class Class 1 {static void Main () { Demo x = new Demo(); / / Створення екземпляра класу Demo Console. Write. Line(x. a ); / / x. a - Звернення до поля класу Console. Write. Line(Demo. c ); / / Demo. c - Звернення до константи Console. Write. Line(Demo. s ); / / Звернення до статичного полю }}}
Специфікатори полів і констант класу Специфікатор Опис public Доступ до елементу не обмежений protected Доступ тільки з даного і похідних класів internal Доступ тільки з даної збірки protected internal Доступ тільки з даного і похідних класів і з даної збірки private Доступ тільки з даного класу static Одне поле для всіх екземплярів класу readonly Поле доступне тільки для читання volatile Поле може змінюватися іншим процесом або системою
1. 2. 3. 4. 5. 6. Основні поняття ООП. Поняття класу. Поля класу. Методи. Конструктори. Властивості.
Методи • Метод - функціональний елемент класу, який реалізує обчислення або інші дії. Методи визначають поведінку класу і становлять його інтерфейс. • Метод - фрагмент коду, до якого можна звернутися по імені. Він описується один раз, а викликатися може стільки разів, скільки необхідно. • Один і той же метод може обробляти різні дані, передані йому в якості аргументів. double a = 0. 1; double b = Math. Sin(a); Console. Write. Line(a);
Синтаксис методу [ атрибути] [специфікатори] тип імя_методу( [параметри] ) тіло_методу • Специфікатори: new, public, protected, internal, protected internal, private, static, virtual, sealed, override, abstract, extern. • Метод класу має безпосередній доступ до його полів. • Приклад: class Demo { double y; / / закрите поле класу public void Sety(double z ) { y = Z; } }. . . Demo x = new Demo (); x. Sety (3. 12); . . . / / відкритий метод класу / / десь в методі іншого класу / / виклик методу
Приклади методів n Тип методу визначає значення якого типу обчислюється за допомогою методу n Параметри використовуються для обміну інформацією з методом. Параметр - локальна змінна, яка при виклику методу приймає значення відповідного аргументу. public void Sety(double z){ y = z; } public double Gety() { return y; } x. Sety (3. 12); double t = x. Gety ();
Параметри методів • Параметри визначають безліч значень аргументів, які можна передавати в метод. • Список аргументів при виклику накладається на список параметрів, тому вони повинні попарно відповідати один одному. • Для кожного параметра повитрібно задавати його тип, ім'я і, можливо, вид параметра. • Ім'я методу в сукупності з кількістю, типами і специфікаторами його параметрів являє собою сигнатуру методу. • У класі не повинно бути методів з однаковими сигнатурами. • Метод, описаний зі специфікатором static, повинен звертатися тільки до статичних полях класу. • Статичний метод викликається через ім'я класу, а звичайний - через ім'я екземпляра.
Приклад class Demo { public int a = 1; public const double c = 1. 66; static string s = "Demo"; double y; public double Gety () {return y; } / / метод отримання y public void Sety (double y_) {y = y_; } / / метод установки y public static string Gets () {return s; } / / метод отримання s } class Class 1 { static void Main () {Demo x = New Demo (); x. Sety(0. 12); / / виклик методу установки y Console. Write. Line(x. Gety()); / / Виклик методу отримання y Console. Write. Line(Demo. Gets()); / / Виклик методу отримання s / / Console. Write. Line (Gets ()); / / варіант виклику з того ж }} / / класу
Виклик методу 1. Обчислюються вирази, що стоять на місці аргументів. 2. Виділяється пам'ять під параметри методу. 3. Кожному з параметрів ставиться у відповідість аргумент. При цьому перевіряється відповідність типів аргументів і параметрів і при необхідності виконується їх перетворення. При невідповідності типів видається діагностичне повідомлення. 4. Виконується тіло методу. 5. Якщо метод повертає значення, воно передається в точку виклику; якщо метод має тип void, управління передається на оператор, наступний після виклику. Опис об'єкту: Some. Obj obj = new Some. Obj (); Опис аргументів: Int b; double a, c; Виклик методу: obj. P (a, b, c); Тема методу P: Public void P (double x, int y, double z);
Приклади передачі аргументів в метод class Class 1 {Static int Max(int a, int b) / / метод вибіру макс. значення { return a> b ? a: b; } static void Main () { int a = 2, b = 4; int x = Max (a, b); / / виклик методу Max Console. Write. Line (x); / / результат: 4 short t 1 = 3, t 2 = 4; int y = Max (t 1, t 2); / / аргументи типу Console. Write. Line (y); / / результат: 4 int z = Max (a + t 1, t 1 / 2 * b); / / аргументи-вирази Console. Write. Line (z); / / результат: 5 }}
Способи передачі аргументів у метод Аргументи передаються: n n За значенням За адресою (по посиланню) • При передачі по значенню метод отримує копії значень аргументів, і оператори методу працюють з цими копіями. • При передачі по посиланню (за адресою) Метод отримує копії адрес аргументів і здійснює доступ до аргументів за цими адресами.
Передача аргументу за значенням область параметрів копія аргументу аргумент код методу n. При виклику методу на місці параметра, переданого за значенням, може знаходитися вираз (А також його окремі випадки - змінна або константа). n. Має існувати неявне перетворення типу виразу до типу параметра.
Передача аргументу по посиланню (ref, out) адреса аргументу аргумент область параметрів код методу При виклику методу на місці параметра-посилання ref може знаходитися тільки ім'я ініціалізованої змінної точно такого ж типу. Перед ім'ям параметра вказується ключове слово ref. n При виклику методу на місці вихідного параметра out може знаходитися тільки ім'я змінної точно такого ж типу. Її ініціалізація непотрібна. Перед ім'ям параметра вказується ключове слово out. n
Типи параметрів В С# чотири типи параметрів: • параметри-значення - для вихідних даних методу; • параметри-посилання (ref)- для зміни аргументу; • вихідні параметри (out) - для формування аргументу; • параметри-масиви (params) - для змінної кількості аргументів. Приклад: public int Calculate (int a, ref int b, out int c, params int [] d) {. . . параметрзначення параметрпосилання вихідний параметрмасив
Приклад: параметри-значення і посилання ref using System; namespace Console. Application 1 {Class 1 { static void P(int a, ref int b) { a = 44; b = 33; Console. Write. Line ("всередині методу {0} {1} ", a, b); } static void Main () { int a = 2, b = 4; Console. Write. Line ("до виклику {0} {1} ", a, b); P (a, ref b); Console. Write. Line ("після виклику {0} {1} ", a, b); }}} Результат роботи програми: до виклику 2 4 всередині методу 44 33 після виклику 2 33
Приклад: вихідні параметри out using System; namespace Console. Application 1 {class Class 1 { static void P(int x, out int y ) { x = 44; y = 33; Console. Write. Line ("всередині методу {0} {1} ", x, y); } static void Main () { int a = 2, b; / / ініціалізація b не вимагається }}} P(A, out b); Console. Write. Line ("після виклику {0} {1} ", a, b); Результат роботи програми: всередині методу 44 33 після виклику 2 33
Підсумки: Правила застосування параметрів 1. Для параметрів-значень використовується передача за значенням. Цей спосіб застосовується для вихідних даних методу. • При виклику методу на місці параметра, переданого за значенням, може знаходитися вираз (а також його окремі випадки - змінна або константа). Має існувати неявне перетворення типу виразу до типу параметра. 2. Параметри-посилання і вихідні параметри передаються за адресою. Цей спосіб застосовується для передачі результатів методу. • При виклику методу на місці параметра-посилання ref може знаходитися тільки ім'я ініціалізованої змінної точно такого ж типу. Перед ім'ям параметра вказується ключове слово ref. • При виклику методу на місці вихідного параметра out може знаходитися тільки ім'я змінної точно такого ж типу. Її ініціалізація не потрібна. Перед ім'ям параметра вказується ключове слово out.
Методи зі змінною кількістю аргументів class Class 1 { public static double Average(params int [] a ) { if (a. Length == 0) throw new Exception("Недостатньо аргументів"); double sum = 0; foreach (int elem in a) sum + = elem; return sum / a. Length; Результат: } 20 static void Main () {Try { int [] a = {10, 20, 30}; 10 Console. Write. Line ( Average(A)); / / 1 38 int [] b = {-11, -4, 12, 14, 32, -1, 28}; Недостатньо аргументів Console. Write. Line ( Average(B)); / / 2 short z = 1, e = 13; byte v = 100; Console. Write. Line ( Average(Z, e, v)); / / 3 Console. Write. Line ( Average()); //4 } catch (Exception e) {Console. Write. Line (e. Message); return; } }}
1. 2. 3. 4. 5. 6. Основні поняття ООП. Поняття класу. Поля класу. Методи. Конструктори. Властивості.
Ключове слово this • Для забезпечення роботи методу з полями того об'єкта, для якого він був викликаний, в метод автоматично передається прихований параметр this, в якому зберігається посилання на об'єкт, який викликав функцію. Код: Метод Main: Employee a = new. . . Employee b = new. . . a. Passport () b. Passport () this. a Метод Passport: Висновок полів this. name this. surname this. payment Об’єкт а: this. name this. surname this. payment this. b Об’єкт b: this. name this. surname this. payment
Використання явного this У явному вигляді параметр this застосовується: 1) щоб повернути з методу посилання на об'єкт, який викликав метод: class Demo {Double y; public Demo T() {Return this; } / / 2) для ідентифікації поля, якщо його ім'я збігається з // ім'ям параметра методу: public void Sety (double y) {this. y = y; } }
Конструктори Конструктор призначений для ініціалізації об'єкту. Він викликається автоматично при створенні об'єкта класу за допомогою операції new. Ім'я конструктора збігається з ім'ям класу. Властивості конструкторів: • Конструктор не повертає значення, навіть типу void. • Клас може мати кілька конструкторів з різними параметрами для різних видів ініціалізації. • Якщо програміст не вказав жодного конструктора або якісь поля не були ініціалізований, полям значущих типів присвоюється нуль, полям посилальних типів - значення null. • Конструктор, що викликається без параметрів, називається конструктором за замовчуванням.
Приклад класу з конструктором class Demo { public Demo (int a, double y ) / / конструктор { this. a = a; this. y = y; } int a; double y; } class Class 1 {static void Main () { Demo a = new Demo (300, 0. 002); / / виклик конструктора Demo b = new Demo(1, 5. 71); / / виклик конструктора. . . }}
Приклад класу з двома конструкторами class Demo { public Demo (int a) / / конструктор 1 { this. a = a; this. y = 0. 002; } public Demo (double y) / / конструктор 2 { this. a = 1; this. y = y; }. . . Demo x =new Demo(300); / / виклик конструктора 1 Demo y = new Demo(5. 71); / / виклик конструктора 2
1. 2. 3. 4. 5. 6. Основні поняття ООП. Поняття класу. Поля класу. Методи. Конструктори. Властивості.
Властивості • Властивості використовуються для організації доступу до полів класу. Як правило, властивість визначає методи доступу до закритого поля. • Властивості забезпечують поділ між внутрішнім станом об'єкта і його інтерфейсом. • Синтаксис властивості: [специфікатори] тип імя_властивості { [get код_доступа] [set код_доступа] } При зверненні до властивості автоматично викликаються зазначені в ньому блоки читання (get) й установки (set). • Може бути відсутньою або частина get, або set, але не обидві одночасно. Якщо відсутня частина set, властивість доступна тільки для читання (read-only), Якщо відсутнє get - тільки для запису (write-only).
Приклад опису властивостей public class Button: Control {private string caption; / / Поле, з яким пов'язано властивість public string Caption { get { return caption; } set / / властивість / / Спосіб отримання властивості / / Спосіб установки властивості { if (caption! = value) {Caption = value; } }}. . . У програмі властивість виглядає як поле класу: Button ok = new Button (); ok. Caption = "OK"; / / викликається метод установки властивості string s = ok. Caption; / / викликається метод отримання властивості
Приклад опису властивостей namespace Console. Application 1 {class Ball { public Ball (double radius, double density) {this. radius = radius; this. density = density; } class Program public double Mass { static void Main (string [] args) { get {return radius * density; }} { public double Diameter Ball ball = new Ball (10, 6. 2); { get {return radius * 2; }} Console. Write. Line("Діаметр: "+ ball. Diameter + double radius; double density; } "Маса: "+ Ball. Mass); }}
Перевантаження методів • Використання декількох методів з одним і тим же ім’ям, але різними типами параметрів називається перевантаження методів. • Компілятор визначає, який саме метод потрібно викликати, за типом фактичних параметрів. Це називається розширенням (resolution) переваетаження. // Повертає найбільше з двох цілих: int max( int a, int b ) // Повертає найбільше з трьох цілих: int max( int a, int b, int c ) // Повертає найбільшее з першого параметра // и довжини другого: int max ( int a, string b ). . . Console. Write. Line( max( 1, 2 ) ); Console. Write. Line( max( 1, 2, 3 ) ); Console. Write. Line( max( 1, "2" ) ); • Перевантаження методів є проявом поліморфізму
OOP.pptx