Створення додатка перекладу в Visual C # (Sharp)

Подібно додатком Калькулятор в попередньому розділі, додаток перекладу ставляется з декількох компонентів: бібліотеки класу, яка виконує певод на основі даних, доставлених користувача інтерфейсом, компонеа тестування і користувальницького інтерфейсу Окремі компоненти рішення подібні до частин мозаїки, які разом складають малюнок

ПРИМІТКА

Компоненти є основною частиною вашого набору інструментів розробника Як ми побачимо протягом всієї книги, застосування компонентів дозволяє реізовать функціональність у вигляді загального модуля Побудовані з компонентів

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

Створення класу Translator

При роботі з Visual С # Express або яким-небудь іншим продуктом Visual Studio в результаті застосування стандартних шаблонів для створення бібліотеки класу створюється файл Classlcs Добре, що для бібліотеки класу створюється файл за умовчанням, але ідентифікатор Classl cs не говорить нам про що Тому видаліть цей файл з проекту, а замість нього створіть клас Translator наступним чином:

1 Клацніть правою кнопкою миші по назві проекту LanguageTranslator

в Solution Explorer

2 Виберіть команди Add | New Item

3 Виберіть опцію Class

4 Перейменуйте файл на Translatorcs

5  Клацніть кнопку Add, щоб створити файл і додати його в проект

Зауважте, як за допомогою середовища розробки Visual Studio ми швидко створили клас в С # Легкість, з якою ми можемо створювати файли класів, дозволяє нам коентріроваться на написанні коду цього класу Але не блудять, що, створивши якесь кількість файлів класу, ви автоматично отримаєте працююче пріленіе Для цього вам ще треба подумати, які файли, проекти, класи та тести потрібно створити

Переклад слова hello

Насамперед в нашому додатку перекладу ми реалізуємо можливість перекладу слова hello. Так як це англійське слово, то спочатку ми переведемо його з Англік на німецьку Скопіюйте наступний код і вставте у файл Translatorcs проекту LanguageTranslator

public class Translator {

public static string TranslateHello(string input) { if (inputCompareTo(&quothello&quot) ==0 ) {

return &quothallo"

}

else if (inputCompareTo(&quotalio&quot) == 0) { return &quothallo"

}

return &quot"

}

}

Клас Translator є основним класом, який надається іншим компонентам або фрагментам вихідного коду програми Його можна рассматрать як ідентифікатор чорного ящика. Цей чорний ящик має всього лише один метод: TranslateHello (), який переводить французьке alio і Англік hello в німецьке hallo. В якості вхідного параметра метод приймає строкову змінну посилального обєктного типу

У реалізації методу TranslateHello () ми використовуємо метод CompareTo (), щоб порівняти вміст буфера введення з параметром hello. Якщо рядки однаковий, то метод повертає значення 0 Як буде розглянуто більш детально в розд Дослідження строкового типу далі в цьому розділі, рядок є обктом, а обєкти мають методи Одним з методів строкового типу є мод CompareTo () Компонент, що викликає наш метод TranslateHello (), не знає, яким чином ми переводимо слово з однієї мови на іншу Більш того, цей аект йому абсолютно байдужий єдине, що його хвилює, – щоб цей мод працював, як від нього очікується

З абстрактної точки зору, метою методу TranslateHello () є прийняття певного тексту, і, якщо цей текст збігається з заданим зразком, возвреніе німецького слова hallo.

Чи не переймаючись питаннями про абстрактне задумі, нам необхідно протестувати його реалізацію у вихідному коді Для цього вставте наступний тестовий код У тестове Додаток, який є Проектом TestLanguageTranslator, а саме в файл Programcs

static void TestTranslateHello() { string verifyValue

verifyValue = LanguageTranslatorTranslatorTranslateHello(&quothello&quot) if (verifyValueCompareTo(&quothallo&quot) = 0) {

ConsoleWriteLine(&quotTest failed of hello to hallo&quot)

}

verifyValue  =  LanguageTranslatorTranslatorTranslateHello(&quotalio&quot) if (verifyValueCompareTo(&quothallo&quot) = 0) {

ConsoleWriteLine(&quotTest failed of alio to hallo&quot)

}

verifyValue = LanguageTranslatorTranslatorTranslateHello(&quotallosss&quot) if (verifyValueCompareTo(&quot&quot) = 0) {

ConsoleWriteLine(&quotTest to verify nontranslated word failed&quot)

}

verifyValue = LanguageTranslatorTranslatorTranslateHello(&quot alio&quot) if (verifyValueCompareTo(&quothallo&quot) = 0) {

ConsoleWriteLineCTest failed of extra whitespaces alio to hallo&quot)

}

}

Даний тест насправді складається з чотирьох окремих тестів Кожен з цих тестів викликає метод TranslateHello О, передаючи йому вхідні дані і отримуючи від нього результати Тестування відбувається, коли повертається модом результат звіряється з очікуваним результатом Тестування на правилах перекладу виконується за допомогою методу CompareTo ()

Зверніть увагу на третій тест:

verifyValue = LanguageTranslatorTranslatorTranslateHello(&quotallosss&quot) if (verifyValueCompareTo(&quot&quot) = 0) {

ConsoleWriteLineCTest to verify nontranslated word failed&quot)

}

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

Всі ці тести знаходяться в методі, який потрібно викликати з методу Main (), як показано в наступному прикладі:

static void Main(string] args)

{

TestTranslateHello()

}

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

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

Відповідь на це питання можна сформулювати на основі поняття розумного ісполованія Уявіть собі, що ваш недавно куплений автомобіль поламався,

коли ви їхали на ньому самим нормальним чином в самих нормальних умовах Термін гарантії ще не минув, і ремонт автомобіля буде виконаний по гарантії, тобто без витрат з вашого боку А тепер уявіть собі, що, діставши свій давно бажаний автомобіль, ви вирішили спробувати деякі з тих каскадекіх трюків, які ви бачили в кіно Наприклад, спробувати виконати на ньому стрибок з розгону Можливо, вам і вдасться підняти машину в повітря, і ті нколько миттєвостей польоту викличуть у вас непередавані відчуття, але кожен політ закінчується приземленням Так що машина приземляться, підвіска вся іорежена, двигун зірваний з кріплень і тд Але ви не дуже переживаєте – у вас гарантія Але коли ви намагаєтеся скористатися цією гарантією, то чуєте у відповідь смішок механіка станції техобслуговування Іншими словами-ваша Гант поширюється тільки на поломки, що трапилися при нормальній еклуатаціі в нормальних умовах Каскадерство сюди не входить

Повертаючись до нашого компоненту для перекладу, можна сказати, що він предостаяет метод TranslateHello () і має певні відповідальності А від компента, що викликає метод TransiateHeiio (), очікуються розумні тести з данні для перекладу Таким чином, чи є розумним з боку викликає компонента посилати компоненту перекладу пробільні символи

Якщо наявність пробільних символів у вхідних даних є нормальним отоятельством, то тоді неуспішне тестування є помилкою в компоненті перекладу В іншому ж випадку, тобто коли наявність пробільних символів у вхідних даних не є нормальним, поведінка викликає компонента не є розумним, і його необхідно виправити Відповідь на раніше поставлений вріс полягає в тому, що викликає компонент поводиться розумним чином, а проблема повязана з викликуваним компонентом, що не обробляє передає йому дані належним чином Це помилка в компоненті перекладу, яку необхідно виправити Звідки я знаю, що викликає компонент поводиться румний чином Я так вирішив, тому що я хочу, щоб контракт між визающім і що викликається компонентами був реалізований саме таким чином Хошее визначення контракту є ключовим аспектом

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

Але перш ніж пояснювати, яким чином виправити цю помилку, нам необхідно одержати додаткову інформацію про рядках і про те, що вони можуть робити

Джерело: Гросс К С # 2008: Пер з англ – СПб: БХВ-Петербург, 2009 – 576 е: ил – (Самовчитель)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*