C# nykyiset kipupisteet

14
Olio-ohjelmoinnin kipupisteet

description

Olio-ohjelmoinnin ongelmat C#-kielen ongelmat Sanko F# -tapahtuman diasarja

Transcript of C# nykyiset kipupisteet

Page 1: C# nykyiset kipupisteet

Olio-ohjelmoinnin kipupisteet

Page 2: C# nykyiset kipupisteet

Yleinen arkkitehtuuri(Yksinkertaistettu)Tietokanta

Tietoyhteys (O/R)

Domain Model

Business logiikka Palvelukerros

Käyttöliittymä-logiikka

Käyttöliittymän tietomalli

Käyttöliittymä

Debug

Page 3: C# nykyiset kipupisteet

Tuotannon muutostarpeet

Uusi Business-tarve• Domain muuttuu

Bugi• Yllättävät

sivuvaikutukset

Page 4: C# nykyiset kipupisteet

Olioiden muoto määriteltävä ennen toiminnallisuutta

Luonnollista?• “Minä ja lintu, kentällä juoksen ja lentä䔕 “Minä juoksen kentällä ja lintu lentää”

Pakollinen “alhaalta ylös” suunnittelu

Page 5: C# nykyiset kipupisteet

Olio

Page 6: C# nykyiset kipupisteet

vs. funktio-parametri

Page 7: C# nykyiset kipupisteet

Olioiden “yleiskäyttöisyys”

Kantaluokista haittaa

Johtaa reflectioniin• Virheet ajonaikaisesti asiakkaalle• Suorituskyky hidastuu

Page 8: C# nykyiset kipupisteet

C# kipupisteet

Page 9: C# nykyiset kipupisteet

Immutable propertypublic class MyObject{    private readonly string myproperty;    public string MyProperty {         get{            return myproperty;        }    }    public MyObject(string prop)    {        myproperty = prop;    }} 19 sanaa+ 10 sulkua!

Page 10: C# nykyiset kipupisteet

Tyyppimäärittelytvar list = new List<List<int>>{                new List<int>{1,2,3},                new List<int>{4,5,6},};

Ok!Noise!

Func<Func<int, List<int>, string>, Func<int, List<int>>, int, string> S = (x, y, z)=> x(z, y(z)); 

Page 11: C# nykyiset kipupisteet

F# syntaksitype MyObject(prop:string) =     member x.MyProperty = prop

7 sanaa+ 2 sulkua!

let list = [[1;2;3];[4;5;6]]

let S x y z = x z (y z) Ok!

Page 12: C# nykyiset kipupisteet

Generics parametrikonstruktori

Page 13: C# nykyiset kipupisteet

void ei ole tyyppi

Func ja Action ovat eri luokat

Page 14: C# nykyiset kipupisteet

Ei ole “jokotai”-tyyppiä

Ei ilman rajapintaa• Switch ottaa parametrina

const:in?

Joko Reflektio tai castaus• Suorituskyky• Ajonaikaiset virheet