Inleiding. Revolutie Functioneel Programmeren Java 8. Van$java$8$alleen$functioneel$programmeren. \begin{programma}

Vergelijkbare documenten
Inleiding. Het probleem 二 零 十 五 年 三 月 二 十 四 日. \begin{programma} Inleiding Revolutie Functioneel Programmeren Java 8

Elementary Data Structures 3

Modelleren en Programmeren

Java Programma structuur

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

NAAM: Programmeren 1 Examen 29/08/2012

Ingebouwde klassen & methodes

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Modelleren en Programmeren

inleiding theoretische informatica practicum 1 deadline woensdag 20 februari 2008 om uur

public Paneel() { knop = new JButton( Klik ); knop.addactionlistener( new KnopHandler() ); tekstvak = new JTextField(10); add(knop); add(tekstvak);

Kwis (3) class X { public void a() { System.out.println("x"); public static void main(string[] args) { X x = new X();

Modulewijzer Tirdat01

Een topprogrammeur in het OO programmeren is Graig Larman. Hij bedacht de volgende zin:

Tentamen Imperatief Programmeren

Modelleren en Programmeren

Tentamen Objectgeorienteerd Programmeren

Kleine cursus PHP5. Auteur: Raymond Moesker

Modelleren en Programmeren

Zelftest Inleiding Programmeren

Hoofdstuk 2. Week 4: Datastructuren. 2.1 Leesopdracht. 2.2 Bomen. 2.3 Definitie

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 11 november 2016, uur

Modelleren en Programmeren

Scala. Korte introductie. Sylvia Stuurman

IMP Uitwerking week 13

Modelleren en Programmeren

colleges recursieve datastructuren college 9 prioriteit van operatoren prioriteit in recursive descent parser

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, uur

Programmeren in Java les 3

Datastructuren en Algoritmen voor CKI

Abstracte klassen & Interfaces

Programmeren. Cursus Python

Verslag. Projectteam: 107 Datum: 16 oktober 2008 Project leden: Lennard Fonteijn Harish Marhe Nicoletta Saba Turgay Saruhan Robin Tummers

Objectgeoriënteerd programmeren in Java 1

SPOJ oplossingen Gilles Callebaut 7 augustus 2015

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI

Zelftest Programmeren in Java

Programmeren (1) Examen NAAM:

Modelleren en Programmeren

Tentamen Programmeren in C (EE1400)

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur

Tree traversal. Bomen zijn overal. Ferd van Odenhoven. 15 november 2011


Programmeren 1 23 januari 2013 Prof. T. Schrijvers

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur

In BlueJ. Doe onderstaande met muis/menu s:

Objectgericht programmeren 1.

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur

Modelleren en Programmeren

Tentamen in2705 Software Engineering

Modelleren en Programmeren

Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

Java Generics: een introductie

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 9 november 2018, uur

Datastructuren Werkcollege Intro

Modelleren en Programmeren

Opdrachten herhalen. public void tekenscherm (object o, PEA pea) { int x; x = 1; zolang de voorwaarde geldig is

EE1400: Programmeren in C BSc. EE, 1e jaar, , 4e college

Informatica: C# WPO 11

Inleiding C++ Coding Conventions

Genetische algoritmen in Java met JGAP

Vraag 1: Software Levenscyclus

Overerving & Polymorfisme

Uitwerking Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, uur

Recursie. public static int faculteit( int n ){ // Deze functie berekent n! // pre: n = N en n >= 0 // post: faculteit = N!

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

import java.io.*; één klasse public class Hallo { public static void main (String[] a) ...met één functie System.out.println("Hallo!

Game of Life in Java

voegtoe: eerst methode bevat gebruiken, alleen toevoegen als bevat() false is

compileren & interpreteren - compileren: vertalen (omzetten) - interpreteren: vertolken

Syntax- (compile), runtime- en logische fouten Binaire operatoren

Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden.

Addendum bij hoofdstuk 5 Generieke implementatie van de zoekalgoritmen

Inleiding Programmeren 2

Informatica. Deel II: les 1. Java versus Python. Jan Lemeire Informatica deel II februari mei Parallel Systems: Introduction

Programmeren in Java 3

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

Tree traversal. Ferd van Odenhoven. 15 november Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering. Doorlopen van bomen

Inleiding tot Func.oneel Programmeren les 3

Modelleren & Programmeren. Jeroen Fokker

Transcriptie:

Van$java$8$alleen$functioneel$programmeren Revolutie Functioneel Programmeren Java 8 Johan Blok en Bart Barnard \begin{programma 09.00-09.30Inleiding 09.30-10.00sorteer- en filteropdrachten 10.00-10.30terugkoppeling en theorie 10.30-11.30uitgebreidere opdrachten 11.30-12.00gevolgen vakgebied en onderwijs \end{programma Inleiding

Het probleem Intel Xeon processor 5600. (http://cdn.phys.org/newman/gfx/news/hires/westmere-ep-die.jpg) Java$richt$zich$meer$op$onderhoudbare$en$leesbare$code$ dan$efficiënt$gebruik$van$clock<cycles$ Programmacode$met$locks:$complex$en$foutgevoelig$ Veel$gebruik$van$java.util.concurrent$ Performance$gaat$zelfs$omlaag$naarmate$er$meer$cores$op$ de$processor$komen http://www.cse.wustl.edu/~jain/cse567-11/ftp/multcore/ Imperatief versus Functioneel Imperatief:$reeks$instructies$die$toestand$veranderen sum$=$0 $$$for$$i=1$to$count(x) $ $$$$sum$=$sum$+$x[i] $$ average$=$sum$/$count(x) Functioneel:$evaluatie$van$(wiskundige)$functies$ $ avg(x):$sum(x,$count(x))$/$count(x)$ $ sum(x,$i):$ $ $ if$(i>0)$ $ $ $ sum(x,$i$ $1)$+$x[i]$ $ $ else$0

Theorie: Lambda Calculus G.W.$Leibniz$(1646<1716)$ Binair$getalstelsel$ 1671:$mechanische$ rekenmachine$ Universele$denkmachine λ<calculus:$formeel$systeem$ontwikkeld$rond$1930$door$ Alonzo$Church$ Hilbert s$entscheidungsproblem:$algoritme$dat$bepaalt$of$ een$propositie$bewijsbaar$is$ Lambda$Calculus$als$model$voor$berekenbaarheid$ 1980 s$typed$lambda$calculus:$constructive$mathematics Voordelen lambda expressies Meer$directe$vertaling$van$de$bedrijfslogica$in$programmacode;$de$ nadruk$op$functionaliteit$zorgt$voor$een$betere$flow$die$duidelijker$ maakt$wat$er$moet$gebeuren$in$plaats$van$hoe$het$gebeurt.$ Niet$meer$noodzakelijk$om$om$de$haverklap$objecten$te$creëeren$ en$heen$en$weer$te$sturen.$$ $ Functies$gebruiken$als$parameters$ $ Creëren$van$functies$in$andere$functies$ $ Functies$als$return<type$ Veel$boilerplate$code$kan$worden$verwijderd:$duidelijkere$er$ consistentere$code$ Code$als$data:$objecten$kunnen$worden$gezien$als$data<containers Java 8 overzicht http://javarevisited.blogspot.nl/2014/02/10<example<of<lambda<expressions<in<java8.html$ Lambda$Expression$kan$anonieme$klasse$vervangen$ Collections:$filtering$ Predicates$ Map$and$Reduce$ Type$inference

Java 8 Lambda Expression Syntax button.addactionlistener(new new ActionListener() { public void actionperformed(actionevent e) { System.out.println("button clicked"); ); Anonymous$inner$class$ $ ActionListener$heeft$één$methode:$actionPerformed()$ $ Code$as$data:$we$sturen$een$object$mee$aan$de$methode$ $ Te$veel$boilerplate$code$ $ Is$onduidelijk$wat$de$programmeur$hiermee$bedoelt Java 8 Lambda Expression Syntax event$is$de$parameter ->$scheidt$de$parameters$van$ de$body$van$de$lambda$ expressie button.addactionlistener(event -> ); System.out.println("button clicked ) body$van$de$expressie;$ in$plaats$van$een$ object$geven$we$het$ een$stuk$code$mee Type4inference4 javac$bepaalt$het$type$van$ event$aan$de$hand$van$de$ signature$van$addactionlistener() Practicum 1: sorteren en filteren @Override public List<Student> imperative() { List<Student> list = data.getstudents(); list.sort(new Comparator<Student>() { public int compare(student student1, Student student2) { return student1.getname().compareto(student2.getname()); ); return list; @Override public List<Student> functional() { List<Student> students = data.getstudents(); // TODO functional implementaton of sort by name return students;

Streams External Iteration Application$code Collection$Code hasnext() Iteration hasnext next() next Naar Warburton, 2014, p.18 External Iteration int count = 0; Iterator<Artist> iterator = artists.iterator(); while(iterator.hasnext()) { Artist artist = iterator.next(); if (artist.isfrom("london")) { count++;

Internal Iteration Application$code Collection$Code Build operation Iteration Result Naar Warburton, 2014, p.19 Internal Iteration long count = allartists.stream().filter(artist -> artist.isfrom("london")).count(); Streams in Java 8 Niet$te$verwarren$met$Input/outputstreams Source$ Collection$/$List.stream()$ Collection$/$List.parallelstream()$ Intermediate$Operations$ Filter4 Map$/$Flatmap$ Sorted$ One$terminal$operation$ Foreach$ Collect4 Reduce Operations in cursief worden even kort behandeld. Zie voor totaalbeeld Warburton, 2014, pp. 17-41.

Streams: Collect collect(tolist()) is$an$eager$ operation$that$generates$a$list$from$the$values$ in$a$stream. List<String> foo = Stream.of("a", "b", "c").collect(collectors.tolist()); Streams: Filter Any$time$you re$looping$over$some$data$and$checking$ each$element,$you$might$want$to$think$about$using$the$ new$filter method$on$stream.$ List<String> startswithnr = Stream.of("a", "1abc", "abc1").filter(value -> isdigit(value.charat(0))).collect(tolist()); Streams: Map If$you ve$got$a$function$that$converts$a$value$of$ one$type$into$another,$map$lets$you$apply$this$ function$to$a$stream$of$values,$producing$another$ stream$of$the$new$values. List<String> foo = Stream.of("a", "b", "hello").map(string -> string.touppercase()).collect(tolist());

Streams: Reduce If$you ve$got$a$function$that$converts$a$value$of$ one$type$into$another,$map$lets$you$apply$this$ function$to$a$stream$of$values,$producing$another$ stream$of$the$new$values. int count = IntStream.range(1,4).reduce(0, (acc, element) -> acc + element); 1 2 3 4 element 1 3 6 10 acc initial result Predicates and type inference Predicates public interface Predicate<T>{ boolean test(t t); public static Predicate<Employee> isadultmale() { return p -> p.getage() > 21 && p.getgender().equalsignorecase("m");

Type inference old$($java$<$1.8)$method Map<String, Integer> foo = new HashMap<String, Integer>(); Map<String, Integer> bar = new HashMap<>(); ook$in$dit$voorbeeld$is$javac$slim$ genoeg$om$de$generics$van$de$ nieuwe$hashmap$te$achterhalen. diamond$notation usehashmap(new HashMap<>());... private void usehashmap(map<string, String> values); Practicum 2: uitgebreidere voorbeelden M D H Q T X B C F G J K L N P R S V W Y Z A B-tree whose keys are the consonants of the alphabet. An internal node x containing n[x] keys has n[x]+1 children. Alle leaves are at the same depths in the tree. The purple nodes are examined in a search for the letter R. Cormen et al.2005, p.435

Discussie: Functioneel Programmeren in het Vakgebied van de ICT Krachtiger$expressies$ Verkort$ontwikkeltijd$ Minder$code,$minder$bugs$ Unit$tests$ Verwerking$datastromen$(big$data)$ Performance?$ Hoe$snel$in$bedrijfsleven$opgenomen?$ In$het$nieuwe$curriculum? Literatuur Cormen,$T.H.,$C.E.$Leiserson,$R.L.$Riverst,$C.$Stein,$2005,$Introduction4to4 Algorithms.$Cambridge,$Mass:$MIT$Press$(second$edition).$ Hofstadter,$D.,$1980,$Gödel,4Escher,4Bach:4an4Eternal4Golden4Braid.$ Pinguin.$ Michaelson,$G,$2011,$An4Introduction4to4Functional4Programming44 Through4Lambda4Calculus,$NY:$Dover$Publications.$ Nagel,$E.$and$J.R.$Newman,$2001,$Gödel s4proof.$nyu$press$ Warburton,$R,$2014,$Java484Lambdas.4Functional4Programming4for4the4 Masses.$Sebastopol,$CA:$O Reilly.