<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.atp-fivt.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Zueva.mipt</id>
	<title>Public ATP Wiki - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.atp-fivt.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Zueva.mipt"/>
	<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Zueva.mipt"/>
	<updated>2026-10-16T15:34:00Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_Python._%D0%9F%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA_2024&amp;diff=3249</id>
		<title>Практикум Python. Продвинутый поток 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_Python._%D0%9F%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA_2024&amp;diff=3249"/>
		<updated>2024-08-30T14:45:41Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Материалы занятий */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
&lt;br /&gt;
== Программа курса==&lt;br /&gt;
План курса предварительный, в процессе чтения может меняться.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! #&lt;br /&gt;
! Дата&lt;br /&gt;
! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 02.09.2024&lt;br /&gt;
| Доп.темы базового синтаксиса в Python.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 09.09.2024&lt;br /&gt;
| Замыкания и декораторы.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 16.09.2024&lt;br /&gt;
| ООП. Концепция и реализация в Python.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 23.09.2024&lt;br /&gt;
| Виртуальные среды. Зависимости. Git.&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 30.09.2024&lt;br /&gt;
| Tkinter.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 07.10.2024&lt;br /&gt;
| Числовые массивы. NumPy.&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 14.10.2024&lt;br /&gt;
| Табличные данные. Pandas.&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 21.10.2024&lt;br /&gt;
| Визуализация данных. Matplotlib, Seaborn.&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 28.10.2024&lt;br /&gt;
| Веб-клиенты. API. Парсинг и скрапинг.&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 04.11.2024&lt;br /&gt;
| Веб-демонстрации. Streamlit, Gradio, Dash.&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 11.11.2024&lt;br /&gt;
| Telegram-боты.&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 18.11.2024&lt;br /&gt;
| Асинхронное программирование.&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 25.11.2024&lt;br /&gt;
| Многопоточные приложения.&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 02.12.2024&lt;br /&gt;
| Extra Topic.&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 09.12.2024&lt;br /&gt;
| Extra Topic.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Честнов Никита&lt;br /&gt;
&lt;br /&gt;
==== Преподаватели курса====&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
Выкладываются по [https://drive.google.com/drive/folders/1MN2da25cpWpxCyEIGLPnjJ9NKtRsSsDf ссылке].&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Объявляются на первом занятии, будет доступно в материале первого занятия.&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_Python._%D0%9F%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA_2024&amp;diff=3248</id>
		<title>Практикум Python. Продвинутый поток 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_Python._%D0%9F%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA_2024&amp;diff=3248"/>
		<updated>2024-08-30T14:45:16Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Материалы занятий */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
&lt;br /&gt;
== Программа курса==&lt;br /&gt;
План курса предварительный, в процессе чтения может меняться.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! #&lt;br /&gt;
! Дата&lt;br /&gt;
! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 02.09.2024&lt;br /&gt;
| Доп.темы базового синтаксиса в Python.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 09.09.2024&lt;br /&gt;
| Замыкания и декораторы.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 16.09.2024&lt;br /&gt;
| ООП. Концепция и реализация в Python.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 23.09.2024&lt;br /&gt;
| Виртуальные среды. Зависимости. Git.&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 30.09.2024&lt;br /&gt;
| Tkinter.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 07.10.2024&lt;br /&gt;
| Числовые массивы. NumPy.&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 14.10.2024&lt;br /&gt;
| Табличные данные. Pandas.&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 21.10.2024&lt;br /&gt;
| Визуализация данных. Matplotlib, Seaborn.&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 28.10.2024&lt;br /&gt;
| Веб-клиенты. API. Парсинг и скрапинг.&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 04.11.2024&lt;br /&gt;
| Веб-демонстрации. Streamlit, Gradio, Dash.&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 11.11.2024&lt;br /&gt;
| Telegram-боты.&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 18.11.2024&lt;br /&gt;
| Асинхронное программирование.&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 25.11.2024&lt;br /&gt;
| Многопоточные приложения.&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 02.12.2024&lt;br /&gt;
| Extra Topic.&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 09.12.2024&lt;br /&gt;
| Extra Topic.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Честнов Никита&lt;br /&gt;
&lt;br /&gt;
==== Преподаватели курса====&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
Выкладываются по ссылке.&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Объявляются на первом занятии, будет доступно в материале первого занятия.&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_Python._%D0%9F%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA_2024&amp;diff=3247</id>
		<title>Практикум Python. Продвинутый поток 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_Python._%D0%9F%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA_2024&amp;diff=3247"/>
		<updated>2024-08-30T14:44:46Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Оценки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
&lt;br /&gt;
== Программа курса==&lt;br /&gt;
План курса предварительный, в процессе чтения может меняться.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! #&lt;br /&gt;
! Дата&lt;br /&gt;
! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 02.09.2024&lt;br /&gt;
| Доп.темы базового синтаксиса в Python.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 09.09.2024&lt;br /&gt;
| Замыкания и декораторы.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 16.09.2024&lt;br /&gt;
| ООП. Концепция и реализация в Python.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 23.09.2024&lt;br /&gt;
| Виртуальные среды. Зависимости. Git.&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 30.09.2024&lt;br /&gt;
| Tkinter.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 07.10.2024&lt;br /&gt;
| Числовые массивы. NumPy.&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 14.10.2024&lt;br /&gt;
| Табличные данные. Pandas.&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 21.10.2024&lt;br /&gt;
| Визуализация данных. Matplotlib, Seaborn.&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 28.10.2024&lt;br /&gt;
| Веб-клиенты. API. Парсинг и скрапинг.&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 04.11.2024&lt;br /&gt;
| Веб-демонстрации. Streamlit, Gradio, Dash.&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 11.11.2024&lt;br /&gt;
| Telegram-боты.&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 18.11.2024&lt;br /&gt;
| Асинхронное программирование.&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 25.11.2024&lt;br /&gt;
| Многопоточные приложения.&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 02.12.2024&lt;br /&gt;
| Extra Topic.&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 09.12.2024&lt;br /&gt;
| Extra Topic.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Честнов Никита&lt;br /&gt;
&lt;br /&gt;
==== Преподаватели курса====&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Объявляются на первом занятии, будет доступно в материале первого занятия.&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_Python._%D0%9F%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA_2024&amp;diff=3246</id>
		<title>Практикум Python. Продвинутый поток 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_Python._%D0%9F%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA_2024&amp;diff=3246"/>
		<updated>2024-08-30T14:44:04Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Программа курса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
&lt;br /&gt;
== Программа курса==&lt;br /&gt;
План курса предварительный, в процессе чтения может меняться.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! #&lt;br /&gt;
! Дата&lt;br /&gt;
! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 02.09.2024&lt;br /&gt;
| Доп.темы базового синтаксиса в Python.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 09.09.2024&lt;br /&gt;
| Замыкания и декораторы.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 16.09.2024&lt;br /&gt;
| ООП. Концепция и реализация в Python.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 23.09.2024&lt;br /&gt;
| Виртуальные среды. Зависимости. Git.&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 30.09.2024&lt;br /&gt;
| Tkinter.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 07.10.2024&lt;br /&gt;
| Числовые массивы. NumPy.&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 14.10.2024&lt;br /&gt;
| Табличные данные. Pandas.&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 21.10.2024&lt;br /&gt;
| Визуализация данных. Matplotlib, Seaborn.&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 28.10.2024&lt;br /&gt;
| Веб-клиенты. API. Парсинг и скрапинг.&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 04.11.2024&lt;br /&gt;
| Веб-демонстрации. Streamlit, Gradio, Dash.&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 11.11.2024&lt;br /&gt;
| Telegram-боты.&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 18.11.2024&lt;br /&gt;
| Асинхронное программирование.&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 25.11.2024&lt;br /&gt;
| Многопоточные приложения.&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 02.12.2024&lt;br /&gt;
| Extra Topic.&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 09.12.2024&lt;br /&gt;
| Extra Topic.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Честнов Никита&lt;br /&gt;
&lt;br /&gt;
==== Преподаватели курса====&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_Python._%D0%9F%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA_2024&amp;diff=3245</id>
		<title>Практикум Python. Продвинутый поток 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_Python._%D0%9F%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA_2024&amp;diff=3245"/>
		<updated>2024-08-30T14:41:23Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Программа курса и сдача домашек */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
&lt;br /&gt;
== Программа курса==&lt;br /&gt;
План курса предварительный, в процессе чтения может меняться.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! #&lt;br /&gt;
! Дата&lt;br /&gt;
! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 02.09.2024&lt;br /&gt;
| Особенности языка Python. Среды разработки.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 09.09.2024&lt;br /&gt;
| Базовые типы данных. Ввод-вывод данных. Списки и кортежи.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 16.09.2024&lt;br /&gt;
| Словари и множества. Условный оператор. Тернарный условный оператор.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 23.09.2024&lt;br /&gt;
| Циклы. Функции.&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 30.09.2024&lt;br /&gt;
| ООП. Концепция и реализация в Python.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 07.10.2024&lt;br /&gt;
| Виртуальные среды. Зависимости. Git.&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 14.10.2024&lt;br /&gt;
| Создание GUI. Tkinter.&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 21.10.2024&lt;br /&gt;
| Числовые массивы. NumPy.&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 28.10.2024&lt;br /&gt;
| Табличные данные. Pandas.&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 04.11.2024&lt;br /&gt;
| Визуализация данных. Matplotlib, Seaborn, Plotly.&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 11.11.2024&lt;br /&gt;
| Веб-клиенты. API. Парсинг и скрапинг.&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 18.11.2024&lt;br /&gt;
| Веб-демонстрации. Streamlit. Dash.&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 25.11.2024&lt;br /&gt;
| Telegram-боты.&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 02.12.2024&lt;br /&gt;
| Многопоточные приложения.&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 09.12.2024&lt;br /&gt;
| Extra Topic.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Честнов Никита&lt;br /&gt;
&lt;br /&gt;
==== Преподаватели курса====&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_Python._%D0%91%D0%B0%D0%B7%D0%BE%D0%B2%D1%8B%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA_2024&amp;diff=3244</id>
		<title>Практикум Python. Базовый поток 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_Python._%D0%91%D0%B0%D0%B7%D0%BE%D0%B2%D1%8B%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA_2024&amp;diff=3244"/>
		<updated>2024-08-30T14:40:57Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Программа курса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
&lt;br /&gt;
== Программа курса==&lt;br /&gt;
План курса предварительный, в процессе чтения может меняться.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! #&lt;br /&gt;
! Дата&lt;br /&gt;
! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 02.09.2024&lt;br /&gt;
| Особенности языка Python. Среды разработки.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 09.09.2024&lt;br /&gt;
| Базовые типы данных. Ввод-вывод данных. Списки и кортежи.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 16.09.2024&lt;br /&gt;
| Словари и множества. Условный оператор. Тернарный условный оператор.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 23.09.2024&lt;br /&gt;
| Циклы. Функции.&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 30.09.2024&lt;br /&gt;
| ООП. Концепция и реализация в Python.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 07.10.2024&lt;br /&gt;
| Виртуальные среды. Зависимости. Git.&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 14.10.2024&lt;br /&gt;
| Создание GUI. Tkinter.&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 21.10.2024&lt;br /&gt;
| Числовые массивы. NumPy.&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 28.10.2024&lt;br /&gt;
| Табличные данные. Pandas.&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 04.11.2024&lt;br /&gt;
| Визуализация данных. Matplotlib, Seaborn, Plotly.&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 11.11.2024&lt;br /&gt;
| Веб-клиенты. API. Парсинг и скрапинг.&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 18.11.2024&lt;br /&gt;
| Веб-демонстрации. Streamlit. Dash.&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 25.11.2024&lt;br /&gt;
| Telegram-боты.&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 02.12.2024&lt;br /&gt;
| Многопоточные приложения.&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 09.12.2024&lt;br /&gt;
| Extra Topic.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Честнов Никита&lt;br /&gt;
&lt;br /&gt;
==== Преподаватели курса====&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_Python._%D0%91%D0%B0%D0%B7%D0%BE%D0%B2%D1%8B%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA_2024&amp;diff=3243</id>
		<title>Практикум Python. Базовый поток 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_Python._%D0%91%D0%B0%D0%B7%D0%BE%D0%B2%D1%8B%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA_2024&amp;diff=3243"/>
		<updated>2024-08-30T14:35:02Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Программа курса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
&lt;br /&gt;
== Программа курса==&lt;br /&gt;
План курса предварительный, в процессе чтения может меняться.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! #&lt;br /&gt;
! Дата&lt;br /&gt;
! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 11.09.2024&lt;br /&gt;
| Цифровое изображение&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 18.09.2024&lt;br /&gt;
| Основы обработки изображений&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 25.09.2024&lt;br /&gt;
| Сжатие изображений, Преобразование Фурье&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 02.10.2024&lt;br /&gt;
| Классификация изображений. Введение в нейросети&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 09.10.2024&lt;br /&gt;
| Сверточные нейросетевые архитектуры&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 16.10.2024&lt;br /&gt;
| Трансформеры и сверточные нейронные сети с большими ядрами&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 23.10.2024&lt;br /&gt;
| Поиск похожих изображений&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 30.10.2024&lt;br /&gt;
| Детекторы объектов&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 06.11.2024&lt;br /&gt;
| Сегментация изображений&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 13.11.2024&lt;br /&gt;
| Основы обработки видео&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 20.11.2024&lt;br /&gt;
| Self-supervised learning, foundation models&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 27.11.2024&lt;br /&gt;
| Перенос стиля, superresolution, GAN, VAE (начало)&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 04.12.2024&lt;br /&gt;
| VAE (продолжение), Diffusion&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 11.12.2024&lt;br /&gt;
| Чтение статей, организация семинара, выбор аспирантуры&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Честнов Никита&lt;br /&gt;
&lt;br /&gt;
==== Преподаватели курса====&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_Python._%D0%91%D0%B0%D0%B7%D0%BE%D0%B2%D1%8B%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA_2024&amp;diff=3242</id>
		<title>Практикум Python. Базовый поток 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_Python._%D0%91%D0%B0%D0%B7%D0%BE%D0%B2%D1%8B%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA_2024&amp;diff=3242"/>
		<updated>2024-08-30T14:34:13Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Программа курса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
&lt;br /&gt;
== Программа курса==&lt;br /&gt;
План курса предварительный, в процессе чтения может меняться.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! #&lt;br /&gt;
! Дата&lt;br /&gt;
! Лекция&lt;br /&gt;
! Семинар&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 11.09.2024&lt;br /&gt;
| Цифровое изображение&lt;br /&gt;
| Введение в практическую часть курса, Работа с numpy&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 18.09.2024&lt;br /&gt;
| Основы обработки изображений&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 25.09.2024&lt;br /&gt;
| Сжатие изображений, Преобразование Фурье&lt;br /&gt;
| Преобразование Фурье&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 02.10.2024&lt;br /&gt;
| Классификация изображений. Введение в нейросети&lt;br /&gt;
| Иерархия абстракций: numpy, pytorch, pytorch-lightning&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 09.10.2024&lt;br /&gt;
| Сверточные нейросетевые архитектуры&lt;br /&gt;
| Нейросетевые задания курса, Базовое обучение нейросетей&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 16.10.2024&lt;br /&gt;
| Трансформеры и сверточные нейронные сети с большими ядрами&lt;br /&gt;
| Разбор устройства ViT, Приемы для дообучения нейросетей&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 23.10.2024&lt;br /&gt;
| Поиск похожих изображений&lt;br /&gt;
| Метрическое обучение, Эффективность тензорных вычислений&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 30.10.2024&lt;br /&gt;
| Детекторы объектов&lt;br /&gt;
| Детектирование объектов&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 06.11.2024&lt;br /&gt;
| Сегментация изображений&lt;br /&gt;
| Простая нейросеть для сегментации&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 13.11.2024&lt;br /&gt;
| Основы обработки видео&lt;br /&gt;
| Работа с видео&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 20.11.2024&lt;br /&gt;
| Self-supervised learning, foundation models&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 27.11.2024&lt;br /&gt;
| Перенос стиля, superresolution, GAN, VAE (начало)&lt;br /&gt;
| GAN&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 04.12.2024&lt;br /&gt;
| VAE (продолжение), Diffusion&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 11.12.2024&lt;br /&gt;
| &lt;br /&gt;
| Чтение статей, организация семинара, выбор аспирантуры&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Честнов Никита&lt;br /&gt;
&lt;br /&gt;
==== Преподаватели курса====&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_Python._%D0%91%D0%B0%D0%B7%D0%BE%D0%B2%D1%8B%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA_2024&amp;diff=3241</id>
		<title>Практикум Python. Базовый поток 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_Python._%D0%91%D0%B0%D0%B7%D0%BE%D0%B2%D1%8B%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA_2024&amp;diff=3241"/>
		<updated>2024-08-30T14:32:28Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Программа курса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
&lt;br /&gt;
== Программа курса==&lt;br /&gt;
План курса предварительный, в процессе чтения может меняться.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! #&lt;br /&gt;
! Дата&lt;br /&gt;
! Лекция&lt;br /&gt;
! Семинар&lt;br /&gt;
! Домашнее задание&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 11.09.2024&lt;br /&gt;
| Цифровое изображение&lt;br /&gt;
| Введение в практическую часть курса, Работа с numpy&lt;br /&gt;
| Демозаикинг&amp;lt;br /&amp;gt;Прокудин-Горский&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 18.09.2024&lt;br /&gt;
| Основы обработки изображений&lt;br /&gt;
| Базовая обработка изображений&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 25.09.2024&lt;br /&gt;
| Сжатие изображений, Преобразование Фурье&lt;br /&gt;
| Преобразование Фурье&lt;br /&gt;
| Сжатие изображение (PCA, JPEG)&amp;lt;br /&amp;gt;Обратная свертка&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 02.10.2024&lt;br /&gt;
| Классификация изображений. Введение в нейросети&lt;br /&gt;
| Иерархия абстракций: numpy, pytorch, pytorch-lightning&lt;br /&gt;
| Реализация нейросети на numpy&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 09.10.2024&lt;br /&gt;
| Сверточные нейросетевые архитектуры&lt;br /&gt;
| Нейросетевые задания курса, Базовое обучение нейросетей&lt;br /&gt;
| Регрессия точек лица&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 16.10.2024&lt;br /&gt;
| Трансформеры и сверточные нейронные сети с большими ядрами&lt;br /&gt;
| Разбор устройства ViT, Приемы для дообучения нейросетей&lt;br /&gt;
| Дообучение нейросети&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 23.10.2024&lt;br /&gt;
| Поиск похожих изображений&lt;br /&gt;
| Метрическое обучение, Эффективность тензорных вычислений&lt;br /&gt;
| Классификация редких дорожных знаков&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 30.10.2024&lt;br /&gt;
| Детекторы объектов&lt;br /&gt;
| Детектирование объектов&lt;br /&gt;
| Простой нейросетевой детектор&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 06.11.2024&lt;br /&gt;
| Сегментация изображений&lt;br /&gt;
| Простая нейросеть для сегментации&lt;br /&gt;
| Сегментация изображений&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 13.11.2024&lt;br /&gt;
| Основы обработки видео&lt;br /&gt;
| Работа с видео&lt;br /&gt;
| Трекинг объектов&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 20.11.2024&lt;br /&gt;
| Self-supervised learning, foundation models&lt;br /&gt;
| Self-supervised learning&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 27.11.2024&lt;br /&gt;
| Перенос стиля, superresolution, GAN, VAE (начало)&lt;br /&gt;
| AE, VAE, GAN&lt;br /&gt;
| GAN&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 04.12.2024&lt;br /&gt;
| VAE (продолжение), Diffusion&lt;br /&gt;
| Diffusion&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 11.12.2024&lt;br /&gt;
| &lt;br /&gt;
| Чтение статей, организация семинара, выбор аспирантуры&lt;br /&gt;
| Квантование простой нейросети&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Честнов Никита&lt;br /&gt;
&lt;br /&gt;
==== Преподаватели курса====&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_Python._%D0%91%D0%B0%D0%B7%D0%BE%D0%B2%D1%8B%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA_2024&amp;diff=3240</id>
		<title>Практикум Python. Базовый поток 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_Python._%D0%91%D0%B0%D0%B7%D0%BE%D0%B2%D1%8B%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA_2024&amp;diff=3240"/>
		<updated>2024-08-30T14:32:20Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Программа курса и сдача домашек */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
&lt;br /&gt;
== Программа курса==&lt;br /&gt;
План курса предварительный, в процессе чтения может меняться.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! #&lt;br /&gt;
! Дата&lt;br /&gt;
! Лекция&lt;br /&gt;
! Семинар&lt;br /&gt;
! Домашнее задание&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 11.09.2024&lt;br /&gt;
| Цифровое изображение&lt;br /&gt;
| Введение в практическую часть курса, Работа с numpy&lt;br /&gt;
| Демозаикинг&amp;lt;br /&amp;gt;Прокудин-Горский&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 18.09.2024&lt;br /&gt;
| Основы обработки изображений&lt;br /&gt;
| Базовая обработка изображений&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 25.09.2024&lt;br /&gt;
| Сжатие изображений, Преобразование Фурье&lt;br /&gt;
| Преобразование Фурье&lt;br /&gt;
| Сжатие изображение (PCA, JPEG)&amp;lt;br /&amp;gt;Обратная свертка&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 02.10.2024&lt;br /&gt;
| Классификация изображений. Введение в нейросети&lt;br /&gt;
| Иерархия абстракций: numpy, pytorch, pytorch-lightning&lt;br /&gt;
| Реализация нейросети на numpy&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 09.10.2024&lt;br /&gt;
| Сверточные нейросетевые архитектуры&lt;br /&gt;
| Нейросетевые задания курса, Базовое обучение нейросетей&lt;br /&gt;
| Регрессия точек лица&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 16.10.2024&lt;br /&gt;
| Трансформеры и сверточные нейронные сети с большими ядрами&lt;br /&gt;
| Разбор устройства ViT, Приемы для дообучения нейросетей&lt;br /&gt;
| Дообучение нейросети&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 23.10.2024&lt;br /&gt;
| Поиск похожих изображений&lt;br /&gt;
| Метрическое обучение, Эффективность тензорных вычислений&lt;br /&gt;
| Классификация редких дорожных знаков&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 30.10.2024&lt;br /&gt;
| Детекторы объектов&lt;br /&gt;
| Детектирование объектов&lt;br /&gt;
| Простой нейросетевой детектор&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 06.11.2024&lt;br /&gt;
| Сегментация изображений&lt;br /&gt;
| Простая нейросеть для сегментации&lt;br /&gt;
| Сегментация изображений&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 13.11.2024&lt;br /&gt;
| Основы обработки видео&lt;br /&gt;
| Работа с видео&lt;br /&gt;
| Трекинг объектов&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 20.11.2024&lt;br /&gt;
| Self-supervised learning, foundation models&lt;br /&gt;
| Self-supervised learning&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 27.11.2024&lt;br /&gt;
| Перенос стиля, superresolution, GAN, VAE (начало)&lt;br /&gt;
| AE, VAE, GAN&lt;br /&gt;
| GAN&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 04.12.2024&lt;br /&gt;
| VAE (продолжение), Diffusion&lt;br /&gt;
| Diffusion&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 11.12.2024&lt;br /&gt;
| &lt;br /&gt;
| Чтение статей, организация семинара, выбор аспирантуры&lt;br /&gt;
| Квантование простой нейросети&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Честнов Никита&lt;br /&gt;
&lt;br /&gt;
==== Преподаватели курса====&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2_%D0%B8_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_2024&amp;diff=3239</id>
		<title>Архитектура компьютеров и операционные системы 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2_%D0%B8_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_2024&amp;diff=3239"/>
		<updated>2024-08-30T14:30:40Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* План курса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
&lt;br /&gt;
=== Программа курса ===&lt;br /&gt;
Указаны примерные даты&lt;br /&gt;
= План курса =&lt;br /&gt;
&lt;br /&gt;
План курса предварительный, в процессе чтения может меняться.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Тема&lt;br /&gt;
! Формат&lt;br /&gt;
|-&lt;br /&gt;
| Зачем нужна ОС?&lt;br /&gt;
| Лекция&lt;br /&gt;
|-&lt;br /&gt;
| Базовые инструменты разработки&lt;br /&gt;
| Семинар&lt;br /&gt;
|-&lt;br /&gt;
| Представление данных в компьютере&lt;br /&gt;
| Лекция/Семинар&lt;br /&gt;
|-&lt;br /&gt;
| Файловые системы&lt;br /&gt;
| Лекция/Семинар&lt;br /&gt;
|-&lt;br /&gt;
| Ассемблер (x86)&lt;br /&gt;
| Лекция/Семинар&lt;br /&gt;
|-&lt;br /&gt;
| Ассемблер (AArch64)&lt;br /&gt;
| Лекция/Семинар&lt;br /&gt;
|-&lt;br /&gt;
| Виртуальная память&lt;br /&gt;
| Лекция/Семинар&lt;br /&gt;
|-&lt;br /&gt;
| Процессы и потоки&lt;br /&gt;
| Лекция/Семинар&lt;br /&gt;
|-&lt;br /&gt;
| Введение в многопоточное программирование&lt;br /&gt;
| Лекция/Семинар&lt;br /&gt;
|-&lt;br /&gt;
| Межпроцессное взаимодействие&lt;br /&gt;
| Лекция/Семинар&lt;br /&gt;
|-&lt;br /&gt;
| Сети 1&lt;br /&gt;
| Лекция/Семинар&lt;br /&gt;
|-&lt;br /&gt;
| Сети 2&lt;br /&gt;
| Лекция/Семинар&lt;br /&gt;
|-&lt;br /&gt;
| Динамическая и статическая линковка&lt;br /&gt;
| Лекция/Семинар&lt;br /&gt;
|-&lt;br /&gt;
| Механизмы изоляции&lt;br /&gt;
| Лекция&lt;br /&gt;
|-&lt;br /&gt;
| Механизмы изоляции&lt;br /&gt;
| Семинар&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Команда курса==&lt;br /&gt;
&#039;&#039;&#039;Лектор&#039;&#039;&#039; – Андреев Александр Николаевич&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Семинаристы&#039;&#039;&#039;&lt;br /&gt;
* Абрамов Максим Сергеевич&lt;br /&gt;
* Манаков Данила Дмитриевич&lt;br /&gt;
* Ерошин Виталий Сергеевич&lt;br /&gt;
* Касымалиева Жанель&lt;br /&gt;
* Немова Ольга Юрьевна&lt;br /&gt;
* Драгун Константин Юрьевич&lt;br /&gt;
* Калмыков Андрей Сергеевич&lt;br /&gt;
* Шестакова Ксения Олеговна&lt;br /&gt;
* Климов Артем Юрьевич&lt;br /&gt;
* Сенин Игорь Александрович&lt;br /&gt;
* Гулевич Дмитрий Сергеевич&lt;br /&gt;
* Белов Максим Алексеевич&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ассистенты&#039;&#039;&#039;&lt;br /&gt;
* Морозов Артемий Андреевич&lt;br /&gt;
* Копанов Антон Олегович&lt;br /&gt;
* Афентьев Кирилл Викторович&lt;br /&gt;
* Стуров Фёдор Алексеевич&lt;br /&gt;
* Андреева Камилла Алексеевна&lt;br /&gt;
* Аллаберенов Керим&lt;br /&gt;
* Поляков Геннадий Федорович&lt;br /&gt;
* Исаченко Павел Игоревич&lt;br /&gt;
* Кидун Станислав Русланович&lt;br /&gt;
* Боймуродов Хабибулло Нозимбоевич&lt;br /&gt;
* Клиницкий Иван Александрович&lt;br /&gt;
* Сахаров Александр Александрович&lt;br /&gt;
* Хусрабов Рустам Ёркинбекович&lt;br /&gt;
* Молданазаров Нурдаулет&lt;br /&gt;
* Бояров Алексей Алексеевич&lt;br /&gt;
* Павлюковец Виталий Андреевич&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2_%D0%B8_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_2024&amp;diff=3238</id>
		<title>Архитектура компьютеров и операционные системы 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2_%D0%B8_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_2024&amp;diff=3238"/>
		<updated>2024-08-30T14:26:32Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Команда курса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
&lt;br /&gt;
=== Программа курса ===&lt;br /&gt;
Указаны примерные даты&lt;br /&gt;
= План курса =&lt;br /&gt;
&lt;br /&gt;
План курса предварительный, в процессе чтения может меняться.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Тема&lt;br /&gt;
! Формат&lt;br /&gt;
|-&lt;br /&gt;
| Введение в практическую часть курса, Работа с numpy&lt;br /&gt;
| Демозаикинг&amp;lt;br /&amp;gt;Прокудин-Горский&lt;br /&gt;
|-&lt;br /&gt;
| Основы обработки изображений&lt;br /&gt;
| Базовая обработка изображений&lt;br /&gt;
|-&lt;br /&gt;
| Преобразование Фурье&lt;br /&gt;
| Сжатие изображение (PCA, JPEG)&amp;lt;br /&amp;gt;Обратная свертка&lt;br /&gt;
|-&lt;br /&gt;
| Иерархия абстракций: numpy, pytorch, pytorch-lightning&lt;br /&gt;
| Реализация нейросети на numpy&lt;br /&gt;
|-&lt;br /&gt;
| Нейросетевые задания курса, Базовое обучение нейросетей&lt;br /&gt;
| Регрессия точек лица&lt;br /&gt;
|-&lt;br /&gt;
| Разбор устройства ViT, Приемы для дообучения нейросетей&lt;br /&gt;
| Дообучение нейросети&lt;br /&gt;
|-&lt;br /&gt;
| Метрическое обучение, Эффективность тензорных вычислений&lt;br /&gt;
| Классификация редких дорожных знаков&lt;br /&gt;
|-&lt;br /&gt;
| Детектирование объектов&lt;br /&gt;
| Простой нейросетевой детектор&lt;br /&gt;
|-&lt;br /&gt;
| Простая нейросеть для сегментации&lt;br /&gt;
| Сегментация изображений&lt;br /&gt;
|-&lt;br /&gt;
| Работа с видео&lt;br /&gt;
| Трекинг объектов&lt;br /&gt;
|-&lt;br /&gt;
| Self-supervised learning&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AE, VAE, GAN&lt;br /&gt;
| GAN&lt;br /&gt;
|-&lt;br /&gt;
| Diffusion&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Чтение статей, организация семинара, выбор аспирантуры&lt;br /&gt;
| Квантование простой нейросети&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Команда курса==&lt;br /&gt;
&#039;&#039;&#039;Лектор&#039;&#039;&#039; – Андреев Александр Николаевич&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Семинаристы&#039;&#039;&#039;&lt;br /&gt;
* Абрамов Максим Сергеевич&lt;br /&gt;
* Манаков Данила Дмитриевич&lt;br /&gt;
* Ерошин Виталий Сергеевич&lt;br /&gt;
* Касымалиева Жанель&lt;br /&gt;
* Немова Ольга Юрьевна&lt;br /&gt;
* Драгун Константин Юрьевич&lt;br /&gt;
* Калмыков Андрей Сергеевич&lt;br /&gt;
* Шестакова Ксения Олеговна&lt;br /&gt;
* Климов Артем Юрьевич&lt;br /&gt;
* Сенин Игорь Александрович&lt;br /&gt;
* Гулевич Дмитрий Сергеевич&lt;br /&gt;
* Белов Максим Алексеевич&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ассистенты&#039;&#039;&#039;&lt;br /&gt;
* Морозов Артемий Андреевич&lt;br /&gt;
* Копанов Антон Олегович&lt;br /&gt;
* Афентьев Кирилл Викторович&lt;br /&gt;
* Стуров Фёдор Алексеевич&lt;br /&gt;
* Андреева Камилла Алексеевна&lt;br /&gt;
* Аллаберенов Керим&lt;br /&gt;
* Поляков Геннадий Федорович&lt;br /&gt;
* Исаченко Павел Игоревич&lt;br /&gt;
* Кидун Станислав Русланович&lt;br /&gt;
* Боймуродов Хабибулло Нозимбоевич&lt;br /&gt;
* Клиницкий Иван Александрович&lt;br /&gt;
* Сахаров Александр Александрович&lt;br /&gt;
* Хусрабов Рустам Ёркинбекович&lt;br /&gt;
* Молданазаров Нурдаулет&lt;br /&gt;
* Бояров Алексей Алексеевич&lt;br /&gt;
* Павлюковец Виталий Андреевич&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2_%D0%B8_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_2024&amp;diff=3237</id>
		<title>Архитектура компьютеров и операционные системы 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2_%D0%B8_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_2024&amp;diff=3237"/>
		<updated>2024-08-30T14:26:23Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* План курса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
&lt;br /&gt;
=== Программа курса ===&lt;br /&gt;
Указаны примерные даты&lt;br /&gt;
= План курса =&lt;br /&gt;
&lt;br /&gt;
План курса предварительный, в процессе чтения может меняться.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Тема&lt;br /&gt;
! Формат&lt;br /&gt;
|-&lt;br /&gt;
| Введение в практическую часть курса, Работа с numpy&lt;br /&gt;
| Демозаикинг&amp;lt;br /&amp;gt;Прокудин-Горский&lt;br /&gt;
|-&lt;br /&gt;
| Основы обработки изображений&lt;br /&gt;
| Базовая обработка изображений&lt;br /&gt;
|-&lt;br /&gt;
| Преобразование Фурье&lt;br /&gt;
| Сжатие изображение (PCA, JPEG)&amp;lt;br /&amp;gt;Обратная свертка&lt;br /&gt;
|-&lt;br /&gt;
| Иерархия абстракций: numpy, pytorch, pytorch-lightning&lt;br /&gt;
| Реализация нейросети на numpy&lt;br /&gt;
|-&lt;br /&gt;
| Нейросетевые задания курса, Базовое обучение нейросетей&lt;br /&gt;
| Регрессия точек лица&lt;br /&gt;
|-&lt;br /&gt;
| Разбор устройства ViT, Приемы для дообучения нейросетей&lt;br /&gt;
| Дообучение нейросети&lt;br /&gt;
|-&lt;br /&gt;
| Метрическое обучение, Эффективность тензорных вычислений&lt;br /&gt;
| Классификация редких дорожных знаков&lt;br /&gt;
|-&lt;br /&gt;
| Детектирование объектов&lt;br /&gt;
| Простой нейросетевой детектор&lt;br /&gt;
|-&lt;br /&gt;
| Простая нейросеть для сегментации&lt;br /&gt;
| Сегментация изображений&lt;br /&gt;
|-&lt;br /&gt;
| Работа с видео&lt;br /&gt;
| Трекинг объектов&lt;br /&gt;
|-&lt;br /&gt;
| Self-supervised learning&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AE, VAE, GAN&lt;br /&gt;
| GAN&lt;br /&gt;
|-&lt;br /&gt;
| Diffusion&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Чтение статей, организация семинара, выбор аспирантуры&lt;br /&gt;
| Квантование простой нейросети&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
=== Команда курса===&lt;br /&gt;
&#039;&#039;&#039;Лектор&#039;&#039;&#039; – Андреев Александр Николаевич&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Семинаристы&#039;&#039;&#039;&lt;br /&gt;
* Абрамов Максим Сергеевич&lt;br /&gt;
* Манаков Данила Дмитриевич&lt;br /&gt;
* Ерошин Виталий Сергеевич&lt;br /&gt;
* Касымалиева Жанель&lt;br /&gt;
* Немова Ольга Юрьевна&lt;br /&gt;
* Драгун Константин Юрьевич&lt;br /&gt;
* Калмыков Андрей Сергеевич&lt;br /&gt;
* Шестакова Ксения Олеговна&lt;br /&gt;
* Климов Артем Юрьевич&lt;br /&gt;
* Сенин Игорь Александрович&lt;br /&gt;
* Гулевич Дмитрий Сергеевич&lt;br /&gt;
* Белов Максим Алексеевич&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ассистенты&#039;&#039;&#039;&lt;br /&gt;
* Морозов Артемий Андреевич&lt;br /&gt;
* Копанов Антон Олегович&lt;br /&gt;
* Афентьев Кирилл Викторович&lt;br /&gt;
* Стуров Фёдор Алексеевич&lt;br /&gt;
* Андреева Камилла Алексеевна&lt;br /&gt;
* Аллаберенов Керим&lt;br /&gt;
* Поляков Геннадий Федорович&lt;br /&gt;
* Исаченко Павел Игоревич&lt;br /&gt;
* Кидун Станислав Русланович&lt;br /&gt;
* Боймуродов Хабибулло Нозимбоевич&lt;br /&gt;
* Клиницкий Иван Александрович&lt;br /&gt;
* Сахаров Александр Александрович&lt;br /&gt;
* Хусрабов Рустам Ёркинбекович&lt;br /&gt;
* Молданазаров Нурдаулет&lt;br /&gt;
* Бояров Алексей Алексеевич&lt;br /&gt;
* Павлюковец Виталий Андреевич&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2_%D0%B8_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_2024&amp;diff=3236</id>
		<title>Архитектура компьютеров и операционные системы 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2_%D0%B8_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_2024&amp;diff=3236"/>
		<updated>2024-08-30T14:25:53Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* План курса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
&lt;br /&gt;
=== Программа курса ===&lt;br /&gt;
Указаны примерные даты&lt;br /&gt;
= План курса =&lt;br /&gt;
&lt;br /&gt;
План курса предварительный, в процессе чтения может меняться.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Тема&lt;br /&gt;
! Формат&lt;br /&gt;
|-&lt;br /&gt;
| Введение в практическую часть курса, Работа с numpy&lt;br /&gt;
| Демозаикинг&amp;lt;br /&amp;gt;Прокудин-Горский&lt;br /&gt;
|-&lt;br /&gt;
| Основы обработки изображений&lt;br /&gt;
| Базовая обработка изображений&lt;br /&gt;
|-&lt;br /&gt;
| Преобразование Фурье&lt;br /&gt;
| Сжатие изображение (PCA, JPEG)&amp;lt;br /&amp;gt;Обратная свертка&lt;br /&gt;
|-&lt;br /&gt;
| Иерархия абстракций: numpy, pytorch, pytorch-lightning&lt;br /&gt;
| Реализация нейросети на numpy&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Нейросетевые задания курса, Базовое обучение нейросетей&lt;br /&gt;
| Регрессия точек лица&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Разбор устройства ViT, Приемы для дообучения нейросетей&lt;br /&gt;
| Дообучение нейросети&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Метрическое обучение, Эффективность тензорных вычислений&lt;br /&gt;
| Классификация редких дорожных знаков&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Детектирование объектов&lt;br /&gt;
| Простой нейросетевой детектор&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| Простая нейросеть для сегментации&lt;br /&gt;
| Сегментация изображений&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| Работа с видео&lt;br /&gt;
| Трекинг объектов&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| Self-supervised learning&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| AE, VAE, GAN&lt;br /&gt;
| GAN&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| Diffusion&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Чтение статей, организация семинара, выбор аспирантуры&lt;br /&gt;
| Квантование простой нейросети&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
=== Команда курса===&lt;br /&gt;
&#039;&#039;&#039;Лектор&#039;&#039;&#039; – Андреев Александр Николаевич&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Семинаристы&#039;&#039;&#039;&lt;br /&gt;
* Абрамов Максим Сергеевич&lt;br /&gt;
* Манаков Данила Дмитриевич&lt;br /&gt;
* Ерошин Виталий Сергеевич&lt;br /&gt;
* Касымалиева Жанель&lt;br /&gt;
* Немова Ольга Юрьевна&lt;br /&gt;
* Драгун Константин Юрьевич&lt;br /&gt;
* Калмыков Андрей Сергеевич&lt;br /&gt;
* Шестакова Ксения Олеговна&lt;br /&gt;
* Климов Артем Юрьевич&lt;br /&gt;
* Сенин Игорь Александрович&lt;br /&gt;
* Гулевич Дмитрий Сергеевич&lt;br /&gt;
* Белов Максим Алексеевич&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ассистенты&#039;&#039;&#039;&lt;br /&gt;
* Морозов Артемий Андреевич&lt;br /&gt;
* Копанов Антон Олегович&lt;br /&gt;
* Афентьев Кирилл Викторович&lt;br /&gt;
* Стуров Фёдор Алексеевич&lt;br /&gt;
* Андреева Камилла Алексеевна&lt;br /&gt;
* Аллаберенов Керим&lt;br /&gt;
* Поляков Геннадий Федорович&lt;br /&gt;
* Исаченко Павел Игоревич&lt;br /&gt;
* Кидун Станислав Русланович&lt;br /&gt;
* Боймуродов Хабибулло Нозимбоевич&lt;br /&gt;
* Клиницкий Иван Александрович&lt;br /&gt;
* Сахаров Александр Александрович&lt;br /&gt;
* Хусрабов Рустам Ёркинбекович&lt;br /&gt;
* Молданазаров Нурдаулет&lt;br /&gt;
* Бояров Алексей Алексеевич&lt;br /&gt;
* Павлюковец Виталий Андреевич&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2_%D0%B8_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_2024&amp;diff=3235</id>
		<title>Архитектура компьютеров и операционные системы 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2_%D0%B8_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_2024&amp;diff=3235"/>
		<updated>2024-08-30T14:24:12Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* План курса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
&lt;br /&gt;
=== Программа курса ===&lt;br /&gt;
Указаны примерные даты&lt;br /&gt;
= План курса =&lt;br /&gt;
&lt;br /&gt;
План курса предварительный, в процессе чтения может меняться.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! #&lt;br /&gt;
! Дата&lt;br /&gt;
! Лекция&lt;br /&gt;
! Семинар&lt;br /&gt;
! Домашнее задание&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 11.09.2024&lt;br /&gt;
| Цифровое изображение&lt;br /&gt;
| Введение в практическую часть курса, Работа с numpy&lt;br /&gt;
| Демозаикинг&amp;lt;br /&amp;gt;Прокудин-Горский&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 18.09.2024&lt;br /&gt;
| Основы обработки изображений&lt;br /&gt;
| Базовая обработка изображений&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 25.09.2024&lt;br /&gt;
| Сжатие изображений, Преобразование Фурье&lt;br /&gt;
| Преобразование Фурье&lt;br /&gt;
| Сжатие изображение (PCA, JPEG)&amp;lt;br /&amp;gt;Обратная свертка&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 02.10.2024&lt;br /&gt;
| Классификация изображений. Введение в нейросети&lt;br /&gt;
| Иерархия абстракций: numpy, pytorch, pytorch-lightning&lt;br /&gt;
| Реализация нейросети на numpy&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 09.10.2024&lt;br /&gt;
| Сверточные нейросетевые архитектуры&lt;br /&gt;
| Нейросетевые задания курса, Базовое обучение нейросетей&lt;br /&gt;
| Регрессия точек лица&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 16.10.2024&lt;br /&gt;
| Трансформеры и сверточные нейронные сети с большими ядрами&lt;br /&gt;
| Разбор устройства ViT, Приемы для дообучения нейросетей&lt;br /&gt;
| Дообучение нейросети&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 23.10.2024&lt;br /&gt;
| Поиск похожих изображений&lt;br /&gt;
| Метрическое обучение, Эффективность тензорных вычислений&lt;br /&gt;
| Классификация редких дорожных знаков&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 30.10.2024&lt;br /&gt;
| Детекторы объектов&lt;br /&gt;
| Детектирование объектов&lt;br /&gt;
| Простой нейросетевой детектор&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 06.11.2024&lt;br /&gt;
| Сегментация изображений&lt;br /&gt;
| Простая нейросеть для сегментации&lt;br /&gt;
| Сегментация изображений&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 13.11.2024&lt;br /&gt;
| Основы обработки видео&lt;br /&gt;
| Работа с видео&lt;br /&gt;
| Трекинг объектов&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 20.11.2024&lt;br /&gt;
| Self-supervised learning, foundation models&lt;br /&gt;
| Self-supervised learning&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 27.11.2024&lt;br /&gt;
| Перенос стиля, superresolution, GAN, VAE (начало)&lt;br /&gt;
| AE, VAE, GAN&lt;br /&gt;
| GAN&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 04.12.2024&lt;br /&gt;
| VAE (продолжение), Diffusion&lt;br /&gt;
| Diffusion&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 11.12.2024&lt;br /&gt;
| &lt;br /&gt;
| Чтение статей, организация семинара, выбор аспирантуры&lt;br /&gt;
| Квантование простой нейросети&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;900px&amp;quot; style=&amp;quot;text-align:justify;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
=== Команда курса===&lt;br /&gt;
&#039;&#039;&#039;Лектор&#039;&#039;&#039; – Андреев Александр Николаевич&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Семинаристы&#039;&#039;&#039;&lt;br /&gt;
* Абрамов Максим Сергеевич&lt;br /&gt;
* Манаков Данила Дмитриевич&lt;br /&gt;
* Ерошин Виталий Сергеевич&lt;br /&gt;
* Касымалиева Жанель&lt;br /&gt;
* Немова Ольга Юрьевна&lt;br /&gt;
* Драгун Константин Юрьевич&lt;br /&gt;
* Калмыков Андрей Сергеевич&lt;br /&gt;
* Шестакова Ксения Олеговна&lt;br /&gt;
* Климов Артем Юрьевич&lt;br /&gt;
* Сенин Игорь Александрович&lt;br /&gt;
* Гулевич Дмитрий Сергеевич&lt;br /&gt;
* Белов Максим Алексеевич&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ассистенты&#039;&#039;&#039;&lt;br /&gt;
* Морозов Артемий Андреевич&lt;br /&gt;
* Копанов Антон Олегович&lt;br /&gt;
* Афентьев Кирилл Викторович&lt;br /&gt;
* Стуров Фёдор Алексеевич&lt;br /&gt;
* Андреева Камилла Алексеевна&lt;br /&gt;
* Аллаберенов Керим&lt;br /&gt;
* Поляков Геннадий Федорович&lt;br /&gt;
* Исаченко Павел Игоревич&lt;br /&gt;
* Кидун Станислав Русланович&lt;br /&gt;
* Боймуродов Хабибулло Нозимбоевич&lt;br /&gt;
* Клиницкий Иван Александрович&lt;br /&gt;
* Сахаров Александр Александрович&lt;br /&gt;
* Хусрабов Рустам Ёркинбекович&lt;br /&gt;
* Молданазаров Нурдаулет&lt;br /&gt;
* Бояров Алексей Алексеевич&lt;br /&gt;
* Павлюковец Виталий Андреевич&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2_%D0%B8_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_2024&amp;diff=3234</id>
		<title>Архитектура компьютеров и операционные системы 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2_%D0%B8_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_2024&amp;diff=3234"/>
		<updated>2024-08-30T14:23:36Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Программа курса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
&lt;br /&gt;
=== Программа курса ===&lt;br /&gt;
Указаны примерные даты&lt;br /&gt;
= План курса =&lt;br /&gt;
&lt;br /&gt;
План курса предварительный, в процессе чтения может меняться.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! #&lt;br /&gt;
! Дата&lt;br /&gt;
! Лекция&lt;br /&gt;
! Семинар&lt;br /&gt;
! Домашнее задание&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 11.09.2024&lt;br /&gt;
| Цифровое изображение&lt;br /&gt;
| Введение в практическую часть курса, Работа с numpy&lt;br /&gt;
| Демозаикинг&amp;lt;br /&amp;gt;Прокудин-Горский&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 18.09.2024&lt;br /&gt;
| Основы обработки изображений&lt;br /&gt;
| Базовая обработка изображений&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 25.09.2024&lt;br /&gt;
| Сжатие изображений, Преобразование Фурье&lt;br /&gt;
| Преобразование Фурье&lt;br /&gt;
| Сжатие изображение (PCA, JPEG)&amp;lt;br /&amp;gt;Обратная свертка&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 02.10.2024&lt;br /&gt;
| Классификация изображений. Введение в нейросети&lt;br /&gt;
| Иерархия абстракций: numpy, pytorch, pytorch-lightning&lt;br /&gt;
| Реализация нейросети на numpy&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 09.10.2024&lt;br /&gt;
| Сверточные нейросетевые архитектуры&lt;br /&gt;
| Нейросетевые задания курса, Базовое обучение нейросетей&lt;br /&gt;
| Регрессия точек лица&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 16.10.2024&lt;br /&gt;
| Трансформеры и сверточные нейронные сети с большими ядрами&lt;br /&gt;
| Разбор устройства ViT, Приемы для дообучения нейросетей&lt;br /&gt;
| Дообучение нейросети&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 23.10.2024&lt;br /&gt;
| Поиск похожих изображений&lt;br /&gt;
| Метрическое обучение, Эффективность тензорных вычислений&lt;br /&gt;
| Классификация редких дорожных знаков&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 30.10.2024&lt;br /&gt;
| Детекторы объектов&lt;br /&gt;
| Детектирование объектов&lt;br /&gt;
| Простой нейросетевой детектор&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 06.11.2024&lt;br /&gt;
| Сегментация изображений&lt;br /&gt;
| Простая нейросеть для сегментации&lt;br /&gt;
| Сегментация изображений&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 13.11.2024&lt;br /&gt;
| Основы обработки видео&lt;br /&gt;
| Работа с видео&lt;br /&gt;
| Трекинг объектов&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 20.11.2024&lt;br /&gt;
| Self-supervised learning, foundation models&lt;br /&gt;
| Self-supervised learning&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 27.11.2024&lt;br /&gt;
| Перенос стиля, superresolution, GAN, VAE (начало)&lt;br /&gt;
| AE, VAE, GAN&lt;br /&gt;
| GAN&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 04.12.2024&lt;br /&gt;
| VAE (продолжение), Diffusion&lt;br /&gt;
| Diffusion&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 11.12.2024&lt;br /&gt;
| &lt;br /&gt;
| Чтение статей, организация семинара, выбор аспирантуры&lt;br /&gt;
| Квантование простой нейросети&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;900px&amp;quot; style=&amp;quot;text-align:justify;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
== Рекомендуемая литература ==&lt;br /&gt;
# W. Burger, M. Burge. Principles of Digital Image Processing. Springer 2009, 2013. [https://link.springer.com/content/pdf/10.1007%2F978-1-84800-191-6.pdf Fundamental Techniques], [https://link.springer.com/content/pdf/10.1007%2F978-1-84800-195-4.pdf Core Algorithms], [https://link.springer.com/content/pdf/10.1007%2F978-1-84882-919-0.pdf Advanced Methods].&lt;br /&gt;
# M. Nielsen. [http://neuralnetworksanddeeplearning.com Neural Networks and Deep Learning].&lt;br /&gt;
# A. Zhang, Z. Lipton, Mu Li, A. Smola. [https://d2l.ai Dive into Deep Learning]. 2020.&lt;br /&gt;
# I. Goodfellow, Y. Bengio, A. Courville. [https://github.com/janishar/mit-deep-learning-book-pdf/raw/master/complete-book-pdf/deeplearningbook.pdf Deep learning]. MIT Press 2016.&lt;br /&gt;
# R. Szeliski. [http://szeliski.org/Book/2ndEdition.htm Computer Vision: Algorithms and Applications]. 2020&lt;br /&gt;
# R. Hartley, A. Zisserman. [http://cvrs.whu.edu.cn/downloads/ebooks/Multiple%20View%20Geometry%20in%20Computer%20Vision%20(Second%20Edition).pdf Multiple View Geometry in Computer Vision]. Cambridge University Press, 2004.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
=== Команда курса===&lt;br /&gt;
&#039;&#039;&#039;Лектор&#039;&#039;&#039; – Андреев Александр Николаевич&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Семинаристы&#039;&#039;&#039;&lt;br /&gt;
* Абрамов Максим Сергеевич&lt;br /&gt;
* Манаков Данила Дмитриевич&lt;br /&gt;
* Ерошин Виталий Сергеевич&lt;br /&gt;
* Касымалиева Жанель&lt;br /&gt;
* Немова Ольга Юрьевна&lt;br /&gt;
* Драгун Константин Юрьевич&lt;br /&gt;
* Калмыков Андрей Сергеевич&lt;br /&gt;
* Шестакова Ксения Олеговна&lt;br /&gt;
* Климов Артем Юрьевич&lt;br /&gt;
* Сенин Игорь Александрович&lt;br /&gt;
* Гулевич Дмитрий Сергеевич&lt;br /&gt;
* Белов Максим Алексеевич&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ассистенты&#039;&#039;&#039;&lt;br /&gt;
* Морозов Артемий Андреевич&lt;br /&gt;
* Копанов Антон Олегович&lt;br /&gt;
* Афентьев Кирилл Викторович&lt;br /&gt;
* Стуров Фёдор Алексеевич&lt;br /&gt;
* Андреева Камилла Алексеевна&lt;br /&gt;
* Аллаберенов Керим&lt;br /&gt;
* Поляков Геннадий Федорович&lt;br /&gt;
* Исаченко Павел Игоревич&lt;br /&gt;
* Кидун Станислав Русланович&lt;br /&gt;
* Боймуродов Хабибулло Нозимбоевич&lt;br /&gt;
* Клиницкий Иван Александрович&lt;br /&gt;
* Сахаров Александр Александрович&lt;br /&gt;
* Хусрабов Рустам Ёркинбекович&lt;br /&gt;
* Молданазаров Нурдаулет&lt;br /&gt;
* Бояров Алексей Алексеевич&lt;br /&gt;
* Павлюковец Виталий Андреевич&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2_%D0%B8_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_2024&amp;diff=3233</id>
		<title>Архитектура компьютеров и операционные системы 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2_%D0%B8_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_2024&amp;diff=3233"/>
		<updated>2024-08-30T14:22:50Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Программа курса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
&lt;br /&gt;
=== Программа курса ===&lt;br /&gt;
Указаны примерные даты&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
=== Команда курса===&lt;br /&gt;
&#039;&#039;&#039;Лектор&#039;&#039;&#039; – Андреев Александр Николаевич&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Семинаристы&#039;&#039;&#039;&lt;br /&gt;
* Абрамов Максим Сергеевич&lt;br /&gt;
* Манаков Данила Дмитриевич&lt;br /&gt;
* Ерошин Виталий Сергеевич&lt;br /&gt;
* Касымалиева Жанель&lt;br /&gt;
* Немова Ольга Юрьевна&lt;br /&gt;
* Драгун Константин Юрьевич&lt;br /&gt;
* Калмыков Андрей Сергеевич&lt;br /&gt;
* Шестакова Ксения Олеговна&lt;br /&gt;
* Климов Артем Юрьевич&lt;br /&gt;
* Сенин Игорь Александрович&lt;br /&gt;
* Гулевич Дмитрий Сергеевич&lt;br /&gt;
* Белов Максим Алексеевич&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ассистенты&#039;&#039;&#039;&lt;br /&gt;
* Морозов Артемий Андреевич&lt;br /&gt;
* Копанов Антон Олегович&lt;br /&gt;
* Афентьев Кирилл Викторович&lt;br /&gt;
* Стуров Фёдор Алексеевич&lt;br /&gt;
* Андреева Камилла Алексеевна&lt;br /&gt;
* Аллаберенов Керим&lt;br /&gt;
* Поляков Геннадий Федорович&lt;br /&gt;
* Исаченко Павел Игоревич&lt;br /&gt;
* Кидун Станислав Русланович&lt;br /&gt;
* Боймуродов Хабибулло Нозимбоевич&lt;br /&gt;
* Клиницкий Иван Александрович&lt;br /&gt;
* Сахаров Александр Александрович&lt;br /&gt;
* Хусрабов Рустам Ёркинбекович&lt;br /&gt;
* Молданазаров Нурдаулет&lt;br /&gt;
* Бояров Алексей Алексеевич&lt;br /&gt;
* Павлюковец Виталий Андреевич&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2_%D0%B8_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_2024&amp;diff=3232</id>
		<title>Архитектура компьютеров и операционные системы 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2_%D0%B8_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_2024&amp;diff=3232"/>
		<updated>2024-08-30T14:22:00Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Общие сведения */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
&lt;br /&gt;
=== Программа курса ===&lt;br /&gt;
Указаны примерные даты&lt;br /&gt;
&lt;br /&gt;
==== Преподаватели курса====&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
=== Команда курса===&lt;br /&gt;
&#039;&#039;&#039;Лектор&#039;&#039;&#039; – Андреев Александр Николаевич&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Семинаристы&#039;&#039;&#039;&lt;br /&gt;
* Абрамов Максим Сергеевич&lt;br /&gt;
* Манаков Данила Дмитриевич&lt;br /&gt;
* Ерошин Виталий Сергеевич&lt;br /&gt;
* Касымалиева Жанель&lt;br /&gt;
* Немова Ольга Юрьевна&lt;br /&gt;
* Драгун Константин Юрьевич&lt;br /&gt;
* Калмыков Андрей Сергеевич&lt;br /&gt;
* Шестакова Ксения Олеговна&lt;br /&gt;
* Климов Артем Юрьевич&lt;br /&gt;
* Сенин Игорь Александрович&lt;br /&gt;
* Гулевич Дмитрий Сергеевич&lt;br /&gt;
* Белов Максим Алексеевич&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ассистенты&#039;&#039;&#039;&lt;br /&gt;
* Морозов Артемий Андреевич&lt;br /&gt;
* Копанов Антон Олегович&lt;br /&gt;
* Афентьев Кирилл Викторович&lt;br /&gt;
* Стуров Фёдор Алексеевич&lt;br /&gt;
* Андреева Камилла Алексеевна&lt;br /&gt;
* Аллаберенов Керим&lt;br /&gt;
* Поляков Геннадий Федорович&lt;br /&gt;
* Исаченко Павел Игоревич&lt;br /&gt;
* Кидун Станислав Русланович&lt;br /&gt;
* Боймуродов Хабибулло Нозимбоевич&lt;br /&gt;
* Клиницкий Иван Александрович&lt;br /&gt;
* Сахаров Александр Александрович&lt;br /&gt;
* Хусрабов Рустам Ёркинбекович&lt;br /&gt;
* Молданазаров Нурдаулет&lt;br /&gt;
* Бояров Алексей Алексеевич&lt;br /&gt;
* Павлюковец Виталий Андреевич&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2_%D0%B8_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_2024&amp;diff=3231</id>
		<title>Архитектура компьютеров и операционные системы 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2_%D0%B8_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_2024&amp;diff=3231"/>
		<updated>2024-08-30T14:21:15Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Команда курса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
&lt;br /&gt;
==== Программа курса и сдача домашек====&lt;br /&gt;
Указаны примерные даты&lt;br /&gt;
&lt;br /&gt;
==== Преподаватели курса====&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
=== Команда курса===&lt;br /&gt;
&#039;&#039;&#039;Лектор&#039;&#039;&#039; – Андреев Александр Николаевич&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Семинаристы&#039;&#039;&#039;&lt;br /&gt;
* Абрамов Максим Сергеевич&lt;br /&gt;
* Манаков Данила Дмитриевич&lt;br /&gt;
* Ерошин Виталий Сергеевич&lt;br /&gt;
* Касымалиева Жанель&lt;br /&gt;
* Немова Ольга Юрьевна&lt;br /&gt;
* Драгун Константин Юрьевич&lt;br /&gt;
* Калмыков Андрей Сергеевич&lt;br /&gt;
* Шестакова Ксения Олеговна&lt;br /&gt;
* Климов Артем Юрьевич&lt;br /&gt;
* Сенин Игорь Александрович&lt;br /&gt;
* Гулевич Дмитрий Сергеевич&lt;br /&gt;
* Белов Максим Алексеевич&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ассистенты&#039;&#039;&#039;&lt;br /&gt;
* Морозов Артемий Андреевич&lt;br /&gt;
* Копанов Антон Олегович&lt;br /&gt;
* Афентьев Кирилл Викторович&lt;br /&gt;
* Стуров Фёдор Алексеевич&lt;br /&gt;
* Андреева Камилла Алексеевна&lt;br /&gt;
* Аллаберенов Керим&lt;br /&gt;
* Поляков Геннадий Федорович&lt;br /&gt;
* Исаченко Павел Игоревич&lt;br /&gt;
* Кидун Станислав Русланович&lt;br /&gt;
* Боймуродов Хабибулло Нозимбоевич&lt;br /&gt;
* Клиницкий Иван Александрович&lt;br /&gt;
* Сахаров Александр Александрович&lt;br /&gt;
* Хусрабов Рустам Ёркинбекович&lt;br /&gt;
* Молданазаров Нурдаулет&lt;br /&gt;
* Бояров Алексей Алексеевич&lt;br /&gt;
* Павлюковец Виталий Андреевич&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2_%D0%B8_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_2024&amp;diff=3230</id>
		<title>Архитектура компьютеров и операционные системы 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2_%D0%B8_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_2024&amp;diff=3230"/>
		<updated>2024-08-30T14:19:40Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Команда курса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
&lt;br /&gt;
==== Программа курса и сдача домашек====&lt;br /&gt;
Указаны примерные даты&lt;br /&gt;
&lt;br /&gt;
==== Преподаватели курса====&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
=== Команда курса===&lt;br /&gt;
&#039;&#039;&#039;Лектор&#039;&#039;&#039; – Андреев Александр Николаевич&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Семинаристы&#039;&#039;&#039;&lt;br /&gt;
Абрамов Максим Сергеевич&lt;br /&gt;
Манаков Данила Дмитриевич&lt;br /&gt;
Ерошин Виталий Сергеевич&lt;br /&gt;
Касымалиева Жанель&lt;br /&gt;
Немова Ольга Юрьевна&lt;br /&gt;
Драгун Константин Юрьевич&lt;br /&gt;
Калмыков Андрей Сергеевич&lt;br /&gt;
Шестакова Ксения Олеговна&lt;br /&gt;
Климов Артем Юрьевич&lt;br /&gt;
Сенин Игорь Александрович&lt;br /&gt;
Гулевич Дмитрий Сергеевич&lt;br /&gt;
Белов Максим Алексеевич&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ассистенты&#039;&#039;&#039;&lt;br /&gt;
# Морозов Артемий Андреевич&lt;br /&gt;
# Копанов Антон Олегович&lt;br /&gt;
# Афентьев Кирилл Викторович&lt;br /&gt;
# Стуров Фёдор Алексеевич&lt;br /&gt;
# Андреева Камилла Алексеевна&lt;br /&gt;
# Аллаберенов Керим&lt;br /&gt;
# Поляков Геннадий Федорович&lt;br /&gt;
# Исаченко Павел Игоревич&lt;br /&gt;
# Кидун Станислав Русланович&lt;br /&gt;
# Боймуродов Хабибулло Нозимбоевич&lt;br /&gt;
# Клиницкий Иван Александрович&lt;br /&gt;
# Сахаров Александр Александрович&lt;br /&gt;
# Хусрабов Рустам Ёркинбекович&lt;br /&gt;
# Молданазаров Нурдаулет&lt;br /&gt;
# Бояров Алексей Алексеевич&lt;br /&gt;
# Павлюковец Виталий Андреевич&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2_%D0%B8_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_2024&amp;diff=3229</id>
		<title>Архитектура компьютеров и операционные системы 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2_%D0%B8_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_2024&amp;diff=3229"/>
		<updated>2024-08-30T14:19:05Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Общие сведения */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
&lt;br /&gt;
==== Программа курса и сдача домашек====&lt;br /&gt;
Указаны примерные даты&lt;br /&gt;
&lt;br /&gt;
==== Преподаватели курса====&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
=== Команда курса===&lt;br /&gt;
&#039;&#039;&#039;Лектор&#039;&#039;&#039; – Андреев Александр Николаевич&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Семинаристы&#039;&#039;&#039;&lt;br /&gt;
Абрамов Максим Сергеевич&lt;br /&gt;
Манаков Данила Дмитриевич&lt;br /&gt;
Ерошин Виталий Сергеевич&lt;br /&gt;
Касымалиева Жанель&lt;br /&gt;
Немова Ольга Юрьевна&lt;br /&gt;
Драгун Константин Юрьевич&lt;br /&gt;
Калмыков Андрей Сергеевич&lt;br /&gt;
Шестакова Ксения Олеговна&lt;br /&gt;
Климов Артем Юрьевич&lt;br /&gt;
Сенин Игорь Александрович&lt;br /&gt;
Гулевич Дмитрий Сергеевич&lt;br /&gt;
Белов Максим Алексеевич&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ассистенты&#039;&#039;&#039;&lt;br /&gt;
Морозов Артемий Андреевич&lt;br /&gt;
Копанов Антон Олегович&lt;br /&gt;
Афентьев Кирилл Викторович&lt;br /&gt;
Стуров Фёдор Алексеевич&lt;br /&gt;
Андреева Камилла Алексеевна&lt;br /&gt;
Аллаберенов Керим&lt;br /&gt;
Поляков Геннадий Федорович&lt;br /&gt;
Исаченко Павел Игоревич&lt;br /&gt;
Кидун Станислав Русланович&lt;br /&gt;
Боймуродов Хабибулло Нозимбоевич&lt;br /&gt;
Клиницкий Иван Александрович&lt;br /&gt;
Сахаров Александр Александрович&lt;br /&gt;
Хусрабов Рустам Ёркинбекович&lt;br /&gt;
Молданазаров Нурдаулет&lt;br /&gt;
Бояров Алексей Алексеевич&lt;br /&gt;
Павлюковец Виталий Андреевич&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D1%8B%D0%B5_%D0%BA%D1%83%D1%80%D1%81%D1%8B_%D0%BA%D0%B0%D1%84%D0%B5%D0%B4%D1%80%D1%8B&amp;diff=3227</id>
		<title>Учебные курсы кафедры</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D1%8B%D0%B5_%D0%BA%D1%83%D1%80%D1%81%D1%8B_%D0%BA%D0%B0%D1%84%D0%B5%D0%B4%D1%80%D1%8B&amp;diff=3227"/>
		<updated>2024-08-30T09:23:09Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Осенний семестр 2024 года */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Учебные курсы кафедры Алгоритмов и технологий программирования ==&lt;br /&gt;
&lt;br /&gt;
=== Осенний семестр 2024 года ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! 1 курс !! 2 курс !! 3 курс !! 4 курс !! 5 курс !! 6 курс &lt;br /&gt;
|-&lt;br /&gt;
||&lt;br /&gt;
[[Программирование на языке C++. Базовый поток 2024 | Программирование на языке C++. Базовый поток]]&lt;br /&gt;
&lt;br /&gt;
[[Программирование на языке C++. Основной поток 2024 | Программирование на языке C++. Основной поток]]&lt;br /&gt;
&lt;br /&gt;
[[Программирование на языке C++. Продвинутый поток 2024 | Программирование на языке C++. Продвинутый поток]]&lt;br /&gt;
&lt;br /&gt;
[[Программирование на языке C++. Иностранный поток 2024 | Программирование на языке C++. Иностранный поток]]&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы и структуры данных I. Базовый поток 2024 | Алгоритмы и структуры данных I. Базовый поток]]&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы и структуры данных I. Основной поток 2024 | Алгоритмы и структуры данных I. Основной поток]]&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы и структуры данных I. Продвинутый поток 2024 | Алгоритмы и структуры данных I. Продвинутый поток]]&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы и структуры данных I. Иностранный поток 2024 | Алгоритмы и структуры данных I. Иностранный поток]]&lt;br /&gt;
&lt;br /&gt;
[[Практикум Python. Базовый поток 2024| Практикум Python. Базовый поток]]&lt;br /&gt;
&lt;br /&gt;
[[Практикум Python. Продвинутый поток 2024| Практикум Python. Продвинутый поток]]&lt;br /&gt;
&lt;br /&gt;
[[Математические основания алгоритмов и сложность вычислений. Базовый поток 2024| Математические основания алгоритмов и сложность вычислений. Базовый поток]]&lt;br /&gt;
&lt;br /&gt;
[[Математические основания алгоритмов и сложность вычислений. Продвинутый поток 2024| Математические основания алгоритмов и сложность вычислений. Продвинутый поток]]&lt;br /&gt;
&lt;br /&gt;
[[Практикум по алгоритмам и структурам данных. Поток Java 2024| Практикум по алгоритмам и структурам данных. Поток Java]]&lt;br /&gt;
&lt;br /&gt;
[[Введение в структуры данных. Базовый поток 2024| Введение в структуры данных. Базовый поток]]&lt;br /&gt;
&lt;br /&gt;
[[Введение в структуры данных. Продвинутый поток 2024| Введение в структуры данных. Продвинутый поток]]&lt;br /&gt;
&lt;br /&gt;
[[Foundations of Programming I 2024| Foundations of Programming I]]&lt;br /&gt;
||&lt;br /&gt;
[[Современные компьютерные сети 2024 | Современные компьютерные сети]]&lt;br /&gt;
&lt;br /&gt;
[[Программирование на языке C++. Иностранный поток 2024 | Программирование на языке C++. Иностранный поток]]&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы и структуры данных I. Иностранный поток 2024 | Алгоритмы и структуры данных I. Иностранный поток]]&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы и структуры данных III. Базовый поток 2024 | Алгоритмы и структуры данных III. Базовый поток]]&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы и структуры данных III. Основной поток 2024 | Алгоритмы и структуры данных III. Основной поток]]&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы и структуры данных III. Продвинутый поток 2024 | Алгоритмы и структуры данных III. Продвинутый  поток]]&lt;br /&gt;
&lt;br /&gt;
[[Практикум Python. Базовый поток 2024| Практикум Python. Базовый поток]]&lt;br /&gt;
&lt;br /&gt;
[[Практикум Python. Продвинутый поток 2024| Практикум Python. Продвинутый поток]]&lt;br /&gt;
&lt;br /&gt;
[[Формальные языки и трансляции 2024| Формальные языки и трансляции]]&lt;br /&gt;
&lt;br /&gt;
[[Архитектура компьютеров и операционные системы 2024| Архитектура компьютеров и операционные системы]]&lt;br /&gt;
&lt;br /&gt;
[[Современные компьютерные сети 2024| Современные компьютерные сети]]&lt;br /&gt;
&lt;br /&gt;
[[Python и R в приложениях к экономике 2024| Python и R в приложениях к экономике]]&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы на графах и динамическое программирование 2024| Алгоритмы на графах и динамическое программирование]]&lt;br /&gt;
&lt;br /&gt;
[[Объектно-ориентированное программирование на C++ 2024| Объектно-ориентированное программирование на C++]]&lt;br /&gt;
&lt;br /&gt;
[[Промышленное программирование на языке Java 2024| Промышленное программирование на языке Java]]&lt;br /&gt;
&lt;br /&gt;
[[Data Structures and Algorithms II 2024| Data Structures and Algorithms II]]&lt;br /&gt;
&lt;br /&gt;
[[Python 2024| Python]]&lt;br /&gt;
&lt;br /&gt;
[[Operating Systems I 2024| Operating Systems I]]&lt;br /&gt;
||&lt;br /&gt;
[[Параллельные и распределенные вычисления 2024 | Параллельные и распределенные вычисления]]&lt;br /&gt;
&lt;br /&gt;
[[Практикум Python. Базовый поток 2024| Практикум Python. Базовый поток]]&lt;br /&gt;
&lt;br /&gt;
[[Практикум Python. Продвинутый поток 2024| Практикум Python. Продвинутый поток]]&lt;br /&gt;
&lt;br /&gt;
[[Формальные языки и трансляции 2024| Формальные языки и трансляции]]&lt;br /&gt;
&lt;br /&gt;
[[Архитектура компьютеров и операционные системы 2024| Архитектура компьютеров и операционные системы]]&lt;br /&gt;
&lt;br /&gt;
[[Современные компьютерные сети 2024| Современные компьютерные сети]]&lt;br /&gt;
&lt;br /&gt;
[[Промышленное программирование на языке Java 2024| Промышленное программирование на языке Java]]&lt;br /&gt;
&lt;br /&gt;
[[Full-stack разработка 2024| Full-stack разработка]]&lt;br /&gt;
&lt;br /&gt;
[[Робастные методы в математической статистике 2024| Робастные методы в математической статистике]]&lt;br /&gt;
&lt;br /&gt;
[[Programming Java 2024| Programming Java]]&lt;br /&gt;
&lt;br /&gt;
[[Workshop on Software Development 2024| Workshop on Software Development]]&lt;br /&gt;
&lt;br /&gt;
[[Parallel and Disrtibuted Computing I 2024| Parallel and Disrtibuted Computing I]]&lt;br /&gt;
&lt;br /&gt;
[[Подготовка презентаций в PowerPoint 2024| Подготовка презентаций в PowerPoint]]&lt;br /&gt;
||&lt;br /&gt;
[[Промышленное программирование на языке Java 2024| Промышленное программирование на языке Java]]&lt;br /&gt;
&lt;br /&gt;
[[Метапрограммирование 2024| Метапрограммирование]]&lt;br /&gt;
&lt;br /&gt;
[[Робастные методы в математической статистике 2024| Робастные методы в математической статистике]]&lt;br /&gt;
&lt;br /&gt;
[[Проектирование программных систем 2024| Проектирование программных систем]]&lt;br /&gt;
||&lt;br /&gt;
[[Применение Python в статистическом анализе данных 2024| Применение Python в статистическом анализе данных]]&lt;br /&gt;
&lt;br /&gt;
[[Теория решеток для анализа и разработки данных 2024| Теория решеток для анализа и разработки данных]]&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы биоинформатики 2024| Алгоритмы биоинформатики]]&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы на дискретных структурах данных 2024| Алгоритмы на дискретных структурах данных]]&lt;br /&gt;
&lt;br /&gt;
[[Анализ изображений 2024| Анализ изображений]]&lt;br /&gt;
&lt;br /&gt;
[[Современные технологии разработки сервисов анализа данных 2024| Современные технологии разработки сервисов анализа данных]]&lt;br /&gt;
&lt;br /&gt;
[[НИС 2024| НИС]]&lt;br /&gt;
&lt;br /&gt;
[[Технологии программирования и операционные системы. Базовый поток 2024| Технологии программирования и операционные системы. Базовый поток]]&lt;br /&gt;
&lt;br /&gt;
[[Технологии программирования и операционные системы. Продвинутый поток 2024| Технологии программирования и операционные системы. Продвинутый поток]]&lt;br /&gt;
&lt;br /&gt;
[[Управление разработкой и запуском цифровых продуктов (МТС) 2024| Управление разработкой и запуском цифровых продуктов (МТС)]]&lt;br /&gt;
&lt;br /&gt;
[[Облачные бизнесы и платформы (МТС) 2024| Облачные бизнесы и платформы (МТС)]]&lt;br /&gt;
&lt;br /&gt;
[[Управление IT-проектами 2024 | Проектное управление в IT ]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
[[Машинное обучение на больших объемах данных 2024| Машинное обучение на больших объемах данных]]&lt;br /&gt;
&lt;br /&gt;
[[НИС 2024| НИС]]&lt;br /&gt;
&lt;br /&gt;
[[Устройство ядра Linux (НОВ) 2024| Устройство ядра Linux (НОВ)]]&lt;br /&gt;
&lt;br /&gt;
[[Практики и инструменты надёжности (МТС) 2024| Практики и инструменты надёжности (МТС)]]&lt;br /&gt;
&lt;br /&gt;
[[Продвинутые алгоритмы (НОВ) 2024| Продвинутые алгоритмы (НОВ)]]&lt;br /&gt;
&lt;br /&gt;
[[Основы лидерства и управление высокоэффективными командами 2024| Основы лидерства и управление высокоэффективными командами ]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Весенний семестр 2024 года ===&lt;br /&gt;
* &#039;&#039;&#039;[[Рекомендации по поступлению 2024]]&#039;&#039;&#039;&lt;br /&gt;
* [[Про индивидуальные планы]]&lt;br /&gt;
* [ Страница с расписанием]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! 1 курс !! 2 курс !! 3 курс !! 4 курс !! 5 курс !! 6 курс &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
[[Практикум Python. Весна 2024|Практикум Python]]&lt;br /&gt;
&lt;br /&gt;
[[ИВТ. Практикум по объектно-ориентированному программированию|ИВТ. Практикум по объектно-ориентированному программированию]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
[[AKOS 2024|Архитектура компьютеров и операционные системы]]&lt;br /&gt;
&lt;br /&gt;
[[ИВТ. Архитектура вычислительных систем и языки ассемблера|ИВТ. Архитектура вычислительных систем и языки ассемблера]]&lt;br /&gt;
&lt;br /&gt;
[[Теория и практика многопоточной синхронизации 2024|Теория и практика многопоточной синхронизации]]&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы и структуры данных (Русскоязычные иностранцы) 2024 весна|Алгоритмы и структуры данных (Русскоязычные иностранцы)]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
[[Параллельные_и_распределенные_вычисления_2024s|Параллельные и распределенные вычисления]]&lt;br /&gt;
&lt;br /&gt;
[[Rust 2024|Разработка на Rust]]&lt;br /&gt;
&lt;br /&gt;
[[Go 2024|Разработка на Go]]&lt;br /&gt;
&lt;br /&gt;
[[Flutter 2024|Разработка на Flutter]]&lt;br /&gt;
&lt;br /&gt;
[[DevOps 2024|Основы непрерывной интеграции (DevOps)]]&lt;br /&gt;
&lt;br /&gt;
[[Android 2024|Разработка для Android]]&lt;br /&gt;
&lt;br /&gt;
[[Современные компьютерные сети 2024s | Современные компьютерные сети]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
=== Факультетские курсы ===&lt;br /&gt;
[[Java mag 2024 | Технологии разработки на языке Java]]&lt;br /&gt;
&lt;br /&gt;
[[HOBOD_2024 | Хранение и обработка больших объемов данных]]&lt;br /&gt;
&lt;br /&gt;
[[NLP_2024 | Автоматическая обработка естественного языка]]&lt;br /&gt;
&lt;br /&gt;
[[Машинное обучение на практике 2024 | Машинное обучение на практике]]&lt;br /&gt;
&lt;br /&gt;
[[DevOps 2024|Основы непрерывной интеграции (DevOps)]]&lt;br /&gt;
&lt;br /&gt;
[[Современные технологии разработки сервисов анализа данных 2024|Современные технологии разработки сервисов анализа данных]]&lt;br /&gt;
&lt;br /&gt;
=== Кафедральные курсы ===&lt;br /&gt;
[[НИС_2024|Научный семинар]]&lt;br /&gt;
&lt;br /&gt;
[[Основы лидерства и управление высокоэффективными командами]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Осенний семестр 2023 года ===&lt;br /&gt;
* &#039;&#039;&#039;[[Рекомендации по поступлению]]&#039;&#039;&#039;&lt;br /&gt;
* [[Про индивидуальные планы]]&lt;br /&gt;
* [ Страница с расписанием]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! 1 курс !! 2 курс !! 3 курс !! 4 курс !! 5 курс !! 6 курс &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
[[Практикум по объектно-ориентированному программированию|Практикум по объектно-ориентированному программированию]]&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы и структуры данных (Русскоязычные иностранцы) 2023 осень|Алгоритмы и структуры данных (Русскоязычные иностранцы)]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
[[Java bak 2023 | Промышленное программирование на Java]]&lt;br /&gt;
&lt;br /&gt;
[[Параллельные_и_распределенные_вычисления_2023a|Параллельные и распределенные вычисления]]&lt;br /&gt;
&lt;br /&gt;
[[Fullstack 2023|Fullstack-разработка]]&lt;br /&gt;
&lt;br /&gt;
[[Подготовка презентаций в PowerPoint]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
=== Факультетские курсы ===&lt;br /&gt;
[[ТПОС_2023|Технологии программирования и операционные системы]]&lt;br /&gt;
&lt;br /&gt;
[[CV_2023|Анализ изображений]]&lt;br /&gt;
&lt;br /&gt;
[[Marketing_2023 | Основы интернет-маркетинга]]&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы биоинформатики осень 2023 | Алгоритмы биоинформатики]]&lt;br /&gt;
&lt;br /&gt;
[[Управление IT-проектами 2023 | Управление IT-проектами]]&lt;br /&gt;
&lt;br /&gt;
[[Структурный анализ и визуализация сетей]]&lt;br /&gt;
&lt;br /&gt;
[[ИМКЗ-2023 | Интерпретируемые методы классификации и порождения знаний]]&lt;br /&gt;
&lt;br /&gt;
=== Кафедральные курсы ===&lt;br /&gt;
[[НИС_2023|Научный семинар]]&lt;br /&gt;
&lt;br /&gt;
[[Применение Python в статистическом анализе данных]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
=== Факультетские курсы ===&lt;br /&gt;
&lt;br /&gt;
[[МОБОД_2023|Машинное обучение на больших объемах данных]]&lt;br /&gt;
&lt;br /&gt;
[[Современные компьютерные сети | Современные компьютерные сети]]&lt;br /&gt;
&lt;br /&gt;
=== Кафедральные курсы ===&lt;br /&gt;
[[Fullstack 2023|Fullstack-разработка]]&lt;br /&gt;
&lt;br /&gt;
[[TPAD 2023 | Современные технологии разработки серисов анализа данных]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Весенний семестр 2023 года ===&lt;br /&gt;
&lt;br /&gt;
[[Про индивидуальные планы 2023 весна]]&lt;br /&gt;
&lt;br /&gt;
[[Проблемы с ведомостями]]&lt;br /&gt;
&lt;br /&gt;
[https://mipt.ru/about/departments/uchebniy/schedule/study Страница с расписанием]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! 1 курс !! 2 курс !! 3 курс !! 4 курс !! 5 курс&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
[[Практикум Python. Весна 2023|Практикум Python]]&lt;br /&gt;
&lt;br /&gt;
[[Python &amp;amp; R practice nes spr2023 | Практикум Python. Совместная программа ВШЭ-РЭШ. Весна 2023]]&lt;br /&gt;
&lt;br /&gt;
[[Программирование на С++ основной и продвинутый потоки. Весна 2023|Программирование на С++ основной и продвинутый потоки]]&lt;br /&gt;
&lt;br /&gt;
[[Технологии программирования. Весна 2023|Технологии программирования]]&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы и структуры данных основной поток. Весна 2023|Алгоритмы и структуры данных основной поток]]&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы и структуры данных продвинутый поток. Весна 2023|Алгоритмы и структуры данных продвинутый поток]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
[Архитектура компьютеров и операционные системы | CAOS-2022]&lt;br /&gt;
&lt;br /&gt;
[[Программирование на языке Python для ПМФ. Весна 2023|Программирование на языке Python]]&lt;br /&gt;
&lt;br /&gt;
[[Базы данных 2023|Базы данных 2023]]&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы и структуры данных. Весна 2023|Алгоритмы и структуры данных]]&lt;br /&gt;
&lt;br /&gt;
[[Algorithms and data structures III | Algorithms and data structures III]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
[[Rust-2023 | Разработка на языке Rust]]&lt;br /&gt;
&lt;br /&gt;
[[Golang-2023 | Разработка на языке Golang]]&lt;br /&gt;
&lt;br /&gt;
[[Параллельные_и_распределенные_вычисления_2023s|Параллельные и распределенные вычисления]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
[[Networks-2023 | Современные компьютерные сети]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
=== Факультетские курсы ===&lt;br /&gt;
[[IMI_2023 | История и методология информатики и вычислительной техники]]&lt;br /&gt;
&lt;br /&gt;
[[Java_mag_2023 | Технологии разработки на языке Java]]&lt;br /&gt;
&lt;br /&gt;
[[HOBOD_2023 | Хранение и обработка больших объемов данных]]&lt;br /&gt;
&lt;br /&gt;
[[NLP_2023 | Автоматическая обработка естественного языка]]&lt;br /&gt;
&lt;br /&gt;
=== Кафедральные курсы ===&lt;br /&gt;
[[ProgAutom_2023 | Автоматизация программирования]]&lt;br /&gt;
&lt;br /&gt;
[[НИС_2023-1|Научный семинар]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Осенний семестр 2022 года - основные дисциплины ===&lt;br /&gt;
&lt;br /&gt;
[[Про индивидуальные планы 2022]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! 1 курс !! 2 курс !! 3 курс !! 4 курс !! 5 курс !! 6 курс &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
[[Практикум Python (ПМФ) | Практикум Python (ПМФ) ]]&lt;br /&gt;
&lt;br /&gt;
[[Foundations of programming | Foundations of programming]]&lt;br /&gt;
&lt;br /&gt;
[[Введение в структуры данных | Введение в программирование и алгоритмы (основной поток)]]&lt;br /&gt;
&lt;br /&gt;
[[Программирование на С++ основной и продвинутый потоки | Программирование на С++ основной и продвинутый потоки]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
[[Архитектура комьютеров и операционные системы | CAOS-2022]]&lt;br /&gt;
&lt;br /&gt;
[[Data Structures and Algorithms 2022 | Data Structures and Algorithms 2022]]&lt;br /&gt;
&lt;br /&gt;
[[Спецкурс: алгоритмы на графах (ИВТ) | AlgoGraphs-2022]]&lt;br /&gt;
&lt;br /&gt;
[[Объектно-ориентированное программирование на С++ (ИВТ) | OOP C++]]&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы и структуры данных (продвинутый поток) | Алгоритмы и структура данных (продвинутый поток)]]&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы и структура данных (основной поток) | Алгоритмы и структура данных (основной поток)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
[[Параллельные_и_распределенные_вычисления_2022 осень|Параллельные и распределенные вычисления]]&lt;br /&gt;
&lt;br /&gt;
[[Java_2021|Промышленное программирование на Java]]&lt;br /&gt;
&lt;br /&gt;
[[Java_foreigners_2022 | Java foreign group]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
[https://objectoriented.ru/pps-new Проектирование программных систем]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
=== Факультетские курсы ===&lt;br /&gt;
[[ТПОС_2022|Технологии программирования и операционные системы]]&lt;br /&gt;
&lt;br /&gt;
[[cv_2022|Анализ изображений]]&lt;br /&gt;
&lt;br /&gt;
[[Marketing_2022 | Основы интернет-маркетинга]]&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы биоинформатики осень 2022 | Алгоритмы биоинформатики]]&lt;br /&gt;
&lt;br /&gt;
=== Кафедральные курсы ===&lt;br /&gt;
[[НИС_2022-2|Научный семинар]]&lt;br /&gt;
&lt;br /&gt;
[[PythonAnalysis_2021|Применение Python в статистическом анализе данных]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
[[МОБОД_2021|Машинное обучение на больших объемах данных]]&lt;br /&gt;
&lt;br /&gt;
[[Web-2022|Web программирование]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Весенний семестр 2022 года - основные дисциплины ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! 1 курс !! 2 курс !! 3 курс !! 4 курс !! 5 курс&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
[[Параллельные_и_распределенные_вычисления_2022s|Параллельные и распределенные вычисления]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
=== Факультетские курсы ===&lt;br /&gt;
[[Visual_2022 | Математические методы визуализации данных]]&lt;br /&gt;
&lt;br /&gt;
[[IMI_2022 | История и методология информатики и вычислительной техники]]&lt;br /&gt;
&lt;br /&gt;
[[Java_mag_2022 | Технологии разработки на языке Java]]&lt;br /&gt;
&lt;br /&gt;
[[HOBOD_2022 | Хранение и обработка больших объемов данных]]&lt;br /&gt;
&lt;br /&gt;
[[NLP_2022 | Автоматическая обработка естественного языка]]&lt;br /&gt;
&lt;br /&gt;
=== Кафедральные курсы ===&lt;br /&gt;
&lt;br /&gt;
[[ProgAutom_2022 | Автоматизация программирования]]&lt;br /&gt;
&lt;br /&gt;
[[НИС_2022 | Научный семинар]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Осенний семестр 2021 года - основные дисциплины ===&lt;br /&gt;
&lt;br /&gt;
[[Про индивидуальные планы 2021]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! 1 курс !! 2 курс !! 3 курс !! 4 курс !! 5 курс !! 6 курс &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
[[Параллельные_и_распределенные_вычисления_2021|Параллельные и распределенные вычисления]]&lt;br /&gt;
&lt;br /&gt;
[[Java_2021|Промышленное программирование на Java]]&lt;br /&gt;
&lt;br /&gt;
[[Java_foreigners_2021 | Java foreign group]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
=== Факультетские курсы ===&lt;br /&gt;
[[ТПОС_2021|Технологии программирования и операционные системы]]&lt;br /&gt;
&lt;br /&gt;
[[cv_2021|Анализ изображений]]&lt;br /&gt;
=== Кафедральные курсы ===&lt;br /&gt;
[[НИС_2021-2|Научный семинар]]&lt;br /&gt;
&lt;br /&gt;
[[PythonAnalysis_2021|Применение Python в статистическом анализе данных]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
[[МОБОД_2021|Машинное обучение на больших объемах данных]]&lt;br /&gt;
&lt;br /&gt;
[[Web-2021|Web программирование]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Весенний семестр 2021 года - основные дисциплины ===&lt;br /&gt;
&lt;br /&gt;
[[Про индивидуальные планы]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! 1 курс !! 2 курс !! 3 курс !! 4 курс !! 5 курс&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
=== Факультетские курсы ===&lt;br /&gt;
[[IMI_2021 | История и методология информатики и вычислительной техники]]&lt;br /&gt;
&lt;br /&gt;
[[Java_mag_2021 | Программирование на Java]]&lt;br /&gt;
&lt;br /&gt;
[[HOBOD_2021 | Хранение и обработка больших объемов данных]]&lt;br /&gt;
&lt;br /&gt;
[[NLP_2021 | Автоматическая обработка естественного языка]]&lt;br /&gt;
&lt;br /&gt;
=== Кафедральные курсы ===&lt;br /&gt;
&lt;br /&gt;
[[ProgAutom_2021 | Автоматизация программирования]]&lt;br /&gt;
&lt;br /&gt;
[[НИС_2021 | Научный семинар]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Осенний семестр 2020 года - основные дисциплины ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! 1 курс !! 2 курс !! 3 курс !! 4 курс !! 5 курс !! 6 курс &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
[[Формалки_2020|Формальные языки и трансляции]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
[[Параллельные_и_распределенные_вычисления_2020|Параллельные и распределенные вычисления]]&lt;br /&gt;
&lt;br /&gt;
[[Java_2020|Промышленное программирование на Java]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
[[ТПОС_2020|Технологии программирования и операционные системы]]&lt;br /&gt;
&lt;br /&gt;
[[cv_2020|Анализ изображений]]&lt;br /&gt;
||&lt;br /&gt;
[[МОБОД_2020|Машинное обучение на больших объемах данных]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Весенний семестр 2020 года - основные дисциплины ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! 1 курс !! 2 курс !! 3 курс !! 4 курс !! 5 курс&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы_ИВТ_2020|Алгоритмы и структуры данных (поток ИВТ)]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
[[Теория и практика многопоточной синхронизации|Теория и практика многопоточной синхронизации]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
[[Хранение и обработка больших объемов данных]]&lt;br /&gt;
&lt;br /&gt;
[[Технологии программирования и операционные системы - 2]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Осенний семестр 2019 года - основные дисциплины ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! 1 курс !! 2 курс !! 3 курс !! 4 курс !! 5 курс !! 6 курс &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
[[Формалки_2019|Формальные языки и трансляции]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
[[МВС_2019|Параллельные и распределенные вычисления]]&lt;br /&gt;
&lt;br /&gt;
[[Java_2019|Промышленное программирование на Java]]&lt;br /&gt;
&lt;br /&gt;
[[Методы_оптимизации_2019|Методы оптимизации]]&lt;br /&gt;
&lt;br /&gt;
[[Full-Stack_2019|Full-stack разработка]]&lt;br /&gt;
&lt;br /&gt;
[[Сложность_вычислений_2019|Сложность вычислений]]&lt;br /&gt;
&lt;br /&gt;
[[Мат.статы_2019|Математическая статистика]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
[[ТПОС_2019|Технологии программирования и операционные системы]]&lt;br /&gt;
||&lt;br /&gt;
[[МОБОД_2019|Машинное обучение на больших объемах данных]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Осенний семестр 2018 года - основные дисциплины ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! 1 курс !! 2 курс !! 3 курс !! 4 курс !! 5 курс !! 6 курс &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
[[Программирование_базовый_2018|Введение в программирование (базовый поток)]]&lt;br /&gt;
&lt;br /&gt;
[[Программирование_основной_2018|Введение в программирование (основной поток)]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
[[АКОС_ПМИ_набор_2017|Архитектура компьютеров и операционные системы (ПМИ, набор 2017 года)]]&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы_базовый_2018|Алгоритмы и структуры данных (базовый поток)]]&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы_основной_2018|Алгоритмы и структуры данных (основной поток)]]&lt;br /&gt;
&lt;br /&gt;
[[Формалки_2018|Формальные языки и трансляции]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
[[АКОС_ПМИ_набор_2016|Дополнительные главы Архитектуры компьютеров и операционных систем (ПМИ, набор 2016 года)]]&lt;br /&gt;
&lt;br /&gt;
[[МВС_2018|Параллельные и распределенные вычисления]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
[[ППС_2018|Проектирование программных систем]]&lt;br /&gt;
&lt;br /&gt;
[[Машинка_часть_2_2018|Прикладное машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
[[Робастные_методы_2018|Робастные методы в статистике]]&lt;br /&gt;
&lt;br /&gt;
[[Теория_решеток_2018|Теория решеток для анализа и разработки данных]]&lt;br /&gt;
&lt;br /&gt;
[[Анализ_изображений_2018|Анализ изображений]]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
[[МОБОД_2018|Машинное обучение на больших объемах данных]]&lt;br /&gt;
&lt;br /&gt;
[[РДИ_2018|Работа с данными в индустрии]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Научно-исследовательская работа ==&lt;br /&gt;
&lt;br /&gt;
[[Архив тем НИР прошлых лет]]&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3173</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3173"/>
		<updated>2024-08-21T09:49:48Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Контакты */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Учебный проект =&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
===== Примеры тем проектов =====&lt;br /&gt;
В таблице примеры тем проектов, предлагавшихся в прошлые годы.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Название !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [https://objectoriented.ru/design:smartcontract СмартРитейл]&lt;br /&gt;
| Интегрируем недоверчивых участников рынка ритейла с помощью блокчейна&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [https://objectoriented.ru/design:okfridge Ok,Fridge!]&lt;br /&gt;
| Холодильник доставит к дивану соки и воды под настроение, дозакажет в магазине&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [https://objectoriented.ru/design:autofill ЗалейсяIS]&lt;br /&gt;
| Управляем сетью авто-автозаправок, работающих без персонала&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [https://objectoriented.ru/design:docfree БезВрача]&lt;br /&gt;
| Контролируем соблюдение условий медицинского страхования, и вообще соблюдения правил ЗОЖ&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [https://objectoriented.ru/design:sharecar Перетачка]&lt;br /&gt;
| Едем вместе на чужой машине и везем посылки. Система обеспечивает работу сервиса&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| [https://objectoriented.ru/design:qacall Как?Никак!]&lt;br /&gt;
| Модернизированный CallЦентр, роботы отвечают на типовые вопросы и сами ведут FAQ&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| [https://objectoriented.ru/design:shipall ДоставимВсе]&lt;br /&gt;
| Служба доставки формирует из товаров заказы и перемещает по маршрутам. Маршруты формируются вручную, автоматически как план, динамически. Учет веса и стоимости при планировании&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| [https://objectoriented.ru/design:phystechtaxi Физтех-Такси]&lt;br /&gt;
| Агрегатор такси со скидкой на поездки в МФТИ&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
См. также [https://objectoriented.ru/design:oldcases задачи прошлых лет]&lt;br /&gt;
&lt;br /&gt;
= Контрольная работа и устный ответ =&lt;br /&gt;
&lt;br /&gt;
Контрольная работа может быть предложена тем студентам, кто не набрал достаточно баллов для получения оценки автоматом. В составе письменной контрольной работы на лекции будут предложены примерные задания.&lt;br /&gt;
&lt;br /&gt;
# Задача на проектирование с применением UML2, ER, DFD, MSA, GoF, SOLID.&lt;br /&gt;
# Вопросы по методам проектирования по билетам для ответа устно&lt;br /&gt;
&lt;br /&gt;
Примерные критерии оценивания&lt;br /&gt;
&lt;br /&gt;
* Правильность и количество решенных задач&lt;br /&gt;
* Полнота и правильность ответа на вопросы по методам проектирования&lt;br /&gt;
* Ответы на дополнительные вопросы по теме&lt;br /&gt;
* Владение терминологией и методами проектирования&lt;br /&gt;
* Способность принимать и обосновывать проектировочные решения&lt;br /&gt;
* Способность находить и устранять ошибки в применении методов&lt;br /&gt;
&lt;br /&gt;
= Оценки по курсу =&lt;br /&gt;
Критерии оценивания, итоговый балл&lt;br /&gt;
&lt;br /&gt;
ИБ = 0,2 * (ПЗ или ЛЗ)+ 0,3 * КЛК + 0,7 * (ПРЭ или ЭКЗ)&lt;br /&gt;
&lt;br /&gt;
ЛЗ + ПЗ - посещения лекций и работа на семинаре&lt;br /&gt;
&lt;br /&gt;
КЛК - оценка за коллоквиум&lt;br /&gt;
&lt;br /&gt;
ЭКЗ - устно-письменный экзамен в конце семестра&lt;br /&gt;
&lt;br /&gt;
ПРЭ - курсовой проект&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
# Vaughn Vernon. Implementing Domain-Driven Design, (любое издание)&lt;br /&gt;
# Sam Newman. Building Microservices&lt;br /&gt;
# Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra. Head First Design Patterns&lt;br /&gt;
# Ian Sommerville. Software Engineering 10th Ed или Roger Pressman. Software Engineering: A Practitioner&#039;s Approach 8th Ed.&lt;br /&gt;
# [https://www.uml-diagrams.org/ UML diagrams reference]&lt;br /&gt;
# [https://objectoriented.ru/pps-book UML. Сборник задач]&lt;br /&gt;
&lt;br /&gt;
= Инструменты моделирования =&lt;br /&gt;
&#039;&#039;&#039;Modelio Community&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://www.modelio.org/downloads/download-modelio.html&lt;br /&gt;
&lt;br /&gt;
IDE для моделирования, с открытым исходным кодом, понимает UML2 и SysML в редакции Community Edition. Неплохой UI, в целом прост в использовании. Тем не менее, не полностью поддерживает все тонкости UML 2.4.1 или UML 2.5. Подходит для небольших и учебных проектов&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Visual Paradigm Community Ed&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://www.visual-paradigm.com/download/community.jsp&lt;br /&gt;
&lt;br /&gt;
Бесплатная версия коммерческого IDE для моделирования ПО с помощью UML 2, помогает с ER-диаграммами и построением моделей по тексту. Требует регистрации при старте. Много фич и диаграммы, которые не спрятать и они требуют платной версии. Получается перегруженный интерфейс, сложнее в использовании.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Draw.io + VS Code Plugin&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://marketplace.visualstudio.com/items?itemName=hediet.vscode-drawio&lt;br /&gt;
&lt;br /&gt;
Известный онлайн и офлайн инструмент для рисования диаграмм, поможет с UML2, ER диаграммами и пр. Дополнения помогут проверить согласованность моделей, но проверки и рефакторинги явно хуже чем у инструментов выше. Хорошо подходит для гибкого моделирования в правильных руках.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Другие рисовалки и средства моделирования&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
При выборе инструмента для моделирования обратите внимание на удобство UI, поддержку стандартов UML2 и др, функций экспорта и импорта, а также ограничения лицензии. Для курса понадобятся минимум эти диаграммы: классов, вариантов использования, деятельности или состояний, компонентов.&lt;br /&gt;
&lt;br /&gt;
= Еще релевантные источники и дополнительные ссылки =&lt;br /&gt;
Дополнительная литература:&lt;br /&gt;
&lt;br /&gt;
# Нотация UML 2 uml2-notation.zip&lt;br /&gt;
# Б. Мейер, Объектно-ориентированное конструирование программных систем. - Русская Редакция, 2005&lt;br /&gt;
# Microsoft. Руководство Майкрософт по проектированию архитектуры приложений для Azure, [https://docs.microsoft.com/en-us/azure/architecture/guide/| на сайте Майкрософт]]&lt;br /&gt;
&lt;br /&gt;
Интернет-источники:&lt;br /&gt;
&lt;br /&gt;
# Спецификация UML 2.5 на сайте OMG. (http://www.omg.org/spec/UML/2.2/)&lt;br /&gt;
&lt;br /&gt;
Классические статьи методам проектирования:&lt;br /&gt;
&lt;br /&gt;
# (discussion) P. Ralph, R. Mohanani. Is Requirements Engineering Inherently Counterproductive?&lt;br /&gt;
# N. Wirth. Program Development by Stepwise Refinement. (http://www.inf.ethz.ch/personal/wirth/Articles/StepwiseRefinement.pdf)&lt;br /&gt;
# D. Parnas. On the Criteria to be used in Decomposing System into Modules (http://www.cs.umd.edu/class/spring2003/cmsc838p/Design/criteria.pdf)&lt;br /&gt;
# D. Garlan, M. Shaw. An Introduction to Software Architecture (http://www.cs.cmu.edu/afs/cs/project/vit/ftp/pdf/intro_softarch.pdf)&lt;br /&gt;
# Kent Beck, Ward Cunningham. A Laboratory For Teaching Object-Oriented Thinking / OOPSLA89 (http://c2.com/doc/oopsla89/paper.html)&lt;br /&gt;
# Doug Rosenberg, Kendall Scott, The ICONIX Process, (http://www.informit.com/articles/printerfriendly.aspx?p=167902)&lt;br /&gt;
# B. Liskov. Programming with abstract data types&lt;br /&gt;
# Friedrich Steimann, Philip Mayer. Patterns of Interface-Based Programming&lt;br /&gt;
# Rebecca Wirfs-Brock, Object-oriented design. A responsibility-driven approach&lt;br /&gt;
# Robert C. Sharblet, Samuel S. Cohen. The object-oriented brewery. A comparison of two object-oriented development methods&lt;br /&gt;
# P. Krutchen. Architectural Blueprints—The “4+1” View Model of Software Architecture, (http://www.cs.ubc.ca/~gregor/teaching/papers/4+1view-architecture.pdf)&lt;br /&gt;
# IEEE Recommended practice for architectural description of software intensive systems, (http://www.win.tue.nl/~wsinmak/Education/2II45/software-architecture-std1471-2000.pdf)&lt;br /&gt;
# M. Fowler. Who need an Achitect?, http://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf&lt;br /&gt;
# D. Greer, Interactive Application Architecture, http://aspiringcraftsman.com/2007/08/25/interactive-application-architecture/&lt;br /&gt;
# Frank DeRemer, Hans Kron. PROGRAMMING-IN-THE LARGE VERSUS PROGRAMMING-IN-THE-SMALL (google it)&lt;br /&gt;
# The Agile Method and Other Fairy Tales (google it)&lt;br /&gt;
# A RATIONAL DESIGN PROCESS: HOW AND WHY TO FAKE IT (google it)&lt;br /&gt;
# Edward V. Berard. Be Careful With “Use Cases”&lt;br /&gt;
# (beware!)Chidamber Kemerer Metrics Suite. A Measurement Theory Perspective&lt;br /&gt;
# McCabe. A complexity measure&lt;br /&gt;
&lt;br /&gt;
Паттерны:&lt;br /&gt;
&lt;br /&gt;
# Antipatterns Wiki, http://c2.com/cgi/wiki?AntiPatternsCatalog&lt;br /&gt;
# Паттерны обработки ошибок, http://c2.com/cgi/wiki?ExceptionPatterns&lt;br /&gt;
# Microservices patterns, https://microservices.io&lt;br /&gt;
# GoF. Design Patterns: elements of reusable object-oriented software&lt;br /&gt;
# Статья на c2.com про DoubleDispatch и DoubleDispatchExample,&lt;br /&gt;
# Jenifer Tidwell, Designing Interfaces&lt;br /&gt;
# Scott Ambler, Process Patterns&lt;br /&gt;
# Martin Fowler, Analysis Patterns&lt;br /&gt;
# Martin Fowler, Patterns of Enterprise Application Architecture&lt;br /&gt;
# G. Hohpe, Enterprise Integration Patterns&lt;br /&gt;
# D. Greer, Interactive Application Architecture, http://aspiringcraftsman.com/2007/08/25/interactive-application-architecture/&lt;br /&gt;
# Pattern-Oriented Software Architecture (несколько томов), http://www.cs.wustl.edu/~schmidt/POSA/&lt;br /&gt;
# C++ Idioms, http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms&lt;br /&gt;
# Linda Rising - Patterns Almanac 2000, http://www.smallmemory.com/almanac/&lt;br /&gt;
&lt;br /&gt;
= Контакты =&lt;br /&gt;
&#039;&#039;&#039;Хританков Антон Сергеевич&#039;&#039;&#039;, автор курса&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В прошлом семинары по курсу вели&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Межуев Игорь Юрьевич&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Андрианов Андрей Иванович&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ахтямов Павел Ибрагимович&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Старичков Никита Юрьевич&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Штукатуров Алексей Николаевич&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сергей Зыков Викторович&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шестаков Роман&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ивахненко Андрей Александрович&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3172</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3172"/>
		<updated>2024-08-21T09:49:07Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Еще релевантные источники и дополнительные ссылки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Учебный проект =&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
===== Примеры тем проектов =====&lt;br /&gt;
В таблице примеры тем проектов, предлагавшихся в прошлые годы.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Название !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [https://objectoriented.ru/design:smartcontract СмартРитейл]&lt;br /&gt;
| Интегрируем недоверчивых участников рынка ритейла с помощью блокчейна&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [https://objectoriented.ru/design:okfridge Ok,Fridge!]&lt;br /&gt;
| Холодильник доставит к дивану соки и воды под настроение, дозакажет в магазине&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [https://objectoriented.ru/design:autofill ЗалейсяIS]&lt;br /&gt;
| Управляем сетью авто-автозаправок, работающих без персонала&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [https://objectoriented.ru/design:docfree БезВрача]&lt;br /&gt;
| Контролируем соблюдение условий медицинского страхования, и вообще соблюдения правил ЗОЖ&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [https://objectoriented.ru/design:sharecar Перетачка]&lt;br /&gt;
| Едем вместе на чужой машине и везем посылки. Система обеспечивает работу сервиса&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| [https://objectoriented.ru/design:qacall Как?Никак!]&lt;br /&gt;
| Модернизированный CallЦентр, роботы отвечают на типовые вопросы и сами ведут FAQ&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| [https://objectoriented.ru/design:shipall ДоставимВсе]&lt;br /&gt;
| Служба доставки формирует из товаров заказы и перемещает по маршрутам. Маршруты формируются вручную, автоматически как план, динамически. Учет веса и стоимости при планировании&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| [https://objectoriented.ru/design:phystechtaxi Физтех-Такси]&lt;br /&gt;
| Агрегатор такси со скидкой на поездки в МФТИ&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
См. также [https://objectoriented.ru/design:oldcases задачи прошлых лет]&lt;br /&gt;
&lt;br /&gt;
= Контрольная работа и устный ответ =&lt;br /&gt;
&lt;br /&gt;
Контрольная работа может быть предложена тем студентам, кто не набрал достаточно баллов для получения оценки автоматом. В составе письменной контрольной работы на лекции будут предложены примерные задания.&lt;br /&gt;
&lt;br /&gt;
# Задача на проектирование с применением UML2, ER, DFD, MSA, GoF, SOLID.&lt;br /&gt;
# Вопросы по методам проектирования по билетам для ответа устно&lt;br /&gt;
&lt;br /&gt;
Примерные критерии оценивания&lt;br /&gt;
&lt;br /&gt;
* Правильность и количество решенных задач&lt;br /&gt;
* Полнота и правильность ответа на вопросы по методам проектирования&lt;br /&gt;
* Ответы на дополнительные вопросы по теме&lt;br /&gt;
* Владение терминологией и методами проектирования&lt;br /&gt;
* Способность принимать и обосновывать проектировочные решения&lt;br /&gt;
* Способность находить и устранять ошибки в применении методов&lt;br /&gt;
&lt;br /&gt;
= Оценки по курсу =&lt;br /&gt;
Критерии оценивания, итоговый балл&lt;br /&gt;
&lt;br /&gt;
ИБ = 0,2 * (ПЗ или ЛЗ)+ 0,3 * КЛК + 0,7 * (ПРЭ или ЭКЗ)&lt;br /&gt;
&lt;br /&gt;
ЛЗ + ПЗ - посещения лекций и работа на семинаре&lt;br /&gt;
&lt;br /&gt;
КЛК - оценка за коллоквиум&lt;br /&gt;
&lt;br /&gt;
ЭКЗ - устно-письменный экзамен в конце семестра&lt;br /&gt;
&lt;br /&gt;
ПРЭ - курсовой проект&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
# Vaughn Vernon. Implementing Domain-Driven Design, (любое издание)&lt;br /&gt;
# Sam Newman. Building Microservices&lt;br /&gt;
# Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra. Head First Design Patterns&lt;br /&gt;
# Ian Sommerville. Software Engineering 10th Ed или Roger Pressman. Software Engineering: A Practitioner&#039;s Approach 8th Ed.&lt;br /&gt;
# [https://www.uml-diagrams.org/ UML diagrams reference]&lt;br /&gt;
# [https://objectoriented.ru/pps-book UML. Сборник задач]&lt;br /&gt;
&lt;br /&gt;
= Инструменты моделирования =&lt;br /&gt;
&#039;&#039;&#039;Modelio Community&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://www.modelio.org/downloads/download-modelio.html&lt;br /&gt;
&lt;br /&gt;
IDE для моделирования, с открытым исходным кодом, понимает UML2 и SysML в редакции Community Edition. Неплохой UI, в целом прост в использовании. Тем не менее, не полностью поддерживает все тонкости UML 2.4.1 или UML 2.5. Подходит для небольших и учебных проектов&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Visual Paradigm Community Ed&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://www.visual-paradigm.com/download/community.jsp&lt;br /&gt;
&lt;br /&gt;
Бесплатная версия коммерческого IDE для моделирования ПО с помощью UML 2, помогает с ER-диаграммами и построением моделей по тексту. Требует регистрации при старте. Много фич и диаграммы, которые не спрятать и они требуют платной версии. Получается перегруженный интерфейс, сложнее в использовании.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Draw.io + VS Code Plugin&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://marketplace.visualstudio.com/items?itemName=hediet.vscode-drawio&lt;br /&gt;
&lt;br /&gt;
Известный онлайн и офлайн инструмент для рисования диаграмм, поможет с UML2, ER диаграммами и пр. Дополнения помогут проверить согласованность моделей, но проверки и рефакторинги явно хуже чем у инструментов выше. Хорошо подходит для гибкого моделирования в правильных руках.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Другие рисовалки и средства моделирования&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
При выборе инструмента для моделирования обратите внимание на удобство UI, поддержку стандартов UML2 и др, функций экспорта и импорта, а также ограничения лицензии. Для курса понадобятся минимум эти диаграммы: классов, вариантов использования, деятельности или состояний, компонентов.&lt;br /&gt;
&lt;br /&gt;
= Еще релевантные источники и дополнительные ссылки =&lt;br /&gt;
Дополнительная литература:&lt;br /&gt;
&lt;br /&gt;
# Нотация UML 2 uml2-notation.zip&lt;br /&gt;
# Б. Мейер, Объектно-ориентированное конструирование программных систем. - Русская Редакция, 2005&lt;br /&gt;
# Microsoft. Руководство Майкрософт по проектированию архитектуры приложений для Azure, [https://docs.microsoft.com/en-us/azure/architecture/guide/| на сайте Майкрософт]]&lt;br /&gt;
&lt;br /&gt;
Интернет-источники:&lt;br /&gt;
&lt;br /&gt;
# Спецификация UML 2.5 на сайте OMG. (http://www.omg.org/spec/UML/2.2/)&lt;br /&gt;
&lt;br /&gt;
Классические статьи методам проектирования:&lt;br /&gt;
&lt;br /&gt;
# (discussion) P. Ralph, R. Mohanani. Is Requirements Engineering Inherently Counterproductive?&lt;br /&gt;
# N. Wirth. Program Development by Stepwise Refinement. (http://www.inf.ethz.ch/personal/wirth/Articles/StepwiseRefinement.pdf)&lt;br /&gt;
# D. Parnas. On the Criteria to be used in Decomposing System into Modules (http://www.cs.umd.edu/class/spring2003/cmsc838p/Design/criteria.pdf)&lt;br /&gt;
# D. Garlan, M. Shaw. An Introduction to Software Architecture (http://www.cs.cmu.edu/afs/cs/project/vit/ftp/pdf/intro_softarch.pdf)&lt;br /&gt;
# Kent Beck, Ward Cunningham. A Laboratory For Teaching Object-Oriented Thinking / OOPSLA89 (http://c2.com/doc/oopsla89/paper.html)&lt;br /&gt;
# Doug Rosenberg, Kendall Scott, The ICONIX Process, (http://www.informit.com/articles/printerfriendly.aspx?p=167902)&lt;br /&gt;
# B. Liskov. Programming with abstract data types&lt;br /&gt;
# Friedrich Steimann, Philip Mayer. Patterns of Interface-Based Programming&lt;br /&gt;
# Rebecca Wirfs-Brock, Object-oriented design. A responsibility-driven approach&lt;br /&gt;
# Robert C. Sharblet, Samuel S. Cohen. The object-oriented brewery. A comparison of two object-oriented development methods&lt;br /&gt;
# P. Krutchen. Architectural Blueprints—The “4+1” View Model of Software Architecture, (http://www.cs.ubc.ca/~gregor/teaching/papers/4+1view-architecture.pdf)&lt;br /&gt;
# IEEE Recommended practice for architectural description of software intensive systems, (http://www.win.tue.nl/~wsinmak/Education/2II45/software-architecture-std1471-2000.pdf)&lt;br /&gt;
# M. Fowler. Who need an Achitect?, http://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf&lt;br /&gt;
# D. Greer, Interactive Application Architecture, http://aspiringcraftsman.com/2007/08/25/interactive-application-architecture/&lt;br /&gt;
# Frank DeRemer, Hans Kron. PROGRAMMING-IN-THE LARGE VERSUS PROGRAMMING-IN-THE-SMALL (google it)&lt;br /&gt;
# The Agile Method and Other Fairy Tales (google it)&lt;br /&gt;
# A RATIONAL DESIGN PROCESS: HOW AND WHY TO FAKE IT (google it)&lt;br /&gt;
# Edward V. Berard. Be Careful With “Use Cases”&lt;br /&gt;
# (beware!)Chidamber Kemerer Metrics Suite. A Measurement Theory Perspective&lt;br /&gt;
# McCabe. A complexity measure&lt;br /&gt;
&lt;br /&gt;
Паттерны:&lt;br /&gt;
&lt;br /&gt;
# Antipatterns Wiki, http://c2.com/cgi/wiki?AntiPatternsCatalog&lt;br /&gt;
# Паттерны обработки ошибок, http://c2.com/cgi/wiki?ExceptionPatterns&lt;br /&gt;
# Microservices patterns, https://microservices.io&lt;br /&gt;
# GoF. Design Patterns: elements of reusable object-oriented software&lt;br /&gt;
# Статья на c2.com про DoubleDispatch и DoubleDispatchExample,&lt;br /&gt;
# Jenifer Tidwell, Designing Interfaces&lt;br /&gt;
# Scott Ambler, Process Patterns&lt;br /&gt;
# Martin Fowler, Analysis Patterns&lt;br /&gt;
# Martin Fowler, Patterns of Enterprise Application Architecture&lt;br /&gt;
# G. Hohpe, Enterprise Integration Patterns&lt;br /&gt;
# D. Greer, Interactive Application Architecture, http://aspiringcraftsman.com/2007/08/25/interactive-application-architecture/&lt;br /&gt;
# Pattern-Oriented Software Architecture (несколько томов), http://www.cs.wustl.edu/~schmidt/POSA/&lt;br /&gt;
# C++ Idioms, http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms&lt;br /&gt;
# Linda Rising - Patterns Almanac 2000, http://www.smallmemory.com/almanac/&lt;br /&gt;
&lt;br /&gt;
= Контакты =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3171</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3171"/>
		<updated>2024-08-21T09:48:46Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Общие сведения */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Учебный проект =&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
===== Примеры тем проектов =====&lt;br /&gt;
В таблице примеры тем проектов, предлагавшихся в прошлые годы.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Название !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [https://objectoriented.ru/design:smartcontract СмартРитейл]&lt;br /&gt;
| Интегрируем недоверчивых участников рынка ритейла с помощью блокчейна&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [https://objectoriented.ru/design:okfridge Ok,Fridge!]&lt;br /&gt;
| Холодильник доставит к дивану соки и воды под настроение, дозакажет в магазине&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [https://objectoriented.ru/design:autofill ЗалейсяIS]&lt;br /&gt;
| Управляем сетью авто-автозаправок, работающих без персонала&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [https://objectoriented.ru/design:docfree БезВрача]&lt;br /&gt;
| Контролируем соблюдение условий медицинского страхования, и вообще соблюдения правил ЗОЖ&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [https://objectoriented.ru/design:sharecar Перетачка]&lt;br /&gt;
| Едем вместе на чужой машине и везем посылки. Система обеспечивает работу сервиса&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| [https://objectoriented.ru/design:qacall Как?Никак!]&lt;br /&gt;
| Модернизированный CallЦентр, роботы отвечают на типовые вопросы и сами ведут FAQ&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| [https://objectoriented.ru/design:shipall ДоставимВсе]&lt;br /&gt;
| Служба доставки формирует из товаров заказы и перемещает по маршрутам. Маршруты формируются вручную, автоматически как план, динамически. Учет веса и стоимости при планировании&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| [https://objectoriented.ru/design:phystechtaxi Физтех-Такси]&lt;br /&gt;
| Агрегатор такси со скидкой на поездки в МФТИ&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
См. также [https://objectoriented.ru/design:oldcases задачи прошлых лет]&lt;br /&gt;
&lt;br /&gt;
= Контрольная работа и устный ответ =&lt;br /&gt;
&lt;br /&gt;
Контрольная работа может быть предложена тем студентам, кто не набрал достаточно баллов для получения оценки автоматом. В составе письменной контрольной работы на лекции будут предложены примерные задания.&lt;br /&gt;
&lt;br /&gt;
# Задача на проектирование с применением UML2, ER, DFD, MSA, GoF, SOLID.&lt;br /&gt;
# Вопросы по методам проектирования по билетам для ответа устно&lt;br /&gt;
&lt;br /&gt;
Примерные критерии оценивания&lt;br /&gt;
&lt;br /&gt;
* Правильность и количество решенных задач&lt;br /&gt;
* Полнота и правильность ответа на вопросы по методам проектирования&lt;br /&gt;
* Ответы на дополнительные вопросы по теме&lt;br /&gt;
* Владение терминологией и методами проектирования&lt;br /&gt;
* Способность принимать и обосновывать проектировочные решения&lt;br /&gt;
* Способность находить и устранять ошибки в применении методов&lt;br /&gt;
&lt;br /&gt;
= Оценки по курсу =&lt;br /&gt;
Критерии оценивания, итоговый балл&lt;br /&gt;
&lt;br /&gt;
ИБ = 0,2 * (ПЗ или ЛЗ)+ 0,3 * КЛК + 0,7 * (ПРЭ или ЭКЗ)&lt;br /&gt;
&lt;br /&gt;
ЛЗ + ПЗ - посещения лекций и работа на семинаре&lt;br /&gt;
&lt;br /&gt;
КЛК - оценка за коллоквиум&lt;br /&gt;
&lt;br /&gt;
ЭКЗ - устно-письменный экзамен в конце семестра&lt;br /&gt;
&lt;br /&gt;
ПРЭ - курсовой проект&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
# Vaughn Vernon. Implementing Domain-Driven Design, (любое издание)&lt;br /&gt;
# Sam Newman. Building Microservices&lt;br /&gt;
# Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra. Head First Design Patterns&lt;br /&gt;
# Ian Sommerville. Software Engineering 10th Ed или Roger Pressman. Software Engineering: A Practitioner&#039;s Approach 8th Ed.&lt;br /&gt;
# [https://www.uml-diagrams.org/ UML diagrams reference]&lt;br /&gt;
# [https://objectoriented.ru/pps-book UML. Сборник задач]&lt;br /&gt;
&lt;br /&gt;
= Инструменты моделирования =&lt;br /&gt;
&#039;&#039;&#039;Modelio Community&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://www.modelio.org/downloads/download-modelio.html&lt;br /&gt;
&lt;br /&gt;
IDE для моделирования, с открытым исходным кодом, понимает UML2 и SysML в редакции Community Edition. Неплохой UI, в целом прост в использовании. Тем не менее, не полностью поддерживает все тонкости UML 2.4.1 или UML 2.5. Подходит для небольших и учебных проектов&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Visual Paradigm Community Ed&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://www.visual-paradigm.com/download/community.jsp&lt;br /&gt;
&lt;br /&gt;
Бесплатная версия коммерческого IDE для моделирования ПО с помощью UML 2, помогает с ER-диаграммами и построением моделей по тексту. Требует регистрации при старте. Много фич и диаграммы, которые не спрятать и они требуют платной версии. Получается перегруженный интерфейс, сложнее в использовании.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Draw.io + VS Code Plugin&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://marketplace.visualstudio.com/items?itemName=hediet.vscode-drawio&lt;br /&gt;
&lt;br /&gt;
Известный онлайн и офлайн инструмент для рисования диаграмм, поможет с UML2, ER диаграммами и пр. Дополнения помогут проверить согласованность моделей, но проверки и рефакторинги явно хуже чем у инструментов выше. Хорошо подходит для гибкого моделирования в правильных руках.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Другие рисовалки и средства моделирования&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
При выборе инструмента для моделирования обратите внимание на удобство UI, поддержку стандартов UML2 и др, функций экспорта и импорта, а также ограничения лицензии. Для курса понадобятся минимум эти диаграммы: классов, вариантов использования, деятельности или состояний, компонентов.&lt;br /&gt;
&lt;br /&gt;
= Еще релевантные источники и дополнительные ссылки =&lt;br /&gt;
Дополнительная литература:&lt;br /&gt;
&lt;br /&gt;
# Нотация UML 2 uml2-notation.zip&lt;br /&gt;
# Б. Мейер, Объектно-ориентированное конструирование программных систем. - Русская Редакция, 2005&lt;br /&gt;
# Microsoft. Руководство Майкрософт по проектированию архитектуры приложений для Azure, [https://docs.microsoft.com/en-us/azure/architecture/guide/| на сайте Майкрософт]]&lt;br /&gt;
&lt;br /&gt;
Интернет-источники:&lt;br /&gt;
&lt;br /&gt;
# Спецификация UML 2.5 на сайте OMG. (http://www.omg.org/spec/UML/2.2/)&lt;br /&gt;
&lt;br /&gt;
Классические статьи методам проектирования:&lt;br /&gt;
&lt;br /&gt;
# (discussion) P. Ralph, R. Mohanani. Is Requirements Engineering Inherently Counterproductive?&lt;br /&gt;
# N. Wirth. Program Development by Stepwise Refinement. (http://www.inf.ethz.ch/personal/wirth/Articles/StepwiseRefinement.pdf)&lt;br /&gt;
# D. Parnas. On the Criteria to be used in Decomposing System into Modules (http://www.cs.umd.edu/class/spring2003/cmsc838p/Design/criteria.pdf)&lt;br /&gt;
# D. Garlan, M. Shaw. An Introduction to Software Architecture (http://www.cs.cmu.edu/afs/cs/project/vit/ftp/pdf/intro_softarch.pdf)&lt;br /&gt;
# Kent Beck, Ward Cunningham. A Laboratory For Teaching Object-Oriented Thinking / OOPSLA89 (http://c2.com/doc/oopsla89/paper.html)&lt;br /&gt;
# Doug Rosenberg, Kendall Scott, The ICONIX Process, (http://www.informit.com/articles/printerfriendly.aspx?p=167902)&lt;br /&gt;
# B. Liskov. Programming with abstract data types&lt;br /&gt;
# Friedrich Steimann, Philip Mayer. Patterns of Interface-Based Programming&lt;br /&gt;
# Rebecca Wirfs-Brock, Object-oriented design. A responsibility-driven approach&lt;br /&gt;
# Robert C. Sharblet, Samuel S. Cohen. The object-oriented brewery. A comparison of two object-oriented development methods&lt;br /&gt;
# P. Krutchen. Architectural Blueprints—The “4+1” View Model of Software Architecture, (http://www.cs.ubc.ca/~gregor/teaching/papers/4+1view-architecture.pdf)&lt;br /&gt;
# IEEE Recommended practice for architectural description of software intensive systems, (http://www.win.tue.nl/~wsinmak/Education/2II45/software-architecture-std1471-2000.pdf)&lt;br /&gt;
# M. Fowler. Who need an Achitect?, http://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf&lt;br /&gt;
# D. Greer, Interactive Application Architecture, http://aspiringcraftsman.com/2007/08/25/interactive-application-architecture/&lt;br /&gt;
# Frank DeRemer, Hans Kron. PROGRAMMING-IN-THE LARGE VERSUS PROGRAMMING-IN-THE-SMALL (google it)&lt;br /&gt;
# The Agile Method and Other Fairy Tales (google it)&lt;br /&gt;
# A RATIONAL DESIGN PROCESS: HOW AND WHY TO FAKE IT (google it)&lt;br /&gt;
# Edward V. Berard. Be Careful With “Use Cases”&lt;br /&gt;
# (beware!)Chidamber Kemerer Metrics Suite. A Measurement Theory Perspective&lt;br /&gt;
# McCabe. A complexity measure&lt;br /&gt;
&lt;br /&gt;
Паттерны:&lt;br /&gt;
&lt;br /&gt;
# Antipatterns Wiki, http://c2.com/cgi/wiki?AntiPatternsCatalog&lt;br /&gt;
# Паттерны обработки ошибок, http://c2.com/cgi/wiki?ExceptionPatterns&lt;br /&gt;
# Microservices patterns, https://microservices.io&lt;br /&gt;
# GoF. Design Patterns: elements of reusable object-oriented software&lt;br /&gt;
# Статья на c2.com про DoubleDispatch и DoubleDispatchExample,&lt;br /&gt;
# Jenifer Tidwell, Designing Interfaces&lt;br /&gt;
# Scott Ambler, Process Patterns&lt;br /&gt;
# Martin Fowler, Analysis Patterns&lt;br /&gt;
# Martin Fowler, Patterns of Enterprise Application Architecture&lt;br /&gt;
# G. Hohpe, Enterprise Integration Patterns&lt;br /&gt;
# D. Greer, Interactive Application Architecture, http://aspiringcraftsman.com/2007/08/25/interactive-application-architecture/&lt;br /&gt;
# Pattern-Oriented Software Architecture (несколько томов), http://www.cs.wustl.edu/~schmidt/POSA/&lt;br /&gt;
# C++ Idioms, http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms&lt;br /&gt;
# Linda Rising - Patterns Almanac 2000, http://www.smallmemory.com/almanac/&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3170</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3170"/>
		<updated>2024-08-21T09:48:23Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Инструменты моделирования */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
&#039;&#039;&#039;Хританков Антон Сергеевич&#039;&#039;&#039;, автор курса&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Учебный проект =&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
===== Примеры тем проектов =====&lt;br /&gt;
В таблице примеры тем проектов, предлагавшихся в прошлые годы.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Название !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [https://objectoriented.ru/design:smartcontract СмартРитейл]&lt;br /&gt;
| Интегрируем недоверчивых участников рынка ритейла с помощью блокчейна&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [https://objectoriented.ru/design:okfridge Ok,Fridge!]&lt;br /&gt;
| Холодильник доставит к дивану соки и воды под настроение, дозакажет в магазине&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [https://objectoriented.ru/design:autofill ЗалейсяIS]&lt;br /&gt;
| Управляем сетью авто-автозаправок, работающих без персонала&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [https://objectoriented.ru/design:docfree БезВрача]&lt;br /&gt;
| Контролируем соблюдение условий медицинского страхования, и вообще соблюдения правил ЗОЖ&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [https://objectoriented.ru/design:sharecar Перетачка]&lt;br /&gt;
| Едем вместе на чужой машине и везем посылки. Система обеспечивает работу сервиса&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| [https://objectoriented.ru/design:qacall Как?Никак!]&lt;br /&gt;
| Модернизированный CallЦентр, роботы отвечают на типовые вопросы и сами ведут FAQ&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| [https://objectoriented.ru/design:shipall ДоставимВсе]&lt;br /&gt;
| Служба доставки формирует из товаров заказы и перемещает по маршрутам. Маршруты формируются вручную, автоматически как план, динамически. Учет веса и стоимости при планировании&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| [https://objectoriented.ru/design:phystechtaxi Физтех-Такси]&lt;br /&gt;
| Агрегатор такси со скидкой на поездки в МФТИ&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
См. также [https://objectoriented.ru/design:oldcases задачи прошлых лет]&lt;br /&gt;
&lt;br /&gt;
= Контрольная работа и устный ответ =&lt;br /&gt;
&lt;br /&gt;
Контрольная работа может быть предложена тем студентам, кто не набрал достаточно баллов для получения оценки автоматом. В составе письменной контрольной работы на лекции будут предложены примерные задания.&lt;br /&gt;
&lt;br /&gt;
# Задача на проектирование с применением UML2, ER, DFD, MSA, GoF, SOLID.&lt;br /&gt;
# Вопросы по методам проектирования по билетам для ответа устно&lt;br /&gt;
&lt;br /&gt;
Примерные критерии оценивания&lt;br /&gt;
&lt;br /&gt;
* Правильность и количество решенных задач&lt;br /&gt;
* Полнота и правильность ответа на вопросы по методам проектирования&lt;br /&gt;
* Ответы на дополнительные вопросы по теме&lt;br /&gt;
* Владение терминологией и методами проектирования&lt;br /&gt;
* Способность принимать и обосновывать проектировочные решения&lt;br /&gt;
* Способность находить и устранять ошибки в применении методов&lt;br /&gt;
&lt;br /&gt;
= Оценки по курсу =&lt;br /&gt;
Критерии оценивания, итоговый балл&lt;br /&gt;
&lt;br /&gt;
ИБ = 0,2 * (ПЗ или ЛЗ)+ 0,3 * КЛК + 0,7 * (ПРЭ или ЭКЗ)&lt;br /&gt;
&lt;br /&gt;
ЛЗ + ПЗ - посещения лекций и работа на семинаре&lt;br /&gt;
&lt;br /&gt;
КЛК - оценка за коллоквиум&lt;br /&gt;
&lt;br /&gt;
ЭКЗ - устно-письменный экзамен в конце семестра&lt;br /&gt;
&lt;br /&gt;
ПРЭ - курсовой проект&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
# Vaughn Vernon. Implementing Domain-Driven Design, (любое издание)&lt;br /&gt;
# Sam Newman. Building Microservices&lt;br /&gt;
# Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra. Head First Design Patterns&lt;br /&gt;
# Ian Sommerville. Software Engineering 10th Ed или Roger Pressman. Software Engineering: A Practitioner&#039;s Approach 8th Ed.&lt;br /&gt;
# [https://www.uml-diagrams.org/ UML diagrams reference]&lt;br /&gt;
# [https://objectoriented.ru/pps-book UML. Сборник задач]&lt;br /&gt;
&lt;br /&gt;
= Инструменты моделирования =&lt;br /&gt;
&#039;&#039;&#039;Modelio Community&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://www.modelio.org/downloads/download-modelio.html&lt;br /&gt;
&lt;br /&gt;
IDE для моделирования, с открытым исходным кодом, понимает UML2 и SysML в редакции Community Edition. Неплохой UI, в целом прост в использовании. Тем не менее, не полностью поддерживает все тонкости UML 2.4.1 или UML 2.5. Подходит для небольших и учебных проектов&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Visual Paradigm Community Ed&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://www.visual-paradigm.com/download/community.jsp&lt;br /&gt;
&lt;br /&gt;
Бесплатная версия коммерческого IDE для моделирования ПО с помощью UML 2, помогает с ER-диаграммами и построением моделей по тексту. Требует регистрации при старте. Много фич и диаграммы, которые не спрятать и они требуют платной версии. Получается перегруженный интерфейс, сложнее в использовании.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Draw.io + VS Code Plugin&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://marketplace.visualstudio.com/items?itemName=hediet.vscode-drawio&lt;br /&gt;
&lt;br /&gt;
Известный онлайн и офлайн инструмент для рисования диаграмм, поможет с UML2, ER диаграммами и пр. Дополнения помогут проверить согласованность моделей, но проверки и рефакторинги явно хуже чем у инструментов выше. Хорошо подходит для гибкого моделирования в правильных руках.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Другие рисовалки и средства моделирования&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
При выборе инструмента для моделирования обратите внимание на удобство UI, поддержку стандартов UML2 и др, функций экспорта и импорта, а также ограничения лицензии. Для курса понадобятся минимум эти диаграммы: классов, вариантов использования, деятельности или состояний, компонентов.&lt;br /&gt;
&lt;br /&gt;
= Еще релевантные источники и дополнительные ссылки =&lt;br /&gt;
Дополнительная литература:&lt;br /&gt;
&lt;br /&gt;
# Нотация UML 2 uml2-notation.zip&lt;br /&gt;
# Б. Мейер, Объектно-ориентированное конструирование программных систем. - Русская Редакция, 2005&lt;br /&gt;
# Microsoft. Руководство Майкрософт по проектированию архитектуры приложений для Azure, [https://docs.microsoft.com/en-us/azure/architecture/guide/| на сайте Майкрософт]]&lt;br /&gt;
&lt;br /&gt;
Интернет-источники:&lt;br /&gt;
&lt;br /&gt;
# Спецификация UML 2.5 на сайте OMG. (http://www.omg.org/spec/UML/2.2/)&lt;br /&gt;
&lt;br /&gt;
Классические статьи методам проектирования:&lt;br /&gt;
&lt;br /&gt;
# (discussion) P. Ralph, R. Mohanani. Is Requirements Engineering Inherently Counterproductive?&lt;br /&gt;
# N. Wirth. Program Development by Stepwise Refinement. (http://www.inf.ethz.ch/personal/wirth/Articles/StepwiseRefinement.pdf)&lt;br /&gt;
# D. Parnas. On the Criteria to be used in Decomposing System into Modules (http://www.cs.umd.edu/class/spring2003/cmsc838p/Design/criteria.pdf)&lt;br /&gt;
# D. Garlan, M. Shaw. An Introduction to Software Architecture (http://www.cs.cmu.edu/afs/cs/project/vit/ftp/pdf/intro_softarch.pdf)&lt;br /&gt;
# Kent Beck, Ward Cunningham. A Laboratory For Teaching Object-Oriented Thinking / OOPSLA89 (http://c2.com/doc/oopsla89/paper.html)&lt;br /&gt;
# Doug Rosenberg, Kendall Scott, The ICONIX Process, (http://www.informit.com/articles/printerfriendly.aspx?p=167902)&lt;br /&gt;
# B. Liskov. Programming with abstract data types&lt;br /&gt;
# Friedrich Steimann, Philip Mayer. Patterns of Interface-Based Programming&lt;br /&gt;
# Rebecca Wirfs-Brock, Object-oriented design. A responsibility-driven approach&lt;br /&gt;
# Robert C. Sharblet, Samuel S. Cohen. The object-oriented brewery. A comparison of two object-oriented development methods&lt;br /&gt;
# P. Krutchen. Architectural Blueprints—The “4+1” View Model of Software Architecture, (http://www.cs.ubc.ca/~gregor/teaching/papers/4+1view-architecture.pdf)&lt;br /&gt;
# IEEE Recommended practice for architectural description of software intensive systems, (http://www.win.tue.nl/~wsinmak/Education/2II45/software-architecture-std1471-2000.pdf)&lt;br /&gt;
# M. Fowler. Who need an Achitect?, http://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf&lt;br /&gt;
# D. Greer, Interactive Application Architecture, http://aspiringcraftsman.com/2007/08/25/interactive-application-architecture/&lt;br /&gt;
# Frank DeRemer, Hans Kron. PROGRAMMING-IN-THE LARGE VERSUS PROGRAMMING-IN-THE-SMALL (google it)&lt;br /&gt;
# The Agile Method and Other Fairy Tales (google it)&lt;br /&gt;
# A RATIONAL DESIGN PROCESS: HOW AND WHY TO FAKE IT (google it)&lt;br /&gt;
# Edward V. Berard. Be Careful With “Use Cases”&lt;br /&gt;
# (beware!)Chidamber Kemerer Metrics Suite. A Measurement Theory Perspective&lt;br /&gt;
# McCabe. A complexity measure&lt;br /&gt;
&lt;br /&gt;
Паттерны:&lt;br /&gt;
&lt;br /&gt;
# Antipatterns Wiki, http://c2.com/cgi/wiki?AntiPatternsCatalog&lt;br /&gt;
# Паттерны обработки ошибок, http://c2.com/cgi/wiki?ExceptionPatterns&lt;br /&gt;
# Microservices patterns, https://microservices.io&lt;br /&gt;
# GoF. Design Patterns: elements of reusable object-oriented software&lt;br /&gt;
# Статья на c2.com про DoubleDispatch и DoubleDispatchExample,&lt;br /&gt;
# Jenifer Tidwell, Designing Interfaces&lt;br /&gt;
# Scott Ambler, Process Patterns&lt;br /&gt;
# Martin Fowler, Analysis Patterns&lt;br /&gt;
# Martin Fowler, Patterns of Enterprise Application Architecture&lt;br /&gt;
# G. Hohpe, Enterprise Integration Patterns&lt;br /&gt;
# D. Greer, Interactive Application Architecture, http://aspiringcraftsman.com/2007/08/25/interactive-application-architecture/&lt;br /&gt;
# Pattern-Oriented Software Architecture (несколько томов), http://www.cs.wustl.edu/~schmidt/POSA/&lt;br /&gt;
# C++ Idioms, http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms&lt;br /&gt;
# Linda Rising - Patterns Almanac 2000, http://www.smallmemory.com/almanac/&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3169</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3169"/>
		<updated>2024-08-21T09:46:26Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Инструменты моделирования */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
&#039;&#039;&#039;Хританков Антон Сергеевич&#039;&#039;&#039;, автор курса&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Учебный проект =&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
===== Примеры тем проектов =====&lt;br /&gt;
В таблице примеры тем проектов, предлагавшихся в прошлые годы.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Название !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [https://objectoriented.ru/design:smartcontract СмартРитейл]&lt;br /&gt;
| Интегрируем недоверчивых участников рынка ритейла с помощью блокчейна&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [https://objectoriented.ru/design:okfridge Ok,Fridge!]&lt;br /&gt;
| Холодильник доставит к дивану соки и воды под настроение, дозакажет в магазине&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [https://objectoriented.ru/design:autofill ЗалейсяIS]&lt;br /&gt;
| Управляем сетью авто-автозаправок, работающих без персонала&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [https://objectoriented.ru/design:docfree БезВрача]&lt;br /&gt;
| Контролируем соблюдение условий медицинского страхования, и вообще соблюдения правил ЗОЖ&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [https://objectoriented.ru/design:sharecar Перетачка]&lt;br /&gt;
| Едем вместе на чужой машине и везем посылки. Система обеспечивает работу сервиса&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| [https://objectoriented.ru/design:qacall Как?Никак!]&lt;br /&gt;
| Модернизированный CallЦентр, роботы отвечают на типовые вопросы и сами ведут FAQ&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| [https://objectoriented.ru/design:shipall ДоставимВсе]&lt;br /&gt;
| Служба доставки формирует из товаров заказы и перемещает по маршрутам. Маршруты формируются вручную, автоматически как план, динамически. Учет веса и стоимости при планировании&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| [https://objectoriented.ru/design:phystechtaxi Физтех-Такси]&lt;br /&gt;
| Агрегатор такси со скидкой на поездки в МФТИ&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
См. также [https://objectoriented.ru/design:oldcases задачи прошлых лет]&lt;br /&gt;
&lt;br /&gt;
= Контрольная работа и устный ответ =&lt;br /&gt;
&lt;br /&gt;
Контрольная работа может быть предложена тем студентам, кто не набрал достаточно баллов для получения оценки автоматом. В составе письменной контрольной работы на лекции будут предложены примерные задания.&lt;br /&gt;
&lt;br /&gt;
# Задача на проектирование с применением UML2, ER, DFD, MSA, GoF, SOLID.&lt;br /&gt;
# Вопросы по методам проектирования по билетам для ответа устно&lt;br /&gt;
&lt;br /&gt;
Примерные критерии оценивания&lt;br /&gt;
&lt;br /&gt;
* Правильность и количество решенных задач&lt;br /&gt;
* Полнота и правильность ответа на вопросы по методам проектирования&lt;br /&gt;
* Ответы на дополнительные вопросы по теме&lt;br /&gt;
* Владение терминологией и методами проектирования&lt;br /&gt;
* Способность принимать и обосновывать проектировочные решения&lt;br /&gt;
* Способность находить и устранять ошибки в применении методов&lt;br /&gt;
&lt;br /&gt;
= Оценки по курсу =&lt;br /&gt;
Критерии оценивания, итоговый балл&lt;br /&gt;
&lt;br /&gt;
ИБ = 0,2 * (ПЗ или ЛЗ)+ 0,3 * КЛК + 0,7 * (ПРЭ или ЭКЗ)&lt;br /&gt;
&lt;br /&gt;
ЛЗ + ПЗ - посещения лекций и работа на семинаре&lt;br /&gt;
&lt;br /&gt;
КЛК - оценка за коллоквиум&lt;br /&gt;
&lt;br /&gt;
ЭКЗ - устно-письменный экзамен в конце семестра&lt;br /&gt;
&lt;br /&gt;
ПРЭ - курсовой проект&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
# Vaughn Vernon. Implementing Domain-Driven Design, (любое издание)&lt;br /&gt;
# Sam Newman. Building Microservices&lt;br /&gt;
# Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra. Head First Design Patterns&lt;br /&gt;
# Ian Sommerville. Software Engineering 10th Ed или Roger Pressman. Software Engineering: A Practitioner&#039;s Approach 8th Ed.&lt;br /&gt;
# [https://www.uml-diagrams.org/ UML diagrams reference]&lt;br /&gt;
# [https://objectoriented.ru/pps-book UML. Сборник задач]&lt;br /&gt;
&lt;br /&gt;
= Инструменты моделирования =&lt;br /&gt;
&#039;&#039;&#039;Modelio Community&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://www.modelio.org/downloads/download-modelio.html&lt;br /&gt;
&lt;br /&gt;
IDE для моделирования, с открытым исходным кодом, понимает UML2 и SysML в редакции Community Edition. Неплохой UI, в целом прост в использовании. Тем не менее, не полностью поддерживает все тонкости UML 2.4.1 или UML 2.5. Подходит для небольших и учебных проектов&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Visual Paradigm Community Ed&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://www.visual-paradigm.com/download/community.jsp&lt;br /&gt;
&lt;br /&gt;
Бесплатная версия коммерческого IDE для моделирования ПО с помощью UML 2, помогает с ER-диаграммами и построением моделей по тексту. Требует регистрации при старте. Много фич и диаграммы, которые не спрятать и они требуют платной версии. Получается перегруженный интерфейс, сложнее в использовании.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Draw.io + VS Code Plugin&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://marketplace.visualstudio.com/items?itemName=hediet.vscode-drawio&lt;br /&gt;
&lt;br /&gt;
Известный онлайн и офлайн инструмент для рисования диаграмм, поможет с UML2, ER диаграммами и пр. Дополнения помогут проверить согласованность моделей, но проверки и рефакторинги явно хуже чем у инструментов выше. Хорошо подходит для гибкого моделирования в правильных руках.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Другие рисовалки и средства моделирования&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
При выборе инструмента для моделирования обратите внимание на удобство UI, поддержку стандартов UML2 и др, функций экспорта и импорта, а также ограничения лицензии. Для курса понадобятся минимум эти диаграммы: классов, вариантов использования, деятельности или состояний, компонентов.&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3168</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3168"/>
		<updated>2024-08-21T09:45:31Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Литература */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
&#039;&#039;&#039;Хританков Антон Сергеевич&#039;&#039;&#039;, автор курса&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Учебный проект =&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
===== Примеры тем проектов =====&lt;br /&gt;
В таблице примеры тем проектов, предлагавшихся в прошлые годы.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Название !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [https://objectoriented.ru/design:smartcontract СмартРитейл]&lt;br /&gt;
| Интегрируем недоверчивых участников рынка ритейла с помощью блокчейна&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [https://objectoriented.ru/design:okfridge Ok,Fridge!]&lt;br /&gt;
| Холодильник доставит к дивану соки и воды под настроение, дозакажет в магазине&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [https://objectoriented.ru/design:autofill ЗалейсяIS]&lt;br /&gt;
| Управляем сетью авто-автозаправок, работающих без персонала&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [https://objectoriented.ru/design:docfree БезВрача]&lt;br /&gt;
| Контролируем соблюдение условий медицинского страхования, и вообще соблюдения правил ЗОЖ&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [https://objectoriented.ru/design:sharecar Перетачка]&lt;br /&gt;
| Едем вместе на чужой машине и везем посылки. Система обеспечивает работу сервиса&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| [https://objectoriented.ru/design:qacall Как?Никак!]&lt;br /&gt;
| Модернизированный CallЦентр, роботы отвечают на типовые вопросы и сами ведут FAQ&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| [https://objectoriented.ru/design:shipall ДоставимВсе]&lt;br /&gt;
| Служба доставки формирует из товаров заказы и перемещает по маршрутам. Маршруты формируются вручную, автоматически как план, динамически. Учет веса и стоимости при планировании&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| [https://objectoriented.ru/design:phystechtaxi Физтех-Такси]&lt;br /&gt;
| Агрегатор такси со скидкой на поездки в МФТИ&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
См. также [https://objectoriented.ru/design:oldcases задачи прошлых лет]&lt;br /&gt;
&lt;br /&gt;
= Контрольная работа и устный ответ =&lt;br /&gt;
&lt;br /&gt;
Контрольная работа может быть предложена тем студентам, кто не набрал достаточно баллов для получения оценки автоматом. В составе письменной контрольной работы на лекции будут предложены примерные задания.&lt;br /&gt;
&lt;br /&gt;
# Задача на проектирование с применением UML2, ER, DFD, MSA, GoF, SOLID.&lt;br /&gt;
# Вопросы по методам проектирования по билетам для ответа устно&lt;br /&gt;
&lt;br /&gt;
Примерные критерии оценивания&lt;br /&gt;
&lt;br /&gt;
* Правильность и количество решенных задач&lt;br /&gt;
* Полнота и правильность ответа на вопросы по методам проектирования&lt;br /&gt;
* Ответы на дополнительные вопросы по теме&lt;br /&gt;
* Владение терминологией и методами проектирования&lt;br /&gt;
* Способность принимать и обосновывать проектировочные решения&lt;br /&gt;
* Способность находить и устранять ошибки в применении методов&lt;br /&gt;
&lt;br /&gt;
= Оценки по курсу =&lt;br /&gt;
Критерии оценивания, итоговый балл&lt;br /&gt;
&lt;br /&gt;
ИБ = 0,2 * (ПЗ или ЛЗ)+ 0,3 * КЛК + 0,7 * (ПРЭ или ЭКЗ)&lt;br /&gt;
&lt;br /&gt;
ЛЗ + ПЗ - посещения лекций и работа на семинаре&lt;br /&gt;
&lt;br /&gt;
КЛК - оценка за коллоквиум&lt;br /&gt;
&lt;br /&gt;
ЭКЗ - устно-письменный экзамен в конце семестра&lt;br /&gt;
&lt;br /&gt;
ПРЭ - курсовой проект&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
# Vaughn Vernon. Implementing Domain-Driven Design, (любое издание)&lt;br /&gt;
# Sam Newman. Building Microservices&lt;br /&gt;
# Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra. Head First Design Patterns&lt;br /&gt;
# Ian Sommerville. Software Engineering 10th Ed или Roger Pressman. Software Engineering: A Practitioner&#039;s Approach 8th Ed.&lt;br /&gt;
# [https://www.uml-diagrams.org/ UML diagrams reference]&lt;br /&gt;
# [https://objectoriented.ru/pps-book UML. Сборник задач]&lt;br /&gt;
&lt;br /&gt;
= Инструменты моделирования =&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3167</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3167"/>
		<updated>2024-08-21T09:44:18Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Литература */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
&#039;&#039;&#039;Хританков Антон Сергеевич&#039;&#039;&#039;, автор курса&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Учебный проект =&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
===== Примеры тем проектов =====&lt;br /&gt;
В таблице примеры тем проектов, предлагавшихся в прошлые годы.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Название !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [https://objectoriented.ru/design:smartcontract СмартРитейл]&lt;br /&gt;
| Интегрируем недоверчивых участников рынка ритейла с помощью блокчейна&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [https://objectoriented.ru/design:okfridge Ok,Fridge!]&lt;br /&gt;
| Холодильник доставит к дивану соки и воды под настроение, дозакажет в магазине&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [https://objectoriented.ru/design:autofill ЗалейсяIS]&lt;br /&gt;
| Управляем сетью авто-автозаправок, работающих без персонала&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [https://objectoriented.ru/design:docfree БезВрача]&lt;br /&gt;
| Контролируем соблюдение условий медицинского страхования, и вообще соблюдения правил ЗОЖ&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [https://objectoriented.ru/design:sharecar Перетачка]&lt;br /&gt;
| Едем вместе на чужой машине и везем посылки. Система обеспечивает работу сервиса&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| [https://objectoriented.ru/design:qacall Как?Никак!]&lt;br /&gt;
| Модернизированный CallЦентр, роботы отвечают на типовые вопросы и сами ведут FAQ&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| [https://objectoriented.ru/design:shipall ДоставимВсе]&lt;br /&gt;
| Служба доставки формирует из товаров заказы и перемещает по маршрутам. Маршруты формируются вручную, автоматически как план, динамически. Учет веса и стоимости при планировании&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| [https://objectoriented.ru/design:phystechtaxi Физтех-Такси]&lt;br /&gt;
| Агрегатор такси со скидкой на поездки в МФТИ&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
См. также [https://objectoriented.ru/design:oldcases задачи прошлых лет]&lt;br /&gt;
&lt;br /&gt;
= Контрольная работа и устный ответ =&lt;br /&gt;
&lt;br /&gt;
Контрольная работа может быть предложена тем студентам, кто не набрал достаточно баллов для получения оценки автоматом. В составе письменной контрольной работы на лекции будут предложены примерные задания.&lt;br /&gt;
&lt;br /&gt;
# Задача на проектирование с применением UML2, ER, DFD, MSA, GoF, SOLID.&lt;br /&gt;
# Вопросы по методам проектирования по билетам для ответа устно&lt;br /&gt;
&lt;br /&gt;
Примерные критерии оценивания&lt;br /&gt;
&lt;br /&gt;
* Правильность и количество решенных задач&lt;br /&gt;
* Полнота и правильность ответа на вопросы по методам проектирования&lt;br /&gt;
* Ответы на дополнительные вопросы по теме&lt;br /&gt;
* Владение терминологией и методами проектирования&lt;br /&gt;
* Способность принимать и обосновывать проектировочные решения&lt;br /&gt;
* Способность находить и устранять ошибки в применении методов&lt;br /&gt;
&lt;br /&gt;
= Оценки по курсу =&lt;br /&gt;
Критерии оценивания, итоговый балл&lt;br /&gt;
&lt;br /&gt;
ИБ = 0,2 * (ПЗ или ЛЗ)+ 0,3 * КЛК + 0,7 * (ПРЭ или ЭКЗ)&lt;br /&gt;
&lt;br /&gt;
ЛЗ + ПЗ - посещения лекций и работа на семинаре&lt;br /&gt;
&lt;br /&gt;
КЛК - оценка за коллоквиум&lt;br /&gt;
&lt;br /&gt;
ЭКЗ - устно-письменный экзамен в конце семестра&lt;br /&gt;
&lt;br /&gt;
ПРЭ - курсовой проект&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
# Vaughn Vernon. Implementing Domain-Driven Design, (любое издание)&lt;br /&gt;
# Sam Newman. Building Microservices&lt;br /&gt;
# Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra. Head First Design Patterns&lt;br /&gt;
# Ian Sommerville. Software Engineering 10th Ed или Roger Pressman. Software Engineering: A Practitioner&#039;s Approach 8th Ed.&lt;br /&gt;
# [https://www.uml-diagrams.org/ UML diagrams reference]&lt;br /&gt;
# [https://objectoriented.ru/pps-book UML. Сборник задач]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3166</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3166"/>
		<updated>2024-08-21T09:43:22Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Литература */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
&#039;&#039;&#039;Хританков Антон Сергеевич&#039;&#039;&#039;, автор курса&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Учебный проект =&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
===== Примеры тем проектов =====&lt;br /&gt;
В таблице примеры тем проектов, предлагавшихся в прошлые годы.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Название !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [https://objectoriented.ru/design:smartcontract СмартРитейл]&lt;br /&gt;
| Интегрируем недоверчивых участников рынка ритейла с помощью блокчейна&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [https://objectoriented.ru/design:okfridge Ok,Fridge!]&lt;br /&gt;
| Холодильник доставит к дивану соки и воды под настроение, дозакажет в магазине&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [https://objectoriented.ru/design:autofill ЗалейсяIS]&lt;br /&gt;
| Управляем сетью авто-автозаправок, работающих без персонала&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [https://objectoriented.ru/design:docfree БезВрача]&lt;br /&gt;
| Контролируем соблюдение условий медицинского страхования, и вообще соблюдения правил ЗОЖ&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [https://objectoriented.ru/design:sharecar Перетачка]&lt;br /&gt;
| Едем вместе на чужой машине и везем посылки. Система обеспечивает работу сервиса&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| [https://objectoriented.ru/design:qacall Как?Никак!]&lt;br /&gt;
| Модернизированный CallЦентр, роботы отвечают на типовые вопросы и сами ведут FAQ&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| [https://objectoriented.ru/design:shipall ДоставимВсе]&lt;br /&gt;
| Служба доставки формирует из товаров заказы и перемещает по маршрутам. Маршруты формируются вручную, автоматически как план, динамически. Учет веса и стоимости при планировании&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| [https://objectoriented.ru/design:phystechtaxi Физтех-Такси]&lt;br /&gt;
| Агрегатор такси со скидкой на поездки в МФТИ&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
См. также [https://objectoriented.ru/design:oldcases задачи прошлых лет]&lt;br /&gt;
&lt;br /&gt;
= Контрольная работа и устный ответ =&lt;br /&gt;
&lt;br /&gt;
Контрольная работа может быть предложена тем студентам, кто не набрал достаточно баллов для получения оценки автоматом. В составе письменной контрольной работы на лекции будут предложены примерные задания.&lt;br /&gt;
&lt;br /&gt;
# Задача на проектирование с применением UML2, ER, DFD, MSA, GoF, SOLID.&lt;br /&gt;
# Вопросы по методам проектирования по билетам для ответа устно&lt;br /&gt;
&lt;br /&gt;
Примерные критерии оценивания&lt;br /&gt;
&lt;br /&gt;
* Правильность и количество решенных задач&lt;br /&gt;
* Полнота и правильность ответа на вопросы по методам проектирования&lt;br /&gt;
* Ответы на дополнительные вопросы по теме&lt;br /&gt;
* Владение терминологией и методами проектирования&lt;br /&gt;
* Способность принимать и обосновывать проектировочные решения&lt;br /&gt;
* Способность находить и устранять ошибки в применении методов&lt;br /&gt;
&lt;br /&gt;
= Оценки по курсу =&lt;br /&gt;
Критерии оценивания, итоговый балл&lt;br /&gt;
&lt;br /&gt;
ИБ = 0,2 * (ПЗ или ЛЗ)+ 0,3 * КЛК + 0,7 * (ПРЭ или ЭКЗ)&lt;br /&gt;
&lt;br /&gt;
ЛЗ + ПЗ - посещения лекций и работа на семинаре&lt;br /&gt;
&lt;br /&gt;
КЛК - оценка за коллоквиум&lt;br /&gt;
&lt;br /&gt;
ЭКЗ - устно-письменный экзамен в конце семестра&lt;br /&gt;
&lt;br /&gt;
ПРЭ - курсовой проект&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
Vaughn Vernon. Implementing Domain-Driven Design, (любое издание)&lt;br /&gt;
Sam Newman. Building Microservices&lt;br /&gt;
Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra. Head First Design Patterns&lt;br /&gt;
Ian Sommerville. Software Engineering 10th Ed или Roger Pressman. Software Engineering: A Practitioner&#039;s Approach 8th Ed.&lt;br /&gt;
UML diagrams reference, https://www.uml-diagrams.org&lt;br /&gt;
UML. Сборник задач&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3165</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3165"/>
		<updated>2024-08-21T09:43:05Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Оценки по курсу */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
&#039;&#039;&#039;Хританков Антон Сергеевич&#039;&#039;&#039;, автор курса&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Учебный проект =&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
===== Примеры тем проектов =====&lt;br /&gt;
В таблице примеры тем проектов, предлагавшихся в прошлые годы.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Название !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [https://objectoriented.ru/design:smartcontract СмартРитейл]&lt;br /&gt;
| Интегрируем недоверчивых участников рынка ритейла с помощью блокчейна&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [https://objectoriented.ru/design:okfridge Ok,Fridge!]&lt;br /&gt;
| Холодильник доставит к дивану соки и воды под настроение, дозакажет в магазине&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [https://objectoriented.ru/design:autofill ЗалейсяIS]&lt;br /&gt;
| Управляем сетью авто-автозаправок, работающих без персонала&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [https://objectoriented.ru/design:docfree БезВрача]&lt;br /&gt;
| Контролируем соблюдение условий медицинского страхования, и вообще соблюдения правил ЗОЖ&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [https://objectoriented.ru/design:sharecar Перетачка]&lt;br /&gt;
| Едем вместе на чужой машине и везем посылки. Система обеспечивает работу сервиса&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| [https://objectoriented.ru/design:qacall Как?Никак!]&lt;br /&gt;
| Модернизированный CallЦентр, роботы отвечают на типовые вопросы и сами ведут FAQ&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| [https://objectoriented.ru/design:shipall ДоставимВсе]&lt;br /&gt;
| Служба доставки формирует из товаров заказы и перемещает по маршрутам. Маршруты формируются вручную, автоматически как план, динамически. Учет веса и стоимости при планировании&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| [https://objectoriented.ru/design:phystechtaxi Физтех-Такси]&lt;br /&gt;
| Агрегатор такси со скидкой на поездки в МФТИ&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
См. также [https://objectoriented.ru/design:oldcases задачи прошлых лет]&lt;br /&gt;
&lt;br /&gt;
= Контрольная работа и устный ответ =&lt;br /&gt;
&lt;br /&gt;
Контрольная работа может быть предложена тем студентам, кто не набрал достаточно баллов для получения оценки автоматом. В составе письменной контрольной работы на лекции будут предложены примерные задания.&lt;br /&gt;
&lt;br /&gt;
# Задача на проектирование с применением UML2, ER, DFD, MSA, GoF, SOLID.&lt;br /&gt;
# Вопросы по методам проектирования по билетам для ответа устно&lt;br /&gt;
&lt;br /&gt;
Примерные критерии оценивания&lt;br /&gt;
&lt;br /&gt;
* Правильность и количество решенных задач&lt;br /&gt;
* Полнота и правильность ответа на вопросы по методам проектирования&lt;br /&gt;
* Ответы на дополнительные вопросы по теме&lt;br /&gt;
* Владение терминологией и методами проектирования&lt;br /&gt;
* Способность принимать и обосновывать проектировочные решения&lt;br /&gt;
* Способность находить и устранять ошибки в применении методов&lt;br /&gt;
&lt;br /&gt;
= Оценки по курсу =&lt;br /&gt;
Критерии оценивания, итоговый балл&lt;br /&gt;
&lt;br /&gt;
ИБ = 0,2 * (ПЗ или ЛЗ)+ 0,3 * КЛК + 0,7 * (ПРЭ или ЭКЗ)&lt;br /&gt;
&lt;br /&gt;
ЛЗ + ПЗ - посещения лекций и работа на семинаре&lt;br /&gt;
&lt;br /&gt;
КЛК - оценка за коллоквиум&lt;br /&gt;
&lt;br /&gt;
ЭКЗ - устно-письменный экзамен в конце семестра&lt;br /&gt;
&lt;br /&gt;
ПРЭ - курсовой проект&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3164</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3164"/>
		<updated>2024-08-21T09:42:38Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Руководитель курса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
&#039;&#039;&#039;Хританков Антон Сергеевич&#039;&#039;&#039;, автор курса&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Учебный проект =&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
===== Примеры тем проектов =====&lt;br /&gt;
В таблице примеры тем проектов, предлагавшихся в прошлые годы.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Название !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [https://objectoriented.ru/design:smartcontract СмартРитейл]&lt;br /&gt;
| Интегрируем недоверчивых участников рынка ритейла с помощью блокчейна&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [https://objectoriented.ru/design:okfridge Ok,Fridge!]&lt;br /&gt;
| Холодильник доставит к дивану соки и воды под настроение, дозакажет в магазине&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [https://objectoriented.ru/design:autofill ЗалейсяIS]&lt;br /&gt;
| Управляем сетью авто-автозаправок, работающих без персонала&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [https://objectoriented.ru/design:docfree БезВрача]&lt;br /&gt;
| Контролируем соблюдение условий медицинского страхования, и вообще соблюдения правил ЗОЖ&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [https://objectoriented.ru/design:sharecar Перетачка]&lt;br /&gt;
| Едем вместе на чужой машине и везем посылки. Система обеспечивает работу сервиса&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| [https://objectoriented.ru/design:qacall Как?Никак!]&lt;br /&gt;
| Модернизированный CallЦентр, роботы отвечают на типовые вопросы и сами ведут FAQ&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| [https://objectoriented.ru/design:shipall ДоставимВсе]&lt;br /&gt;
| Служба доставки формирует из товаров заказы и перемещает по маршрутам. Маршруты формируются вручную, автоматически как план, динамически. Учет веса и стоимости при планировании&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| [https://objectoriented.ru/design:phystechtaxi Физтех-Такси]&lt;br /&gt;
| Агрегатор такси со скидкой на поездки в МФТИ&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
См. также [https://objectoriented.ru/design:oldcases задачи прошлых лет]&lt;br /&gt;
&lt;br /&gt;
= Контрольная работа и устный ответ =&lt;br /&gt;
&lt;br /&gt;
Контрольная работа может быть предложена тем студентам, кто не набрал достаточно баллов для получения оценки автоматом. В составе письменной контрольной работы на лекции будут предложены примерные задания.&lt;br /&gt;
&lt;br /&gt;
# Задача на проектирование с применением UML2, ER, DFD, MSA, GoF, SOLID.&lt;br /&gt;
# Вопросы по методам проектирования по билетам для ответа устно&lt;br /&gt;
&lt;br /&gt;
Примерные критерии оценивания&lt;br /&gt;
&lt;br /&gt;
* Правильность и количество решенных задач&lt;br /&gt;
* Полнота и правильность ответа на вопросы по методам проектирования&lt;br /&gt;
* Ответы на дополнительные вопросы по теме&lt;br /&gt;
* Владение терминологией и методами проектирования&lt;br /&gt;
* Способность принимать и обосновывать проектировочные решения&lt;br /&gt;
* Способность находить и устранять ошибки в применении методов&lt;br /&gt;
&lt;br /&gt;
= Оценки по курсу =&lt;br /&gt;
Критерии оценивания, итоговый балл&lt;br /&gt;
&lt;br /&gt;
ИБ = 0,2 * (ПЗ или ЛЗ)+ 0,3 * КЛК + 0,7 * (ПРЭ или ЭКЗ)&lt;br /&gt;
&lt;br /&gt;
ЛЗ + ПЗ - посещения лекций и работа на семинаре&lt;br /&gt;
&lt;br /&gt;
КЛК - оценка за коллоквиум&lt;br /&gt;
&lt;br /&gt;
ЭКЗ - устно-письменный экзамен в конце семестра&lt;br /&gt;
&lt;br /&gt;
ПРЭ - курсовой проект&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3163</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3163"/>
		<updated>2024-08-21T09:42:16Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Руководитель курса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Хританков Антон Сергеевич, автор курса&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Учебный проект =&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
===== Примеры тем проектов =====&lt;br /&gt;
В таблице примеры тем проектов, предлагавшихся в прошлые годы.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Название !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [https://objectoriented.ru/design:smartcontract СмартРитейл]&lt;br /&gt;
| Интегрируем недоверчивых участников рынка ритейла с помощью блокчейна&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [https://objectoriented.ru/design:okfridge Ok,Fridge!]&lt;br /&gt;
| Холодильник доставит к дивану соки и воды под настроение, дозакажет в магазине&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [https://objectoriented.ru/design:autofill ЗалейсяIS]&lt;br /&gt;
| Управляем сетью авто-автозаправок, работающих без персонала&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [https://objectoriented.ru/design:docfree БезВрача]&lt;br /&gt;
| Контролируем соблюдение условий медицинского страхования, и вообще соблюдения правил ЗОЖ&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [https://objectoriented.ru/design:sharecar Перетачка]&lt;br /&gt;
| Едем вместе на чужой машине и везем посылки. Система обеспечивает работу сервиса&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| [https://objectoriented.ru/design:qacall Как?Никак!]&lt;br /&gt;
| Модернизированный CallЦентр, роботы отвечают на типовые вопросы и сами ведут FAQ&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| [https://objectoriented.ru/design:shipall ДоставимВсе]&lt;br /&gt;
| Служба доставки формирует из товаров заказы и перемещает по маршрутам. Маршруты формируются вручную, автоматически как план, динамически. Учет веса и стоимости при планировании&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| [https://objectoriented.ru/design:phystechtaxi Физтех-Такси]&lt;br /&gt;
| Агрегатор такси со скидкой на поездки в МФТИ&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
См. также [https://objectoriented.ru/design:oldcases задачи прошлых лет]&lt;br /&gt;
&lt;br /&gt;
= Контрольная работа и устный ответ =&lt;br /&gt;
&lt;br /&gt;
Контрольная работа может быть предложена тем студентам, кто не набрал достаточно баллов для получения оценки автоматом. В составе письменной контрольной работы на лекции будут предложены примерные задания.&lt;br /&gt;
&lt;br /&gt;
# Задача на проектирование с применением UML2, ER, DFD, MSA, GoF, SOLID.&lt;br /&gt;
# Вопросы по методам проектирования по билетам для ответа устно&lt;br /&gt;
&lt;br /&gt;
Примерные критерии оценивания&lt;br /&gt;
&lt;br /&gt;
* Правильность и количество решенных задач&lt;br /&gt;
* Полнота и правильность ответа на вопросы по методам проектирования&lt;br /&gt;
* Ответы на дополнительные вопросы по теме&lt;br /&gt;
* Владение терминологией и методами проектирования&lt;br /&gt;
* Способность принимать и обосновывать проектировочные решения&lt;br /&gt;
* Способность находить и устранять ошибки в применении методов&lt;br /&gt;
&lt;br /&gt;
= Оценки по курсу =&lt;br /&gt;
Критерии оценивания, итоговый балл&lt;br /&gt;
&lt;br /&gt;
ИБ = 0,2 * (ПЗ или ЛЗ)+ 0,3 * КЛК + 0,7 * (ПРЭ или ЭКЗ)&lt;br /&gt;
&lt;br /&gt;
ЛЗ + ПЗ - посещения лекций и работа на семинаре&lt;br /&gt;
&lt;br /&gt;
КЛК - оценка за коллоквиум&lt;br /&gt;
&lt;br /&gt;
ЭКЗ - устно-письменный экзамен в конце семестра&lt;br /&gt;
&lt;br /&gt;
ПРЭ - курсовой проект&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3162</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3162"/>
		<updated>2024-08-21T09:41:44Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Контрольная работа и устный ответ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Хританков Антон&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Учебный проект =&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
===== Примеры тем проектов =====&lt;br /&gt;
В таблице примеры тем проектов, предлагавшихся в прошлые годы.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Название !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [https://objectoriented.ru/design:smartcontract СмартРитейл]&lt;br /&gt;
| Интегрируем недоверчивых участников рынка ритейла с помощью блокчейна&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [https://objectoriented.ru/design:okfridge Ok,Fridge!]&lt;br /&gt;
| Холодильник доставит к дивану соки и воды под настроение, дозакажет в магазине&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [https://objectoriented.ru/design:autofill ЗалейсяIS]&lt;br /&gt;
| Управляем сетью авто-автозаправок, работающих без персонала&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [https://objectoriented.ru/design:docfree БезВрача]&lt;br /&gt;
| Контролируем соблюдение условий медицинского страхования, и вообще соблюдения правил ЗОЖ&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [https://objectoriented.ru/design:sharecar Перетачка]&lt;br /&gt;
| Едем вместе на чужой машине и везем посылки. Система обеспечивает работу сервиса&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| [https://objectoriented.ru/design:qacall Как?Никак!]&lt;br /&gt;
| Модернизированный CallЦентр, роботы отвечают на типовые вопросы и сами ведут FAQ&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| [https://objectoriented.ru/design:shipall ДоставимВсе]&lt;br /&gt;
| Служба доставки формирует из товаров заказы и перемещает по маршрутам. Маршруты формируются вручную, автоматически как план, динамически. Учет веса и стоимости при планировании&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| [https://objectoriented.ru/design:phystechtaxi Физтех-Такси]&lt;br /&gt;
| Агрегатор такси со скидкой на поездки в МФТИ&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
См. также [https://objectoriented.ru/design:oldcases задачи прошлых лет]&lt;br /&gt;
&lt;br /&gt;
= Контрольная работа и устный ответ =&lt;br /&gt;
&lt;br /&gt;
Контрольная работа может быть предложена тем студентам, кто не набрал достаточно баллов для получения оценки автоматом. В составе письменной контрольной работы на лекции будут предложены примерные задания.&lt;br /&gt;
&lt;br /&gt;
# Задача на проектирование с применением UML2, ER, DFD, MSA, GoF, SOLID.&lt;br /&gt;
# Вопросы по методам проектирования по билетам для ответа устно&lt;br /&gt;
&lt;br /&gt;
Примерные критерии оценивания&lt;br /&gt;
&lt;br /&gt;
* Правильность и количество решенных задач&lt;br /&gt;
* Полнота и правильность ответа на вопросы по методам проектирования&lt;br /&gt;
* Ответы на дополнительные вопросы по теме&lt;br /&gt;
* Владение терминологией и методами проектирования&lt;br /&gt;
* Способность принимать и обосновывать проектировочные решения&lt;br /&gt;
* Способность находить и устранять ошибки в применении методов&lt;br /&gt;
&lt;br /&gt;
= Оценки по курсу =&lt;br /&gt;
Критерии оценивания, итоговый балл&lt;br /&gt;
&lt;br /&gt;
ИБ = 0,2 * (ПЗ или ЛЗ)+ 0,3 * КЛК + 0,7 * (ПРЭ или ЭКЗ)&lt;br /&gt;
&lt;br /&gt;
ЛЗ + ПЗ - посещения лекций и работа на семинаре&lt;br /&gt;
&lt;br /&gt;
КЛК - оценка за коллоквиум&lt;br /&gt;
&lt;br /&gt;
ЭКЗ - устно-письменный экзамен в конце семестра&lt;br /&gt;
&lt;br /&gt;
ПРЭ - курсовой проект&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3161</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3161"/>
		<updated>2024-08-21T09:41:18Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Контрольная работа и устный ответ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Хританков Антон&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Учебный проект =&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
===== Примеры тем проектов =====&lt;br /&gt;
В таблице примеры тем проектов, предлагавшихся в прошлые годы.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Название !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [https://objectoriented.ru/design:smartcontract СмартРитейл]&lt;br /&gt;
| Интегрируем недоверчивых участников рынка ритейла с помощью блокчейна&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [https://objectoriented.ru/design:okfridge Ok,Fridge!]&lt;br /&gt;
| Холодильник доставит к дивану соки и воды под настроение, дозакажет в магазине&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [https://objectoriented.ru/design:autofill ЗалейсяIS]&lt;br /&gt;
| Управляем сетью авто-автозаправок, работающих без персонала&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [https://objectoriented.ru/design:docfree БезВрача]&lt;br /&gt;
| Контролируем соблюдение условий медицинского страхования, и вообще соблюдения правил ЗОЖ&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [https://objectoriented.ru/design:sharecar Перетачка]&lt;br /&gt;
| Едем вместе на чужой машине и везем посылки. Система обеспечивает работу сервиса&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| [https://objectoriented.ru/design:qacall Как?Никак!]&lt;br /&gt;
| Модернизированный CallЦентр, роботы отвечают на типовые вопросы и сами ведут FAQ&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| [https://objectoriented.ru/design:shipall ДоставимВсе]&lt;br /&gt;
| Служба доставки формирует из товаров заказы и перемещает по маршрутам. Маршруты формируются вручную, автоматически как план, динамически. Учет веса и стоимости при планировании&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| [https://objectoriented.ru/design:phystechtaxi Физтех-Такси]&lt;br /&gt;
| Агрегатор такси со скидкой на поездки в МФТИ&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
См. также [https://objectoriented.ru/design:oldcases задачи прошлых лет]&lt;br /&gt;
&lt;br /&gt;
= Контрольная работа и устный ответ =&lt;br /&gt;
&lt;br /&gt;
Контрольная работа может быть предложена тем студентам, кто не набрал достаточно баллов для получения оценки автоматом. В составе письменной контрольной работы на лекции будут предложены примерные задания.&lt;br /&gt;
&lt;br /&gt;
# Задача на проектирование с применением UML2, ER, DFD, MSA, GoF, SOLID.&lt;br /&gt;
# Вопросы по методам проектирования по билетам для ответа устно&lt;br /&gt;
&lt;br /&gt;
Примерные критерии оценивания&lt;br /&gt;
&lt;br /&gt;
* Правильность и количество решенных задач&lt;br /&gt;
* Полнота и правильность ответа на вопросы по методам проектирования&lt;br /&gt;
* Ответы на дополнительные вопросы по теме&lt;br /&gt;
* Владение терминологией и методами проектирования&lt;br /&gt;
* Способность принимать и обосновывать проектировочные решения&lt;br /&gt;
* Способность находить и устранять ошибки в применении методов&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3160</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3160"/>
		<updated>2024-08-21T09:40:36Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Контрольная работа и устный ответ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Хританков Антон&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Учебный проект =&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
===== Примеры тем проектов =====&lt;br /&gt;
В таблице примеры тем проектов, предлагавшихся в прошлые годы.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Название !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [https://objectoriented.ru/design:smartcontract СмартРитейл]&lt;br /&gt;
| Интегрируем недоверчивых участников рынка ритейла с помощью блокчейна&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [https://objectoriented.ru/design:okfridge Ok,Fridge!]&lt;br /&gt;
| Холодильник доставит к дивану соки и воды под настроение, дозакажет в магазине&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [https://objectoriented.ru/design:autofill ЗалейсяIS]&lt;br /&gt;
| Управляем сетью авто-автозаправок, работающих без персонала&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [https://objectoriented.ru/design:docfree БезВрача]&lt;br /&gt;
| Контролируем соблюдение условий медицинского страхования, и вообще соблюдения правил ЗОЖ&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [https://objectoriented.ru/design:sharecar Перетачка]&lt;br /&gt;
| Едем вместе на чужой машине и везем посылки. Система обеспечивает работу сервиса&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| [https://objectoriented.ru/design:qacall Как?Никак!]&lt;br /&gt;
| Модернизированный CallЦентр, роботы отвечают на типовые вопросы и сами ведут FAQ&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| [https://objectoriented.ru/design:shipall ДоставимВсе]&lt;br /&gt;
| Служба доставки формирует из товаров заказы и перемещает по маршрутам. Маршруты формируются вручную, автоматически как план, динамически. Учет веса и стоимости при планировании&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| [https://objectoriented.ru/design:phystechtaxi Физтех-Такси]&lt;br /&gt;
| Агрегатор такси со скидкой на поездки в МФТИ&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
См. также [https://objectoriented.ru/design:oldcases задачи прошлых лет]&lt;br /&gt;
&lt;br /&gt;
= Контрольная работа и устный ответ =&lt;br /&gt;
&lt;br /&gt;
Контрольная работа может быть предложена тем студентам, кто не набрал достаточно баллов для получения оценки автоматом. В составе письменной контрольной работы на лекции будут предложены примерные задания.&lt;br /&gt;
&lt;br /&gt;
1. Задача на проектирование с применением UML2, ER, DFD, MSA, GoF, SOLID.&lt;br /&gt;
2. Вопросы по методам проектирования по билетам для ответа устно&lt;br /&gt;
&lt;br /&gt;
Примерные критерии оценивания&lt;br /&gt;
&lt;br /&gt;
* Правильность и количество решенных задач&lt;br /&gt;
* Полнота и правильность ответа на вопросы по методам проектирования&lt;br /&gt;
* Ответы на дополнительные вопросы по теме&lt;br /&gt;
* Владение терминологией и методами проектирования&lt;br /&gt;
* Способность принимать и обосновывать проектировочные решения&lt;br /&gt;
* Способность находить и устранять ошибки в применении методов&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3159</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3159"/>
		<updated>2024-08-21T09:40:19Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Общие сведения */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Хританков Антон&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Учебный проект =&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
===== Примеры тем проектов =====&lt;br /&gt;
В таблице примеры тем проектов, предлагавшихся в прошлые годы.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Название !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [https://objectoriented.ru/design:smartcontract СмартРитейл]&lt;br /&gt;
| Интегрируем недоверчивых участников рынка ритейла с помощью блокчейна&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [https://objectoriented.ru/design:okfridge Ok,Fridge!]&lt;br /&gt;
| Холодильник доставит к дивану соки и воды под настроение, дозакажет в магазине&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [https://objectoriented.ru/design:autofill ЗалейсяIS]&lt;br /&gt;
| Управляем сетью авто-автозаправок, работающих без персонала&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [https://objectoriented.ru/design:docfree БезВрача]&lt;br /&gt;
| Контролируем соблюдение условий медицинского страхования, и вообще соблюдения правил ЗОЖ&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [https://objectoriented.ru/design:sharecar Перетачка]&lt;br /&gt;
| Едем вместе на чужой машине и везем посылки. Система обеспечивает работу сервиса&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| [https://objectoriented.ru/design:qacall Как?Никак!]&lt;br /&gt;
| Модернизированный CallЦентр, роботы отвечают на типовые вопросы и сами ведут FAQ&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| [https://objectoriented.ru/design:shipall ДоставимВсе]&lt;br /&gt;
| Служба доставки формирует из товаров заказы и перемещает по маршрутам. Маршруты формируются вручную, автоматически как план, динамически. Учет веса и стоимости при планировании&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| [https://objectoriented.ru/design:phystechtaxi Физтех-Такси]&lt;br /&gt;
| Агрегатор такси со скидкой на поездки в МФТИ&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
См. также [https://objectoriented.ru/design:oldcases задачи прошлых лет]&lt;br /&gt;
&lt;br /&gt;
= Контрольная работа и устный ответ =&lt;br /&gt;
&lt;br /&gt;
Контрольная работа может быть предложена тем студентам, кто не набрал достаточно баллов для получения оценки автоматом. В составе письменной контрольной работы на лекции будут предложены примерные задания.&lt;br /&gt;
&lt;br /&gt;
Задача на проектирование с применением UML2, ER, DFD, MSA, GoF, SOLID.&lt;br /&gt;
Вопросы по методам проектирования по билетам для ответа устно&lt;br /&gt;
Примерные критерии оценивания&lt;br /&gt;
&lt;br /&gt;
* Правильность и количество решенных задач&lt;br /&gt;
* Полнота и правильность ответа на вопросы по методам проектирования&lt;br /&gt;
* Ответы на дополнительные вопросы по теме&lt;br /&gt;
* Владение терминологией и методами проектирования&lt;br /&gt;
* Способность принимать и обосновывать проектировочные решения&lt;br /&gt;
* Способность находить и устранять ошибки в применении методов&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3158</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3158"/>
		<updated>2024-08-21T09:39:46Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Учебный проект */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Хританков Антон&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Учебный проект =&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
===== Примеры тем проектов =====&lt;br /&gt;
В таблице примеры тем проектов, предлагавшихся в прошлые годы.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Название !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [https://objectoriented.ru/design:smartcontract СмартРитейл]&lt;br /&gt;
| Интегрируем недоверчивых участников рынка ритейла с помощью блокчейна&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [https://objectoriented.ru/design:okfridge Ok,Fridge!]&lt;br /&gt;
| Холодильник доставит к дивану соки и воды под настроение, дозакажет в магазине&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [https://objectoriented.ru/design:autofill ЗалейсяIS]&lt;br /&gt;
| Управляем сетью авто-автозаправок, работающих без персонала&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [https://objectoriented.ru/design:docfree БезВрача]&lt;br /&gt;
| Контролируем соблюдение условий медицинского страхования, и вообще соблюдения правил ЗОЖ&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [https://objectoriented.ru/design:sharecar Перетачка]&lt;br /&gt;
| Едем вместе на чужой машине и везем посылки. Система обеспечивает работу сервиса&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| [https://objectoriented.ru/design:qacall Как?Никак!]&lt;br /&gt;
| Модернизированный CallЦентр, роботы отвечают на типовые вопросы и сами ведут FAQ&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| [https://objectoriented.ru/design:shipall ДоставимВсе]&lt;br /&gt;
| Служба доставки формирует из товаров заказы и перемещает по маршрутам. Маршруты формируются вручную, автоматически как план, динамически. Учет веса и стоимости при планировании&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| [https://objectoriented.ru/design:phystechtaxi Физтех-Такси]&lt;br /&gt;
| Агрегатор такси со скидкой на поездки в МФТИ&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
См. также [https://objectoriented.ru/design:oldcases задачи прошлых лет]&lt;br /&gt;
&lt;br /&gt;
= Общие сведения =&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3157</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3157"/>
		<updated>2024-08-21T09:39:11Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Примеры тем проектов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Хританков Антон&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Учебный проект =&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
===== Примеры тем проектов =====&lt;br /&gt;
В таблице примеры тем проектов, предлагавшихся в прошлые годы.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Название !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [https://objectoriented.ru/design:smartcontract СмартРитейл]&lt;br /&gt;
| Интегрируем недоверчивых участников рынка ритейла с помощью блокчейна&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [https://objectoriented.ru/design:okfridge Ok,Fridge!]&lt;br /&gt;
| Холодильник доставит к дивану соки и воды под настроение, дозакажет в магазине&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [https://objectoriented.ru/design:autofill ЗалейсяIS]&lt;br /&gt;
| Управляем сетью авто-автозаправок, работающих без персонала&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [https://objectoriented.ru/design:docfree БезВрача]&lt;br /&gt;
| Контролируем соблюдение условий медицинского страхования, и вообще соблюдения правил ЗОЖ&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [https://objectoriented.ru/design:sharecar Перетачка]&lt;br /&gt;
| Едем вместе на чужой машине и везем посылки. Система обеспечивает работу сервиса&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| [https://objectoriented.ru/design:qacall Как?Никак!]&lt;br /&gt;
| Модернизированный CallЦентр, роботы отвечают на типовые вопросы и сами ведут FAQ&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| [https://objectoriented.ru/design:shipall ДоставимВсе]&lt;br /&gt;
| Служба доставки формирует из товаров заказы и перемещает по маршрутам. Маршруты формируются вручную, автоматически как план, динамически. Учет веса и стоимости при планировании&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| [https://objectoriented.ru/design:phystechtaxi Физтех-Такси]&lt;br /&gt;
| Агрегатор такси со скидкой на поездки в МФТИ&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
См. также [https://objectoriented.ru/design:oldcases задачи прошлых лет]&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3156</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3156"/>
		<updated>2024-08-21T09:38:07Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Примеры тем проектов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Хританков Антон&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Учебный проект =&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
===== Примеры тем проектов =====&lt;br /&gt;
В таблице примеры тем проектов, предлагавшихся в прошлые годы.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Название !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [https://objectoriented.ru/design:smartcontract СмартРитейл]&lt;br /&gt;
| Интегрируем недоверчивых участников рынка ритейла с помощью блокчейна&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [https://objectoriented.ru/design:okfridge Ok,Fridge!]&lt;br /&gt;
| Холодильник доставит к дивану соки и воды под настроение, дозакажет в магазине&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [https://objectoriented.ru/design:autofill ЗалейсяIS]&lt;br /&gt;
| Управляем сетью авто-автозаправок, работающих без персонала&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [https://objectoriented.ru/design:docfree БезВрача]&lt;br /&gt;
| Контролируем соблюдение условий медицинского страхования, и вообще соблюдения правил ЗОЖ&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [https://objectoriented.ru/design:sharecar Перетачка]&lt;br /&gt;
| Едем вместе на чужой машине и везем посылки. Система обеспечивает работу сервиса&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| [https://objectoriented.ru/design:qacall Как?Никак!]&lt;br /&gt;
| Модернизированный CallЦентр, роботы отвечают на типовые вопросы и сами ведут FAQ&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| [https://objectoriented.ru/design:shipall ДоставимВсе]&lt;br /&gt;
| Служба доставки формирует из товаров заказы и перемещает по маршрутам. Маршруты формируются вручную, автоматически как план, динамически. Учет веса и стоимости при планировании&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| [https://objectoriented.ru/design:phystechtaxi Физтех-Такси]&lt;br /&gt;
| Агрегатор такси со скидкой на поездки в МФТИ&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3155</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3155"/>
		<updated>2024-08-21T09:35:29Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Примеры тем проектов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Хританков Антон&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Учебный проект =&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
===== Примеры тем проектов =====&lt;br /&gt;
В таблице примеры тем проектов, предлагавшихся в прошлые годы.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Название !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Интегрируем недоверчивых участников рынка ритейла с помощью блокчейна&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Холодильник доставит к дивану соки и воды под настроение, дозакажет в магазине&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Управляем сетью авто-автозаправок, работающих без персонала&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Контролируем соблюдение условий медицинского страхования, и вообще соблюдения правил ЗОЖ&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Едем вместе на чужой машине и везем посылки. Система обеспечивает работу сервиса&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Модернизированный CallЦентр, роботы отвечают на типовые вопросы и сами ведут FAQ&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Служба доставки формирует из товаров заказы и перемещает по маршрутам. Маршруты формируются вручную, автоматически как план, динамически. Учет веса и стоимости при планировании&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Агрегатор такси со скидкой на поездки в МФТИ&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3154</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3154"/>
		<updated>2024-08-21T09:33:55Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Примеры тем проектов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Хританков Антон&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Учебный проект =&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
===== Примеры тем проектов =====&lt;br /&gt;
В таблице примеры тем проектов, предлагавшихся в прошлые годы.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Название !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3153</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3153"/>
		<updated>2024-08-21T09:33:12Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Примеры тем проектов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Хританков Антон&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Учебный проект =&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
===== Примеры тем проектов =====&lt;br /&gt;
В таблице примеры тем проектов, предлагавшихся в прошлые годы.&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3152</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3152"/>
		<updated>2024-08-21T09:33:04Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Примеры тем проектов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Хританков Антон&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Учебный проект =&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
===== Примеры тем проектов =====&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3151</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3151"/>
		<updated>2024-08-21T09:32:48Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Учебный проект */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Хританков Антон&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Учебный проект =&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
=== Примеры тем проектов ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3150</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3150"/>
		<updated>2024-08-21T09:32:19Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Общие сведения */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Хританков Антон&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Учебный проект =&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3149</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3149"/>
		<updated>2024-08-21T09:31:35Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Задание 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Хританков Антон&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Учебный проект====&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
* DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
* UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3148</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3148"/>
		<updated>2024-08-21T09:31:26Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Задание 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Хританков Антон&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Учебный проект====&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
* DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
* MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
* Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
* UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3147</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3147"/>
		<updated>2024-08-21T09:30:57Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Результаты и оценивание проекта */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Хританков Антон&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Учебный проект====&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке [https://objectoriented.ru/_media/uml-verification-proc.pdf Критерии оценивания проектов]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
	<entry>
		<id>https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3145</id>
		<title>Проектирование программных систем 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.atp-fivt.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2024&amp;diff=3145"/>
		<updated>2024-08-21T09:28:20Z</updated>

		<summary type="html">&lt;p&gt;Zueva.mipt: /* Результаты и оценивание проекта */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общие сведения =&lt;br /&gt;
==== Общая информация====&lt;br /&gt;
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).&lt;br /&gt;
&lt;br /&gt;
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.&lt;br /&gt;
&lt;br /&gt;
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.&lt;br /&gt;
&lt;br /&gt;
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
==== Руководитель курса====&lt;br /&gt;
Хританков Антон&lt;br /&gt;
&lt;br /&gt;
==== Примерный план====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Неделя !! Раздел !! Тема&lt;br /&gt;
|-&lt;br /&gt;
| 07/09&lt;br /&gt;
| INTRO+REQ&lt;br /&gt;
| Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.)&lt;br /&gt;
|-&lt;br /&gt;
| 15/09&lt;br /&gt;
| REQ&lt;br /&gt;
| Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований.&lt;br /&gt;
|-&lt;br /&gt;
| 22/09&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER&lt;br /&gt;
|-&lt;br /&gt;
| 29/09&lt;br /&gt;
| DDD&lt;br /&gt;
| Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области.&lt;br /&gt;
|-&lt;br /&gt;
| 06/10&lt;br /&gt;
| DDD+UML2&lt;br /&gt;
| Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD).&lt;br /&gt;
|-&lt;br /&gt;
| 13/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты)&lt;br /&gt;
|-&lt;br /&gt;
| 20/10&lt;br /&gt;
| UML2&lt;br /&gt;
| Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language&lt;br /&gt;
|-&lt;br /&gt;
| 27/10&lt;br /&gt;
| UML2+PROC&lt;br /&gt;
| Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD)&lt;br /&gt;
|-&lt;br /&gt;
| 02/11&lt;br /&gt;
| ARCH&lt;br /&gt;
| Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили).&lt;br /&gt;
|-&lt;br /&gt;
| 09/11&lt;br /&gt;
| ARCH+UML2&lt;br /&gt;
| Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения&lt;br /&gt;
|-&lt;br /&gt;
| 16/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов.&lt;br /&gt;
|-&lt;br /&gt;
| 23/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Паттерны, принципы SOLID в реализации микросервисов. Фреймворки.&lt;br /&gt;
|-&lt;br /&gt;
| 30/11&lt;br /&gt;
| MSA&lt;br /&gt;
| Объектно-ориентированное проектирование. Применение паттернов проектирования.&lt;br /&gt;
|-&lt;br /&gt;
| 07/12&lt;br /&gt;
| MSA+DATA&lt;br /&gt;
| Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 14/12&lt;br /&gt;
| ARCH+MSA&lt;br /&gt;
| Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA&lt;br /&gt;
|-&lt;br /&gt;
| 21/12&lt;br /&gt;
| EXAM&lt;br /&gt;
| Защита проектов по курсу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Учебный проект====&lt;br /&gt;
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.&lt;br /&gt;
&lt;br /&gt;
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.&lt;br /&gt;
&lt;br /&gt;
Примерная таблица этапов проекта и применяемых методов проектирования.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! # !! Этап !! Методы и результаты !! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Анализ требований к продукту&lt;br /&gt;
| Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features&lt;br /&gt;
| Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Разработка модели анализа&lt;br /&gt;
| Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot&#039;s method/Noun phrases, Entity-Relationship model&lt;br /&gt;
| По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Разработка динамической модели&lt;br /&gt;
| Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model.&lt;br /&gt;
| Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Декомпозиция на микросервисы&lt;br /&gt;
| Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model&lt;br /&gt;
| Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Техническое проектирование&lt;br /&gt;
| Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns&lt;br /&gt;
| Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Проектирование данных и прототип&lt;br /&gt;
| Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics&lt;br /&gt;
| Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Задание 1====&lt;br /&gt;
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 1-3.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем&lt;br /&gt;
DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.&lt;br /&gt;
UML2: диаграммы классов, вариантов использования, деятельности или последовательности.&lt;br /&gt;
&lt;br /&gt;
==== Задание 2====&lt;br /&gt;
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.&lt;br /&gt;
&lt;br /&gt;
В таблице выше это задание включает этапы 4-6.&lt;br /&gt;
&lt;br /&gt;
Что можно будет освоить:&lt;br /&gt;
&lt;br /&gt;
DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов&lt;br /&gt;
MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.&lt;br /&gt;
Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении&lt;br /&gt;
UML2: диаграммы компонентов, расширенные диаграммы классов&lt;br /&gt;
&lt;br /&gt;
==== Результаты и оценивание проекта====&lt;br /&gt;
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.&lt;br /&gt;
&lt;br /&gt;
Общие критерии оценивания приведены в методичке Критерии оценивания проектов https://objectoriented.ru/_media/uml-verification-proc.pdf&lt;br /&gt;
&lt;br /&gt;
Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.&lt;br /&gt;
&lt;br /&gt;
Если кратко, то оцениваются следующие харатеристики выполненного проекта&lt;br /&gt;
&lt;br /&gt;
* Согласованность разных представлений в составе проекта между собой&lt;br /&gt;
* Правильность применения методов проектирования&lt;br /&gt;
* Полнота выполнения проекта и следование рекомендациям&lt;br /&gt;
* Обоснованность и целесообразность принятых проектировочных решений&lt;br /&gt;
* Ошибки и недочеты в применении языков моделирования&lt;br /&gt;
* Вклад участников в общий результат&lt;br /&gt;
&lt;br /&gt;
=== Материалы занятий ===&lt;br /&gt;
&lt;br /&gt;
===== Оценки =====&lt;br /&gt;
Правила оценивания (по баллам, набранным в рамках семестра)&lt;br /&gt;
&lt;br /&gt;
===== Семинары =====&lt;br /&gt;
*[https:// Коды и презентации семинаров]&lt;br /&gt;
*[https://Домашние задания]&lt;br /&gt;
*[https://Интересные ссылки]&lt;br /&gt;
&lt;br /&gt;
== Технические ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Сервера ====&lt;/div&gt;</summary>
		<author><name>Zueva.mipt</name></author>
	</entry>
</feed>