Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

C# ja oliot Santtu Viitanen Niko Mononen Jyri Leinonen.

Samankaltaiset esitykset


Esitys aiheesta: "C# ja oliot Santtu Viitanen Niko Mononen Jyri Leinonen."— Esityksen transkriptio:

1 C# ja oliot Santtu Viitanen Niko Mononen Jyri Leinonen

2 1. Alustus C#:sta - Microsoftin kehittämä yleiskäyttöinen olio-ohjelmointikieli - Pääsuunnittelijana toimi Andreas Hejlsberg, joka on aiemmin osallistunut Turbo Pascalin, Embacadero Delphin ja Visual J++:n suunnitteluun - Lähtökohtana oli luoda yksinkertainen ja moderni oliokieli,  jolla on C-kielen syntaksi. Tavoitteena oli myös yhdistetää C++:n ja Turbo Pascalin tehokkuus sekä Javan ja Visual Basicin helppous - Suunnittelu alkoi tammikuussa 1999 ja esiteltiin ensimmäististä kertaa heinäkuussa 2000

3 - Kielen ensimmäinen versio (1
- Kielen ensimmäinen versio (1.0) julkaistiin Tammikuussa 2002 ja toinen versio (2.0) syyskuussa 2005. - Nämä molemmat versiot ovat ECMA ja ISO/IEC standarsoituja. Kielestä on myös julkaistu 3.0 versio elokuussa 2007 sekä 4.0 huhtikuussa 2010, mutta näitä uudempia versioita ei ole vielä standarsoitu. Kielen 5.0 versio on suunnitteilla.

4 1.2 Arkkitehtuuri - Common Language Infrastructure (CLI) on avoin Microsoftin kehittämä määritelmä. Tämä määritelmä kuvaa ympäristön jossa voidaan käyttää useampaa korkean tason kieltä erilaisilla tietokoneilla ilman tarvetta kirjottaa koodia uudelleen eri alustoille. Common Language Runtime (CLR) on Microsoftin oma CLI:n toteuttava järjestelmä. Myös vapaat ja avoimen lähdekoodin Mono ja Portable.NET toteuttavat CLI:n.

5 - .NET Framework on Microsoftin kehittämä sovellus framework joka toimii Windows ympäristöissä. Se pitää sisällään Class Libaryn sekä Common Language Runtimen. Class Libary sisältää suuren määrän valmista koodia yleisimpiin koodaus ongelmiin. Se tarjoaa apua esimerkiksi käyttöliittymiin, tietokantayhteyksiin, salauksiin, tietoverkkoliikenteeseen sekä moneen muuhun. Class Libary pitää sisällään myös monia muita kirjastoja kuten esimerkiksi Windows Forms, ASP.NET, ADO.NET ja WPF (Windows Presentation Foundation). .NET framework mahdollistaa monen kielen käytön ja kaikki sen kirjastot ovat kaikkien sen tukemien kielten käytettävissä.

6 - Common Language Runtime mahdollistaa seuraavan käytännön toiminnan: Kehittäjä kirjoittaa koodin valitsemallaan CLI yhteensopivalla kielellä (esim C#, VB.NET, C++). Käännön aikana kääntäjä kääntää käytetyn kielen Common Intermediate Language:ksi (CIL). Ajon aikana laitteen oma Common Language Runtime kääntää CIL koodin konekieleksi joka voidaan suorittaa kyseisellä alustalla. CLR tarjoaa myös tärkeitä palveluita kuten muistin hallinnan, säikeiden hallinnan, poikkeusten hallinnan, roskien keruun sekä tietoturvan. CLR siis mahdollistaa usean erillaisen kielen käytön usealla erillaisella alustalla ilman, että koodia tarvitsisi kirjoittaa uudestaan tai kääntää jokaiselle alustalle oma versio sovelluksesta. Tällöin myöskään kehittäjän ei tarvitse kiinnittää huomiota alustojen erillaisuuteen.

7 Mono projektin tarkoituksena on luoda vapaa ja avoimen lähdekoodin vastine .NET Frameworkista. Mono projekti mahdollistaa .NET sovelluksien ajamisen useammalla eri käyttöjärjestelmällä. Tämä on hyödyllistä esimerkiksi pelikehityksessä sillä sama koodi pyörii Windows, Mac OS X, Linux, PlayStation 3, Wii ja Xbox 360 ympäristöissä. Tällä hetkellä Mono tarjoaa .NET:n core API:n sekä tuen VB.NET:lle ja C#:n versioille 2.0, 3.0 ja 4.0. Se myös tukee Windows Forms 2.0. Mono sisältää myös avoimen lähdekoodin version Silverlightista. Mono tarjoaa myös C# kääntäjän sekä CLR:n toiminnalisuuden. Projektin päämääränä on tukea lähes täysin .NET 4.0:n ominaisuuksia.

8 2. C# kielen perusrakenteet
Arvotyypit sisältävät suoraan arvonsa ja ne varaavat muistinsa pinosta. int luku1 = 123; Viittaustyypit varaavat muistinsa keosta ja pino sisältää vain viittauksen keon muistiosoitteeseen. Eli esim. kun luodaan instanssi jostakin luokasta StringBuilder sb1 = new StringBuilder("Hello"); StringBuilder sb2 = sb1; sb1.Append(" World!"); Console.WriteLine(sb1.ToString()); // Hello World! Console.WriteLine(sb2.ToString()); // Hello World!

9  public class Henkilo { string etunimi: string sukunimi    public Henkilo() //konstruktori 1    {    }      public Henkilo(string etunimi, string sukunimi) // konstruktori 2    {        // asetetaan parametreina saadut arvot ominaisuuksiin        this.etunimi = etunimi;        this.sukunimi = sukunimi;    } }

10 Hajottimen tehtävä on siivota jäljet (vapauttaa varatut resurssit) ennen olion poistamista. Luokalla voi olla vain yksi hajotin ja sitä kutsutaan automaattisesti tarvittaessa. Hajottimella ei ole määreitä eikä se ota vastaan parametreja. Hajotin esitellään ~ -merkillä. public class OmaLuokka {      ~OmaLuokka()    {        // vapauta resurssit    } }

11 Partial Class rakenteet
namespace Sovellus1 ...    public partial class OmaLuokka    {        public string Teksti { get; set; }        public int Numero { get; set; }    } } namespace Sovellus1 ...    public partial class OmaLuokka    {        public string PalautaTeksti() { return Teksti; }        public int PalautaNumero()        {            return Numero;        } ... }

12 Atribuuteilla on aksessorit get ja set, jotka tarjoavat luku- ja kirjoitustoiminnallisuudet. public class Henkilo {    public char Sukupuoli    {        get {  return sukupuoli;  }        set { sukupuoli = value; }    } }

13 Indeksereillä saadaan luokka näyttämään taulukolta, jolloin siihen päästään käsiksi [ ] -operaattorilla.  Indekserit määritellään this-avainsanalla. Hakasulkujen sisään annetaan argumentit. Muuten määrittely muistuttaa Atribuuttien määrittelyä get- ja set -aksessoreineen.  Hakusulkujen sisään voi antaa useita argumentteja ja ne voivat olla muutakin tyyppiä kuin int, taulukoista poiketen

14 public int this[int index]
{     get     {         // palauta arvo     }     set         // aseta arvo }

15 Delegaatit ovat metodiosoittimia, eli delegaattia kutsuttaessa kutsutaankin sitä kuuntelevia metodeja.  Delegaatti voi osoittaa useampaan metodiin yhtä aikaa.  Delegaatin esittely muistuttaa metodia ilman toteutusta (abstrakti metodi) lisättynä delegate -avainsanalla. Määreiksi käyvät new sekä näkyvyysmääreet.

16 namespace DelegateDemo
{     class OmaLuokka     {         // delegaatin esittely         public delegate void KirjoitaLokiin(string viesti);         // delegaatin ilmentymä/instanssi         public KirjoitaLokiin LokiDelegaatti { get; set; }         public void SuoritaTehtava()         {             // kutsutaan delegaattia             LokiDelegaatti("Tehtävä suoritettu");         }           }

17 class Program  {         static void Main(string[] args){             OmaLuokka oma = new OmaLuokka();             // asetetaan delegaatti osoittamaan metodiin             oma.LokiDelegaatti = KirjoitaTiedostoon;             // delegaattiin voi lisätä kuuntelijoita += operaattorilla             oma.LokiDelegaatti += KirjoitaTietokantaan;             oma.SuoritaTehtava();              // delegaatista voi poistaa kuuntelijoita -= operaattorilla             oma.LokiDelegaatti -= KirjoitaTiedostoon;         }         static void KirjoitaTiedostoon(string viesti){ ... }         static void KirjoitaTietokantaan(string viesti) { ... }     } }

18 2.2. Perintä ja rajapinnat - Ei moniperintää
- Luokat voivat periä toisen luokan (kantaluokka), jolloin ne voivat laajentaa/muuttaa sen toiminnallisuutta. base-avainsanalla päästään käsiksi kantaluokan jäseniin - Kantaluokan jäsenen voi piilottaa new-avainsanalla tai metodit ja ominaisuudet voidaan määritellä virtuaalisiksi, jolloin perivä luokka voi ylikirjoittaa kantaluokantoteutuksen käyttämällä avainsanaa override

19 public class Kantaluokka {    public Kantaluokka() { }    public Kantaluokka(string viesti) {  } } ...
public class Lapsiluokka : Kantaluokka {    public Lapsiluokka() { }      // toinen konstruktoreista kutsuu kantaluokan konstruktoria parametrilla    public Lapsiluokka(string viesti) : base(viesti)    {    } }

20 public class Kantaluokka {    public void NormaaliMetodi() { }    public virtual void VirtuaalinenMetodi() { } } public class Lapsiluokka : Kantaluokka {    public new void NormaaliMetodi() { }    public override void VirtuaalinenMetodi()  { } } Lapsiluokka ll = new Lapsiluokka(); ll.NormaaliMetodi(); // kutsuu lapsiluokkaa ll.VirtuaalinenMetodi(); // kutsuu lapsiluokkaa Kantaluokka kl = ll; kl.NormaaliMetodi(); // kutsuu kantaluokkaa! kl.VirtuaalinenMetodi(); // kutsuu lapsiluokkaa

21 interface EsimRajapinta 
{     void esimMetodi(); } class ImplementoivaLuokka : EsimRajapinta {     void EsimRajapinta.esimMetodi()     {         // koodi     }     static void Main()     {         EsimRajapinta obj = new ImplementoivaLuokka();         obj.esimMetodi;     } }

22 2.3 Kapselointi Suojausmääreet (saantimääreet, näkyvyysmääreet) määräävät kuinka julkisia esim. luokat tai niiden jäsenet ovat. C#:ssa suojausmääreitä on neljä ja niitä voi määritellä vain yhden/luokka tai jäsen. Suojausmääreet ovat public: Näkyy kaikille. Kaikista sallivin. protected internal: Näkyy luokan sisällä, perineissä luokissa, sekä ko. assemblyn (exe, dll) sisällä internal: Näkyy assemblyn (exe, dll) sisällä protected: Näkyy luokan sisällä sekä perineissä luokissa private: Näkyy vain luokan sisällä. Kaikista suojatuin. Käytetään oletuksena.

23 2.4. geneerisyys Place holderit määritellään < ja > -merkkien väliin. Alla esimerkki metodista, joka voi vaihtaa muuttujien arvot keskenään riippumatta niiden tietotyypistä. Place holdereita voi olla myös useampia ja niille voi antaa omat nimensä public static class Vaihtaja {    public static void VaihdaArvot<T>(ref T eka, ref T toka)    {        T temp = eka;        eka = toka;        toka = temp;    } }   

24 int a = 1, b = 2; // T korvataan tietotyypillä int Vaihtaja
int a = 1, b = 2; // T korvataan tietotyypillä int Vaihtaja.VaihdaArvot<int>(ref a, ref b); // koska a:n ja b:n tiedetään olevan int-tyyppiä, // voi T:n määrittelyn jättää pois Vaihtaja.VaihdaArvot(ref a, ref b);

25 Myös geneeristen luokkien tekeminen on mahdollista
Myös geneeristen luokkien tekeminen on mahdollista. public class Jemma<T> {    List<T> objektit;    public Jemma()    {        objektit = new List<T>();    }    public void Lisaa(T objekti)    {        objektit.Add(objekti);    } } Jemma<int> jemma = new Jemma<int>(); jemma.Lisaa(123);

26 2.5. Poikkeukset int luku1 = 1, luku2 = 0, osamaara = 0; try {  osamaara = luku1 / luku2; } catch (DivideByZeroException) // nollallajako-poikkeus { ... } catch (Exception ex) // kaikki muut poikkeukset { ... } finally // suoritetaan lopuksi { ... }

27 3. Käyttöliittymäsuunnittelu ja oliot
- Eli vaikka joku autolaskuri in action :)

28 Lähteet:


Lataa ppt "C# ja oliot Santtu Viitanen Niko Mononen Jyri Leinonen."

Samankaltaiset esitykset


Iklan oleh Google