Luku 8 * Edistyneitä aiheita

Download Report

Transcript Luku 8 * Edistyneitä aiheita

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
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
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
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
Koodiesimerkki
private 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) { //... }
}
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
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... }
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 XMLtiedostot ja webistä löytyvät tietolähteet
Toinen esimerkki
NorthwindEntities 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ä...
}
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”.
Blendin käynnistäminen
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
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
Team Foundation Service
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ä
TFS-palvelimen tiedot
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
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
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
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
Margin-asetus Visual Studiossa
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
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.
Käyttöjärjestelmän hakutoiminto
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
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
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
Esimerkki
string näppäimistö = Windows.
Globalization.Language.
CurrentInputMethodLanguageTag;
string käyttöjärjestelmä = System.
Globalization.CultureInfo.
CurrentCulture.Name;
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 Buttonkomponenttien 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 .reswtiedostopäätteestä
Resurssitiedostojen tallennuspaikka
• Resurssitiedostot tallennetaan Stringsnimiseen 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”
Tallennuskansio
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”
Visual Studion muokkausnäkymä
Lokalisoitu XAML-määritys
• Jotta lokalisointi resurssitiedostojen kautta
saataisiin toimimaan, määritellään kullekin
käyttöliittymäkomponentille niin sanottu Uidattribuutti
• 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
Esimerkki
<Button x:Uid="OmaNappi"
Content="Painike" />
Lokalisoitava
ominaisuus
Name-ominaisuudesta saadaan
selville mitä komponenttia arvo
koskee (Uid-arvo) sekä mikä
ominaisuus tulisi lokalisoida.
Muoto on ”komponentti.ominaisuus”.
Uid-arvo
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?
Kysymyksiä ja vastauksia 1
LINQ-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ää LINQkieltä 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.
Kysymyksiä ja vastauksia 2
Yritä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”.