際際滷

際際滷Share a Scribd company logo
.NET ohjelmointi
             A-ITY04-2000

               kertaus

            Timo Tanila
Tampere University of Applied Sciences
.NET sovelluskehys
 .NET rakentuu:
    CLR, Common Language Runtime  kerros. Ensisijaisena
     teht辰v辰n辰 on eri tietotyyppien k辰sittely. Huolehtii useista
     matalan tason yksityiskohdista, kuten muistinhallinnasta,
     sovellusten ajamisesta, s辰ikeiden k辰sittelyst辰, ja suorittaa
     erilaisia turvatarkastuksia.
    CTS, Common Type System - kuvaa tietotyypit ja
     ohjelmakoodirakenteet, joita runtime tukee
    CLS, Common Language Specification - m辰辰rittelee sen
     osajoukon tavallisimmista tietotyypeist辰 ja
     ohjelmakoodirakenteista, joika kaikki. NET
     ohjelmointikielet tukevat.
       Kaikki .NET kielet k辰辰nnet辰辰n ensin CIL-kielisiksi, Common
        Intermediate Language. Vasta CIL k辰辰nt辰j辰 tekee bin辰辰ri辰.
C# ohjelmointikieli
 Microsoft laati uuden ohjelmointikielen, C# -kielen, erityisesti .NET-alustaa
  varten
 C# syntaksi on hyvin samankaltainen Javaan verrattuna. Molemmat
  kuuluvat C-kielien perheeseen.
 C# yksityiskohtia:
     Ei osoittimia! C# ohjelmat eiv辰t tyypillisesti tarvitse suoraa osoitin
      manipulointia
     Automaattinen muistinhallinta = roskien ker辰ys. Ei tarvitse deallokoida muistia.
     Mahdollisuus k辰ytt辰辰 yleisi辰 tyyppej辰, generics <T>. Linkki
     partial keyword mahdollistaa luokan jakamisen useisiin eri kooditiedostoihin.
     Lambda-ilmaisu yksinkertaistaa delegaattien k辰ytt旦辰. Mahdollistaa
      nimett旦m辰n funktion m辰辰rittelyn. customers.Where(c => c.City == "London");
     LINQ-kieliset lauseet yksinkertaistavat merkitt辰v辰sti tietol辰hteiden ja tiedon
      k辰sittely辰. Linkki
Visual Studio 2010 / Useimmiten
    k辰yt旦ss辰 olevat n辰pp辰inyhdistelm辰t
   Ctrl+Space  IntelliSense valinnat
   Ctrl+Tab  selaa avoimia koodi- yms. ikkunoita
   Ctrl+E F  muotoilee valitun koodin
   Ctrl+E C  kommentoi valitun koodin
   Ctrl+E U  poistaa kommentoinnin
   Ctrl+H  Searchn replace valitulle koodille
   Listaus valmiista yhdistelmist辰
WPF, Windows Presentation Foundation
   Microsoft mainostaa: Windows Presentation Foundation (WPF) on tarkoitettu
    uuden sukupolven graafisten k辰ytt旦liittymien ja sovellusten rakentamiseen, ja saat
    tehty辰 sen avulla visuaalisesti upeita k辰ytt旦kokemuksia.
   WPF:n ydin on vektoripohjainen kuvank辰sittelyj辰rjestelm辰, joka on resoluutiosta
    riippumaton.
   Osaa hy旦dynt辰辰 nykyaikaisia n辰yt旦nohjaimia.
   WPF sis辰lt辰辰 laajan valikoiman aputoimintoja sovellusten kehitt辰miseen.
       Extensible Application Markup Language (XAML)
       Kontrollit
       Tietojen sitominen (Data Binding)
       2D ja 3D grafiikka ja animaatiot
       Tyylit (Styles), mallit (Templates)
   Koska WPF sis辰ltyy Microsoft. NET Framework:iin, on sovelluskehityksess辰
    hy旦dynnett辰viss辰 koko .NET Framework luokkakirjasto.
Yleisimm辰t WPF kontrollit

   Painikkeet: Button ja RepeatButton.
   Data n辰yt旦t: DataGrid, ListView, ja TreeView.
   P辰iv辰ys ja sen valinta: Calendar ja DatePicker.
   Valintaikkunat: OpenFileDialog, SaveFileDialog
   K辰ytt辰j辰n teksti input: TextBox
   Layoutin tekeminen: DockPanel, Grid, GridView, Panel,
    ScrollBar, StackPanel, Window,
   Navigointi: Hyperlink
   Valinta: CheckBox, ComboBox, ListBox, RadioButton
   Tietokent辰t: Label, Popup, ProgressBar, TextBlock, ja ToolTip.
   Menu ja ty旦kalupalkki: Menu, Toolbar,
ASP.NET
 ASP.NET on Microsoftin web-kehitysalusta
 ASP.NET-sovellus on kokoelma tiedostoja kuten esimerkiksi C#-koodia,
  aspx-tiedostoja, resurssitiedostoja (kuvat jne.), jotka on tallennettu
  palvelimelle, yleens辰 IIS-palvelimelle. (Apachelle Mono-projekti)
 HTTP request/response on se v辰line, jolla selain ja ASP.NET-sovellus
  keskustelevat kesken辰辰n. Keskustelu on HTML-muotoista.
 Esimerkki aspx -> (X)HTML muunnoksesta:
<asp:Button ID=painike" runat="server"
Text=Painike" BorderColor="Blue
BorderStyle="Solid" BorderWidth="5px" />
=>
<input type="submit" name=painike" value=Painike"
id=painike style="border-color:Blue;border-
width:5px;border-style:Solid;" />
 Visual Studiolla kun kehitet辰辰n ASP.NET sovelluksia, on yleens辰 oikean IIS-
  palvelimen sijasta k辰yt旦ss辰 Visual Studio Development Server.
Silverlight
 Silverlight-applikaatioiden kehitt辰minen on hyvin
  samankaltaista kuin WPF applikaatioidenkin. Silverlight
  tarjoaa kuitenkin vain osan WPF:n ominaisuuksista ja
  luokkakirjastoista k辰ytt旦旦n.
 Silverlight-sovellusta voi ajaa miss辰 tahansa modernissa
  selaimessa, kunhan Silverlight plug-in l旦ytyy (kuten
  IE, Firefox, Google Chrome tai Safari).
 Tyypillisesti ASP.NET-verkkosovelluksessa on mukana
  Silverlight-applikaatioita.
 On my旦s mahdollista ajaa Silverlight-sovellusta selaimen
  ulkopuolella muissakin k辰ytt旦j辰rjestelmiss辰 kuin
  Windowsissa. Riitt辰辰, ett辰 Silverlight runtime on asennettu.
  (Linux, Mac OS, ...).
 Silverlightin tavoitteena on tarjota vaihtoehto Adoben
  Flashille.
XAML (Extensible Application Markup Language),
                      Yleist辰
 XAML on merkint辰kieli, jolla voi esitell辰 ja alustaa .NET olioita
 XAMLia voi soveltaa monissa eri tarkoituksissa, mutta ensisijaisesti
  se on tarkoitettu WPF-k辰ytt旦liittymien rakentamiseen (K辰yt旦ss辰
  kuitenkin my旦s Silverlight ja ASP.NET -kehityksess辰)
 XAML tiedostossa voidaan siis m辰辰ritell辰 k辰ytt旦liittym辰
  asetteluineen, painikkeineen ja muine kontrolleineen jne.
 XAMLia voi kirjoittaa k辰sin tai k辰ytt辰辰 sen generoimiseen
  ty旦kaluja, esimerkiksi Visual Studion designeria toolboxeineen tai
  Expression Blend ohjelmaa. Yksi XAMLin tarkoitus onkin, ett辰
  sovelluskehitysty旦 voidaan helpommin jakaa graafikoiden ja
  ohjelmoijien kesken = ohjelmoija tekee code-behindin ja graafikko
  XAMLin.
 Kuitenkin, ohjelmoijana on useimmiten helpompaa kirjoittaa
  XAMLia k辰sin, ainakin viimeistell辰 se k辰sin, jotta saa aikaan
  halutunlaisen lopputuloksen.
XAML (Extensible Application Markup Language),
                     Yleist辰

 XAML ei ollut viel辰 k辰yt旦ss辰 aiemmin Windows Forms
   applikaatiokehityksess辰. Kaikki k辰ytt旦liittym辰koodi oli
  teht辰v辰 C#-koodina.
 Huom. WPF applikaatioitakin voi koodata ilman
  XAMLia, tekem辰ll辰 kaikki koodi C#.koodina kuten
  ennenkin. Se ei ole kuitenkaan tarkoituksenmukaista.
 WPF sovelluskehityksess辰 k辰辰nt辰j辰 muuttaa XAML-
  koodin BAML-koodiksi (Binary Application Markup
  Language) ja lis辰辰 BAMLin mukaan applikaation
  resurssiksi. Ajonaikana on nopeampaa tulkita
  bin辰辰rimuotoista merkint辰kielt辰.
XAML (Extensible Application Markup Language),
                     Rakenne

 Jokainen elementti XAML merkint辰kieless辰 vastaa
  jotakin .NET luokkaa. Ne on nimetty siis tarkalleen
  samalla nimell辰.
 XAMLin elementti <Button> aiheuttaa siis sen, ett辰
  k辰辰nt辰j辰 luo WPF sovellukseen Button olion.
 Kuten XML-dokumenteissakin, XAMLissakin voi
  kirjoittaa sis辰kk辰isi辰 elementtej辰. Siis k辰yt辰nn旦ss辰, jos
  esim. DockPanel -elementin sis辰lle on kirjoitettu
  Button, on k辰ytt旦liittym辰n DockPanel osiossa jossain
  kohtaa Button.
 XAMLissa voi alustaa olioiden propertyj辰.
XAML (Extensible Application Markup Language),
                      Rakenne
 XAML tiedostossa on aina yksi ylimm辰n tason elementti, joka on
  esimerkiksi WPF sovelluksissa:
     Window
     Application
 Se, ett辰 on yksi ylimm辰n tason elementti tarkoittaa siis k辰yt辰nn旦ss辰
  sit辰, ett辰 kun kirjoittaa sulkevan elementin, esim. </Window>, ei sen
  per辰辰n voi kirjoittaa en辰辰 uusia elementtej辰.
 XAML k辰辰nt辰j辰n t辰ytyy my旦s tiet辰辰 miss辰 on m辰辰ritelty XAMLissa k辰ytetyt
  luokat, joten nimiavaruudet on merkitty XAMLin ensimm辰iseen
  elementtiin tageilla, esim. xmlns. (Huom. Notaatio muistuttaa
  webbilinkki辰). N辰in XAML k辰辰nt辰j辰 l旦yt辰辰 esim. Window-luokan jne.
     *presentation, sis辰lt辰辰 WPF luokat kuten kontrollit yms.
     *xaml, sis辰lt辰辰 XAML tulkaukseen liittyvi辰 luokkia (huom. m辰p辰tty x:ll辰)
 Oma luokka, jonka osa XAML tiedosto on, on merkitty x:Class tagilla
  (partial avainsana tarvitaan code-behindissa, koska osa luokan
  m辰辰rittelyst辰 on XAMLissa)
K辰ytt旦liittym辰n tekeminen / container-luokat
 Aiemmin Windows Forms -sovelluksia teht辰ess辰 oli k辰yt旦ss辰
  koordinaatteihin perustuva asettelu.
     Todellinen haaste oli varmistaa, ett辰 ulkoasu pysyi hyv辰nn辰k旦isen辰, vaikka
      ikkunan kokoa muutettiin.
 WPF sovelluksissa on k辰yt旦ss辰 muutama erilainen container-luokka,
  joiden avulla k辰ytt旦liittym辰n elementtej辰 voi sijoitella ja asetella k辰tev辰sti.
 Asettelun saa tehty辰 helposti sellaiseksi, ett辰 ikkunan koon muuttaminen
  pit辰辰 ulkoasun ryhdiss辰.
 container-luokat voidaan mielt辰辰 s辰ili旦iksi, joiden sis辰lle varsinaiset
  kontrollit ja datataulut ym. loppuk辰ytt辰j辰lle n辰kyv辰t elementit asetellaan.
 Ideana on, ett辰 kun kontrollit on aseteltu containereihin, ei ole tarpeen
  asettaa itse kontrollin kokoa tai koordinaattia kiinte辰ksi.
 Kaikki containerit periytyv辰t Panel -luokasta.
 T辰rkeimm辰t asetteluun tarkoitetut container-luokat ovat:
       StackPanel
       WrapPanel
       DockPanel
       Grid
Data Binding
 Data Binding eli tietojen sidonta tarkoittaa,
  ett辰 on olemassa l辰hde- ja kohdeobjektien
  v辰lille tehty sidonta, joka kertoo systeemille,
  ett辰 l辰hdeobjektista tulee asettaa jotakin
  tietoja kohdeobjektiin.
 Kohdeobjekti on aina dependency property.
 T辰rkein k辰ytt旦tarkoitus sovelluksissa on jonkin
  tiedon n辰ytt辰minen k辰ytt旦liittym辰ss辰.
 L辰hdeobjekti voi olla melkein mit辰 tahansa,
  kuten toinen elementti tai jokin tietorakenne.
Tietorakenteet
 Visual C# tarjoaa useita erilaisia
  tietorakenteita. Sopivan tietorakenteen valinta
  riippuu luonnollisesti k辰ytt旦tarkoituksesta.
   K辰yt辰nn旦ss辰 muutaman osaaminen riitt辰辰 jo
    pitk辰lle: lista (List<T>), hash (Hashtable).
 Kun tietorakenne on olemassa, sit辰 voidaan
  k辰sitell辰 todella n辰pp辰r辰sti LINQ-lauseilla.
List<T>
 Tyypitetty indeksoitu lista. Tarjoaa valmiiksi runsaasti metodeja esim.
  listan alkioiden etsimiseen, lajitteluun, k辰sittelyyn jne.
 List<T> -luokka pohjautuu ArrayList-luokkaan.
 List<T> luokan alkioita voidaan verrata kesken辰辰n. Oleellista on, ett辰
  <T>, siis listan alkioiden tietotyyppi, toteuttaa tarvittavia rajapintoja:
  IEquatable<T> rajapintaa vertailutoiminnolle Equals<T> (Jos tyyppi ei tue
  t辰t辰 rajapintaa, niin k辰ytt辰辰 yleist辰 Object.Equals(Object) vertailua).
  IComparable<T> rajapinta tarpeen, jos esim. lajitellaan (Sort), jotta
  k辰yt旦ss辰 CompareTo metodi.
 Kuten ArrayList-listassakin:
     Lista ei ole oletusarvoisesti miss辰辰n tietyss辰 j辰rjestyksess辰. Lajittele lista ennen
      k辰ytt旦辰, jos tarpeen.
     Listan alkioita voidaan k辰sitell辰 indeksin kautta, joka alkaa 0:sta.
     Listassa voi olla saman alkion duplikaatteja.
 T辰rke辰 ero ArrayList-listaan on, ett辰 List<T> -listan alkioina voi olla vain
  samantyyppisi辰 alkioita => yleens辰 hy旦dyllinen ominaisuus.
Hashtable
 Hashtable on kokoelma avain/arvo-pareja, jotka j辰rjestet辰辰n
  avaimen perusteella.
 Jokainen hash-taulun elementti on avain/arvo-pari, joka on
  tallennettu DictionaryEntry objektiin.
 Avain t辰ytyy olla m辰辰ritelty. Taulussa ei ole duplikaatteja samalla
  avain-arvolla.
 Avain-arvoja ei voi muuttaa sen j辰lkeen kun ne on asetettu.
 Hash-taulu on tehokas tietorakenne, vaikka kyseess辰 olisi hyvin
  suurikin taulu. Kunhan avain tiedet辰辰n, saadaan elementti haettua
  nopeasti.
 Hash-taulun koko kasvaa dynaamisesti kun uusia elementtej辰
  lis辰t辰辰n.
 Foreach-lauseessa C#-kielell辰 saadaan yksi kerrallaan jokainen
  DictionaryEntry  ei siis suoraan arvoja.
LINQ
 Sovellukset k辰ytt辰v辰t tyypillisesti monenlaisia tietovarastoja
  toiminnoissaan. Tieto voi olla esimerkiksi XML-tiedostoissa,
  relaatiotietokannoissa tai erilaisissa sovelluksen sis辰isiss辰
  tietorakenteissa kuten listoissa tai taulukoissa ym.
 Perinteisesti ohjelmoijan on tarvinnut k辰ytt辰辰 eri tyyppisi辰
  tietol辰hteit辰 varten eri rajapintoja ja tehd辰 tiedon luku- ja
  kirjoitustoiminnot tietol辰hteen m辰辰r辰辰m辰ll辰 tavalla.
 Language Integrated Query (LINQ)-tekniikka tuli mukaan
  .NET 3.5 versiossa, joten se on suht tuore lis辰ominaisuus
  .NET ymp辰rist旦旦n ja C# kieleen. (.NET 3.5 julkaistiin 2007
  lopulla). LINQ-lauseet helpottavat tietol辰hteiden k辰ytt旦辰
  merkitt辰v辰sti.
LINQ rakennuspalikat
 C# -kieleen on m辰辰ritelty muutama LINQ-
  lauseisiin liittyv辰 apuominaisuus:
   Implisiittisesti m辰辰ritellyt paikalliset muuttujat
   Objektin / kokoelman alustussyntaksi
   Lambda-ilmaisu
   Extension Methods
   Anonyymit tyypit
Implisiittisesti m辰辰ritellyt paikalliset
                   muuttujat
 var avainsanan avulla voi esitell辰
  muuttujan, jonka tyyppi辰 ei ole m辰辰ritelty
 Tyyppi on kuitenkin m辰辰ritelty sen j辰lkeen, kun
  k辰辰nt辰j辰 huomaa, ett辰 muuttujaa k辰ytet辰辰n
  ensimm辰ist辰 kertaa = k辰辰nt辰j辰 m辰辰rittelee ja
  asettaa sopivan tyypin
 Muuttujan tyyppi辰 ei siis voi vaihtaa en辰辰 t辰m辰n
  j辰lkeen toiseksi
 LINQ-lauseissa on yleens辰 tarpeen, ett辰 k辰辰nt辰j辰
  saa m辰辰ritell辰 sopivan tyypin.
 demo
Objektin / kokoelman alustussyntaksi

 Alustussyntaksi mahdollistaa luokan olion tai
  tietorakenteen alustamisen helposti yhdell辰
  lauseella.
 Alustussyntaksin k辰ytt辰minen on
  vapaaehtoista eli alustus voidaan toki tehd辰
  perinteiseen tapaan rakentajan avulla tai
  asettamalla alkuarvot yksitellen.
 Kuitenkin, alustussyntaksi tekee koodista
  luettavampaa ja tiiviimp辰辰
 demo
Lambda-ilmaisu
 C# Lambda-ilmaisun avulla voidaan rakentaa
  delegaatti. Siis tilanteessa, jossa jokin metodi vaatisi
  parametrina delegaatin, voimmekin k辰ytt辰辰 lambda-
  ilmaisua.
 Lambda-ilmaisun k辰ytt辰minen yleens辰 yksinkertaistaa
  kirjoitettavan koodin ulkoasua ja m辰辰r辰辰.
 Lambda-ilmaisu koostuu k辰yt辰nn旦ss辰:
   (arg1,arg2,...) => koodi
 Lambda-ilmaisun k辰ytt旦 selkeytt辰辰 erityisesti LINQ-
  lauseita
 demo
Extension Methods
 Extension Methodsien avulla voi tehd辰 laajennuksen
  johonkin olemassa olevaan luokkaan ilman uuden
  aliluokan tekemist辰.
 Lis辰ksi, voit lis辰t辰 uusia toimintoja sinet旦ityihin
  (sealed) luokkiin ja rakenteisiin, joita ei siis voida
  peri辰.
 K辰yt辰nn旦ss辰 Extension Methodsit pit辰辰 aina
  m辰辰ritell辰 static avainsanaa k辰ytt辰en
 Extension Methods-m辰辰rityksi辰 ei yleens辰 tarvitse
  tehd辰 LINQ-lauseille, mutta on hyv辰 tiet辰辰, ett辰 LINQ-
  lauseissa on niit辰 yleens辰 tiet辰m辰tt辰mme k辰yt旦ss辰
  Microsoftin tarjoamina
 demo
Anonyymit tyypit
 Anonyymin tyypin avulla voidaan mallintaa
  uusi dataluokka ilman varsinaista
  luokkam辰辰rittely辰.
 K辰辰nt辰j辰 luo uuden luokan k辰辰nn旦svaiheessa
 T辰t辰 ominaisuutta k辰ytet辰辰n paljon LINQ-
  lauseissa, kun olemassa olevasta dataluokasta
  otetaan vaikkapa vain osa j辰senmuuttujista
  talteen
 demo
LINQ operaattorit
from, in             K辰ytet辰辰n m辰辰rittelem辰辰n LINQ-ilmaisun kohdeobjektit


where                K辰ytet辰辰n m辰辰rittelem辰辰n ehdot, joilla haluttu osajoukko
                     saadaan

select               K辰ytet辰辰n halutun osajoukon valitsemiseen jatkotoimenpiteit辰
                     varten

join, on, equals,    K辰ytet辰辰n toisen tietol辰hteen liitt辰miseen samaan LINQ-
into                 lauseeseen

orderby, ascending, K辰ytet辰辰n valitun osajoukon lajitteluun
descending

group, by            K辰ytet辰辰n valitun osajoukon ryhmittelyyn
Tapahtuma (Event),
               Yleist辰 .NET eventeist辰
 Event on C#-kielen keino v辰litt辰辰 oliolle
  tapahtunut asia muille siit辰 kiinnostuneille olioille
  (client).
 Tyypillisesti event on keino v辰litt辰辰 jokin
  k辰ytt旦liittym辰n tapahtuma muille ohjelman osille.
 Eventtej辰 voi toki k辰ytt辰辰 muutenkin,
  esimerkiksi v辰litt辰m辰辰n jokin tilanne tai
  tapahtuma k辰ytt旦liittym辰n ulkopuoleltakin.
 Eventtien toteutus perustuu delegaatteihin.
 Jokaisen Eventin argumentit periytyv辰t
  EventArgs luokasta. (Esim. MouseEventArgs)
Routed Events
 Routed Event -tapahtumia reititet辰辰n tietyss辰
  j辰rjestyksess辰 elementilt辰 toiselle.
 Kun tapahtuma on k辰sitelty, se voidaan
  merkit辰 k辰sitellyksi.
 Voimme siis k辰yt辰nn旦ss辰 k辰sitell辰 tapahtuman
  siin辰 kohtaa ohjelmaamme kuin haluamme.
 Jotta voimme k辰sitell辰 tapahtuman, meid辰n
  t辰ytyy tehd辰 tapahtumank辰sittelij辰 (event
  handler).
Routed Events,
                                   WPF
Routed event tapahtumia on kolmea eri tyyppi辰:

1.   Suorat tapahtumat, direct events:
      N辰m辰 ovat tavanomaisia .NET eventtej辰 eli ne ovat per辰isin yhdest辰
       elementist辰 eik辰 niit辰 v辰litet辰 muualle. Esimerkiksi MouseEnter event on
       t辰llainen tapahtuma  se on yhden elementin tapahtuma, kun hiiren osoitin
       siirtyy elementin p辰辰lle.
2.   Nousevat tapahtumat, bubbling events:
      N辰m辰 tapahtumat l辰htev辰t liikkeelle kohde-elementist辰, mutta nousevat
       hierarkiassa yl旦sp辰in. Esimerkiksi MouseDown on nouseva tapahtuma eli se
       tulee ensin elementille, jota napsautetaan. Seuraavaksi se nousee hierarkiassa
       yl旦s eli jos Button on StackPanelin sis辰ss辰, niin Buttonin j辰lkeen StackPanelille.
       Tapahtuma nousee ylimm辰lle tasolle asti, joka siis usein Window.
3.   Tunneloidut tapahtumat, Tunneling events:
      N辰m辰 kulkevat vastaavasti ylh辰辰lt辰 alas, p辰辰tyen lopulta kohde-
       elementtiin, siis esim Button. Tarkoituksena on, ett辰 yl辰puoliset elementit
       voivat k辰sitell辰 tapahtuman ensin ja olla vaikkapa p辰辰st辰m辰tt辰 eventti辰 kohde-
       elementille asti. Esimerkiksi PreviewKeyDown on t辰llainen ja kaikki Preview*
       eventit.
Liit辰nn辰istapahtumat, attached events
 Nouseva tapahtuma bubbling event on
  mahdollista k辰sitell辰 hierarkian yl辰puolella
  vain, jos tapahtuma on sellainen, jota yl辰puoliset
  elementit tukevat.
 Ent辰 jos tapahtuma on sellainen, ett辰 vain
  kyseinen kontrolli tukee sit辰? L旦ytyyk旦
  StackPanelista esimerkiksi Click-tapahtumaa?
 Jos StackPanelissa on useita painikkeita ja
  haluamme k辰sitell辰 Click-tapahtuman yhteisesti
  StackPanel-tasolla, tulee avuksi attached event.
 Esim. ButtonBase.Click on siis ButtonBase
  luokasta, josta Button periytyy.
Elementin elinkaareen liittyv辰t tapahtumat,
                Lifetime events
 Initialized
    T辰m辰 l辰hetet辰辰n kun elementin olio on luotu
 Loaded
    T辰m辰 l辰hetet辰辰n kun elementti, esim. ikkuna
     (Window), on muuten valmis, mutta ei viel辰 piirretty
     n辰yt旦lle
 Unloaded
    T辰m辰 l辰hetet辰辰n kun kyseinen elementtiolio
     vapautetaan eli kun koko ikkuna suljetaan tai kyseinen
     elementti poistetaan ikkunasta
 N辰m辰 kolme ovat kaikille elementeille
  yhteisi辰, lis辰ksi on elementtikohtaisia
  elinkaaritapahtumia.
Sy旦tteeseen liittyv辰t tapahtumat, Input events
 Keyboard
   N辰pp辰imist旦st辰 Keydown, TextInput, KeyUp ja
    niiden Preview vastineet
 Mouse
   Hiiren k辰yt旦st辰 lukuisia esim.
    MouseMove, MouseWheel, Mouse*Button*, Mou
    seDoubleClick, jne. Ja Preview-vastineet
 Stylus
   Tablet PC:n kyn辰lle tarkoitettuja
 Multitouch
   Tuettu vain Windows 7 ja jatkossa ?.
Tyylit (Styles),
                     Yleist辰
 Tyylit ovat v辰line, joilla saa m辰辰ritetty辰
  yhteisi辰 tyyliohjeita, joita voi k辰ytt辰辰
  applikaatiossaan useammassa kuin yhdess辰
  paikassa.
 Meid辰n ei siis tarvitse m辰辰ritell辰 XAMLissa
  tyyli辰 jokaiselle kontrollille tai muulle
  elementille erikseen.
 Tyyleill辰 voidaan m辰辰ritell辰 marginaalit,
  taustat, v辰rit ja fontit jne.
Tyylit (Styles),
                         WPF
 WPF:n tyylien idea on samanlainen kuin
  Cascading Style Sheets (CSS)-tyylien, joita
  k辰ytet辰辰n paljon web-kehityksess辰.
 Kuten CSS-tyyleill辰kin, my旦s WPF tyyleill辰 voit
  m辰辰ritt辰辰 applikaatiolle yhteisi辰 tyylej辰.
 Edelleen CSS:n kaltaisesti, WPF tyylit voit
  kohdistaa automaattisesti tiettyihin
  elementteihin tai tiettyyn osioon.
 WPF tyylit tukevat her辰tteit辰 (Triggers), joiden
  avulla voit aktivoida tyylin kun jokin toinen
  elementti muuttuu esim. K辰ytt辰j辰 clikkaa
  kontrollia tms.
Shapes
 Yksinkertaisin tapa tehd辰 2-D graafista sis辰lt旦辰
  k辰ytt旦liittym辰辰n on k辰ytt辰辰 muotoelementtej辰
  (Shapes)
 Ne ovat luokkia, jotka edustavat yksinkertaisia viivoja,
  ellipsej辰, suorakulmioita ja monikulmioita.
 N辰it辰 yhdistelem辰ll辰 voi tehd辰 toki
  monimutkaisempaakin grafiikkaa.
 Oleellista muotoelementeist辰:
    Luokkia, jotka osaavat piirt辰辰 itse itsens辰
    Muotoelementtej辰 voi asetella containereihin. Usein
     muotojen kanssa hyv辰 container on Canvas, koska sen
     sis辰ll辰 muotoja voi asettaa koordinaateilla.
    Muotoelementit tukevat samoja tapahtumia (events) kuin
     muutkin valmiit elementit
Brushes ja Transform

 T辰ytev辰rin (Brush-luokka) voi asettaa kiinte辰ksi
  tai liukus辰vyll辰
   SolidColorBrush
   LinearGradientBrush
   RadialGradienBrush


 Transform-luokkien avulla voidaan muokata
  muotoelementtej辰.
WPF spesifinen osuus
Applikaatio luokka,
                          WPF
 K辰ynniss辰 oleva WPF sovellus edustaa yht辰 ilmentym辰辰
  System.Windows.Application luokasta
 Application olio seuraa kaikkia avoimia ikkunoita ja
  kontrolloi sovelluksen sulkemista ja l辰hett辰辰
  sovellukseen liittyvi辰 elinkaaritapahtumia (event).
 Visual Studio generoi meille valmiiksi Main-metodin (ja
  muutakin) kun aloitamme uuden WPF projektin.
    Uudessa WPF projektissa tiedostossa:
     /obj/x86/Debug/App.g.i.cs
 StartupUri-propertyll辰 kerrotaan p辰辰ikkuna eli meid辰n
  ei tarvitse itse kirjoittaa p辰辰ikkunan k辰ynnistyskoodia.
Applikaation kontrollointi
 Voimme asettaa Application-oliomme sulkeutumislogiikan
  ShutDownMode propertyll辰:
    OnLastWindowClose, oletusarvo
    OnMainWindowClose
    OnExplicitShutDown, t辰ytyy kutsua Application.Shutdown() metodia
     (joka toimii aina)
 Applikaatiolla on elinkaaritapahtumia (events), joille voi tehd辰
  k辰sittelij辰t. Esim. Startup, Exit, Activated, Deactivated, ym.
  (kokeillaan)
 Voimme my旦s ylikirjoittaa n辰iden eventtien l辰hetykseen liittyv辰t
  metodit. Metodin nimi on sama kuin tapahtuman nimi siten, ett辰
  siin辰 on etuliite eli Startup-metodi on OnStartup(), Exit-metodi on
  OnExit(), ja niin edelleen. (BTW, t辰m辰 nime辰misk辰yt辰nt旦 on yleinen
  .NET-ymp辰rist旦ss辰. Poikkeuksia kuitenkin on eli ihan jokaiselle
  eventille ei v辰ltt辰m辰tt辰 ole vastaavaa metodia  ei esim.
  DispatcherExceptionUnhandled -tapahtumalle)
 Sovelluksen komentoriviargumentit voisimme k辰sitell辰 Application-
  luokan Startup-tapahtumak辰sittelij辰ss辰.
Useita ikkunoita
 Applikaatiolla voi olla auki useita ikkunoita
 Ikkunoiden hallintaa helpottaa staattinen
  Application.Current property.
    Kaikilla ikkunoilla on mahdollisuus k辰ytt辰辰 Application.Current
     property辰 ja k辰sitell辰 sen MainWindow ja Windows tietoja
 K辰yt辰nn旦ss辰 sovellukset tarvitsevat usein kommunikointia
  ikkunoiden v辰lill辰 ja t辰m辰 vuorovaikutus t辰ytyy toteuttaa
  jotenkin.
 Pitk辰ik辰isten ikkunoiden v辰linen kommunikointi voi olla
  j辰rkev辰辰 toteuttaa tekem辰ll辰 oma Application-luokka
  toteutus, joka hallitsee ikkunoita, siis esimerkiksi tuo esiin
  oikeat ikkunat oikealla hetkell辰 jne.
 Huom. Muista, ett辰 omaa ikkunaa ei ole tarpeen rakentaa
  joka asialle -> l旦ytyy esim. valmiita dialogeja ym.
Window- luokka,
                       Yleist辰
 Ikkunat ovat jokaisen ty旦p旦yt辰sovelluksen
  k辰ytt旦liittym辰n runko. (kuten ASP.NET
  sovelluksissa sivut)
 Vaikka WPF sovelluksen voisi tehd辰 vain yht辰
  ikkunaa k辰ytt辰en ja kontrolleja dynaamisesti
  vaihtaen, on ikkunoiden tekeminen useimmiten
  oikeampi ja k辰ytett辰v辰mpi toteutustapa.
 Ikkunoita voidaan hallita hyvin vapaasti
  k辰ytt旦liittym辰ss辰: Niit辰 voidaan n辰ytt辰辰 ja
  piilottaa halutulla tavalla, niiden sijaintia voidaan
  muuttaa, ulkon辰k旦辰 ja tyyli辰 vaihdella jne.
Window- luokka,
                    Yleist辰
 Window-luokka periytyy ContentControl-
  luokasta.
 T辰m辰 tarkoittaa, ett辰 Window-olio voi sis辰lt辰辰
  yhden lapsiolion (yleens辰 Container
  esimerkiksi Grid).
 Sis辰lt辰辰 tuttuja propertyj辰:
  Background, BorderBrush, BorderThickness.
Window- luokka,
                                           Propertyj辰
   Window-luokan omia propertyj辰:
      AllowsTransparency
              Aseta true jos tarkoituksena tehd辰 osittain l辰pin辰kyv辰 ikkuna. (Background Transparent ja
               WindowStyle None)
      Icon
              Pieni ikoni ikkunaa varten
      Top, Left
              Ikkunan paikka
      ResizeMode
              T辰ll辰 voi vaikka est辰辰 ikkunan koon muuttamisen kokonaan
      ShowInTaskbar
              Yleens辰 aktiivinen vain p辰辰ikkunalle
      SizeToContent
              Ikkuna muuttaa kokoaan sis辰ll旦n koon mukaan
      Title
              Ikkunan otsikko
      Topmost
              T辰ll辰 saa ikkunan pysym辰辰n muiden kyseisen applikaation ikkunoiden p辰辰ll辰
      WindowStartupLocation
              Ikkunan paikka kun uusi ikkuna avataan
      WindowState
              Kertoo onko ikkuna esim minimoitu task bar:iin
      WindowStyle
              Ikkunan tyylin valinta tietyist辰 valmiista tyyleist辰
Window- luokka,
                      Metodeja
 Ikkunan n辰ytt辰minen:
   Show()
      Ei blokkaa, modeless window
   ShowDialog()
      Blokkaa, modal window. DialogResult propertyll辰
       voimme palauttaa jonkin dialogin paluuarvon, jos
       haluamme.
   Activate()
      Saadaan aktivoitua haluttu ikkuna. Huom. IsActive
       property kertoo meille, onko ikkuna aktiivinen.
ASP.NET spesifinen osuus
ASP.NET sovellus

 ASP.NET hy旦dyt verrattuna HTML-kehitykseen
   Mahdollisuuden palvelimella ajettavaan koodiin ja
    koodin laittamisen code behindiin = k辰ytt旦liittym辰
    XAMLina ja muu toiminta esim. C#-koodina.
      Helppo uudelleen k辰ytt辰辰 C#-koodia
   K辰ytt旦liittym辰n rakentaminen on samantapaista
    kuin esim. WPF kehitys, ja k辰yt旦ss辰 esim. monia
    WPF kehitt辰jille tuttuja kontrolleja yms.
   Data Binding systeemi
   Mahdollisuuden MVC-arkkitehtuurin (Model-
    View-Controller, esimerkki 2) k辰ytt旦旦n.
ASP.NET
                                      Global.asax
 Sis辰lt辰辰 Global-luokan, joka periytyy HttpApplication-luokasta
 Luokka sis辰lt辰辰 tapahtumak辰sittelij辰t:
     Application_Start()
         Kutsutaan kun web-sovellus k辰ynnistet辰辰n. Ajetaan siis kerran web-
          sovelluksen elinkaaren aikana. Voisimme alustaa t辰辰ll辰 jotain sovellukseen
          liittyvi辰 pysyvi辰 tietorakenteita yms.
     Application_End()
         Kutsutaan, kun sovellus suljetaan.
     Session_Start()
         Ajetaan kun uusi k辰ytt辰j辰 saapuu. T辰辰ll辰 voisimme siis luoda
          k辰ytt辰j辰kohtaisia tietorakenteita tms.
     Session_End()
         Ajetaan kun k辰ytt辰j辰n istunto on p辰辰ttynyt (usein siis aikakatkaisun takia).
     Application_Error()
         Kutsutaan kun web-sovellukselta tulee k辰sittelem辰t旦n poikkeus.
         T辰辰ll辰 olisi fiksua ottaa kiinni siis k辰sittelem辰t旦n poikkeus:
              Server.GetLastError() -> k辰sittely -> Server.ClearError();
ASP.NET sivu
 ASP.NET Page luokka
    Periytyy Control luokasta
    Oleelliset propertyt:
        Application
             Applikaatiotason dataobjekti, jota voidaan k辰ytt辰辰 milt辰 tahansa sivulta
        Cache
             V辰limuisti
        IsPostBack
             Osoittaa, onko sivu ladattu ensimm辰ist辰 kertaa
        MasterPageFile
             M辰辰ritt辰辰 kyseisen sivun pohjan
        Request
             Tarjoaa p辰辰syn nykyiseen HTTP pyynt旦旦n
        Response
             Voit vaikuttaa l辰htev辰辰n HTTP-vastaukseen
        Server
             Tarjoaa p辰辰syn HttpServerUtility objektiin, joka sis辰lt辰辰 useita palvelimen aputoimintoja
        Session
             Voit tallentaa ja lukea istunnon tietoja
        Theme
             Teema nykyiselle sivulle
        Trace
             Treisaus
ASP.NET sivu
 Sivun elinkaari, t辰rkeimm辰t eventit
     PreInit
         T辰ss辰 vaiheessa tehd辰辰n sivupohja. Tarpeen ottaa kiinni, jos t辰ytyy p辰辰st辰
          tekem辰辰n jotain ennen kuin suoritus etenee.
     Init
         T辰ss辰 vaiheessa alustetaan kontrollit ja niiden propertyt edellisiin arvoihin
     Load
         T辰h辰n tultaessa on sivu jo alustettu, joten voimme k辰sitell辰 sivun elementtej辰
          ym.
     <nykyinen event k辰sitell辰辰n>
         Tulee siis k辰sittelyyn se tapahtuma, joka aiheutti selaimen tekem辰辰n
          postbackin
     PreRender
         Tapahtumat on k辰sitelty ym. ja aloitetaan sivun render旦iminen Responseen.
     Unload
         Sivu on render旦ity ja HTTP Response tehty. Page-olio voidaan tuhota. T辰ss辰
          voisimme viel辰 sulkea tiedostoja tai tietokantayhteyksi辰 ym.
 Sivun virhetilanteiden/poikkeuksien k辰sittely:
     Sivun virheet voi ottaa kiinni Page_Error tapahtumak辰sittelij辰ll辰
ASP.NET sivun tila

 HTTP protokolla ei tue web-sovelluksen tilatiedon
  yll辰pit辰mist辰
   ASP.NET Page-olio tuhotaan aina jokaisen yksitt辰isen
    sivunmuodostuksen j辰lkeen.
 Web-kehitys on siis hyvin erilaista verrattuna
  paikallisten sovellusten, esimerkiksi
  ty旦p旦yt辰sovellusten kehitykseen, joissa ohjelman
  tila tyypillisesti s辰ilyy koko suorituksen ajan.
 Tilatiedon yll辰pit辰minen ei ole pelk辰st辰辰n
  ASP.NET sovellusten ongelma, vaan koskee kaikkia
  web-kehitysalustoja kuten Java Web sovelluksia ja
  PHP sovelluksia ym., joissa tilanhallinta t辰ytyy
  kaikissa toteuttaa jotenkin
ASP.NET
                       ViewState
 ASP.NET runtime lis辰辰 automaattisesti piilotetun
  lomakekent辰n (nimelt辰辰n __VIEWSTATE) mukaan
  muodostamalleen sivulle. Se sis辰lt辰辰 nimi/arvo
  pareja, joilla sivulla olevien elementtien sis辰lt旦
  saadaan t辰ytetty辰 automaattisesti postbackien
  v辰lill辰.
    __VIEWSTATE on Base64-koodattu merkkijono
 System.Web.UI.Page luokan Init-
  tapahtumank辰sittelij辰 lukee__VIEWSTATE arvot
  ja p辰ivitt辰辰 arvot Page-olioon.
    T辰m辰n takia elementtien arvoja ei kannata k辰sitell辰
     itse viel辰 Init-vaiheessa.
ASP.NET
                              Cache
 Cache eli v辰limuisti tarjoaa joustavan tavan k辰sitell辰 web-
  sovelluksen sis辰ist辰 tietoa
 V辰limuistissa voi s辰ilytt辰辰 tietoja tietyn ajanjakson ajan.
  Voisimme esimerkiksi s辰ilytt辰辰 tietokannasta haettua dataa
  voimassa muutaman minuutin ja hakea datan uudelleen
  vasta sen j辰lkeen.
 System.Web.Caching.Cache (saatavilla Context.Cache
  kautta)
 V辰limuistin dataobjektit ovat kaikkien k辰ytt辰jien ulottuvilla
  kaikilta sivuilta kiinte辰n ajan.
    Jos data ei ole en辰辰 Cachessa kun yrit辰mme sit辰 lukea, palautuu
      null.
 K辰yt辰nn旦ss辰 v辰limuistiin asetetaan dataa k辰ytt辰m辰ll辰 Cache-luokan
  Insert-metodia. Voimme asettaa datan voimassaoloajan ja oman
  tapahtumank辰sittelij辰n datan vanhentumiselle.
ASP.NET
                           Session
 Session on k辰ytt辰j辰kohtainen
 Yksi istunto on siis tietyn k辰ytt辰j辰n vuorovaikutusta
  web-sovelluksemme kanssa
    HttpSessionState
 Tietyn k辰ytt辰j辰n Session-data voitaisiin alustaa
  Application-tasolla (Global.asax).
    Klassinen esimerkki k辰ytt辰j辰datan s辰ilytt辰misest辰 on
     verkkokaupan ostoskorin s辰ilytt辰minen istuntojen v辰lill辰.
 Sessioilla on automaattisesti uniikki Session ID, joka
  yksil旦i olemassaolevan HttpSessionState-oliot
  (istunnot), ja voimassaoloaika (oletus 20 min), jonka
  voimme asettaa, Session.Timeout. (t辰m辰n voi vaihtaa
  my旦s kaikille k辰ytt辰jille Web.configin kautta)
ASP.NET
                       Cookie
 Yksi tapa s辰ilytt辰辰 tilatietoa on ev辰ste (Cookie)
 Se on usein toteutettu tekstitiedostona (tai
  joukkona tiedostoja), jotka on tallennettu
  k辰ytt辰j辰n koneelle.
 Kun k辰ytt辰j辰 siirtyy tietylle sivustolle, selain
  tarkistaa, onko k辰ytt辰j辰n koneella ev辰ste
  kyseiselle Urlille, ja jos on, selain liitt辰辰 tiedot
  HTTP pyynt旦旦n.
 Vastaanottava palvelin voi lukea ev辰steen tiedot
  ja luoda sivun tallennettuihin tietoihin perustuen.
 Ev辰steet ovat tekstitiedostoja. Ne ovat siis huono
  paikka arkaluontoisille tiedoille. (kuten
  luottokortin numero ym.)
.NET kurssin loppusanat
 Ohjelmointi on hauskaa: My旦s .NET ohjelmointi
  
 Ohjelmoinnin oppiminen vaatii ty旦t辰: Vasta itse
  tekem辰ll辰 ja kokeilemalla (ja ty旦n kautta) oppii
  ohjelmoimaan.
 Ohjelmistokehitt辰j辰n ty旦ura on jatkuvaa uuden
  oppimista: Kuten useimpiin muihinkin
  ohjelmistotekniikoihin, my旦s .NET ohjelmointiin
  kehitet辰辰n uusia asioita jatkuvasti.

More Related Content

Similar to Net ohjelmointi kertaus (20)

Windows 8
Windows 8Windows 8
Windows 8
Sovelto
Tekstitys
TekstitysTekstitys
Tekstitys
Tomi Toivio
Xml ty旦elam辰ssa
Xml ty旦elam辰ssaXml ty旦elam辰ssa
Xml ty旦elam辰ssa
JoniKettunen
TechDays2011 Web-kokoukset Lyncill辰 Tieturi/Kuosmanen & Huhtala
TechDays2011 Web-kokoukset Lyncill辰 Tieturi/Kuosmanen & HuhtalaTechDays2011 Web-kokoukset Lyncill辰 Tieturi/Kuosmanen & Huhtala
TechDays2011 Web-kokoukset Lyncill辰 Tieturi/Kuosmanen & Huhtala
Tieturi Oy
Mac lappari tutuksi (Oskari Niitamo, Espoon Ty旦v辰enopisto)
Mac lappari tutuksi (Oskari Niitamo, Espoon Ty旦v辰enopisto) Mac lappari tutuksi (Oskari Niitamo, Espoon Ty旦v辰enopisto)
Mac lappari tutuksi (Oskari Niitamo, Espoon Ty旦v辰enopisto)
Oskari Niitamo
Datajalostamo-seminaari 5.6.2014: Sovelluskehitt辰j辰t ja data kehitt辰j辰yhtei...
Datajalostamo-seminaari 5.6.2014: Sovelluskehitt辰j辰t ja data  kehitt辰j辰yhtei...Datajalostamo-seminaari 5.6.2014: Sovelluskehitt辰j辰t ja data  kehitt辰j辰yhtei...
Datajalostamo-seminaari 5.6.2014: Sovelluskehitt辰j辰t ja data kehitt辰j辰yhtei...
Digitalmikkeli
03 - Johdanto EAI 2 (BD2226 Tietoj辰rjestelmien integrointi)
03 - Johdanto EAI 2 (BD2226 Tietoj辰rjestelmien integrointi)03 - Johdanto EAI 2 (BD2226 Tietoj辰rjestelmien integrointi)
03 - Johdanto EAI 2 (BD2226 Tietoj辰rjestelmien integrointi)
Jarmo Talvivaara
Windows Store Apps - n辰in tehtiin Sovelto Hub
Windows Store Apps - n辰in tehtiin Sovelto Hub  Windows Store Apps - n辰in tehtiin Sovelto Hub
Windows Store Apps - n辰in tehtiin Sovelto Hub
Sovelto
Yritt辰j辰n ilmaisohjelmat
Yritt辰j辰n ilmaisohjelmatYritt辰j辰n ilmaisohjelmat
Yritt辰j辰n ilmaisohjelmat
Timo Kumpulainen
Extranet-j辰rjestelm辰t Suomessa
Extranet-j辰rjestelm辰t SuomessaExtranet-j辰rjestelm辰t Suomessa
Extranet-j辰rjestelm辰t Suomessa
Perttu Tolvanen
Download Study Resources for Solution Manual for C++ How to Program 10th by D...
Download Study Resources for Solution Manual for C++ How to Program 10th by D...Download Study Resources for Solution Manual for C++ How to Program 10th by D...
Download Study Resources for Solution Manual for C++ How to Program 10th by D...
glunapumpui
Web-sis辰ll旦nhallinta ja mukautuva esitystapa
Web-sis辰ll旦nhallinta ja mukautuva esitystapaWeb-sis辰ll旦nhallinta ja mukautuva esitystapa
Web-sis辰ll旦nhallinta ja mukautuva esitystapa
Loihde Advisory
Access Solution Manual for C++ How to Program 10th by Deitel All Chapters Imm...
Access Solution Manual for C++ How to Program 10th by Deitel All Chapters Imm...Access Solution Manual for C++ How to Program 10th by Deitel All Chapters Imm...
Access Solution Manual for C++ How to Program 10th by Deitel All Chapters Imm...
dunukhaili
ITK2019: Oppilaat ohjelmoivat monialaisen oppimiskokonaisuuden web-sovelluks...
ITK2019: Oppilaat ohjelmoivat monialaisenoppimiskokonaisuuden web-sovelluks...ITK2019: Oppilaat ohjelmoivat monialaisenoppimiskokonaisuuden web-sovelluks...
ITK2019: Oppilaat ohjelmoivat monialaisen oppimiskokonaisuuden web-sovelluks...
Ville Ilkkala
Johdatus oliopohjaiseen ajatteluun
Johdatus oliopohjaiseen ajatteluunJohdatus oliopohjaiseen ajatteluun
Johdatus oliopohjaiseen ajatteluun
Pasi Kellokoski
Windows 7 K辰ytt旦旦nottoprojekti
Windows 7 K辰ytt旦旦nottoprojektiWindows 7 K辰ytt旦旦nottoprojekti
Windows 7 K辰ytt旦旦nottoprojekti
Vaihde 7
Vincit Teatime 2015 - Heikki Salo: Case ZenRobotics: JavaScriptin 辰辰rirajoilla
Vincit Teatime 2015 - Heikki Salo: Case ZenRobotics: JavaScriptin 辰辰rirajoillaVincit Teatime 2015 - Heikki Salo: Case ZenRobotics: JavaScriptin 辰辰rirajoilla
Vincit Teatime 2015 - Heikki Salo: Case ZenRobotics: JavaScriptin 辰辰rirajoilla
VincitOy
Web-sivustot
Web-sivustotWeb-sivustot
Web-sivustot
jarfroy
Johdatus ohjelmointiin
Johdatus ohjelmointiinJohdatus ohjelmointiin
Johdatus ohjelmointiin
JukkaWallenius
Windows 8
Windows 8Windows 8
Windows 8
Sovelto
Xml ty旦elam辰ssa
Xml ty旦elam辰ssaXml ty旦elam辰ssa
Xml ty旦elam辰ssa
JoniKettunen
TechDays2011 Web-kokoukset Lyncill辰 Tieturi/Kuosmanen & Huhtala
TechDays2011 Web-kokoukset Lyncill辰 Tieturi/Kuosmanen & HuhtalaTechDays2011 Web-kokoukset Lyncill辰 Tieturi/Kuosmanen & Huhtala
TechDays2011 Web-kokoukset Lyncill辰 Tieturi/Kuosmanen & Huhtala
Tieturi Oy
Mac lappari tutuksi (Oskari Niitamo, Espoon Ty旦v辰enopisto)
Mac lappari tutuksi (Oskari Niitamo, Espoon Ty旦v辰enopisto) Mac lappari tutuksi (Oskari Niitamo, Espoon Ty旦v辰enopisto)
Mac lappari tutuksi (Oskari Niitamo, Espoon Ty旦v辰enopisto)
Oskari Niitamo
Datajalostamo-seminaari 5.6.2014: Sovelluskehitt辰j辰t ja data kehitt辰j辰yhtei...
Datajalostamo-seminaari 5.6.2014: Sovelluskehitt辰j辰t ja data  kehitt辰j辰yhtei...Datajalostamo-seminaari 5.6.2014: Sovelluskehitt辰j辰t ja data  kehitt辰j辰yhtei...
Datajalostamo-seminaari 5.6.2014: Sovelluskehitt辰j辰t ja data kehitt辰j辰yhtei...
Digitalmikkeli
03 - Johdanto EAI 2 (BD2226 Tietoj辰rjestelmien integrointi)
03 - Johdanto EAI 2 (BD2226 Tietoj辰rjestelmien integrointi)03 - Johdanto EAI 2 (BD2226 Tietoj辰rjestelmien integrointi)
03 - Johdanto EAI 2 (BD2226 Tietoj辰rjestelmien integrointi)
Jarmo Talvivaara
Windows Store Apps - n辰in tehtiin Sovelto Hub
Windows Store Apps - n辰in tehtiin Sovelto Hub  Windows Store Apps - n辰in tehtiin Sovelto Hub
Windows Store Apps - n辰in tehtiin Sovelto Hub
Sovelto
Yritt辰j辰n ilmaisohjelmat
Yritt辰j辰n ilmaisohjelmatYritt辰j辰n ilmaisohjelmat
Yritt辰j辰n ilmaisohjelmat
Timo Kumpulainen
Extranet-j辰rjestelm辰t Suomessa
Extranet-j辰rjestelm辰t SuomessaExtranet-j辰rjestelm辰t Suomessa
Extranet-j辰rjestelm辰t Suomessa
Perttu Tolvanen
Download Study Resources for Solution Manual for C++ How to Program 10th by D...
Download Study Resources for Solution Manual for C++ How to Program 10th by D...Download Study Resources for Solution Manual for C++ How to Program 10th by D...
Download Study Resources for Solution Manual for C++ How to Program 10th by D...
glunapumpui
Web-sis辰ll旦nhallinta ja mukautuva esitystapa
Web-sis辰ll旦nhallinta ja mukautuva esitystapaWeb-sis辰ll旦nhallinta ja mukautuva esitystapa
Web-sis辰ll旦nhallinta ja mukautuva esitystapa
Loihde Advisory
Access Solution Manual for C++ How to Program 10th by Deitel All Chapters Imm...
Access Solution Manual for C++ How to Program 10th by Deitel All Chapters Imm...Access Solution Manual for C++ How to Program 10th by Deitel All Chapters Imm...
Access Solution Manual for C++ How to Program 10th by Deitel All Chapters Imm...
dunukhaili
ITK2019: Oppilaat ohjelmoivat monialaisen oppimiskokonaisuuden web-sovelluks...
ITK2019: Oppilaat ohjelmoivat monialaisenoppimiskokonaisuuden web-sovelluks...ITK2019: Oppilaat ohjelmoivat monialaisenoppimiskokonaisuuden web-sovelluks...
ITK2019: Oppilaat ohjelmoivat monialaisen oppimiskokonaisuuden web-sovelluks...
Ville Ilkkala
Johdatus oliopohjaiseen ajatteluun
Johdatus oliopohjaiseen ajatteluunJohdatus oliopohjaiseen ajatteluun
Johdatus oliopohjaiseen ajatteluun
Pasi Kellokoski
Windows 7 K辰ytt旦旦nottoprojekti
Windows 7 K辰ytt旦旦nottoprojektiWindows 7 K辰ytt旦旦nottoprojekti
Windows 7 K辰ytt旦旦nottoprojekti
Vaihde 7
Vincit Teatime 2015 - Heikki Salo: Case ZenRobotics: JavaScriptin 辰辰rirajoilla
Vincit Teatime 2015 - Heikki Salo: Case ZenRobotics: JavaScriptin 辰辰rirajoillaVincit Teatime 2015 - Heikki Salo: Case ZenRobotics: JavaScriptin 辰辰rirajoilla
Vincit Teatime 2015 - Heikki Salo: Case ZenRobotics: JavaScriptin 辰辰rirajoilla
VincitOy
Web-sivustot
Web-sivustotWeb-sivustot
Web-sivustot
jarfroy
Johdatus ohjelmointiin
Johdatus ohjelmointiinJohdatus ohjelmointiin
Johdatus ohjelmointiin
JukkaWallenius

Net ohjelmointi kertaus

  • 1. .NET ohjelmointi A-ITY04-2000 kertaus Timo Tanila Tampere University of Applied Sciences
  • 2. .NET sovelluskehys .NET rakentuu: CLR, Common Language Runtime kerros. Ensisijaisena teht辰v辰n辰 on eri tietotyyppien k辰sittely. Huolehtii useista matalan tason yksityiskohdista, kuten muistinhallinnasta, sovellusten ajamisesta, s辰ikeiden k辰sittelyst辰, ja suorittaa erilaisia turvatarkastuksia. CTS, Common Type System - kuvaa tietotyypit ja ohjelmakoodirakenteet, joita runtime tukee CLS, Common Language Specification - m辰辰rittelee sen osajoukon tavallisimmista tietotyypeist辰 ja ohjelmakoodirakenteista, joika kaikki. NET ohjelmointikielet tukevat. Kaikki .NET kielet k辰辰nnet辰辰n ensin CIL-kielisiksi, Common Intermediate Language. Vasta CIL k辰辰nt辰j辰 tekee bin辰辰ri辰.
  • 3. C# ohjelmointikieli Microsoft laati uuden ohjelmointikielen, C# -kielen, erityisesti .NET-alustaa varten C# syntaksi on hyvin samankaltainen Javaan verrattuna. Molemmat kuuluvat C-kielien perheeseen. C# yksityiskohtia: Ei osoittimia! C# ohjelmat eiv辰t tyypillisesti tarvitse suoraa osoitin manipulointia Automaattinen muistinhallinta = roskien ker辰ys. Ei tarvitse deallokoida muistia. Mahdollisuus k辰ytt辰辰 yleisi辰 tyyppej辰, generics <T>. Linkki partial keyword mahdollistaa luokan jakamisen useisiin eri kooditiedostoihin. Lambda-ilmaisu yksinkertaistaa delegaattien k辰ytt旦辰. Mahdollistaa nimett旦m辰n funktion m辰辰rittelyn. customers.Where(c => c.City == "London"); LINQ-kieliset lauseet yksinkertaistavat merkitt辰v辰sti tietol辰hteiden ja tiedon k辰sittely辰. Linkki
  • 4. Visual Studio 2010 / Useimmiten k辰yt旦ss辰 olevat n辰pp辰inyhdistelm辰t Ctrl+Space IntelliSense valinnat Ctrl+Tab selaa avoimia koodi- yms. ikkunoita Ctrl+E F muotoilee valitun koodin Ctrl+E C kommentoi valitun koodin Ctrl+E U poistaa kommentoinnin Ctrl+H Searchn replace valitulle koodille Listaus valmiista yhdistelmist辰
  • 5. WPF, Windows Presentation Foundation Microsoft mainostaa: Windows Presentation Foundation (WPF) on tarkoitettu uuden sukupolven graafisten k辰ytt旦liittymien ja sovellusten rakentamiseen, ja saat tehty辰 sen avulla visuaalisesti upeita k辰ytt旦kokemuksia. WPF:n ydin on vektoripohjainen kuvank辰sittelyj辰rjestelm辰, joka on resoluutiosta riippumaton. Osaa hy旦dynt辰辰 nykyaikaisia n辰yt旦nohjaimia. WPF sis辰lt辰辰 laajan valikoiman aputoimintoja sovellusten kehitt辰miseen. Extensible Application Markup Language (XAML) Kontrollit Tietojen sitominen (Data Binding) 2D ja 3D grafiikka ja animaatiot Tyylit (Styles), mallit (Templates) Koska WPF sis辰ltyy Microsoft. NET Framework:iin, on sovelluskehityksess辰 hy旦dynnett辰viss辰 koko .NET Framework luokkakirjasto.
  • 6. Yleisimm辰t WPF kontrollit Painikkeet: Button ja RepeatButton. Data n辰yt旦t: DataGrid, ListView, ja TreeView. P辰iv辰ys ja sen valinta: Calendar ja DatePicker. Valintaikkunat: OpenFileDialog, SaveFileDialog K辰ytt辰j辰n teksti input: TextBox Layoutin tekeminen: DockPanel, Grid, GridView, Panel, ScrollBar, StackPanel, Window, Navigointi: Hyperlink Valinta: CheckBox, ComboBox, ListBox, RadioButton Tietokent辰t: Label, Popup, ProgressBar, TextBlock, ja ToolTip. Menu ja ty旦kalupalkki: Menu, Toolbar,
  • 7. ASP.NET ASP.NET on Microsoftin web-kehitysalusta ASP.NET-sovellus on kokoelma tiedostoja kuten esimerkiksi C#-koodia, aspx-tiedostoja, resurssitiedostoja (kuvat jne.), jotka on tallennettu palvelimelle, yleens辰 IIS-palvelimelle. (Apachelle Mono-projekti) HTTP request/response on se v辰line, jolla selain ja ASP.NET-sovellus keskustelevat kesken辰辰n. Keskustelu on HTML-muotoista. Esimerkki aspx -> (X)HTML muunnoksesta: <asp:Button ID=painike" runat="server" Text=Painike" BorderColor="Blue BorderStyle="Solid" BorderWidth="5px" /> => <input type="submit" name=painike" value=Painike" id=painike style="border-color:Blue;border- width:5px;border-style:Solid;" /> Visual Studiolla kun kehitet辰辰n ASP.NET sovelluksia, on yleens辰 oikean IIS- palvelimen sijasta k辰yt旦ss辰 Visual Studio Development Server.
  • 8. Silverlight Silverlight-applikaatioiden kehitt辰minen on hyvin samankaltaista kuin WPF applikaatioidenkin. Silverlight tarjoaa kuitenkin vain osan WPF:n ominaisuuksista ja luokkakirjastoista k辰ytt旦旦n. Silverlight-sovellusta voi ajaa miss辰 tahansa modernissa selaimessa, kunhan Silverlight plug-in l旦ytyy (kuten IE, Firefox, Google Chrome tai Safari). Tyypillisesti ASP.NET-verkkosovelluksessa on mukana Silverlight-applikaatioita. On my旦s mahdollista ajaa Silverlight-sovellusta selaimen ulkopuolella muissakin k辰ytt旦j辰rjestelmiss辰 kuin Windowsissa. Riitt辰辰, ett辰 Silverlight runtime on asennettu. (Linux, Mac OS, ...). Silverlightin tavoitteena on tarjota vaihtoehto Adoben Flashille.
  • 9. XAML (Extensible Application Markup Language), Yleist辰 XAML on merkint辰kieli, jolla voi esitell辰 ja alustaa .NET olioita XAMLia voi soveltaa monissa eri tarkoituksissa, mutta ensisijaisesti se on tarkoitettu WPF-k辰ytt旦liittymien rakentamiseen (K辰yt旦ss辰 kuitenkin my旦s Silverlight ja ASP.NET -kehityksess辰) XAML tiedostossa voidaan siis m辰辰ritell辰 k辰ytt旦liittym辰 asetteluineen, painikkeineen ja muine kontrolleineen jne. XAMLia voi kirjoittaa k辰sin tai k辰ytt辰辰 sen generoimiseen ty旦kaluja, esimerkiksi Visual Studion designeria toolboxeineen tai Expression Blend ohjelmaa. Yksi XAMLin tarkoitus onkin, ett辰 sovelluskehitysty旦 voidaan helpommin jakaa graafikoiden ja ohjelmoijien kesken = ohjelmoija tekee code-behindin ja graafikko XAMLin. Kuitenkin, ohjelmoijana on useimmiten helpompaa kirjoittaa XAMLia k辰sin, ainakin viimeistell辰 se k辰sin, jotta saa aikaan halutunlaisen lopputuloksen.
  • 10. XAML (Extensible Application Markup Language), Yleist辰 XAML ei ollut viel辰 k辰yt旦ss辰 aiemmin Windows Forms applikaatiokehityksess辰. Kaikki k辰ytt旦liittym辰koodi oli teht辰v辰 C#-koodina. Huom. WPF applikaatioitakin voi koodata ilman XAMLia, tekem辰ll辰 kaikki koodi C#.koodina kuten ennenkin. Se ei ole kuitenkaan tarkoituksenmukaista. WPF sovelluskehityksess辰 k辰辰nt辰j辰 muuttaa XAML- koodin BAML-koodiksi (Binary Application Markup Language) ja lis辰辰 BAMLin mukaan applikaation resurssiksi. Ajonaikana on nopeampaa tulkita bin辰辰rimuotoista merkint辰kielt辰.
  • 11. XAML (Extensible Application Markup Language), Rakenne Jokainen elementti XAML merkint辰kieless辰 vastaa jotakin .NET luokkaa. Ne on nimetty siis tarkalleen samalla nimell辰. XAMLin elementti <Button> aiheuttaa siis sen, ett辰 k辰辰nt辰j辰 luo WPF sovellukseen Button olion. Kuten XML-dokumenteissakin, XAMLissakin voi kirjoittaa sis辰kk辰isi辰 elementtej辰. Siis k辰yt辰nn旦ss辰, jos esim. DockPanel -elementin sis辰lle on kirjoitettu Button, on k辰ytt旦liittym辰n DockPanel osiossa jossain kohtaa Button. XAMLissa voi alustaa olioiden propertyj辰.
  • 12. XAML (Extensible Application Markup Language), Rakenne XAML tiedostossa on aina yksi ylimm辰n tason elementti, joka on esimerkiksi WPF sovelluksissa: Window Application Se, ett辰 on yksi ylimm辰n tason elementti tarkoittaa siis k辰yt辰nn旦ss辰 sit辰, ett辰 kun kirjoittaa sulkevan elementin, esim. </Window>, ei sen per辰辰n voi kirjoittaa en辰辰 uusia elementtej辰. XAML k辰辰nt辰j辰n t辰ytyy my旦s tiet辰辰 miss辰 on m辰辰ritelty XAMLissa k辰ytetyt luokat, joten nimiavaruudet on merkitty XAMLin ensimm辰iseen elementtiin tageilla, esim. xmlns. (Huom. Notaatio muistuttaa webbilinkki辰). N辰in XAML k辰辰nt辰j辰 l旦yt辰辰 esim. Window-luokan jne. *presentation, sis辰lt辰辰 WPF luokat kuten kontrollit yms. *xaml, sis辰lt辰辰 XAML tulkaukseen liittyvi辰 luokkia (huom. m辰p辰tty x:ll辰) Oma luokka, jonka osa XAML tiedosto on, on merkitty x:Class tagilla (partial avainsana tarvitaan code-behindissa, koska osa luokan m辰辰rittelyst辰 on XAMLissa)
  • 13. K辰ytt旦liittym辰n tekeminen / container-luokat Aiemmin Windows Forms -sovelluksia teht辰ess辰 oli k辰yt旦ss辰 koordinaatteihin perustuva asettelu. Todellinen haaste oli varmistaa, ett辰 ulkoasu pysyi hyv辰nn辰k旦isen辰, vaikka ikkunan kokoa muutettiin. WPF sovelluksissa on k辰yt旦ss辰 muutama erilainen container-luokka, joiden avulla k辰ytt旦liittym辰n elementtej辰 voi sijoitella ja asetella k辰tev辰sti. Asettelun saa tehty辰 helposti sellaiseksi, ett辰 ikkunan koon muuttaminen pit辰辰 ulkoasun ryhdiss辰. container-luokat voidaan mielt辰辰 s辰ili旦iksi, joiden sis辰lle varsinaiset kontrollit ja datataulut ym. loppuk辰ytt辰j辰lle n辰kyv辰t elementit asetellaan. Ideana on, ett辰 kun kontrollit on aseteltu containereihin, ei ole tarpeen asettaa itse kontrollin kokoa tai koordinaattia kiinte辰ksi. Kaikki containerit periytyv辰t Panel -luokasta. T辰rkeimm辰t asetteluun tarkoitetut container-luokat ovat: StackPanel WrapPanel DockPanel Grid
  • 14. Data Binding Data Binding eli tietojen sidonta tarkoittaa, ett辰 on olemassa l辰hde- ja kohdeobjektien v辰lille tehty sidonta, joka kertoo systeemille, ett辰 l辰hdeobjektista tulee asettaa jotakin tietoja kohdeobjektiin. Kohdeobjekti on aina dependency property. T辰rkein k辰ytt旦tarkoitus sovelluksissa on jonkin tiedon n辰ytt辰minen k辰ytt旦liittym辰ss辰. L辰hdeobjekti voi olla melkein mit辰 tahansa, kuten toinen elementti tai jokin tietorakenne.
  • 15. Tietorakenteet Visual C# tarjoaa useita erilaisia tietorakenteita. Sopivan tietorakenteen valinta riippuu luonnollisesti k辰ytt旦tarkoituksesta. K辰yt辰nn旦ss辰 muutaman osaaminen riitt辰辰 jo pitk辰lle: lista (List<T>), hash (Hashtable). Kun tietorakenne on olemassa, sit辰 voidaan k辰sitell辰 todella n辰pp辰r辰sti LINQ-lauseilla.
  • 16. List<T> Tyypitetty indeksoitu lista. Tarjoaa valmiiksi runsaasti metodeja esim. listan alkioiden etsimiseen, lajitteluun, k辰sittelyyn jne. List<T> -luokka pohjautuu ArrayList-luokkaan. List<T> luokan alkioita voidaan verrata kesken辰辰n. Oleellista on, ett辰 <T>, siis listan alkioiden tietotyyppi, toteuttaa tarvittavia rajapintoja: IEquatable<T> rajapintaa vertailutoiminnolle Equals<T> (Jos tyyppi ei tue t辰t辰 rajapintaa, niin k辰ytt辰辰 yleist辰 Object.Equals(Object) vertailua). IComparable<T> rajapinta tarpeen, jos esim. lajitellaan (Sort), jotta k辰yt旦ss辰 CompareTo metodi. Kuten ArrayList-listassakin: Lista ei ole oletusarvoisesti miss辰辰n tietyss辰 j辰rjestyksess辰. Lajittele lista ennen k辰ytt旦辰, jos tarpeen. Listan alkioita voidaan k辰sitell辰 indeksin kautta, joka alkaa 0:sta. Listassa voi olla saman alkion duplikaatteja. T辰rke辰 ero ArrayList-listaan on, ett辰 List<T> -listan alkioina voi olla vain samantyyppisi辰 alkioita => yleens辰 hy旦dyllinen ominaisuus.
  • 17. Hashtable Hashtable on kokoelma avain/arvo-pareja, jotka j辰rjestet辰辰n avaimen perusteella. Jokainen hash-taulun elementti on avain/arvo-pari, joka on tallennettu DictionaryEntry objektiin. Avain t辰ytyy olla m辰辰ritelty. Taulussa ei ole duplikaatteja samalla avain-arvolla. Avain-arvoja ei voi muuttaa sen j辰lkeen kun ne on asetettu. Hash-taulu on tehokas tietorakenne, vaikka kyseess辰 olisi hyvin suurikin taulu. Kunhan avain tiedet辰辰n, saadaan elementti haettua nopeasti. Hash-taulun koko kasvaa dynaamisesti kun uusia elementtej辰 lis辰t辰辰n. Foreach-lauseessa C#-kielell辰 saadaan yksi kerrallaan jokainen DictionaryEntry ei siis suoraan arvoja.
  • 18. LINQ Sovellukset k辰ytt辰v辰t tyypillisesti monenlaisia tietovarastoja toiminnoissaan. Tieto voi olla esimerkiksi XML-tiedostoissa, relaatiotietokannoissa tai erilaisissa sovelluksen sis辰isiss辰 tietorakenteissa kuten listoissa tai taulukoissa ym. Perinteisesti ohjelmoijan on tarvinnut k辰ytt辰辰 eri tyyppisi辰 tietol辰hteit辰 varten eri rajapintoja ja tehd辰 tiedon luku- ja kirjoitustoiminnot tietol辰hteen m辰辰r辰辰m辰ll辰 tavalla. Language Integrated Query (LINQ)-tekniikka tuli mukaan .NET 3.5 versiossa, joten se on suht tuore lis辰ominaisuus .NET ymp辰rist旦旦n ja C# kieleen. (.NET 3.5 julkaistiin 2007 lopulla). LINQ-lauseet helpottavat tietol辰hteiden k辰ytt旦辰 merkitt辰v辰sti.
  • 19. LINQ rakennuspalikat C# -kieleen on m辰辰ritelty muutama LINQ- lauseisiin liittyv辰 apuominaisuus: Implisiittisesti m辰辰ritellyt paikalliset muuttujat Objektin / kokoelman alustussyntaksi Lambda-ilmaisu Extension Methods Anonyymit tyypit
  • 20. Implisiittisesti m辰辰ritellyt paikalliset muuttujat var avainsanan avulla voi esitell辰 muuttujan, jonka tyyppi辰 ei ole m辰辰ritelty Tyyppi on kuitenkin m辰辰ritelty sen j辰lkeen, kun k辰辰nt辰j辰 huomaa, ett辰 muuttujaa k辰ytet辰辰n ensimm辰ist辰 kertaa = k辰辰nt辰j辰 m辰辰rittelee ja asettaa sopivan tyypin Muuttujan tyyppi辰 ei siis voi vaihtaa en辰辰 t辰m辰n j辰lkeen toiseksi LINQ-lauseissa on yleens辰 tarpeen, ett辰 k辰辰nt辰j辰 saa m辰辰ritell辰 sopivan tyypin. demo
  • 21. Objektin / kokoelman alustussyntaksi Alustussyntaksi mahdollistaa luokan olion tai tietorakenteen alustamisen helposti yhdell辰 lauseella. Alustussyntaksin k辰ytt辰minen on vapaaehtoista eli alustus voidaan toki tehd辰 perinteiseen tapaan rakentajan avulla tai asettamalla alkuarvot yksitellen. Kuitenkin, alustussyntaksi tekee koodista luettavampaa ja tiiviimp辰辰 demo
  • 22. Lambda-ilmaisu C# Lambda-ilmaisun avulla voidaan rakentaa delegaatti. Siis tilanteessa, jossa jokin metodi vaatisi parametrina delegaatin, voimmekin k辰ytt辰辰 lambda- ilmaisua. Lambda-ilmaisun k辰ytt辰minen yleens辰 yksinkertaistaa kirjoitettavan koodin ulkoasua ja m辰辰r辰辰. Lambda-ilmaisu koostuu k辰yt辰nn旦ss辰: (arg1,arg2,...) => koodi Lambda-ilmaisun k辰ytt旦 selkeytt辰辰 erityisesti LINQ- lauseita demo
  • 23. Extension Methods Extension Methodsien avulla voi tehd辰 laajennuksen johonkin olemassa olevaan luokkaan ilman uuden aliluokan tekemist辰. Lis辰ksi, voit lis辰t辰 uusia toimintoja sinet旦ityihin (sealed) luokkiin ja rakenteisiin, joita ei siis voida peri辰. K辰yt辰nn旦ss辰 Extension Methodsit pit辰辰 aina m辰辰ritell辰 static avainsanaa k辰ytt辰en Extension Methods-m辰辰rityksi辰 ei yleens辰 tarvitse tehd辰 LINQ-lauseille, mutta on hyv辰 tiet辰辰, ett辰 LINQ- lauseissa on niit辰 yleens辰 tiet辰m辰tt辰mme k辰yt旦ss辰 Microsoftin tarjoamina demo
  • 24. Anonyymit tyypit Anonyymin tyypin avulla voidaan mallintaa uusi dataluokka ilman varsinaista luokkam辰辰rittely辰. K辰辰nt辰j辰 luo uuden luokan k辰辰nn旦svaiheessa T辰t辰 ominaisuutta k辰ytet辰辰n paljon LINQ- lauseissa, kun olemassa olevasta dataluokasta otetaan vaikkapa vain osa j辰senmuuttujista talteen demo
  • 25. LINQ operaattorit from, in K辰ytet辰辰n m辰辰rittelem辰辰n LINQ-ilmaisun kohdeobjektit where K辰ytet辰辰n m辰辰rittelem辰辰n ehdot, joilla haluttu osajoukko saadaan select K辰ytet辰辰n halutun osajoukon valitsemiseen jatkotoimenpiteit辰 varten join, on, equals, K辰ytet辰辰n toisen tietol辰hteen liitt辰miseen samaan LINQ- into lauseeseen orderby, ascending, K辰ytet辰辰n valitun osajoukon lajitteluun descending group, by K辰ytet辰辰n valitun osajoukon ryhmittelyyn
  • 26. Tapahtuma (Event), Yleist辰 .NET eventeist辰 Event on C#-kielen keino v辰litt辰辰 oliolle tapahtunut asia muille siit辰 kiinnostuneille olioille (client). Tyypillisesti event on keino v辰litt辰辰 jokin k辰ytt旦liittym辰n tapahtuma muille ohjelman osille. Eventtej辰 voi toki k辰ytt辰辰 muutenkin, esimerkiksi v辰litt辰m辰辰n jokin tilanne tai tapahtuma k辰ytt旦liittym辰n ulkopuoleltakin. Eventtien toteutus perustuu delegaatteihin. Jokaisen Eventin argumentit periytyv辰t EventArgs luokasta. (Esim. MouseEventArgs)
  • 27. Routed Events Routed Event -tapahtumia reititet辰辰n tietyss辰 j辰rjestyksess辰 elementilt辰 toiselle. Kun tapahtuma on k辰sitelty, se voidaan merkit辰 k辰sitellyksi. Voimme siis k辰yt辰nn旦ss辰 k辰sitell辰 tapahtuman siin辰 kohtaa ohjelmaamme kuin haluamme. Jotta voimme k辰sitell辰 tapahtuman, meid辰n t辰ytyy tehd辰 tapahtumank辰sittelij辰 (event handler).
  • 28. Routed Events, WPF Routed event tapahtumia on kolmea eri tyyppi辰: 1. Suorat tapahtumat, direct events: N辰m辰 ovat tavanomaisia .NET eventtej辰 eli ne ovat per辰isin yhdest辰 elementist辰 eik辰 niit辰 v辰litet辰 muualle. Esimerkiksi MouseEnter event on t辰llainen tapahtuma se on yhden elementin tapahtuma, kun hiiren osoitin siirtyy elementin p辰辰lle. 2. Nousevat tapahtumat, bubbling events: N辰m辰 tapahtumat l辰htev辰t liikkeelle kohde-elementist辰, mutta nousevat hierarkiassa yl旦sp辰in. Esimerkiksi MouseDown on nouseva tapahtuma eli se tulee ensin elementille, jota napsautetaan. Seuraavaksi se nousee hierarkiassa yl旦s eli jos Button on StackPanelin sis辰ss辰, niin Buttonin j辰lkeen StackPanelille. Tapahtuma nousee ylimm辰lle tasolle asti, joka siis usein Window. 3. Tunneloidut tapahtumat, Tunneling events: N辰m辰 kulkevat vastaavasti ylh辰辰lt辰 alas, p辰辰tyen lopulta kohde- elementtiin, siis esim Button. Tarkoituksena on, ett辰 yl辰puoliset elementit voivat k辰sitell辰 tapahtuman ensin ja olla vaikkapa p辰辰st辰m辰tt辰 eventti辰 kohde- elementille asti. Esimerkiksi PreviewKeyDown on t辰llainen ja kaikki Preview* eventit.
  • 29. Liit辰nn辰istapahtumat, attached events Nouseva tapahtuma bubbling event on mahdollista k辰sitell辰 hierarkian yl辰puolella vain, jos tapahtuma on sellainen, jota yl辰puoliset elementit tukevat. Ent辰 jos tapahtuma on sellainen, ett辰 vain kyseinen kontrolli tukee sit辰? L旦ytyyk旦 StackPanelista esimerkiksi Click-tapahtumaa? Jos StackPanelissa on useita painikkeita ja haluamme k辰sitell辰 Click-tapahtuman yhteisesti StackPanel-tasolla, tulee avuksi attached event. Esim. ButtonBase.Click on siis ButtonBase luokasta, josta Button periytyy.
  • 30. Elementin elinkaareen liittyv辰t tapahtumat, Lifetime events Initialized T辰m辰 l辰hetet辰辰n kun elementin olio on luotu Loaded T辰m辰 l辰hetet辰辰n kun elementti, esim. ikkuna (Window), on muuten valmis, mutta ei viel辰 piirretty n辰yt旦lle Unloaded T辰m辰 l辰hetet辰辰n kun kyseinen elementtiolio vapautetaan eli kun koko ikkuna suljetaan tai kyseinen elementti poistetaan ikkunasta N辰m辰 kolme ovat kaikille elementeille yhteisi辰, lis辰ksi on elementtikohtaisia elinkaaritapahtumia.
  • 31. Sy旦tteeseen liittyv辰t tapahtumat, Input events Keyboard N辰pp辰imist旦st辰 Keydown, TextInput, KeyUp ja niiden Preview vastineet Mouse Hiiren k辰yt旦st辰 lukuisia esim. MouseMove, MouseWheel, Mouse*Button*, Mou seDoubleClick, jne. Ja Preview-vastineet Stylus Tablet PC:n kyn辰lle tarkoitettuja Multitouch Tuettu vain Windows 7 ja jatkossa ?.
  • 32. Tyylit (Styles), Yleist辰 Tyylit ovat v辰line, joilla saa m辰辰ritetty辰 yhteisi辰 tyyliohjeita, joita voi k辰ytt辰辰 applikaatiossaan useammassa kuin yhdess辰 paikassa. Meid辰n ei siis tarvitse m辰辰ritell辰 XAMLissa tyyli辰 jokaiselle kontrollille tai muulle elementille erikseen. Tyyleill辰 voidaan m辰辰ritell辰 marginaalit, taustat, v辰rit ja fontit jne.
  • 33. Tyylit (Styles), WPF WPF:n tyylien idea on samanlainen kuin Cascading Style Sheets (CSS)-tyylien, joita k辰ytet辰辰n paljon web-kehityksess辰. Kuten CSS-tyyleill辰kin, my旦s WPF tyyleill辰 voit m辰辰ritt辰辰 applikaatiolle yhteisi辰 tyylej辰. Edelleen CSS:n kaltaisesti, WPF tyylit voit kohdistaa automaattisesti tiettyihin elementteihin tai tiettyyn osioon. WPF tyylit tukevat her辰tteit辰 (Triggers), joiden avulla voit aktivoida tyylin kun jokin toinen elementti muuttuu esim. K辰ytt辰j辰 clikkaa kontrollia tms.
  • 34. Shapes Yksinkertaisin tapa tehd辰 2-D graafista sis辰lt旦辰 k辰ytt旦liittym辰辰n on k辰ytt辰辰 muotoelementtej辰 (Shapes) Ne ovat luokkia, jotka edustavat yksinkertaisia viivoja, ellipsej辰, suorakulmioita ja monikulmioita. N辰it辰 yhdistelem辰ll辰 voi tehd辰 toki monimutkaisempaakin grafiikkaa. Oleellista muotoelementeist辰: Luokkia, jotka osaavat piirt辰辰 itse itsens辰 Muotoelementtej辰 voi asetella containereihin. Usein muotojen kanssa hyv辰 container on Canvas, koska sen sis辰ll辰 muotoja voi asettaa koordinaateilla. Muotoelementit tukevat samoja tapahtumia (events) kuin muutkin valmiit elementit
  • 35. Brushes ja Transform T辰ytev辰rin (Brush-luokka) voi asettaa kiinte辰ksi tai liukus辰vyll辰 SolidColorBrush LinearGradientBrush RadialGradienBrush Transform-luokkien avulla voidaan muokata muotoelementtej辰.
  • 37. Applikaatio luokka, WPF K辰ynniss辰 oleva WPF sovellus edustaa yht辰 ilmentym辰辰 System.Windows.Application luokasta Application olio seuraa kaikkia avoimia ikkunoita ja kontrolloi sovelluksen sulkemista ja l辰hett辰辰 sovellukseen liittyvi辰 elinkaaritapahtumia (event). Visual Studio generoi meille valmiiksi Main-metodin (ja muutakin) kun aloitamme uuden WPF projektin. Uudessa WPF projektissa tiedostossa: /obj/x86/Debug/App.g.i.cs StartupUri-propertyll辰 kerrotaan p辰辰ikkuna eli meid辰n ei tarvitse itse kirjoittaa p辰辰ikkunan k辰ynnistyskoodia.
  • 38. Applikaation kontrollointi Voimme asettaa Application-oliomme sulkeutumislogiikan ShutDownMode propertyll辰: OnLastWindowClose, oletusarvo OnMainWindowClose OnExplicitShutDown, t辰ytyy kutsua Application.Shutdown() metodia (joka toimii aina) Applikaatiolla on elinkaaritapahtumia (events), joille voi tehd辰 k辰sittelij辰t. Esim. Startup, Exit, Activated, Deactivated, ym. (kokeillaan) Voimme my旦s ylikirjoittaa n辰iden eventtien l辰hetykseen liittyv辰t metodit. Metodin nimi on sama kuin tapahtuman nimi siten, ett辰 siin辰 on etuliite eli Startup-metodi on OnStartup(), Exit-metodi on OnExit(), ja niin edelleen. (BTW, t辰m辰 nime辰misk辰yt辰nt旦 on yleinen .NET-ymp辰rist旦ss辰. Poikkeuksia kuitenkin on eli ihan jokaiselle eventille ei v辰ltt辰m辰tt辰 ole vastaavaa metodia ei esim. DispatcherExceptionUnhandled -tapahtumalle) Sovelluksen komentoriviargumentit voisimme k辰sitell辰 Application- luokan Startup-tapahtumak辰sittelij辰ss辰.
  • 39. Useita ikkunoita Applikaatiolla voi olla auki useita ikkunoita Ikkunoiden hallintaa helpottaa staattinen Application.Current property. Kaikilla ikkunoilla on mahdollisuus k辰ytt辰辰 Application.Current property辰 ja k辰sitell辰 sen MainWindow ja Windows tietoja K辰yt辰nn旦ss辰 sovellukset tarvitsevat usein kommunikointia ikkunoiden v辰lill辰 ja t辰m辰 vuorovaikutus t辰ytyy toteuttaa jotenkin. Pitk辰ik辰isten ikkunoiden v辰linen kommunikointi voi olla j辰rkev辰辰 toteuttaa tekem辰ll辰 oma Application-luokka toteutus, joka hallitsee ikkunoita, siis esimerkiksi tuo esiin oikeat ikkunat oikealla hetkell辰 jne. Huom. Muista, ett辰 omaa ikkunaa ei ole tarpeen rakentaa joka asialle -> l旦ytyy esim. valmiita dialogeja ym.
  • 40. Window- luokka, Yleist辰 Ikkunat ovat jokaisen ty旦p旦yt辰sovelluksen k辰ytt旦liittym辰n runko. (kuten ASP.NET sovelluksissa sivut) Vaikka WPF sovelluksen voisi tehd辰 vain yht辰 ikkunaa k辰ytt辰en ja kontrolleja dynaamisesti vaihtaen, on ikkunoiden tekeminen useimmiten oikeampi ja k辰ytett辰v辰mpi toteutustapa. Ikkunoita voidaan hallita hyvin vapaasti k辰ytt旦liittym辰ss辰: Niit辰 voidaan n辰ytt辰辰 ja piilottaa halutulla tavalla, niiden sijaintia voidaan muuttaa, ulkon辰k旦辰 ja tyyli辰 vaihdella jne.
  • 41. Window- luokka, Yleist辰 Window-luokka periytyy ContentControl- luokasta. T辰m辰 tarkoittaa, ett辰 Window-olio voi sis辰lt辰辰 yhden lapsiolion (yleens辰 Container esimerkiksi Grid). Sis辰lt辰辰 tuttuja propertyj辰: Background, BorderBrush, BorderThickness.
  • 42. Window- luokka, Propertyj辰 Window-luokan omia propertyj辰: AllowsTransparency Aseta true jos tarkoituksena tehd辰 osittain l辰pin辰kyv辰 ikkuna. (Background Transparent ja WindowStyle None) Icon Pieni ikoni ikkunaa varten Top, Left Ikkunan paikka ResizeMode T辰ll辰 voi vaikka est辰辰 ikkunan koon muuttamisen kokonaan ShowInTaskbar Yleens辰 aktiivinen vain p辰辰ikkunalle SizeToContent Ikkuna muuttaa kokoaan sis辰ll旦n koon mukaan Title Ikkunan otsikko Topmost T辰ll辰 saa ikkunan pysym辰辰n muiden kyseisen applikaation ikkunoiden p辰辰ll辰 WindowStartupLocation Ikkunan paikka kun uusi ikkuna avataan WindowState Kertoo onko ikkuna esim minimoitu task bar:iin WindowStyle Ikkunan tyylin valinta tietyist辰 valmiista tyyleist辰
  • 43. Window- luokka, Metodeja Ikkunan n辰ytt辰minen: Show() Ei blokkaa, modeless window ShowDialog() Blokkaa, modal window. DialogResult propertyll辰 voimme palauttaa jonkin dialogin paluuarvon, jos haluamme. Activate() Saadaan aktivoitua haluttu ikkuna. Huom. IsActive property kertoo meille, onko ikkuna aktiivinen.
  • 45. ASP.NET sovellus ASP.NET hy旦dyt verrattuna HTML-kehitykseen Mahdollisuuden palvelimella ajettavaan koodiin ja koodin laittamisen code behindiin = k辰ytt旦liittym辰 XAMLina ja muu toiminta esim. C#-koodina. Helppo uudelleen k辰ytt辰辰 C#-koodia K辰ytt旦liittym辰n rakentaminen on samantapaista kuin esim. WPF kehitys, ja k辰yt旦ss辰 esim. monia WPF kehitt辰jille tuttuja kontrolleja yms. Data Binding systeemi Mahdollisuuden MVC-arkkitehtuurin (Model- View-Controller, esimerkki 2) k辰ytt旦旦n.
  • 46. ASP.NET Global.asax Sis辰lt辰辰 Global-luokan, joka periytyy HttpApplication-luokasta Luokka sis辰lt辰辰 tapahtumak辰sittelij辰t: Application_Start() Kutsutaan kun web-sovellus k辰ynnistet辰辰n. Ajetaan siis kerran web- sovelluksen elinkaaren aikana. Voisimme alustaa t辰辰ll辰 jotain sovellukseen liittyvi辰 pysyvi辰 tietorakenteita yms. Application_End() Kutsutaan, kun sovellus suljetaan. Session_Start() Ajetaan kun uusi k辰ytt辰j辰 saapuu. T辰辰ll辰 voisimme siis luoda k辰ytt辰j辰kohtaisia tietorakenteita tms. Session_End() Ajetaan kun k辰ytt辰j辰n istunto on p辰辰ttynyt (usein siis aikakatkaisun takia). Application_Error() Kutsutaan kun web-sovellukselta tulee k辰sittelem辰t旦n poikkeus. T辰辰ll辰 olisi fiksua ottaa kiinni siis k辰sittelem辰t旦n poikkeus: Server.GetLastError() -> k辰sittely -> Server.ClearError();
  • 47. ASP.NET sivu ASP.NET Page luokka Periytyy Control luokasta Oleelliset propertyt: Application Applikaatiotason dataobjekti, jota voidaan k辰ytt辰辰 milt辰 tahansa sivulta Cache V辰limuisti IsPostBack Osoittaa, onko sivu ladattu ensimm辰ist辰 kertaa MasterPageFile M辰辰ritt辰辰 kyseisen sivun pohjan Request Tarjoaa p辰辰syn nykyiseen HTTP pyynt旦旦n Response Voit vaikuttaa l辰htev辰辰n HTTP-vastaukseen Server Tarjoaa p辰辰syn HttpServerUtility objektiin, joka sis辰lt辰辰 useita palvelimen aputoimintoja Session Voit tallentaa ja lukea istunnon tietoja Theme Teema nykyiselle sivulle Trace Treisaus
  • 48. ASP.NET sivu Sivun elinkaari, t辰rkeimm辰t eventit PreInit T辰ss辰 vaiheessa tehd辰辰n sivupohja. Tarpeen ottaa kiinni, jos t辰ytyy p辰辰st辰 tekem辰辰n jotain ennen kuin suoritus etenee. Init T辰ss辰 vaiheessa alustetaan kontrollit ja niiden propertyt edellisiin arvoihin Load T辰h辰n tultaessa on sivu jo alustettu, joten voimme k辰sitell辰 sivun elementtej辰 ym. <nykyinen event k辰sitell辰辰n> Tulee siis k辰sittelyyn se tapahtuma, joka aiheutti selaimen tekem辰辰n postbackin PreRender Tapahtumat on k辰sitelty ym. ja aloitetaan sivun render旦iminen Responseen. Unload Sivu on render旦ity ja HTTP Response tehty. Page-olio voidaan tuhota. T辰ss辰 voisimme viel辰 sulkea tiedostoja tai tietokantayhteyksi辰 ym. Sivun virhetilanteiden/poikkeuksien k辰sittely: Sivun virheet voi ottaa kiinni Page_Error tapahtumak辰sittelij辰ll辰
  • 49. ASP.NET sivun tila HTTP protokolla ei tue web-sovelluksen tilatiedon yll辰pit辰mist辰 ASP.NET Page-olio tuhotaan aina jokaisen yksitt辰isen sivunmuodostuksen j辰lkeen. Web-kehitys on siis hyvin erilaista verrattuna paikallisten sovellusten, esimerkiksi ty旦p旦yt辰sovellusten kehitykseen, joissa ohjelman tila tyypillisesti s辰ilyy koko suorituksen ajan. Tilatiedon yll辰pit辰minen ei ole pelk辰st辰辰n ASP.NET sovellusten ongelma, vaan koskee kaikkia web-kehitysalustoja kuten Java Web sovelluksia ja PHP sovelluksia ym., joissa tilanhallinta t辰ytyy kaikissa toteuttaa jotenkin
  • 50. ASP.NET ViewState ASP.NET runtime lis辰辰 automaattisesti piilotetun lomakekent辰n (nimelt辰辰n __VIEWSTATE) mukaan muodostamalleen sivulle. Se sis辰lt辰辰 nimi/arvo pareja, joilla sivulla olevien elementtien sis辰lt旦 saadaan t辰ytetty辰 automaattisesti postbackien v辰lill辰. __VIEWSTATE on Base64-koodattu merkkijono System.Web.UI.Page luokan Init- tapahtumank辰sittelij辰 lukee__VIEWSTATE arvot ja p辰ivitt辰辰 arvot Page-olioon. T辰m辰n takia elementtien arvoja ei kannata k辰sitell辰 itse viel辰 Init-vaiheessa.
  • 51. ASP.NET Cache Cache eli v辰limuisti tarjoaa joustavan tavan k辰sitell辰 web- sovelluksen sis辰ist辰 tietoa V辰limuistissa voi s辰ilytt辰辰 tietoja tietyn ajanjakson ajan. Voisimme esimerkiksi s辰ilytt辰辰 tietokannasta haettua dataa voimassa muutaman minuutin ja hakea datan uudelleen vasta sen j辰lkeen. System.Web.Caching.Cache (saatavilla Context.Cache kautta) V辰limuistin dataobjektit ovat kaikkien k辰ytt辰jien ulottuvilla kaikilta sivuilta kiinte辰n ajan. Jos data ei ole en辰辰 Cachessa kun yrit辰mme sit辰 lukea, palautuu null. K辰yt辰nn旦ss辰 v辰limuistiin asetetaan dataa k辰ytt辰m辰ll辰 Cache-luokan Insert-metodia. Voimme asettaa datan voimassaoloajan ja oman tapahtumank辰sittelij辰n datan vanhentumiselle.
  • 52. ASP.NET Session Session on k辰ytt辰j辰kohtainen Yksi istunto on siis tietyn k辰ytt辰j辰n vuorovaikutusta web-sovelluksemme kanssa HttpSessionState Tietyn k辰ytt辰j辰n Session-data voitaisiin alustaa Application-tasolla (Global.asax). Klassinen esimerkki k辰ytt辰j辰datan s辰ilytt辰misest辰 on verkkokaupan ostoskorin s辰ilytt辰minen istuntojen v辰lill辰. Sessioilla on automaattisesti uniikki Session ID, joka yksil旦i olemassaolevan HttpSessionState-oliot (istunnot), ja voimassaoloaika (oletus 20 min), jonka voimme asettaa, Session.Timeout. (t辰m辰n voi vaihtaa my旦s kaikille k辰ytt辰jille Web.configin kautta)
  • 53. ASP.NET Cookie Yksi tapa s辰ilytt辰辰 tilatietoa on ev辰ste (Cookie) Se on usein toteutettu tekstitiedostona (tai joukkona tiedostoja), jotka on tallennettu k辰ytt辰j辰n koneelle. Kun k辰ytt辰j辰 siirtyy tietylle sivustolle, selain tarkistaa, onko k辰ytt辰j辰n koneella ev辰ste kyseiselle Urlille, ja jos on, selain liitt辰辰 tiedot HTTP pyynt旦旦n. Vastaanottava palvelin voi lukea ev辰steen tiedot ja luoda sivun tallennettuihin tietoihin perustuen. Ev辰steet ovat tekstitiedostoja. Ne ovat siis huono paikka arkaluontoisille tiedoille. (kuten luottokortin numero ym.)
  • 54. .NET kurssin loppusanat Ohjelmointi on hauskaa: My旦s .NET ohjelmointi Ohjelmoinnin oppiminen vaatii ty旦t辰: Vasta itse tekem辰ll辰 ja kokeilemalla (ja ty旦n kautta) oppii ohjelmoimaan. Ohjelmistokehitt辰j辰n ty旦ura on jatkuvaa uuden oppimista: Kuten useimpiin muihinkin ohjelmistotekniikoihin, my旦s .NET ohjelmointiin kehitet辰辰n uusia asioita jatkuvasti.