C# ja oliot Santtu Viitanen Niko Mononen Jyri Leinonen.

Slides:



Advertisements
Samankaltaiset esitykset
Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
Advertisements

Rajapintaluokat Rajapintaluokka luettelee metodit, joille tulee löytyä toteutus asianomaisen rajapinnan toteuttavista luokista. Rajapintaluokka on siis.
Minimaalinen Java-ohjelma •Kaikki ohjelmakoodi on luokkamäärityksen sisällä •Ohjelma käynnistyy ”public static void main(String[] args)”-metodista •System.out.print()
Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
6. Metodit.
© Jukka Harju, Viittausmuuttujat. © Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.
JavaScript (c) Irja & Reino Aarinen, 2007
Luokkakaaviot Luokkakaaviot Tekninen suunnittelu.
Ict1td002: Ohjelmointitaito Kertaus Osio 2 - luokat - ilmentymät - viittaus- ja arvomuuttuja - ilmentymien taulukointi HAAGA-HELIA IltaTiko.
Jukka Juslin Poikkeukset ja niiden paikallistaminen * Jukka Juslin * Liittyy oppikirjan lukuun 11.
Taulukot: Array Taulukko Javassa pitää aina perustaa (new)
Johdetun luokan määrittely tMyn1 Johdetun luokan määrittely •Kun johdettu luokka periytetään kantaluokasta, saadaan kantaluokan jäsenet enemmän tai vähemmän.
Ohjelmointitaito (ict1td002, 12 op) Syksy 2008
13. Pakkaukset.
Näytölle tulostaminen. 7.2 Sisällys System.out.println - ja System.out.print -operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden.
Perintä. Yleistä Olio-ohjelmoinnin menetelmä muodostaa uusia luokkia aiemmin määriteltyjen luokkien avulla Luokka saa automaattisesti käyttöönsä kaikki.
Qt-käyttöliittymäkirjasto Matti Lehtinen
OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT. LUOKKA JAVA ohjelma koostuu luokista LUOKKA sisältää metodeja molemmat sisältävät attribuutteja eli muuttujia.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Yksinkertaiset graafiset syöttö- ja tulostustoiminnot.
© Jukka Harju, Jukka Juslin Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 9 Poikkeuskäsittely.
Poikkeustenkäsittely  Mitä poikkeustenkäsittely tarkoittaa?  Poikkeuksen käsitteleminen  Poikkeusluokkien hierarkia  Poikkeuksen heittäminen 1.
9. Periytyminen Javassa.
Sami Jantunen LTY/Tietotekniikan osasto
Virtuaaliset jäsenfunktiot tMyn1 Virtuaaliset jäsenfunktiot Virtuaalinen jäsenfunktio on esiteltävä monimuotoisessa kantaluokassa. Virtuaalisen jäsenfunktion.
© Jukka Harju, Jukka Juslin
1 Kertaus koetta varten oleellisista asioista Jukka Juslin.
Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä.
7. Oliot ja viitteet.
Luokan määrittely class-määreellä tMyn1 Luokan määrittely class-määreellä Luokan määrittely tarkoittaa luokan tietojäsenten esittelyä ja jäsenfunktioiden.
Java Java on Sun Microsystems yhtiön kehittämä laaja olio-pohjainen ohjelmointikieli, joka on laitteistoriippumaton. Laitteistoriippumattomuudessa on.
String-vertailusta ja Scannerin käytöstä (1/2)
Kuinka tehdä blogi o365:ssä
Metodit – Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin ”return;”-lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua.
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
5. Kapselointi Yleistä Kapseloinnilla (encapsulation) tarkoitetaan luokan tietojen ja toimintojen pakkaamista yhdeksi suojatuksi kokonaisuudeksi.
10. Abstrakti luokka Johdanto Abstrakti luokka (abstract class) poikkeaa konkreettisesta luokasta (ei-abstrakti luokka) siten, että siitä ei.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Hyvä ohjelmointitapa (osa 2) Yleistä Lisää hyviä ohjelmointikäytäntöjä: − Jaa pitkä koodi osiin. − Käytä attribuutteja säästeliäästi.
Olioon kohdistuvia perustoimintoja tMyn1 Olioon kohdistuvia perustoimintoja Kopiointimuodostin (copy constructor) alustaa olion tietojäsenet saman luokan.
Poikkeukset Yleistä Virheeseen varautuminen tarkoittaa sitä, että ohjelmoija huomioi koodia kirjoittaessaan ajonaikaisen virheen mahdollisuuden.
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen
Vesa Ollikainen & Outi Grotenfelt
Poikkeustenkäsittely- lohkot tMyn1 Poikkeustenkäsittelylohkot try-catch Poikkeustilanteiden käsittelymekanismi toteutetaan varatuilla sanoilla try, throw.
Olioiden taulukointi Perustaulukon käyttö Luokan ilmentymät voidaan tallettaa taulukkoon samoin kuin muuttujat Esimerkki talletetaan taulukkoon opintojaksojen.
11. Rajapinnat Sisällys Mitä rajapinnat ovat? Kuinka ne määritellään ja otetaan käyttöön? Moniperiytyminen rajapintojen avulla. Varoituksen.
Monimuotoinen luokka tMyn1 Monimuotoinen luokka Monimuotoinen luokka mahdollistaa saman jäsenfunktion toteutuksen monella tavalla. Tällöin puhutaan virtuaalisesta.
Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä.
Kantaluokan määrittely tMyn1 Kantaluokan määrittely Perinnän käyttöön liittyvät varatut sanat private, protected, public, final ja abstract. Ne tarkoittavat.
Javan oliovirrat eli oliotiedostojen käsittely. Olio- eli objektitiedostojen käsittely Käsittely täysin samanlaista kuin muiden tiedostojen 1.Otetaan.
1 © Jukka Juslin Luokat, attribuutit ja metodit Yleistietoa: seuraavalla koulutusviikolla tarkempi käsittely.
15. Ohjelmoinnin tekniikkaa
.NET ohjelmointi C#-kielellä RäsSe, lokakuu 2004.
Yksikkötestaus ● Yksikkötestauksella tarkoitetaan lähdekoodiin kuuluvien yksittäisten osien testaamista. Termi yksikkö viittaa ohjelman pienimpiin mahdollisiin.
String-vertailusta ja Scannerin käytöstä (1/2)
5. Kapselointi.
Poikkeustenkäsittelylohkot try-catch
Kuinka niitä käsitellään
Kantaluokan määrittely
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
Rajapintaluokat Rajapintaluokka luettelee metodit, joille tulee löytyä toteutus asianomaisen rajapinnan toteuttavista luokista. Rajapintaluokka on siis.
Kantaluokan määrittely
7. Näytölle tulostaminen
13. Pakkaukset.
4. Attribuutit.
7. Näytölle tulostaminen
3. Attribuutit.
13. Pakkaukset.
4. Luokan testaus ja käyttö olion kautta
eli oliotiedostojen käsittely
Esityksen transkriptio:

C# ja oliot Santtu Viitanen Niko Mononen Jyri Leinonen

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

- 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.

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.

- .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ä.

- 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.

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.

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!

   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;    } }

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    } }

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;        } ... }

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

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

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

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.

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");         }           }

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) { ... }     } }

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

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)    {    } }

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

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

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.

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;    } }   

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);

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);

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 { ... }

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

Lähteet: http://fi.wikipedia.org/wiki/C_sharp http://en.wikipedia.org/wiki/C_sharp http://en.wikipedia.org/wiki/Common_Language_Infrastructure http://en.wikipedia.org/wiki/Common_Language_Runtime http://users.jyu.fi/~vesal/kurssit/winohj/csharp/seminaari05/CS_Pikakurssi.pdf http://msdn.microsoft.com/fi-fi/library/kx37x362(en-us).aspx