InzynieriaOprogramowania.doc

(337 KB) Pobierz

Inżynieria Oprogramowania

Projekt 1

Łukasz Szewczyk

 

1.      Dziedziczenie – tworzenie nowej klasy z klasy już istniejącej.

abstract class Class1

    {

        int a; // deklaracja domyślna: dla klas private

        public int b;

        protected int c;

        private int d;

 

        public Class1()

        {

            System.Console.WriteLine("Wywłoano konstruktor Class1");

        }

 

        public abstract void wyswietl_b();

    }

 

interface Interface1

    {

        void wyswietl_zmienne(); // metoda jest typu public

    }

 

class Class2 : Class1, Interface1

    {

        public void wyswietl_zmienne()

        {

            // System.Console.WriteLine(a); // Powoduje błąd kompilacji, gdyż zmienna a jest typu private - niedostępna w tej klasie

            System.Console.WriteLine(b);

            System.Console.WriteLine(c);

            // System.Console.WriteLine(d); // Ta sama sytuacja co ze zmienną a

        }

 

        public Class2()

        {

            System.Console.WriteLine("Wywłoano konstruktor Class2");

        }

 

        public override void wyswietl_b()

        {

            System.Console.WriteLine("b");

        }

    }  

Metody interfejsu oraz metody abstrakcyjne muszą być nadpisane w klasie dziedziczącej.

Class2 Obiekt = new Class2(); powoduje wykonanie konstruktora najpierw klasy bazowej, a następnie dziedizczącej.

 

 

Diagram klas:

 

 

2. Hermetyzacja – ukrywanie części składowych lub metod klasy, by były dostępne tylko z jego wnętrza. Można w ten sposób zabezpieczyć przed przypadkowym wpisaniem błędnej wartości lub modyfikacji zmiennej, która nie powinna być modyfikowana z zewnątrz klasy.

 

class Class1

    {

        static private int ilosc_obiektow=0; // Zmienna prywatna, nie można zmienić jej wartości bezpośrednio

 

        public Class1()

        {

            ilosc_obiektow++;

        }

        ~Class1()

        {

            ilosc_obiektow--;

        }

 

        private int kat = 0;

        public int Kat // Właściwosci, krótszy sposób pisania metod get i set dla zmiennej

        {

            get { return kat; }

            set {kat=value % 180;} // Zapewniamy, że wartosć zmiennej nie wykroczy poza dozwolony zakres

        }

 

        internal int b = 0; // Zmienna dostępna tylko wewnątrz pakietu

    }

 

 

 

 

 

 

 

 

 

 

3. Polimorfizm

    class Program

    {

        static void Main(string[] args)

        {

            Class1 Obiekt = new Class1();

            Obiekt.Kat = 500; // Zmienna zostanie przycięta przy przypisywaniu dzięki odpowiedniej metodzie set

 

            System.Console.WriteLine("Wartość w obiekcie {0}",Obiekt.Kat); // Zostanie wyswietlona wartosć 140

            System.Console.ReadKey();

        }

    }

mechanizm pozwalający na używanie pozornie tych samych metod lub obiektów na różne sposoby.

 

class Parzysta : Calkowita

    {

        public override void ustawWartosc(int a) // przesłonięta metoda klasy bazowej. Uniemożliwia przypisanie obiektowi typu parzysta nadać wartość nieparzystą

        {

            wartosc = (a / 2) * 2; // Zaokrągla liczbe w dół do najbliższej parzystej

        }

 

        public override void ustawWartosc(double a)

        {

            wartosc = ((int)(a + 0.5)/2)*2;

        }

    }

 

class Calkowita

    {

        protected int wartosc = 0;

 

        public virtual void ustawWartosc(int a)

        {

            wartosc = a;

        }

 

        public virtual void ustawWartosc(double a)

        {

            wartosc = (int)(a+0.5); // Druga wersja metody. Umożliwa ustawienie wartości int na bazie wartości double zgodnie z zasadami zaokrąglania

        }

 

        public int pobierzWartosc()

        {

            return wartosc;

        }

    }

 

class Program

    {

        static void Main(string[] args)

        {

            Calkowita L1 = new Calkowita();

            Calkowita L2 = new Parzysta();

 

            System.Console.WriteLine("ustawianie wartosci liczb na int 21");

            L1.ustawWartosc(21);

            L2.ustawWartosc(21);

            System.Console.WriteLine("Liczba 1 = {0}, Liczba 2 = {1}",L1.pobierzWartosc(), L2.pobierzWartosc()); // Wyświetli wartości 21 i 20 (pomimo, że druga referencja jest tego samego typu co pierwsza, to obiekt jest innego typu)

 

            System.Console.WriteLine("ustawianie wartosci liczb na dobule 14,5");

            L1.ustawWartosc(14.5);

            L2.ustawWartosc(14.5);

            System.Console.WriteLine("Liczba 1 = {0}, Liczba 2 = {1}", L1.pobierzWartosc(), L2.pobierzWartosc()); // Wyświetli wartości 15 (zaokrągli w górę) oraz 14 (zaokrągli w górę do 15 i następnie w dół do nabliższej parzystej - 14)

 

            System.Console.ReadKey();

        }

    }

Zgłoś jeśli naruszono regulamin