Пример #1
0
        static void Main(string[] args)
        {
            /**
             * Esimerkki4Program.cs
             *
             * Jos EN TUNTISI ohjelmoinnista seuraavia konsepteja:
             * - Luokan parametrillinen rakentaja
             * - Rajapinta ja rajapinnan toteutus
             *
             * Jos TUNNEN ohjelmoinnista seuraavan konseptin:
             * - Staattinen luokan metodi tai staattinen luokan muuttuja
             * - Parametrilliset metodit
             *
             * niin silloin toteutus olisi esimerkin näköinen.
             * Katso kohdat läpi ja siirry Esimerkki5Program.cs ohjelmaan.
             *
             * Esimerkki on aivan sama kuin edellinen esimerkki 3. Nyt erona
             * on se, että jatketaan saman opitun asian hyödyntämistä ja
             * tehdään Hedelmä luokan Katoa()-metodista myös parametrillinen,
             * joka ottaa vastaan packan olion.
             *
             * Nyt ohjelma on ihan toimiva ja käytännöllinen. Hedelma-luokan
             * Katoa()-metodissa on kerrottu asiasta lisää. Tämän hyvä
             * puoli on se, ettei tehdä mitään outoa kikkailua, joka voisi
             * myöhemmin aiheuttaa outoja bugeja ja ongelmia.
             *
             * Tässäkin on huonot puolensa ja yksi esimerkki on vielä
             * kerrottu seuraavassa viimeisessä esimerkissä. Siinä päästään
             * hieman pienempään riippuvuuteen luokkien kesken, koska nyt
             * Hedelmä luokka tietää, että Packman luokka on olemassa ja toisinpäin.
             * Tällöin puhutaan myös vahvasta riippuvuudesta mikä välillä
             * tuo suuremmissa ohjelmissa ongelmia.
             *
             * Tätä suosittelisin eniten. Seuraava esimerkki on vielä parempi
             * mutta en tiedä kuinka ymmärrettävä se on.
             *
             **/
            Pacman  pacman1  = new Pacman();  // Luodaan uusi pacman1 olio
            Hedelma hedelma1 = new Hedelma(); // Luodaan hedelma1 olio
            Hedelma hedelma2 = new Hedelma(); // Luodaan hedelma2 olio
            Hedelma hedelma3 = new Hedelma(); // Luodaan hedelma3 olio

            pacman1.Syo(hedelma1);            // kutsutaan olion Syo-metodia
            pacman1.Syo(hedelma2);            // kutsutaan olion Syo-metodia
            pacman1.Syo(hedelma3);            // kutsutaan olion Syo-metodia

            Console.WriteLine(pacman1.pisteet);

            Pacman  pacman2  = new Pacman(); // Luodaan uusi pacman2 olio
            Hedelma hedelma4 = new Hedelma();
            Hedelma hedelma5 = new Hedelma();

            pacman2.Syo(hedelma4);
            pacman2.Syo(hedelma5);

            Console.WriteLine(pacman2.pisteet);
            Console.ReadKey();
        }
Пример #2
0
        public void Syo(Hedelma hedelma)
        {
            Console.WriteLine("Hedelmä syöty");

            // Huomaa tässä this.
            // This viittaa olioon itseensä, joten tässä kohdin
            // hedelmän Katoa() metodille annetaan nykyinen olio mikä
            // alunperin tätä Syo()-metodia kutsuu. Tällainen rakenne
            // ei ole kovin harvinainen mutta melko hyödyllinen ja
            // tehokas oikein käytettynä.
            hedelma.Katoa(this);
        }