Pentru ca e week-end, sa lasam chestiile tehnice pe saptamana viitoare. Poze de weekend:

Monthly Archives: February 2010
Colectii in .Net (exemple in limbajul c#)
Colectiile reprezinta un mod de stoacare a obiectelor intr-o maniera structurata. Acestea sunt foarte utilizate in programare. Framework-ul .Net pune la dispozitia dezvoltatorilor foarte multe clase pentru lucrul cu colectiile. Toate aceste clase sunt continute in spatiul de nume System.Collections.
.Net defineste o colectie ca fiind un obiect care implementeaza una sau mai multe interfete : System.Collections.ICollection, System.Collections.IListSystem, Collections.IDictionary. Astfel, vom avea o clasificare a colectiilor din framework:
Colectii ordonate
Aceste colectii implementeaza doar interfata ICollection si se deosebesc prin faptul ca ordinea in care elementele sunt inserate determina si ordinea in care elementele sunt regasite in colectie. Exemplu: Stack, Queue.
Colectii indexate
Acest tip de colectie se distinge prin faptul ca accesul la elemente se face prin index, (incepand cu 0), similar unui vector. Exemplu: ArrayList.
Colectii pe baza de cheie
Colectiile pe baza de cheie implementeaza interfata IDictionary. Ele contin elemente care pot fi accesate prin valoarea asociata cheii respectivului element (pereche cheie/valoare). Vom face o analiza scurta a clasei SortedList.
Colectiile din System.Collections sunt colectii non-generice.
Enumerarea si compararea colectiilor
.Net Framework contine doua seturi de interfete standard pentru enumerarea si compararea colectiilor. Un set nontype-safe, IEnumerable si IEnumerator si un set type-safe, IEnumerable <T> si IEnumerator <T>. Toate intefetele din .Net Framework, prin conventie, isi incep numele cu I.
Interfata IEnumerable contine o singura metoda, GetEnumerator. Obiectul returnat de aceasta metoda, este un enumerator folosit pentru parcurgerea elementelor colectiei, el implementand interfata IEnumerator.
Operatii IO in .Net – System.IO pe scurt
Mai intai, sa ne reamintim ce inseamna un spatiu de nume.
De multe ori, aplicatiile au nevoie sa stocheze date pe hard-disk (salvarea intre mai multe sesiuni ale datelor aplicatiei, data logging, troubleshooting, comunicarea cu alte aplicatii, compresarea, decompresarea datelor, etc). Pentru aceasta, aplicatiile vor folosi clasele din System.IO:
using System.IO;
System.IO contine clase care pot fi folosite la exploatarea, administrarea fisierelor si directoarelor din sistemul de operare.
Clasele DirectoryInfo si Directory
Aceasta clasa contine metode statice pentru crearea, mutarea directoarelor, afisarea subdirectoarelor. Clasa nu poate fi mostenita.
Alegem directorul Windows pentru a-i afisa subdirectoarele.
Un exemplu de folosire a unui dictionar
In acest articol, vom lucra un exemplu in care vom folosi o colectie, un dictionar cu perechi de chei de tip int si valori de tip string, dictionar care va fi construit pe baza a ceea ce introduce utilizatorul de la tastatura. Dupa crearea lui, il vom salva intr-un fisier text pe hard. Apoi vom citi colectia din fisierul text.
Vom alege un proiect de tip Console Application si vom explica notiuni care nu au fost introduse pana acum.
Construim clasa DictionarExemplu, care va avea ca metode NumarElemente, CreeazaDictionar, SalveazaDictionar, CitesteDictionar.
Mai intai, in interiorul clasei, declaram un obiect de tip Dictionary<int,string>:
Dictionary – o colectie utila
O alta colectie generica utila in .Net este Dictionary. Ea functioneaza pe principiul perechilor cheie/valoare.
Dictionarele stabilesc o relatie (“map“) intre o cheie si o valoare. De exemplu, avem numarul de identificare al unui angajat, caruia ii putem atribui un obiect care reprezinta angajatul.
Clasa generica Dictionary face parte din spatiul de nume System.Collection.Generics. Pentru folosirea ei, vom folosi:
using System.Collections.Generic;
Folosind in continuare clasa Cont, folosita in articolele despre ArrayList si List<T>, construim un dictionar care va stoca perechi cheie/valoare de tipul string/Cont:
Cateva cuvinte despre List – introducere in clasele generice
Reamintesc problema din articolul despre ArrayList: cream o lista in care adaugam referinte catre obiecte iar pentru a le accesa trebuia sa convertim explicit la tipul obiectului, altfel primeam eroare la compilare, de tipul: “Cannot implicitly convert type ‘object’ to ‘ContExemplu.Cont’. An explicit conversion exists (are you missing a cast?)”.
C# este un limbaj type-safe, lucru care permite ca unele eventualele erori sa fie returnate la compilare (acest lucru face ca programul sa fie stabil, in sensul ca mare parte dintre errorile datorate tipurilor de date folosite sunt detectate la compilare), si nu la executie (run-time).
Am expus aceasta problema, pentru a intelege mai bine termenul de generic. Clasele sau functiile generice sunt cele care primesc ca parametru tipul datelor manipulate si sunt foarte folosite in implementarea colectiilor sau algoritmilor care actioneaza asupra unor tipuri variate de date.
Notiunea de cod generic poate parea cunoscuta celor care programeaza in C++, doar ca implementarea si regulile de utilizare difera in .Net.
ArrayList – un vector mai bun!
ArrayList este o colectie simpla care poate stoca orice tip de obiect.
Clasa ArrayList este continuta in spatiul de nume System.Collections. Aceasta clasa ne permite sa construim un vector care sa creasca in marime, adaugand mereu elemente noi.