12. Relationer och funktioner

Relevanta dokument
12. Relationer och funktioner

Grammatik. BNF-grammatik

10. Mängder och språk

Objektorienterad modellering och diskreta strukturer. 13. Problem. Sven Gestegård Robertz. Datavetenskap, LTH

9. Predikatlogik och mängdlära

Datastrukturer och algoritmer

Alfabeten, strängar och språk. String

11. Reguljära uttryck och grammatiker

11. Reguljära uttryck och grammatiker

7, Diskreta strukturer

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

TDDD78 Viktiga begrepp, del 2

Inlämningsuppgift MiniPlotter

7, Diskreta strukturer

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Tentamen i Objektorienterad modellering och diskreta strukturer

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

TENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13:15

Objektorienterad programmering D2

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

DAT043 Objektorienterad Programmering

Övning 4. I denna övning ska vi titta på icke-muterbarhet kontra muterbarhet, samt metoderna equals, hashcode och clone.

8. Naturlig härledning och predikatlogik

Tentamen Programmeringsteknik 2 och MN Skrivtid: Inga hjälpmedel.

Tentamen i Objektorienterad modellering och diskreta strukturer

Tentamen i Objektorienterad modellering och diskreta strukturer

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Föreläsning 3-4 Innehåll

Definition. Mängden av reguljära uttryck på alfabetet Σ definieras av. om α och β är reguljära uttryck så är (α β) ett reguljärt uttryck

public boolean containskey(string key) { return search(key, head)!= null; }

Föreläsning 3. Stack

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Programmering för språkteknologer II, HT2014. Rum

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Föreläsning 5-6 Innehåll

DD1361 Programmeringsparadigm. Formella Språk & Syntaxanalys. Per Austrin

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Generiska konstruktioner. Kursbokens kapitel 13

Classes och Interfaces, Objects och References, Initialization

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel.

Att skriva till och läsa från terminalfönstret

Föreläsning 2 Innehåll. Generiska klasser. Generik i Java. Varför generiska klasser Bakgrund

Java Collections Framework. Föreläsning 2 Innehåll. Java Collections Framework interface hierarki. Java Collections Framework interface hierarki

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

TDDC77 Objektorienterad Programmering

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

Del A (obligatorisk för alla)

Föreläsning 2 Innehåll

TDDD78 Objektorientering i Java, del 4. Hur vet man om två objekt är lika? Hur undviker man objekt och när?

Föreläsning 8: Exempel och problemlösning

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Två fall: q Tom sekvens: () q Sekvens av element: (a b c) ; (sum-rec '(2 4 6)) = 12. q Första elementet uppfyller vissa villkor: (2 a b c)

Föreläsning 14 Innehåll

Obligatorisk uppgift 5

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

DD1361 Programmeringsparadigm. Formella Språk & Syntaxanalys. Per Austrin

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

OOP Objekt-orienterad programmering

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Programmering II (ID1019) :00-12:00

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Lösningsförslag till exempeltenta 2

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Tentamen, EDAA10 Programmering i Java

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

ID1004 Laboration 4, November 2012

Malmö högskola 2008/2009 CTS

Lösningsförslag till tentamen

Föreläsning 7. Muterbara och icke-muterbara klasser Delegering Gränssnittet för en klass Metoden equals()

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

Tentamen, EDAA20/EDA501 Programmering

Föreläsning 3. Stack

Föreläsning Innehåll. Hantera många element. Exempel: polygon Godtyckligt antal element. Exempel: polygon forts

Tentamen OOP

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Övning vecka 4. Denna vecka ska vi titta på icke-muterbarhet kontra muterbarhet, samt metoderna equals, hashcode och clone.

Objektsamlingar i Java

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

Tentamen i Objektorienterad modellering och design Helsingborg

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Lösningsförslag till exempeltenta 1

Föreläsning 2 Innehåll

Föreläsning 9 Innehåll

OMTENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13: 15

Lösningsförslag till tentamen

Karlstads Universitet, Datavetenskap 1

Transkript:

Objektorienterad modellering och diskreta strukturer 12. Relationer och funktioner Sven Gestegård Robertz Datavetenskap, LTH 2014

Laboration 4 Syntaxanalys Grammatik för (vår delmängd av) satslogiska uttryck e x p r : : = p r i m a r y (' >' p r i m a r y )? p r i m a r y : : = term ( ' ' term ) term : : = f a c t o r ( '& ' f a c t o r ) f a c t o r : : = ID '! ' f a c t o r ' ( ' e x p r ' ) ' Laboration 4 Syntaxanalys 12. Relationer och funktioner 2/40

Laboration 4 Klasser Givet Scanner.java färdig Parser.java skelett ParserException.java färdig ParserTest.java färdig SimpleParserTest.java färdig Förberedelse: Kapitel 7 i Diskreta strukturer Börja implementera! Laboration 4 Syntaxanalys 12. Relationer och funktioner 3/40

Scanner.java p u b l i c c l a s s S c a n n e r { p u b l i c s t a t i c f i n a l i n t EOF = 1, VARIABLE = 2, IMPLIES = 3; p u b l i c S c a n n e r ( S t r i n g s t r i n g ) p u b l i c i n t nexttoken ( ) p u b l i c S t r i n g t o k e n ( ) nexttoken() returnerar ASCII-koden (>= 0) för symboler (tokens) som består av ett tecken. För övriga returneras en av konstanterna EOF, VARIABLE, IMPLIES. token() returnerar ett String-objekt som innehåller strängen som representerar en symbol med typ enligt nexttoken() Laboration 4 Syntaxanalys 12. Relationer och funktioner 4/40

Parser.java p u b l i c c l a s s P a r s e r { p r i v a t e S c a n n e r s c a n n e r ; p r i v a t e i n t t o k e n ; p r i v a t e Expr e x p r ( ) { // e x p r : : = p r i m a r y (' >' p r i m a r y )?... p r i v a t e Expr p r i m a r y ( ) {// p r i m a r y : : = term ( ' ' term )...... Struktur: klassen har en metod för varje produktion i grammatiken token är ett attribut i Parser För varje produktion gäller konventionen att när metoden returnerar ska token innehålla nästa symbol Laboration 4 Syntaxanalys 12. Relationer och funktioner 5/40

Parser.java p u b l i c Expr b u i l d ( S t r i n g i n p u t ) { r e t u r n b u i l d ( new S t r i n g R e a d e r ( i n p u t ) ) ; p r i v a t e Expr e x p r ( ) { Expr r e s u l t ; r e s u l t = p r i m a r y ( ) ; r e t u r n r e s u l t ; p r i v a t e Expr p r i m a r y ( ) { Expr r e s u l t ; r e s u l t = term ( ) ; r e t u r n r e s u l t ; Laboration 4 Syntaxanalys 12. Relationer och funktioner 6/40

Parser.java p r i v a t e Expr term ( ) { Expr r e s u l t ; r e s u l t = f a c t o r ( ) ; r e t u r n r e s u l t ; p r i v a t e Expr f a c t o r ( ) { s w i t c h ( t o k e n ) { d e f a u l t : throw new P a r s e r E x c e p t i o n ( " Unexpected " + s c a n n e r. t o k e n ( ) ) ; Laboration 4 Syntaxanalys 12. Relationer och funktioner 7/40

Lab4, sammanfattning Givet: Scanner och skelett till Parser Notera skillnaden mellan Scanner.token() och Scanner.nextToken(). Implementera Parser NB! efter varje metod (produktion) ska attributet token innehålla nästa symbol build(string s) ska kasta ett Exception om s inte genereras av grammatiken. Använd din kod från lab2 Studera den givna koden och testfallen Börja implementera Parser nerifrån, med factor(). Överkurs: >j a v a P r i n t T r u t h T a b l e "p & \! q < > \! ( p > q )" q p ( ( p &&! q ) < >! ( p > q ) ) f a l s e f a l s e t r u e f a l s e t r u e t r u e t r u e f a l s e t r u e t r u e t r u e t r u e Laboration 4 Syntaxanalys 12. Relationer och funktioner 8/40

Rekaputilation Vi har talat om satslogik och härledning predikatlogik och substitution mängder och språk reguljära uttryck och grammatiker Vi kommer att tala om relationer funktioner Laboration 4 Syntaxanalys 12. Relationer och funktioner 9/40

Exempel på relationer 1 3 P (x, y) friend(per, erik) Per Erik 3 {1, 3, 5 expr '+' expr INT '+' expr {p, p q q Relationer 12. Relationer och funktioner 10/40

Relation En binär relation har två operander. Om den första operanden tillhör mängden A och den andra mängden B så är det en relation från A till B eller mellan A och B (ordningen är signikant). Mängden av relationer mellan A och B betecknas (i kursen) A B. Om A = B så säger vi att det är en relation på A. Relationer 12. Relationer och funktioner 11/40

Aktivitet När vi diskuterar naturliga tal och skriver 3 {1, 3, 5 och 5 {1, 5 så är en relation mellan två mängder; Vilka? N P(N) Relationer 12. Relationer och funktioner 12/40

Relationen friend Exempel Om vi har en mängd av fyra personer {per, erik, anna, eva så kan det gälla att friend = {(erik, anna), (anna, erik), (per, anna), (per, erik). Relationer 12. Relationer och funktioner 13/40

Denition En binär relation från mängden A till mängden B är en delmängd av A B. Relationer 12. Relationer och funktioner 14/40

Java-modell p u b l i c c l a s s R e l a t i o n <A, B> { p r i v a t e Set<P a i r <A, B>> r e l a t i o n = new HashSet<P a i r <A, B> >(); p u b l i c v o i d add (A a, B b ) { s e t. add ( new P a i r <A, B>(a, b ) ) ; p u b l i c b o o l e a n r e l a t e d (A a, B b ) { r e t u r n r e l a t i o n. c o n t a i n s ( new P a i r <A, B>(a, b ) ) ; En skiss av Pair nns i F10. Relationer 12. Relationer och funktioner 15/40

Det normala skrivsättet för en relation Denition x ρ y = (x, y) ρ I kompendiet används ibland (ρ) för att markera att det är mängden och inte operatorn som avses. Relationer 12. Relationer och funktioner 16/40

Likhetsrelationen (=) = {(x, x) x A = A = {(x, x) x A Relationer 12. Relationer och funktioner 17/40

Aktivitet Vad är det för fel på < = {(x, y) N N x < y Vi kan inte använda < för att deniera < Denition < = {(x, y) N N z N. x + z + 1 = y Relationer 12. Relationer och funktioner 18/40

Mängdoperationer på relationer Eftersom relationer är mängder så kan vi använda relationer tillsammans med mängdoperationerna. ( ) = (<) (=) (<) = ( ) (=) Relationer 12. Relationer och funktioner 19/40

Domän och kodomän Denition Låt ρ vara en relation mellan A och B. dom (ρ) = {x A y. (x, y) ρ ran (ρ) = {y B x. (x, y) ρ Exempel Med friend = {(erik, anna), (anna, erik), (per, anna) så är dom (friend) = {per, erik, anna ran (friend) = {erik, anna Relationer 12. Relationer och funktioner 20/40

Bild och argumentmängd Ibland denierar man bilden av x under relationen ρ, x ρ, samt argumentmängden till y under ρ, ρ y Denition Låt ρ vara en relation mellan A och B med x A och y B. x ρ = {y B x ρ y ρ y = {x A x ρ y Exempel (Relationen friend) Med x y = {(erik, anna), (anna, erik), (per, anna) så är bilden erik = {anna argumentmängden anna = {erik, per Relationer 12. Relationer och funktioner 21/40

Aktivitet Finns det något enkelt sätt att beskriva mängden av alla relationer mellan A och B med hjälp av våra mängdoperationer? A B = P(A B) Relationer 12. Relationer och funktioner 22/40

Egenskaper Denition Låt ρ vara en binär relation på A. ρ är reexiv om x ρ x för alla x A ρ är symmetrisk om x ρ y y ρ x för alla x, y A ρ är transitiv om x ρ y y ρ z x ρ z för alla x, y, z A ρ är antisymmetrisk om x ρ y y ρ x x = y för alla x, y A Om ρ är reexiv, symmetrisk och transitiv så är det en ekvivalens-relation. Exempel: är antisymmetrisk = är både symmetrisk och antisymmetrisk Relationer 12. Relationer och funktioner 23/40

Om equals i Object The equals method implements an equivalence relation on non-null object references: It is reexive: for any non-null reference value x, x.equals(x) should return true. It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true. It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true. It is consistent: for any non-null reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the objects is modied. For any non-null reference value x, x.equals(null) should return false. Relationer 12. Relationer och funktioner 24/40

Variable.java från lab 2 p u b l i c c l a s s V a r i a b l e e x t e n d s Expr { p r i v a t e S t r i n g name ; p u b l i c b o o l e a n e q u a l s ( O b j e c t o b j e c t ) { i f (! ( o b j e c t i n s t a n c e o f V a r i a b l e ) ) r e t u r n f a l s e ; V a r i a b l e o t h e r = ( V a r i a b l e ) o b j e c t ; r e t u r n name. e q u a l s ( o t h e r. name ) ; p u b l i c i n t hashcode ( ) { r e t u r n name. hashcode ( ) ; equals() är inte symmetrisk. Relationer 12. Relationer och funktioner 25/40

FinalVariable.java p u b l i c c l a s s F i n a l V a r i a b l e e x t e n d s V a r i a b l e { p u b l i c b o o l e a n e q u a l s ( O b j e c t o b j e c t ) { i f (! ( o b j e c t i n s t a n c e o f F i n a l V a r i a b l e ) ) r e t u r n f a l s e ; r e t u r n s u p e r. e q u a l s ( o b j e c t ) ; V a r i a b l e a1 = new V a r i a b l e (" a " ) ; V a r i a b l e a2 = new F i n a l V a r i a b l e (" a " ) ; a1. e q u a l s ( a2 ) > a2. e q u a l s ( a1 ) > t r u e f a l s e Relationer 12. Relationer och funktioner 26/40

Variable.java med Eclipse: Generate equals and hashcode p u b l i c b o o l e a n e q u a l s ( O b j e c t o b j ) { i f ( t h i s == o b j ) r e t u r n t r u e ; i f ( o b j == n u l l ) r e t u r n f a l s e ; i f ( g e t C l a s s ( )!= o b j. g e t C l a s s ( ) ) r e t u r n f a l s e ; V a r i a b l e o t h e r = ( V a r i a b l e ) o b j ; i f ( name == n u l l ) { i f ( o t h e r. name!= n u l l ) r e t u r n f a l s e ; e l s e i f (! name. e q u a l s ( o t h e r. name ) ) r e t u r n f a l s e ; r e t u r n t r u e ; Relationer 12. Relationer och funktioner 27/40

== i Java är inte transitiv Finns det x, y och z så att x==y -> true y==z -> true x==z -> false int x = Integer.MAX_VALUE; float y = Integer.MAX_VALUE; int z = Integer.MAX_VALUE - 1; Relationer 12. Relationer och funktioner 28/40

Sammansättning Denition Låt ρ 1 vara en relation mellan A och B och ρ 2 en relation mellan B och C. Sammansättningen av ρ 1 och ρ 2 är ρ 1 ; ρ 2 = {(x, z) A C y B. x ρ1 y y ρ 2 z Relationer 12. Relationer och funktioner 29/40

Sammansättning c a b d e f g h i {(b, d), (b, e), (c, d) ; {(d, h), (e, h), (f, h), (f, g) = {(b, h), (c, h) Relationer 12. Relationer och funktioner 30/40

Aktivitet Denition Låt ρ 1 vara en relation mellan A och B och ρ 2 en relation mellan B och C. Sammansättningen av ρ 1 och ρ 2 är ρ 1 ; ρ 2 = {(x, z) A C y B. x ρ1 y y ρ 2 z Vad betyder < ; < på mängden {0, 1, 2? Mindre än med minst 2 Låt cousin(x, Y ) betyda att X är kusin till Y. Betyder cousin; cousin samma sak som nästkusin (tremänning)? nej Relationer 12. Relationer och funktioner 31/40

Invers och motsats Denition Låt ρ vara en relation mellan A och B. Inversen till ρ är ρ 1 = {(y, x) B A x ρ y Denition Låt ρ vara en relation mellan A och B. Motsatsen till ρ är ρ = A B ρ Motsatsen kan även kallas Komplement. Jfr mängdoperationerna. Relationer 12. Relationer och funktioner 32/40

Funktioner Exempel f(x) = x + 1 sqr(y) = y 2 { abs(x) = x, om x 0 x, om x < 0 Funktioner 12. Relationer och funktioner 33/40

En funktion är en mängd not(b) = { F, om b = T T, om b = F not = {(F, T), (T, F) Funktioner 12. Relationer och funktioner 34/40

En funktion är en mängd Denition f är en funktion från A till B om f A B och (a 1, b 1 ), (a 1, b 2 ) f (b 1 = b 2 ) f : A B = {f A B (a 1, b 1 ), (a 1, b 2 ) f (b 1 = b 2 ) Funktioner 12. Relationer och funktioner 35/40

Domän, kodomän och sammansättning dom och ran denieras som för relationer Sammansättning denieras (f g)(x) = f(g(x)). Sammansättningen av två funktioner är en funktion. Unionen av två funktioner är oftast inte en funktion. Varför? Eftersom första elementet i ett par måste vara unikt, enligt (a 1, b 1 ), (a 1, b 2 ) f (b 1 = b 2 ) Funktioner 12. Relationer och funktioner 36/40

Sammansfattning Relationer är mängder Funktioner är mängder Notera ordningen på sammansättning Funktioner 12. Relationer och funktioner 37/40

Funktioner i Scala Programmet v a l add1 = ( x : I n t ) => x + 1 v a l add100 = ( x : I n t ) => x + 100 v a l sq = ( x : I n t ) => x x v a l add1sq = sq compose add1 // e l l e r : add1 andthen sq v a l l i s t = 1 t o 5 p r i n t l n ( add1 ( 1 ) ) p r i n t l n ( l i s t. map( add1sq andthen add100 ) Ger utskriften 2 V e c t o r ( 1 0 4, 109, 116, 125, 136)... och det nns en funktion för att sätta samman en lista av funktioner: v a l f l i s t = L i s t ( add1, sq, ( x : I n t ) => x + 100) v a l f c = F u n c t i o n. c h a i n ( f l i s t ) // f c = en f u n k t i o n I n t > I n t Funktioner 12. Relationer och funktioner 38/40

java.util.function i Java8 Lambda-notation, är (i Java8 ) kortform för att skapa en anonym klass som implementerar ett interface. ( SomeClass o ) > o. getx ( ) > 0 ; o > o. getx ( ) > 0 ; En mängd interface: Function (ettställig funktion från T till R): T R Consumer (ettställig funktion från T till void) T Predicate (ettställig funktion från T till boolean) T B Supplier (nollställig funktion till R). R BiFunction (tvåställig funktion från T och U till R). T U R Notera att ovanstående Function m specicerar metoder men inte nödvändigtvis funktioner enligt vår denition, då de kan ha sidoeekter, och två anrop av en metod med samma parameter kan ge olika resultat. Funktioner 12. Relationer och funktioner 39/40

i m p o r t j a v a. u t i l. f u n c t i o n. P r e d i c a t e ;... i n t e r f a c e P e r s o n { p u b l i c enum Sex { MALE, FEMALE p u b l i c i n t getage ( ) ; p u b l i c Sex g e t G e n d e r ( ) ; p u b l i c v o i d p r i n t P e r s o n ( ) ; p u b l i c c l a s s LambdaExample { p u b l i c v o i d p r i n t P e r s o n s ( L i s t <Person> p e r s o n s, P r e d i c a t e <Person> i n c l u d e ) { f o r ( P e r s o n p : p e r s o n s ) { i f ( i n c l u d e. t e s t ( p ) ) { p. p r i n t P e r s o n ( ) ; p u b l i c v o i d example ( L i s t <Person> p l i s t ) { p r i n t P e r s o n s ( p l i s t, p >t r u e ) ; // a l l p e r s o n s p r i n t P e r s o n s ( p l i s t, ( P e r s o n p ) > ( p. g e t G e n d e r ( ) == P e r s o n. Sex.MALE && p. getage ( ) >= 18) // a d u l t m a l e s ) ; Funktioner 12. Relationer och funktioner 40/40