background image

Zaawansowane Systemy 

Programowania Grafiki

Wykład 2

background image

Platforma .NET

Platforma programistyczna

środowisko uruchomieniowe:  Common Language 

Runtime (CLR)

biblioteka klas: Base Class Library (BCL)

operacje na plikach, wyświetlanie grafiki, interakcja z 

bazami danych, manipulacja XML, kryptografia, algorytmy 

numeryczne, komunikacja sieciowa

Niezwiązana z konkretnym językiem 

programowania

Automatyczne zarządzanie

kodem programu

pamięcią

zabezpieczeniami i wyjątkami

Najnowsza wersja: .NET Framework 4

background image

Common Language Runtime

środowisko uruchomieniowe platformy .NET

„maszyna wirtualna aplikacji”

kompiluje i wykonuje kod zapisany w języku 

pośrednim (Common Intermediate Language)

wbudowane mechanizmy 

zarządzania pamięcią i wątkami

obsługi wyjątków

zwalniania pamięci, tzw. „garbage collection”

kontroli bezpieczeństwa wykonywanych aplikacji

niezależna od maszyny i systemu operacyjnego 

(w przeciwieństwie do Win32 API)

Windows, Unix, Macintosh

background image

CLR

Kompilacja

Uruchomieni
e

background image

Just-In-Time

Kompilacja w locie, bezpośrednio przed wykonaniem 

danego fragmentu kodu

kod źródłowy → kod bajtowy (pośredni)

program jest rozpowszechniany w postaci kodu pośredniego

na maszynie uruchamiającej program: 

kod bajtowy → kod maszynowy

Zalety

tradycyjna maszyna wirtualna interpretuje kod bajtowy, JIT 

jest wydajniejszy

kompilacja może być zoptymalizowana pod system 

docelowy

system może zbierać statystyki n.t. szybkości działania i 

dodatkowo optymalizować kod

jeżeli jest taka potrzeba, to można skompilować kod 

źródłowy do kodu maszynowego

background image

Common Language Infrastructure 

Otwarta specyfikacja obejmująca:

Common Type System

Metadane (informacja o strukturze programu)

Common Language Specification 

Virtual Execution System (VES)

Każdy język, który spełni standard ECMA-335 

może generować kod rozumiany przez CLR

VB.NET, C#, J#, C++/CLI, JScript, Perl, Python, 

Fortran, Cobol, #Smalltalk, Delphi.NET, 

DotLisp, Ruby.NET

CLR jest implementacją standardu CLI 

autorstwa Microsoft

background image

Virtual Execution System

Uruchamia (JIT), linkuje i ładuje pliki napisane 

dla CLI

Udostępnia usługi takie jak:

Garbage collection

Code Access Secuirity

co mój kod może robić

kto może wołać mój kod 

Wsparcie dla debugowania

Współpraca kodu zarządzanego i nie zarządzanego

background image

Język C# w 30 minut

Język 

obiektowy

 wywodzący się z C++ i Javy

brak bezpośredniego dostępu do pamięci 

(safe/unsafe code)

automatyczne zarządzanie pamięcią, garbage 

collection

brak zmiennych i funkcji globalnych

zmienne lokalne nie mogą się przesłaniać

bool jest typem ścisłym

C# nie wspiera wielodziedziczności

wspiera mechanizm refleksji

Typy parametryzowane: Generics (polimorfizm 

parametryczny)

background image

Typy

Bezpośrednie: bool, char, sbyte, byte, 

short, ushort, int, uint, long, ulong, float, 

double, struct, enum, decimal

umieszczane na stosie

bezpośrednio zawierają dane

każda zmienna ma swoją kopię

Referencyjne: obiekty

umieszczane na stercie

zmienna zawiera referencję do danych

wiele zmiennych może odnosić się do jednego 

obiektu – operacje na jednej zmiennej mogą mieć 

wpływ na drugą

background image

Enumeracja

    

class

 

Przyklad 

    { 

        

enum

 

DniTygodnia

 { Poniedzialek, Wtorek, Sroda }; 

        

DniTygodnia

 dzien; 

        Przyklad() 

        { 

            dzien = 

DniTygodnia

.Poniedzialek; 

        } 

    }

 

background image

Konwersja typów

C# wymaga zgodności typów

konieczność jawnej konwersji jeżeli może zajść 
utrata informacji

klasa Convert

int 

x = 

Convert

.ToInt32(123.456);

            

Object

 o; 

            

//... 

            

// if (!o) - źle 

            

if

 (o==

null

// dobrze 

            { 

                

//... 

            } 

background image

Tablice

jednowymiarowe

int[] tab = new int[10]; tab.Length;

int[] tab = {1, 2, 3, 4, 5};

wielowymiarowe

int[,] tab2d = new int[10,3];

tab.Length; tab.GetLength(1);

nieregularne

int[][] jagged = new int[10][];

jagged[0] = new int[5];

jagged[1] = new int[100];

background image

Instrukcje warunkowe

if (wyrażenie) { instrukcje; } else 
{ instrukcje; }

switch/case

            

switch

 (ch) 

            { 

                

case

 

'a'

                    

break

                

case

 

'b'

                    

break

                

default

                    

break

            } 

 

background image

Pętle

while (wyrażenie) { instrukcje; } 

for (wyrażenie) { instrukcje; } 

do {instrukcje;} while (wyrażenie)

foreach(typ zmienna in kolekcja) {instrukcje;}

background image

Instrukcje skoku

goto

break

continue

background image

Klasy

modyfikator static – typ/metoda statyczna

modyfikator partial class – klasa rozbita na 
wiele plików

klasa może rozbita na wiele plików, np.:
public partial class MojaKlasa { .... }

background image

Modyfikatory dostępu

public – typ lub pole dostępny dla innego 

kodu w tym samym lub innym assembly

private – typ lub pole dostępne tylko dla kodu 

w tej klasie (domyślne dla pól klasy)

protected – typ lub pole dostępne dla kodu w 

tej klasie lub klasie potomnej

internal – typ lub pole dostępne dla kodu 

tylko w tym assembly (domyślne dla klas)

protected internal = protected OR internal

background image

Dziedziczenie

Można dziedziczyć tylko po jednej klasie ale 
po wielu interfejsach

background image

Funkcje wirtualne

modyfikatory

virtual – jawna deklaracja funkcji wirtualnej

override – jawna deklaracja przeciążenia funkcji 
wirtualnej

background image

Klasy i metody abstrakcyjne

modyfikator abstract

background image

Właściwości (Properties)

background image

Obsługa wyjątków

OutOfMemoryException 
NullReferenceException 
InvalidCastException 
ArrayTypeMismatchException 
IndexOutOfRangeException  
ArithmeticException 
DivideByZeroException 
OverFlowException  

background image

Delegaty

modyfikator delegate

typ danych definiujący 
referencję do funkcji

podobne do wskaźników do 
funkcji w C/C++

multicast

użycie delegata: 

deklaracja

utworzenie

wywołanie

background image

Zdarzenia

Obserwowany

 rozsyła zdarzenia do 

obserwatorów:

Deklaracja delegata i zdarzenia

Deklaracja metody rozsyłającej

W odpowiednim momencie wywołanie metody 
rozsyłającej

Obserwator

 rejestruje się do obserwowanego:

Deklaracja metody reagującej na zdarzenie

powiązanie metody reagującej ze zdarzeniem 
obserwowanego

background image

using

 System;

namespace

 MojaPrzestrzen

{
    

public

 

class

 

Obserwowany

    {
        

private

 

string

 tekst;

        

// deklaracja delegata i zdarzenia

        

public

 

delegate

 

void

 

Handler

(

object

 source, 

string

 tekst);

        

public

 

event

 

Handler

 Zdarzenie;

        

protected

 

void

 Rozeslij(

string

 tekst)

        {
            

if

 (Zdarzenie != 

null

)

                Zdarzenie(

this

, tekst);

        }
        

public

 

string

 Tekst

        {
            

set

 { 

this

.tekst = 

value

; Rozeslij(

value

); }

            

get

 { 

return

 tekst; }

        }
    }
    

public

 

class

 

Obserwator

    {
        

public

 

void

 Reaguj(

object

 source, 

string

 t)

        {
            System.

Console

.WriteLine(

"Nowy tekst: "

+t);

        }
    }
    

public

 

class

 

Test

    {
        

public

 

static

 

void

 Main()

        {
            

Obserwowany

 a = 

new

 

Obserwowany

();

            a.Tekst = 

"Hej"

;

            

Obserwator

 b = 

new

 

Obserwator

();

            a.Zdarzenie += 

new

 

Obserwowany

.

Handler

(b.Reaguj);

            a.Tekst = 

"123"

;

        }
    }
}

background image

Przeciążanie operatorów

background image

Preprocesor

#if 

#else 

#elif 

#endif 

#define 

#undef 

#warning 

#error 

#line 

#region 

#endregion 

background image

Dokumentacja XML

Dokumentacja w kodzie
<remarks>, <summary>, <example>, <exception>, 
<param>, <permission>, <returns>, <seealso>, 
<include> 

background image

Ikony


Document Outline