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



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

Elementary Data Structures 3

Kleine cursus PHP5. Auteur: Raymond Moesker

Datastructuren en Algoritmen voor CKI

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

Modulewijzer Tirdat01

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Modelleren en Programmeren

Tentamen Objectgeorienteerd Programmeren

Zelftest Programmeren in Java

Java Programma structuur

FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE. Toets Inleiding Kansrekening 1 8 februari 2010

Zelftest Inleiding Programmeren

Scala. Korte introductie. Sylvia Stuurman

public boolean equaldates() post: returns true iff there if the list contains at least two BirthDay objects with the same daynumber

IMP Uitwerking week 13

Modelleren en Programmeren

Datastructuren Werkcollege Intro

public boolean egualdates() post: returns true i f f there i f the l i s t contains at least two BirthDay objects with the same daynumber

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


Introductie in flowcharts

De sheets zijn gebaseerd op met name hoofdstuk. D. Bell en M. Parr, Java voor studenten, Prentice Hall,

Visual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET

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

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

Ingebouwde klassen & methodes

Genetische algoritmen in Java met JGAP

NAAM: Programmeren 1 Examen 29/08/2012

Modelleren en Programmeren

Tentamen Imperatief Programmeren

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

Programmeren in Java 3

Programmeren in Java les 3

Een unit test is geen integratie test. Niet het hele systeem, maar onderdelen van een systeem worden getest.

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

Preschool Kindergarten

Firewall van de Speedtouch 789wl volledig uitschakelen?

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

Objectgeoriënteerd programmeren in Java 1

ALGORITMIEK: answers exercise class 7

Programmeren met Grafische Objecten. Inleiding Programmeren II Hoorcollege 1 prof. dr. van Noord en dr. L.M. Bosveld-de Smet

Modelleren en Programmeren

Modelleren en Programmeren

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

Contents. Introduction Problem Definition The Application Co-operation operation and User friendliness Design Implementation

Programmeren 1 20 januari 2012 Prof. T. Schrijvers

Programmeren. Cursus Python

Knowledgeable Referenceable Personable Accountable Scalable

Java. Basissyllabus. Egon Pas

Modelleren en Programmeren

SAMPLE 11 = + 11 = + + Exploring Combinations of Ten + + = = + + = + = = + = = 11. Step Up. Step Ahead

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

FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE. Toets Inleiding Kansrekening 1 22 februari 2013

Abstraheren van modellen

CS 202 Fundamental Structures of Computer Science II Bilkent University Computer Engineering Department

Correspondentie inzake overnemen of reproductie kunt u richten aan:

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

Turn legacy code into clean code! Jeroen Mengerink David Baak

CBSOData Documentation

DBMS. DataBase Management System. Op dit moment gebruiken bijna alle DBMS'en het relationele model. Deze worden RDBMS'en genoemd.

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

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

Vakgroep CW KAHO Sint-Lieven

en DMS koppelvlak Utrecht, 14 april 2011

Waarmaken van Leibniz s droom

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

Programmeren 1 23 januari 2013 Prof. T. Schrijvers

CBSOData Documentation

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

FUNCTIONEEL PROGRAMMEREN WEEK 1

Kompas. zijn klasse. protected override void OnDraw(Canvas canv) { base.ondraw(canv);

Windows-applicatie. using System.Windows.Forms; using System.Drawing; class HalloWin1 { static void Main ( )

is eigenlijk overbodig!

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

Algoritmen en Datastructuren 1. Functies

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

Inleiding C++ Coding Conventions

NAAM: Programmeren 1 Examen 21/01/2011

Modelleren en Programmeren

Dergelijke functionaliteit kunnen we zelf ook aan eigen code toevoegen.

Abstracte klassen & Interfaces

Modulewijzer tirprog02/infprg01, programmeren in Java 2

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

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

In BlueJ. Doe onderstaande met muis/menu s:

Tentamen Object Georiënteerd Programmeren TI januari 2013, Afdeling SCT, Faculteit EWI, TU Delft

Esther Lee-Varisco Matt Zhang

Add the standing fingers to get the tens and multiply the closed fingers to get the units.

i(i + 1) = xy + y = x + 1, y(1) = 2.

Online Resource 1. Title: Implementing the flipped classroom: An exploration of study behaviour and student performance

Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld

Datastructuren en algoritmen

Hoofdstuk 9. Hashing

Noties Informatica. In java fungeren objecten als een model voor de elementen waarin een probleem kan worden opgesplitst

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

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

Game of Life in Java

The colour of a pixel in a bit map picture can be presented in different ways. For this assignment, we distinguish two categories:

Transcriptie:

二 零 十 五 年 三 月 二 十 四 日 \begin{programma 09.00-09.30 Inleiding Revolutie Functioneel Programmeren Java 8 Johan Blok en Bart Barnard 09.30-10.00 sorteer- en filteropdrachten 10.00-10.30 terugkoppeling en theorie 10.30-11.30 uitgebreidere opdrachten 11.30-12.00 gevolgen vakgebied en onderwijs \end{programma Het probleem Inleiding Intel Xeon processor 5600. (http://cdn.phys.org/newman/gfx/news/hires/westmere-ep-die.jpg)

Imperatief versus Functioneel 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 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 http://www.cse.wustl.edu/~jain/cse567-11/ftp/multcore/ 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 Java 8 Lambda Expression Syntax Lambda Expression kan anonieme klasse vervangen Collections: filtering Predicates Map and Reduce Type inference 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 button.addactionlistener(event -> ); Java 8 Lambda Expression Syntax event is de parameter -> scheidt de parameters van de body van de lambda expressie System.out.println("button clicked ) 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 body van de expressie; in plaats van een object geven we het een stuk code mee Type inference javac bepaalt het type van event aan de hand van de signature van addactionlistener() public List<Student> functional() { List<Student> students = data.getstudents(); // TODO functional implementaton of sort by name return students;

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

Internal Iteration Streams in Java 8 long count = allartists.stream().filter(artist -> artist.isfrom("london")).count(); Source Collection / List.stream() Collection / List.parallelstream() Intermediate Operations Filter Map / Flatmap Sorted One terminal operation Foreach Collect Reduce Operations in cursief worden even kort behandeld. Zie voor totaalbeeld Warburton, 2014, pp. 17-41. Streams: Collect Streams: Filter 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()); 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 Predicates and type inference public public interface Predicate<T>{ boolean test(t t); static Predicate<Employee> isadultmale() { return p -> p.getage() > 21 && p.getgender().equalsignorecase("m");

Type inference old ( java < 1.8) method Practicum 2: uitgebreidere voorbeelden 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); M Discussie: Functioneel Programmeren in het Vakgebied van de ICT D H B C F G J K L Q T X 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. Krachtiger expressies Verkort ontwikkeltijd Minder code, minder bugs Unit tests Verwerking datastromen (big data) Performance? Hoe snel in bedrijfsleven opgenomen? In het nieuwe curriculum? Cormen et al.2005, p.435

Literatuur Cormen, T.H., C.E. Leiserson, R.L. Riverst, C. Stein, 2005, Introduction to Algorithms. Cambridge, Mass: MIT Press (second edition). Hofstadter, D., 1980, Gödel, Escher, Bach: an Eternal Golden Braid. Pinguin. Michaelson, G, 2011, An Introduction to Functional Programming Through Lambda Calculus, NY: Dover Publications. Nagel, E. and J.R. Newman, 2001, Gödel s Proof. NYU Press Warburton, R, 2014, Java 8 Lambdas. Functional Programming for the Masses. Sebastopol, CA: O Reilly.