Тема: поняття об'єкта у мові програмування, його властивостей і методів. Створення програми, її виконання та налагодження у Ruby.
Мета:
По завершенню вивчення учень
Обладнання: ПК із встановленими ОС, текстовим редактором (бажано з підсвіткою службових слів, наприклад, Sublime Text 3), інтерпретатором мови програмування Ruby або стійким сполученням з мережею Інтенет для використання інтерпретаторів Ruby в режимі online, (дана) інструкція.
Структура уроку
Хід уроку
1. Організаційний момент
Вітання з класом. Перевірка присутності і готовності учнів до уроку. Перевірка виконання домашнього завдання.
2. Актуалізація опорних знань
Завдання. Назвати поняття, виділені жирним шрифтом, і порівняти з поданим описом у тексті щодо об'єктно-орієнтованого програмування (ООП).
3. Вивчення нового матеріалу
Ruby — це інтерпретована мова високого рівня для швидкого і зручного об’єктно-орієнтованого програмування.
Інтерпретована мова програмування — мова програмування, в якій код програми не перетворюють попередньо повністю у машинний код для виконання (на відміну від компільованих мов), а виконують рядок за рядком з допомогою спеціальної програми-інтерпретатора.
Програмний код, код програми, текст програми — запис опису змінних і сталих, приєдниних бібліотек, вказівок до виконання мовою програмування.
Програма, написана з дотриманням парадигми об'єктно-орієнтованого програмування, має містити класи, об'єкти й опис взаємодій об'єктів між собою, в результаті яких змінюються їхні властивості. Об'єкт в програмі можна створити лише на основі якого-небудь класу. Тому об'єктно-орієнтована програма має починатися з проектування і створення класів. Опис класів можна або розташувати на початку коду програми, або імпортувати з інших файлів, у яких такий опис також потрібно розташувати на початку коду.
Ruby — мова сценаріїв, які складаються з операторів, призначених для виконання. Ці оператори виконують послідовно, у порядку їх виявлення. Коли інтерпретатор отримує визначення (опис) класу, він виконує цей оператор створення нового класу. Отримавши визначення методу, інтепретатор визначає новий метод. Пізніше, при виконанні програми, інтерпретатор, напевно, зустріне виклик цього методу. Цей виклик призведе до виконання операторів, що входять у тіло методу.
Виклик інтерпретатора Ruby можна здійснити з командного рядка (консолі, термінала), вказавши сценарій, призначений для виконання.
Наприклад: c:\>ruby d:\1.rb на ПК під керуванням ОС MS Windows.
Код програми можна створити у середовищі довільного текстового редактора. Для зручності роботи користувача створюють інтерактивне інтегроване середовище програмування, у якому об'єднано можливості:
текстового редактора — для набирання текстів програм;
інтепретатора — для виконання програми і виявлення помилок;
налагоджувача — для виконання програм і виявлення алгоритмічних помилок.
Інтерактивним середовище називають тому, що воно працює в режимі постійного спілкування з користувачем, а інтегрованим тому, що об'єднує в собі одночасно всі згадані вище можливості.
Наразі є навіть безкоштовні online середовища програмування, що не вимагають встановлення програмного забезпечення безпосередньо на комп'ютер користувача. Наприклад, Coding Ground, яке надає можливість працювати з файлами.
Створення класів мовою Ruby здійснюють описують таким чином:
class Назва_класу #тіло_класу end
Тут назва класу — це глобальна стала, запис якої потрібно розпочати з великої літери і продовжувати довільною комбінацією літер латиниці, цифр і символу підкреслення. Рекомендують використовувати осмислені назви класів. Якщо назва складається з кількох слів, то для їхнього поділу рекомендують використовувати символ підкреслення або кожне слово писати з великої літери.
Тіло класу може містити сталі й змінні класу, методи класу, змінні й методи представника (екземпляра):
Сталі стужать для зберігання незмінюваних даних, спільних для всього класу.
Змінні визначають у тілі класу. Їх використовують для зберігання змінюваних даних: стану класу і його представників. Змінні можуть існувати в двох різних областях видимості: області видимості класу і області видимості екземпляра класу.
Змінна класу — це змінна, оголошена в області видимості класу. Її можна оголосити в довільному місці тіла класу. У тому числі у тілі методу. Назву такої змінної починають з двох символів «@@». Кожна така змінна є посиланням на один і той самий об'єкт для всіх його екземплярів. Як правило змінну класу ініціалізують у тілі класу, а використовують у тілі його методів. Використання неіснуючої змінної класу вважають помилкою.
Змінна представника (екземпляра) — поле об’єкта класу — це змінна, оголошена в області видимості екземплярів класу. Її можна оголосити у тілі метода екземпляру. Назву такої змінної розпочинають з символу «@». Таку змінну можна використати у тілі будь-якого методу екземпляра. Вона посилається на різні об'єкти для різних представників. Як правило змінні екземпляра ініціалізують у тілі методу в момент його виклику. Використання неіснуючої змінної екземпляра вважають її оголошенням.
Локальна змінна — це змінна, описана у методі класу і недосяжна за його межами.
Глобальна змінна — це змінна, доступ до яких є у всіх класів. Назву такої змінної розпочинають з символа «$».
Методи — це абстрактна сутність, що визначає дії, які може виконувати об'єкт або які можна виконувати з самим об'єктом (змінювати його стан). З точки зору синтаксису, метод — це фрагмент коду з назвою, що описує виконання певних дій.
Метод класу — це метод, що визначає поведінку класу. Його описують таким чином:
def НазваКласу.назва_методу (параметри) #тіло_метода end
Метод представника (екземпляра) класу — це метод, що визначає поведінку екземпляру класу. Його описують у тілі класу таким чином:
def назва_методу (параметри) #тіло_методу end
На назви методів поширюють ті самі правила, що й на наазви класів, але розпочинають їх з малої літери. Параметри можуть бути відсутні.
Тіло методу — фрагмент коду, виконуваний у момент виклику методу.
Кожний метод пов'язано з тим об'єктом, для якого він визначений. Метод не можна використовувати без посилання на відповідний об'єкт. Найпростіший спосіб такого виклику виглядає таким чином:
назва_об'єкта.назва_методу
Об'єкт має існувати на час виклику методу. Тіло методу використовує область видимості об'єкта. У ній доступні оголошені параметри і змінні представника класу. У тілі методу екземпляра можна при необхідності використовувати псевдозмінну self — посилання на об'єкт, для якого метод було викликано.
Створення класу здійснюють у процесі його оголошення (опису).
Cтворення представника класу здійснюють вбудований метод класу new:
назва_змінної = НазваКласу.new
Таким чином виникає об'єкт, доступ до якого можна отримати через назву змінної, пов'язаної з ним. Кількість об'єктів, які можна створити на основі одного й того самого класу, не обмежено.
Приклад 1. Розглянемо програму, в якій:
class Animal def breath puts "Вдихнули й видихнули" end end dog = Animal.new cat = Animal.new dog.breath cat.breathМаємо такий результат виконання:
Вдихнули й видихнули Вдихнули й видихнули
Метод new викликає метод initialize, який ініціалізує властивості об'єкта, після чого new повертає посилання на новий об'єкт. Якщо потрібно втрутитися у процес ініціалізації нового представника класу й передати йому аргументи, необхідно власноруч описати метод initalize — конструктор класу.
Приклад 2. Розглянемо програму, в якій:
class Person def initialize (name, age) @name = name @age = age end def exec print @name," має ",@age," років" end end p1 = Person.new("Олесь",13) p1.exec
Маємо такий результат виконання:
Олесь має 13 років
В об'єктно-орієнтованих мовах часто створюють методи для доступу до властивостей об'єктів ззовні. Можна запрограмувати такі методи «власноруч» — див. приклад:
class Person def initialize (name, age) @name = name @age = age end def nameout @name # повернути значення змінної end def namein(x) @name = x # надати значення, отримане ззовні end end p1 = Person.new("Олесь",13) print p1.nameout p1.namein('Микола') print ' ',p1.nameoutМаємо такий результат виконання:
Олесь Микола
Ruby надає можливість використати методи:
Наприклад:
class Person attr_reader :name, :age # створено @name, name, @age, age attr_writer :name, :age # створено @name, name=, @age, age= attr_accesor :name, :age # створено @name, name, name=, @age, age, age= endПриклад 3. Програма:
class Person attr_accessor :name, :age end p1 = Person.new p1.name="Олена" p1.age=34 puts p1.age puts p1.nameмає такий результат виконання:
34 Олена
4. Інструктаж з ТБ
5. Закріплення вивченого матеріалу
Завдання 1. Перевірити коректність виконання програм, поданих у прикладах 1, 2 і 3. Для цього виконати такі дії:
Вносячи допустимі зміни у код (інші значення, інші властивості) пересвідчитися у коректності роботи програми.
Примітка Вказання типу rb при записі файлу призводить до підсвічування службових слів мови Ruby.
Завдання 2. Написати код програми, у якій:
передбачити заповнення полів у конструкторі класу;
порівняти текст програми з демонстраційним розв'язанням.
6. Підбиття підсумків уроку
Виставлення оцінок.
7. Домашнє завдання
Написати код мовою Ruby, у якому cтворити клас User з властивостями login, password, e-mail, rating. Як усталено значення рейтингу встановити нульовим.
Текст упорядкувала Оніщенко Лариса Іванівна, учитель гімназії №59 імені О. М.Бойченка Голосіївського району міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 17.10.2017 по 20.10.2017.
У роботі використано матеріали, упорядковані учителями: