Розробка уроку

Тема: елементи мови JavaScript для подійно-орієнтованого програмування.

Мета: всебічно ознайомитися із елементами мови JavaScript для подійно-орієнтованого програмування.

Після вивчення матеріалу учень повинен:

Обладнання: комп’ютери зі встановленими ОС, текстовий редактор, під'єднані до мережі Інтернет, (дана) інструкція.

Структура уроку

  1. Організаційний момент.
  2. Актуалізація опорних знань.
  3. Вивчення нового матеріалу.
  4. Закріплення вивченого матеріалу.
  5. Підведення підсумків уроку.
  6. Домашнє завдання.

Хід уроку

1. Організаційний момент
Привітання з учнями. Перевірка присутності і готовності учнів до уроку. Перевірка виконання домашнього завдання. Оголошення теми й мети уроку.

2. Актуалізація опорних знань
Дати означення понять, виділені жирним шрифтом.

Об'єкт (від латинською objectum — предмет, явище) — це те, на що спрямована певна діяльність (на противагу суб'єкту, який здійснює таку діяльність).

Ми живемо в оточенні величезної кількості різноманітних об'єктів. Будь-яка інформація, яку ми отримуємо, пов'язана з певними об'єктами. Об'єктами є не лише предмети чи явища матеріального світу, але й поняття, які створюють і використовують люди під час спілкування. Наприклад «освіта», «держава» тощо. Кожний об'єкт має свою назву: «м'яч», «годинник», «чашка», «книга». Крім назви кожний об'єкт має низку властивостей (параметрів), значення яких повністю описує об'єкт. Наприклад, об'єкт «учень» має такі властивості (подано невичерпний перелік): вік, зріст, маса тіла, успішність з певного предмету тощо.

Властивості бувають:

Значення властивостей об'єкта у певний момент часу визначають його стан. Вони можуть змінюватися, але їхня сукупність залишається сталою. Якщо така сукупність зазнає змін, то ми маємо справу вже з іншим об'єктом. Наприклад значення параметра «зріст» об'єкта «учень Сашко» може збільшуватися. Але якщо у нього зникла властивість «успішність», то Сашко завершив навчання.

Дії можуть виконувати власне об'єкти або їх виконують над об'єктами. Наприклад, об'єкт «учень» може виконувати такі дії: читати, грати у футбол, розв'язувати задачу з фізики. У свою чергу, над цим об'єктом можна виконувати певні дії: вимірювати зріст, проводити виховну бесіду тощо.

Подіязміна властивостей об'єкта, взаємодія між об'єктами, утворення нового об'єкта або знищення наявного об'єкта.

Середовище об'єктасередовище, у якому перебуває об'єкт, незалежно від того, які дії ним чи над ним (крім знищення об'єкта) виконано.

Розглянемо об'єктно-орієнтований підхід до процесу створення й використання програмного забезпечення. Якщо створення програм — далеке й необов'язкове майбутнє учня, то їхнє використання — це сьогодення, якого не уникнути. Спочатку потрібно ознайомитися з деякими базовими поняттями.

Об'єктно-орієнтоване програмуванняце метод програмування, який розглядає програму як множину «об'єктів», що взаємодіють між собою. Інакше кажучи, у такому підході:

Фундаментальні поняття об'єктно-орієнтованого програмування:

Про мову JavaScript

Мова JavaScript є динамічно типізованою. JavaScript має низку властивостей об'єктно-орієнтованої мови, але завдяки концепції прототипів підтримка об'єктів в ній відрізняється від традиційних мов ООП. Крім того, JavaScript має ряд властивостей, притаманних функціональним мовам, що надають мові додаткову гнучкість: функції як об'єкти першого класу, об'єкти як списки, каррінг (currying — перетворення функції з множиною аргументів у набір вкладених функцій з одним аргументом), анонімні функції, замикання (closures — функції, що посилаються на незалежні (вільні) змінні. Інакше кажучи, функція, означенна в замиканні, «запам'ятовує» середовище, у якому її було створено).

Ключові властивості JavaScript

JavaScript містить декілька вбудованих об'єктів: Global, Object, Error, Function, Array, String, Boolean, Number, Math, Date, RegExp. Крім того, JavaScript містить набір вбудованих операцій, які, грубо кажучи, не обов'язково є функціями або методами, а також набір вбудованих операторів, що управляють логікою виконання програм.

AJAX (англійською Asynchronous JavaScript and XML — асинхронний JavaScript и XML) — термін, що описує «новий» подхід щодо інтегрованого використання наявних технологій для динамічного завантаження і вставлення даних у документ.

АJAX включає: HTML или XHTML, CSS, JavaScript, DOM, XML, XSLT, и объект XMLHttpRequest. При об'єднанні їх у модель AJAX, web-застосунки спроможні робити швидкі оновлення інтерфейса користувача без необхідності полного перезавантаження сторінки браузером. Застосунки швидше опрацьовують дії користувача.

3. Вивчення нового матеріалу

Подійно-орієнтоване програмування (англійською event-driven programming, далі ПОП) — підхід до програмування, в якому виконання програми визначається подіями — діями користувача (наприклад, з клавіатурою, мишею, джойстиком тощо), повідомленнями інших програм і потоків, подіями операційної системи (наприклад, надходженням мережевого пакета).

ПОП можна також визначити як спосіб побудови комп'ютерної програми, при якому в код описує отримання повідомлення про подію і опрацювання події.

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

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

Подія може мати необмежену кількість обробників. При додаванні обробника події його додають до спеціального стеку, а при виникненні події викликають всі обробники за їхнім порядком у стеці.

Подійно-орієнтоване програмування тісно повязане з поняттям подійно-орієнтованої архітектури, де визначено й саму подію.

Подійно-орієнтована архітектура (англійською Event-driven architecture, EDA) — шаблон архітектури програмного забезпечення, який призначено для створення подій, їх виявлення, споживання і реагування на них.

Розробка застосунків і систем в подійно-орієнтованій архітектурі дозволяє конструювати їх найефективнішим способом.

Подійно-орієнтована архітектура (EDA) може доповнювати сервісно-орієнтовану архітектуру (SOA), бо активування сервісів (служб) має викликатися настанням певних подій. Обчислювальна техніка та сенсорні пристрої (сенсори, датчики, контролери) можуть виявляти зміни стану об'єктів і створювати події, які потім можуть бути опрацьовані сервісом (службою) або системою.

Структура події. Подія може складатися з двох частин: заголовка події та тіла події.

Заголовок події може включати в себе назвe події, часова мітка події і тип події.

Тіло подіїце частина, яка описує факт, що стався в дійсності.

Генератор подій виявляє цей факт і подає його подією в рамках виконання програми. Генератором може бути клієнт електронної пошти, система електронної комерції або датчика.

Канал подійце механізм, через який повідомлення від генератора подій передають до обробника подій (event engine).

Каналом подій може бути з'єднання TCP/IP або вхідний файл будь-якого типу. В один і той самий час може бути відкрито кілька каналів подій, які потрібно зчитувати асинхронно і які зберігають у черзі очікування на опрацювання.

Механізм опрацювання подій (event processing engine) є місцем, де подію ідентифікують і вибирають відповідь на неї.

Події й опрацювання подій є істотньою частиною програмування мовою JavaScript. Події переважно спричиняються діями користувача. Програми опрацювання подій (обробники подій) описано далі таким чином (перелік не є вичерпним):

назва програми — подія — зміст події та зауваження щодо її опрацювання:

Програми опрацювання подій створює сам користувач, використовуючи подані назви й пояснення. Наприклад, опрацювавши згадану подію Click (клацання кнопкою) відповідною програмою onClick, можна створити випадне вікно, що містить лише повідомлення:

<form><input type="button" value="Приклад з alert"
onClick="alert('Бачиш, що вийшло?')"></form>

У поданому прикладі засобами HTML створено форму з кнопкою. Але є нововведення: onClick="alert('Бачиш, що вийшло?')" всередині <input>. Саме цей атрибут визначає відповідь на подію натискання на кнопку з написом "Натисни на мене". Такою відповіддю є виклик alert('Бачиш, що вийшло?'). Зауважимо, що у даному випадку навіть немає потреби використовувати тег <script>).

Функція alert() створює випадні вікна. Викликаючи її, потрібно задати у дужках рядок тексту. У поданому прикладі це 'Бачиш, що вийшло?'. Саме цей текст з'явиться у випадному вікні.

Зазвичай можна використовувати обидва типи лапок. Але у вказівці onClick="alert('Бачиш, що вийшло?')" використано обидва типи одночасно. Чому? При використанні лише одного типу лапок неможливо було б визначити, до якої з частин вказівки має відношення функція опрацювання подій onClick, а до якої — не має. Тому використання обох типів лапок у даному випадку вимушене. Не істотньо, у якому порядку використовувати лапки: одинарні всередині подвійних чи навпаки. Інакше кажучи, можна писати й так:

onClick='alert("Бачиш, що вийшло?")'

Наступний код створює випадне вікно, в яке можна ввести послідовність символів.

<form><input type="button" value="Приклад з prompt" 
  onClick="var str=prompt('Введіть хоча б один символ','Набирати тут');
  alert('Введено: '+str)">
</form>

У JavaScript підтримано опрацювання таких подій: Abort, Blur, Click, Change, DblClick, DragDrop, Error, Focus, KeyDown, KeyPress, KeyUp, Load, MouseDown, MouseMove, MouseOut, MouseOver, MouseUp, Move, Reset, Resize, Select, Submit, Unload.

Розглянемо, наприклад, опрацювання події Resize — зміни розміру вікна. Подану далі кнопку описано таким кодом.

<script language="JavaScript">
function WinOpen(url) {msg=open(url,"DisplayWindow","toolbar=yes,directories=no,menubar=yes,status=yes,resizable=yes");}
</script>

<form>
<input type=button
      value="Перевірте приклад використання Resize"
    onClick="WinOpen('resize.htm')">
</form>

Щоб ознайомитися з цим прикладом, достатньо натиснути кнопку і пере­глянути код сторінки у новоствореному вікні. У цьому коді вказівкою:

window.onresize = message;

задано процедуру опрацювання події: функцію message() буде викликано при кожній зміні вікна. Зробимо такі два зауваження:

Об'єкт Event містить властивості, що описують подію. Кожного разу, як трапляється будь-яка подія, об'єкт Event буде передано відповідній програмі опрацювання.

У наступному прикладі виведено деяке зображення у чорній рамці. Клацніть над ним клавішею миші. З'явиться вікно повідомлення з вказанням координат точки, де у цей момент знаходився вказівник миші:

Відповідна частина коду має такий вигляд.

<style type="text/css">
#kozak{margin:5px 0; position:relative; height:200px width:200px}
</style>
<div id="kozak">
 <a href="#" onClick="alert('(x; y) = (' + event.x + '; ' + event.layery+')'); return false;">
  <img src="kozak.jpg">
 </a>
</div>

Зауважимо: для створення вікна з повідомленням використано властивості event.x і event.y об'єкта Event. Усі вказівки розташовано у контейнері <div>. Завдяки цьому отримано координати відносно даного логічного блоку. У даному випадку — відносно зображення. Інакше буде виведено координати відносно вікна браузера. Вказівку return false; використано для того, щоб браузер опрацював далі дане посилання.

Об'єкт Event має такі властивості:

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

виконати усі вказівки на сторінках і переглянути коди усіх сторінок. У коді

<html>
<script language="JavaScript">
window.captureEvents(Event.CLICK);
window.onclick= handle;
function handle(e) { alert("Об'єкт window перехоплює цю подію!");
                     return true; // простежити посилання 
                   }
</script>
Клацніть по цьому < a href="test.htm">посиланню.</a>
Вікно закриєте після повернення.
</html>
не вказано програму опрацювання подій у тезі <a>. Замість цього записано
window.captureEvents(Event.CLICK);

для того, щоб перехопити подію Click об'єктом window. Зазвичай об'єект window не працює з подією Click. Але, перехопивши, можна її переадресувати в об'єкт window.

Якщо Ви бажаєте перехопити кілька подій, їхні записи потрібно відділяти символами |. Наприклад,

window.captureEvents(Event.CLICK | Event.MOVE);

В означенні функції handle(), що опрацьовує події, використано вказівку return true;. Це означає, що проглядач має опрацювати й саме посилання після того, як завершить виконання функції handle().

Наступний приклад показує, як можна опрацювати натискання клавіш клавіатури.

4. Інструктаж з ТБ
5. Закріплення вивченного матеріалу


Завдання. Створити сторінку html з формою, що містить два текстових поля, розташованих одне над іншим. При відповідних подіях у нижньому полі сторінка має виводити такі повідомлення:

Зберегти сторінку у файл з назвою Ваше прізвище.html у вказану вчителем теку. Порівняти створене з демонстраційним розв'язанням.

6. Підбиття підсумків уроку
Чи досягнуто мети уроку? Формулювання висновків з ключових питань уроку. Виставлення оцінок.

7. Домашнє завдання

  1. Повторити матеріал уроку. Підготуватися до опитування.

  2. Написати код, що у текстове поле виводитиме координати вказівника миші відносно блока в момент руху курсора всередині блока. Текстове поле розташувати нижче блока.


Текст упорядкував Сугак Володимир Олександрович, вчитель інформатики гімназії № 283 ІІ–ІІІ ступенів Деснянського району міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 22.10.2018 по 26.10.2018.

У роботі використано матеріали, опубліковані на сайтах kievoit.ippo.kubg.edu.ua і Вільної енциклопедії.