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

11. Reguljära uttryck och grammatiker

Alfabeten, strängar och språk. String

11. Reguljära uttryck och grammatiker

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

TDDD78 Viktiga begrepp, del 2

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

7, Diskreta strukturer

DAT043 Objektorienterad Programmering

Tentamen i Objektorienterad modellering och diskreta strukturer

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

7, Diskreta strukturer

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamen i Objektorienterad modellering och diskreta strukturer

Tentamen i Objektorienterad modellering och diskreta strukturer

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

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

8. Naturlig härledning och predikatlogik

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

Objektorienterad programmering D2

Generiska konstruktioner. Kursbokens kapitel 13

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

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

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

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

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

Föreläsning 3. Stack

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

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

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

Lösningsförslag till exempeltenta 2

Inlämningsuppgift MiniPlotter

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

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

Föreläsning 2 Innehåll

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

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

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

Föreläsning 3-4 Innehåll

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

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

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

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

Classes och Interfaces, Objects och References, Initialization

Föreläsning 2 Innehåll

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

Tentamen i Objektorienterad modellering och design Helsingborg

Föreläsning 14 Innehåll

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

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

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 8 - del 2: Objektorienterad programmering - avancerat

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

Lösningsförslag till exempeltenta 1

Föreläsning 9 Innehåll

Programmering A. Johan Eliasson

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Objektsamlingar i Java

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 i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 5-6 Innehåll

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

TDDC77 Objektorienterad Programmering

Tentamen Programmering fortsättningskurs DIT950

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

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Obligatorisk uppgift 5

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

CHALMERS TENTAMEN. 2018/2019, lp 1 DAT050. Uno Holmer

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)

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

TENTAMEN OOP

Seminarium 3 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

Malmö högskola 2008/2009 CTS

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

Malmö högskola 2007/2008 Teknik och samhälle

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

Malmö högskola 2007/2008 Teknik och samhälle

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

Programmering II (ID1019) :00-12:00

Tentamen i Objektorienterad modellering och design Helsingborg

Föreläsning 13 Innehåll

Del A (obligatorisk för alla)

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

Lösningsförslag till tentamen

Transkript:

Objektorienterad modellering och diskreta strukturer 12. Relationer och funktioner Sven Gestegård Robertz Institutionen för datavetenskap, LTH 2013

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/39

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/39

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/39

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/39

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/39

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/39

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 Relationer 12. Relationer och funktioner 8/39

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

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 10/39

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 11/39

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 12/39

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 13/39

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 boolean 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 icke-generisk version av Pair nns i F10. Relationer 12. Relationer och funktioner 14/39

Det normala skrivsättet för en relation Denition x ρ y = (x, y) ρ Ibland skriver jag (ρ) när jag vill markera att det är mängden och inte operatorn som avses. Relationer 12. Relationer och funktioner 15/39

Likhetsrelationen (=) = {(x, x) x A = A = {(x, x) x A Relationer 12. Relationer och funktioner 16/39

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 17/39

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

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) ρ Relationer 12. Relationer och funktioner 19/39

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/39

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 Relationer 12. Relationer och funktioner 21/39

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/39

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 23/39

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 extends Expr { p r i v a t e S t r i n g name ; p u b l i c boolean 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 24/39

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 extends V a r i a b l e { p u b l i c boolean 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 ) > t r u e a2. e q u a l s ( a1 ) > f a l s e Relationer 12. Relationer och funktioner 25/39

Variable.java med Eclipse: Generate equals and hashcode p u b l i c boolean 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 26/39

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 27/39

== 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/39

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/39

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/39

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/39

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/39

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/39

not(b) = { F, om b = T T, om b = F not = {(F, T), (T, F) Funktioner 12. Relationer och funktioner 34/39

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/39

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/39

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 s q 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 37/39

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 38/39

import 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 39/39