SlideShare une entreprise Scribd logo
1  sur  14
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ä

Contenu connexe

En vedette

Ohjelmointia & monilukutaitoa
Ohjelmointia & monilukutaitoaOhjelmointia & monilukutaitoa
Ohjelmointia & monilukutaitoaEmilia Hjelm
 
如何運用簡易教具來進行教學
如何運用簡易教具來進行教學 如何運用簡易教具來進行教學
如何運用簡易教具來進行教學 missliao
 
Message passing & NoSQL (in English)
Message passing & NoSQL (in English)Message passing & NoSQL (in English)
Message passing & NoSQL (in English)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 PlatformGarry Stewart
 
Microsoft Integration Roadshow: Integration in Action
Microsoft Integration Roadshow: Integration in ActionMicrosoft Integration Roadshow: Integration in Action
Microsoft Integration Roadshow: Integration in ActionGarry Stewart
 
Ohjelmointikielet ja -paradigmat - kalvot 2014
Ohjelmointikielet ja -paradigmat - kalvot 2014Ohjelmointikielet ja -paradigmat - kalvot 2014
Ohjelmointikielet ja -paradigmat - kalvot 2014Jouni Smed
 
Koodiaapinen-MOOC 2015 toteutuma
Koodiaapinen-MOOC 2015 toteutumaKoodiaapinen-MOOC 2015 toteutuma
Koodiaapinen-MOOC 2015 toteutumaTarmo Toikkanen
 

En vedette (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
 

Plus de 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
 
Using f# project from c#
Using f# project from c#Using f# project from c#
Using f# project from c#Tuomas Hietanen
 
Coding with LINQ, Patterns & Practices
Coding with LINQ, Patterns & PracticesCoding with LINQ, Patterns & Practices
Coding with LINQ, Patterns & PracticesTuomas Hietanen
 

Plus de 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

Notes de l'éditeur

  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