C Sharp/Programowanie obiektowe
Wstęp
edytujPodstawą języka C# jest możliwość tworzenia nowych złożonych typów przez programistę. Jest to podstawowa cecha języków obiektowych. Programista ma możliwość zdefiniowania nowych typów reprezentujących rzeczywisty problem. Typ taki posiada zdefiniowane właściwości i metody, które odzwierciedlają rzeczywiste cechy obiektu/problemu. Na przykład dla obiektu samochód właściwością może być kolor, natomiast metodą uruchomSilnik(). W języku C# nowe typy tworzy się przez deklaracje i definicje klasy.
Klasa
edytujTworząc nową klasę należy ją wpierw zadeklarować używając słowa kluczowego class. Pełna składnia deklaracji wygląda następująco:
[atrybuty] [modyfikatory dostępu] class nazwaNowejKlasy [klasa bazowa] [, interfejsy]]
W platformie .NET każda klasa dziedziczy po wspólnej klasie bazowej System.Object. Dziedziczenie to jest domyślne i ma charakter niejawny, zatem nie wymaga żadnych dodatkowych zapisów.
Następnie należy zdefiniować jej metody i pola.
Stałe : Stałe służą do przechowywania zmiennych reprezentujących stałą wartość. Do ich deklaracji wykorzystujemy słowo kluczowe const.
using System;
class Klasa
{
public const int x = 5;
public const string y = "string";
}
class Program
{
static void Main()
{
//Prawidłowe odwołanie się do stałej
Console.WriteLine(Klasa.y);
Klasa c = new Klasa();
//Poniższa instrukcja spowoduje błąd
//Dostęp do stałej za pośrednictwem obiektu jest niemożliwy
Console.WriteLine(c.y);
}
}
Powyższy przykład pokazuje sposób deklaracji stałych wewnątrz klasy. Słowo kluczowe const może posłużyć do deklaracji wielu stałych wewnątrz jednego wyrażenia. Deklarowana stała musi być typu prostego np. integer lub string. Należy pamiętać również że dostęp do stałej za pośrednictwem obiektu spowoduje błąd.
Pola : Podobnie jak stałe służą do przechowywania danych wewnątrz klasy. Pole różni się od stałej tym iż można jego wartość zmieniać lub ustalać w trakcie wykonywania programu. Ponadto pola w przeciwieństwie do stałej nie muszą być typu prostego. Pola powinny być deklarowane z atrybutem private aby zapobiec możliwości zamiany ich wartości z zewnątrz. Jeżeli podczas deklaracji pola nie zostanie mu przypisana wartość otrzyma one wartość domyślna dla swojego typu.
Właściwości : Umożliwiają kontrolowany dostęp do wartości zapisanych wewnątrz klasy. Składnia :
[atrybut] <modyfikator> <typ danych> <nazwa>
{
[modyfikator] get
{
......
return(wartość właściwości)
}
[modyfikator]set
{
//kod zapisujący do pola wartość reprezentowaną przez zmienną value
}
}
Blok get wykonywane jest podczas żądania wartości właściwości. Natomiast blok set podczas próby zapisania nowej wartości.
Metody
edytujMetody to funkcje zawarte w klasie służące do wykonywania operacji na obiektach. Przykładem takiej metody może byc uruchomSilnik() dla obiektu samochód lub zaszczekaj() dla obiektu pies. Metoda jest identyfikowana przez swoją nazwę, listę typów oraz parametrów składające się na sygnaturę. Sygnatura jest unikatowa wewnątrz klasy. Wywołujemy je: obiekt.metoda(parametry)
Przykład :
public
class Klasa
{
int x;
int y;
void Show()
{
Console.WriteLine("X:"+this.x+"Y:"+this.y);
}
}
Konstruktor
edytujJest to specjalna metoda wywoływana przy tworzeniu nowego obiektu klasy. Ta metoda ma taką samą nazwę jak nazwa klasy.
Dodajmy do naszej klasy konstruktor:
public
class Klasa
{
int x;
int y;
public Klasa(int x, int y)
{
this.x = x;
this.y = y;
}
void Show()
{
Console.WriteLine("X:"+this.x+"Y:"+this.y);
}
}
Dziedziczenie i przeciążanie metod
edytujDziedzicznie to mechanizm pozwalający na "dziedziczenie" pól i metod jednej klasy przez drugą. Klasa może jawnie dziedziczyć tylko po jednej klasie (każda dodatkowo niejawnie dziedziczy po klasie Object). Klasa dziedziczona jest nazywana klasą nadrzędną, a ta która dziedziczy klasą podrzędną. Przeciążanie metod pozwala na umieszczenie w kodzie dwóch metod o tej samej nazwie, ale różnych parametrach. Teraz praktyka:
public
class Klasa
{
int x;
int y;
public Klasa(int x,int y)
{
this.x = x;
this.y = y;
}
void Show()
{
Console.WriteLine("X:"+this.x+"Y:"+this.y);
}
}
class Klasa2: Klasa //Klasa2 dziedziczy po Klasa
{
int x, y, z;
public Klasa(int x,int y,int z)
{
this.x = x;
this.y = y;
this.z = z;
}
void Show()
{
Console.WriteLine("X:"+this.x+"Y:"+this.y+"Z"+this.z);
}
}
Obiekt
edytujObiekt jest elementem typu nazwa_klasy. Obiekty należą do typów referencyjnych. Nowy obiekt naszej klasy tworzymy:
Klasa obiekt;
Należy jeszcze wywołać konstruktor:
obiekt = new Klasa();
Można to połączyć w jeden zapis:
Klasa obiekt = new Klasa();