Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2010
Тип роботи:
Лекція
Предмет:
Об’єктно-орієнтоване програмування

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти та науки України НУ „Львівська політехніка” Лекція №4 з курсу: «Застосування засобів об’єктно-орієнтованого програмування в лінгвістичних задачах» Львів - 2010 4.2. Що таке метод? Методи (Method) класу (процедури і функції, оголошення яких включено в опис класу) виконання деяких дій над об’єктами класу (то есть характеризує поведінку об’єтів). Для того щоб метод був виконаний, необхідно вказати імена об’єкту і методу, відокремивши одно ім’я від іншого точкою. Наприклад, інструкція boss.ShowInfo; викликають застосування метода ShowInfo до объекта boss. Фактично інструкція застосування методу до об’єкту - це специфічний спосіб запису інструкції виклику процедури. Методи класу визначаються в програмі так само, як і звичайні процедури і функції, за виключенням того, що ім’я процедури або функції, що є методом, складаються з двох частин: імені класу, якому належить метод, і імені метода. Ім’я класу від імені метода відокремлюється точкою. Нижче в лістінгу 4.2 наведений приклад визначення метода showinfo класу TPersonal. Лістінг 4.2. Метод showinfo класса TPersonal procedure TPersonal.showinfo; begin // Вивід на екран даних про співробітника. Messagebox.Show(fname+' '+fage.toString); end; Як видно з лістінга 4.2, в інструкціях метода доступ до полів об’єкта здійснюється без вказання імені об’єкта. Далі наведений приклад програми (лістінг 4.3), в якому оголошується клас TPersonal, над об’єктом якого (boss) виконуєть різні дії. Лістінг 4.3 Приклад програми, що демонструє створення і використання класу unit WinForm; interface uses System.Drawing, System.Collections, System.ComponentModel, System.Windows.Forms, System.Data; type TWinForm = class(System.Windows.Forms.Form) {$REGION 'Designer Managed Code1} strict private Components: System.ComponentModel.Container; Butstonl: System.Windows.Forms.Button; procedure InitializeComponent; procedure Buttonl_Click(sender: System.Object; e: System.EventArgs); {$ENDREGION} strict protected procedure Dispose(Disposing: Boolean); override; private { Private Declarations } public constructor Create; end; // Оголошення класу. TPersonal = class private fname: string[30]; //Це поле класу – ім’я співробітника. fAge: byte; // Це поле класу - вік співробітника. public constructor Create; // Конструктор - створення нового об’єкту // (екземпляр класу). procedure showinfo; // Цей метод класу - показує // інформацію про співробітника. end; [assembly: RuntimeRequiredAttribute(TypeOf(TWinForm))] implementation {$AUTOBOX ON} {$REGION 'Windows Form Designer generated code1} procedure TWinForm.Dispose(Disposing: Boolean); begin if Disposing then begin if Components <> nil then Components.Dispose(); end; inherited Dispose(Disposing); end; constructor TWinForm.Create; // Конструктор для форми. begin inherited Create; InitializeComponent; end; // Процедура обробки подій Click на кнопці Button1. procedure TWinForm.Button1Click(sender: System.Object; e: System.EventArgs); var worker:TPersonal; begin // Створення нового об’єкта. worker:=TPersonal.Create; // Застосування метода до об’єкта - вивід інформації про співробітника. Worker.ShowInfо; // На екрані повідомлення 'Новий співробітник О'. // Зміна значення полів об’єкта worker.fname:='Шупрута Володимир'; worker.fage:=25; //Застосування методу до об’єктау-вивід інформації про співробітника. worker.showinfо; // На екрані повідомлення 'Шупрута Володимир 25'. // Видалення об’єкт. worker.free; end; // Конструктор для класу TPersonal. // (Створити новий об’єкт з ім’ям 'Новий співробітник' і віком 0) constructor TPersonal.Create; begin inherited Create; fname:='Новий співробітник'; fage:=0; end; // Метод класу TPersonal - процедура показу даних про співробітника. procedure TPersonal.showinfо; begin Messagebox.Show(fname+' '+fage.toString); end; end. 4.3. Основні принципи об’єктно-орієнтованого програмування Ми познайомились з класами і об’єктами. Тепер розберемось з основними принципами ООП. Вся концепція ООП побудована на трьох принципах - інкапсуляції, спадкування і поліморфізм. Далі ми ознаймимося з цими принципами, пояснення яких побудовано на невеликому практичному прикладі. 4.3.1 Інкапсуляція і властивості об’єктів Інкапсуляція (Encapsulation) - це механізм, що об’єднує дані і методи їх обробки, а також захищає від зовнішнього втручання або неправильного використання. В об’єктно-орієнтованому програмуванні методи і дані можут бути об’єднанні разом; в цьому випадку кажуть, що створюється «чорна скриня». В середині об’єкта методи і дані можут бути закритими. Закриті методи або дані доступні тільки для інших частин цього об’єкта. Таким чином, закриті коди і дані недоступні для тих частин програми, які існують назовні об’єкта. Якщо методи і дані є відкритими, то, недивлячись на то що вони задані в середині об’єкта, вони доступні для інших частин програми. Характерною є ситуація, коли відкрита частина об’єкта використовується для того, щоб забезпечити контролируємий інтерфейс закритих елементів об’єкта. В мові Delphi обмеження доступу до полів об’єкта реалізуєтся за допомогою властивостей об’єкта. Властивість (Property) об’єкта - характеристика об’єкта, яка визначається полем, що зберігає значення властивості, і двома методами, що забезпечують доступ до поля властивості. Метод встановлення значення властивості називаеться методом запису властивості (write), а метод отримання значення властивості - методом читання властивості (read). В описі класу перед ім’ям властивості записують слово property (властивість). Після імені властивості вказується його тип, потім - імена методів, що забезпечують доступ до значення властивості. Після слова read вказується ім’я метода, що забезпечує читання властивості, після слова write – ім’я метода, що відповідає за запис властивості. Якщо не треба обрабки при запису або читанні властивостей, то можна вказувати ім’я поля після ключевих слів write і read. Нижче в лістінгу 4.4 наведений приклад опису класа TPersonal, що містить дві властивості: Name і Age. Лістінг 4.4 Приклад опису класа, що містить властивості Name и Age // Оголошення класу. TPersonal = class type TName = string [30] ; TAge = byte ; private fname:TName; // Значення властивості Name – ім’я співробітника. fage:TAge; // Значенння властивості Age - вік співробітника. function GetName:TName; function Getage:TAge; procedure SetAge(new_age:TAge); public // Конструктор - створення нового об’єкта(екземпляра класу). constructor Create(Name:TName;Age:TAge); procedure showinfo; //Це метод класу - показує інформацію // про співробітника. // Властивість об’єкта property Name:Tname // Властивість тільки для читання. read GetName; property Age:Tage // Властивість для читання і запису. read GetAge write SetAge; end ; Зовнішне застосування властивостей в програмі нічим не відрізняється від використання полів об’єкта. Однак між властивостями і полями об’єкта існує принципова відмінність: при присвоєнні і читанні значення властивості автоматично викликається процедура (функція), яка виконує деяку роботу. Наприклад, інструкція worker.Age:=25; насправді буде перетворена компілятором в інструкцію виду: worker.SetAge(25) ; В програмі, на методи властивості можно покласти деякі додаткові задачі. Наприклад, за допомогою метода можна перевірити коректність значень що присвоюється властивості, встановити значення інших полів, що логічно зв’язані з властивістю, викликати додаткову процедуру і т.п. Оформлення даних об’єта як властивості дозволяє обмежити доступ до полів, що зберігає значення властивостей об’єкта, наприклад можна дозволити тільки читання. Для того щоб інструкції програми не могли змінити значення властивості, в описі властивості треба вказати лише ім’я метода читання. Спроба присвоїти значення властивості, що призначенна тільки для читання, викликає помилку часу компіляції. В наведеному вишче описі класу TPersonal властивість Name доступно тільки для читання, а властивість Age - для читання і запису. Встановити значенння властивості, захищеного від запису, можно під час ініціалізації об’єкта (під час виклику конструктора). Повний текст програми (з описом конструктора, процедур і функцій) наведений в лістінгу 4.6. Лістінг 4.51 Приклад програми, що демонструє створення і використання класу з описом властивостей 1 Шупрута В.В. Delphi 2005. Учимся програмировать. Стр. 156 unit WinForm; interface uses System.Drawing, System.Collections, System.ComponentModel, System.Windows.Forms, System.Data; type TWinForm = class (System. Windows. Forms .Form) {$REGION 'Designer Managed Code'} strict private Components: System.ComponentModel.Container; Button1: System.Windows.Forms.Button; procedure InitializeComponent; procedure Button1_Click(sender: System.Object; e: System.EventArgs); {$ENDREGION} strict protected procedure Dispose(Disposing: Boolean); override; private { Private Declarations } public constructor Create; end; TPersonal = class// Оголошення класу TPersonal. . type TName = string[30]; TAge = byte; private fname:TName; // Значенння властивостей Name – ім’я співробітника. fage:TAge; // Значенння властивостей Age - вік співробітника. function GetName:TName; function GetAge:TAge; procedure SetAge(new_age:TAge); public // Конструктор - створення нового об’єкта(екземпляр класу). constructor Create(Name:TName;Age:TAge); procedure Showlnfo; // Це метод класу - показує інформацію // про співробітника. // Властивість об’єкта property Name:TName // Властивість тільки для читання. read GetName; property Age:TAge // Властивість для читання і запису. read GetAge write SetAge; end ; [assembly: RuntimeRequiredAttribute(TypeOf(TWinForm))] implementation {$AUTOBOX ON} {$REGION 'Windows Form Designer generated code1} procedure TWinForm.Dispose(Disposing: Boolean); begin if Disposing then begin if Components <> nil then Components.Dispose(); end; inherited Dispose(Disposing); end; // Конструктор для формы. constructor TWinForm.Create; begin inherited Create; InitializeComponent; end ; procedure TWinForm.Button1_Click(sender: System.Object; e: System^.EventArgs) ; var worker: TPersonal; begin // Створення нового об’єкта. worker:=TPersonal.Create('Шупрута Володимир',0); // Виклик метода об’єкта - вивід інформації про співробітника. function GetName:TName; function GetAge:TAge; procedure SetAge(new_age:TAge); public // Конструктор – створення нового об’єкта(екземпляра класу). constructor Create(Name:TName;Age:TAge); procedure Showlnfo; // Це метод класу - показує інформацію про //співробітника. // Властивість об’єкта property Name:TName // Властивість тільки для читання. read GetName; property Age:TAge // Властивість для читання і запису. read GetAge write SetAge; end ; [assembly: RuntimeRequiredAttribute(TypeOf(TWinForm))] implementation {$AUTOBOX ON} {$REGION 'Windows Form Designer generated code1} procedure TWinForm.Dispose(Disposing: Boolean); begin if Disposing then begin if Components <> nil then Components.Dispose(); end; inherited Dispose(Disposing); end; constructor TWinForm.Create; // Конструктор для форми. begin inherited Create; InitializeComponent; end ; procedure TWinForm.Button1_Click(sender: System.Object; e: System^.EventArgs) ; var worker: TPersonal; begin // Створення нового об’єкта. worker:=TPersonal.Create('Шупрута Володимир',0); // Виклик методу об’єкта - вивід інформації про співробітника. worker.showinfо; // На екрані повідомлення 'Шупрута Володимир '. // Зміна властивості об’єкта. worker.age:=25; // Виклик методу об’єкта - вивід інформації про співробітника worker.showinfо; // На екрані повідомлення 'Шупрута Володимир 25'. // Уничтожаем объект. worker.free; end; // Конструктор для класу TPersonal. // При виклику створюється новий об’єкт з ім’ям Name і віком Age. constructor TPersonal.Create(Name:TName;Age:TAge); begin inherited Create; fname:=Name; fage:=Age; end; // Метод отримання значення властивості Name. function TPersonal.GetName; begin result:=fname; end; // Метод отримання значення властивості Age. function TPersonal.GetAge; begin result:=fage; end; // Метод запису значення властивості Age. procedure TPersonal.SetAge(new_age:TAge); begin // Приклад обробки значення на запис. // Якщо значення, що присвоюється властивості, <20, то // влістивість не змінює свого значення. if new_age<20 then exit else fage:=new_age; end; // Метод класу TPersonal - процедура показу даних про співробітника. procedure TPersonal.Showinfо; begin messagebox.Show(Name+' '+Age.Tostring); end; end. Питання: Література: 1. Архангельский А.Я. Программирование в Delphi. Учебник по классическим версиям Delphi. 2006 г. - 1152 с. 2. Архангельский А.Я. Delphi 2006. Справочное пособие: язык Delphi, классы, функции Win32 и .NET, 2006 г. - 1152 с. 3. Архангельский А.Я. Приемы программирования в Delphi на основе VCL, 2006 г. - 944 с. 4. Архангельский А.Я. Программирование в Delphi для Windows. Версии 2006, 2007, Turbo Delphi, 2007 г. - 1248 с. 5. Гофман В. Э., Хомоненко А. Д. Delphi. Быстрый старт. — СПб.: БХВ-Петербург, 2003. — 288 с: ил. 6. Шупрута В.В. Delphi 2005. Учимся програмировать.
Антиботан аватар за замовчуванням

17.02.2013 23:02-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!