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

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

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

Java Enum Java, zimní semestr ,2017 1

Algoritmizace a programování

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/

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Programování v Javě I. Leden 2008

9 - Map/filter/reduce OMO. Ing. David Kadleček, PhD

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

Abstraktní datové typy: zásobník

KTE / ZPE Informační technologie

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

Úvod do programování - Java. Cvičení č.4

Java - řazení objektů

Generické programování

Programovací jazyk Java

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

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

RMI Remote Method Invocation

UJO Framework. revoluční architektura beans. verze

Úvod do programovacích jazyků (Java)

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

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

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

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

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

Pokročilé programování na platformě Java. Úvod

1. Téma 12 - Textové soubory a výjimky

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

Teoretické minimum z PJV

8 Třídy, objekty, metody, předávání argumentů metod

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

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

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

Výčtový typ strana 67

1. Programování proti rozhraní

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

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.

Objektově orientované programování

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

Java Výjimky Java, zimní semestr

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

typová konverze typová inference

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

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

Dědičnost (inheritance)

Abstraktní třída a rozhraní

RMI - Distribuované objekty v Javě

Úvod do programovacích jazyků (Java)

X-komponenty 3.1. Uživatelská příručka. J. Kocman, V. Trojan

Iterator & for cyklus

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

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Java - výjimky. private void vstup() throws IOException {... }

OOPR_05. Případové studie

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

Principy objektově orientovaného programování

KTE / ZPE Informační technologie

9. přednáška - třídy, objekty

Úvod do programování v jazyce Java

boolean hasnext() Object next() void remove() Kolekce

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

Výchozí a statické metody rozhraní. Tomáš Pitner, upravil Marek Šabo

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

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

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

ADT/ADS = abstraktní datové typy / struktury

Algoritmizace a programování

Jazyk C# (seminář 6)

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Seminář Java IV p.1/38

Úvod Přetěžování Generika Kolekce Konec. Programování v C# Další jazykové konstrukce. Petr Vaněček 1 / 31

20. Projekt Domácí mediotéka

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

PREPROCESOR POKRAČOVÁNÍ

Zápis programu v jazyce C#

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

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

7. Dynamické datové struktury

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

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

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

Seminář Java II p.1/43

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

Distribuované systémy a výpočty

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

Tvorba informačních systémů

Návrhové vzory Tvorba objektů

Datové struktury. alg12 1

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

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

Typický prvek kolekce pro české řazení

Vytváření a použití knihoven tříd

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

IRAE 07/08 Přednáška č. 7. Začátek (head)

Skriptovací jazyky. Obsah

Základy objektové orientace I. Únor 2010

Simulace. Martin Pergel

Transkript:

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 interfaces Map extensions The new Date API Více.. 2

P ř edchozí verze Java 5 (září 2004) Generika Anotace Enum Java 6 (prosinec 2006) skriptování API pro skriptovací jazyky: Scripting Language Support (JSR 223) a vestavěná implementace JavaScriptu Java Compiler API (JSR 199) možnost volat kompilátor z programu 3

P ř edchozí verze Java 7 (červenec 2011), OpenJDK je referenční implementací 4 Javy SE 7. invokedynamic podpora dynamických jazyků v JVM, obecně se z JVM stává platforma pro běh různých jazyků, ne jen Javy switch podle Stringů AutoCloseable zdroje implementující toto rozhraní může automaticky zavírat try ( ) { blok a nemusí se o jejich zavírání explicitně starat programátor tzv. diamantový operátor příklad :new ArrayList<T>() catch-multiple zachytávání více typů výjimek v jednom catch rozšířené atributy API pro práci s rozšířenými atributy souborů a symbolickými odkazy

Default interface methods non-abstract method implementations to interfaces by utilizing the default keyword. interface Formula { double calculate(int a); default double sqrt(int a) { return Math.sqrt(a); 5

Lambda expressions Zjednodušení vývoje a přináší funkcionální programování do Javy Definice : parameter -> expression body 6

Lambda expressions //pomocí anonymní třídy List<String> names = Arrays.asList("peter", "anna", "mike", "xenia"); Collections.sort(names, new Comparator<String>() { @Override public int compare(string a, String b) { return b.compareto(a); ); //lambda 1 Collections.sort(names, (String a, String b) -> { return b.compareto(a); ); //lambda 2 Collections.sort(names, (String a, String b) -> b.compareto(a)); 7

Lambda expressions public class Java8Tester { public static void main(string args[]){ Java8Tester tester = new Java8Tester(); //with type declaration MathOperation addition = (int a, int b) -> a + b; //with out type declaration MathOperation subtraction = (a, b) -> a - b; interface MathOperation { int operation(int a, int b); private int operate(int a, int b, MathOperation mathoperation){ return mathoperation.operation(a, b); //with return statement along with curly braces MathOperation multiplication = (int a, int b) -> { return a * b; ; //without return statement and without curly braces MathOperation division = (int a, int b) -> a / b; System.out.println("10 + 5 = " + tester.operate(10, 5, addition)); System.out.println("10-5 = " + tester.operate(10, 5, subtraction)); System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication)); System.out.println("10 / 5 = " + tester.operate(10, 5, division)); 8

Lambda scope Na co si dát pozor! int num = 1; Converter<Integer, String> stringconverter = (from) -> String.valueOf(from + num); //ok přeloží se až sem //num nemusí být final od anonymní třídy num = 3; //zapisovat do num mimo scope lambdy je zakázáno //v době překladu totiž num musí být už final 9

Functional Interfaces rozhraní (interface), která mají právě jednu abstraktní metodu. Kontrola typovosti pro lambda výrazy @FunctionalInterface interface Converter<F, T> { T convert(f from); Converter<String, Integer> converter = (from) -> Integer.valueOf(from); Integer converted = converter.convert("123"); System.out.println(converted); // 123 10

Method references Pomocí klíčového znaku :: můžeme předávat odkazy na funkce a konstruktory Converter<String, Integer> converter = (from) -> Integer.valueOf(from); Integer converted = converter.convert("123"); System.out.println(converted); // 123 Converter<String, Integer> converter = Integer::valueOf; Integer converted = converter.convert("123"); System.out.println(converted); // 123 11

Method references Další ukázka ale s instanční metodou class Something { String startswith(string s) { return String.valueOf(s.charAt(0)); Something something = new Something(); Converter<String, String> converter = Something::startsWith; String converted = converter.convert("java"); System.out.println(converted); // "J" 12

Method references Další ukázka s konstruktorem interface PersonFactory<P extends Person> { P create(string firstname, String lastname); class Person { String firstname; String lastname; Person() { PersonFactory<Person> personfactory = Person::new; Person person = personfactory.create("peter", "Parker"); Person(String firstname, String lastname) { this.firstname = firstname; this.lastname = lastname; 13

Predikáty Funkce které vrací true nebo false Predicate<String> predicate = (s) -> s.length() > 0; predicate.test("foo"); // true predicate.negate().test("foo"); // false Predicate<Boolean> nonnull = Objects::nonNull; Predicate<Boolean> isnull = Objects::isNull; Predicate<String> isempty = String::isEmpty; Predicate<String> isnotempty = isempty.negate(); 14

Streams Reprezentují sekvenci elementů (vytváříme z listů, map apod..) Typy : intermediate (vrací typ) Terminal (vrací stream) Ulehčují práci s kolekcemi Mohou pracovat sekvenčně i paralelně Možnost generovat spousty statistických informací (lazy initialization jinak by to zpomalovalo výkon) 15

Streams p ř íklady //kolekce List<String> stringcollection = new ArrayList<>(); stringcollection.add("string");.. //filter example StringCollection.stream(). //intermediate filter((s) -> s.startswith("s"))//intermediate.foreach(system.out::println);//terminal (void) //sorted stringcollection.stream().sorted().filter((s) -> s.startswith("s")).foreach(system.out::println); 16

Streams p ř íklady //kolekce List<String> stringcollection = new ArrayList<>(); stringcollection.add("string");.. //filter example StringCollection.stream(). //intermediate filter((s) -> s.startswith("a"))//intermediate.foreach(system.out::println);//terminal (void) //sorted stringcollection.stream().sorted().filter((s) -> s.startswith("a")).foreach(system.out::println); 17

Sorting Java 7 vs Java 8 přístup Array.sort(myArray); //využívá jen jedno jádro počítače Arrays.parallelSort(myArray); //využívá paralelní přístup //rozdělý kolekci na několik částí, paralelně setřídí a vrátí zpět //rychlejší, výhodnější otázka : bude algoritmus vždy 2x rychlejší když poběží na 2 procesorech? (paralelismus se dá zářídit na dvou úrovních vlákna a procesory) 18

Sequential Sort long t0 = System.nanoTime(); long count = values.stream().sorted().count(); System.out.println(count); long t1 = System.nanoTime(); long millis = TimeUnit.NANOSECONDS.toMillis(t1 - t0); System.out.println(String.format("sequential sort took: %d ms", millis)); // sequential sort took: 899 ms 19

Parallel Sort long t0 = System.nanoTime(); long count = values.parallelstream().sorted().count(); System.out.println(count); long t1 = System.nanoTime(); long millis = TimeUnit.NANOSECONDS.toMillis(t1 - t0); System.out.println(String.format("parallel sort took: %d ms", millis)); // parallel sort took: 472 ms 20

D ě kuji za pozornost Jiří Šebek 21