Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
3 files changed, 55 insertions, 0 deletions
-rw-r--r--meta/meta.tsv1
-rw-r--r--src/teaching/oop-2025/index.du9
-rw-r--r--src/teaching/oop-2025/week15/index.du45
diff --git a/meta/meta.tsv b/meta/meta.tsv
index 0402990..b00599b 100644
--- a/meta/meta.tsv
+++ b/meta/meta.tsv
@@ -130,6 +130,7 @@ teaching/oop-2025/week11/index.html Задачи - ООП, Седмица 11, 29
teaching/oop-2025/week12/index.html Задачи - ООП, Седмица 12, 13.05.2026 Условията на задачите за упражнение.
teaching/oop-2025/week13/index.html Задачи - ООП, Седмица 13, 20.05.2026 Условията на задачите за упражнение.
teaching/oop-2025/week14/index.html Задачи - ООП, Седмица 14, 27.05.2026 Условията на задачите за упражнение.
+teaching/oop-2025/week15/index.html Задачи - ООП, Седмица 15, 03.06.2026 Условията на задачите за упражнение.
blog/connect-to-mysql-in-dotnet-ef/index.html Connect to MySql in .NET and Entity Framework Connecting a .NET application to a MySql database (with Entity Framework) can be tricky. Here is what works for me.
diff --git a/src/teaching/oop-2025/index.du b/src/teaching/oop-2025/index.du
index 8171ef3..6ca7131 100644
--- a/src/teaching/oop-2025/index.du
+++ b/src/teaching/oop-2025/index.du
@@ -161,3 +161,12 @@
|:
|:
[url ./week14 Задачи]
+
+|: 15
+|: 03.06.2026
+|: Комплексни задачи
+
+|:
+|:
+|:
+[url ./week15 Задачи]
diff --git a/src/teaching/oop-2025/week15/index.du b/src/teaching/oop-2025/week15/index.du
new file mode 100644
index 0000000..09e7a90
--- /dev/null
+++ b/src/teaching/oop-2025/week15/index.du
@@ -0,0 +1,45 @@
+# Задачи - ООП, Седмица 15, 03.06.2026
+
+'define expected-reading 3 min
+'define created 03 June 2026
+'define edited 03 June 2026
+[$pagenav]
+
+## За решаване
+
+### Задача
+
+Ще създадем система за създаване на постове от потребители, нещо подобно на Facebook/Reddit/...
+
+Реализирайте шаблонен клас [`Database`], който съхранява неограничено количество от обекти от тип [`T`] с идентификатор от тип [`K`].
+На всеки обект може да съответства един [*уникален*] идентификатор.
+За тип [`K`] можем да допуснем единствено, че поддържа [`operator==`].
+
+В [`Database`] трябва да може да се добавят и премахват елементи, спрямо даден идентификатор.
+Нека тези член-функции да връщат [`bool`], спрямо това дали операцията е успешна.
+
+Реализирайте клас [`User`], който въхранява имейл, потребителско име и парола.
+.bulleted
+- Имейла трябва да е в [url https://en.wikipedia.org/wiki/Email_address#Syntax коректен формат] (не е нужно 100% покритие на всички изисквания, но поне по-значимите ограничения да се проверяват).
+- Потребителското име може да съдържа латински бувки, цифри, тире и долна черта, като не може да започва с тире или цифра.
+- Паролата трябва да бъде поне 8 знака и да съдържа поне една цифра, една буква и един специален знак (нито цифра, нито буква)
+
+Реализирайте клас [`Post`], който съхранява идентификатор на потребител (какъв е типа на този идентификатор ще бъде описано по-късно), текстово съдържание с неограничен размер и контейнер с идентификатори на всички потребители, които са харесали поста.
+
+Реализирайте клас [`PostSystem`], който съхранява колекции от потребители и постове (използвайки [`Database`]), като е шаблонен спрямо типа на идентификатора на потребителя.
+Трябва да поддържа методи за регистриране на нов потребител, изтриване на акаунт, влизане в акаунт и излизане от акаунт.
+
+При влизане в акаунт, системата връща "токен" от тип [`A`], който се използва за всички операции, където е нужна информация на съществуващ потребител.
+Разбира се, всеки токен се пази в [`PostSystem`] и при потребителска операция се прави сравнение дали токена съответства на потребителя.
+При влизане в акаунт се проверява дали генерирания токен съществува, и ако да, тогава влизането се отказва.
+
+За тип [`A`] единствено можем да допуснем, че поддържа [`operator==`].
+Понеже не знаем типа и следователно не знаем как да се генерира токена, член-функцията за генериране не може да има реализация.
+
+Освен тези операции, влязъл потребител може да създаде пост, да изтрие пост и да маркира/отмаркира пост като харесан.
+
+Реализирайте наследник [`SecureForum`], където потребителските идентификатори и токени са целочислени неотрицателни поне 16-битови числа.
+Всеки потребител си има единствен токен след влизане в акаунта (т.е. може да влезе в акаунта само ако е излязъл).
+
+Реализирайте наследник [`StandardForum`], където потребителския идентификатор е целочислено неотрицателно число и токена е низ.
+Има неограничено количество токени за всеки потребител