Програмування базового курсу на Java - Завантажити PDF безкоштовно

Доповнення до книги Дітмар Ратц, Йенс Шеффлер, Детлеф Зезе, Ян Візенбергер Програмування базового курсу на Java

курсу

Зміст I Теорія. 11 1 Рядки для досвідчених користувачів. 13 1.1 Регулярні вирази. 13 1.2 Конкретний приклад. 14 1.3 Заміна тексту. 16 1.4 Резюме. 17 2 Анотації на Java. 19 2.1 Стандартні анотації в Java SDK. 19 2.1.1 Анотація DieS @ Override. 21 2.1.2 DieS @ Застаріла анотація. 22 2.1.3 Анотація DieS @ SuppressWarnings. 24 2.2 Анотації «зроби сам». 28 2.2.1 CoDo: Документація коду з використанням анотацій. 28 2.2.2 Ми пишемо нові анотації. 29 2.2.3 Оцінка анотацій. 32 2.3 Резюме. 36 3 JUnit або мистецтво написання коду без помилок. 37 3.1 Твердження для досвідчених користувачів. 38 3.2 Одиничні тести. 40 3.3 Анотації та JUnit. 45 3.4 Найкращі практики. 46 3.5 Резюме. 48 4 зразки дизайну. 49 4.1 Що таке зразки дизайну. 49 4.2 Схема спостерігача. 51 4.2.1 Основна ідея. 51 4.2.2 Об’єктна модель. 51 4.2.3 Приклад реалізації. 52 4.2.3.1 Робота лише з одним спостерігачем. 52 4.2.3.2 Робота з кількома спостерігачами. 55

4 Зміст 4.2.4 Варіації малюнка. 60 4.2.5 Резюме. 61 4.2.6 Вправи. 61 4.3 Складений малюнок. 62 4.3.1 Основна ідея. 62 4.3.2 Об’єктна модель. 65 4.3.3 Приклад реалізації. 66 4.3.3.1 Сума двох функцій. 66 4.3.3.2 Твір двох функцій. 67 4.3.4 Варіації малюнка. 69 4.3.5 Резюме. 71 4.3.6 Вправи. 72 II Практика. 73 5 Практичні приклади: Індивідуальні етюди. 75 5.1 Подільність до першого. 75 5.1.1 Попередні знання з книги. 75 5.1.2 Завдання. 75 5.1.3 Аналіз проблеми. 75 5.1.4 Алгоритмічний опис. 76 5.1.5 Програмування на Java. 77 5.1.6 Обережно, пастка. 78 5.1.7 Вправи. 79 5.2 Подільність на другу. 79 5.2.1 Попередні знання з книги. 79 5.2.2 Завдання. 79 5.2.3 Аналіз проблеми. 79 5.2.4 Алгоритмічний опис. 80 5.2.5 Програмування на Java. 80 5.2.6 Обережно, пастка. 81 5.2.7 Вправи. 82 5.3 Три речі. 82 5.3.1 Попередні знання з книги. 82 5.3.2 Завдання. 82 5.3.3 Аналіз проблеми. 83 5.3.4 Алгоритмічний опис. 83 5.3.5 Програмування на Java. 84 5.3.6 Обережно, пастка. 87 5.3.7 Вправи. 87 5.4 Проблема уважності. 87 5.4.1 Попередні знання з книги. 87 5.4.2 Завдання. 87

Зміст 7 6.9 Ітерація 9: Коли s є найкращим. 210 6.9.1 Деякі препарати. 210 6.9.2 Порівняння годинника. 212 6.9.3 Діалогове вікно налаштувань. 214 6.9.4 Резюме. 217 Бібліографія. 219

Ласкаво просимо Ласкаво просимо до додатку до "Програмування базових курсів на Java". Ми припускаємо, що ви натрапили на цей документ через нашу книгу. Якщо так, ми можемо лише привітати вас із вашою спрагою отримати додаткову інформацію. Ми сподіваємось, що веб-розширення допоможуть вам поглибити та застосувати отримані знання. Цей документ розділений на дві частини: теорію та практику. У теоретичній частині ми розглянемо аспекти програмування на Java, яким, на жаль, немає місця в книзі. Сюди входять анотації Java, модульні тести та шаблони проектування. У практичній частині ми навчимося застосовувати свої книжкові знання, використовуючи практичні завдання програмування. Ми дізналися багато нового про Java і тепер теоретично маємо змогу писати перші складніші програми. На жаль, вивчити мову на основі теорії можна не більше, ніж керувати автомобілем - нам потрібна практика. Для цього ми намагатимемось вирішувати різні завдання і, перш за все, мати справу з тим, як систематично підходити до проблеми, шукати рішення та програмувати його на Java.

14 1 Струни для вдосконаленого Majer. Якщо ви правильно на це подивитесь, ми справді знаємо лише першу та останню дві літери. Перша назва починається на Н, але ми не можемо згадати. ми не знаємо, чи має дотична людина все ще прізвище, яке є в телефонній книзі. На щастя, у нашій телефонній книзі є компакт-диск, на якому ми можемо шукати певні критерії пошуку. Критерії пошуку передаються на комп’ютер у певному форматі - регулярному виразі. Отже, все зрозуміло, це просто інша комп’ютерна мова (наприклад, Java), яку нам просто потрібно вивчити. 1.2 Конкретний приклад Цей розділ не призначений як повне введення у світ регулярних виразів. Щоб отримати докладнішу інформацію, ми рекомендуємо ознайомитися з документацією для класу java.util.regex.pattern Як ми побачимо з наступного прикладу, основи не представляють особливої ​​складності. Наступна програма є спрощеною версією нашої електронної телефонної книги: 1 пошук тексту в загальнодоступному класі < 2 3 public static void main(string[] args) < 4 String[] namensliste = < 5 "Fritz Maier", 6 "Karl Hansen", 7 "Fred Mustermann", 8 "Horst Metzger", 9 "Hermann Meyer", 10 "Fritz H. Maurer", 11 "Hoerbi Maier", 12 "Hans Maler", 13 "Harry Mooshammer", 14 "Hurgan Malinkow" 15; 16 String suchstring = ". "; 17 for(int i = 0; i javac -Xlint SmallDog.java SmallDog.java:3: warning: [deprecation] belle() in Dog has been deprecated public String belle() < ˆ 1 warning Mit dieser einfachen Änderung haben wir es den Benutzern unserer Klasse leicht gemacht, veralteten Code zu erkennen und zu vermeiden. Es sollte an dieser Stelle auch erwähnt werden, dass es guter Stil ist, in der Javadoc Dokumentation zu erklären, wie diese Vermeidung stattfinden kann. Das folgende Programm zeigt die komplette Klasse mit veraltetem Code und inklusive korrekter Dokumentation: 1 public class Dog < 2 3 /** 4 * @deprecated verwende stattdessen

24 2 Анотації в Java 2.1.3 Анотація @SuppressWarnings У попередньому розділі було показано, як використання @Deprecated Annotation може надати компілятору Java додаткову інформацію, яка призвела до попереджень під час процесу компіляції. Попередження корисні, оскільки вони попереджають програміста про речі, які можуть бути проблемою. Однак занадто багато (і марних) попереджень становлять проблему, оскільки вони схожі на шум на телефонній лінії: вони заважають і відволікають увагу від справді важливих речей, на які слід звернути увагу. Для прикладу візьмемо такий метод: загальнодоступна статична карта (K key1, V value1, Object. Morekeyvals) < Map result = new HashMap (); result.put(key1, value1); for (int i = 0; i javac -Xlint SuppressWarningsExample.java SuppressWarningsExample.java:23: warning: [unchecked] unchecked cast found: java.lang.object required: K (K) morekeyvals[i], ˆ SuppressWarningsExample.java:24: warning: [unchecked] unchecked cast found: java.lang.object required: V (V) morekeyvals[i + 1]); ˆ Wo liegt das Problem, und wie lösen wir es? Wie wir in Abschnitt 11.2 des Buches gelernt haben, sind generische Methoden ein wunderbares Mittel, um

32 2 Анотації на Java 34 Клас [] of (); 35 boolean isnullable () за замовчуванням false; 36 37 Слід визнати, що написання нових анотацій здається дещо дивним (автору також доводиться шукати точний синтаксис кожного разу, коли він пише нову анотацію). Хороша новина полягає в тому, що на практиці ви витрачаєте набагато менше часу на написання і набагато більше часу, використовуючи готову анотацію, і саме це ми хочемо зробити. 2.2.3 Оцінка анотацій Анотації використовуються у двох різних формах: програміст захоче оцінити їх або під час виконання, або під час компіляції програми. Останнє є досить складним, і тому ми посилаємось на [17]. В кінці цього розділу ми хочемо написати клас CodoProxy, який автоматично перевіряє передумови для реалізації інтерфейсу. У випадку нашого інтерфейсу суматора використання має виглядати так: 1 import codo.codoproxy; 2 3 демо-програма публічного класу < 4 5 public static class AddiererImpl implements Addierer < 6 @Override 7 public Integer addvalues(integer v1, Integer v2) < 8 return v1 + v2; 9 10 11 @Override 12 public Integer addtoint(integer v1, Number v2) < 13 return addvalues(v1, v2.intvalue()); 14 15 16 17 public static void main(string[] args) < 18 Addierer proxied = CodoProxy.makeProxy(Addierer.class, 19 new AddiererImpl()); 20 21 // Normalfall 22 System.out.println(proxied.addValues(1, 2)); 23 System.out.println(proxied.addToInt(1, (byte) 2)); 24 25 // Parameter ist null 26 try < 27 System.out.println(proxied.addValues(1, null)); 28 catch (NullPointerException expected) < 29 expected.printstacktrace(); 30

34 2 Анотації на Java, з якими оформлено параметри методу. Повернене значення - двовимірне поле. Перший вимір відповідає параметрам 8. Отже, припустимо, у нас є метод m і поле параметрів параметрів, за допомогою якого його слід викликати, і ми хочемо перевірити анотацію NotNull. На першому кроці ми маємо перейти до списку всіх анотацій: Анотація [] [] all = m.getparameterannotations (); Тепер ми перебираємо перший вимір поля, який відповідає параметрам параметрів, і розглядаємо кожну анотацію, визначену для відповідного параметра: for (int i = 0; i S makeproxy (53 final class class interfaceclass, final T внеоб'єкті) < 54 return (T) Proxy.newProxyInstance( 55 innerobject.getclass().getclassloader(), 56 new Class[]

3.1 Твердження для досвідчених користувачів 39 видалено з програми та замінено викликом методу. Це має як переваги, так і недоліки: Недоліком є ​​те, що твердження JUnit не можна просто вимкнути. Твердження Java можна просто активувати або деактивувати у віртуальній машині 2. Це може уповільнити виконання, особливо в надзвичайно обчислювальному коді. Перевага полягає в тому, що твердження JUnit також працюють зі старими версіями Java (тобто до версії 1.3). Вони все ще використовуються в проектах навіть сьогодні 3, тому ми залишаємось сумісними донизу. Звичайно, лише ці аргументи не виправдовують переходу до класу Assert. Основна перевага цього класу ще не згадана: він надає додаткові методи твердження: 1 import junit.framework.assert; 2 3 публічний клас AssertionTest2 < 4 5 public static void main(string[] args) < 6 Assert.assertNotNull("Parameter-Arrary ist null",args); 7 // assert args!= null: "Parameter-Array ist null" 8 for(int i = 0; i = 0; i--,j--) if (brett[i] == j) return true; 3. Befindet sich in der Diagonale, die schräg nach unten links verläuft, eine Dame? Die Überprüfung dieser Bedingung funktioniert genau wie die andere Diagonalrichtung mit dem Unterschied, dass wir die Variable j nun erhöhen statt erniedrigen müssen: for (int i = spalte-1, j = brett[spalte]+1; i >= 0; i -, j ++) if (board [i] == j) повертає true;

5.4. Проблема восьми жінок 91 4. Якщо пошук там не вдався, поверніться до кроку 2. Якщо пошук вдалий, ми закінчили. Повідомте про успіх як результат. 5. Якщо ми без успіху дійшли до восьмої колони, ми застрягли в глухому куті. Повідомте про помилку в результаті. Ми не тільки бачимо, що пошук потрібної леді структурований однаково для всіх стовпців; швидше, ми також бачимо, що зв'язок між пошуками окремих стовпців можна простежити до простого істинного (= пошук був успішним) або хибного (= пошук не був успішним). У свою чергу, одне булеве значення може бути дуже зручно повернути методом. Ми визначаємо наш метод насамперед так, ніби ми хочемо лише знайти рішення для дуже конкретного стовпця. Отже, як параметри нам потрібен номер стовпця, в який ми шукаємо, і поле, в яке ми повинні розмістити. Повернене значення (як вимагається вище) логічне значення: загальнодоступний статичний логічний набір (дошка int [], стовпець int) < Wir wollen nun überlegen, wie wir obige fünf Schritte am besten in ein Java- Programm kleiden. Beginne in der ersten Zeile und versuche es eine Zeile tiefer das klingt verdächtig nach einer Schleife! Wir formulieren also einefor- Schleife, die über die einzelnen Zeilennummern läuft: for (int i=0; i = 0; i--,j--) 11 if (brett[i] == j) 12 return true; 13 14 // Teste, ob in der unteren Diagonale eine Dame steht 15 for (int i = spalte-1, j = brett[spalte]+1; i >= 0; i -, j ++)

ƒ dgcmifgjgnlky ZIJJ NGM ENJKG \\ KNL DKK`M cnzl H] K edlznf m ˆr pšswyƒ agek ZGN MŒI F ZNL dcifknm ZNJ dcgnfelnkkj ŒDL H] f klmn Žvvkvvffvvvffvvvfvnvvfvnvvfvnvvfvnvvfvnvvvff

ƒ agek ZNM I] KDNFFNM [M IFK NGMNJ ENJKG \\ KNM NFZNJ ŒDL H] fk š œ m vq uvžÿov yƒ agek ZNM NK ŒDL H] Y ZNL I] KDNFF IDO ZN \ NDNL DKK`M JKN œ m vq ŸŠv ŸŠvyƒ agek ZNM I \ NM ZNJ dcgnfnj IFJ dklgmc ŒDL H] fk š œ m vq vwwÿ vwyƒ agek ZNM NK ŒDL H] Y ZNL GM ZNL I`] KDNFFNM DMZN ZGN MŒI F ZNL NGFNM ZNJ dcgnfelnkkj ŒDL H] f? 87g @ A ª87; «B ± ² zz< ur wyƒ agek ZGN MŒI F ZNL NGFNM ZNJ dcgnfelnkkj ŒDL H]f ³GN MŒI F ZILO JGH G\ IDON ZNJ dcgnfnj MGH K \N L _NLµMZNLMf ¹º ±² z z< ˆr pšswyƒ agek ZGN MŒI F ZNL dcifknm ZNJ dcgnfelnkkj ŒDL H]f ³GN MŒI F ZILO JGH G\ IDON ZNJ dcgnfnj MGH K \N L _NLµMZNLMf Abbildung 5.5: Dokumentation der KlasseGameModel (Seite 1)

5,7 Гра Життя 119 "¼½¾ À¼ÁÂÃ¼Ä ÅÆÇÈÉÊ ËÌÍÌÎÈÌÏÐÎÑÒÓÉÏÐ ööö ØÙÕÚÛÜÕÝÞß AAAA Âëàä CAEA éêëìíîï Ä ðîãêåññ Deo Aao ôåêåëõöêãã æ øãåùåæ ø NNU" ¼½û¼üüâ "¼ü ÅÆÇÈÉÊ ËÌÍÌÎÈÌÏÐÎÑÒÓÉÏÐ ÔÕÖýÕþþÛÔÕþÞß AAAA Âëàä CAEA éêëìíîï Ä AAE Ä ðîãêåññåæ ÿêæäå АТ åñäåòåæøãåë øãåùåæ ø NNU" ¼½ ¼ ¼ ÅÆÇÈÉÊ ËÌÍÌÎÈÌÏÐÎÑÒÓÉÏÐ ööö Û õ Û ÕÞß AAAA Âëàä ðóåæ Aao áåñåø Дно Âëàä éêëìíîú «¼½½¼½ ÅÆÇÈÉÊ EIO ÔÕÖÖÕÖÞÉÏÒ Ó EIO EESS AAAA Âëàä ðîãêåññåæ æùðñã åáæåø âåøãáóóãåæ ôåñäåø éêëìíîú ö ö aaà åáñåï æ Де AE Una EE ö aaà ðñãåï æ Де AE! una à "½½ # À¼üü¼ $ ÅÆÇÈÉÊ IE% Ü & ÖÖ'ÙÕþþÕ (Theio Ó EIO eess áæðñáøáåëãï äðøø ãAä âåøãáóóãåë öêãã æ åäëìíîã) ëå ëë ëå ëë åë åë åë åë åë åë ëå ëå ëå ëå ëå ëå ëå ëå åë ëå ëë åë ëë åë ëë åë åë åë åë åë åë ë ë ë ë ë å î î î î î î æ õ õ õ õ õ ÅÆÇÈÉÊ ÍÉ% + ØÙÕ'ÙÕþþÕ (Þß áæðñáøåëãï äðøø deäl êèåëõöêãã æ ääììîã) êëäå, -. // 0122 324125.627 8972:; 2-4? @ QR GKI = TABLCABCC GN = TABLCABCC GNK = TABLCACCC AV T @ WDCF = TP> FXWV V> FBSAR US> AV T @ WDCF = TP> FXWV Рисунок 5.6: Документація класу GameModel (стор. 2)

152 5 Практичні приклади: Індивідуальні дослідження Витяг: 3 Початок: = (03) = Ціль: = Допоміжний полюс: = (02) = (01) = Потяг: 4 Початок: = Мета: = (03) = Допоміжний полюс: = (02) = (01) = Поїзд: 5 Старт: = (01) = Ціль: = (03) = Допоміжний стержень: = (02) = Поїзд: 6 Початок: = (01) = Мета: = (03) = (02) = Допоміжний стержень: = Поїзд: 7 Початок: = Пункт призначення: = (03) = (02) = (01) = Допоміжна планка: = 5,10 Індекс маси тіла Індекс маси тіла є дуже простим параметром щодо питання, чи є людина має надлишкову або недостатню вагу. Він обчислюється за формулою ІМТ = вага в кг (зріст у м). 2 Таблиця 5.2 показує, як за допомогою індексу маси тіла можна визначити, чи є у людини надмірна чи недостатня вага. Слід зазначити, що ІМТ зазвичай не має значення для підлітків віком до 18 років. У цьому розділі ми хочемо написати просту у використанні програму, яка дозволяє користувачеві розрахувати свій ІМТ та відображає попередження, якщо значення занадто велике або занадто низьке. 5.10.1 Попередні знання з книги Ця вправа стосується великої кількості нових концепцій програмування графічних інтерфейсів: