logo
Ответы на вступительный экзамен Специалист_

Дати оцінку методам створення додатків у Flash.

Хоча ECMAScript бракує деяких функцій мови програмування для масштабного програмування, він все-таки досить потужний, щоб виконувати досить серйозні обчислення. Це означає, що Flash можна використовувати не тільки як засіб анімації із частин інтерактивності, але і як засіб розробки додатків, користувальницький інтерфейс яких створюється за допомогою графічних і анімаційних можливостей Flash. Для ілюстрації даного підходу до розробки приведемо відносно простий приклад.

Допустимо, необхідно створити калькулятор для розрахунку платежів по позичці, що дозволяє користувачеві ввести суму кредиту, використовуючи поле числових клавіш, а потім вибрати строк погашення позики. Після цього калькулятор розраховує щомісячний платіж. Інтерфейс цього калькулятора показаний на мал. 16.12. Оскільки він створювався в Flash, він не обмежується стандартними елементами користувальницького інтерфейсу. Тут ми створили своєрідний каліграфічний стиль для поля клавіш і використовували додатковий шрифт для дисплея.

Даний ролик складається всього із двох кадрів: сцена першого показана на рис. 16.12 (тут уводяться дані), а в іншому кадрі зображений калькулятор після розрахунків з відображеним результатом. Щоб ввести дані, користувач натискає на числах, як при використанні звичайного калькулятора.

Кожна кнопка фактично є екземпляром символу кнопки. (Числові мітки розташовані на рівні, поміщеному вище кнопок.) З першою кнопкою зв'язується наступний сценарій:

var amount = 0, period = 0 ;

stop();

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

on (release) {

amount = 10*amount + 7;

}

Сценарії кнопок відрізняються тільки цифрами, що додаються в кінець величини (крім кнопки 0, сценарій для якої очевидним образом оптимізований). Аналогічно сценарії, пов'язані з кожної із трьох кнопок для вибору строку кредиту, дуже схожі між собою. Наприклад, кнопка, що відповідає 36 місяцям, має наступний сценарій:

on (release) {

period = 36;

gotoAntStop ("Calculate");

}

Сценарії інших кнопок вибору просто привласнюють інше значення змінної period. Таким чином, строк кредиту встановлюється рівним мітці кнопки, і головка зчитування переходить на наступний кадр (що містить мітку "Calculate").

Коли користувач вибирає величину позики, клацаючи на кнопках, можна забезпечити зворотний зв'язок, відобразивши поточне значення. Це легко зробити, додавши до калькулятора динамічне текстове поле, що створюється подібно іншим текстовим полям, використовуваним у текстових інструментах. Обиране поле можна визначити як динамічний текст, використовуючи спливаюче меню в інспекторі властивостей (мал. 16.13). Після цього з'являється поле з міткою Var; у нього варто ввести ім'я змінної. При зчитуванні кліпу поточне значення цієї змінної буде перетворено в рядок, якщо це необхідно, і відображено в текстовому полі. Таким чином, необхідний зворотний зв'язок забезпечується, якщо просто зробити amount змінної, співвіднесеної з текстовим полем описаної вище клавіатури.

Рис. 16.13. Створення динамічного текстового поля

Сценарій, зв'язаний із другим кадром, розраховує повну суму, яку потрібно повернути, використовуючи сумарний відсоток, розрахований щомісячно. Інакше кажучи, ми виходимо із припущення, що сума кредиту втримується весь строк, і знаходимо загальну суму повернення, щомісяця додаючи відсоток за користування кредитом при фіксованій щомісячній ставці. Потім ми ділимо цю загальну суму на кількість місяців, знаходячи суму щомісячного платежу. (Слід зазначити, що даний приклад не варто використовувати для прийняття фінансових рішень. Відсоток за користування кредитом можна розраховувати по-різному, і ми не претендуємо на розуміння всіх тонкостей банківської справи.) Існує проста формула для цього розрахунку, але, оскільки ми використовуємо комп'ютер, а не логарифмічну лінійку, розрахувати величину можна "у лоб" за допомогою циклу, що щомісяця додає набіглі відсотки. Нам необхідно знати, скільки відсотків нагромадилося за місяць. Як значення змінної процентної ставки в код було введено невірне помірне (на слух) значення – три четвертих відсотки на місяць, причому передбачалося, що ставка міняється відносно рідко. (Кращий підхід - одержувати поточну ставку динамічно. Це легко зробити, але з міркувань економії місця ми не будемо приводити відповідний код ActionScript.)

var rate = 0.0075;

Основою розрахунку є цикл For. Перед ним потрібно ініціалізувати змінну, котра буде містити загальну суму після нарахування відсотків:

var total = amount;

Перефразуємо дану ініціалізацію: усе, що в нас є спочатку (по закінченні нуля місяців), - вихідна зайнята сума.

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

for (var t = 0; t < period; ++t);

total = total *(1+rate);

Після виходу із циклу можна знайти загальну суму щомісячного платежу, розділивши загальну суму боргу на весь період у місяцях: repayment = total / period;

Залишилося тільки порадувати користувача. Якщо підійти до питання наївно, буде створене динамічне текстове поле, співвіднесене зі змінної message, що буде привласнюватися підходяще значення, що відповідає розрахованій сумі:

message = period + "платежу по &" + repayment;

На жаль, якщо поступити так, вихід буде виглядати в такий спосіб: 24 платежи по £ 249.252818623463

Платіж повинен бути сумою у фунтах і пенсах, тобто значення repayment потрібно округлити до двох десяткових знаків. Це зроблено в наступному коді (якщо ви не розумієте, як він працює, просто прийміть на віру; арифметичні деталі для нас не важливі):

var i = String(Math.floor(repayment));

var f = Math.round( (100* repayment)%100);

f = f < 10? "0" + f:String(f);

repayment = i + "." + f ;

З такою модифікацією ролик дає тепер прийнятний вихід: 24 платежи по £249.25

У такому виді даний додаток має кілька серйозних недоліків: користувач, наприклад, не може виправити помилки або почати спочатку. Однак на його прикладі можна переконатися, що створення додатків за допомогою Flash за підтримкою ActionScript як засобу обчислень є життєздатною альтернативою традиційній розробці програмного забезпечення, принаймні в деяких додатках. Оскільки Flash може оголошуватися із сервером і розбирати XML-дані, такий же підхід можна використовувати для створення клієнтських компонентів серйозних Web-додатків.