Програмирање на основни курсеви во Јава - PDF бесплатно преземање
Додатоци на книгата Дитмар Ратц, Јенс Шефлер, Детлеф Сиз, Јан Висенбергер Основно програмирање на курсот во Јава

Содржина I Теорија. 11 1 Стрингови за напредни корисници. 13 1.1 Редовни изрази. 13 1.2 Конкретен пример. 14 1.3 Замена на текст. 16 1.4 Резиме. 17 2 Забелешки во Јава. 19 2.1 Стандардни прибелешки во Java SDK. 19 2.1.1 DieS @ Overrote Annotation. 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 Забелешки и Единица. 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 Програмирање во Јава. 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 Програмирање во Јава. 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 Програмирање во Јава. 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.
14 1 Стрингови за напредни мајори. Ако го погледнете правилно, навистина ги знаеме само првите и последните две букви. Првото име започнува со Н, но не можеме да се сетиме. не знаеме дали дотичната личност сè уште има средно име што е во именикот. За среќа, нашиот телефонски именик има ЦД-РОМ на кој можеме да бараме одредени критериуми за пребарување. Критериумите за пребарување му се соопштуваат на компјутерот во одреден формат - редовен израз. Значи, сè е јасно, тоа е само уште еден компјутерски јазик (како Јава) што ние едноставно мора да го научиме. 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 Прибелешки во Јава 2.1.3 Прибелешката @SuppressWarnings Во претходниот дел се покажа како употребата на @Deprecated Annotation може да му обезбеди на компајлерот Java дополнителни информации што резултираа со предупредувања за време на процесот на составување Предупредувањата се корисни затоа што го предупредуваат програмерот за работи што може да бидат проблем. Премногу (и бескорисни) предупредувања, сепак, претставуваат проблем бидејќи тие се како бучава на телефонската линија: тие ги вознемируваат и го одвлекуваат вниманието од навистина важните работи за кои треба да внимавате. На пример, да го земеме следниов метод: јавна статичка мапа на (К клуч 1, V вредност 1, Објект. Повеќе клуч) < 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 Прибелешки во Јава 34 Класа [] од (); 35 boolean isnullable () стандардно лажно; 36 37 Додуша, пишувањето нови прибелешки се чувствува малку чудно (авторот треба да ја бара точната синтакса секогаш кога ќе напише нова прибелешка). Добрата вест е дека во пракса трошите многу помалку време за пишување и многу повеќе време користејќи ја готовата коментар и тоа е она што сакаме да го направиме. 2.2.3 Евалуација на прибелешките Анотациите се користат во две различни форми: програмер ќе сака да ги проценува или во време на траење или додека се составува програма. Последново е прилично сложено и затоа се повикуваме на [17]. На крајот од ова поглавје сакаме да напишеме класа CodoProxy што автоматски ги проверува предусловите за имплементација на интерфејс. Во случај на нашиот интерфејс за додатоци, употребата треба да изгледа вака: 1 увоз на кодо.кодопрокси; 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 Забелешки во Јава со кои се украсени параметрите на методот. Вратината вредност е дводимензионално поле. Првата димензија одговара на параметрите 8. Да претпоставиме дека имаме метод m и поле со параметри на параметрите со кои треба да се повика, и сакаме да ја провериме NotNull прибелешката. Во првиот чекор треба да стигнеме до списокот со сите забелешки: Анотација [] [] сите = m.getparameterannotations (); Сега повторуваме низ првата димензија на полето, што одговара на параметрите на параметрите, и погледнуваме во секоја прибелешка дефинирана за соодветниот параметар: за (int i = 0; i S makeproxy (53 конечна класа интерфејскласа, конечна Внатрешен предмет) < 54 return (T) Proxy.newProxyInstance( 55 innerobject.getclass().getclassloader(), 56 new Class[]
3.1 Тврдењата за напредни корисници 39 отстранети од програмата и заменети со методен повик. Ова има и предности и недостатоци: Недостаток е што тврдењата на JUnit не можат едноставно да се исклучат. Јава тврдењата едноставно можат да се активираат или деактивираат во виртуелната машина 2. Ова може да го забави извршувањето, особено во екстремно компјутерски интензивен код. Предноста е во тоа што тврдењата на JUnit работат и со постари верзии на Java (т.е. пред 1.3). Дури и во денешно време, овие сè уште се појавуваат во проектите 3, така што остануваме надолу компатибилни. Се разбира, само овие аргументи не оправдуваат префрлување во класата Асертирај. Главната предност на оваа класа сè уште не е спомената: таа обезбедува дополнителни методи на тврдење: 1 увоз 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 ++) ако (табла [i] == j) се врати точно;
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; јас -, 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 if uvt
ƒ 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 JN v 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 "A À¼ÁÂÃ¼Ä ÈÉÊÇÈÉÊ ËÌÍÌÎÈÌÏÐÎÑÒÓÉÏÐ ÔÕÖ ØÙÕÚÛÜÕÝÞß AAAA äëàä CAEA ееììíîï ð ðîãêåññ Deo ôåó ôåêåëõöêãã æ øãåùåæ ø NNU" ¼½û¼üüâ "ÅÆ ÅÆÇ ÈÉÊ ÔÕÖýÕþþÛÔÕþÞß AAAA øa åñäåòåæøãåa "a" ä Âä A ÈÉÊÇÈÉÊ ËÌÍÌÎÈÌÏÐÎÑÒÓÉÏÐ ÔÕÖ Õ Û ÕÞß AAAA Âааä ðóåæ äåø áåñåø dNO äааä ееäìíîú "ÅÆ ÅÆÇÈÉÊ EIO Ó Ó EIO eess AAAA Âааа ðиãеåññåæ æùðñãааааааааааааааааааааааааааааааааааааааа? una à "½½ # À¼üü¼ $ ÅÆÇÈÉÊ IE% Ü & ÖÖ'ÙÕþþÕ (Theio Ó EIO eess áæðñáøáåëãï äðøø äAä âåøãáóóãåë êãã æ åäëìíîã) êëäåú Ó õ äáå åáñåï æ Dae AE æ AE æ AE NA AE NA AE NA AE NA AE NA AE NA AE NA AE NA AE NA AE NA AE NA AE NA E AE E AE E AE NA E AE E AE E AE E AE E AE E AE E AE E AE E AE E AE E AE E AE E AE E AE E AE E AE E ÅÆÇÈÉÊ ÍÉ% + ØÙÕ'ÙÕþþÕ (Þß æðñæðñæðñøåøåãï äðøø ôåë ôåêåëõöêãã åä ìëìíîã) êëäåú, -. // 0122 324125.627 8972:; 2-4? @ QR GKI = TABLCC GNIJ> @ABCC D> EF @ABLCC 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 Индекс на телесна маса Индексот на телесна маса е многу едноставен параметар во однос на прашањето дали некое лице има прекумерна тежина или слаба тежина. Пресметано е со употреба на формулата BMI = тежина во кг (висина во м) 2 Табела 5.2 покажува како може да се користи индексот на телесна маса за да се утврди дали некое лице има прекумерна тежина или слаба тежина. Треба да се напомене дека БМИ нормално не е значаен за адолесцентите на возраст под 18 години. Во овој дел сакаме да напишеме програма лесна за употреба, што му овозможува на корисникот да го пресмета својот БМИ и прикажува предупредување ако вредноста е превисока или прениска. 5.10.1 Претходно знаење од книгата Оваа вежба се занимава со голем број нови концепти од програмирањето на графички интерфејси: