• Nie Znaleziono Wyników

Jeszcze o klasach i obiektach-

N/A
N/A
Protected

Academic year: 2021

Share "Jeszcze o klasach i obiektach-"

Copied!
28
0
0

Pełen tekst

(1)

Wyższa Szkoła Techniczno – Ekonomiczna w Świdnicy

2016-11-17 Metody programowania – 1 W5 1

Metody programowania – 1 dr inż. Tadeusz Jeleniewski

Jeszcze o klasach i obiektach - Modyfikatory parametrów w metodach - Parametry linii poleceń

- Interfejsy

- Klasy uniwersalne - Indeksatory

- Delegaty

(2)

Modyfikatory parametrów w metodach

Parametry metod mogą, oprócz atrybutu typu posiadać modyfikatory.

Rozważmy przykład prostej metody:

public static int Dodaj(int x, int y) {

int wynik = x + y;

x = 1999;

y = 2834;

return wynik;

}

Domyślnie parametry są przekazywane do metod przez wartość.

W powyższym przykładzie użytkownik wywołujący metodę Dodaj nie zobaczy

zmienionych wartości zmiennych wstawionych w momencie wywoływania za x i y.

W celu umożliwienia odzyskania zmienionych wartości parametrów metod poza ich zasięgiem w C# znalazły się pewne słowa kluczowe pełniące rolę modyfikatorów.

Pokazano je w tabeli 5.1.

(3)

Wyższa Szkoła Techniczno – Ekonomiczna w Świdnicy

2016-11-17 Metody programowania – 1 W5 3

Metody programowania – 1 dr inż. Tadeusz Jeleniewski

Przykład użycia słowa kluczowego out

public static void dodaj(int x, int y, out int w) {

w = x + y;

}

Wywołanie tej metody wymaga również użycia słowa kluczowego out przed argumentem, np.

dodaj(32, 16, out wynik);

Modyfikator parametru Opis

brak modyfikatora Parametr wejściowy przekazywany przez wartość

out Parametrom wejściowym wywołana metoda przypisuje wartości

ref Wartość jest nadawana parametrowi przez tego, kto wywołał metodę, podczas działania metody wartość ta może być zmieniona.

params Umożliwia wysyłanie zmiennej liczby parametrów jako jednego parametru.

Metoda może mieć tylko jeden taki modyfikator i musi to być ostatni parametr metody.

Tabela 5.1. Modyfikatory parametrów metod

(4)

Parametry referencyjne (poprzedzane słowem kluczowym ref) stosuje się jeżeli metoda ma wykonać działanie, które zmieni wartości parametrów.

Różnice pomiędzy parametrami wyjściowymi a referencyjnymi :

parametrów wyjściowych nie trzeba inicjować przed ich przekazaniem do metody wywoływanej

parametry przekazywane przez referencję należy bezwzględnie zainicjować przed wysłaniem do metody wywoływanej. Przekazuje się w ten sposób wskaźnik na istniejący obiekt określonego typu.

Modyfikator params umożliwia przekazanie zmiennej liczby parametrów jako

jednego parametru.

(5)

Wyższa Szkoła Techniczno – Ekonomiczna w Świdnicy

2016-11-17 Metody programowania – 1 W5 5

Metody programowania – 1 dr inż. Tadeusz Jeleniewski

Przykład użycia słowa kluczowego params:

public void TablicaLiczb(string msg, params int[] lista) {

Console.WriteLine(msg);

for (int i = 0; i < lista.Length; i++) Console.WriteLine(lista[i]);

}

a powyższą metodę można wywołać na wiele różnych sposobów, np.:

int[] tablica = new int[3]{1, 2, 3};

lub

m.TablicaLiczb("Tutaj jest tablica liczb", tablica);

lub

m.TablicaLiczb("I jeszcze więcej", 54, 189, -11, 333, 27);

(6)
(7)

Wyższa Szkoła Techniczno – Ekonomiczna w Świdnicy

2016-11-17 Metody programowania – 1 W5 7

Metody programowania – 1 dr inż. Tadeusz Jeleniewski

(8)

Parametry linii poleceń

Parametry linii poleceń są przechowywane w tablicy łańcuchów umieszczonej w sygnaturze metody Main.

Sposób ich odzyskiwania pokazano na listingu 5.2.

Innym, alternatywnym sposobem jest użycie statycznej metody GetCommandLineArgs z klasy System.Environment.

Zwraca ona tablicę łańcuchów znaków, w której pierwszym elementem jest pełna

ścieżka dostępu do pliku zawierającego aplikację, a kolejnymi elementami są parametry

pobrane z linii poleceń.

(9)

Wyższa Szkoła Techniczno – Ekonomiczna w Świdnicy

2016-11-17 Metody programowania – 1 W5 9

Metody programowania – 1 dr inż. Tadeusz Jeleniewski

(10)
(11)

Wyższa Szkoła Techniczno – Ekonomiczna w Świdnicy

2016-11-17 Metody programowania – 1 W5 11

Metody programowania – 1 dr inż. Tadeusz Jeleniewski

(12)

Interfejsy

Interfejs jest pewnego rodzaju kontraktem, który gwarantuje, że klasa lub struktura obsługuje określone zachowania.

Kiedy definiuje się interfejs, można definiować metody, właściwości, mechanizmy indeksujące lub zdarzenia, które klasa obsługująca dany interfejs musi udostępniać.

Istnieje pewne dość odległe podobieństwo interfejsów do klas abstrakcyjnych. Różnica pomiędzy nimi polega jednak na tym, że klasy abstrakcyjne służą jako klasy bazowe rodziny klas pochodnych, a interfejsy są przeznaczone do włączania w dowolne drzewa dziedziczenia.

Składnia definicji interfejsu ma postać ogólną:

[atrybuty][modyfikatory dostępu] interface nazwa_interfejsu [:lista bazowa]

{ ciało interfejsu }

Tradycyjnie nazwa interfejsu rozpoczyna się od wielkiej litery I.

(13)

Wyższa Szkoła Techniczno – Ekonomiczna w Świdnicy

2016-11-17 Metody programowania – 1 W5 13

Metody programowania – 1 dr inż. Tadeusz Jeleniewski

W przykładzie 5.3 zdefiniowano interfejs IShapeFunction, który zawiera sygnatury dwóch metod GetArea i ShowMe.

Klasy Circle i Rectangle "dziedziczące" ten interfejs muszą zawierać definicje

tych dwóch metod, oczywiście różne w obydwu przypadkach.

(14)
(15)

Wyższa Szkoła Techniczno – Ekonomiczna w Świdnicy

2016-11-17 Metody programowania – 1 W5 15

Metody programowania – 1 dr inż. Tadeusz Jeleniewski

(16)

Klasy uniwersalne

Deklaracja klasy może określać zbiór parametrów, których listę nazw umieszcza się w nawiasach

"trójkątnych" < >bezpośrednio po nazwie klasy.

Parametry te można później wykorzystać w ciele definicji klasy dla zdefiniowania składowych

[1]

Klasa zadeklarowana w sposób pokazany w przykładzie 5.4 nosi nazwę klasy ogólnej (klasy generycznej lub klasy uniwersalnej). Charakter ogólny mogą mieć również struktury interfejsy i delegaty.

[1] Hejlsberg A., Torgersen M., Wiltamuth S., Golde P.: Język C#. Programowanie. Wyd. Helion 2010

(17)

Wyższa Szkoła Techniczno – Ekonomiczna w Świdnicy

2016-11-17 Metody programowania – 1 W5 17

Metody programowania – 1 dr inż. Tadeusz Jeleniewski

(18)

Indeksatory

Mechanizm indeksowania to konstrukcja języka C#, która umożliwia dostęp do kolekcji klasy za pomocą zwykłej składni używanej w tablicach [ ]. Jest to pewnego rodzaju właściwość, zawiera akcesory get oraz set które pozwalają określić działanie.

Właściwość mechanizmu indeksowania wewnątrz klasy deklaruje się za pomocą składni:

typ this [typ argumentu] {get; set;}

Zwracany typ określa typ obiektu zwracanego przez mechanizm indeksowania, a typ argumentu określa rodzaj argumentów używanych jako indeks kolekcji zawierającej obiekty docelowe.

Jako typu wartości indeksu zwykle używa się liczb całkowitych, ale można użyć także innych typów, nawet łańcuchów znaków. Akcesory get i set określają sposób w jaki obiekt jest pobierany z kolekcji i jak można zmieniać jego wartość.

Sposób tworzenia indeksatorów i ich użycia pokazuje przykład 5.5.

(19)

Wyższa Szkoła Techniczno – Ekonomiczna w Świdnicy

2016-11-17 Metody programowania – 1 W5 19

Metody programowania – 1 dr inż. Tadeusz Jeleniewski

(20)
(21)

Wyższa Szkoła Techniczno – Ekonomiczna w Świdnicy

2016-11-17 Metody programowania – 1 W5 21

Metody programowania – 1 dr inż. Tadeusz Jeleniewski

W przykładzie 5.6 pokazano sposób wykorzystania klasy uniwersalnej, jej obiektów oraz mechanizmu indeksatora.

(22)
(23)

Wyższa Szkoła Techniczno – Ekonomiczna w Świdnicy

2016-11-17 Metody programowania – 1 W5 23

Metody programowania – 1 dr inż. Tadeusz Jeleniewski

(24)
(25)

Wyższa Szkoła Techniczno – Ekonomiczna w Świdnicy

2016-11-17 Metody programowania – 1 W5 25

Metody programowania – 1 dr inż. Tadeusz Jeleniewski

Delegaty

Analogia do wskaźników na funkcje w C++.

W przypadku zastosowania metod wirtualnych kompilator wstrzymuje podjęcie decyzji do jakiej klasy przypisać daną metodę.

Przypisanie to następuje dopiero w czasie działania programu – jest to zjawisko tzw. późnego wiązania.

Często decyzja o tym, jaką metodę wykonać zostaje podjęta w trakcie działania aplikacji, np. na podstawie warunków jakie spełniają przetwarzane dane.

W takim przypadku do wyboru odpowiedniej metody można zastosować instrukcję if lub switch.

Bardziej czytelnym sposobem w przypadku złożonych aplikacji jest użycie delegatów.

W dużym uproszczeniu – delegaty przechowują referencję (adres w pamięci) do określonych metod. Pozwalają zatem wykonać kod odpowiedniej metody.

Delegaty są w rzeczywistości nowymi typami danych. Można je zagnieżdżać w klasie lub deklarować poza nią. Przykład:

public delegate int Dummy(int x);

Delegaty nie posiadają implementacji, a jedynie sygnaturę (nagłówek) zakończoną znakiem średnika.

(26)
(27)

Wyższa Szkoła Techniczno – Ekonomiczna w Świdnicy

2016-11-17 Metody programowania – 1 W5 27

Metody programowania – 1 dr inż. Tadeusz Jeleniewski

Do łączenia delegatów wykorzystuje się dwuargumentowe operatory + oraz +=

Łączenie delegatów pokazuje przykład 5.8:

(28)

Cytaty

Powiązane dokumenty

Metoda klasowa: Mają dostęp do całej ekstensji, a zatem do wszystkich obiektów należących do danej klasy. Mogą na nich operować, ale nie muszą: może

Jeśli chcesz śledzić swoje postępy kliknij w przycisk Zaloguj się, a następnie Załóż konto.. Oczywiście zapytaj Rodziców, czy wyrażają na

Adrianna Klak , lat 8 – Szkoła Podstawowa nr 1 Lidzbark Warmiński za wiersz „Wirtualny świat bajek”. w kategorii szkoły podstawowe klasy 5

Na sygnał przebiega odcinek 10 metrów, dotyka ręką parkietu i wraca do linii startu, za którą również dotyka parkietu.. Liczy się czas

Kolejnego dnia, przemierzając tę samą drogę, Piotr tankował dwa razy dłużej, przez co całkowity czas jego podróży wyniósł jedną godzinę3. Ile czasu zajęłaby

Zdrowy krasnoludek zarazi się matemafilią, jeśli co najmniej dwóch jego sąsiadów jest na nią chorych (sąsiadami są krasnoludki, które zajmują pola o sąsiednim boku)..

a) Znajdź dwie liczby, w których żadna cyfra się nie powtarza, a suma tych liczb wynosi 1000. Czy jest jedna para takich liczb?. b) Samochód całkowicie wypełniony piaskiem ważył

c) Znajdź takie trzy liczby, by ich suma była równa 975 oraz aby pierwsza liczba była 3 razy mniejsza od drugiej i trzy razy większa od trzeciej.. Zad. Jaką miarę mają