39
Luku 8 – Edistyneitä aiheita

Luku 8 – Edistyneitä aiheita

  • Upload
    michon

  • View
    44

  • Download
    0

Embed Size (px)

DESCRIPTION

Luku 8 – Edistyneitä aiheita. Sisältö ❸. C#-kielen tehokas käyttö Asynkroninen ohjelmointi LINQ-kyselykieli Visual Studio 2013 ja Blend 2013 Versionhallinta pilvestä XAML-vinkkejä Marginaalit ja sopimukset Sovellusten lokalisointi Tehtäviä Kysymyksiä ja vastauksia. - PowerPoint PPT Presentation

Citation preview

Page 1: Luku 8 – Edistyneitä aiheita

Luku 8 – Edistyneitä aiheita

Page 2: Luku 8 – Edistyneitä aiheita

Sisältö ❸• C#-kielen tehokas käyttö

– Asynkroninen ohjelmointi– LINQ-kyselykieli

• Visual Studio 2013 ja Blend 2013• Versionhallinta pilvestä• XAML-vinkkejä

– Marginaalit ja sopimukset– Sovellusten lokalisointi

• Tehtäviä• Kysymyksiä ja vastauksia

Page 3: Luku 8 – Edistyneitä aiheita

C#-kielen tehokas käyttö• Ohjelmointikielenä C#-kieli on tehokas ja

monipuolinen• Paljon nykyaikaisia ominaisuuksia– Esimerkiksi geneeriset tietotyypit, tuki

asynkroniselle ohjelmoinnille ja rinnakkaisuudelle, integroitu kyselykieli, jne.

• Seuraavassa tutustutaan muutamiin C#-kielen hyödyllisiin ominaisuuksiin

Page 4: Luku 8 – Edistyneitä aiheita

Asynkroninen ohjelmointi• Asynkronisuus tarkoittaa ohjelmoinnissa sitä, että

kaksi tai useampaa toimintoa suoritetaan rinnakkain eli yhtä aikaa– Eikä peräkkäin kuten ohjelmoinnissa perinteisesti

• Asynkronisen ohjelmoinnin avulla ratkaistaan ongelma, jossa sovellus näyttää pysähtyvän paikalleen tehdessään jotain– Esimerkiksi silloin, kun sovellus ollaan lataamassa

kookasta tiedostoa verkosta

Page 5: Luku 8 – Edistyneitä aiheita

C# ja asynkronisuus• C#-ohjelmointkieli tekee asynkronisesta

ohjelmoinnista helppoa uusien async- ja await-avainsanojen avulla

• Apuna käytetään runsaasti Task-luokkaa, joka on osa Windows 8:n luokkakirjastoja

Page 6: Luku 8 – Edistyneitä aiheita

Koodiesimerkkiprivate async void StartButton_Click(object sender, RoutedEventArgs e){try { Task<int> intTask = ExampleMethodAsync(); ResultsTextBox.Text += "Tehdään jotain samalla " + "kun metodia suoritetaan"; int intResult = await intTask; ResultsTextBox.Text += String.Format( "Length: {0}\n\n", intResult); } catch (Exception) { //... }}

Page 7: Luku 8 – Edistyneitä aiheita

LINQ-kyselykieli• Lyhenne sanoista Language Integrated Query– Äännetään ”link” tai ”lin-quu”

• LINQ on C#-ohjemointikieleen integroitu kyselykieli, jonka avulla helpotetaan tietojen hakemista ja etsimistä erilaisista tietolähteistä

• Syntaksi muistuttaa SQL-kieltä– Jos tunnet jo SQL-kieltä, on LINQ helppo oppia

Page 8: Luku 8 – Edistyneitä aiheita

Esimerkki LINQ-kyselystäint[] luvut = {5,3,9,7,1,6,10,4,2};var lajiteltuna = from l in luvut where l > 5 orderby l select l;foreach (int luku in lajiteltuna){ // näytä luku ruudulla... }

Page 9: Luku 8 – Edistyneitä aiheita

LINQ-kielen tukema tietolähteet• Edellisessä esimerkissä näytettiin LINQ-kysely,

joka hakee lukuja taulukosta (engl. array)• Taulukkojen tai sovelluksen sisäisten olioiden

lisäksi LINQ osaa hakea tietoja esimerkiksi SQL-tietokannoista– Muita tuettuja tietolähteitä ovat esimerkiksi XML-

tiedostot ja webistä löytyvät tietolähteet

Page 10: Luku 8 – Edistyneitä aiheita

Toinen esimerkkiNorthwindEntities entities = new NorthwindEntities();var suomalaisetAsiakkaat = from c in entities.Customers where c.Country == "Finland" orderby c.CompanyName select c; foreach (var asiakas in suomalaisetAsiakkaat){ int tilausmäärä = asiakas.Orders.Count; // muuta käsittelyä...}

Page 11: Luku 8 – Edistyneitä aiheita

Visual Studio 2013 ja Blend• Visual Studio ja Blend ovat työvälinepari, joita kumpaakin

tarvitset Windows 8 -sovellusten kehittämiseen– Välineet on suunniteltu niin, että niiden yhteiskäyttö on

vaivatonta• Kun olet avannut Windows 8 -sovelluksen Visual

Studioon, voit helposti siirtyä muokkaamaan mitä tahansa XAML-tiedostoa Blendiin– Helpoiten tämä onnistuu Visual Studion Solution Explorer -

ikkunan kautta, jonka pikavalikosta voit valita komennon ”Open in Blend”.

Page 12: Luku 8 – Edistyneitä aiheita

Blendin käynnistäminen

Page 13: Luku 8 – Edistyneitä aiheita

Versionhallinnan käsite• Versionhallinta on olennainen osa mitä tahansa

ohjelmistoprojektia• Versionhallinnan avulla useamman kehittäjän

yhtäaikaiset muutokset pysyvät järjestyksessä– Tarvittaessa jo kertaalleen muutettu tai poistettu

ohjelmakoodi saadaan palautettua takaisin• Versionhallintajärjestelmien perusteiden hallinta

on hyvä taito kaikille ohjelmistokehittäjille

Page 14: Luku 8 – Edistyneitä aiheita

Microsoftin ratkaisu• Visual Studio toimii hyvin yhteen valmistajan

oman versionhallintapalvelun kanssa• Palvelun nimi on Team Foundation Service,

lyhyesti TFS• Palvelu on pilvipalvelu, jota käytetään suoraan

Visual Studiosta tai web-selaimella

Page 15: Luku 8 – Edistyneitä aiheita

Team Foundation Service

Page 16: Luku 8 – Edistyneitä aiheita

TFS:n käyttö Visual Studiosta• Rekisteröityessäsi TFS-pilvipalveluun voit valita

palvelulle haluamasi nimen– Tästä nimestä muodostuu sinulle varatun palvelun

internet-osoite, jonka Visual Studio haluaa tietää• Yhdistäminen tehdään Visual Studion Team

Explorer -ikkunan kautta– Kun yhdistäminen on kerran tehty, voit käyttää

versionhallintaan jatkossakin ilman eri määrityksiä

Page 17: Luku 8 – Edistyneitä aiheita

TFS-palvelimen tiedot

Page 18: Luku 8 – Edistyneitä aiheita

CodePlex-palvelu• CodePlex on kaikille avoin web-palvelu, jossa

voidaan kehittää avoimen lähdekoodin ratkaisuja yhteisöllisesti

• CodePlex-palveluun kuuluu TFS-pohjainen versionhallinnan kevytversio

• CodePlex-palvelulla on kymmeniä tuhansia aktiivisia käyttäjiä, ja sieltä löydätkin monia mielenkiintoisia projekteja

Page 19: Luku 8 – Edistyneitä aiheita

XAML-vinkkejä• Windows 8 -sovellusten käyttöliittymien

kuvaamiseen käytetään XAML-kieltä• Kielen ominaisuuksien hyvä hallinta auttaa

kehittämään parempia sovelluksia nopeammin• Seuraavassa esitetään kolme vinkkiä

parempaan XAML-ohjelmointiin

Page 20: Luku 8 – Edistyneitä aiheita

Komponenttien marginaalit• Monien käyttöliittymäkomponenttien sijainti

ja koko määritellään Margin-nimisellä ominaisuudella

• Margin-ominaisuuden arvot ovat suhteellisia, ja riippuvat siitä minkä toisen komponentin sisällä toinen komponentti on

Page 21: Luku 8 – Edistyneitä aiheita

Esimerkki• XAML-koodissa marginaalit voidaan määritellä

esimerkiksi näin:<Rectangle Margin="7,7,40,20" />

• Margin-ominaisuuden muodostaa neljä lukua, jotka edustavat komponentin kunkin reunan etäisyyttä äiti-elementin reunoista– Lukujen järjestys on vasen, ylä, oikea, ala

Page 22: Luku 8 – Edistyneitä aiheita

Margin-asetus Visual Studiossa

Page 23: Luku 8 – Edistyneitä aiheita

Sopimukset (engl. contracts)• Windows 8 -sovellukset voivat käyttää niin

sanottuja sopimuksia kytkeytyäkseen osaksi käyttöjärjestelmän toimintoja

• Sopimusten avulla käyttöjärjestelmä ja sovelluksesi (tai muut sovellukset) voivat vaihtaa tietoja keskenään– Näin tiettyjä perustoimintoja ei tarvitse toteuttaa

jokaisessa sovelluksessa erikseen

Page 24: Luku 8 – Edistyneitä aiheita

Haku-sopimus• Yksi esimerkki tällaisesta kytkeytymisestä on

Windows-käyttöjärjestelmän hakutoiminto• Haku-sopimuksen avulla sovelluksesi

sisältämät tiedot tulevat mukaan hakutuloksiin, kun käyttäjä hakee tietoja käyttöjärjestelmän omalla hakutoiminnolla– Sisältö voi olla tekstiä, kuvia, videoita, jne.

Page 25: Luku 8 – Edistyneitä aiheita

Käyttöjärjestelmän hakutoiminto

Page 26: Luku 8 – Edistyneitä aiheita

Sovellusten lokalisointi• Kun kehitettävä Windows 8 -sovellus tai peli

on sellainen, että sitä voitaisiin käyttää myös Suomen rajojen ulkopuolella, on pohdittava, pitäisikö sovelluksen käyttöliittymä kääntää eri kielille

• Windows 8 -sovellukset voidaan pienellä vaivalla kääntää useille kielille

Page 27: Luku 8 – Edistyneitä aiheita

Kääntämisen kaksi osa-aluetta• Kääntämiseen liittyy kaksi eri asiaa, joista käytetään nimityksiä

lokalisaatio ja globalisaatio (engl. localization, globalization)• Lokalisaatio

– Sovelluksen kääntämistä ja sovittamista kohdekulttuuriin (esimerkiksi värimaailma ja ikonit, pelien sanaleikit, ja niin edelleen)

• Globalisaatio– Suomen- tai englanninkielinen sovellus ohjelmoidaan tukemaan

erilaisia päivämäärä-, valuutta- ja lukujen desimaalierottimia ilman, että käyttöliittymän tekstejä käännetään

Page 28: Luku 8 – Edistyneitä aiheita

Ohjelmallinen selvittäminen• Ohjelmakoodissa voit selvittää käyttäjän

valitseman kielen sekä käyttöjärjestelmän kielen

• Kirjastoluokat– Windows.Globalization.Language – System.Globalization.CultureInfo

Page 29: Luku 8 – Edistyneitä aiheita

Esimerkkistring näppäimistö = Windows. Globalization.Language. CurrentInputMethodLanguageTag;

string käyttöjärjestelmä = System. Globalization.CultureInfo. CurrentCulture.Name;

Page 30: Luku 8 – Edistyneitä aiheita

Käyttöliittymän kääntäminen• Käyttöliittymän kääntämiseen eri kielille kannattaa

käyttää niin sanottuja resurssitiedostoja (engl. resource files)– Ajatuksena on, että vaikkapa TextBlock- ja Button-

komponenttien näyttämää tekstiä ei kirjoiteta suoraan xaml-koodiin, vaan tekstit syötetään kullekin kielelle tarkoitettuun resurssitiedostoon

• Resurssitiedostot tunnistaa Visual Studion Solution Explorer -ikkunassa .resw-tiedostopäätteestä

Page 31: Luku 8 – Edistyneitä aiheita

Resurssitiedostojen tallennuspaikka

• Resurssitiedostot tallennetaan Strings-nimiseen alikansioon projektissa– Kansio on luotava tarvittaessa itse

• Tämän kansion alle perustetaan edelleen alikansioita kutakin kielikoodia varten– Kielikoodit ovat muotoa ”xx-XX”– Esimerkiksi suomenkielisellä sovelluksella

alikansion nimi on ”fi-FI”

Page 32: Luku 8 – Edistyneitä aiheita

Tallennuskansio

Page 33: Luku 8 – Edistyneitä aiheita

Resurssitiedostojen muokkaus• Resurssitiedostoja muokataan Visual Studiossa Excelin

kaltaisessa taulukossa, jossa vasemmalla on niin sanottu avain (engl. key) ja oikealla arvo (value)– Leikepöydän kautta tiedot voidaan tarvittaessa viedä Exceliin, jolloin

tiedoston voi lähettää vaikkapa käännöstoimistoon käännettäväksi• Avain muodostuu kahdesta osasta, ensin halutusta

yksilöivästä nimestä (esimerkiksi komponentin nimi) ja tämän jälkeen pisteellä erotetusta ominaisuuden nimestä, joka halutaan lokalisoida– Esimerkiksi ”Nappi.Content”

Page 34: Luku 8 – Edistyneitä aiheita

Visual Studion muokkausnäkymä

Page 35: Luku 8 – Edistyneitä aiheita

Lokalisoitu XAML-määritys• Jotta lokalisointi resurssitiedostojen kautta saataisiin

toimimaan, määritellään kullekin käyttöliittymäkomponentille niin sanottu Uid-attribuutti

• Huomaa, että XAML-koodiin voidaan jättää alkuperäinen määritys kuten vaikkapa painikkeen (engl. button) ruudulla näyttämä teksti– Kun sovellusta ajetaan, käyttöjärjestelmä hakee

resurssitiedostosta käyttäjän kielen mukaisen tekstin, ja korvaa XAML-koodissa olleen arvon automaattisesti

Page 36: Luku 8 – Edistyneitä aiheita

Esimerkki<Button x:Uid="OmaNappi" Content="Painike" />

Uid-arvo

Lokalisoitava ominaisuus

Name-ominaisuudesta saadaan selville mitä komponenttia arvo koskee (Uid-arvo) sekä mikä ominaisuus tulisi lokalisoida.Muoto on ”komponentti.ominaisuus”.

Page 37: Luku 8 – Edistyneitä aiheita

Tehtäviä1. Keksi esimerkkejä tilanteista, joissa asynkronisuudesta on

apua Windows 8 -sovelluksissa.2. Blend sopii Windows 8 -sovellusten graafisten

ominaisuuksien kehittämiseen, mutta se ei kuitenkaan ole kuvankäsittelyväline. Selvitä, mitä yleisiä tiedostomuotoja Blend tukee grafiikan tuomiseksi muista sovelluksista, esimerkiksi Photoshopista.

3. Perusta ystäviesi, koulukavereittesi tai kollegoittesi kanssa avoimen lähdekoodin projekti CodePlexiin, ja jakaa sen kautta lähdekoodia koko maailmalle. Mitä havaintoja teit?

Page 38: Luku 8 – Edistyneitä aiheita

Kysymyksiä ja vastauksia 1LINQ-kyselykieli vaikuttaa mielenkiintoiselta. Mihin kaikkeen sitä voi käyttää?• Lyhyesti sanottuna LINQ-kyselykieli ja siihen liittyvät kirjastot

ovat hyvin monipuolisia ja soveltuvat moneen käyttötarkoitukseen.

• Kun aiemmista esimerkeistä kävi ilmi, voit käyttää LINQ-kieltä hakeaksesi, suodattaaksesi (engl. filter) ja lajitellaksesi tietoa monesta eri lähteestä.

• Tällaisia lähteitä ovat esimerkiksi sovelluksesi sisäiset oliot (kuten taulukot ja listat), sql-tietokannat, xml-tiedostot ja niin edelleen.

Page 39: Luku 8 – Edistyneitä aiheita

Kysymyksiä ja vastauksia 2Yritän käyttää C#-kielen await-avainsanaa, mutta kääntäjä ilmoittaa virheestä siinä metodissa, jossa await-avainsana on?• Mitä todennäköisimmin virhe johtuu siitä, että olet

unohtanut async-avainsanan itse metodin määrittelystä.• Jos olet määritellyt metodin esimerkiksi ”private void

Button_Click”, sinun pitää lisätä async-avainsana private-sanan jälkeen: ”private async void Button_Click”.