0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<blockquote><p>"Компьютер - это конечный автомат. Потоковое программирование нужно тем, кто не умеет программировать конечные автоматы". Алан Кокс, прим. Википедия</p>
1
<blockquote><p>"Компьютер - это конечный автомат. Потоковое программирование нужно тем, кто не умеет программировать конечные автоматы". Алан Кокс, прим. Википедия</p>
2
</blockquote><p>Как вы уже заметили, одну и ту же программу можно написать множеством различных способов. Если не брать во внимание случаи, когда программа написана просто плохо, то остаются подходы, которые имеют как преимущества, так и недостатки относительно друг друга. Иными словами, вся наша жизнь состоит из компромиссов.</p>
2
</blockquote><p>Как вы уже заметили, одну и ту же программу можно написать множеством различных способов. Если не брать во внимание случаи, когда программа написана просто плохо, то остаются подходы, которые имеют как преимущества, так и недостатки относительно друг друга. Иными словами, вся наша жизнь состоит из компромиссов.</p>
3
<h2>Парадигма программирования</h2>
3
<h2>Парадигма программирования</h2>
4
<blockquote><p>Это совокупность идей и понятий, определяющих стиль написания компьютерных программ (подход к программированию)</p>
4
<blockquote><p>Это совокупность идей и понятий, определяющих стиль написания компьютерных программ (подход к программированию)</p>
5
</blockquote><p>Подходы к написанию программ принято называть парадигмами. И эти парадигмы резко отличаются от того, чем они являются в науке.</p>
5
</blockquote><p>Подходы к написанию программ принято называть парадигмами. И эти парадигмы резко отличаются от того, чем они являются в науке.</p>
6
<p>Своим современным значением в научно-технической области термин "парадигма" обязан, по-видимому, Томасу Куну и его книге "Структура научных революций". Кун называл парадигмами устоявшиеся системы научных взглядов, в рамках которых ведутся исследования. Согласно Куну, в процессе развития научной дисциплины может произойти замена одной парадигмы на другую (как, например, геоцентрическая небесная механика Птолемея сменилась гелиоцентрической системой Коперника), при этом старая парадигма ещё продолжает некоторое время существовать и даже развиваться благодаря тому, что многие её сторонники оказываются по тем или иным причинам неспособны перестроиться для работы в другой парадигме.</p>
6
<p>Своим современным значением в научно-технической области термин "парадигма" обязан, по-видимому, Томасу Куну и его книге "Структура научных революций". Кун называл парадигмами устоявшиеся системы научных взглядов, в рамках которых ведутся исследования. Согласно Куну, в процессе развития научной дисциплины может произойти замена одной парадигмы на другую (как, например, геоцентрическая небесная механика Птолемея сменилась гелиоцентрической системой Коперника), при этом старая парадигма ещё продолжает некоторое время существовать и даже развиваться благодаря тому, что многие её сторонники оказываются по тем или иным причинам неспособны перестроиться для работы в другой парадигме.</p>
7
<p>Термин "парадигма программирования" впервые применил в 1978 году Роберт Флойд в своей лекции лауреата премии Тьюринга.</p>
7
<p>Термин "парадигма программирования" впервые применил в 1978 году Роберт Флойд в своей лекции лауреата премии Тьюринга.</p>
8
<p>Флойд отмечает, что в программировании можно наблюдать явление, подобное парадигмам Куна, но, в отличие от них, парадигмы программирования не являются взаимоисключающими:</p>
8
<p>Флойд отмечает, что в программировании можно наблюдать явление, подобное парадигмам Куна, но, в отличие от них, парадигмы программирования не являются взаимоисключающими:</p>
9
<blockquote><p>Если прогресс искусства программирования в целом требует постоянного изобретения и усовершенствования парадигм, то совершенствование искусства отдельного программиста требует, чтобы он расширял свой репертуар парадигм.</p>
9
<blockquote><p>Если прогресс искусства программирования в целом требует постоянного изобретения и усовершенствования парадигм, то совершенствование искусства отдельного программиста требует, чтобы он расширял свой репертуар парадигм.</p>
10
</blockquote><p>Таким образом, по мнению Роберта Флойда, в отличие от парадигм в научном мире, описанных Куном, парадигмы программирования могут сочетаться, обогащая инструментарий программиста.</p>
10
</blockquote><p>Таким образом, по мнению Роберта Флойда, в отличие от парадигм в научном мире, описанных Куном, парадигмы программирования могут сочетаться, обогащая инструментарий программиста.</p>
11
<p>А по нашему мнению, каждая новая парадигма в арсенале разработчика делает его профессионалом качественно нового уровня.</p>
11
<p>А по нашему мнению, каждая новая парадигма в арсенале разработчика делает его профессионалом качественно нового уровня.</p>
12
<p>Например, владение декларативной парадигмой помогает программисту применять в нужных местах функции высшего порядка, элементы логического программирования, а также помогает избегать ненужных изменений состояния. И всё это с лёгкостью можно использовать почти в любом современном императивном языке.</p>
12
<p>Например, владение декларативной парадигмой помогает программисту применять в нужных местах функции высшего порядка, элементы логического программирования, а также помогает избегать ненужных изменений состояния. И всё это с лёгкостью можно использовать почти в любом современном императивном языке.</p>
13
<h2>Примеры парадигм</h2>
13
<h2>Примеры парадигм</h2>
14
<ul><li>Императивное программирование</li>
14
<ul><li>Императивное программирование</li>
15
<li>Функциональное программирование</li>
15
<li>Функциональное программирование</li>
16
<li>Логическое программирование</li>
16
<li>Логическое программирование</li>
17
<li>Программирование, управляемое данными (ООП)</li>
17
<li>Программирование, управляемое данными (ООП)</li>
18
<li>Событийно-ориентированное программирование</li>
18
<li>Событийно-ориентированное программирование</li>
19
<li>Автоматное программирование</li>
19
<li>Автоматное программирование</li>
20
<li>Actor-based программирование</li>
20
<li>Actor-based программирование</li>
21
</ul><p>Этот курс посвящён одной из самых важных парадигм программирования. Эта парадигма не требует поддержки со стороны языка и применима в бесчисленном количестве ситуаций для управления системами со сложным поведением. То есть поведением, в котором результат операции зависит не только от входных данных, но и от предыдущего состояния системы.</p>
21
</ul><p>Этот курс посвящён одной из самых важных парадигм программирования. Эта парадигма не требует поддержки со стороны языка и применима в бесчисленном количестве ситуаций для управления системами со сложным поведением. То есть поведением, в котором результат операции зависит не только от входных данных, но и от предыдущего состояния системы.</p>
22
<h2>Автоматное программирование</h2>
22
<h2>Автоматное программирование</h2>
23
<blockquote><p>Парадигма программирования, основанная на применении конечных автоматов для описания поведения программ</p>
23
<blockquote><p>Парадигма программирования, основанная на применении конечных автоматов для описания поведения программ</p>
24
</blockquote><p>Автоматное программирование имеет под собой серьёзную математическую базу. Сразу предупрежу, что в этом курсе математики не будет. Основная задача курса - дать интуитивное понимание автоматов и научиться их видеть и применять в реальной жизни.</p>
24
</blockquote><p>Автоматное программирование имеет под собой серьёзную математическую базу. Сразу предупрежу, что в этом курсе математики не будет. Основная задача курса - дать интуитивное понимание автоматов и научиться их видеть и применять в реальной жизни.</p>
25
<p>Те, кто хотят узнать про эту тему чуть глубже и стать немного ближе к чистому Computer Science, я рекомендую почитать про машину Тьюринга.</p>
25
<p>Те, кто хотят узнать про эту тему чуть глубже и стать немного ближе к чистому Computer Science, я рекомендую почитать про машину Тьюринга.</p>
26
<p>Темы, затрагиваемые в курсе:</p>
26
<p>Темы, затрагиваемые в курсе:</p>
27
<ul><li>Состояние</li>
27
<ul><li>Состояние</li>
28
<li>Конечные автоматы</li>
28
<li>Конечные автоматы</li>
29
<li>Диаграмма состояний (UML)</li>
29
<li>Диаграмма состояний (UML)</li>
30
<li>Библиотеки для описания автоматов</li>
30
<li>Библиотеки для описания автоматов</li>
31
<li>Шаблоны проектирования (State, State Machine)</li>
31
<li>Шаблоны проектирования (State, State Machine)</li>
32
</ul>
32
</ul>