.NET ohjelmointi             A-ITY04-2000               kertaus            Timo TanilaTampere University of Applied Sciences
.NET sovelluskehys• .NET rakentuu:   – CLR, Common Language Runtime – kerros. Ensisijaisena     tehtävänä on eri tietotyyp...
C# ohjelmointikieli• Microsoft laati uuden ohjelmointikielen, C# -kielen, erityisesti .NET-alustaa  varten• C# syntaksi on...
Visual Studio 2010 / Useimmiten    käytössä olevat näppäinyhdistelmät•   Ctrl+Space – IntelliSense valinnat•   Ctrl+Tab – ...
WPF, Windows Presentation Foundation•   Microsoft mainostaa: ”Windows Presentation Foundation (WPF) on tarkoitettu    uude...
Yleisimmät WPF kontrollit•   Painikkeet: Button ja RepeatButton.•   Data näytöt: DataGrid, ListView, ja TreeView.•   Päivä...
ASP.NET• ASP.NET on Microsoftin web-kehitysalusta• ASP.NET-sovellus on kokoelma tiedostoja kuten esimerkiksi C#-koodia,  a...
Silverlight• Silverlight-applikaatioiden kehittäminen on hyvin  samankaltaista kuin WPF applikaatioidenkin. Silverlight  t...
XAML (Extensible Application Markup Language),                      Yleistä• XAML on merkintäkieli, jolla voi esitellä ja ...
XAML (Extensible Application Markup Language),                     Yleistä• XAML ei ollut vielä käytössä aiemmin Windows F...
XAML (Extensible Application Markup Language),                     Rakenne• Jokainen elementti XAML merkintäkielessä vasta...
XAML (Extensible Application Markup Language),                      Rakenne• XAML tiedostossa on aina yksi ylimmän tason e...
Käyttöliittymän tekeminen / container-luokat• Aiemmin Windows Forms -sovelluksia tehtäessä oli käytössä  koordinaatteihin ...
Data Binding• ’Data Binding’ eli tietojen sidonta tarkoittaa,  että on olemassa lähde- ja kohdeobjektien  välille tehty si...
Tietorakenteet• Visual C# tarjoaa useita erilaisia  tietorakenteita. Sopivan tietorakenteen valinta  riippuu luonnollisest...
List<T>• Tyypitetty indeksoitu lista. Tarjoaa valmiiksi runsaasti metodeja esim.  listan alkioiden etsimiseen, lajitteluun...
Hashtable• Hashtable on kokoelma avain/arvo-pareja, jotka järjestetään  avaimen perusteella.• Jokainen hash-taulun element...
LINQ• Sovellukset käyttävät tyypillisesti monenlaisia tietovarastoja  toiminnoissaan. Tieto voi olla esimerkiksi XML-tiedo...
LINQ ’rakennuspalikat’• C# -kieleen on määritelty muutama LINQ-  lauseisiin liittyvä apuominaisuus:  – Implisiittisesti mä...
Implisiittisesti määritellyt paikalliset                   muuttujat• ’var’ avainsanan avulla voi esitellä  muuttujan, jon...
Objektin / kokoelman alustussyntaksi• Alustussyntaksi mahdollistaa luokan olion tai  tietorakenteen alustamisen helposti y...
Lambda-ilmaisu• C# Lambda-ilmaisun avulla voidaan rakentaa  ’delegaatti’. Siis tilanteessa, jossa jokin metodi vaatisi  pa...
’Extension Methods’• ’Extension Methods’ien avulla voi tehdä laajennuksen  johonkin olemassa olevaan luokkaan ilman uuden ...
Anonyymit tyypit• Anonyymin tyypin avulla voidaan mallintaa  uusi dataluokka ilman varsinaista  luokkamäärittelyä.• Kääntä...
LINQ operaattoritfrom, in             Käytetään määrittelemään LINQ-ilmaisun kohdeobjektitwhere                Käytetään m...
Tapahtuma (’Event’),               Yleistä .NET ’eventeistä’• ’Event’ on C#-kielen keino välittää oliolle  tapahtunut asia...
’Routed Events’• Routed Event -tapahtumia reititetään tietyssä  järjestyksessä elementiltä toiselle.• Kun tapahtuma on käs...
’Routed Events’,                                   WPF’Routed event’ tapahtumia on kolmea eri tyyppiä:1.   Suorat tapahtum...
Liitännäistapahtumat, ’attached events’• Nouseva tapahtuma ’bubbling event’ on  mahdollista käsitellä hierarkian yläpuolel...
Elementin elinkaareen liittyvät tapahtumat,                ’Lifetime events’• Initialized   – Tämä lähetetään kun elementi...
Syötteeseen liittyvät tapahtumat, ’Input events’• Keyboard  – Näppäimistöstä Keydown, TextInput, KeyUp ja    niiden Previe...
Tyylit (Styles),                     Yleistä• Tyylit ovat väline, joilla saa määritettyä  yhteisiä tyyliohjeita, joita voi...
Tyylit (Styles),                         WPF• WPF:n tyylien idea on samanlainen kuin  Cascading Style Sheets (CSS)-tyylien...
Shapes• Yksinkertaisin tapa tehdä 2-D graafista sisältöä  käyttöliittymään on käyttää muotoelementtejä  (Shapes)• Ne ovat ...
Brushes ja Transform• Täytevärin (Brush-luokka) voi asettaa kiinteäksi  tai liukusävyllä  – SolidColorBrush  – LinearGradi...
WPF spesifinen osuus
Applikaatio luokka,                          WPF• Käynnissä oleva WPF sovellus edustaa yhtä ilmentymää  System.Windows.App...
Applikaation kontrollointi• Voimme asettaa Application-oliomme sulkeutumislogiikan  ShutDownMode propertyllä:   – OnLastWi...
Useita ikkunoita• Applikaatiolla voi olla auki useita ikkunoita• Ikkunoiden hallintaa helpottaa staattinen  Application.Cu...
Window- luokka,                       Yleistä• Ikkunat ovat jokaisen työpöytäsovelluksen  käyttöliittymän runko. (kuten AS...
Window- luokka,                    Yleistä• Window-luokka periytyy ContentControl-  luokasta.• Tämä tarkoittaa, että Windo...
Window- luokka,                                           Propertyjä•   Window-luokan omia propertyjä:     – AllowsTranspa...
Window- luokka,                      Metodeja• Ikkunan näyttäminen:  – Show()     • Ei blokkaa, ’modeless window’  – ShowD...
ASP.NET spesifinen osuus
ASP.NET sovellus• ASP.NET hyödyt verrattuna HTML-kehitykseen  – Mahdollisuuden palvelimella ajettavaan koodiin ja    koodi...
ASP.NET                                      Global.asax• Sisältää ’Global’-luokan, joka periytyy HttpApplication-luokasta...
ASP.NET sivu• ASP.NET Page luokka   – Periytyy Control luokasta   – Oleelliset propertyt:       • Application            –...
ASP.NET sivu• Sivun elinkaari, tärkeimmät eventit    – PreInit        • Tässä vaiheessa tehdään sivupohja. Tarpeen ottaa k...
ASP.NET sivun tila• HTTP protokolla ei tue web-sovelluksen tilatiedon  ylläpitämistä  – ASP.NET Page-olio tuhotaan aina jo...
ASP.NET                       ViewState• ASP.NET runtime lisää automaattisesti piilotetun  lomakekentän (nimeltään __VIEWS...
ASP.NET                              Cache• Cache eli välimuisti tarjoaa joustavan tavan käsitellä web-  sovelluksen sisäi...
ASP.NET                           Session• Session on käyttäjäkohtainen• Yksi istunto on siis tietyn käyttäjän vuorovaikut...
ASP.NET                       Cookie• Yksi tapa säilyttää tilatietoa on eväste (Cookie)• Se on usein toteutettu tekstitied...
.NET kurssin loppusanat• Ohjelmointi on hauskaa: Myös .NET ohjelmointi  • Ohjelmoinnin oppiminen vaatii työtä: Vasta itse...
Upcoming SlideShare
Loading in …5
×

Net ohjelmointi kertaus

2,621 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,621
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Net ohjelmointi kertaus

  1. 1. .NET ohjelmointi A-ITY04-2000 kertaus Timo TanilaTampere University of Applied Sciences
  2. 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. 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. 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 – Search’n replace valitulle koodille• Listaus valmiista yhdistelmistä
  5. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 23. ’Extension Methods’• ’Extension Methods’ien 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 Methods’it 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. 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. 25. LINQ operaattoritfrom, in Käytetään määrittelemään LINQ-ilmaisun kohdeobjektitwhere Käytetään määrittelemään ehdot, joilla haluttu osajoukko saadaanselect Käytetään halutun osajoukon valitsemiseen jatkotoimenpiteitä vartenjoin, on, equals, Käytetään toisen tietolähteen liittämiseen samaan LINQ-into lauseeseenorderby, ascending, Käytetään valitun osajoukon lajitteluundescendinggroup, by Käytetään valitun osajoukon ryhmittelyyn
  26. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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ä.
  36. 36. WPF spesifinen osuus
  37. 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. 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. 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. 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. 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. 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. 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.
  44. 44. ASP.NET spesifinen osuus
  45. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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.

×