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
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;
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)
4. Rodzaje widoczności w C#:
- Public – zmienna jest widoczna dla wszystkich innych klas, oraz wszystkie inne klasy mogą ją dowolnie modyfikować.
- Private – zmienna jest widoczna tylko dla metod obiektu danej klasy.
- Protected – zmienna jest widoczna dla obiektów danej klasy, oraz obiektów klas po niej dziedziczących.
- Internal – zmienna jest widoczna tylko wewnątrz przestrzeni nazw w której została utworzona
- Protected internal – zmienna jest widoczna dla metod klasy w której została zadeklarowana oraz metod klas pochodnych, ale tylko wewnątrz pakietu.
- Definicja zmiennej bez poprzedzenia jej modyfikatorem dostępu jest równoważna definicji private
- Aby dostać się do zmiennej zadeklarowanej w innej przestrzeni nazw należy napisać PrzestrzenNazw.NazwaObiektu.NazwaZmiennej lub zadekalrowac na początku używanie danej przestrzeni nazw poprzez using, np. using PrzestrzenNazw i następnie traktować ją jak zmienną obiektu z przestrzeni, w której aktualnie się znajdujemy.
jarlfenrir