Cursul Advanced Programming in C#

Cursul Advanced Programming in C# este conceput precum o continuare logică a cursului Introduction to Programming in C#. Pe parcursul cursului, cursanţii se vor familiariza cu diferite concepte avansate ale platformei .NET, cu programarea utilizând limbajul C #. Vor învăța cum să controleze durata de viață a obiectelor .NET și în ce mod .NET gestionează memoria, ce sunt delegații, expresiile lambda și metodele anonime.

Sunteţi interesat de acest curs? Îl puteţi parcurge în cadrul acestor programe LINK Academy: Software Development şi Microsoft Development Program.

Descrierea şi obiectivul cursului Advanced Programming in C#

Obiectivul cursului Advanced Programming in C# este de a vă pregăti pentru utilizarea unor concepte avansate de programare C #. Cursul se ocupă şi de colecții, precum și de diferite forme de tipuri generice de date. Cursanţii vor învăța cum să utilizeze reflexia și cum prin intermediul utilizării programării dinamice să efectueze generarea codului în timpul executării aplicațiilor. O parte specială a cursului se va ocupa de diferite modalități pentru obţinerea executării mai multor fire de execuţie (multithread). Finalul cursului va fi dedicat diferitelor tehnici de manipulare cu fișiere și directoare.

Software-ul necesar şi precondiţii tehnice

Visual Studio 2017.

Cunoştinţe anterioare necesare

Precondiţii necesare pentru urmărirea cursului este însuşirea materiei cursului Introduction to Programming in C#.

Competenţe

Modulul 1 – Conformare duratei obiectului şi controlul resurselor

  • Înțelegerea controlului eliberării resurselor de memorie

Modulul 2 – Separarea metodelor şi manipularea evenimentelor

  • Înţelegerea delegaţilor şi aplicarea asupra metodelor
  • Înțelegerea evenimentelor

Modulul 3 – Utilizarea colecțiilor și crearea tipurilor generice

  • Cunoașterea diferitelor tipuri de colecții
  • Înțelegerea tipurilor și metodelor generice

Modulul 4 – Colecții proprii de clase și LINQ

  • Înțelegerea colecțiilor la un nivel mai înalt 
  • Cunoașterea sistemului de interogări prin C #

Modulul 5 – Reflexia și programarea dinamică

  • Utilizarea reflexiei și lucrul cu atribute cu scopul de a defini metadate suplimentare
  • Cunoașterea tehnicilor de programare dinamică

Modulul 6 – Programarea multithreading (cu mai multe fire de execuţie)

  • Utilizarea diferitelor tehnici pentru a atinge executarea mai multor fire de execuţie
  • Crearea și gestionarea firelor, utilizând ThreadPool, crearea și utilizarea Task-urilor și utilizarea cuvintelor cheie async şi await

Modul 7 – Citirea și scrierea fișierelor

  • Cunoașterea controlului fluxului de date 
  • Înțelegerea utilizării claselor pentru lucrul cu fișiere

Cursul Advanced Programming in C# vă oferă răspuns la următoarele întrebări:

1. Ce reprezintă Garbage Collector?

Una dintre numeroasele avantaje ale dezvoltării aplicațiilor pentru platforma .NET se reflectă într-un sistem complet automatizat de gestionare a memoriei, care face parte integrantă din mediul de execuţie .NET. Astfel, spre deosebire de C și C ++, prin intermediul programării utilizând limbajul C #, în majoritatea situațiilor, programatorul nu are nevoie să elibereze în mod explicit memoria prin distrugerea manuală a obiectelor.

Partea centrală a unui astfel de sistem este funcționalitatea Garbage Collector. Cursanţii, frecventând acest curs Advanced Programming in C# vor putea să se familiarizeze cu bazele funcţionării lui Garbage Collector. De asemenea, cursul merge un pas înainte, astfel cursanţiilor se ilustrează diferite tehnici cu ajutorul cărora se poate influența asupra funcționării acestui sistem, în primul rând automatizat. Studiind Garbage Collector, cursanţii se vor familiariza, de asemenea, cu termenele cum ar fi constructorul și distrugătorul și resursele gestionate și negestionate.

2. Ce reprezintă expresiile lambda?

Una dintre numeroasele funcţionalităţi care pe parcurs a fost inclusă în limbajul C #, pentru a facilita programatorilor dezvoltarea aplicațiilor sunt şi expresiile lambda. Expresiile lambda reprezintă o modalitate foarte puternică de a crea o metodă fără nume.

Metodele fără nume sunt altfel numite şi metode anonime, iar cursanţii frecventând cursul Advanced Programming in C#, după familiarizarea cu termenul de metode anonime, vor învăţa cum se pot crea într-un mod foarte uşor utilizând expresiile lambda. Expresiile lambda sunt strâns legate de delegați, un alt termen care aparține programării avansate în C #, care va fi abordat în mod specific pe parcusul cursului Advanced Programming in C#. În final, expresiile lambda deschid calea spre programarea dinamică, una dintre cele mai puternice abordări de programare.

3. Ce reprezintă delegaţii?

Cu scopul de a obține cel mai înalt grad de abstracţie atunci când se scrie codul sursă și pentru a se asigura crearea unei logici software foarte puternice, ușor de întreținut și de modificat, inginerii de la Microsoft au inclus delegați în crearea platformei .NET în limbajul C #. Este vorba despre un element foarte puternic care permite crearea aşa-numitor pointeri asupra metodelor. Asemenea elemente sunt numite delegați.

Funcționalitate similară există şi în limbajele de nivel mai scăzut, cum sunt C și C ++, în timp ce Microsoft cu ocazia dezvoltării C#, utilizarea şi funcţionarea delegaţilor a făcut-o foarte simplă şi eficientă. Utilizând delegați se permite crearea obiectelor care conțin un indicator aspura metodei. Un astfel de obiect poate fi apoi folosit pentru a apela metodele de delegaţi, prin care actul de a apela metoda, în plus, este abstract. Delegaţii reprezintă baza de funcționare a evenimentului .NET și expresiilor lambda. Pe parcursul duratei cursului Advanced Programming in C#, cursanţii vor avea ocazia, prin intermediul unor exemple practice, să se cunoască mai detaliat cu delegaţii.

Advanced Programming in C#

4. Ce reprezintă LINQ?

Lucrul cu datele este cu siguranță unul dintre cele mai importante aspecte ale dezvoltării aplicațiilor de orice tip. Lucrul cu datele presupune stocarea și citirea lor, dar și manipularea care conţine diferite operațiuni care pot fi efectuate asupra lor (căutare, sortare, extragere etc.).

Precum asistență pentru gestionarea cu date, Microsoft a dezvoltat o tehnologie specială încorporată în cadrul platformei .NET. Este vorba despre un limbaj de interogare numit LINQ (Language Integrated Query). LINQ reprezintă o serie de funcții care permit citirea și transformarea informațiilor din diferite surse de date. Cursul Advanced Programming in C# se ocupă detaliat de caracteristicile acestui limbaj și de capacitatea lor de a lucra cu date.

5. Ce reprezintă colecţiile?

Cursul introductiv al acestui program, Introduction to Programming in C#, a adus povestea despre şiruri precum un mod de bază pentru gruparea datelor de același tip. Deși asigură cea mai bună performanță atunci când efectuează operații complexe asupra unui grup de date, şirurile posedă și numeroase limitări. Unele dintre acestea se referă la imposibilitatea de a defini în mod dinamic dimensiunea unui șir, utilizarea unor valori pur numerice (index) pentru a accesa membrii, precum și absența funcțiilor avansate pentru manipularea elementelor.

Din fericire, şirurile nu sunt singura modalitate pentru grupare datelor. Limbajul C # pentru prezentarea grupurilor de date posedă, de asemenea, şi colecții, care asigură funcționalităţi mult mai avansate atunci când este nevoie de manipularea cu seturile de date. C # cunoaște mai multe diferite tipuri de colecții, care sunt prelucrate mai detaliat pe parcursul cursului Advanced Programming in C#. Cursul se ocupă şi de diferite tehnici de creare a colecțiilor proprii.

6. Ce reprezintă reflexia?

În lumea .NET, termenul reflexia se referă la procesul de dezvăluire a tipurilor în timpul executării programului. Prin utilizarea reflexiei, este posibilă citirea tuturor metadatelor în circuit. Desigur, reflexia permite accesul la astfel de date într-o manieră standardizată, orientată spre obiect, ceea ce practic înseamnă că, folosind principii orientate spre obiect, putem precis ajunge la date concrete. Accesul la toate aceste date utilizând reflexia este asigurat în timpul executării aplicației, ceea ce reprezintă cel mai mare avantaj al unui astfel de sistem.

Utilizând reflexia, de exemplu, este posibil să se ajungă la lista tuturor tipurilor care se află în interiorul unui circuit. De asemenea, reflexia permite citirea tuturor metodelor, câmpurilor, proprietăților și evenimentelor care se află într-un anumit tip. De asemenea, reflexia poate fi utilizată pentru a determina tipurile de bază (clase moștenite), interfețele implementate și circuitele de referință. Reflexia reprezintă baza funcționării numeroaselor tehnologii .NET și a funcționalităților mediului de dezvoltare. În cursul Advanced Programming in C#, o atenție deosebită este acordată chiar termenului de reflexie descris.

7. Ce reprezintă programarea dinamică?

Termenul de programare dinamică reprezintă unul dintre cele mai puternice arme din arsenalul unui programator. Programarea dinamică permite unui programator să creeze un cod care va produce un alt cod sursă sau cod de execuţie. Astfel, utilizând programarea dinamică, în timpul executării aplicațiilor, este posibilă crearea de obiecte dinamice și utilizarea membrilor lor.

Cu toate acestea, cea mai mare putere a programării dinamice se reflectă în posibilitatea de a crea tipuri și comportamente complet noi, pe tot parcursul executării aplicației, în funcție de necesităţile actuale. De exemplu, este posibil să se genereze noi clase bazate pe anumite fișiere de configurare textuale. De asemenea, programarea dinamică reprezintă baza pentru funcționarea diferitelor sisteme ORM și a aplicațiilor extensibile. Cursul Advanced Programming in C#  ilustrează diferite tehnici de programare dinamică.

Planul şi programa cursului

1. Conformare duratei obiectului şi controlul resurselor

  • Garbage collector

2. Separarea metodelor şi manipularea evenimentelor

  • Delegaţi şi metode anonime
  • Expresii lambda
  • Evenimente

3. Utilizarea colecțiilor și crearea tipurilor generice

  • Colecţii
  • Clase generice şi colecţii
  • Interfeţe generice
  • Delegaţi generici şi metode

4. Colecții proprii de clase și LINQ

  • Definirea colecţiilor proprii
  • LINQ

5. Reflexia și programarea dinamică

  • Metadate a circuitelor
  • Reflexia
  • Atribuţi .NET 
  • Programarea dinamică

6. Programare cu mai multe fire de execuţie (multithreading)

  • Introducere în programarea cu mai multe fire de execuţie (multithreading)
  • Delegaţi şi executarea asincronă
  • Introducere în crearea şi utilizarea firelor de execuţie 
  • Provocări cu ocazia utilizării concurenţei 
  • ThreadPool şi Task Parallel Library
  • Programarea asincronă utilizând cuvintele cheie async şi await

7. Citirea şi scrierea fişierelor

  • Citirea şi scrierea fişierelor şi manipularea cu directoare
  • Manipularea fluxului
  • Exerciţiu – Crearea unui simplu text editor

Advanced Programming in C#