Haladó Fejlesztési Technikák

2021 őszi szemeszter

A C# nyelv haladó eszközei (Lambda kifejezések, LINQ, Entity Framework Core, Code-first adatbázis, Attribútumok, Reflexió, DLL készítése és használata, Unit tesztelés, Mock, Folyamatok és szálak kezelése).

követelmény megtekintése

Kódok

MÉRNÖKINFO

A saját kurzusaimhoz tartozó laboranyagok kódjai és egyéb további, nem kód jellegű anyagai (pdf, pptx stb.) itt találhatók meg. Utóbbi a _other-materials mappában. Korábbi félévek anyagai illetve kódjai az _archived mappában találhatók.

Részletekért a repository gyökerében található README.md állományt érdemes elolvasni.

Repo processor

JELENLEG NEM AKTÍV

Féléves feladatok állapotát (GITSTATS kimenet) feldolgozó és megjelenítő program.

Helyette: GitStat v3

Követelmények, menetrend

Féléves követelmények, menetrend és egyéb általános információk ismertetése.

A követelmények az egyes félévekben eltérhetnek! Az adott előző félévre vonatkozó követelményeket ismertető videót itt lehet megnézni: 2020-21-1, 2020-21-2, míg az aktuális félév követelményét tartalmazó hivatalos dokumentumot pedig az oldal tetején található "követelmény megtekintése" linken keresztül.

! FIGYELEM !

Az alábbi videós anyagok korábbi (pandémiás) félévekben/hez készültek, így bizonyos fokú eltérések lehetségesek az éppen aktuális félévhez képest. Minden aktuális tartalom a (mostmár) fizikai formában megtartott órákon kerül leadásra!

Labor 01 - Delegáltak

Delegáltak felépítése. Beépített (action, func, predicate) és saját delegáltak létrehozása, használata. Névtelen metódusok és lambda kifejezések használata. Rendezés és bináris keresőfa kiegészítése delegálttal mint metódus paraméter.

delegate delegate as parameter multicast Func Predicate Action anonymous methods lambda expressions outer variable trap expression lambda statement lambda

Labor 02 - LINQ, XML

Névtelen osztályok és a var kulcsszó (típus) kapcsolata. IEnumerable típus megismerése. LINQ query és method syntax megismerése, valamint feladatok megoldása. XML struktúra megismerése és feldolgozása .Net környezetben, kiegészítve LINQ lekérdezésekkel.

XML hierarchical XDocument XElement XAttribute LINQ var extension methods from select where join orderby query syntax method syntax chaining IEnumerable anonymous class

Labor 03 - Reflexió

Attribútumok használata és készítése. Reflexió használata a programkódban található típusok (és az azokból elérhető további meta-adatok) dinamikus, futás közbeni vizsgálatára. Attribútumok alapján történű szűrés. A feldolgozott adatok XML fájlba írása.

meta-data reflection Type assembly MethodInfo PropertyInfo FieldInfo attribute

Labor 04 - Adatbázis

Code-First adatbázis létrehozása és használata EntityFrameworkCore segítségével. Attribútumok / annotációk (pl. Required, NotMapped stb.) és Fluent API használata az entitások közötti relációk beállítására. Alapvető CRUD műveletek és komplexebb lekérdezések az adatbázison. Extension method létrehozása az IEnumerable feldolgozására, mint a LINQ lekérdezések eredménye.

ORM EFCore DbContext DbSet fluent API annotation attributes code first eager loading lazy loading

Labor 05 - Rétegzés

Rétegzett alkalmazás létrehozása class library-k segítségével. Data (code-first, EFCore), Repository, Logic és "UI" rétegek alkalmazása. Dependency Injection (konstruktoron keresztül) alkalmazása a rétegek közötti függőségek kezelésére.

layer SOLID ORM EFCore DbContext DbSet IQueryable fluent API annotation code first eager loading lazy loading logic repository dependency inversion dependency injection constructor injection loose coupling

Labor 06 - Egységtesztelés

A rétegzett alkalmazás logic rétegének tesztelése NUnit segítségével. AAA megközelítés alkalmazása a tesztek folyamán.

NUnit TestFixture Setup OneTimeSetup AAA arrange act assert attribute reflection TDD fluent syntax logic layer

Labor 07 - Mockolás

NEM ELÉRHETŐ

A rétegzett alkalmazás logic rétegének tesztelése, a függőségek kiváltásával Moq keretrendszer segítségével. AAA megközelítés alkalmazása a tesztek folyamán.

dependency inversion dependency injection constructor injection fake objects mock objects Moq AAA arrange act assert attribute TestFixture Setup

Labor 08 - Párhuzamos programozás I.

Párhuzamos programozás megvalósítása Process-szek és Thread-ek segítségével .Net Core környezetben. Adatpárhuzamosság bemutatása Thread segítségével: szöveges állományok párhuzamos feldolgozása, majd szinkronizációs pont alkalmazása után ezek összefésülése. Webes statisztika készítése Thread-ek segítségével, párhuzamos végrehajtási formában. Az eredmények kiírása JSON és XML állományba, majd ezek megnyitása Process-ek segítségével.

parallel programming Process Thread XML JSON

Labor 09 - Párhuzamos programozás II.

Párhuzamos programozás megvalósítása Task-ok segítségével .Net Core környezetben. Continuation szerkezet bemutatása. Task cancellation kezelése try-catch valamint continuation felhasználásával. Kritikus szakasz szemléltetése lock (illetve annak hiányának) használatával. RSS olvasó implementálása több szálon. Párhuzamos folyamatok leállítása, visszavonása cancellation token segítségével.

parallel programming Process Task RSS XML cancellation token aggregate exception handle continuation lock

Gyakorló feladatmegoldás I.

GYAKORLÁS EGYSZERŰ

Egyszerűbb, egy entitásos feladatsor megoldása. Adatbázis használat, XML feldolgozás, attribútumokon keresztüli vizsgálat reflexió segítségével, LINQ lekérdezések írása, Unit tesztek létrehozása.

LINQ reflection validation database service-based database unit testing

Gyakorló feladatmegoldás II.

GYAKORLÁS KOMPLEX

Komplexebb, két entitásos feladatsor megoldása melyek one-to-many relációban állnak egymással. Adatbázis használat reláció definiálással, XML feldolgozás, attribútumokon keresztüli vizsgálat reflexió segítségével, LINQ lekérdezések írása, Unit tesztek létrehozása.

one-to-many LINQ reflection validation database service-based database unit testing

Előadás 06 - Web API

ELŐADÁS

Mi a szerver-kliens alapú kommunikáció és a weboldalak valamint webalkalmazások hogyan kapcsolódnak ehhez. Adatszerializáció és -deszerializáció fogalmának megismerése a JSON formátum esetén. Hogyan változtatták meg az API-alapú megközelítések a web felhasználását, mi maga az API és a SOAP valamint REST fogalmak hogyan kapcsolódnak ezekhez. Hogyan használhatók a HTTP metódusok az API-kkal közösen. Mi az API-first megközelítés és miért fontos ez. Mi a CORS probléma.

server client request response GET POST HTTP method JSON serialization deserialization TCP UDP SOAP REST Swagger API-first CORS

Előadás 09 - Párhuzamos programozás I.

ELŐADÁS

Bevezetés a párhuzamos végrehajtás, valamint a párhuzamos programozás alapjaiba. Miért fontos a párhuzamosítás a számítástechnikában és hogyan érhető el. Mi az adatdekompozíció fogalma. Hogyan működik egy futószalag (pipeline) elvű feldolgozás. Mi a különbség a multiprocessing és a multithreading fogalmak között. Mi a különbség a process-ek és a thread-ek között, valamint hogyan használhatók ezek a típusok a .Net Core-ban.

data decomposition pipeline Process Thread multiprocessing multithreading threadpool asynchronous background worker

Előadás 10 - Párhuzamos programozás II.

ELŐADÁS

Hogyan használhatók a task típusok .Net Core-ban. Mi a különbség a task és a thread között, előtérbe helyezve előbbinek az előnyeit. Mi a kapcsolat a task, thread illetve a threadpool fogalmak között. Hogyan szinkronizálhatók a task-ok. Hogyan lehet kivételeket, valamint ún. cancellation-t (visszavonás) használni task-ok esetén- A következő párhuzamos programozás esetén felmerülő jelenségek ismertetése: versenyhelyzet, holtpont, élőpont, szinkronizáció, kritikus szakasz, kölcsönös kizárás. Mi az a lock objektum, hogyan használhatók az atomi műveletek és mi az a szemafor.

Task threadpool race condition deadlock livelock starvation threadsafe synchronization critical section Interlocked lock semaphore Monitor CancellationToken AggregateException atomicity atomic operation

Előadás 11 - Párhuzamos programozás III.

ELŐADÁS

Mi az a maximális felső határ amelyet el lehet érni a gyorsulás tekintetében, párhuzamos végrehajtás esetén (szemben a szekvenciálissal). Hogyan számolható ez ki Amdahl törvényét felhasználva. Mit jelentenek a szemcsézettség és a terheléskiegyenlítés fogalmak többszálú végrehajtás esetén. A következő fogalmak ismertetése: aszinkron metódusok, async-await szerkezet, threadpool, adatpárhuzamosság a TPL library-t felhasználva (parallel for / foreach / invoke and parallel LINQ). Az async-await szerkezet összehasonlítása C# és JavaScript esetén.

threadpool speedup granularity asynchronous async-await data-parallelism TPL LINQ JavaScript