Wydział Elektroniki Kierunek: AiR

18
Wydział Elektroniki Kierunek: AiR Zaawansowane metody programowania Wykład 2

description

Wydział Elektroniki Kierunek: AiR. Zaawansowane metody programowania Wykład 2. Zaawansowane metody programowania C# - Typy i zmienne. Typy zmiennych w C#: wartościowy ( value type, typ bezpośredni) referencyjny ( reference type, odwołania do danych będących obiektami) - PowerPoint PPT Presentation

Transcript of Wydział Elektroniki Kierunek: AiR

Page 1: Wydział Elektroniki Kierunek: AiR

Wydział ElektronikiKierunek: AiR

Zaawansowane metody programowania

Wykład 2

Page 2: Wydział Elektroniki Kierunek: AiR

Zaawansowane metody programowaniaC# - Typy i zmienne

• Typy zmiennych w C#:– wartościowy (value type, typ bezpośredni)– referencyjny (reference type, odwołania do danych będących

obiektami)• W przypadku typów referencyjnych dwie zmienne mogą

odwoływać się do tego samego obiektu.• Wniosek: operacje przeprowadzane na jednej zmiennej mają

wpływ na obiekt, do którego odwołuje się inna zmienna.• W przypadku typów wartościowych każda zmienna

przechowuje swoją własną kopię danych i nie może się zdarzyć, że operacje wykonywane na jednej zmiennej oddziałują na inną.

• Wymaga to zmiany przyzwyczajeń z języka C++.• Typy wartościowe dzielą się na typy proste, typy

wyliczeniowe, struktury i typy dopuszczające wartość pustą (ang. nullable types).

• Typy referencyjne dzielą się na klasy, interfejsy, tablice i delegacje.

Page 3: Wydział Elektroniki Kierunek: AiR

Język C#Podstawowe informacje na temat typów

• Typy wartościowe– 'Typy proste

• Całkowite ze znakiem: sbyte, short, int, long• Całkowite bez znaku: byte, ushort, uint, ulong• Znaki Unicode: char• Zmiennoprzecinkowe IEEE: float, double• Dziesiętne wysokiej precyzji: decimal• Boole'owskie: bool

– Typy wyliczeniowe: Definiowane przez użytkownika w postaci enum E {...}

– Struktury: Definiowane przez użytkownika w postaci struct S {...}– Typy dopuszczające wartość pustą: Rozszerzenia wszystkich innych

typów wartościowych o wartość null• Typy referencyjne

– Klasy• Ostateczna klasa bazowa wszystkich innych typów: object• Łańcuchy Unicode: string• Definiowane przez użytkownika w postaci class C {...}

– Interfejsy: Definiowane przez użytkownika w postaci interface I {... }

– Tablice: Jedno- i wielowymiarowe, na przykład int [] i int [,]– Delegacje: Definiowane przez użytkownika, np. delegate int D (...)

Page 4: Wydział Elektroniki Kierunek: AiR

Język C#Typy liczbowe

Kategoria Bity

Typ Zakres i precyzja

Całkowite ze znakiem 8 sbyte -128 127

16 short -32 768 32 767

32 int -2 147 483 648 2 147 483 647

64 long -9 223 372 036 854 775 808 9 223 372 036 854 775 807

Całkowite bez znaku 8 byte 0 255

16 ushort 0 65 535

32 uint 0 4 294 967 295

64 ulong 0 18 446 744 073 709 551 615

Zmiennoprzecinkowe 32 float 1,510-45 3,41038, precyzja: 7

64 double 510-324 1,710308, precyzja: 15

Dziesiętne 128 decimal 10-28 7,91028, precyzja: 28

Page 5: Wydział Elektroniki Kierunek: AiR

Język C#Podstawowe informacje o typach, c.d.

• W celu utworzenia nowych typów stosuje się deklaracje typów (type declarations). Deklaracja typu określa jego nazwę oraz składowe.

• Pięć kategorii typów języka C# może być definiowanych przez użytkownika: – klasy (R – referencyjny), – struktury (W – wartościowy), – interfejsy (R), – typy wyliczeniowe (W) i – delegacje (R).

• Klasy umożliwiają pojedyncze dziedziczenie i polimorfizm• Wybór pojedynczego zamiast wielokrotnego dziedziczenia klas

eliminuje mnóstwo niebezpieczeństw, które występują w językach obsługujących dziedziczenie po wielu klasach bazowych.

• Struktury w przeciwieństwie do klas są typami wartościowymi i nie wymagają alokacji na stercie.

• Struktury nie umożliwiają dziedziczenia określonego przez użytkownika, wszystkie domyślnie dziedziczą po typie object.

Page 6: Wydział Elektroniki Kierunek: AiR

Język C#Podstawowe informacje o typach, c.d. 2

• Interfejs definiuje nazwany zbiór publicznych funkcji składowych. • Klasa lub struktura implementująca interfejs musi zapewnić

implementacje wszystkich tych funkcji. • Interfejs może dziedziczyć po wielu interfejsach bazowych, a klasa

lub struktura może implementować wiele różnych interfejsów.• Typ wyliczeniowy jest osobnym typem korzystającym z nazwanych

stałych. Każdy typ wyliczeniowy ma swój typ podstawowy, którym musi być jeden z ośmiu typów całkowitych.

• Zbiór wartości typu wyliczeniowego jest taki sam jak zbiór wartości typu leżącego u jego podstaw.

• Delegacja reprezentuje odwołania do metod mających określoną listę parametrów i konkretny typ wartości zwracanej.

• Delegacje umożliwiają traktowanie metod jakby były jednostkami, które można przypisywać do zmiennych i przesyłać w postaci parametrów. Delegacje są podobne do wskaźników do funkcji.

• Delegacje są mechanizmem obiektowym i zapewniają bezpieczeństwo typów.

Page 7: Wydział Elektroniki Kierunek: AiR

Język C#Tablice i typy dopuszczające wartość

pustą• Język C# oferuje możliwość korzystania z tablic jedno-

i wielowymiarowych dowolnego typu. • W przeciwieństwie do typów wymienionych wcześniej użycie

tablic nie wymusza ich wcześniejszego zadeklarowania. • Tablice są tworzone poprzez podanie nazwy typu oraz

nawiasów kwadratowych. Na przykład:– int [] - jednowymiarowa tablica wartości int, – int [,] - dwuwymiarowa tablica int, – int [][] - jednowymiarowa tablica składającą się z

jednowymiarowych tablic elementów typu int.• Typy dopuszczające wartość pustą również nie muszą być

deklarowane, aby mogły być użyte. • Dla każdego typu niedopuszczającego wartości pustej T

istnieje odpowiedni typ dopuszczający tę wartość T?, który zezwala na stosowanie dodatkowej wartości null.

• Na przykład: typ int? to typ, którego zmienne mogą przechowywać 32-bitowe wartości całkowite lub wartość null.

Page 8: Wydział Elektroniki Kierunek: AiR

Język C#Wyrażenia i operatory

• Wyrażenia (expressions) składają się z operandów (argumentów) i operatorów.

• Operatory wyrażenia określają, jakie operacje mają być przeprowadzane w stosunku do operandów.

• Przykładami operatorów mogą być +, -, *, / oraz new. • Przykładami operandów są literały, pola, zmienne lokalne i

wyrażenia.• Gdy wyrażenie zawiera wiele operatorów, ich priorytety

określają kolejność wykonywania poszczególnych działań. • Większość operatorów może być przeładowywana

(overloaded). • Przeładowywanie operatorów umożliwia definiowanie przez

użytkownika implementacji operatorów w przypadku działań przeprowadzanych w sytuacji, gdy jeden z operandów lub obydwa operandy są obiektami zdefiniowanej przez użytkownika klasy lub struktury.

• Następne slajdy: operatory języka C# ułożone w kolejności od najwyższego do najniższego priorytetu.

Page 9: Wydział Elektroniki Kierunek: AiR

Język C#Operatory - Kategoria: Podstawowe

Wyrażenie Opis

x.M Dostęp do składowej

x (…) Wywołanie metody i delegacji

x [...] Dostęp do tablicy i indeksatora

x++ Postinkrementacja

x-- Postdekrementacja

new T (...) Tworzenie obiektu i delegacji

new T(...) {...} Tworzenie obiektu z inicjalizatorem

new {...} Inicjalizator obiektu anonimowego

new T [...] Tworzenie tablicy

typeof (T) Uzyskiwanie obiektu System.Type dla T

checked (x) Obliczanie wyrażenia w kontekście sprawdzonym

unchecked (x) Obliczanie wyrażenia w kontekście niesprawdzonym

default (T) Uzyskiwanie standardowej wartości typu T

delegate {...} Funkcja anonimowa (metoda anonimowa)

Page 10: Wydział Elektroniki Kierunek: AiR

Język C#Operatory – c.d. 1

Wyrażenie Opis

Kategoria: Jednoargumentowe

+x Identyczność

-x Negacja

!x Negacja logiczna

~x Negacja bitowa

++x Preinkrementacja

--x Predekrementacja

(T)x Jawna konwersja x na typ T

Kategoria: Multiplikatywne

x*y Mnożenie

x/y Dzielenie

X%y Reszta z dzielenia

Page 11: Wydział Elektroniki Kierunek: AiR

Język C#Operatory – c.d. 2

Wyrażenie Opis

Kategoria: Addytywne

x + y Dodawanie, konkatenacja łańcuchów, kombinacja delegacji

x - y Odejmowanie, usuwanie delegacji

Kategoria: Przesunięcie

x << y Przesunięcie w lewo

x >> y Przesunięcie w prawo

Kategoria: Operatory relacji i testowania typów

x < y Mniejszy niż

x > y Większy niż

x <= y Mniejszy niż lub równy

x >= y Większy niż lub równy

x is T Zwraca wartość true, jeśli x jest typu T, w innym przypadku false

x as T Zwraca wartość x rzutowaną na T lub null, jeśli x nie jest typu T

Page 12: Wydział Elektroniki Kierunek: AiR

Język C#Operatory – c.d. 3

Wyrażenie Opis

Kategoria: Równości

x == y Równość

x != y Nierówność

Kategoria: Logiczne AND

x & y Całkowite bitowe AND, boole'owskie logiczne AND

Kategoria: Logiczne XOR

x ^ y Całkowite bitowe XOR, boole'owskie logiczne XOR

Kategoria: Logiczne OR

x | y Całkowite bitowe OR, boole'owskie logiczne OR

Kategoria: Warunkowe AND

x && y Obliczanie y tylko, jeśli x ma wartość true

Kategoria: Warunkowe OR

x || y Obliczanie y tylko, jeśli x ma wartość false

Page 13: Wydział Elektroniki Kierunek: AiR

Język C#Operatory – koniec

Wyrażenie Opis

Kategoria: Łączenie wartości null

x ?? y Wynikiem jest y, jeśli x ma wartość null, w innym przypadku x

Kategoria: Warunkowe

x ? y : z Wynikiem jest y, jeśli x ma wartość true, lub z, jeżeli x ma wartość false

Kategoria: Przypisanie lub funkcja anonimowa

x = y Przypisanie

x op= y Złożone przypisanie. Obsługiwane operatory: *=, /=, %=, +=, -=, <<=, >>=, &=, ^= oraz |=

(T x) => y Funkcja anonimowa (wyrażenie lambda)

Page 14: Wydział Elektroniki Kierunek: AiR

Język C#Instrukcje

• Działania wykonywane przez program są zapisywane w postaci instrukcji (statements). Język C# umożliwia stosowanie kilku rodzajów instrukcji, z których część jest definiowana jako instrukcje osadzone.

• Blok (block) umożliwia zapisanie wielu instrukcji w kontekście, w którym dopuszczalne jest zastosowanie pojedynczej instrukcji. Blok zawiera listę instrukcji umieszczonych pomiędzy nawiasami klamrowymi { i }.

• Instrukcje deklaracji (declaration statements) są wykorzystywane w celu zadeklarowania zmiennych lokalnych i stałych.

• Instrukcje wyrażeń (expression statements) są używane do obliczania wartości wyrażeń.

• Instrukcje selekcji (selection statements) są wykorzystywane do wybierania jednej z wielu możliwych instrukcji do wykonania

na podstawie wartości pewnego wyrażenia. Do grupy tej należą instrukcje if oraz switch.

Page 15: Wydział Elektroniki Kierunek: AiR

Język C#Instrukcje, c.d.

• Instrukcje iteracji (iteration statements) są używane w celu wielokrotnego wykonywania zagnieżdżonej instrukcji. Do instrukcji tego typu należą while, do, for oraz foreach.

• Instrukcje skoków (jump statements) są stosowane do przenoszenia sterowania. Do tej grupy należą instrukcje break, continue, goto, throw, return i yield.

• Instrukcja try...catch jest używana do przechwytywania wyjątków, które pojawiają się podczas wykonywania bloku. Instrukcja try...finally jest wykorzystywana do określania kodu zakończenia, który jest wykonywany zawsze, niezależnie od tego, czy wyjątek wystąpi, czy też nie.

• Instrukcje checked i unchecked są stosowane w celu kontrolowania kontekstu sprawdzania przepełnienia dla operacji arytmetycznych typu całkowitego i konwersji.

• Instrukcja lock jest używana do uzyskiwania blokady wyłączania wzajemnego dla danego obiektu, wykonania instrukcji, a następnie zwolnienia blokady.

• Instrukcja using jest stosowana w celu uzyskania dostępu do zasobu, wykonania instrukcji, a następnie zwolnienia tego zasobu.

Page 16: Wydział Elektroniki Kierunek: AiR

Instrukcje języka C#Przykłady użycia

Deklaracja zmiennej lokalnej

static void Main() {

int a;

int b=2, c=3;

a= 1;

Console.WriteLine(a + b + c);

}

Deklaracja stałej lokalnej

static void Main() {

const float pi = 3.1415927f;

const int r = 25;

Console.WriteLine(pi *r * r);

}

Instrukcja wyrażenia

static void Main() {

int i;

i = 123; // Instrukcja wyrażenia console.WriteLine(i);// Ins. wyr. i++; // Instrukcja wyrażenia Console.WriteLine(i);// Ins. wyr.}

Instrukcja if

static void Main(string[] args){

if (args.Length == 0)

Console.WriteLine("Brak argumentów");

else

Console.WriteLine("Jeden argument lub więcej argumentów");

}

Page 17: Wydział Elektroniki Kierunek: AiR

Instrukcje języka C#Przykłady użycia c.d.1

Instrukcja for

static void Main(string[] args){

int n = args.Length;

switch (n) {

case 0:

Console.WriteLine("Brak argumentów");

break;

case 1:

Console.WriteLine("Jeden argument");

break;

default:

Console.WriteLine("{0} argumentów", n);

break;

}}}

Instrukcja while

static void Main(string[] args){

int i = 0;

while (i < args.Length) {

Console.WriteLine(args[i]);

i++;

}}

Instrukcja do

static void Main() { string s;

do

{

s = Console.ReadLine();

Console.WriteLine(s);

} while (s.Length != 0);

}

Page 18: Wydział Elektroniki Kierunek: AiR

Instrukcje języka C#Przykłady użycia c.d.2

Instrukcja for

static void Main(string[] args) {

for(int i=0;i<args.Length;i++)

Console.WriteLine(args[i]);

}

Instrukcje break i continue

string SS;

while (true){

Console.Write("Podaj imię: ");

SS=Console.ReadLine();

if(SS.StartsWith("E")) // Metoda klasy String continue;

if(SS.Contains("na")) // Metoda klasy String break;

Console.WriteLine("Niech żyje {0}!", SS);

}

Instrukcja foreach

static void Main(string[] args) {

foreach (string s in args) {

Console.WriteLine(s);

}