Documente Academic
Documente Profesional
Documente Cultură
Windows – curs 1
1
Agenda
1. Structură evaluare
2. Platforma .NET
3. Diferențe C++ vs. C#
4. Tipuri de date în C#
5. Boxing / unboxing
6. Transferul parametrilor
7. Masive în C#
8. Colecții în C#
2
Evaluare
• seminar = 40%
• lucrare calculator = 30%
• prezentare proiect = 10%
• curs = 60%
• examen la calculator = 60%
Detalii la http://acs.ase.ro/paw
3
Platforma .NET
VB.NET Managed C++ C# Alte limbaje C#
Data si XML
4
Platforma .NET
Sursa
C# / J# / Managed C++, VB
.NET
Compilare – csc.exe, vbc.exe, cl.exe
IL – Interpreted Language
PE – Portable Executable
(EXE sau DLL)
Assembly
Interpretat de CLR
5
Mixed Programming
namespace Math{
public class BasicOp{
public static double Add(double op1, double
C# csc /t:library math.cs
op2){
return op1 + op2;
math.dll
}
public static double Multiply(double op1,
double op2){
return op1 * op2;
} Imports Math
}
} Imports System
VB
Module MathTest
Sub Main()
Dim vb1 As Double = 20
vbc /r:math.dll mathtest.vb
Dim vb2 As Double = 30
7
Diferențe C++ vs. C#
unsafe
{
int* ptr1, ptr2;
ptr1 = &var1;
ptr2 = ptr1;
*ptr2 = 20;
}
csc.exe C:\pointeri.cs /unsafe
8
Diferențe C++ vs. C#
9
Diferențe C++ vs. C#
12
Tipuri de date în C#
• struct example:
struct Student
{
public int cod;
private string nume;
public bool integralist;
};
• enum example:
enum Importance
{
None, Regular, Important, Critical
};
13
Boxing / unboxing
int i = 123;
object o = i; //boxing
int j = (int)o; //unboxing
14
Boxing / unboxing
class BoxUnbox
{ STIVA HEAP
static void Main()
{ 4 octeti : 123
int i = 123;
object obj= i; referinta 4 octeti: 123
int j = (int)obj;
4 octeti : 123
}
}
15
Pointeri/Referințe – Transfer parametrii
16
Masive în C#
int [] v;
v=new int[4];
v=new int[4] {1,2,3,4};
v={1,2,3,4};
19
Masive în C#
Persoana [] p;
p=new Persoana[4];
p=new Persoana[4] {p1,p2,p3,p4};
20
Masive în C#
STIVA HEAP
referinta 16 octeti: @ @ @ @
vPers = new Pers[4] {p1,p2,p3,p4};
Pers p1
Pers p2
Pers p3
Pers p4 21
Masive în C#
Masivele bidimensionale:
22
Masive în C#
23
Colecții în C#
lista.Add(s1);
lista.Add(s2);
lista.Add(s3);
lista.Add(s4);
25
Colecții în C#
26
Colecții în C#
27
Bibliografie
28
Programarea Aplicațiilor
Windows – curs 2
1
Agenda
1. Clase în C# (derivare/moștenire)
2. Supraîncărcare operatori
3. Proprietăți
4. Interfețe (ICloneable/IComparable)
5. Clase abstracte
2
Clase
Sintaxă definire:
3
Clase
tip_acces:
• public – accesibile;
• private – inaccesibile;
• protected – accesibile claselor derivate;
• internal – accesibile claselor din același
assembly;
• protected internal – accesibile
claselor derivate din același assembly;
4
Clase
Atribute constante:
• definite prin const sau readonly;
• NU este permisă modificarea valorii
odată ce au fost inițializate;
• sintaxa:
class Test
{
public const int atribut_1 = 10;
public readonly int atribut_2;
}
5
Clase
6
Clase
7
Clase
8
Clase
class Test
{
public static int atribut_1 = 10;
public static readonly int atribut_2;
}
9
Clase
Funcții constructor:
• sintaxa:
class Nume_clasa {
public Nume_clasa( ){…}
};
• apel: deoarece obiectele sunt gestionate prin
referințe, crearea unui obiect se face cu
operatorul new:
public static void Main () {
Nume_clasa obiect_1 = new Nume_clasa();
Nume_clasa obiect_2 = new Nume_clasa
(parametrii constructor)
}
10
Clase
Funcții destructor:
• sintaxa:
class Nume_clasa {
~Nume_clasa( ) {…}
};
• rol principal: eliberarea resurselor gestionate
de un obiect (ex: închidere conexiune bază de
date, închidere fișier, etc);
• sunt apelate implicit de către GC;
• NU pot fi apelate explicit;
• pot fi înlocuite cu metoda Dispose() (se
poate apela explicit). 11
Operatori
Supraîncărcare operatori:
• sunt implementați prin funcții statice;
• sunt funcții care se numesc:
operator [simbol]
12
Operatori
operator =
• rol principal: copiază bit cu bit valoarea
zonei de memorie sursă în zona de
memorie a destinației (cele două zone
sunt identice ca structură și tip);
• în cazul obiectelor C#, copiază valoarea
referinței obiectului sursă în referința
obiectului destinație.
13
Operatori
16
Operatori
17
Operatori
19
Proprietăți
20
Proprietăți
21
Proprietăți
• sintaxa:
public tip_atribut nume_proprietate {
get { return … }
set { }
}
• utilizare:
ob1.nume_proprietate = valoare;
valoare = ob1.nume_proprietate;
22
Proprietăți
23
Interfețe
24
Interfețe
25
Interfețe
interface IOperatii {
void Operatie1( );
void Operatie2( );
};
27
Interfața ICloneable
28
Interfața ICloneable
29
Shallow copy vs. Deep copy
Shallow copy:
• copiere de adrese între 2 obiecte
• realizată implicit prin operatorul =
Deep copy:
• copiere de conținut între 2 obiecte
• realizată explicit prin metode specializate
(constructor copiere, Clone(), etc.)
30
Shallow copy vs. Deep copy
STIVA HEAP
Shallow copy
referinta
a1 = a2
referinta X octeti: valori
31
Interfața IComparable
32
Interfața IComparable
33
Clase abstracte
34
Clase sealed
Clase abstracte:
• conțin metode abstracte + atribute +
metode non-abstracte;
• o clasă poate deriva doar o clasă de bază
(abstractă sau nu);
• poate fi utilizată ca reference type.
Interfețe:
• conțin doar metode abstracte;
• o clasă poate deriva mai multe interfețe;
• poate fi utilizată ca reference type.
36
Bibliografie
37
Programarea Aplicațiilor
Windows – curs 3
1
Agenda
1. Conceptul de delegate
2. Evenimente
3. Introducere în Windows Forms
4. Exemplificare aplicație Windows
2
Delegate
3
Delegate
DELEGATE:
• un nou tip de referință în C#
delegate tip_return nume_referinta(lista
parametri);
public delegate void FireAlarmDelegate(object
sender, EventArgs e);
6
Evenimente
EVENIMENT:
• reprezintă un vector/listă de delegați
(pointeri de funcții)
event tip_delegate nume_event;
• facilitează execuția tuturor funcțiilor printr-
un singur apel
nume_event([parametrii]);
• suportă operatorii aritmetici += și -=
pentru adăugare/ștergere de delegați din
eveniment
nume_event += new TipDelegate(metoda);
8
Evenimente
9
Evenimente
11
Evenimente
12
Evenimente
Tratarea unui eveniment se poate face:
• prin atașarea unei metode la delegatul
specific evenimentului:
MouseDown += new
MouseEventHandler(MetodaMea);
14
Evenimente
15
Evenimente
Metoda pentru abonare la eveniment din
clasa care oferă soluții pentru evenimentul
FireAlarm devine:
public void DoSomething(object sender,
FireAlarmEventArgs e)
{
if (e.risc < 5)
{
Console.WriteLine("Alarma incendiu
in camera " + e.camera + " Contactati telefonic
camera!" + "Posibil tigara aprinsa!");
}
else Console.WriteLine("Alarma incendiu in
camera " + e.camera + " Contactati departamentul
pompieri. " + "Evacuati cladirea!");
}
16
Introducere în Windows Forms
18
Introducere în Windows Forms
19
Introducere în Windows Forms
20
Introducere în Windows Forms
• instanțierea controlului:
Controls.Add(btn);
22
Introducere în Windows Forms
23
Introducere în Windows Forms
24
Bibliografie
25
Programarea Aplicațiilor
Windows – curs 6
1
Agenda
2
Citire fișiere text
using System.IO;
3
Citire fișiere text
7
Serializare/Deserializare
8
Serializare/Deserializare
9
Serializare/Deserializare
10
Serializare/Deserializare
• închiderea stream-ului:
fileStream.Close();
11
Serializare/Deserializare
12
Serializare/Deserializare
• închiderea stream-ului:
fileStream.Close();
13
Parsare/Generare XML
15
Parsare/Generare XML
17
Parsare/Generare XML
19
Programarea Aplicațiilor
Windows – curs 5
1
Agenda
2
Evenimente generate de mouse
this.Enabled = true;
this.Visible = true;
3
Evenimente generate de mouse
4
Evenimente generate de mouse
5
Evenimente generate de mouse
6
Evenimente generate de mouse
7
Evenimente generate de mouse
9
Evenimente generate de tastatură
11
Evenimente generate de tastatură
12
Acces la câmpuri prin acceleratori
13
Acces la câmpuri prin acceleratori
14
Gestiunea unitară a controalelor
Form1:
ArrayList listProd = new ArrayList();
Form2 frm = new Form2(listProd);
frm.ShowDialog();
Form2:
ArrayList lista2;
public Form2(ArrayList lista1)
{
InitializeComponent();
lista2 = lista1;
} 16
Bibliografie
17
Programarea Aplicațiilor
Windows – curs 6
1
Agenda
1. Lucrul cu meniuri
2. Validarea datelor
3. Gestiunea excepțiilor
2
Meniuri
3
Meniuri
4
Meniuri
5
Meniuri
6
Meniuri
7
Meniuri
8
Meniuri
statusStrip1.LayoutStyle =
ToolStripLayoutStyle.Table;
9
Meniuri
10
Validarea datelor
12
Validarea datelor
13
Validarea datelor
14
Gestiunea excepțiilor
15
Gestiunea excepțiilor
try
{ //secventa prelucrari }
catch(exceptie_tip_1)
{ //secventa prelucrari specifice }
catch(exceptie_tip_2)
{ //secventa prelucrari specifice }
catch(Exception)
{ //secventa prelucrari generale }
finally
{ //secventa prelucrari obligatorii } 19
Gestiunea excepțiilor
blocul try{…}
• contine secvența de prelucrări care
generează excepții;
• are asociat minim un bloc “catch”;
• între blocul “try” și blocurile “catch”
asociate nu există alte instrucțiuni;
• un bloc “try” trebuie să aibă asociat cel
puțin un bloc “catch” sau măcar un bloc
“finally”.
20
Gestiunea excepțiilor
21
Gestiunea excepțiilor
blocul finally{…}
• conține secvența de prelucrări care se
execută indiferent dacă blocul “try” a
generat sau nu excepții și dacă acestea
au fost sau nu tratate în blocurile “catch”
• blocul “finally” este unic, executându-se
întotdeauna, indiferent care din blocurile
“try” sau “catch” s-a executat. El
urmărește aducerea la o stare coerentă
și consistentă a aplicației.
22
Gestiunea excepțiilor
try { … }
catch(exceptie_tip_1) {…}
catch(exceptie_tip_2) {…}
…
catch(Exception e) {…}
23
Gestiunea excepțiilor
24
Gestiunea excepțiilor
25
Gestiunea excepțiilor
26
Gestiunea excepțiilor
Aplicație preluare informații studenți –
meniuri și validări
27
Bibliografie
28
Programarea Aplicațiilor
Windows – curs 7
1
Agenda
2
Lucrul cu ferestre multiple (MDI)
Arhitecturi de aplicații:
• SDI – Single Document Interface
• MDI – Multiple Document Interface
Arhitectura MDI permite utilizatorilor să
lucreze simultan cu mai multe formulare
fără să deschidă o nouă instanță a
aplicației.
3
Lucrul cu ferestre multiple (MDI)
4
Lucrul cu ferestre multiple (MDI)
6
Controale vizuale complexe
7
Vizualizarea liniară – controlul ListView
8
Vizualizarea liniară – controlul ListView
9
Vizualizarea liniară – controlul ListView
10
Vizualizarea liniară – controlul ListView
12
Vizualizarea liniară – controlul ListView
13
Vizualizarea liniară – controlul ListView
14
Vizualizarea arborescentă – TreeView
16
Vizualizarea arborescentă – TreeView
17
Bibliografie
18
Programarea Aplicațiilor
Windows – curs 8
1
Agenda
1. Elemente de grafică
2. Previzualizare document
2
Elemente de grafică
Suportul pentru reprezentările grafice este
oferit în C# prin clasa Graphics, având
proprietatea de clasă “sealed”.
Clasa Graphics nu are constructor, obiectele ei
fiind obținute prin:
• utilizarea evenimentului Paint;
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics gr = e.Graphics;
}
• apelul funcției CreateGraphics() specifice
unui control;
Graphics gr = panel1.CreateGraphics();
3
Elemente de grafică
• apelul metodei
Graphics.FromHwnd(this.Handle);
Graphics gr = Graphics.FromHwnd(panel1.Handle);
5
Elemente de grafică
8
Elemente de grafică
10
Previzualizare document
11
Previzualizare document
Se face atribuirea:
PrintPreviewDialog1.Document = pd;
În urma acestei atribuiri se consideră că
suportul de afișare nu mai este
imprimanta, ci chiar dialogul de
previzualizare.
La vizualizarea dialogului se declanșează
automat și metoda Print() a
documentului, care declanșează, la rândul
ei, evenimentul PrintPage.
12
Previzualizare document
13
Bibliografie
14
Programarea Aplicațiilor
Windows – curs 9
1
Agenda
1. Lucrul cu Clipboard-ul
2. Operația de Drag and Drop
3. Data Binding
2
Lucrul cu Clipboard-ul
3
Lucrul cu Clipboard-ul
Se definește:
IDataObject o =
Clipboard.GetDataObject();
Având la dispoziție referința la interfața
IDataObject, aplicația se interesează dacă
ceea ce există în Clipboard este de un
anumit tip de obiect sau se poate converti
într-un anumit tip. Astfel, se invocă metoda
GetDataPresent(), având ca parametru
tipul căutat:
bool vb =
o.GetDataPresent(typeof(Bitmap)); 5
Lucrul cu Clipboard-ul
8
Operatia de Drag and Drop
9
Operatia de Drag and Drop
10
Data Binding
11
Data Binding
12
Data Binding
15
Programarea Aplicațiilor
Windows – curs 10
1
Agenda
2
Lucrul cu baze de date
3
Lucrul cu baze de date
ADO.NET (Active Data Object):
• este divizată în mod conceptual în
consumatori și furnizori de date;
consumatorii sunt aplicațiile care au
nevoie de acces la date, iar furnizorii
sunt componentele software care
implementează interfața pentru
furnizarea datelor către consumatori.
4
Lucrul cu baze de date
Accesul la comenzi SQL din C# se face
prin:
• interfața ODBC (Open Data Base
Connectivity); este relativ rapidă și
compatibilă cu o mulțime de baze de
date diferite;
• setul de date OLEDB (Object Linking
and Embedding Data Base); pentru
conectare la baze de date SQL Server
este relativ lent;
5
Lucrul cu baze de date
Accesul la comenzi SQL din C# se face
prin:
• SQL Native Client – doar dacă se
accesează baze de date SQL Server
începând cu versiunea 2005 și este
nevoie de noile caracteristici, precum
MARS (Multiple Active Result Sets),
criptare, tip de date XML, etc. În caz
contrar, se recomandă utilizarea
OLEDB/ODBC, cu mențiunea că OLEDB și
ODBC nu acceptă unele dintre noile
caracteristici ale SQL Server.
6
Lucrul cu baze de date
9
Lucrul cu baze de date
10
Lucrul cu baze de date
12
Lucrul cu baze de date
14
Lucrul cu baze de date
16
Lucrul cu baze de date
conexiune.Open();
comanda.Transaction =
conexiune.BeginTransaction();
comanda.CommandText = "INSERT into student
values(?,?,?,?,?,?,?)";
comanda.Parameters.Add("cod",
OleDbType.Integer).Value = codstudent + 1;
comanda.Parameters.Add("nume",
OleDbType.Char, 10).Value = nume;
comanda.ExecuteNonQuery();
comanda.Transaction.Commit();
conexiune.Close(); 17
Lucrul cu baze de date
18
Lucrul cu baze de date
Exemple:
OleDbCommand comanda = new
OleDbCommand(sql, conexiune);
comanda.ExecuteNonQuery();
OleDbDataReader reader =
comanda.ExecuteReader();
cod = Convert.ToInt32(
comanda.ExecuteScalar());
19
Bibliografie
20
Programarea Aplicațiilor
Windows – curs 11
1
Agenda
2
Lucrul cu baze de date
3
Lucrul cu baze de date
5
Lucrul cu baze de date
7
Entity Framework
O instantă a clasei DbContext reprezintă o
combinație de modele și unități de lucru,
care să poată fi utilizată pentru a interoga
dintr-o bază de date și pentru a grupa
modificările care vor fi scrise din nou în
baza de date ca o unitate de lucru.
Clasa DbContext este utilizată de regulă
cu un tip derivat care conține proprietățile
DbSet<TEntity> pentru entitățile rădăcină
ale modelului. Aceste seturi sunt inițializate
automat atunci când instanța clasei
derivate este creată.
8
Entity Framework
Prin convenție, clasa DbContext creează o
bază de date pe baza următoarelor criterii:
• dacă este disponibilă o instanță locală de
SQL Express, atunci baza de date va fi
creată pe acea instanță;
• dacă instanța SQL Express nu este
disponibilă, atunci LocalDb va fi utilizată
dacă aceasta este disponibilă;
• dacă ambele sunt disponibile, atunci se va
utiliza SQL Express;
• baza de date este denumită pe baza
namespace-ului, la care se adaugă
denumirea clasei derivate din DbContext.
9
Entity Framework
10
Reporting
11
Reporting
12
Bibliografie
13
Programarea Aplicațiilor
Windows – curs 12
1
Agenda
1. Controale de utilizator
2
Controale de utilizator
Controalele din Windows Forms sunt
componente reutilizabile care încapsulează
funcționalitățile interfeței cu utilizatorul din
cadrul aplicațiilor Windows.
Windows Forms oferă nu numai o mulțime
de controale gata de utilizare, ci oferă și
infrastructura pentru dezvoltarea propriilor
controale.
Se pot combina controale existente, se pot
extinde controalele existente sau se pot
crea propriile controale personalizate.
3
Controale de utilizator
Controalele din .NET Framework sunt
moștenite dintr-o clasă de bază comună
denumită UserControl.
Această clasă oferă toate funcționalitățile
de bază pentru un control grafic care să fie
utilizat într-un formular Windows.
4
Controale de utilizator
Toate controalele încorporate în platforma
.NET moștenesc aceeași clasă de bază
(UserControl), ceea ce permite crearea de
controale de utilizator personalizate prin
moștenirea din clasa de bază UserControl,
care va furniza automat o serie de
proprietăți și evenimente.
5
Controale de utilizator
Există aproximativ 30 de proprietăți care se
moștenesc din clasa de bază UserControl.
Aceste proprietăți includ toate proprietățile
comune controalelor de bază, cum ar fi
proprietățile de accesibilitate, BackColor,
ForeColor, proprietățile de ancorare și cele
de Dock-ing.
Aceste proprietăți se pot supradefini, dar
cel mai probabil majoritatea vor fi utilizate
așa cum sunt.
6
Controale de utilizator
Un control de utilizator moștenește
aproximativ 40 de evenimente din clasa de
bază UserControl. Aceste evenimente le
includ pe cele mai frecvente, cum ar fi
Load, Resize și Layout. Controlul de
utilizator va include, de asemenea, unele
dintre evenimentele legate de mouse și
tastatură, la un nivel mai scăzut, cum ar fi
Click, DoubleClick, MouseUp și MouseDown.
7
Controale de utilizator
Se pot supradefini aceste evenimente
moștenite, dacă este necesar, dar se
recomandă să fie supradefinită doar
metoda moștenită On<EventName> în loc
să fie supradefinit direct evenimentul de
bază, astfel încât controalele viitoare să
poată beneficia de utilizarea evenimentelor
standard.
8
Controale de utilizator
Prin extinderea clasei de bază
ContainerControl, clasa UserControl
moștenește toate elementele standard de
poziționare și manipulare necesare pentru
un nou control de utilizator.
9
Controale de utilizator
Clasa UserControl oferă posibilitatea de a
crea controale care pot fi utilizate în mai
multe aplicații sau mai multe componente
dintr-o aplicație.
O utilizare eficientă a unui control de
utilizator este preîncărcarea unui
ComboBox sau a unui ListBox cu elemente
statice folosite în mod obișnuit în aproape
orice aplicație (listă de țări, regiuni, orașe,
etc.).
10
Controale de utilizator
Avantajele utilizării unui control de
utilizator:
• reutilizabilitatea codului sursă;
• economie de timp;
• efort mai mic;
• ușurință în identificarea erorilor și fixarea
acestora;
• utilizare eficientă a memoriei.
11
Controale de utilizator
12
Bibliografie
13