Construction Kolektiv autorů

Rozměr: px
Začít zobrazení ze stránky:

Download "Construction Kolektiv autorů"

Transkript

1 Construction Kolektiv autorů

2 Připomenutí Analýza Návrh Implementace Co Jak

3 Opakování

4 Příklad Vyhodnocení výrazu o 3 + ((5 + 9) * 2)

5 Příklad Vyhodnocení výrazu boolean isoperator = (operator!= null) && (leftchild!= null) && (rightchild!= null); int leftvalue = leftchild.evaluate(); int rightvalue = rightchild.evaluate(); switch (operation) { case PLUS: return leftvalue + rightvalue; case MINUS: return leftvalue - rightvalue; case TIMES: return leftvalue * rightvalue; case DIVIDE: return leftvalue / rightvalue; default: throw new IllegalStateException( "Unknown operator: " + operator); }

6 Příklad Vyhodnocení výrazu

7 Příklad Vyhodnocení výrazu

8 Příklad Vyhodnocení výrazu public class ValueNode implements Node { public int evaluate() { return value; } } public class OperationNode implements Node { public int evaluate() { return operation.evaluate( leftchild.evaluate(), rightchild.evaluate()); } } public enum DefaultOperations implements Operation { PLUS { public int evaluate(int a, int b) {return a + b;} }, MINUS { public int evaluate(int a, int b) {return a - b;} }, TIMES { public int evaluate(int a, int b) {return a * b;} }, DIVIDE { public int evaluate(int a, int b) {return a / b;} } }

9 Příklad - Cache public class CacheMap<K, V> extends LinkedHashMap<K, V> { private ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); public void lockread() { lock.readlock().lock(); } public void unlockread() { lock.readlock().unlock(); } } public void lockwrite() { lock.writelock().lock(); } public void unlockwrite() { lock.writelock().unlock(); } try { cache.lockwrite(); cache.put("a", "B"); } finally { cache.unlockwrite(); } cache.putall(someothercache); cache.remove("a"); try { cache.lockread(); cache.put("a", "B"); } finally { cache.unlockread(); }

10 Příklad - Cache public class CacheMap<K, V> { private final CustomLinkedHashMap<K, V> map; private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); public V get(final K key) { return withreadlock(() -> map.get(key)); } public void put(final K key, final V value) { withwritelock(() -> map.put(key, value)); } public void remove(final K key) { withwritelock( ); } } public int size() { return withreadlock(() -> map.size()); }

11 Pár úvah o kvalitním kódu

12 Na cestě ke kvalitnímu kódu o Každý to chce psát jednoduše

13 Na cestě ke kvalitnímu kódu o o Každý to chce psát jednoduše Každý to chce psát čistě

14 Na cestě ke kvalitnímu kódu o o o Každý to chce psát jednoduše Každý to chce psát čistě Každý to chce psát jinak

15 Na cestě ke znovupoužitelnosti o Developers love to reuse code!

16 Příklad Join řetězců o Jak implementovat spojení kolekce řetězců o [ A, B, C ] -> A, B, C

17 Příklad Join řetězců o Možná implementace public static String join(list<string> strings) { StringBuilder result = new StringBuilder(); for (String p : strings) { result.append(p).append(", "); } } return result.substring( 0, result.length() - ", ".length());

18 Příklad Join řetězců o Hotová řešení v Java světě: Apache commons-lang StringUtils.join Google Guava Joiner.on Java String.join

19 Co je to kvalitní kód?

20 Kvalitní kód je Bezchybný Rychlý / Efektivní Krátký? Rafinovaný? Srozumitelný Udržovatelný S unit testy

21

22 Proč psát srozumitelný kód Kód píšete jednou, číst ho (vy nebo někdo jiný) budete pravděpodobně vícekrát Pokud váš kód někdo nepochopí, snadno v jeho použití nebo úpravě udělá chybu Nesrozumitelný kód nikdo nebude chtít používat Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. Code for readability.

23 Kdy nepsat kvalitní kód?

24 Jak psát srozumitelný kód

25 Co bude uživatel vaší metody číst 1. Jméno metody 2. Deklarované typy parametrů a návratové hodnoty 3. Jména deklarovaných parametrů 4. Javadoc 5. Samotný kód metody Čím dříve se dozví vše, co potřeboval, tím dříve může přestat číst (a ušetřit čas)

26 Příklad: StringUtils (Commons Lang) /** join()

27 Příklad: StringUtils (Commons Lang) /** public static String join(object[], String, int, int)

28 Příklad: StringUtils (Commons Lang) /** public static String join(object[] array, String separator, int startindex, int endindex)

29 Příklad: StringUtils (Commons Lang) /** Joins the elements of the provided array into a single String containing the provided list of elements. No delimiter is added before or after the list. A null separator is the same as an empty String (""). Null objects or empty strings within the array are represented by empty strings. StringUtils.join(null, *) = null StringUtils.join([], *) = "" StringUtils.join([null], *) = "" StringUtils.join(["a", "b", "c"], "--") = "a--b--c" StringUtils.join(["a", "b", "c"], null) = "abc" StringUtils.join(["a", "b", "c"], "") = "abc" StringUtils.join([null, "", "a"], ',') = ",,a" Parameters: array the array of values to join together, may be null separator the separator character to use, null treated as "" startindex the first index to start joining from. It is an error to pass in a start index past the end of the array endindex the index to stop joining from (exclusive). It is an error to pass in an end index past the end of the array Returns: the joined String, null if null array input */ public static String join(object[] array, String separator, int startindex, int endindex)

30 Příklad: StringUtils (Commons Lang) /** Joins the elements of the provided array into a single String containing the provided list of elements. No delimiter is added before or after the list. A null separator is the same as an empty String (""). Null objects or empty strings within the array are represented by empty strings. StringUtils.join(null, *) = null StringUtils.join([], *) = "" StringUtils.join([null], *) = "" StringUtils.join(["a", "b", "c"], "--") = "a--b--c" StringUtils.join(["a", "b", "c"], null) = "abc" StringUtils.join(["a", "b", "c"], "") = "abc" StringUtils.join([null, "", "a"], ',') = ",,a" Parameters: array the array of values to join together, may be null separator the separator character to use, null treated as "" startindex the first index to start joining from. It is an error to pass in a start index past the end of the array endindex the index to stop joining from (exclusive). It is an error to pass in an end index past the end of the array Returns: the joined String, null if null array input */ public static String join(object[] array, String separator, int startindex, int endindex)

31 Příklad: StringUtils (Commons Lang) public static String join(object[] array, char separator, int startindex, int endindex) { if (array == null) { return null; } int bufsize = (endindex - startindex); if (bufsize <= 0) { return EMPTY; } bufsize *= ((array[startindex] == null? 16 : array[startindex].tostring().length()) + 1); StrBuilder buf = new StrBuilder(bufSize); } for (int i = startindex; i < endindex; i++) { if (i > startindex) { buf.append(separator); } if (array[i]!= null) { buf.append(array[i]); } } return buf.tostring();

32 Příklad: StringUtils (Commons Lang) private static final String[] ARRAY_LIST = {"foo", "bar", "baz"}; private static final String[] NULL_ARRAY_LIST = {null}; private static final String[] EMPTY_ARRAY_LIST = {}; private static final String[] MIXED_ARRAY_LIST = {null, "", "foo"}; private static final Object[] MIXED_TYPE_LIST = {"foo", Long.valueOf(2L)}; private static final String SEPARATOR = ","; private static final String TEXT_LIST_NOSEP = "foobarbaz"; private static final String TEXT_LIST = public void testjoin_arraystring() { assertnull(stringutils.join((object[]) null, null)); assertequals(text_list_nosep, StringUtils.join(ARRAY_LIST, null)); assertequals(text_list_nosep, StringUtils.join(ARRAY_LIST, "")); assertequals("", StringUtils.join(NULL_ARRAY_LIST, null)); assertequals("", StringUtils.join(EMPTY_ARRAY_LIST, null)); assertequals("", StringUtils.join(EMPTY_ARRAY_LIST, "")); assertequals("", StringUtils.join(EMPTY_ARRAY_LIST, SEPARATOR)); assertequals(text_list, StringUtils.join(ARRAY_LIST, SEPARATOR)); assertequals(",,foo", StringUtils.join(MIXED_ARRAY_LIST, SEPARATOR)); assertequals("foo,2", StringUtils.join(MIXED_TYPE_LIST, SEPARATOR)); } assertequals("/", StringUtils.join(MIXED_ARRAY_LIST, "/", 0, MIXED_ARRAY_LIST.length - 1)); assertequals("", StringUtils.join(MIXED_ARRAY_LIST, "", 0, MIXED_ARRAY_LIST.length - 1)); assertequals("foo", StringUtils.join(MIXED_TYPE_LIST, "/", 0, 1)); assertequals("foo/2", StringUtils.join(MIXED_TYPE_LIST, "/", 0, 2)); assertequals("2", StringUtils.join(MIXED_TYPE_LIST, "/", 1, 2)); assertequals("", StringUtils.join(MIXED_TYPE_LIST, "/", 2, 1));

33 Název metody To první a často jediné, co z vaší metody bude většina lidí číst věnujte mu pozornost Měl by být stručný a přitom dostatečně popisovat, co metoda dělá Pokud se vám nedaří vhodný název vymyslet, může to být špatným návrhem metody Metoda dělá více různých věcí (měla by dělat vždy jen jeden svůj úkol) Nemáte vlastně jasno, co má metoda dělat Pokud jste při vymýšlení jména přišli na špatný návrh metody, ušetřili jste si dost času, který byste jinak strávili později přepisováním kódu Kvíz: co dělá tato metoda? dontstoredatatocache()

34 Název metody issavebasicdataandtemplateattributevaluesdeactivatedocumentreturnpossible()

35 Jedno slovo o One Word per Concept fetch retrieve get read find

36 Jména a typy parametrů Jméno by mělo popisovat, co daný objekt reprezentuje nejen sám o sobě, ale i v kontextu použití parametru: void merge(graph graph1, Graph graph2) vs. void merge(graph sourcegraph, Graph targetgraph) U typovaných jazyků využívejte datové typy Toto by měla být naprostá samozřejmost Speciálně v Javě se ale často setkávám zejména s ignorováním enums (místo enumu se často používají booleany nebo soustavy konstant) Zdá se, že velmi populární je místo strongly typed používat stringly typed přístup: Text: "abc" Číslo: "42" Objekt obsahující jednu textovou a dvě číselné položky: "abc_42_666" Přístup k první číselné položce objektu: myobjectstring.split("_")[1]

37 Co nepovažuji za užití datových typů Map<Vertex, Set<Boolean>> List<List<List<String>>> Map<List<Object>, HashSet<Pair<Integer, Integer>>>

38 Parametry Metoda s příliš velkým počtem parametrů je nepřehledná protected PdfPTable getprijemceplnenitable(float documentwidth, String nazevleasingovky, String cisloleasingovesmlouvy, String smluvniservis, String prijemcecislouctu, String prijemcejmeno, String prijemceulicecp, String prijemceobecpsc, boolean pojistenijindeexistuje, String pojistenijindenazev, Boolean dphanonenull, String zpusobuhradykey, String datum, boolean isdph, String stextpodpodpisem) Parametry typu boolean nejsou příliš vhodné Nutno v názvu parametru jasně deklarovat, co znamená true a co false Jméno parametru ale nemusí být vždy dostupné (např. v Javě, mám-li knihovnu bez javadoc a zkompilovanou bez jmen parametrů, vidím jen typ bez jména) Při volání metody není na první pohled význam boolean parametru obvykle zřejmý newtable(tablename, parentdatabase, true) newtable(tablename, parentdatabase, TableType.GLOBAL_TEMPORARY)

39 Primitive Obsession Parametry void bookticket(string name, String firstname, String film, int count, String cinema); bookticket(string arg0, String arg1, String arg2, int arg3, String arg4); void bookticket(name name, FirstName firstname, Film film, Count count, Cinema cinema); bookticket(name arg0, FirstName arg1, Film arg2, Count arg3, Cinema arg4);

40 Primitive Obsession - Parametry o Příklad Vyhledávání produktů podle cenového intervalu? searchbyprice (?);

41 Primitive Obsession - Parametry o Příklad Vyhledávání podle cenového intervalu Vector searchbyprice(double start, double end); List<Product> searchbypricerange(price start, Price end); List<Product> searchbypricerange(pricerange pricerange);

42 Primitive Obsession Třídy public class Customer { } private int id; private String firstname; private String lastname; public class Customer { } private CustomerId id; private FirstName firstname; private LastName lastname;

43 Javadoc Dohodněte se na jazyku a dodržujte ho V angličtině může být problém se vyjádřit (zejména odborné pojmy) Komentáře v češtině vyžadují neustále přepínat klávesnici a jazyk v hlavě Komentáře v cestine nevypadají dobře Dokumentujte chování vůči null (všude tam, kde to není očividné) U atributů objektu / třídy zda může někdy být null a co to znamená U parametrů metod zda může být null a co se v tom případě stane U návratových hodnot zda a v jaké situaci může metoda vrátit null U kolekcí a polí vnímejte rozdíl mezi prázdnou kolekcí a null Většinou dává lepší smysl prázdná kolekce ( seznam nalezených prvků je prázdný ) než null ( seznam nalezených prvků neexistuje ) Nenechte se vést leností nebo dojmem větší efektivity / úspory paměti při použití null (Java: Collections.emptyList())

44 Javadoc /** * Metoda cislo zaznamu milestone v cache nebo -1 firstrow lastrow extrarecords ExpiredDataException */ public CachedData gettimemilestonecacheddata(..)

45 Javadoc: StringUtils (Commons Lang) /** Joins the elements of the provided array into a single String containing the provided list of elements. No delimiter is added before or after the list. A null separator is the same as an empty String (""). Null objects or empty strings within the array are represented by empty strings. StringUtils.join(null, *) = null StringUtils.join([], *) = "" StringUtils.join([null], *) = "" StringUtils.join(["a", "b", "c"], "--") = "a--b--c" StringUtils.join(["a", "b", "c"], null) = "abc" StringUtils.join(["a", "b", "c"], "") = "abc" StringUtils.join([null, "", "a"], ',') = ",,a" Parameters: array the array of values to join together, may be null separator the separator character to use, null treated as "" startindex the first index to start joining from. It is an error to pass in a start index past the end of the array endindex the index to stop joining from (exclusive). It is an error to pass in an end index past the end of the array Returns: the joined String, null if null array input */ public static String join(object[] array, String separator, int startindex, int endindex)

46 Javadoc : StringUtils (Spring) o o Anotace pro popis okrajových podmínek javax.annotation.nullable javax.annotation.nonnull Není nutný popis v Javadocu /** * Check whether the given {@code String} is empty. * <p>this method accepts any Object as an argument, comparing it to * {@code null} and the empty String. As a consequence, this method * will never return {@code true} for a non-null non-string object. * <p>the Object signature is useful for general attribute handling code * that commonly deals with Strings but generally has to iterate over * Objects since attributes may e.g. be primitive value objects as well. str the candidate String */ public static boolean isempty(@nullable Object str) { return (str == null "".equals(str)); }

47 Javadoc: ServerRequest (Spring) o o Optional monáda pro návratové hodnoty Optional.isEmpty() Optional.map(value -> ).orelse( ) Není nutný popis v Javadocu public interface ServerRequest { /** * Get the request URI. */ URI uri(); /** * Get the request attribute value if present. name the attribute name the attribute value */ Optional<Object> attribute(string name); } /** * Get a mutable map of request attributes. the request attributes */ Map<String, Object> attributes();

48 Javadoc: Flux (Reactor) o Když slova nestačí Obrázky, diagramy /** * Transform the items emitted by this {@link Flux} by applying a synchronous function * to each item. * <p> * <img class="marble" src="..." alt=""> * <p> mapper the synchronous transforming {@link Function} <V> the transformed type * a transformed {@link Flux} */ public final <V> Flux<V> map(function<? super T,? extends V> mapper) {

49 Javadoc : Flux (Reactor)

50 Javadoc - asciiart o Když nemáte obrázek, můžete vzít asciiart /** * Reads complete offer. * <pre> * * * Offer * * * * \/ * * Business Product < Offered Product * * * * \/ \/ * * Business Feature < Offered Feature * * </pre> */ Optional<FinancialProduct> getoffer(productid productid, OfferId offerid);

51 Kód Dodržujte konvence daného jazyka (jména, formátování, ) Orientace na čtenáře kód bude čten víckrát, píšete jej jednou Lenost zde není platným argumentem Jména proměnných (a všeho ostatního) volte dostatečně srozumitelná Příklad z jedné revize: v cele třídě mnoho nevhodných názvů proměnných bi, is, bos, asr, s, m, baos, dos a můj favorit, pole s názvem array Kvíz: co ošetřuje následující podmínka? if(lv >= 0 && df >= 0 && this.hasrows() && df < this.getrows().length) { } Všeho s mírou obecně čím větší rozsah platnosti, tím důležitější je jasné jméno Srozumitelnost!= délka např. význam proměnné i je obecně známý Nepoužívejte jednu proměnnou ke dvěma účelům Ternární operátor je efektní, ale leckdy poněkud nečitelný Kvíz: co vrátí následující výraz? (0 < 1)? 2 : 3 + 4

52 Programming by Coincidence

53 Programming by Coincidence if (typzadosti == ZALOZENI_SMLOUVY) { zalozsmlouvu(); } else { zrussmlouvu(); }

54 Programming by Coincidence if (typzadosti == ZALOZENI_SMLOUVY) { zalozsmlouvu(); } else if (typzadosti == ZRUSENI_SMLOUVY) { zrussmlouvu(); }

55 Programming by Coincidence if (typzadosti == ZALOZENI_SMLOUVY) { zalozsmlouvu(); } else if (typzadosti == ZRUSENI_SMLOUVY) { zrussmlouvu(); } else { } throw new IllegalArgumentException( Nepodporovany typ zadosti: + typzadosti);

56 Programming by Coincidence if (typzadosti == ZALOZENI_SMLOUVY) { zalozsmlouvu(); } else if (typzadosti == ZRUSENI_SMLOUVY) { zrussmlouvu(); } // else do nothing

57 Programming by Coincidence 2 int pocetcelychmesicudokoncekvartalu = 0; switch(mesicvroce%3) { case 0: pocetcelychmesicudokoncekvartalu = 0;break; case 1: pocetcelychmesicudokoncekvartalu = 2;break; case 2: pocetcelychmesicudokoncekvartalu = 1;break; }

58 Programming by Coincidence 2 int pocetcelychmesicudokoncekvartalu = 0; switch(mesicvroce%3) { case 0: pocetcelychmesicudokoncekvartalu = 0;break; case 1: pocetcelychmesicudokoncekvartalu = 2;break; case 2: pocetcelychmesicudokoncekvartalu = 1;break; default: throw new IllegalStateException( "Nastala situace, ke ktere nemuze dojit"); }

59 Je tento konstruktor prázdný záměrně? protected MyObject() { };

60 Je tento konstruktor prázdný záměrně? protected MyObject() { }; /* empty */

61 Dřív to fungovalo entity.id = new EntityId(this.allEntities.size());

62 Fail Fast o Kdo si pamatuje?

63 Fail Fast o o Je-li v programu chyba, měl by selhat co nejdříve Aktivně kontrolujte konzistenci a ošetřujte možné chyby o o Dead programs tell no lies Nejhorší je na chybu přijít až po databázovém commitu

64 Fail Fast - Kontrola parametrů public void setformatter(dateformatter dateformatter) { Assert.notNull(dateFormatter, "DateFormatter must not be null"); } this.dateformatter = dateformatter;

65 Fail Fast - Kontrola stavu objektu public Transaction createtransaction(string name, int timeout) throws NotSupportedException, SystemException { Assert.state(transactionManager!= null, "No JTA TransactionManager available"); }...

66 Unit testy

67 Unit testy o o Kdo píšete? Pravidla?

68 Unit testy o o o o o Psaní unit testů je absolutní samozřejmost. Kvalitní kód bez unit testů je nesmysl. Nejdůležitější je Psát hodně Psát průběžně Aktualizovat Pravidla (podle Uncle Boba): One assert per test Readable Fast Independent Repeatable One assert per test dodržuje málokdo.

69 Příklad: StringUtils (Commons Lang) private static final String[] ARRAY_LIST = {"foo", "bar", "baz"}; private static final String[] NULL_ARRAY_LIST = {null}; private static final String[] EMPTY_ARRAY_LIST = {}; private static final String[] MIXED_ARRAY_LIST = {null, "", "foo"}; private static final Object[] MIXED_TYPE_LIST = {"foo", Long.valueOf(2L)}; private static final String SEPARATOR = ","; private static final String TEXT_LIST_NOSEP = "foobarbaz"; private static final String TEXT_LIST = public void testjoin_arraystring() { assertnull(stringutils.join((object[]) null, null)); assertequals(text_list_nosep, StringUtils.join(ARRAY_LIST, null)); assertequals(text_list_nosep, StringUtils.join(ARRAY_LIST, "")); assertequals("", StringUtils.join(NULL_ARRAY_LIST, null)); assertequals("", StringUtils.join(EMPTY_ARRAY_LIST, null)); assertequals("", StringUtils.join(EMPTY_ARRAY_LIST, "")); assertequals("", StringUtils.join(EMPTY_ARRAY_LIST, SEPARATOR)); assertequals(text_list, StringUtils.join(ARRAY_LIST, SEPARATOR)); assertequals(",,foo", StringUtils.join(MIXED_ARRAY_LIST, SEPARATOR)); assertequals("foo,2", StringUtils.join(MIXED_TYPE_LIST, SEPARATOR)); } assertequals("/", StringUtils.join(MIXED_ARRAY_LIST, "/", 0, MIXED_ARRAY_LIST.length - 1)); assertequals("", StringUtils.join(MIXED_ARRAY_LIST, "", 0, MIXED_ARRAY_LIST.length - 1)); assertequals("foo", StringUtils.join(MIXED_TYPE_LIST, "/", 0, 1)); assertequals("foo/2", StringUtils.join(MIXED_TYPE_LIST, "/", 0, 2)); assertequals("2", StringUtils.join(MIXED_TYPE_LIST, "/", 1, 2)); assertequals("", StringUtils.join(MIXED_TYPE_LIST, "/", 2, 1));

70 Příklad JpaRepository (Spring Data JPA) public class JpaRepositoryTests { CrudRepository<WithIdClass, WithIdClassPK> // DATAJPA-50 public void executescrudoperationsforentitywithidclass() { PersistableWithIdClass entity = new PersistableWithIdClass(1L, 1L); idclassrepository.save(entity); assertthat(entity.getfirst(), is(notnullvalue())); assertthat(entity.getsecond(), is(notnullvalue())); PersistableWithIdClassPK id = new PersistableWithIdClassPK( entity.getfirst(), entity.getsecond()); } assertthat(idclassrepository.findbyid(id), // DATAJPA-266 public void testexistsfordomainobjectswithcompositekeys() {... } // DATAJPA-527 public void executesexistsforentitywithidclass() {... }

71 Unit testy Názvy metod o o o Špatné testfind testvalidate Dobré shouldfindbyidwhenexists shouldthrowexceptionwhenagelessthan18 should_throwexception_when_agelessthan18 executesexistsforentitywithidclass Doporučení Testujeme vlastnosti třídy, ne jednotlivé metody Pro jednu metodu typicky existuje několik testů

72 Nástroje

73 SonarQube o o o Nástroj pro analýzu kvality kódu Statická analýza Testy a coverage Podporuje Java C# JavaScript Doporučení Pouštět analýzu pravidelně Kontinuálně řešit nálezy Nenechat nahromadit technický dluh

74 SonarQube - Přehled

75 SonarQube Issues

76 SonarQube Code smell

77 Perličky

78 Kdy se zobrazí nabídka úvěrů? /** * Method returns true if credit lines should be shown. * true if credit lines should be shown otherwise false */ public boolean isshowcreditlines() { return // Showing depends of dynamic property and if user is in pilot mode (show only in pilot to // users in pilot mode if constant is true, if false, show to all) ((ebankinguser.getpilot() == null) (!EbankingConstants.CREDIT_LINES_FUNCTIONS_PILOT) (Boolean.TRUE.equals(ebankingUser.getPilot()) && EbankingConstants.CREDIT_LINES_FUNCTIONS_PILOT)) // and (home tab is shown and there are no campaigns) && ((menubean.ishometab() &&!bcs.isshowcampaigns()) // or ((we are on loans tab (TAB_LOANS) on specific menu item (MNU_LST_CRE_MORA_GET) // or on eshop (TAB_ESHOP)) and client has no approved application) (((menubean.iswantedtab(menunames24.tab_loans.name()) // THU: tento kod je zakomentovan, protoze nefuguje nastavovani actualmenuitem spravne /*&& (menubean.getactualmenuitem()!= null) && menubean.getactualmenuitem().name().touppercase().equals( MenuNameS24.MNU_LST_CRE_MORA_GET.name())*/ ) menubean.iswantedtab(menunames24.tab_eshop.name())) && bcs.getapprovedapplicationid() == null)) // and there exist some credit lines &&!isitemlistempty(); }

79 Map není nikdy dost public interface IValidator { public void validate( Object[] objects, Map<Object, Object> globalparams, Map<Object, Object> localparams, Map<Object, Object> rowparams, Locale locale); }

80 DB procedura... ** Nazev ulozene procedury: esipo_s_prehl_rotv ** ** Funcionalita: Procedura slouzi ** ** Vstupni parametry:...

81 Trocha logiky public void setplatnostdoodvolani(boolean platnostdoodvolani) { if (platnostkontaktniadresy == null) { platnostkontaktniadresy = new IntervalOdDo(); } else { platnostkontaktniadresy = new IntervalOdDo( platnostkontaktniadresy.getzacatek(), null); } }

82 Čím se od sebe metody liší? /** * Directory interface poskytovany modulum skrze WebService webovou * aplikaci datovych schranek. */ public interface IDSDirectoryService { public ListResponse<Issuer> getissuer( IssuerSearchCriteria searchcriteria, String personid); } public ListResponse<Issuer> findissuer( IssuerSearchCriteria searchcriteria, String personid);

83 Handle stuff dataprocessor.processdata(elementsonpages);

84 Literatura o The Pragmatic Programmer: From Journeyman to Master Andrew Hunt, David Thomas o Clean Code: A Handbook of Agile Software Craftsmanship Robert C. Martin

85 Dotazy? 85

86 Děkuji za pozornost Profinit, s.r.o. Tychonova 2, Praha 6 Telefon Web LinkedIn linkedin.com/company/profinit Twitter twitter.com/profinit_eu

Construction. Jiří Toušek

Construction. Jiří Toušek Construction Jiří Toušek jiri.tousek@profinit.eu https://profinit.eu/znalosti/ 29.10.2018 Architektura vs. návrh vs. implementace Architecture Návrh v kostce:? Design? Implementation Dekomponuj na několik

Více

Design and Construction

Design and Construction Design and Construction Tomáš Krátký, Bohumír Zoubek, Jiří Toušek tomas.kratky, bohumir.zoubek, jiri.tousek@profinit.eu http://www.profinit.eu/cz/podpora-univerzit/univerzitni-vyuka 30.3.2016 Připomenutí

Více

Čipové karty Lekařská informatika

Čipové karty Lekařská informatika Čipové karty Lekařská informatika Následující kód je jednoduchou aplikací pro čipové karty, která po překladu vytváří prostor na kartě, nad kterým jsou prováděny jednotlivé operace a do kterého jsou ukládány

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Struktura programu Vytvoření nové aplikace Struktura programu Základní syntaktické elementy První aplikace Verze pro akademický rok 2012/2013 1 Nová aplikace NetBeans Ve vývojovém

Více

Abstraktní datové typy: zásobník

Abstraktní datové typy: zásobník Abstraktní datové typy: zásobník doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Abstraktní datové typy omezené rozhraní

Více

Neměnné objekty. Tomáš Pitner, upravil Marek Šabo

Neměnné objekty. Tomáš Pitner, upravil Marek Šabo Neměnné objekty Tomáš Pitner, upravil Marek Šabo Neměnné objekty Neměnný (immutable) objekt nemůže být po jeho vytvoření modifikován Bezpečně víme, co v něm až do konce života bude Tudíž může být souběžně

Více

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance

Více

Agenda. Docházka Návrat k minulému praktickému cvičení Zápočtové práce. Dokumentace. Dotazy, přání, stížnosti. Co, jak a proč dokumentovat

Agenda. Docházka Návrat k minulému praktickému cvičení Zápočtové práce. Dokumentace. Dotazy, přání, stížnosti. Co, jak a proč dokumentovat QA & Dokumentace Agenda Docházka Návrat k minulému praktickému cvičení Zápočtové práce QA opakování Dokumentace Co, jak a proč dokumentovat Dotazy, přání, stížnosti Kde je chyba? public static StringBuilder

Více

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA gklir@binghamton.edu

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA gklir@binghamton.edu A Tutorial Advances in query languages for similarity-based databases George J. Klir Petr Krajča State University of New York (SUNY) Binghamton, New York 13902, USA gklir@binghamton.edu Palacky University,

Více

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo Statické proměnné a metody Tomáš Pitner, upravil Marek Šabo Úvod Se statickou metodou jsme se setkali už u úplně prvního programu - Hello, world! public class Demo { public static void main(string[] args)

Více

JAVA. Další jazyky kompilovatelné do Java byte-code

JAVA. Další jazyky kompilovatelné do Java byte-code JAVA Další jazyky kompilovatelné do Java byte-code Přehled Scala objektový a funkcionální jazyk Closure funkcionální jazyk dialekt Lispu Groovy skritpovací jazyk Kotlin nová Java Jython Java implementace

Více

Projekty pro výuku programování v jazyce Java

Projekty pro výuku programování v jazyce Java JIHOČESKÁ UNIVERZITA V ČESKÝCH BUDĚJOVICÍCH Pedagogická fakulta Katedra informatiky Akademický rok: 2006/2007 TEZE BAKALÁŘSKÉ PRÁCE Projekty pro výuku programování v jazyce Java Jméno: František Přinosil

Více

SonarQube - statická analýza kódu a její zapojení v CI. Babu Červenková Big Data developer - Java Fulltext - Robot tým

SonarQube - statická analýza kódu a její zapojení v CI. Babu Červenková Big Data developer - Java Fulltext - Robot tým SonarQube - statická analýza kódu a její zapojení v CI Babu Červenková Big Data developer - Java Fulltext - Robot tým Vývojový proces (zjednodušeně) Ticket automaticky build feature branch prgám jako o

Více

typová konverze typová inference

typová konverze typová inference Seminář Java Programování v Javě II Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Programování v Javě (2) 1/ 36 Téma přednášky Rozhraní: použití, dědičnost Hierarchie

Více

Michal Podzimek 6. 11. 2013

Michal Podzimek 6. 11. 2013 Testování Test NG Michal Podzimek 6. 11. 2013 1 Úvod public class SimpleTest { @BeforeClass public void setup() { // code that will be invoked // when this test is instantiated @Test public void afasttest()

Více

14.4.1. Typický prvek kolekce pro české řazení

14.4.1. Typický prvek kolekce pro české řazení 14.4. Co všechno by měl mít typický prvek kolekce 177 Poznámka: Třídy BigInteger, BigDecimal a Date budou vysvětleny v částech [15./183, [16./185 a [18.1./204. 14.4.1. Typický prvek kolekce pro české řazení

Více

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod. Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání

Více

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo Datové typy v Javě Tomáš Pitner, upravil Marek Šabo Úvod k datovým typům v Javě Existují dvě základní kategorie datových typů: primitivní a objektové Primitivní v proměnné je uložena přímo hodnota např.

Více

Lambda funkce Novinky v interfaces Streamy Optional - aneb zbavujeme se null. Java 8. Ondřej Hrstka

Lambda funkce Novinky v interfaces Streamy Optional - aneb zbavujeme se null. Java 8. Ondřej Hrstka Java 8 Ondřej Hrstka Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 13 A0B36PR2 Programování 2 Ondřej Hrstka, 2015 A0B36PR2 Přednáška 13: Java 8 1 / 26 Obsah Lambda

Více

KIV/PIA 2013 Jan Tichava

KIV/PIA 2013 Jan Tichava KIV/PIA 2013 Jan Tichava Java EE JSF, PrimeFaces Spring JPA, EclipseLink Java Platform, Enterprise Edition Persistence Zobrazovací vrstva Interakce aplikací Deployment Java Persistence API Enterprise

Více

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV) Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Enterprise Java

Více

Object-relational mapping (JPA, Hibernate)

Object-relational mapping (JPA, Hibernate) Vysoká škola báňská - technická univerzita Ostrava 17. března 2010 Obsah 1 2 3 4 namapovat chování objektového světa do relačních struktur a naopak, tak aby spolu mohli jednoduše komunikovat většina moderních

Více

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí Kolekce obecně Seznamy a iterátory doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Kolekce ::= homogenní sada prvků

Více

Výčtový typ strana 67

Výčtový typ strana 67 Výčtový typ strana 67 8. Výčtový typ V této kapitole si ukážeme, jak implementovat v Javě statické seznamy konstant (hodnot). Příkladem mohou být dny v týdnu, měsíce v roce, planety obíhající kolem slunce

Více

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Využití OOP v praxi -- Knihovna PHP -- Interval.cz Page 1 of 6 Knihovna PHP Využití OOP v praxi Po dlouhé teorii přichází na řadu praxe. V následujícím textu si vysvětlíme možnosti přístupu k databázi pomocí různých vzorů objektově orientovaného programování

Více

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance

Více

Java a XML. 10/26/09 1/7 Java a XML

Java a XML. 10/26/09 1/7 Java a XML Java a XML Java i XML jsou přenositelné V javě existuje podpora pro práci s XML, nejčastější akce prováděné při zpracování XML: načítání XML elementů generování nových elementů nebo úprava starého zápis

Více

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text()); Anotace a Hibernate Aleš Nosek, Ondřej Vadinský, Daniel Krátký Anotace v Javě Anotace jsou novinkou v Javy verze 5. Anotace umožňují doplnit kód Javy o dodatečné informace. Zapisují se přímo do zdrojového

Více

Zápis programu v jazyce C#

Zápis programu v jazyce C# Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač

Více

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. 1. Odkrokujte následující program a s použitím notace z přednášky popište stav paměti

Více

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5); Programovací jazyk PHP doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah Třídy a objekty Výjimky Webové aplikace

Více

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC OMO 4 - Creational design patterns A Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC Ing. David Kadleček, PhD. kadlecd@fel.cvut.cz, david.kadlecek@cz.ibm.com 1 Creational

Více

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth Evropský sociální fond. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace Ing. Ondřej Guth Katedra teoretické informatiky Fakulta informačních technologií České vysoké učení technické v Praze

Více

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance

Více

PREPROCESOR POKRAČOVÁNÍ

PREPROCESOR POKRAČOVÁNÍ PREPROCESOR POKRAČOVÁNÍ Chybová hlášení V C# podobně jako v C++ existuje direktiva #error, která způsobí vypsání chybového hlášení překladačem a zastavení překladu. jazyk C# navíc nabízí direktivu #warning,

Více

Chyby a výjimky. Chyba. Odkud se chyby berou? Kdo chyby opravuje? Co můžete dělat jako programátor? Dvě hlavní metody práce s chybami.

Chyby a výjimky. Chyba. Odkud se chyby berou? Kdo chyby opravuje? Co můžete dělat jako programátor? Dvě hlavní metody práce s chybami. Chyby a výjimky Petr Pošík Katedra kybernetiky, FEL ČVUT v Praze OI, B4B33RPH Řešení problémů a hry, 2016 Chyba Stav programu (podmínky), který mu brání v dosažení požadovaného výsledku. Odkud se chyby

Více

KTE / ZPE Informační technologie

KTE / ZPE Informační technologie 4 KTE / ZPE Informační technologie Ing. Petr Kropík, Ph.D. email: pkropik@kte.zcu.cz tel.: +420 377 63 4639, +420 377 63 4606 (odd. informatiky) Katedra teoretické elektrotechniky FEL ZČU Plzeň Největší

Více

Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15

Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15 Platforma Java Objektově relační mapování II Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, 2016 1 / 15 Dotazování vyhledání objektu podle

Více

Iterator & for cyklus

Iterator & for cyklus Iterator & for cyklus for (Object o : foo) funguje pokud je foo pole nebo je foo iterovatelné jako to zařídit? implementovat interface java.lang.iterable Iterable má jednu metodu java.util.iterator iterator()

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

20. Projekt Domácí mediotéka

20. Projekt Domácí mediotéka Projekt Domácí mediotéka strana 211 20. Projekt Domácí mediotéka 20.1. Základní popis, zadání úkolu V projektu Domácí mediotéka (Dome) se jednoduchým způsobem evidují CD a videa. Projekt je velmi jednoduchý

Více

Testovací metoda. Testovací metoda. public class SimpleTest {

Testovací metoda. Testovací metoda. public class SimpleTest { Testování TestNG public class SimpleTest { @BeforeClass public void setup() { // code that will be invoked // when this test is instantiated @Test public void afasttest() { System.out.println("Fast test");

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci Základy programovaní 4 (Java) Stream API Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci Petr Krajča (UP) KMI/ZP4JV 5. listopad, 2014 1 / 10 Stream API Java 8 nový přístup k práci s kolekcemi

Více

Introduction to MS Dynamics NAV

Introduction to MS Dynamics NAV Introduction to MS Dynamics NAV (Item Charges) Ing.J.Skorkovský,CSc. MASARYK UNIVERSITY BRNO, Czech Republic Faculty of economics and business administration Department of corporate economy Item Charges

Více

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných Tematický celek 03 3.1 Proměnné Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace. 3.1.1 Deklarace proměnných Dim jméno_proměnné [As typ] - deklarace uvnitř procedury platí pouze pro

Více

Java Výjimky Java, zimní semestr

Java Výjimky Java, zimní semestr Java Výjimky 1 Výjimky (exceptions) hlášení a ošetření chyb výjimka signalizuje nějaký chybový stav výjimka = instance třídy java.lang.throwable dvě podtřídy java.lang.error a java.lang.exception konkrétní

Více

První kapitola úvod do problematiky

První kapitola úvod do problematiky První kapitola úvod do problematiky Co je to Flex Adobe Flex je ActionSript (AS) framework pro tvorbu Rich Internet Aplications (RIA), tedy knihovna AS tříd pro Flash. Flex používáme k vytvoření SWF souboru

Více

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4 Fronta (Queue) Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Fronta uplatňuje mechanismus přístupu FIFO first

Více

RMI Remote Method Invocation

RMI Remote Method Invocation 2. cvičení RMI Remote Method Invocation 2007/09 ver.2.0 1 RMI co to je? vyvolání metody z jiné JVM lokalizace vzdáleného objektu komunikace se vzdálenými objekty přenos objektu v bytecode typicky klient

Více

Seminář Java IV p.1/38

Seminář Java IV p.1/38 Seminář Java IV Seminář Java IV p.1/38 Rekapitulace Deklarace tříd Proměnné, metody, konstruktory, modifikátory přístupu Datové typy primitivní, objektové, pole Dědičnost Řídící konstrukce Podmínky, cykly

Více

Generické typy. Podrobněji: The Java Language Specification ( Third Edition ) , 18

Generické typy. Podrobněji: The Java Language Specification ( Third Edition ) , 18 Generické typy jsou třídy či interfejsy deklarující tzv. typové parametry jimiž: - systematizují typovou kontrolu kompilátorem, - vyjadřují jasněji smysl, zlepšují čitelnost a robustnost programu, - ulehčují

Více

Generické programování

Generické programování Generické programování Od C# verze 2.0 = vytváření kódu s obecným datovým typem Příklad generická metoda, zamění dva parametry: static void Swap(ref T p1, ref T p2) T temp; temp = p1; p1 = p2; p2 =

Více

Java Řetězce Java, zimní semestr

Java Řetězce Java, zimní semestr Java Řetězce 1 Řetězec instance třídy java.lang.string kompilátor s nimi zachází téměř jako s primit. typy řetězcové konstanty = instance třídy String nezměnitelné!!! pro změny třídy StringBuffer, StringBuilder

Více

návrhový vzor Singleton.

návrhový vzor Singleton. KAPITOLA 2 Návrhový vzor Singleton Jazyk PHP 5 vám pomocí klíčových slov public, protected a private umožňuje kontrolovat, kdo získá přístup k určitým atributům a metodám třídy. Dále vám jazyk PHP 5 umožňuje

Více

DPKOM_06 Dědičnost entit a zpětná volání posluchači

DPKOM_06 Dědičnost entit a zpětná volání posluchači DPKOM_06 Dědičnost entit a zpětná volání posluchači 1 Obsah přednášky Jedna tabulka pro hierarchii tříd Tabulka pro konkrétní třídu Tabulka pro podtřídu Neentitní základní třídy Události zpětného volání

Více

Návrh softwarových systém. Návrh softwarových systémů

Návrh softwarových systém. Návrh softwarových systémů Návrh softwarových systém ů - Java 8 Jiří Šebek Návrh softwarových systémů (B6B36NSS) Co je nového? Default interface methods Lambda expressions Method references and repeatable annotations Streams Functional

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu. Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus

Více

10 Generické implementace

10 Generické implementace 10 Generické implementace Main Entry: 1 ge ner ic Pronunciation: j&-'ner-ik Function: adjective Etymology: French générique, from Latin gener-, genus birth, kind, class 1 a : relating to or characteristic

Více

Vláknové programování část V

Vláknové programování část V Vláknové programování část V Lukáš Hejmánek, Petr Holub {xhejtman,hopet@ics.muni.cz Laboratoř pokročilých síťových technologií PV192 2014 03 25 1/25 Přehled přednášky Paměťový model Javy GUI v Javě Vlákna

Více

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce Databázové systémy 2 Jméno a příjmení: Jan Tichava Osobní číslo: Studijní skupina: čtvrtek, 4 5 Obor: ININ SWIN E-mail: jtichava@students.zcu.cz Databázové systémy II. KIV/DB2 LS 2007/2008 Zadání semestrální

Více

Anotace a Hibernate. Aleš Nosek Ondřej Vadinský Daniel Krátký

Anotace a Hibernate. Aleš Nosek Ondřej Vadinský Daniel Krátký Anotace a Hibernate Aleš Nosek Ondřej Vadinský Daniel Krátký Anotace v Javě novinka Javy 5 umožňují k Java kódu přidávat dodatečné informace (podobně jako JavaDoc) za předchůdce anotací je možné považovat

Více

UJO Framework. revoluční architektura beans. verze 0.80 http://ujoframework.org/

UJO Framework. revoluční architektura beans. verze 0.80 http://ujoframework.org/ UJO Framework revoluční architektura beans verze 0.80 http://ujoframework.org/ Pavel Pone(c), září 2008 Historie rok 2004 upravené objekty z frameworku Cayenne nevýhodou byla špatná typová kontrola rok

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

Verzování a publikace dat na webu za pomoci PostgreSQL

Verzování a publikace dat na webu za pomoci PostgreSQL Prague PostgreSQL Developers' Day 2013 Verzování a publikace dat na webu za pomoci PostgreSQL Jan Pěček Kdo jsem? Jan Pěček Programátor PostgreSQL Jyxo, s.r.o. (Blog.cz) MAFRA, a.s. - Internet Trading

Více

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/04.0006

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/04.0006 Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/04.0006 Lekce 1 Jazyk Java Tento projekt je spolufinancován Evropským sociálním fondem

Více

Doxygen. Jakub Břečka

Doxygen. Jakub Břečka Doxygen Jakub Břečka Úvod Proč a typy dokumentace na přednášce Programátorská dokumentace (popis implementace, tříd, funkcí, API) Doxygen, JavaDoc, Sandcastle, AppleDoc, Doxygen = klasika mezi dokumentačními

Více

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. 1. Odkrokujte následující program a s použitím notace z přednášky sledujte stav paměti

Více

NA CO SI DÁT POZOR V JAVASCRIPTU? Angular.cz

NA CO SI DÁT POZOR V JAVASCRIPTU? Angular.cz NA CO SI DÁT POZOR V JAVASCRIPTU? Milan Lempera @milanlempera Víťa Plšek @winsik Angular.cz STRICT MODE volitelně aktivovatelná omezenější varianta JS 'use strict'; a = 11; // strict mode pro celý soubor

Více

Skripty základy VB, vestavěné objekty, příklady

Skripty základy VB, vestavěné objekty, příklady Skripty základy VB, vestavěné objekty, příklady Tento dokument popisuje základy VB, vestavěné objekty, jejich metody a vlastnosti. Na závěr jsou uvedeny typické příklady použití. Stav ke dni: 9.12.2006

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux B0M33BDT Technologie pro velká data Supercvičení SQL, Python, Linux Sergej Stamenov, Jan Hučín 18. 10. 2017 Osnova cvičení Linux SQL Python 2 SQL pro uživatele aneb co potřebuje znát a umět bigdatový uživatel:

Více

Jazyk C# (seminář 6)

Jazyk C# (seminář 6) Jazyk C# (seminář 6) Pavel Procházka KMI 29. října 2014 Delegát motivace Delegáty a události Jak docílit v C# funkcionální práce s metodami v C je to pomocí pointerů na funkce. Proč to v C# nejde pomocí

Více

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy Základní pojmy Stromy doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Graf uzly hrany orientované / neorientované Souvislý

Více

Distribuované systémy a výpočty

Distribuované systémy a výpočty Distribuované systémy a výpočty X36DSV Jan Janeček XML-RPC jednoduchá definice www.xmlrpc.com implementace obvykle opřené o XML parser X36DSV - Distribuované systémy a výpočty (3) 2 XML-RPC jednoduché

Více

1, Žáci dostanou 5 klíčových slov a snaží se na jejich základě odhadnout, o čem bude následující cvičení.

1, Žáci dostanou 5 klíčových slov a snaží se na jejich základě odhadnout, o čem bude následující cvičení. Moje hlavní město Londýn řešení: 1, Žáci dostanou 5 klíčových slov a snaží se na jejich základě odhadnout, o čem bude následující cvičení. Klíčová slova: capital, double decker bus, the River Thames, driving

Více

Code Contracts. Robert Haken [MVP ASP.NET, MCT] Software architect, Owner at HAVIT, s.r.o. knowledge-base.havit.cz

Code Contracts. Robert Haken [MVP ASP.NET, MCT] Software architect, Owner at HAVIT, s.r.o. knowledge-base.havit.cz Code Contracts Robert Haken [MVP ASP.NET, MCT] Software architect, Owner at HAVIT, s.r.o. knowledge-base.havit.cz Contracts volaná strana deklaruje, jak se chová vzniká dohoda mezi volající a volanou stranou

Více

Java Cvičení 05. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

Java Cvičení 05.  CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics Java Cvičení 05 http://d3s.mff.cuni.cz CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics Test 1 Co program vypíše? Hello world Nic Něco jiného package cz.cuni.mff.java.example05.tests; public

Více

Compression of a Dictionary

Compression of a Dictionary Compression of a Dictionary Jan Lánský, Michal Žemlička zizelevak@matfyz.cz michal.zemlicka@mff.cuni.cz Dept. of Software Engineering Faculty of Mathematics and Physics Charles University Synopsis Introduction

Více

JAVA V Assertions Java, zimní semestr

JAVA V Assertions Java, zimní semestr JAVA Assertions 1 Assertion od Java 1.4 příkaz obsahující výraz typu boolean programátor předpokládá, že výraz bude vždy splněn (true) pokud je výraz vyhodnocen na false -> chyba používá se pro ladění

Více

Programování v Javě I. Leden 2008

Programování v Javě I. Leden 2008 Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Leden 2008 Radek Kočí Seminář Java Programování v Javě (1) 1/ 45 Téma přednášky Datové typy Deklarace třídy Modifikátory

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV) Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Enterprise Java

Více

Programování v Javě I. Únor 2009

Programování v Javě I. Únor 2009 Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Únor 2009 Radek Kočí Seminář Java Programování v Javě (1) 1/ 44 Téma přednášky Datové typy Deklarace třídy Modifikátory

Více

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. 1. Odkrokujte následující program a s použitím notace z přednášky sledujte stav paměti

Více

Úvod do programování v jazyce Java

Úvod do programování v jazyce Java Úvod do programování v jazyce Java Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci 5. říjen, 2011 Petr Krajča (UP) KMI/UP3J: Seminář I. 5.10.2011 1 / 17 Organizační informace email: petr.krajca@upol.cz

Více

Objektově orientované programování

Objektově orientované programování Objektově orientované programování Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 7 A0B36PR1 Programování 1 Jan Faigl, 2015 A0B36PR1 Přednáška 7: Objektově

Více

Teoretické minimum z PJV

Teoretické minimum z PJV Teoretické minimum z PJV Pozn.: následující text popisuje vlastnosti jazyka Java zjednodušeně pouze pro potřeby výuky. Třída Zavádí se v programu deklarací třídy což je část programu od klíčových slov

Více

PG 9.5 novinky ve vývoji aplikací

PG 9.5 novinky ve vývoji aplikací PG 9.5 novinky ve vývoji aplikací P2D2 2016 Antonín Houska 18. února 2016 Část I GROUPING SETS, ROLLUP, CUBE Agregace Seskupení řádků tabulky (joinu) do podmnožin podle určitého kĺıče. Za každou podmnožinu

Více

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39 Programování v C# Hodnotové datové typy, řídící struktury Petr Vaněček 1 / 39 Obsah přednášky Referenční datové typy datové položky metody přístupové metody accessory, indexery Rozhraní Pole 2 / 39 Třídy

Více

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní) Příklad aplikace Klient/Server s Boss/Worker modelem (informativní) Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze A0B36PR2 Programování 2 Jan Faigl, 2015 A0B36PR2

Více

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML Obsah přednášky Webové služby a XML Miroslav Beneš Co jsou to webové služby Architektura webových služeb SOAP SOAP a Java SOAP a PHP SOAP a C# Webové služby a XML 2 Co jsou to webové služby rozhraní k

Více

Jakub Čermák <jakub@jcermak.cz> http://www.jcermak.cz. Microsoft Student Partner

Jakub Čermák <jakub@jcermak.cz> http://www.jcermak.cz. Microsoft Student Partner Jakub Čermák http://www.jcermak.cz Microsoft Student Partner Úvod, příklady použití, trocha teorie Struktura aplikace Typy obecně, primitivní typy, speciální typy Podmínky, cykly, namespaces

Více

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář Vazba (binding) Tabulka symbolů Miroslav Beneš Dušan Kolář vazba = spojení mezi entitou a vlastností okamžik vazby (binding time) při návrhu jazyka při implementaci jazyka během překladu/spojování/zavádění

Více

Datové struktury. alg12 1

Datové struktury. alg12 1 Datové struktury Jedna z klasických knih o programování (autor prof. Wirth) má název Algorithms + Data structures = Programs Datová struktura je množina dat (prvků, složek, datových objektů), pro kterou

Více

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni! Java práce s řetězci Trochu povídání.. Řetězce jsou v Javě reprezentovány instancemi tříd StringBuffer a String. Tyto třídy jsou součástí balíčku java.lang, tudíž je možno s nimi pracovat ihned bez nutného

Více

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7 Pascal Katedra aplikované kybernetiky Ing. Miroslav Vavroušek Verze 7 Proměnné Proměnná uchovává nějakou informaci potřebnou pro práci programu. Má ve svém oboru platnosti unikátní jméno. (Připadne, musí

Více