SlideShare a Scribd company logo
Olio-ohjelmoinninkipupisteet
Tietokanta Yleinenarkkitehtuuri(Yksinkertaistettu) Tietoyhteys(O/R) Käyttöliittymä Domain Model Käyttöliittymän tietomalli Business logiikka Käyttöliittymä-logiikka Palvelukerros Debug
Tuotannonmuutostarpeet
Olioiden muoto määriteltävä ennen toiminnallisuutta
Olio
vs. funktio-parametri
Olioiden“yleiskäyttöisyys”
C# kipupisteet
Immutable property public class MyObject {     private readonly string myproperty;     public string MyProperty {          get{             return myproperty;         }     }     public MyObject(string prop)     {         myproperty = prop;     } }
Tyyppimäärittelyt var 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)); 
F# syntaksi type MyObject(prop:string) =      member x.MyProperty = prop let list = [[1;2;3];[4;5;6]]  let S x y z = x z (y z)  Ok!
Generics parametrikonstruktori
void ei ole tyyppi
Ei ole “jokotai”-tyyppiä

More Related Content

Viewers also liked

Ohjelmointia & monilukutaitoa
Ohjelmointia & monilukutaitoaOhjelmointia & monilukutaitoa
Ohjelmointia & monilukutaitoa
Emilia Hjelm
 
如何運用簡易教具來進行教學
如何運用簡易教具來進行教學 如何運用簡易教具來進行教學
如何運用簡易教具來進行教學
missliao
 
LINQ käytännössä
LINQ käytännössäLINQ käytännössä
LINQ käytännössä
Tuomas Hietanen
 
Message passing & NoSQL (in English)
Message passing & NoSQL (in English)Message passing & NoSQL (in English)
Message passing & NoSQL (in English)
Tuomas Hietanen
 
F# ja C# yhteiskäyttö
F# ja C# yhteiskäyttöF# ja C# yhteiskäyttö
F# ja C# yhteiskäyttö
Tuomas Hietanen
 
F# references (and some misc slides)
F# references (and some misc slides)F# references (and some misc slides)
F# references (and some misc slides)
Tuomas Hietanen
 
Pari sekalaista diaa ja F#-Referenssejä
Pari sekalaista diaa ja F#-ReferenssejäPari sekalaista diaa ja F#-Referenssejä
Pari sekalaista diaa ja F#-Referenssejä
Tuomas Hietanen
 
20111030 Perth SharePoint User Group - Building an Enterprise Mash-Up Platform
20111030 Perth SharePoint User Group - Building an Enterprise Mash-Up Platform20111030 Perth SharePoint User Group - Building an Enterprise Mash-Up Platform
20111030 Perth SharePoint User Group - Building an Enterprise Mash-Up Platform
Garry Stewart
 
Microsoft Integration Roadshow: Integration in Action
Microsoft Integration Roadshow: Integration in ActionMicrosoft Integration Roadshow: Integration in Action
Microsoft Integration Roadshow: Integration in Action
Garry Stewart
 
Ohjelmointikielet ja -paradigmat - kalvot 2014
Ohjelmointikielet ja -paradigmat - kalvot 2014Ohjelmointikielet ja -paradigmat - kalvot 2014
Ohjelmointikielet ja -paradigmat - kalvot 2014
Jouni Smed
 
Koodiaapinen-MOOC 2015 toteutuma
Koodiaapinen-MOOC 2015 toteutumaKoodiaapinen-MOOC 2015 toteutuma
Koodiaapinen-MOOC 2015 toteutuma
Tarmo Toikkanen
 

Viewers also liked (11)

Ohjelmointia & monilukutaitoa
Ohjelmointia & monilukutaitoaOhjelmointia & monilukutaitoa
Ohjelmointia & monilukutaitoa
 
如何運用簡易教具來進行教學
如何運用簡易教具來進行教學 如何運用簡易教具來進行教學
如何運用簡易教具來進行教學
 
LINQ käytännössä
LINQ käytännössäLINQ käytännössä
LINQ käytännössä
 
Message passing & NoSQL (in English)
Message passing & NoSQL (in English)Message passing & NoSQL (in English)
Message passing & NoSQL (in English)
 
F# ja C# yhteiskäyttö
F# ja C# yhteiskäyttöF# ja C# yhteiskäyttö
F# ja C# yhteiskäyttö
 
F# references (and some misc slides)
F# references (and some misc slides)F# references (and some misc slides)
F# references (and some misc slides)
 
Pari sekalaista diaa ja F#-Referenssejä
Pari sekalaista diaa ja F#-ReferenssejäPari sekalaista diaa ja F#-Referenssejä
Pari sekalaista diaa ja F#-Referenssejä
 
20111030 Perth SharePoint User Group - Building an Enterprise Mash-Up Platform
20111030 Perth SharePoint User Group - Building an Enterprise Mash-Up Platform20111030 Perth SharePoint User Group - Building an Enterprise Mash-Up Platform
20111030 Perth SharePoint User Group - Building an Enterprise Mash-Up Platform
 
Microsoft Integration Roadshow: Integration in Action
Microsoft Integration Roadshow: Integration in ActionMicrosoft Integration Roadshow: Integration in Action
Microsoft Integration Roadshow: Integration in Action
 
Ohjelmointikielet ja -paradigmat - kalvot 2014
Ohjelmointikielet ja -paradigmat - kalvot 2014Ohjelmointikielet ja -paradigmat - kalvot 2014
Ohjelmointikielet ja -paradigmat - kalvot 2014
 
Koodiaapinen-MOOC 2015 toteutuma
Koodiaapinen-MOOC 2015 toteutumaKoodiaapinen-MOOC 2015 toteutuma
Koodiaapinen-MOOC 2015 toteutuma
 

More from Tuomas Hietanen

Blockchain (using NBitcoin and FSharp)
Blockchain (using NBitcoin and FSharp)Blockchain (using NBitcoin and FSharp)
Blockchain (using NBitcoin and FSharp)
Tuomas Hietanen
 
Machine learning (using Accord.NET and FSharp)
Machine learning (using Accord.NET and FSharp)Machine learning (using Accord.NET and FSharp)
Machine learning (using Accord.NET and FSharp)
Tuomas Hietanen
 
Possible FSharp Refactorings could be...
Possible FSharp Refactorings could be...Possible FSharp Refactorings could be...
Possible FSharp Refactorings could be...
Tuomas Hietanen
 
Function therory
Function theroryFunction therory
Function therory
Tuomas Hietanen
 
The Pain Points of C#
The Pain Points of C#The Pain Points of C#
The Pain Points of C#
Tuomas Hietanen
 
Linq in practice
Linq in practiceLinq in practice
Linq in practice
Tuomas Hietanen
 
Using f# project from c#
Using f# project from c#Using f# project from c#
Using f# project from c#
Tuomas Hietanen
 
Funktioteoriaa
FunktioteoriaaFunktioteoriaa
Funktioteoriaa
Tuomas Hietanen
 
Coding with LINQ, Patterns & Practices
Coding with LINQ, Patterns & PracticesCoding with LINQ, Patterns & Practices
Coding with LINQ, Patterns & Practices
Tuomas Hietanen
 

More from Tuomas Hietanen (9)

Blockchain (using NBitcoin and FSharp)
Blockchain (using NBitcoin and FSharp)Blockchain (using NBitcoin and FSharp)
Blockchain (using NBitcoin and FSharp)
 
Machine learning (using Accord.NET and FSharp)
Machine learning (using Accord.NET and FSharp)Machine learning (using Accord.NET and FSharp)
Machine learning (using Accord.NET and FSharp)
 
Possible FSharp Refactorings could be...
Possible FSharp Refactorings could be...Possible FSharp Refactorings could be...
Possible FSharp Refactorings could be...
 
Function therory
Function theroryFunction therory
Function therory
 
The Pain Points of C#
The Pain Points of C#The Pain Points of C#
The Pain Points of C#
 
Linq in practice
Linq in practiceLinq in practice
Linq in practice
 
Using f# project from c#
Using f# project from c#Using f# project from c#
Using f# project from c#
 
Funktioteoriaa
FunktioteoriaaFunktioteoriaa
Funktioteoriaa
 
Coding with LINQ, Patterns & Practices
Coding with LINQ, Patterns & PracticesCoding with LINQ, Patterns & Practices
Coding with LINQ, Patterns & Practices
 

C# nykyiset kipupisteet

Editor's Notes

  1. Jokaisessa kerroksessa on rajapinta (Interface) ja sen toteuttava luokka Luokkaa ei löydä helposti, se saattaa tulla IoC:lla Kerrosten rajapinnat eivät saa muuttua Usein kerrokset ovat “turhia” pass-through-kerroksia Ehkä sisältävät null-checkit (ja olio-mappauksen kerroksen olioista toisiin) OMG Ponies: http://msmvps.com/blogs/jon_skeet/archive/2009/11/02/omg-ponies-aka-humanity-epic-fail.aspx
  2. Ylläpitovaiheessa koodin muuttaminen on kalliimpaa kuin kehitysvaiheessa On kaksi syytä muuttaa koodia ylläpitovaiheessa: Business-tarve muuttuu, Domain-olion rooli muuttuuBugi: Koodissa näyttäisi lukevan eri tavalla kuin ohjelma toimii Kummassakin tapauksessa ollaan ongelmissa
  3. Olioita on alun perin perusteltu ihmisille luonnollisena mallina. Suunniteltava bottom-up, vaikka määrittelyt tehdään kuitenkin ensin korkeammalla tasolla ennen yksityiskohtia.
  4. Tässä container… Sitten tarvitaanmanager,provider, factory, …Ja interfacet tietysti…Mitä tämä oikeastaan tekee?
  5. Yleiskäyttöisyys ei ikinä onnistu, koska kaikkea tulevaa toiminnallisuutta ei alussa koskaan tiedetä Ainoa toimiva yleiskäyttöisyys on Reflection Menetetään kääntäjän virheentarkistukset Tyyppijärjestelmä ei ole .NET:ssa sattumalta!
  6. - Kuinka vaikeaa se voi olla???Noise! Perus property { get;set; } on helppo, mutta olioista on vaikeaa tehdä sellaisia, ettei joku muu voisi käyttää set:iä saamaan olion väärään tilaan.
  7. Kuvan alareunan funktio on oikeasti toimiva… :-)
  8. Uudempi kieli ja lyhyemmät käskyt ja paremmat kirjastot eivät ole itse asiassa edes pääpointti.F#:lla on korkeampi abstraktiotaso kuin C#:lla. Kuten C-kiellellä on korkeampi abstraktiotaso kuin assembler-kielellä.
  9. Javalla ei tietenkään voi tehdä mitään tämän suuntaistakaan:Javan generics on vain “syntacticsugar”, eli kääntäjä optimoi sen pois
  10. - Tämä olisi ok, jos kieli muutenkin erittelisi sivuvaikutukset, mutta myös Func voi suorittaa sivuvaikutuksen. Tästä syystä:F#-funktiot eivät ole yhteensopivia C# kanssa, Aito patternmatching ei toimi F# listakäsittely on ilmaisuvoimaisempaa kuin LINQ. Lisäksi listojen jako useisiin IEnumerableihin on hankalaa (lähinnä vain GroupBy-kikka).
  11. Reflektioon ajautuminen: suorituskyky, käännösvirheiden menetys