You are on page 1of 47

Programarea Aplicațiilor Windows

ALIN ZAMFIROIU

Evaluare

  • Proiect 20%

  • Teme platforma 20%

Evaluare  Proiect – 20%  Teme platforma – 20%

Cuprins

  • Clase în C#

  • Windows Forms;

  • Fișiere text și fișiere JSON;

  • Colecții

  • Delegați și Events

  • Baze de date - SQLite

  • Grafică bidimensională

  • Lucru cu Clipboard

Cuprins  Clase în C#  Windows Forms;  Fi ș iere text ș i fi

C++ vs C#

C++ vs C#

C++ vs C#

Lucrul cu pointeri în C# este permis, însă este considerat unsafe
Lucrul cu pointeri în C# este permis, însă este considerat unsafe
C++ vs C# C++ obiecte gestionate prin valoare și referințe; • C# Obiectele sunt gestionate doar
C++ vs C#
C++
obiecte gestionate prin valoare și referințe;
C#
Obiectele sunt gestionate doar prin referințe;
destructorul este cel care dezaloca spațiul
alocat dinamic;
dezalocarea memoriei de spațiu se face de
către garbage collector;
este necesară implementarea operatorului=;
operatorul = nu se supraîncarcă. Cel implicit
face shallow copy;
• Șirurile de caractere sunt gestionate prin char*.
• Șirurile de caractere sunt gestionate prin tipul
valoric string.
C++ vs C# Tablouri C++ C# Tablouri unidimensionale Tablouri bidimensionale int*v sau int v[20] int **mat
C++ vs C#
Tablouri
C++
C#
Tablouri unidimensionale
Tablouri bidimensionale
int*v sau int v[20]
int **mat sau int mat[20][20]
int[] v
int[20,20] mat

Enum

 Pe lângă struct și class în C# există și enum – care reprezintă o colecție
Pe lângă struct și class în C# există și enum – care reprezintă o colecție de
constante.
Prima constantă ia valoarea 0.

Parametrii

Parametrii  Parametrii de intrare ș i ie ș ire sunt defini ț i prin cuvântul
  • Parametrii de intrare și ieșire sunt definiți prin cuvântul cheie ref

  • Parametrii de ieșire sunt definiți prin cuvântul cheie out.

  • Funcțiile cu număr variabil de parametrii sunt marcate prin cuvântul cheie params.

Clase moduri de acces

  • private

  • protected

  • public

  • internal

  • protected internal

Clase – moduri de acces  private  protected  public  internal  p rotected

Clase atribute constante

Clase – atribute constante  Atributele constante sunt introduse prin const sau readonly .  Atributele
  • Atributele constante sunt introduse prin const sau readonly.

  • Atributele introduse prin const sunt inițializate la declarare sunt gestionate la nivelul clasei, asemănător cu atributele statice.

  • Atributele introduse cu readonly sunt inițializate la declarare sau în constructor – asemănătoare cu atributele const din C++.

Clase atribute statice

 Atributele statice aparțin clasei ci nu obiectelor.  Inițializarea se face la definire sau în
Atributele statice aparțin clasei ci nu obiectelor.
Inițializarea se face la definire sau în constructorul static

Clase Funcții statice

Clase – Func ț ii statice  Func ț ii care sunt declarate la nivelul clasei.
  • Funcții care sunt declarate la nivelul clasei. echivalent cu funcții globale.

  • Nu primesc pointerul this.

  • Sunt apelate prin numele clasei.

  • Au acces doar la alți membri statici ai clasei.

Clase - Constructori

Clase - Constructori  Au denumirea identică cu cea a clasei.  Sunt defini ț i
  • Au denumirea identică cu cea a clasei.

  • Sunt definiți în zona publică a clasei – excepție face aplicarea design pattern-ului Singleton.

  • Nu au tip returnat.

  • Apelul se face prin intermediul operatorului new.

Clase - constructorul static

  • Nu are mod de acces;

  • Este apelat automat înainte de inițializarea tuturor atributelor.

  • Nu este permisă apelarea explicită.

  • Este folosit pentru inițializarea atributelor statice.

Clase - constructorul static  Nu are mod de acces;  Este apelat automat înainte de

Clase - destructor

Clase - destructor  Este folosit pentru eliberarea resurselor folosite precum pentru închiderea anumitor conexiuni, închiderea
  • Este folosit pentru eliberarea resurselor folosite precum pentru închiderea anumitor conexiuni, închiderea fișierelor.

  • Are același nume ca și clasa. Diferența se face prin semnul ~.

  • Apelat implicit de către garbage collector. Nu se apelează explicit.

  • Pot fi înlocuiți cu metoda Dispose(), care poate fi apelată.

Clase – proprietăți

 Permit accesul la atributele private ale clasei.  Sunt compuse din două metode: get și
Permit accesul la atributele private ale clasei.
Sunt compuse din două metode: get și set.
Metoda get returnează valoarea atributului.
Metoda set este folosită pentru modificarea valorii atributului prin
intermediul parametrului primit automat: value.

ICloneable

 Pentru implementarea deepCopy() se extinde interfața ICloneable care conține metoda clone.  Această metodă trebuie
Pentru implementarea deepCopy() se extinde interfața ICloneable care
conține metoda clone.
Această metodă trebuie
supradefinită.
Deep copy se poate face și prin funcție proprie care să extindă direct tipul
clasei ci nu Object.

IComparable

 Se extinde interfața IComparable. Aceasta conține metoda CompareTo().  Metoda CompareTo returnează integer (-1, 0
Se extinde interfața IComparable. Aceasta conține metoda CompareTo().
Metoda CompareTo returnează integer (-1, 0 sau 1).

Operatori

Operatori  Operatorii în C# sunt implementa ț i prin func ț ii statice ș i
  • Operatorii în C# sunt implementați prin funcții statice și conțin simbolul operator.

  • Nu se supraîncarcă operatorii: = . ?: -> new is sizeof typeof [] () += -=.

  • Operatorii += și -= sunt evaluați prin intermediul operatorilor + și -.

  • Operatorul [] poate fi definit prin metode de tipul indexer.

Operatori

Operatori  Operatorii ++ ș i – sunt trata ț i unitar deoarece se lucrează cu
  • Operatorii ++ și sunt tratați unitar deoarece se lucrează cu referințe. Deci nu mai există diferențe între forma prefixată și postfixată.

  • Operatori binari +, -, *, / au întotdeauna doi parametrii deoarece sunt implementați prin funcții statice și nu mai au parametrul this.

  • Operatorii de cast au un singur parametru. Nu au tip returnat și au două forme:

    • explicit;

    • implicit.

Metoda indexer

 Este defapt o proprietate și se notează cu this.  Relația has a.
Este defapt o proprietate și se notează cu this.
Relația has a.

Moștenirea

Mo ș tenirea  Reliefează rela ț ia de is a .  Este permisă mo
  • Reliefează relația de is a.

  • Este permisă moștenirea unei singure clase.

  • Apelul constructorului din clasa de bază se face prin intermediul cuvântului cheie base.

Moștenirea

Mo ș tenirea  Prin mo ș tenire, clasa fiu prime ș te de la clasa
  • Prin moștenire, clasa fiu primește de la clasa părinte atributele și metodele implementate.

  • Fiecare constructor se ocupă de zona de memorie aferentă clasei pe care o reprezintă.

  • UPCASTING este permis în mod default. Toate obiectele pot fi transformate în Object.

Funcții virtuale

Func ț ii virtuale  Permit late binding – versiunea func ț iei este stabilită la
  • Permit late binding versiunea funcției este stabilită la momentul execuției (run-time);

  • Este permisă redefinirea metodei (override) sau ascunderea funcției din clasa de bază (new).

  • Astfel prin override avem exact funcțiile virtuale din C++, iar prin new avem funcțiile normale din C++.

  • Late binding este realizat doar dacă în clasa de bază metoda este definită virtuală, iar în clasa fiu este definită prin override

Operatorii is și as

Operatorii is ș i as  Operatorul is este folosit pentru a verifica dacă un obiect
  • Operatorul is este folosit pentru a verifica dacă un obiect este o instanță a unei clase.

  • Operatorul as face conversia de la o instanță a unei clase părinte la o instanță a unei clase fiu. Daca aceasta nu este posibilă se returnează null.

Clase abstracte

Clase abstracte  Func ț iile virtuale pure sunt definite func ț ii abstracte . 
  • Funcțiile virtuale pure sunt definite funcții abstracte.

  • Acestea nu au corp.

  • O clasă care conține cel puțin o funcție abstractă este o clasă abstractă.

  • Clasa abstractă nu poate fi instanțiată. Aceasta definește un tip abstract.

Interfețe

Interfe ț e  Interfe ț e sunt clasele care con ț in doar func ț
  • Interfețe sunt clasele care conțin doar funcții abstracte.

  • Deoarece toate sunt abstracte, nu se mai folosește termenul abstract.

  • Deasemenea, fiind o interfață toate metodele sunt publice, deci nici modul de acces public nu trebuie specificat.

Clase sealed

  • Reprezintă clasele final din java.

  • Aceste clase nu pot fi moștenite de către alte clase.

  • Clasele sealed nu pot fi specializate.

Clase sealed  Reprezintă clasele final din java.  Aceste clase nu pot fi mo ș

Windows Forms

  • TextBox

  • Button

  • Label

  • RadioButton

  • CheckBox

  • ListView

  • ListBox

  • GroupBox

  • Meniuri

Windows Forms  TextBox  Button  Label  RadioButton  CheckBox  ListView  ListBox

Fișiere text

 SaveFileDialog și OpenFileDialog  StreamWriter și StreamReader
SaveFileDialog și OpenFileDialog
StreamWriter și StreamReader
Fi ș iere text  SaveFileDialog și OpenFileDialog  StreamWriter și StreamReader
Fi ș iere text  SaveFileDialog și OpenFileDialog  StreamWriter și StreamReader

Fișiere JSON

Fi ș iere JSON  Add Reference  System.Web.Extentions  În program trebuie să ini ț
  • Add Reference System.Web.Extentions

  • În program trebuie să inițializăm un obiect de tipul JavaScriptSerializer.

  • Acesta are două metode Serialize și Deserialize pentru lucru cu texte în format json.

  • Textul serializat trebuie salvat in fișier.

  • Funcția de deserializare returnează obiectul deserializat.

Fișiere JSON

Fi ș iere JSON
Fi ș iere JSON

Colecții

  • Colecțiile sunt:

    • Array

    • ArrayList

    • Queue

    • Stack

    • HashTable

  • Cea mai folosită colecție este ArrayList.

  • Colec ț ii  Colec ț iile sunt:  Array  ArrayList  Queue  Stack

    Delegat

     Reprezintă un nou tip de referință – echivalent cu pointerul la funcție din C++ 
    Reprezintă un nou tip de referință – echivalent cu pointerul la funcție din
    C++
    Facilitează definirea pointerilor la funcții

    Event

     Reprezintă o listă de delegați.  Adăugarea în listă se face prin operatorul +=, iar
    Reprezintă o listă de delegați.
    Adăugarea în listă se face prin operatorul +=, iar eliminarea se face cu -=.
    Toate funcțiile din listă vor fi apelate într-un singur apel.

    Event

    Event
    Baze de date - SQLite  ToolsManage NuGet Packages.  Aici se caută SQLite și se
    Baze de date - SQLite
    ToolsManage NuGet
    Packages.
    Aici se caută SQLite și se
    instalează.

    Crearea unei tabele SQLite

    Crearea unei tabele SQLite  Se face importul: using System.Data.SQLite;  Se scrie query-ul pentru creare.
    • Se face importul: using System.Data.SQLite;

    • Se scrie query-ul pentru creare.

    • Se crează un fișier pentru baza de date prin intermediul metodei CreateFile() din SQLiteConnection.

    • Se crează o conexiune SQLiteConnection.

    • Se deschde conexiunea.

    • Se creează o comandă pe baza conexiune create.

    • Se setează textul comenzii cu query-ul creat.

    • Se rulează comanda prin apelul metodei ExecuteNonQuery().

    • Se închide conexiunea.

    Crearea unei tabele SQLite

    Crearea unei tabele SQLite

    Inserare în tabelă SQLite

     Pentru inserare se parcurg aceeași pași ca la crearea tabelei doar că de această dată
    Pentru inserare se parcurg aceeași pași ca la crearea tabelei doar că de
    această dată se creează un query pentru inserare.
    SQLInjection

    Select in SQLite

    Select in SQLite  Asem ănător ca la inserare, doar ca nu se schimbă query-ul ș
    • Asemănător ca la inserare, doar ca nu se schimbă query-ul și nu se mai apelează ExecuteNonQuery() ci ExecuteReader().

    • Această metodă returnează un obiect de tipul SQLiteDataReader, care trebuie parcurs. Acesta conține toate elementele selectate din baza de date.

    Select in SQLite

    Select in SQLite

    Grafică bidiminsională

     Se abonează o nouă metodă la evenimentul de paint al unui Panel.  Obiectul e
    Se abonează o nouă metodă la evenimentul de paint al unui Panel.
    Obiectul e de tipul PaintEventArgs are proprietatea Graphics, prin
    intermediul căreia vom putea realiza desene în panelul nostru.

    Grafică bidimensională

     Pentru redesenare, se poate folosi metoda Invalidate().
    Pentru redesenare, se poate folosi metoda Invalidate().

    Lucrul cu Clipboard

    Lucrul cu Clipboard  Dac ă se dore ș te lucrul pe texte cu Clipboard există
    • Dacă se dorește lucrul pe texte cu Clipboard există metodele:

      • Clipboard. SetText(string text);

      • Clipboard.GetText();

  • Pentru obiecte, clasele trebuie să implementeze interfața IDataObject și se folosesc metodele:

    • Clipboard.SetDataObject( );

    • Clipboard.GetDataObject().

  • Referințe

     https://www.youtube.com/watch?v=UOQqgxjNwSw  http://acs.ase.ro/paw  http://cristianciurea.ase.ro/PAW.aspx  Ion SMEUREANU, Marian DARDALA, Adriana REVEIU - Visual C#
    https://www.youtube.com/watch?v=UOQqgxjNwSw
    http://acs.ase.ro/paw
    http://cristianciurea.ase.ro/PAW.aspx
    Ion SMEUREANU, Marian DARDALA, Adriana REVEIU - Visual C# .NET, Editura
    CISON, Bucuresti, 2004 (se găsește la bibliotecă, cota: 005.276 8 SME)