From 2e3d46256fb7b4d998c7fc96fb1550ffdad22eea Mon Sep 17 00:00:00 2001 From: Vladimir Filipovic Date: Mon, 13 Nov 2023 14:50:44 +0100 Subject: [PATCH] popravio --- MatfRS2----info.sln | 46 +++ predavanja/README-2022-23.md | 375 ++++++++++++++++++ predavanja/README.md | 294 +++++++------- ...pdf => 05-02-mikroservisi-realizacija.pdf} | Bin 4 files changed, 567 insertions(+), 148 deletions(-) create mode 100644 MatfRS2----info.sln create mode 100644 predavanja/README-2022-23.md rename predavanja/prezentacije/{05-02-mikroservisi-reaizacija.pdf => 05-02-mikroservisi-realizacija.pdf} (100%) diff --git a/MatfRS2----info.sln b/MatfRS2----info.sln new file mode 100644 index 0000000..b43e761 --- /dev/null +++ b/MatfRS2----info.sln @@ -0,0 +1,46 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.002.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "pismeni-ispiti", "pismeni-ispiti", "{55B155FE-3165-445B-83B8-082129FD509F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "zadaci", "zadaci", "{6575CD72-954D-48BE-B664-79653ECF634C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "februar2019_resenje", "februar2019_resenje", "{A6629BAC-5097-41C7-A447-6DB62F77328F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kontroleri", "pismeni-ispiti\zadaci\februar2019_resenje\Kontroleri\Kontroleri.csproj", "{8962B64E-C3B9-4F65-B0B2-AB2468360BB7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "januar2019_resenje", "januar2019_resenje", "{A76C19DB-2305-400D-9CAF-3C89044398AA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MasterTeme", "pismeni-ispiti\zadaci\januar2019_resenje\MasterTeme\MasterTeme.csproj", "{39E886DC-ED8A-44BF-B3BE-779315830AA7}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8962B64E-C3B9-4F65-B0B2-AB2468360BB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8962B64E-C3B9-4F65-B0B2-AB2468360BB7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8962B64E-C3B9-4F65-B0B2-AB2468360BB7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8962B64E-C3B9-4F65-B0B2-AB2468360BB7}.Release|Any CPU.Build.0 = Release|Any CPU + {39E886DC-ED8A-44BF-B3BE-779315830AA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {39E886DC-ED8A-44BF-B3BE-779315830AA7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {39E886DC-ED8A-44BF-B3BE-779315830AA7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {39E886DC-ED8A-44BF-B3BE-779315830AA7}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {6575CD72-954D-48BE-B664-79653ECF634C} = {55B155FE-3165-445B-83B8-082129FD509F} + {A6629BAC-5097-41C7-A447-6DB62F77328F} = {6575CD72-954D-48BE-B664-79653ECF634C} + {8962B64E-C3B9-4F65-B0B2-AB2468360BB7} = {A6629BAC-5097-41C7-A447-6DB62F77328F} + {A76C19DB-2305-400D-9CAF-3C89044398AA} = {6575CD72-954D-48BE-B664-79653ECF634C} + {39E886DC-ED8A-44BF-B3BE-779315830AA7} = {A76C19DB-2305-400D-9CAF-3C89044398AA} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {C3BF671F-DF9D-41B4-9E94-FD4F790F59D1} + EndGlobalSection +EndGlobal diff --git a/predavanja/README-2022-23.md b/predavanja/README-2022-23.md new file mode 100644 index 0000000..4c09fa2 --- /dev/null +++ b/predavanja/README-2022-23.md @@ -0,0 +1,375 @@ +# Предавања -- Развој софтвера 2 @ Математички факултет Универзитета у Београду + +[РС 2](../README.md) + +Овде је описан садржај предавања за предмет **Развој софтвера 2**. У оквиру овог курса се проучавају поједини +аспекти софтверског инжењерства, управљања пројектима и разматрају нека питања архитектуре, дизајна и имплементације +софтверских система. + +--- + +**1.** Информације о курсу [филм (2020/21)](https://www.youtube.com/watch?v=ng4uRSCo0KE&t=0m03s){:target="\_blank"} + +**1.1.** Веб страна курса [филм (2020/21)](https://www.youtube.com/watch?v=ng4uRSCo0KE&t=0m03s){:target="\_blank"} + +**1.2.** Семинарски радови [филм (2020/21)](https://www.youtube.com/watch?v=ng4uRSCo0KE&t=03m11s){:target="\_blank"} + +**1.3.** Садржај курса [филм (2020/21)](https://www.youtube.com/watch?v=ng4uRSCo0KE&t=16m26s){:target="\_blank"} + +1.3.1. Теме које се проучавају [филм (2020/21)](https://www.youtube.com/watch?v=ng4uRSCo0KE&t=16m26s){:target="\_blank"} + +1.3.2. Литература [филм (2020/21)](https://www.youtube.com/watch?v=ng4uRSCo0KE&t=36m32s){:target="\_blank"} + +1.3.2. Коришћење језика C# у развојном окружењу Visual Studio [филм (2020/21)](https://www.youtube.com/watch?v=ng4uRSCo0KE&t=40m35s){:target="\_blank"} + +**2.** Карактеристике програмског језика C# делом различите од програмског језика Јава [филм (2020/21)](https://www.youtube.com/watch?v=BQsAOER-tLg&t=1m19s){:target="\_blank"} + +**2.1.** Функције [филм (2020/21)](https://www.youtube.com/watch?v=BQsAOER-tLg&t=3m37s){:target="\_blank"} + +2.1.1. Именовани аргументи [филм (2020/21)](https://www.youtube.com/watch?v=BQsAOER-tLg&t=5m56s){:target="\_blank"} + +2.1.2. Опционални параметри [филм (2020/21)](https://www.youtube.com/watch?v=BQsAOER-tLg&t=18m35s){:target="\_blank"} + +2.1.3. Параметри `out` [филм (2020/21)](https://www.youtube.com/watch?v=BQsAOER-tLg&t=26m24s){:target="\_blank"} + +2.1.4. Параметри `ref` [филм (2020/21)](https://www.youtube.com/watch?v=BQsAOER-tLg&t=32m35s){:target="\_blank"} + +2.1.5. Методи проширења [филм (2020/21)](https://www.youtube.com/watch?v=BQsAOER-tLg&t=40m19s){:target="\_blank"} + +**2.2.** Класе [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=0m05s){:target="\_blank"} + +2.2.1. Модификатори приступа [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=0m16s){:target="\_blank"} + +- Модификатор `public` [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=0m16s){:target="\_blank"} + +- Модификатор `protected` [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=02m19s){:target="\_blank"} + +- Модификатор `internal` [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=02m38s){:target="\_blank"} + +- Модификатор `private` [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=04m20s){:target="\_blank"} + +2.2.2. Превазилажење метода, витрулени методи [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=05m19s){:target="\_blank"} + +2.2.3. Сакривање метода наткласе, `new` метод [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=08m49s){:target="\_blank"} + +2.2.4. Превазилажење оператора [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=14m08s){:target="\_blank"} + +2.2.5. Парцијалне класе [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=21m19s){:target="\_blank"} + +**2.3.** Интерфејси [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=28m16s){:target="\_blank"} + +2.3.1. Имплементација интерфејса [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=28m16s){:target="\_blank"} + +2.3.2. Експлицитна имплементација [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=29m35s){:target="\_blank"} + +**2.4.** Особине [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=31m33s){:target="\_blank"} + +2.4.1. Имплементација особина, поље за подршку особине [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=34m25s){:target="\_blank"} + +2.4.2. Сакривање особина [филм 1 (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=39m50s){:target="\_blank"} [филм 2 (2020/21)](https://www.youtube.com/watch?v=FVGQZb4FhAo&t=0m05s){:target="\_blank"} + +2.4.3. Апстрактне особине [филм (2020/21)](https://www.youtube.com/watch?v=FVGQZb4FhAo&t=4m58s){:target="\_blank"} + +2.4.4. Аутоматски имплементиране особине [филм (2020/21)](https://www.youtube.com/watch?v=FVGQZb4FhAo&t=10m09s){:target="\_blank"} + +**2.5.** Енумерисани типови [филм (2020/21)](https://www.youtube.com/watch?v=FVGQZb4FhAo&t=12m10s){:target="\_blank"} + +2.5.1. Реализација енумерисаних типова [филм (2020/21)](https://www.youtube.com/watch?v=FVGQZb4FhAo&t=12m10s){:target="\_blank"} + +2.5.2. Конверзија код енумерисаних типова [филм (2020/21)](https://www.youtube.com/watch?v=FVGQZb4FhAo&t=20m02s){:target="\_blank"} + +**2.6.** Генерички типови [филм (2020/21)](https://www.youtube.com/watch?v=FVGQZb4FhAo&t=22m22s){:target="\_blank"} + +2.6.1. Реализација генеричких типова [филм (2020/21)](https://www.youtube.com/watch?v=FVGQZb4FhAo&t=22m38s){:target="\_blank"} + +2.6.2. Имплементација генеричких интерфејса [филм (2020/21)](https://www.youtube.com/watch?v=FVGQZb4FhAo&t=36m54s){:target="\_blank"} + +2.6.3. Ограничења над генеричким типовима [филм (2020/21)](https://www.youtube.com/watch?v=FVGQZb4FhAo&t=39m15s){:target="\_blank"} + +**2.7.** Индексери [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=0m04s){:target="\_blank"} + +2.7.1. Реализација индексера [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=0m40s){:target="\_blank"} + +2.7.2. Преоптерећење индексера [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=8m41s){:target="\_blank"} + +**2.8.** Делегати [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=12m50s){:target="\_blank"} + +2.8.1. Реализација делегата [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=13m13s){:target="\_blank"} + +2.8.2. Делегати као параметри метода [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=16m36s){:target="\_blank"} + +2.8.3. Делегати и симултано покретање [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=18m48s){:target="\_blank"} + +2.8.4. Анонимни методи као делегати [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=23m10s){:target="\_blank"} + +2.8.5. Генерички делегати [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=27m15s){:target="\_blank"} + +2.8.6. Предефинисани делегати [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=30m13s){:target="\_blank"} + +- Делегат `Func` [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=30m29s){:target="\_blank"} + +- Делегат `Action` [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=33m12s){:target="\_blank"} + +- Делегат `Predicate` [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=35m19s){:target="\_blank"} + +**2.9.** Догађаји [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=39m27s){:target="\_blank"} + +2.9.1. Реализација догађаја [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=40m17s){:target="\_blank"} + +2.9.2. Руковање догађајем [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=42m01s){:target="\_blank"} + +2.9.3. Параметри придружени догађају [филм (2020/21)](https://www.youtube.com/watch?v=XVjCB6YAEj8&t=31m16s){:target="\_blank"} + +**2.10.** Структуре [филм (2020/21)](https://www.youtube.com/watch?v=XVjCB6YAEj8&t=36m37s){:target="\_blank"} + +2.10.1. Реализација структура [филм (2020/21)](https://www.youtube.com/watch?v=XVjCB6YAEj8&t=37m42s){:target="\_blank"} + +2.10.2. Структуре, методи и особине [филм (2020/21)](https://www.youtube.com/watch?v=XVjCB6YAEj8&t=39m38s){:target="\_blank"} + +2.10.3. Структуре и догађаји [филм (2020/21)](https://www.youtube.com/watch?v=XVjCB6YAEj8&t=41m39s){:target="\_blank"} + +**2.11.** Ламбда-изрази [филм (2020/21)](https://www.youtube.com/watch?v=kbTCK7mKcdk&t=0m04s){:target="\_blank"} + +2.11.1. Реализација ламбда-израза [филм (2020/21)](https://www.youtube.com/watch?v=kbTCK7mKcdk&t=01m10s){:target="\_blank"} + +2.11.2. Ламбда-изрази и особине [филм (2020/21)](https://www.youtube.com/watch?v=kbTCK7mKcdk&t=05m17s){:target="\_blank"} + +2.11.3. Ламбда-изрази и делегати [филм (2020/21)](https://www.youtube.com/watch?v=kbTCK7mKcdk&t=08m11s){:target="\_blank"} + +2.11.4. Ламбда-изрази и догађаји [филм (2020/21)](https://www.youtube.com/watch?v=kbTCK7mKcdk&t=10m07s){:target="\_blank"} + +2.11.5. Ламбда-изрази и индексери [филм (2020/21)](https://www.youtube.com/watch?v=kbTCK7mKcdk&t=12m24s){:target="\_blank"} + +2.11.6. ламбда изрази за иницијализацију [филм (2020/21)](https://www.youtube.com/watch?v=kbTCK7mKcdk&t=14m31s){:target="\_blank"} + +**2.12.** Торке [филм (2020/21)](https://www.youtube.com/watch?v=kbTCK7mKcdk&t=17m07s){:target="\_blank"} + +2.12.1. Реализација торки [филм (2020/21)](https://www.youtube.com/watch?v=kbTCK7mKcdk&t=18m00s){:target="\_blank"} + +2.12.2. Угњеждене торке + +2.12.3. Торке и методи + +2.12.4. Реализација вредносних торки [филм (2020/21)](https://www.youtube.com/watch?v=kbTCK7mKcdk&t=23m08s){:target="\_blank"} + +2.12.5. Вреднсоне торке и методи + +2.12.6. Деконструкција код вредносних торки + +**2.13.** Асинхроно програмирање + +2.13.1. Реализација асинхроног програмирања помоћу `async`, `await` и класе `Task` + +2.13.2. Синхронизација више конкурентних активности + +**2.14.** LINQ [филм (2020/21)](https://www.youtube.com/watch?v=dtGQu1uN7n0&t=0m17s){:target="\_blank"} + +2.14.1. Реализација LINQ + +2.14.2. LINQ синтакса упита и LINQ синтакса метода + +2.14.3. LINQ упити над једним извором података + +2.14.4. LINQ упити над спојем више извора података + +**2.15.** Нулабилни типови + +2.15.1. Реализација нулабилних типова + +2.15.2. Методи, особине и оператори за нулабилне типове + +**2.16.** Слогови + +2.16.1. Реализација слогова + +2.16.2. Слогови и `init` особине + +2.16.3. Слогови и деконструкција + +2.16.4. Слогови и наслеђивање + +- [Примери](https://github.com/MatfRS2/primeri-predavanja-2021-22){:target="_blank"} + +--- + +**3.** Софтверско инжењерство [филм (2020/21)](https://www.youtube.com/watch?v=pCt-41sXSQ4&t=0m023s){:target="\_blank"} + +**3.1.** Проблеми са развојем софтвера + +**3.2.** Агилине методлогије развоја софтвера + +3.2.1. Манифест агилног развоја + +3.2.2. Скрам методологија + +3.2.3. Екстремно програмирање + +3.2.4. Илустративни пример (развој игре са картама) + +--- + +**4.** Развој управљан доменом [филм (2020/21)](https://www.youtube.com/watch?v=lrq4iUGOT1o&t=0m05s){:target="\_blank"} + +**4.1.** Опис развоја управљаног доменом + +4.1.1. Изградња доменског знања + +**4.2.** Свеобухватни језик + +4.2.1. Пореба за заједничким језиком + +4.2.2. Изградња свеобухватног језика + +**4.3.** Дизајн управљан доменом + +4.3.1. Градивни блокови за дизајн управљан доменом + +4.3.2. Слојевита архитектура + +4.3.3. Ентитети [филм (2020/21)](https://www.youtube.com/watch?v=SZeYgsBwGmo&t=0m12s){:target="\_blank"} + +4.3.4. Вредносни објекти + +4.3.5. Сервиси + +4.3.6. Модули + +4.3.7. Агрегати [филм 2 (2020/21)](https://www.youtube.com/watch?v=lfTvGjF1Y1U&t=0m03s){:target="\_blank"} + +4.3.8. Фабрике + +4.3.9. Складишта + +**4.4.** Рефакторизација за јаснији увид у суштину + +4.4.1. Непрекидна рефакторизација + +4.4.2. Истицање кључних појмова + +**4.5.** Заштита интегритета модела + +4.5.1. Ограничени контексти + +4.5.2. Непрекидна интеграција + +4.5.3. Контекстна мапа [филм 2 (2020/21)](https://www.youtube.com/watch?v=ZBvPayUfvBw&t=0m03s){:target="\_blank"} + +4.5.4. Механизми заштите и сарадње + +- Дељено језгро + +- Корисник-снадбевач + +- Конформиста + +- Антикорупцијски слој + +- Раздвојени путеви + +4.5.5. Отворени хост сервиси + +4.5.6. Дестилација + +--- + +**5.** Микросервиси [филм (2020/21)](https://www.youtube.com/watch?v=mW89dxC2Cuw&t=0m03s){:target="\_blank"} + +**5.1.** Опис микросервиса + +5.1.1. Карактеристике микросервиса + +5.1.2. Однос између микросервиса и архитектуре орјенитсане према севисима + +5.1.3. Однос између микросервиса и дргуих методлогија декомпозиције + +5.1.4. Нема универзалног најбољег решења + +**5.2.** Интеграција микросервиса + +5.2.1. Потрага за најбољом технологијом за интеграцију + +5.2.2. Интерфејс према корисницома + +5.2.3. Комуникаџија између микросервиса + +- Дељена база података + +- Синхрона наспрам асинхроне [филм (2020/21)](https://www.youtube.com/watch?v=c8XP8qMuZTw&t=0m03s){:target="\_blank"} + +- Оркестрација наспрам кореографије + +5.2.4. Технологије комуникације између микросервиса + +- RPC + +- REST + +- Имплементација асинхроне сарадње засноване на догађајима + +5.2.5. Сервиси као коначни аутомати + +5.2.6. Реактивна проширења + +5.2.7. DRY + +5.2.8. Приступ помоћу референци + +5.2.9. Верзије микросервиса [филм (2020/21)](https://www.youtube.com/watch?v=ohWXOlIaRTs&t=0m03s){:target="\_blank"} + +5.2.10. Кориснички интерфејси + +5.2.11. Интеграција са софвером другог произвођача + +**5.3.** Скалабилност код микросервиса + +5.3.1. Основни проблеми скалабилности микросервиса + +5.3.2. Архитектонске сигурносне мере + +5.3.3. Организација која спречава лом + +- Идемпотентност + +- Скалирање + +- Скалирање код база података + +- Кеширање [филм (2020/21)](https://www.youtube.com/watch?v=BdX5VD9cZH8&t=0m08s){:target="\_blank"} + +- Аутоскалирање + +5.3.4. CAP тероема + +5.3.5. Откривање сервиса + +5.3.6. Динамичка регистрација сервиса + +5.3.7. Документовање сервиса + +--- + +**6.** Архитектура заснована на микросервисима и контејнерима na .NET Core платформи + +**6.1.** Концепт чисте архитектуре + +**6.2.** Контејнери - Docker, Kybernetis + +**6.3.** .NET Core платформа + +**6.4.** Карактеристике разматраних решења + +--- + +- [Примери из књиге "Architecting Modern Web Applications with ASP.NET Core and Azure"](https://github.com/MatfRS2/eShopOnWeb){:target="_blank"} + +- [Примери из књиге "Modernize Existing .NET applications with Azure cloud and Windows Containers"](https://github.com/MatfRS2/eShopModernizing){:target="_blank"} + +- [Примери из књиге ".NET Microservices Architecture for Containerized .NET Applications"](https://github.com/MatfRS2/eShopOnContainers){:target="_blank"} + +[РС 2](../README.md) + +--- + +Creative Commons License
Овај садржај је заштићен лиценцом Creative Commons Attribution-NonCommercial 3.0 Unported License. + +За програмски код који се односи на садржај овог курса се може сматрати да је заштићен [MIT лиценцом](/LICENSE). \ No newline at end of file diff --git a/predavanja/README.md b/predavanja/README.md index 4c09fa2..c8e6591 100644 --- a/predavanja/README.md +++ b/predavanja/README.md @@ -8,149 +8,147 @@ --- -**1.** Информације о курсу [филм (2020/21)](https://www.youtube.com/watch?v=ng4uRSCo0KE&t=0m03s){:target="\_blank"} +**1.** Информације о курсу [презентација](prezentacije/00-informacije-o-kursu.pdf){:target="\_blank"} -**1.1.** Веб страна курса [филм (2020/21)](https://www.youtube.com/watch?v=ng4uRSCo0KE&t=0m03s){:target="\_blank"} +**1.1.** Веб страна курса -**1.2.** Семинарски радови [филм (2020/21)](https://www.youtube.com/watch?v=ng4uRSCo0KE&t=03m11s){:target="\_blank"} +**1.2.** Семинарски радови -**1.3.** Садржај курса [филм (2020/21)](https://www.youtube.com/watch?v=ng4uRSCo0KE&t=16m26s){:target="\_blank"} +**1.3.** Садржај курса -1.3.1. Теме које се проучавају [филм (2020/21)](https://www.youtube.com/watch?v=ng4uRSCo0KE&t=16m26s){:target="\_blank"} +1.3.1. Теме које се проучавају -1.3.2. Литература [филм (2020/21)](https://www.youtube.com/watch?v=ng4uRSCo0KE&t=36m32s){:target="\_blank"} +1.3.2. Литература -1.3.2. Коришћење језика C# у развојном окружењу Visual Studio [филм (2020/21)](https://www.youtube.com/watch?v=ng4uRSCo0KE&t=40m35s){:target="\_blank"} +**2.** Карактеристике програмског језика C# делом различите од програмског језика Јава [презентација](prezentacije/01-jezik-c#-karakteristike.pdf){:target="\_blank"} -**2.** Карактеристике програмског језика C# делом различите од програмског језика Јава [филм (2020/21)](https://www.youtube.com/watch?v=BQsAOER-tLg&t=1m19s){:target="\_blank"} +**2.1.** Функције -**2.1.** Функције [филм (2020/21)](https://www.youtube.com/watch?v=BQsAOER-tLg&t=3m37s){:target="\_blank"} +2.1.1. Именовани аргументи -2.1.1. Именовани аргументи [филм (2020/21)](https://www.youtube.com/watch?v=BQsAOER-tLg&t=5m56s){:target="\_blank"} +2.1.2. Опционални параметри -2.1.2. Опционални параметри [филм (2020/21)](https://www.youtube.com/watch?v=BQsAOER-tLg&t=18m35s){:target="\_blank"} +2.1.3. Параметри `out` -2.1.3. Параметри `out` [филм (2020/21)](https://www.youtube.com/watch?v=BQsAOER-tLg&t=26m24s){:target="\_blank"} +2.1.4. Параметри `ref` -2.1.4. Параметри `ref` [филм (2020/21)](https://www.youtube.com/watch?v=BQsAOER-tLg&t=32m35s){:target="\_blank"} +2.1.5. Методи проширења -2.1.5. Методи проширења [филм (2020/21)](https://www.youtube.com/watch?v=BQsAOER-tLg&t=40m19s){:target="\_blank"} +**2.2.** Класе -**2.2.** Класе [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=0m05s){:target="\_blank"} +2.2.1. Модификатори приступа -2.2.1. Модификатори приступа [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=0m16s){:target="\_blank"} +- Модификатор `public` -- Модификатор `public` [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=0m16s){:target="\_blank"} +- Модификатор `protected` -- Модификатор `protected` [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=02m19s){:target="\_blank"} +- Модификатор `internal` -- Модификатор `internal` [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=02m38s){:target="\_blank"} +- Модификатор `private` -- Модификатор `private` [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=04m20s){:target="\_blank"} +2.2.2. Превазилажење метода, витрулени методи -2.2.2. Превазилажење метода, витрулени методи [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=05m19s){:target="\_blank"} +2.2.3. Сакривање метода наткласе, `new` метод -2.2.3. Сакривање метода наткласе, `new` метод [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=08m49s){:target="\_blank"} +2.2.4. Превазилажење оператора -2.2.4. Превазилажење оператора [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=14m08s){:target="\_blank"} +2.2.5. Парцијалне класе -2.2.5. Парцијалне класе [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=21m19s){:target="\_blank"} +**2.3.** Интерфејси -**2.3.** Интерфејси [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=28m16s){:target="\_blank"} +2.3.1. Имплементација интерфејса -2.3.1. Имплементација интерфејса [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=28m16s){:target="\_blank"} +2.3.2. Експлицитна имплементација -2.3.2. Експлицитна имплементација [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=29m35s){:target="\_blank"} +**2.4.** Особине -**2.4.** Особине [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=31m33s){:target="\_blank"} +2.4.1. Имплементација особина, поље за подршку особине -2.4.1. Имплементација особина, поље за подршку особине [филм (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=34m25s){:target="\_blank"} +2.4.2. Сакривање особина -2.4.2. Сакривање особина [филм 1 (2020/21)](https://www.youtube.com/watch?v=hMtRTVhM5Jk&t=39m50s){:target="\_blank"} [филм 2 (2020/21)](https://www.youtube.com/watch?v=FVGQZb4FhAo&t=0m05s){:target="\_blank"} +2.4.3. Апстрактне особине -2.4.3. Апстрактне особине [филм (2020/21)](https://www.youtube.com/watch?v=FVGQZb4FhAo&t=4m58s){:target="\_blank"} +2.4.4. Аутоматски имплементиране особине -2.4.4. Аутоматски имплементиране особине [филм (2020/21)](https://www.youtube.com/watch?v=FVGQZb4FhAo&t=10m09s){:target="\_blank"} +**2.5.** Енумерисани типови -**2.5.** Енумерисани типови [филм (2020/21)](https://www.youtube.com/watch?v=FVGQZb4FhAo&t=12m10s){:target="\_blank"} +2.5.1. Реализација енумерисаних типова -2.5.1. Реализација енумерисаних типова [филм (2020/21)](https://www.youtube.com/watch?v=FVGQZb4FhAo&t=12m10s){:target="\_blank"} +2.5.2. Конверзија код енумерисаних типова -2.5.2. Конверзија код енумерисаних типова [филм (2020/21)](https://www.youtube.com/watch?v=FVGQZb4FhAo&t=20m02s){:target="\_blank"} +**2.6.** Генерички типови -**2.6.** Генерички типови [филм (2020/21)](https://www.youtube.com/watch?v=FVGQZb4FhAo&t=22m22s){:target="\_blank"} +2.6.1. Реализација генеричких типова -2.6.1. Реализација генеричких типова [филм (2020/21)](https://www.youtube.com/watch?v=FVGQZb4FhAo&t=22m38s){:target="\_blank"} +2.6.2. Имплементација генеричких интерфејса -2.6.2. Имплементација генеричких интерфејса [филм (2020/21)](https://www.youtube.com/watch?v=FVGQZb4FhAo&t=36m54s){:target="\_blank"} +2.6.3. Ограничења над генеричким типовима -2.6.3. Ограничења над генеричким типовима [филм (2020/21)](https://www.youtube.com/watch?v=FVGQZb4FhAo&t=39m15s){:target="\_blank"} +**2.7.** Индексери -**2.7.** Индексери [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=0m04s){:target="\_blank"} +2.7.1. Реализација индексера -2.7.1. Реализација индексера [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=0m40s){:target="\_blank"} +2.7.2. Преоптерећење индексера -2.7.2. Преоптерећење индексера [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=8m41s){:target="\_blank"} +**2.8.** Делегати -**2.8.** Делегати [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=12m50s){:target="\_blank"} +2.8.1. Реализација делегата -2.8.1. Реализација делегата [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=13m13s){:target="\_blank"} +2.8.2. Делегати као параметри метода -2.8.2. Делегати као параметри метода [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=16m36s){:target="\_blank"} +2.8.3. Делегати и симултано покретање -2.8.3. Делегати и симултано покретање [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=18m48s){:target="\_blank"} +2.8.4. Анонимни методи као делегати -2.8.4. Анонимни методи као делегати [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=23m10s){:target="\_blank"} +2.8.5. Генерички делегати -2.8.5. Генерички делегати [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=27m15s){:target="\_blank"} +2.8.6. Предефинисани делегати -2.8.6. Предефинисани делегати [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=30m13s){:target="\_blank"} +- Делегат `Func` -- Делегат `Func` [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=30m29s){:target="\_blank"} +- Делегат `Action` -- Делегат `Action` [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=33m12s){:target="\_blank"} +- Делегат `Predicate` -- Делегат `Predicate` [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=35m19s){:target="\_blank"} +**2.9.** Догађаји -**2.9.** Догађаји [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=39m27s){:target="\_blank"} +2.9.1. Реализација догађаја -2.9.1. Реализација догађаја [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=40m17s){:target="\_blank"} +2.9.2. Руковање догађајем -2.9.2. Руковање догађајем [филм (2020/21)](https://www.youtube.com/watch?v=ihRK3SKCkFE&t=42m01s){:target="\_blank"} +2.9.3. Параметри придружени догађају -2.9.3. Параметри придружени догађају [филм (2020/21)](https://www.youtube.com/watch?v=XVjCB6YAEj8&t=31m16s){:target="\_blank"} +**2.10.** Структуре -**2.10.** Структуре [филм (2020/21)](https://www.youtube.com/watch?v=XVjCB6YAEj8&t=36m37s){:target="\_blank"} +2.10.1. Реализација структура -2.10.1. Реализација структура [филм (2020/21)](https://www.youtube.com/watch?v=XVjCB6YAEj8&t=37m42s){:target="\_blank"} +2.10.2. Структуре, методи и особине -2.10.2. Структуре, методи и особине [филм (2020/21)](https://www.youtube.com/watch?v=XVjCB6YAEj8&t=39m38s){:target="\_blank"} +2.10.3. Структуре и догађаји -2.10.3. Структуре и догађаји [филм (2020/21)](https://www.youtube.com/watch?v=XVjCB6YAEj8&t=41m39s){:target="\_blank"} +**2.11.** Ламбда-изрази -**2.11.** Ламбда-изрази [филм (2020/21)](https://www.youtube.com/watch?v=kbTCK7mKcdk&t=0m04s){:target="\_blank"} +2.11.1. Реализација ламбда-израза -2.11.1. Реализација ламбда-израза [филм (2020/21)](https://www.youtube.com/watch?v=kbTCK7mKcdk&t=01m10s){:target="\_blank"} +2.11.2. Ламбда-изрази и особине -2.11.2. Ламбда-изрази и особине [филм (2020/21)](https://www.youtube.com/watch?v=kbTCK7mKcdk&t=05m17s){:target="\_blank"} +2.11.3. Ламбда-изрази и делегати -2.11.3. Ламбда-изрази и делегати [филм (2020/21)](https://www.youtube.com/watch?v=kbTCK7mKcdk&t=08m11s){:target="\_blank"} +2.11.4. Ламбда-изрази и догађаји -2.11.4. Ламбда-изрази и догађаји [филм (2020/21)](https://www.youtube.com/watch?v=kbTCK7mKcdk&t=10m07s){:target="\_blank"} +2.11.5. Ламбда-изрази и индексери -2.11.5. Ламбда-изрази и индексери [филм (2020/21)](https://www.youtube.com/watch?v=kbTCK7mKcdk&t=12m24s){:target="\_blank"} +2.11.6. Ламбда изрази за иницијализацију -2.11.6. ламбда изрази за иницијализацију [филм (2020/21)](https://www.youtube.com/watch?v=kbTCK7mKcdk&t=14m31s){:target="\_blank"} +**2.12.** Торке -**2.12.** Торке [филм (2020/21)](https://www.youtube.com/watch?v=kbTCK7mKcdk&t=17m07s){:target="\_blank"} - -2.12.1. Реализација торки [филм (2020/21)](https://www.youtube.com/watch?v=kbTCK7mKcdk&t=18m00s){:target="\_blank"} +2.12.1. Реализација торки 2.12.2. Угњеждене торке 2.12.3. Торке и методи -2.12.4. Реализација вредносних торки [филм (2020/21)](https://www.youtube.com/watch?v=kbTCK7mKcdk&t=23m08s){:target="\_blank"} +2.12.4. Реализација вредносних торки 2.12.5. Вреднсоне торке и методи @@ -162,7 +160,7 @@ 2.13.2. Синхронизација више конкурентних активности -**2.14.** LINQ [филм (2020/21)](https://www.youtube.com/watch?v=dtGQu1uN7n0&t=0m17s){:target="\_blank"} +**2.14.** LINQ 2.14.1. Реализација LINQ @@ -188,27 +186,29 @@ 2.16.4. Слогови и наслеђивање -- [Примери](https://github.com/MatfRS2/primeri-predavanja-2021-22){:target="_blank"} +- [Примери](https://github.com/MatfRS2/primeri-predavanja){:target="_blank"} --- -**3.** Софтверско инжењерство [филм (2020/21)](https://www.youtube.com/watch?v=pCt-41sXSQ4&t=0m023s){:target="\_blank"} +**3.** Софтверске грешке [презентација](prezentacije/02-01-softverske-greske.pdf){:target="\_blank"} + +**3.1.** Грешке, откази, кварови -**3.1.** Проблеми са развојем софтвера +**3.2.** Врсте софтврских грешака -**3.2.** Агилине методлогије развоја софтвера +3.2.1. "Смешне" грешке -3.2.1. Манифест агилног развоја +3.2.2. Грешке са мањим последицама -3.2.2. Скрам методологија +3.2.3. Грешке са великим последицама -3.2.3. Екстремно програмирање +3.2.4. Грешке са катастрофалним последицама -3.2.4. Илустративни пример (развој игре са картама) +**3.3.** Закључци анализе софтверских грешака --- -**4.** Развој управљан доменом [филм (2020/21)](https://www.youtube.com/watch?v=lrq4iUGOT1o&t=0m05s){:target="\_blank"} +**4.** Развој управљан доменом [презентација](prezentacije/03-01-razvoj-upravljan-domenom.pdf){:target="\_blank"} **4.1.** Опис развоја управљаног доменом @@ -216,7 +216,7 @@ **4.2.** Свеобухватни језик -4.2.1. Пореба за заједничким језиком +4.2.1. Потреба за заједничким језиком 4.2.2. Изградња свеобухватног језика @@ -224,139 +224,137 @@ 4.3.1. Градивни блокови за дизајн управљан доменом -4.3.2. Слојевита архитектура +- Слојевита архитектура -4.3.3. Ентитети [филм (2020/21)](https://www.youtube.com/watch?v=SZeYgsBwGmo&t=0m12s){:target="\_blank"} +- Ентитети -4.3.4. Вредносни објекти +- Вредносни објекти -4.3.5. Сервиси +- Сервиси -4.3.6. Модули +- Модули -4.3.7. Агрегати [филм 2 (2020/21)](https://www.youtube.com/watch?v=lfTvGjF1Y1U&t=0m03s){:target="\_blank"} +- Агрегати -4.3.8. Фабрике +- Фабрике -4.3.9. Складишта +- Складишта -**4.4.** Рефакторизација за јаснији увид у суштину +4.3.2. Рефакторизација ради остварења дубљег увида -4.4.1. Непрекидна рефакторизација +- Непрекидна рефакторизација -4.4.2. Истицање кључних појмова +- Истицање кључних појмова -**4.5.** Заштита интегритета модела +4.3.3. Заштита интегритета модела -4.5.1. Ограничени контексти +- Ограничени контексти -4.5.2. Непрекидна интеграција +- Непрекидна интеграција -4.5.3. Контекстна мапа [филм 2 (2020/21)](https://www.youtube.com/watch?v=ZBvPayUfvBw&t=0m03s){:target="\_blank"} +- Контекстна мапа -4.5.4. Механизми заштите и сарадње +- Механизми заштите и сарадње -- Дељено језгро + - Дељено језгро -- Корисник-снадбевач + - Корисник-снадбевач -- Конформиста + - Конформиста -- Антикорупцијски слој + - Антикорупцијски слој -- Раздвојени путеви + - Раздвојени путеви -4.5.5. Отворени хост сервиси +- Отворени хост сервиси -4.5.6. Дестилација +- Дестилација --- -**5.** Микросервиси [филм (2020/21)](https://www.youtube.com/watch?v=mW89dxC2Cuw&t=0m03s){:target="\_blank"} +**5.** Разматрања софтверских архитектура -**5.1.** Опис микросервиса +**5.1.** Апстракције код архитектуре. Чиста архитектура [презентација](prezentacije/04-01-cista-arhitektura.pdf){:target="\_blank"} -5.1.1. Карактеристике микросервиса +**5.2.** Архитектура са доменом у центру [презентација](prezentacije/04-02-arhitektura-sa-domenom-u-centru.pdf){:target="\_blank"} -5.1.2. Однос између микросервиса и архитектуре орјенитсане према севисима +**5.3.** Слојеви код софтверске архитектуре [презентација](prezentacije/04-03-arhitektura-slojevi.pdf){:target="\_blank"} -5.1.3. Однос између микросервиса и дргуих методлогија декомпозиције +**5.4.** Команде и упити [презентација](prezentacije/04-04-komande-i-upiti.pdf){:target="\_blank"} -5.1.4. Нема универзалног најбољег решења +**5.5.** Функционална организација [презентација](prezentacije/04-05-funkcionalna-organizacija.pdf){:target="\_blank"} -**5.2.** Интеграција микросервиса +--- -5.2.1. Потрага за најбољом технологијом за интеграцију +**6.** Микросервиси -5.2.2. Интерфејс према корисницома +**6.1.** Опис микросервиса [презентација](prezentacije/05-01-mikroservisi.pdf){:target="\_blank"} -5.2.3. Комуникаџија између микросервиса +6.1.1. Карактеристике микросервиса -- Дељена база података +6.1.2. Однос између микросервиса и архитектуре орјенитсане према севисима -- Синхрона наспрам асинхроне [филм (2020/21)](https://www.youtube.com/watch?v=c8XP8qMuZTw&t=0m03s){:target="\_blank"} +6.1.3. Однос између микросервиса и дргуих методлогија декомпозиције -- Оркестрација наспрам кореографије +6.1.4. Нема универзалног најбољег решења -5.2.4. Технологије комуникације између микросервиса +**6.2.** Реализација микросервиса [презентација](prezentacije/05-02-mikroservisi-realizacija.pdf){:target="\_blank"} -- RPC +6.2.1. Потрага за најбољом технологијом -- REST +6.2.2. Интерфејс према корисницома -- Имплементација асинхроне сарадње засноване на догађајима +6.2.3. Комуникаџија између микросервиса -5.2.5. Сервиси као коначни аутомати +- Дељена база података -5.2.6. Реактивна проширења +- Синхрона наспрам асинхроне -5.2.7. DRY +- Оркестрација наспрам кореографије -5.2.8. Приступ помоћу референци +6.2.4. Технологије комуникације између микросервиса -5.2.9. Верзије микросервиса [филм (2020/21)](https://www.youtube.com/watch?v=ohWXOlIaRTs&t=0m03s){:target="\_blank"} +- RPC -5.2.10. Кориснички интерфејси +- REST -5.2.11. Интеграција са софвером другог произвођача +- Имплементација асинхроне сарадње засноване на догађајима -**5.3.** Скалабилност код микросервиса +6.2.5. Скалабилност код микросервиса -5.3.1. Основни проблеми скалабилности микросервиса +- Основни проблеми скалабилности микросервиса -5.3.2. Архитектонске сигурносне мере +- Архитектонске сигурносне мере -5.3.3. Организација која спречава лом +- Организација која спречава лом -- Идемпотентност + - Идемпотентност -- Скалирање + - Скалирање -- Скалирање код база података + - Скалирање код база података -- Кеширање [филм (2020/21)](https://www.youtube.com/watch?v=BdX5VD9cZH8&t=0m08s){:target="\_blank"} + - Кеширање -- Аутоскалирање + - Аутоскалирање -5.3.4. CAP тероема +6.2.7. Откривање сервиса -5.3.5. Откривање сервиса +6.2.8. Динамичка регистрација сервиса -5.3.6. Динамичка регистрација сервиса +6.2.9. Документовање сервиса -5.3.7. Документовање сервиса +**6.3.** CAP тероема [презентација](prezentacije/05-03-cap-teorema.pdf){:target="\_blank"} --- -**6.** Архитектура заснована на микросервисима и контејнерима na .NET Core платформи - -**6.1.** Концепт чисте архитектуре +**7.** Архитектура заснована на микросервисима и контејнерима na .NET Core платформи -**6.2.** Контејнери - Docker, Kybernetis +**7.1.** Контејнери - Docker, Kybernetis -**6.3.** .NET Core платформа +**7.2.** .NET платформа -**6.4.** Карактеристике разматраних решења +**7.3.** Карактеристике разматраних решења --- diff --git a/predavanja/prezentacije/05-02-mikroservisi-reaizacija.pdf b/predavanja/prezentacije/05-02-mikroservisi-realizacija.pdf similarity index 100% rename from predavanja/prezentacije/05-02-mikroservisi-reaizacija.pdf rename to predavanja/prezentacije/05-02-mikroservisi-realizacija.pdf