Изменены ссылки на заголовки внутри файлов

This commit is contained in:
LeterZP
2026-10-01 23:44:56 +03:00
parent 02f469090a
commit 365256ed47
7 changed files with 161 additions and 161 deletions
@@ -1,32 +1,32 @@
## Содержание ## Содержание
- [Решение задач компьютеров без компьютеров](#Решение%20задач%20компьютеров%20без%20компьютеров) - [[#Решение задач компьютеров без компьютеров]]
- [Отдельные операции](#Отдельные%20операции) - [[#Отдельные операции]]
- [Таблицы значений](#Таблицы%20значений) - [[#Таблицы значений]]
- [Устройства](#Устройства) - [[#Устройства]]
- [Механизмы](#Механизмы) - [[#Механизмы]]
- [Сравнение устройств и механизмов](#Сравнение%20устройств%20и%20механизмов) - [[#Сравнение устройств и механизмов]]
- [Современность](#Современность) - [[#Современность]]
- [Информационные системы](#Информационные%20системы) - [[#Информационные системы]]
- [Эффективное решение](#Эффективное%20решение) - [[#Эффективное решение]]
- [Достоинства](#Достоинства) - [[#Достоинства]]
- [Практика](#Практика) - [[#Практика]]
- [Системы управления](#Системы%20управления) - [[#Системы управления]]
- [Жаккард](#Жаккард) - [[#Жаккард]]
- [Проблема создания станка](#Проблема%20создания%20станка) - [[#Проблема создания станка]]
- [Жаккардовый ткацкий станок](#Жаккардовый%20ткацкий%20станок) - [[#Жаккардовый ткацкий станок]]
- [Программное обеспечение](#Программное%20обеспечение) - [[#Программное обеспечение]]
- [Другие примеры](#Другие%20примеры) - [[#Другие примеры]]
- [Поиск кратчайшего пути на взвешенном графе](#Поиск%20кратчайшего%20пути%20на%20взвешенном%20графе) - [[#Поиск кратчайшего пути на взвешенном графе]]
- [Задача коммивояжера](#Задача%20коммивояжера) - [[#Задача коммивояжера]]
- [Приставка Dendy и пистолет](#Приставка%20Dendy%20и%20пистолет) - [[#Приставка Dendy и пистолет]]
- [Реле и релейные диаграммы](#Реле%20и%20релейные%20диаграммы) - [[#Реле и релейные диаграммы]]
- [Электрическое реле](#Электрическое%20реле) - [[#Электрическое реле]]
- [Релейная диаграмма](#Релейная%20диаграмма) - [[#Релейная диаграмма]]
- [Управление двигателем](#Управление%20двигателем) - [[#Управление двигателем]]
- [Практика применения реле](#Практика%20применения%20реле) - [[#Практика применения реле]]
- [Реле и состояние](#Реле%20и%20состояние) - [[#Реле и состояние]]
- [RS-триггер](#RS-триггер) - [[#RS-триггер]]
- [От реле к транзистору](#От%20реле%20к%20транзистору) - [[#От реле к транзистору]]
## Решение задач компьютеров без компьютеров ## Решение задач компьютеров без компьютеров
Несмотря на то, что сейчас компьютеры являются неотъемлемой частью нашей жизни, основные задачи, которые они решают, схожи с задачами, которые ставились еще несколько столетий назад. И все же, люди в прошлом такие задачи решали даже без компьютеров. Несмотря на то, что сейчас компьютеры являются неотъемлемой частью нашей жизни, основные задачи, которые они решают, схожи с задачами, которые ставились еще несколько столетий назад. И все же, люди в прошлом такие задачи решали даже без компьютеров.
@@ -34,7 +34,7 @@
Еще до создания компьютеров существовали примитивные вычислительные алгоритмы. Такие с одной стороны простые, но в тоже время сложные, алгоритмы могли выполнять те же задачи без электрических схем и компьютеров, используя при этом различные способы. Еще до создания компьютеров существовали примитивные вычислительные алгоритмы. Такие с одной стороны простые, но в тоже время сложные, алгоритмы могли выполнять те же задачи без электрических схем и компьютеров, используя при этом различные способы.
### Отдельные операции ### Отдельные операции
Самым примитивным методом для вычисления являются простейшие устройства, способные вычислять заранее заданные функции для заранее заданных параметрах (обычно такое задание включает либо точное количество используемых значений, либо какой-то промежуток значений). Но даже они не оставались неизменными со временем - из изначального вычисления с помощью дискретных и цифровых величин ([таблиц](#Таблицы%20значений)) осуществлялся постепенный переход к аналоговым [устройствам](#Устройства), а позже возвращение обратно к цифровым [механизмам](#Механизмы). Самым примитивным методом для вычисления являются простейшие устройства, способные вычислять заранее заданные функции для заранее заданных параметрах (обычно такое задание включает либо точное количество используемых значений, либо какой-то промежуток значений). Но даже они не оставались неизменными со временем - из изначального вычисления с помощью дискретных и цифровых величин ([[#Таблицы%20значений|таблиц]])) осуществлялся постепенный переход к аналоговым [[#Устройства|устройствам]]), а позже возвращение обратно к цифровым [[#Механизмы|механизмам]].
#### Таблицы значений #### Таблицы значений
Таблицы значений отражают в себе какую-то зависимость, которую можно представить в виде математической функции. Таблицы значений отражают в себе какую-то зависимость, которую можно представить в виде математической функции.
@@ -1,28 +1,28 @@
## Содержание ## Содержание
- [Компьютерные системы](#Компьютерные%20системы) - [[#Компьютерные системы]]
- [Системы с преобладающей программной составляющей](#Системы%20с%20преобладающей%20программной%20составляющей) - [[#Системы с преобладающей программной составляющей]]
- [Классификация компьютерных систем](#Классификация%20компьютерных%20систем) - [[#Классификация компьютерных систем]]
- [Информационные системы](#Информационные%20системы) - [[#Информационные системы]]
- [Управляющие системы](#Управляющие%20системы) - [[#Управляющие системы]]
- [Система. Системная инженерия](#Система.%20Системная%20инженерия) - [[#Система. Системная инженерия]]
- [Системная инженерия](#Системная%20инженерия) - [[#Системная инженерия]]
- [Понятие системы](#Понятие%20системы) - [[#Понятие системы]]
- [Система как совокупность частей](#Система%20как%20совокупность%20частей) - [[#Система как совокупность частей]]
- [Система как функциональное место](#Система%20как%20функциональное%20место) - [[#Система как функциональное место]]
- [Операционное окружение](#Операционное%20окружение) - [[#Операционное окружение]]
- [Представление и точка зрения](#Представление%20и%20точка%20зрения) - [[#Представление и точка зрения]]
- [Система как жизненный цикл](#Система%20как%20жизненный%20цикл) - [[#Система как жизненный цикл]]
- [Обеспечивающие системы](#Обеспечивающие%20системы) - [[#Обеспечивающие системы]]
- [Требования для разработки успешной системы](#Требования%20для%20разработки%20успешной%20системы) - [[#Требования для разработки успешной системы]]
- [Архитектура](#Архитектура) - [[#Архитектура]]
- [Классическое определение архитектуры](#Классическое%20определение%20архитектуры) - [[#Классическое определение архитектуры]]
- [Определение архитектуры в системной инженерии](#Определение%20архитектуры%20в%20системной%20инженерии) - [[#Определение архитектуры в системной инженерии]]
- [Сущностные определения системы](#Сущностные%20определения%20системы) - [[#Сущностные определения системы]]
- [Проблема коммуникации при разработке компьютерных систем](#Проблема%20коммуникации%20при%20разработке%20компьютерных%20систем) - [[#Проблема коммуникации при разработке компьютерных систем]]
- [Причины важности архитектуры](#Причины%20важности%20архитектуры) - [[#Причины важности архитектуры]]
- [Риск откладывания управления рисками](#Риск%20откладывания%20управления%20рисками) - [[#Риск откладывания управления рисками]]
- [V-диаграмма](#V-диаграмма) - [[#V-диаграмма]]
- [Эффект архитектурного проектирования](#Эффект%20архитектурного%20проектирования) - [[#Эффект архитектурного проектирования]]
## Компьютерные системы ## Компьютерные системы
@@ -32,7 +32,7 @@
На самом деле, это довольно общее определение, и в современном понятие компьютерных систем определяется намного строже. Иногда бывают случаи, когда очень сложно определить, является ли что-либо компьютерной системой или нет. На самом деле, это довольно общее определение, и в современном понятие компьютерных систем определяется намного строже. Иногда бывают случаи, когда очень сложно определить, является ли что-либо компьютерной системой или нет.
В стандартных компьютерных системах в основном [преобладает программная составляющая](#Системы%20с%20преобладающей%20программной%20составляющей). В стандартных компьютерных системах в основном [[#Системы с преобладающей программной составляющей|преобладает программная составляющая]].
### Системы с преобладающей программной составляющей ### Системы с преобладающей программной составляющей
>**Software-intensive systems** are systems in which software development and/or integration are dominant considerations. This includes computer-based systems ranging from individual software applications, information systems, embedded systems, software product lines and product families and systems-of-systems --- [ISO/IEC/IEEE 42010](https://en.wikipedia.org/wiki/ISO/IEC_42010). (*Системы с преобладающей программной составляющей - это такие системы, в которых основной упор делается на разработку и/или внедрение программного обеспечения. Это включает в себя такие компьютерные системы, как отдельное программное обеспечение, информационные системы, встроенные системы, линейки и семейства программного обеспечения и системы систем.*) >**Software-intensive systems** are systems in which software development and/or integration are dominant considerations. This includes computer-based systems ranging from individual software applications, information systems, embedded systems, software product lines and product families and systems-of-systems --- [ISO/IEC/IEEE 42010](https://en.wikipedia.org/wiki/ISO/IEC_42010). (*Системы с преобладающей программной составляющей - это такие системы, в которых основной упор делается на разработку и/или внедрение программного обеспечения. Это включает в себя такие компьютерные системы, как отдельное программное обеспечение, информационные системы, встроенные системы, линейки и семейства программного обеспечения и системы систем.*)
@@ -40,7 +40,7 @@
В настоящее время такие системы преобладают. В современном мире около половины стоимости всей разработки какого-либо оборудования уходит на разработку программного обеспечения. В настоящее время такие системы преобладают. В современном мире около половины стоимости всей разработки какого-либо оборудования уходит на разработку программного обеспечения.
### Классификация компьютерных систем ### Классификация компьютерных систем
В основе своей, вся [вычислительная техника](Вычислительные%20платформы.md) создана для того, чтобы либо быстро обрабатывать данные - [информационные системы](#Информационные%20системы), либо точно управлять данными - [управляющие системы](#Управляющие%20системы). Оба этих класса обладают разными требованиями к своим составляющим, и это в конечном итоге выливается в различие между внутренней составляющей таких систем. В основе своей, вся [вычислительная техника](Вычислительные%20платформы.md) создана для того, чтобы либо быстро обрабатывать данные - [[#Информационные системы|информационные системы]], либо точно управлять данными - [[#Управляющие системы|управляющие системы]]. Оба этих класса обладают разными требованиями к своим составляющим, и это в конечном итоге выливается в различие между внутренней составляющей таких систем.
#### Информационные системы #### Информационные системы
Основная цель информационных систем - получить данные, преобразовать или накопить их каким-либо образом, и выдать их в измененном или обработанном виде. Приоритетом таких систем всегда является экономия времени и скорость обработки данных, и даже не важно насколько - даже если можно сэкономить одну лишнюю миллисекунду, это нужно сделать (если можно быстрее, то нужно быстрее). Основная цель информационных систем - получить данные, преобразовать или накопить их каким-либо образом, и выдать их в измененном или обработанном виде. Приоритетом таких систем всегда является экономия времени и скорость обработки данных, и даже не важно насколько - даже если можно сэкономить одну лишнюю миллисекунду, это нужно сделать (если можно быстрее, то нужно быстрее).
@@ -72,7 +72,7 @@
Отсюда вытекает и роль системной инженерии. Системный инженер способен взаимодействовать с покупателем (заказчиком), понимая и анализируя его требования, передавая эти требования в нужном виде команде разработчиков для внедрения, а также поддерживая всю систему на протяжении всего ее жизненного цикла. Системная инженерия фокусируется на том, чтобы удостоверится в достижении целей и задач системы связыванием всех ее частей воедино. Отсюда вытекает и роль системной инженерии. Системный инженер способен взаимодействовать с покупателем (заказчиком), понимая и анализируя его требования, передавая эти требования в нужном виде команде разработчиков для внедрения, а также поддерживая всю систему на протяжении всего ее жизненного цикла. Системная инженерия фокусируется на том, чтобы удостоверится в достижении целей и задач системы связыванием всех ее частей воедино.
### Понятие системы ### Понятие системы
Понятие системы можно рассматривать с трех разных точек зрения. С одной стороны, система - это [совокупность частей](#Система%20как%20совокупность%20частей) (различные небольшие элементы образуют полноценную систему). С другой, система - это [функциональное место](#Система%20как%20функциональное%20место) (система - это место, откуда мы получаем результат, и не важно, что происходит внутри этой системы). С третьей, система - это [жизненный цикл](#Система%20как%20жизненный%20цикл) (то, как система рождается и умирает). Понятие системы можно рассматривать с трех разных точек зрения. С одной стороны, система - это [[#Система как совокупность частей|совокупность частей]] (различные небольшие элементы образуют полноценную систему). С другой, система - это [[#Система как функциональное место|функциональное место]] (система - это место, откуда мы получаем результат, и не важно, что происходит внутри этой системы). С третьей, система - это [[#Система как жизненный цикл|жизненный цикл]] (то, как система рождается и умирает).
#### Система как совокупность частей #### Система как совокупность частей
Система - это комбинация взаимодействующих между собой элементов, организованных для достижения одной или нескольких установленных целей. Такую систему можно рассматривать как готовый продукт или услугу, которую она предоставляет. Система - это комбинация взаимодействующих между собой элементов, организованных для достижения одной или нескольких установленных целей. Такую систему можно рассматривать как готовый продукт или услугу, которую она предоставляет.
@@ -129,16 +129,16 @@
### Требования для разработки успешной системы ### Требования для разработки успешной системы
Разработка успешной системы требует Разработка успешной системы требует
1. рассмотрения ее [структуры](#Система%20как%20совокупность%20частей) 1. рассмотрения ее [[#Система как совокупность частей|структуры]]
2. рассмотрения ее [функционального места](#Система%20как%20функциональное%20место) 2. рассмотрения ее [[#Система как функциональное место|функционального места]]
3. рассмотрения ее [операционного окружения](#Операционное%20окружение) 3. рассмотрения ее [[#Операционное окружение|операционного окружения]]
4. рассмотрения ее [жизненного цикла](#Система%20как%20жизненный%20цикл) 4. рассмотрения ее [[#Система как жизненный цикл|жизненного цикла]]
5. рассмотрения ее [обеспечивающих систем](#Обеспечивающие%20системы) 5. рассмотрения ее [[#Обеспечивающие системы|обеспечивающих систем]]
Аналогичные результаты были получены в ряде других исследований, и такой же вывод можно найти, к примеру, в [OMG Essence](https://www.omg.org/spec/Essence/1.2) (стандарт задающий общее ядро понятий для описания, сравнения и разработки ПО) или в [СМД-методологии](https://web.archive.org/web/20220409190315/https://ru.wikipedia.org/wiki/СМД-методология) (системомыследеятельностный подход по Г. П. Щедровицкому). Аналогичные результаты были получены в ряде других исследований, и такой же вывод можно найти, к примеру, в [OMG Essence](https://www.omg.org/spec/Essence/1.2) (стандарт задающий общее ядро понятий для описания, сравнения и разработки ПО) или в [СМД-методологии](https://web.archive.org/web/20220409190315/https://ru.wikipedia.org/wiki/СМД-методология) (системомыследеятельностный подход по Г. П. Щедровицкому).
### Архитектура ### Архитектура
При разработке компьютерных систем часто возникают [проблемы коммуникации](#Проблема%20коммуникации%20при%20разработке%20компьютерных%20систем). Одной из основных причин возникновения таких проблем является взгляд на систему только с какой-то одной [точки зрения](#Представление%20и%20точка%20зрения). Из-за этого становится важным навык видеть все вопросы и проблемы, возникающие при разработке. Как говорил [Барри Боэм](https://ru.wikipedia.org/wiki/Боэм,_Барри) (Barry W. Boehm): "Poor management can increase software costs more rapidly than any other factor. (*Плохой менеджмент может увеличить стоимость программного обеспечения намного стремительнее, чем любой другой фактор.*)". Именно поэтому при разработке очень важна архитектура. При разработке компьютерных систем часто возникают [[#Проблема коммуникации при разработке компьютерных систем|проблемы коммуникации]]. Одной из основных причин возникновения таких проблем является взгляд на систему только с какой-то одной [[#Представление и точка зрения|точки зрения]]. Из-за этого становится важным навык видеть все вопросы и проблемы, возникающие при разработке. Как говорил [Барри Боэм](https://ru.wikipedia.org/wiki/Боэм,_Барри) (Barry W. Boehm): "Poor management can increase software costs more rapidly than any other factor. (*Плохой менеджмент может увеличить стоимость программного обеспечения намного стремительнее, чем любой другой фактор.*)". Именно поэтому при разработке очень важна архитектура.
>**Архитектура** - формальный способ зафиксировать множественность точек зрения на систему и передать ее другим. >**Архитектура** - формальный способ зафиксировать множественность точек зрения на систему и передать ее другим.
@@ -1,53 +1,53 @@
## Содержание ## Содержание
- [Введение](#Введение) - [[#Введение]]
- [Клиент-серверное взаимодействие. Протокол HTTP](#Клиент-серверное%20взаимодействие.%20Протокол%20HTTP) - [[#Клиент-серверное взаимодействие. Протокол HTTP]]
- [HTTP](#HTTP) - [[#HTTP]]
- [Структура запроса HTTP](#Структура%20запроса%20HTTP) - [[#Структура запроса HTTP]]
- [Структура ответа HTTP](#Структура%20ответа%20HTTP) - [[#Структура ответа HTTP]]
- [Методы HTTP](#Методы%20HTTP) - [[#Методы HTTP]]
- [Коды состояния](#Коды%20состояния) - [[#Коды состояния]]
- [Заголовки HTTP](#Заголовки%20HTTP) - [[#Заголовки HTTP]]
- [Кеширование](#Кеширование) - [[#Кеширование]]
- [URI, URN и URL](#URI,%20URN%20и%20URL) - [[#URI, URN и URL]]
- [REST](#REST) - [[#REST]]
- [Разметка страниц. Язык HTML](#Разметка%20страниц.%20Язык%20HTML) - [[#Разметка страниц. Язык HTML]]
- [HTML](#HTML) - [[#HTML]]
- [Структура HTML-документа](#Структура%20HTML-документа) - [[#Структура HTML-документа]]
- [HTML-формы](#HTML-формы) - [[#HTML-формы]]
- [HTML5](#HTML5) - [[#HTML5]]
- [Браузер](#Браузер) - [[#Браузер]]
- [DOM](#DOM) - [[#DOM]]
- [Стилизация страниц. Основы CSS](#Стилизация%20страниц.%20Основы%20CSS) - [[#Стилизация страниц. Основы CSS]]
- [CSS](#CSS) - [[#CSS]]
- [Источники CSS](#Источники%20CSS) - [[#Источники CSS]]
- [Структура CSS](#Структура%20CSS) - [[#Структура CSS]]
- [Приоритеты стилей](#Приоритеты%20стилей) - [[#Приоритеты стилей]]
- [LESS & Sass / SCSS](#LESS%20&%20Sass%20/%20SCSS) - [[#LESS & Sass / SCSS]]
- [LESS](#LESS) - [[#LESS]]
- [Sass](#Sass) - [[#Sass]]
- [SCSS](#SCSS) - [[#SCSS]]
## Введение ## Введение
В основном все держится на 4 вещах: В основном все держится на 4 вещах:
- [Hypertext Transfer Protocol (HTTP)](#Клиент-серверное%20взаимодействие.%20Протокол%20HTTP) - предназначен для передачи гипертекста между клиентом и сервером - [[#Клиент-серверное взаимодействие. Протокол HTTP|Hypertext Transfer Protocol (HTTP)]] - предназначен для передачи гипертекста между клиентом и сервером
- [Hypertext Markup Language (HTML)](#Разметка%20страниц.%20Язык%20HTML) - язык разметки гипертекста - [[#Разметка страниц. Язык HTML|Hypertext Markup Language (HTML)]] - язык разметки гипертекста
- [Cascade StyleSheets (CSS)](#Стилизация%20страниц.%20Основы%20CSS) - язык описания внешнего вида HTML-документов - [[#Стилизация страниц. Основы CSS|Cascade StyleSheets (CSS)]] - язык описания внешнего вида HTML-документов
- JavaScript - язык для написания динамических сценариев, выполняемых на стороне клиента - JavaScript - язык для написания динамических сценариев, выполняемых на стороне клиента
## Клиент-серверное взаимодействие. Протокол HTTP ## Клиент-серверное взаимодействие. Протокол HTTP
### HTTP ### HTTP
Сам по себе HTTP - протокол прикладного уровня. В его основе лежит технология "клиент-сервер". Он может использоваться в качестве "транспорта" для других протоколов прикладного уровня. Основной объект манипуляций этого протокола - ресурс, на который указывает [URI](#URI,%20URN%20и%20URL). Обмен сообщениями в этом протоколе идет по схеме "запрос-ответ". Сам по себе протокол не сохраняет состояние (stateless-протокол), поэтому для реализации сессий используется cookies. Сам по себе HTTP - протокол прикладного уровня. В его основе лежит технология "клиент-сервер". Он может использоваться в качестве "транспорта" для других протоколов прикладного уровня. Основной объект манипуляций этого протокола - ресурс, на который указывает [[#URI, URN и URL|URI]]. Обмен сообщениями в этом протоколе идет по схеме "запрос-ответ". Сам по себе протокол не сохраняет состояние (stateless-протокол), поэтому для реализации сессий используется cookies.
#### Структура запроса HTTP #### Структура запроса HTTP
Первая строка запроса HTTP является стартовой, в ней содержится основное описание необходимого действия (команда). При ее составлении через пробел указывают три основные для протокола вещи: [метод](#Методы%20HTTP), [URI](#URI,%20URN%20и%20URL) и версию протокола HTTP (в формате HTTP/Версия). Первая строка запроса HTTP является стартовой, в ней содержится основное описание необходимого действия (команда). При ее составлении через пробел указывают три основные для протокола вещи: [[#Методы HTTP|метод]], [[#URI, URN и URL|URI]] и версию протокола HTTP (в формате HTTP/Версия).
За первой строкой следует следующий раздел - заголовки. Этот раздел содержит, как ни странно, [заголовки](#Заголовки%20HTTP). За первой строкой следует следующий раздел - заголовки. Этот раздел содержит, как ни странно, [[#Заголовки HTTP|заголовки]].
Последним разделом запроса является тело (или сущность) сообщения. Чаще всего в запросе тело остается пустым. В теле сообщения может находится что угодно, что необходимо передать с помощью протокола на другую сторону. Вся информация о теле, необходимая другой стороне, должна быть указана в заголовках. Последним разделом запроса является тело (или сущность) сообщения. Чаще всего в запросе тело остается пустым. В теле сообщения может находится что угодно, что необходимо передать с помощью протокола на другую сторону. Вся информация о теле, необходимая другой стороне, должна быть указана в заголовках.
#### Структура ответа HTTP #### Структура ответа HTTP
Ответ мало чем отличается от [запроса](#Структура%20запроса%20HTTP). Единственным отличием является стартовая строка. Эта строка составляется тем же образом, что и стартовая строка запроса, перечисляя через пробел основную информацию запроса: версию протокола HTTP (в формате HTTP/Версия), [код состояния](#Код%20состояния) и пояснение кода состояния. По сути, в пояснении можно указать что угодно, но лучше придерживаться стандартных шаблонов сообщений. Ответ мало чем отличается от [[#Структура запроса HTTP|запроса]]. Единственным отличием является стартовая строка. Эта строка составляется тем же образом, что и стартовая строка запроса, перечисляя через пробел основную информацию запроса: версию протокола HTTP (в формате HTTP/Версия), [[#Код состояния|код состояния]] и пояснение кода состояния. По сути, в пояснении можно указать что угодно, но лучше придерживаться стандартных шаблонов сообщений.
#### Методы HTTP #### Методы HTTP
Методов HTTP довольно много, поэтому перечислим только используемые чаще всего. Методов HTTP довольно много, поэтому перечислим только используемые чаще всего.
@@ -55,7 +55,7 @@
- GET - получение данных с ресурса (запрос содержимого ресурса) - GET - получение данных с ресурса (запрос содержимого ресурса)
- HEAD - аналог GET, но в ответе не передается (отсутствует) тело - HEAD - аналог GET, но в ответе не передается (отсутствует) тело
- POST - передача данных ресурсу - POST - передача данных ресурсу
- PUT - загрузка содержимого запроса на указанный [URI](#URI,%20URN%20и%20URL) - PUT - загрузка содержимого запроса на указанный [[#URI, URN и URL|URI]]
- DELETE - удаление данных с сервера - DELETE - удаление данных с сервера
#### Коды состояния #### Коды состояния
@@ -89,7 +89,7 @@
> **REST (Representation State Transformer)** - передача состояния представления - подход к архитектуре сетевых протоколов, обеспечивающих доступ к информационным ресурсам. Он описывает взаимодействие между клиентом и сервером, а также между front-end и back-end частями. > **REST (Representation State Transformer)** - передача состояния представления - подход к архитектуре сетевых протоколов, обеспечивающих доступ к информационным ресурсам. Он описывает взаимодействие между клиентом и сервером, а также между front-end и back-end частями.
Основные концепции REST: Основные концепции REST:
- данные должны передаваться в виде небольшого числа стандартных форматов (к примеру, [HTML](#HTML), [XML](https://ru.wikipedia.org/wiki/XML?ysclid=mu8vgeju1m2168967), [JSON](https://ru.wikipedia.org/wiki/JSON?ysclid=mu8vgmwdcz833033530)) - данные должны передаваться в виде небольшого числа стандартных форматов (к примеру, [[#HTML]], [XML](https://ru.wikipedia.org/wiki/XML?ysclid=mu8vgeju1m2168967), [JSON](https://ru.wikipedia.org/wiki/JSON?ysclid=mu8vgmwdcz833033530))
- сетевой протокол должен поддерживать кеширование, не должен зависеть от сетевого слоя, не должен сохранять информацию о состоянии между парами "запрос-ответ" - сетевой протокол должен поддерживать кеширование, не должен зависеть от сетевого слоя, не должен сохранять информацию о состоянии между парами "запрос-ответ"
Существует подход, противоположный REST, который основан на вызове удаленных процедур (RPC - Remote Process Call). Существует подход, противоположный REST, который основан на вызове удаленных процедур (RPC - Remote Process Call).
@@ -99,31 +99,31 @@
>**HyperText Markup Language** (HTML) - стандартный декларативный язык разметки документов в интернете. >**HyperText Markup Language** (HTML) - стандартный декларативный язык разметки документов в интернете.
В основном, он интерпретируется [браузером](#Браузер) и отображается в виде документа. Изначально, он являлся частным случаем SGML (стандартного обобщенного языка разметки). В основном, он интерпретируется [[#Браузер|браузером]] и отображается в виде документа. Изначально, он являлся частным случаем SGML (стандартного обобщенного языка разметки).
Этот язык был разработан [Тимом Бернерсом-Ли](https://ru.wikipedia.org/wiki/Бернерс-Ли,_Тим?ysclid=mu8uowzcj46005688) в 1989-1991 годах. Этот язык был разработан [Тимом Бернерсом-Ли](https://ru.wikipedia.org/wiki/Бернерс-Ли,_Тим?ysclid=mu8uowzcj46005688) в 1989-1991 годах.
#### Структура HTML-документа #### Структура HTML-документа
В начале документа всегда находится строка с объявлением версии HTML. Хотя чаще всего для версии [HTML5](#HTML5) это правило игнорируется, так как такой стандарт используется неявно. В начале документа всегда находится строка с объявлением версии HTML. Хотя чаще всего для версии [[#HTML5]] это правило игнорируется, так как такой стандарт используется неявно.
По синтаксису он очень напоминает [XML](https://ru.wikipedia.org/wiki/XML?ysclid=mu8urdj3jm497572817), и даже существует отдельная нотация [XHTML](https://ru.wikipedia.org/wiki/XHTML?ysclid=mu8urty7p0976864513), которая является частным случаем этого языка. В частности, документ также состоит в основном из элементов, начало и конец которых обозначаются тегами. По синтаксису он очень напоминает [XML](https://ru.wikipedia.org/wiki/XML?ysclid=mu8urdj3jm497572817), и даже существует отдельная нотация [XHTML](https://ru.wikipedia.org/wiki/XHTML?ysclid=mu8urty7p0976864513), которая является частным случаем этого языка. В частности, документ также состоит в основном из элементов, начало и конец которых обозначаются тегами.
Теги однозначно определяют закрытие или открытие того или иного элемента. Это позволяет вкладывать теги друг в друга, при этом сохраняя строгую структуру. В то же время теги могут быть одинарными (или пустыми) - то есть только открываться, не закрываясь. Также теги могут содержать атрибуты - специальные переменные, указанные в открывающем теге. Теги однозначно определяют закрытие или открытие того или иного элемента. Это позволяет вкладывать теги друг в друга, при этом сохраняя строгую структуру. В то же время теги могут быть одинарными (или пустыми) - то есть только открываться, не закрываясь. Также теги могут содержать атрибуты - специальные переменные, указанные в открывающем теге.
Начало и конец документа обозначаются специальными тегами. Внутри этих тегов должны находится два других тега, которые определяют заголовок и тело документа соответственно. Начало и конец документа обозначаются специальными тегами. Внутри этих тегов должны находится два других тега, которые определяют заголовок и тело документа соответственно.
В заголовке чаще всего указывают, помимо самого заголовка, мета-информацию и различные необходимые для работы сайта файлы, к примеру файлы [css](#Стилизация%20страниц.%20Основы%20CSS) или js. В заголовке чаще всего указывают, помимо самого заголовка, мета-информацию и различные необходимые для работы сайта файлы, к примеру файлы [[#Стилизация страниц. Основы CSS|css]] или js.
#### HTML-формы #### HTML-формы
Основное предназначение форм - обмен данными между пользователем и сервером. Приятной особенностью таких форм является то, что они могут работать без JavaScript. Основное предназначение форм - обмен данными между пользователем и сервером. Приятной особенностью таких форм является то, что они могут работать без JavaScript.
Сам HTML-документ может содержать любое число форм, но на сервер одновременно может быть отправлена только одна. При этом вложенные формы запрещены. Сам HTML-документ может содержать любое число форм, но на сервер одновременно может быть отправлена только одна. При этом вложенные формы запрещены.
Границы формы в документе, как и границы любого другого элемента, задаются тегами. В атрибутах формы можно отдельно указать [метод HTTP](#Методы%20HTTP) и ссылку, куда отправляется форма. При этом в конце формы обязательно должна находится отдельная кнопка для ее отправки. Границы формы в документе, как и границы любого другого элемента, задаются тегами. В атрибутах формы можно отдельно указать [[#Методы HTTP|метод HTTP]] и ссылку, куда отправляется форма. При этом в конце формы обязательно должна находится отдельная кнопка для ее отправки.
#### HTML5 #### HTML5
HTML5 - как следует из названия, пятая версия спецификации языка HTML. Стандарт такого языка был принят в 2014 году (в то время как HTML4 - в 1999 году). HTML5 - как следует из названия, пятая версия спецификации языка HTML. Стандарт такого языка был принят в 2014 году (в то время как HTML4 - в 1999 году).
Конечно, за это время в язык добавили много новых синтаксических особенностей. В первую очередь, изменения были внесены для более удобного управления мультимедийным содержимым страницы. Это включает в себя добавление таких тегов, как аудио и видео. Несмотря на то, что они сами по себе достаточно просты (в них присутствует всего три кнопки - старт, стоп и перемотка), они универсальны и работают на любом [браузере](#Браузер). Конечно, за это время в язык добавили много новых синтаксических особенностей. В первую очередь, изменения были внесены для более удобного управления мультимедийным содержимым страницы. Это включает в себя добавление таких тегов, как аудио и видео. Несмотря на то, что они сами по себе достаточно просты (в них присутствует всего три кнопки - старт, стоп и перемотка), они универсальны и работают на любом [[#Браузер|браузере]].
Помимо этого были добавлены новые семантические теги - замена для стандартных и универсальных. В основном они редко где используются, но иногда могут помочь в решении проблем доступности (к примеру, для слепых) или для более точного пояснения к содержимому тега. Помимо этого были добавлены новые семантические теги - замена для стандартных и универсальных. В основном они редко где используются, но иногда могут помочь в решении проблем доступности (к примеру, для слепых) или для более точного пояснения к содержимому тега.
@@ -1,9 +1,9 @@
## Содержание ## Содержание
- [Случайные события. Статическая вероятность](#Случайные%20события.%20Статическая%20вероятность) - [[#Случайные события. Статическая вероятность]]
- [События](#События) - [[#События]]
- [Вероятность](#Вероятность) - [[#Вероятность]]
- [Дискретное вероятностное пространство](#Дискретное%20вероятностное%20пространство) - [[#Дискретное вероятностное пространство]]
- [Геометрические вероятности](#Геометрические%20вероятности) - [[#Геометрические вероятности]]
## Случайные события. Статическая вероятность ## Случайные события. Статическая вероятность
@@ -58,7 +58,7 @@
>**Измеримое пространство** - пара ($\Omega, \mathcal{F}$), состоящая из множества $\Omega$ и $\sigma$-алгебры $\mathcal{F}$ подмножеств $\Omega$. >**Измеримое пространство** - пара ($\Omega, \mathcal{F}$), состоящая из множества $\Omega$ и $\sigma$-алгебры $\mathcal{F}$ подмножеств $\Omega$.
## Вероятность ## Вероятность
Далее будем использовать такие понятия, как [алгебра](#События), [событие](#События), [измеримое пространство](#События). Далее будем использовать такие понятия, как [[#События|алгебра]], [[#События|событие]], [[#События|измеримое пространство]].
>**Мера** - числовая функция $\mu : \mathcal{F} \to \mathbb{R}$, заданная на $\sigma$-алгебре событий $\mathcal{F}$, удовлетворяющая условиям >**Мера** - числовая функция $\mu : \mathcal{F} \to \mathbb{R}$, заданная на $\sigma$-алгебре событий $\mathcal{F}$, удовлетворяющая условиям
> 1) $\mu(\varnothing) = 0$ > 1) $\mu(\varnothing) = 0$
@@ -101,7 +101,7 @@
>***Теорема***. Система аксиом P1), P2), P3), P4) равносильна системе аксиом P1), P2), P3*). >***Теорема***. Система аксиом P1), P2), P3), P4) равносильна системе аксиом P1), P2), P3*).
## Дискретное вероятностное пространство ## Дискретное вероятностное пространство
Далее будем использовать такие понятия, как [вероятностное пространство](#Вероятность). Далее будем использовать такие понятия, как [[#Вероятность|вероятностное пространство]].
>**Конечное вероятностное пространство** - вероятностное пространство, построенное следующим образом. Пусть $\Omega$ = $\{ \omega_1, \dots, \omega_n \}$ - конечное множество, $\mathcal{A}$ - алгебра всех подмножеств множества $\Omega$ (так как $\Omega$ конечно, то $\mathcal{A}$ - $\sigma$-алгебра), $p_i, i = 1, \dots, n$ - положительные числа, $\sum\limits_{i=1}^{n} p_i = 1$. Для события A положим $\text{P}(A) = \sum\limits_{\omega_i \in A} p_i = 1$. Для невозможного события положим $\text{P}(\varnothing) = 0$. Нетрудно доказать, что данное вероятностное пространство удовлетворяет всем аксиомам. >**Конечное вероятностное пространство** - вероятностное пространство, построенное следующим образом. Пусть $\Omega$ = $\{ \omega_1, \dots, \omega_n \}$ - конечное множество, $\mathcal{A}$ - алгебра всех подмножеств множества $\Omega$ (так как $\Omega$ конечно, то $\mathcal{A}$ - $\sigma$-алгебра), $p_i, i = 1, \dots, n$ - положительные числа, $\sum\limits_{i=1}^{n} p_i = 1$. Для события A положим $\text{P}(A) = \sum\limits_{\omega_i \in A} p_i = 1$. Для невозможного события положим $\text{P}(\varnothing) = 0$. Нетрудно доказать, что данное вероятностное пространство удовлетворяет всем аксиомам.
@@ -112,7 +112,7 @@
>**Дискретное вероятностное пространство** - обобщение конечного вероятностного пространства, построенное следующим образом. Пусть $\Omega = \{ \omega_1, \omega_2, \dots \}$ - счетное множество, $\mathcal{F}$ - набор всех подмножеств $\Omega$, $p_n, n = 1, 2, \dots,$ - неотрицательные числа, такие что выполнено условие $\sum\limits_{n=1}^{\infty} p_n = 1$. $\forall A \in \mathcal{F}$ положим $\text{P}(A) = \sum\limits_{n \in \{ n: \omega_n \in A \}}^{\infty} p_n$. Нетрудно доказать, что вероятностное пространство $(\Omega, \mathcal{F}, \text{P})$ удовлетворяет всем аксиомам. >**Дискретное вероятностное пространство** - обобщение конечного вероятностного пространства, построенное следующим образом. Пусть $\Omega = \{ \omega_1, \omega_2, \dots \}$ - счетное множество, $\mathcal{F}$ - набор всех подмножеств $\Omega$, $p_n, n = 1, 2, \dots,$ - неотрицательные числа, такие что выполнено условие $\sum\limits_{n=1}^{\infty} p_n = 1$. $\forall A \in \mathcal{F}$ положим $\text{P}(A) = \sum\limits_{n \in \{ n: \omega_n \in A \}}^{\infty} p_n$. Нетрудно доказать, что вероятностное пространство $(\Omega, \mathcal{F}, \text{P})$ удовлетворяет всем аксиомам.
## Геометрические вероятности ## Геометрические вероятности
Далее будем использовать такие понятия, как [вероятностное пространство](#Вероятность). Далее будем использовать такие понятия, как [[#Вероятность|вероятностное пространство]].
>Определим вероятностное пространство, служащее моделью задач, в которых частица случайном образом бросается в какую-либо область евклидова n-мерного пространства с конечным n-мерным объемом (предполагается, что вероятность попасть частице в какую-либо область этого пространства пропорциональна n-мерному объему этой области). Пусть $\Omega$ - область евклидова n-мерного пространства с конечным n-мерным объемом, а событие - подмножество $\Omega$, для которых можно определить n-мерный объем, множество событий - $\sigma$-алгебра $\mathcal{B}$ борелевских подмножеств $\Omega$. Положим вероятность события A $\text{P}(A) = \frac{|A|}{|\Omega|}$, где $|A|, |\Omega|$ - n-мерный объем соответствующего множества. Нетрудно понять, что вероятностное пространство ($\Omega, \mathcal{B}, \text{P}$) удовлетворяет всем аксиомам. >Определим вероятностное пространство, служащее моделью задач, в которых частица случайном образом бросается в какую-либо область евклидова n-мерного пространства с конечным n-мерным объемом (предполагается, что вероятность попасть частице в какую-либо область этого пространства пропорциональна n-мерному объему этой области). Пусть $\Omega$ - область евклидова n-мерного пространства с конечным n-мерным объемом, а событие - подмножество $\Omega$, для которых можно определить n-мерный объем, множество событий - $\sigma$-алгебра $\mathcal{B}$ борелевских подмножеств $\Omega$. Положим вероятность события A $\text{P}(A) = \frac{|A|}{|\Omega|}$, где $|A|, |\Omega|$ - n-мерный объем соответствующего множества. Нетрудно понять, что вероятностное пространство ($\Omega, \mathcal{B}, \text{P}$) удовлетворяет всем аксиомам.
@@ -1,8 +1,8 @@
## Содержание ## Содержание
- [Условные вероятности](#Условные%20вероятности) - [[#Условные вероятности]]
- [Формула полной вероятности](#Формула%20полной%20вероятности) - [[#Формула полной вероятности]]
- [Формула Байеса](#Формула%20Байеса) - [[#Формула Байеса]]
- [Независимость событий](#Независимость%20событий) - [[#Независимость событий]]
## Условные вероятности ## Условные вероятности
Далее будем использовать такие понятия, как [событие](Вероятностное%20пространство.md#События), [вероятность](Вероятностное%20пространство.md#Вероятность) ($P$). Далее будем использовать такие понятия, как [событие](Вероятностное%20пространство.md#События), [вероятность](Вероятностное%20пространство.md#Вероятность) ($P$).
@@ -16,7 +16,7 @@
>*Доказательство*. Из условия теоремы следует существование всех условных вероятностей в требуемом уравнении. Индукция по $n$. При $n = 2$ требуемое равенство вытекает из определения теоремы умножения. Пусть требуемое равенство справедливо для $n = k$. Докажем его при $n = k + 1$. Подставляя в определение теоремы умножения $B = A_1 \dots A_k$ и $A = A_{k+1}$, получим $P(A_1 \dots A_k A_{k+1}) = P(A_1 \dots A_k) P(A_{k+1}|A_1 \dots A_k)$. Из этого равенства и индукционного предположения следует требуемое равенство при $n = k+1$. $\blacksquare$ >*Доказательство*. Из условия теоремы следует существование всех условных вероятностей в требуемом уравнении. Индукция по $n$. При $n = 2$ требуемое равенство вытекает из определения теоремы умножения. Пусть требуемое равенство справедливо для $n = k$. Докажем его при $n = k + 1$. Подставляя в определение теоремы умножения $B = A_1 \dots A_k$ и $A = A_{k+1}$, получим $P(A_1 \dots A_k A_{k+1}) = P(A_1 \dots A_k) P(A_{k+1}|A_1 \dots A_k)$. Из этого равенства и индукционного предположения следует требуемое равенство при $n = k+1$. $\blacksquare$
## Формула полной вероятности ## Формула полной вероятности
Далее будем использовать такие понятия, как [пространство элементарных событий](Вероятностное%20пространство.md#События) ($\Omega$), [событие](Вероятностное%20пространство.md#События), [вероятность](Вероятностное%20пространство.md#Вероятность) ($P$), [условная вероятность](#Условные%20вероятности), [теорема умножения](#Условные%20вероятности). Далее будем использовать такие понятия, как [пространство элементарных событий](Вероятностное%20пространство.md#События) ($\Omega$), [событие](Вероятностное%20пространство.md#События), [вероятность](Вероятностное%20пространство.md#Вероятность) ($P$), [[#Условные вероятности|условная вероятность]], [[#Условные вероятности|теорема умножения]].
>**Конечное разбиение** (пространства $\Omega$) - система событий $B_1, B_2, \dots, B_n$ таких, что они попарно несовместимы и $B_1 + B_2 + \dots + B_n = \Omega$. >**Конечное разбиение** (пространства $\Omega$) - система событий $B_1, B_2, \dots, B_n$ таких, что они попарно несовместимы и $B_1 + B_2 + \dots + B_n = \Omega$.
@@ -25,14 +25,14 @@
>*Доказательство*. Из определения конечного разбиения следует разложения $A$ на сумму $A = A \Omega = AB_1 + AB_2 + \dots + AB_n$. События $AB_1, AB_2, \dots, AB_n$ попарно независимы. Из конечной аддитивности $P$ и теоремы умножения получаем $P(A) = \sum\limits_{k=1}^{n} P(AB_k) = \sum\limits_{k=1}^{n} P(B_k) P(A|B_k)$. $\blacksquare$ >*Доказательство*. Из определения конечного разбиения следует разложения $A$ на сумму $A = A \Omega = AB_1 + AB_2 + \dots + AB_n$. События $AB_1, AB_2, \dots, AB_n$ попарно независимы. Из конечной аддитивности $P$ и теоремы умножения получаем $P(A) = \sum\limits_{k=1}^{n} P(AB_k) = \sum\limits_{k=1}^{n} P(B_k) P(A|B_k)$. $\blacksquare$
## Формула Байеса ## Формула Байеса
Далее будем использовать такие понятия, как [событие](Вероятностное%20пространство.md#События), [конечное разбиение](#Формула%20полной%20вероятности), [вероятность](Вероятностное%20пространство.md#Вероятность) ($P$), [условная вероятность](#Условные%20вероятности), [теорема умножения](#Условные%20вероятности), [формула полной вероятности](#Формула%20полной%20вероятности). Далее будем использовать такие понятия, как [событие](Вероятностное%20пространство.md#События), [[#Формула полной вероятности|конечное разбиение]], [вероятность](Вероятностное%20пространство.md#Вероятность) ($P$), [[#Условные вероятности|условная вероятность]], [[#Условные вероятности|теорема умножения]], [[#Формула полной вероятности|формула полной вероятности]].
>***Теорема***. Пусть события $B_1, \dots, B_n$ образуют конечное разбиение $\Omega$ и все $P(B_k) > 0$. Тогда для любого события $A, P(A) > 0$, справедливы формулы $P(B_k|A) = \frac{P(B_k) P(A|B_k)}{\sum\limits_{i=1}^{n} P(B_i) P(A|B_i)}, k = 1, \dots , n$, называемые формулами Байеса. >***Теорема***. Пусть события $B_1, \dots, B_n$ образуют конечное разбиение $\Omega$ и все $P(B_k) > 0$. Тогда для любого события $A, P(A) > 0$, справедливы формулы $P(B_k|A) = \frac{P(B_k) P(A|B_k)}{\sum\limits_{i=1}^{n} P(B_i) P(A|B_i)}, k = 1, \dots , n$, называемые формулами Байеса.
> >
>*Доказательство*. По теореме умножения $P(AB_k) = P(B_k) P(A|B_k) = P(A) P(B_k|A)$. Следовательно $P(B_k|A) = \frac{P(B_k)P(A|B_k)}{P(A)}$. Применяя к знаменателю $P(A)$ формулу полной вероятности, получаем требуемое равенство. $\blacksquare$ >*Доказательство*. По теореме умножения $P(AB_k) = P(B_k) P(A|B_k) = P(A) P(B_k|A)$. Следовательно $P(B_k|A) = \frac{P(B_k)P(A|B_k)}{P(A)}$. Применяя к знаменателю $P(A)$ формулу полной вероятности, получаем требуемое равенство. $\blacksquare$
## Независимость событий ## Независимость событий
Далее будем использовать такие понятия, как [событие](Вероятностное%20пространство.md#События), [вероятность](Вероятностное%20пространство.md#Вероятность) ($P$), [условная вероятность](#Условные%20вероятности). Далее будем использовать такие понятия, как [событие](Вероятностное%20пространство.md#События), [вероятность](Вероятностное%20пространство.md#Вероятность) ($P$), [[#Условные вероятности|условная вероятность]].
>**Независимые события** ($A, B$) - события, для которых верно $P(AB) = P(A)P(B)$. >**Независимые события** ($A, B$) - события, для которых верно $P(AB) = P(A)P(B)$.
@@ -2,20 +2,20 @@
>К сожалению, данная лекция на данный момент не доведена до завершения, и в ней отсутствуют некоторые моменты. >К сожалению, данная лекция на данный момент не доведена до завершения, и в ней отсутствуют некоторые моменты.
>Недостающие материалы будут дополнены позже. >Недостающие материалы будут дополнены позже.
## Содержание ## Содержание
- [Парадигмы](#Парадигмы) - [[#Парадигмы]]
- [Императивная парадигма](#Императивная%20парадигма) - [[#Императивная парадигма]]
- [Объектно-ориентированная парадигма](#Объектно-ориентированная%20парадигма) - [[#Объектно-ориентированная парадигма]]
- [Функциональная парадигма](#Функциональная%20парадигма) - [[#Функциональная парадигма]]
- [Логическая парадигма](#Логическая%20парадигма) - [[#Логическая парадигма]]
- [Машинная модель вычислений](#Машинная%20модель%20вычислений) - [[#Машинная модель вычислений]]
- [Регистры](#Регистры) - [[#Регистры]]
- [Память](#Память) - [[#Память]]
- [Стек](#Стек) - [[#Стек]]
- [Система команд](#Система%20команд) - [[#Система команд]]
- [Способы исполнения программы](#Способы%20исполнения%20программы) - [[#Способы исполнения программы]]
- [Компиляция](#Компиляция) - [[#Компиляция]]
- [Интерпретация](#Интерпретация) - [[#Интерпретация]]
- [JIT](#JIT) - [[#JIT]]
## Парадигмы ## Парадигмы
@@ -23,10 +23,10 @@
Парадигма задает "основную единицу" программы, а также выражение потока управления, параллельно с этим работая с состоянием программы определенным образом. Каждый язык программирования использует одну или несколько парадигм. Парадигма задает "основную единицу" программы, а также выражение потока управления, параллельно с этим работая с состоянием программы определенным образом. Каждый язык программирования использует одну или несколько парадигм.
До 1957 года код писался напрямую в машинных кодах. Созданный в это время [Fortran](https://ru.wikipedia.org/wiki/Фортран) стал первым массовым языком высокого уровня, закрепив [императивный стиль](#Императивная%20парадигма). В 1958 году [Lisp](https://ru.wikipedia.org/wiki/Лисп) ввел функции как данные, а также рекурсию, что закрепило [функциональную парадигму](#Функциональная%20парадигма). До 1957 года код писался напрямую в машинных кодах. Созданный в это время [Fortran](https://ru.wikipedia.org/wiki/Фортран) стал первым массовым языком высокого уровня, закрепив [[#Императивная парадигма|императивный стиль]]. В 1958 году [Lisp](https://ru.wikipedia.org/wiki/Лисп) ввел функции как данные, а также рекурсию, что закрепило [[#Функциональная парадигма|функциональную парадигму]].
(История создания) (История создания)
При этом не стоит путать парадигмы с такими вещами, как процедурное программирование (в рамках [императивной парадигмы](#Императивная%20парадигма), с акцентом на процедурах как единицах декомпозиции), структурное программирование (в рамках [императивной парадигмы](#Императивная%20парадигма)), паттерны проектирования (типовые решения в [ООП](#Объектно-ориентированная%20парадигма)), архитектурные стили (REST, микросервисы), мультипоточность и асинхронность. При этом не стоит путать парадигмы с такими вещами, как процедурное программирование (в рамках [[#Императивная парадигма|императивной парадигмы]], с акцентом на процедурах как единицах декомпозиции), структурное программирование (в рамках [[#Императивная парадигма|императивной парадигмы]]), паттерны проектирования (типовые решения в [[#Объектно-ориентированная парадигма|ООП]]), архитектурные стили (REST, микросервисы), мультипоточность и асинхронность.
Есть пара советов, в связи с которыми можно выбрать основную парадигму для задачи. Но редко бывает, что задача решается исключительно одной парадигмой, поэтому чаще всего в проекте есть основная парадигма, а остальные используются "точечно", там где нужно. Есть пара советов, в связи с которыми можно выбрать основную парадигму для задачи. Но редко бывает, что задача решается исключительно одной парадигмой, поэтому чаще всего в проекте есть основная парадигма, а остальные используются "точечно", там где нужно.
@@ -1,24 +1,24 @@
## Содержание ## Содержание
- [Формальные грамматики](#Формальные%20грамматики) - [[#Формальные грамматики]]
- [Основы](#Основы) - [[#Основы]]
- [Форма Бэкуса-Наура](#Форма%20Бэкуса-Наура) - [[#Форма Бэкуса-Наура]]
- [Пример вывода строки](#Пример%20вывода%20строки) - [[#Пример вывода строки]]
- [Спецификация языка](#Спецификация%20языка) - [[#Спецификация языка]]
- [Теория автоматов](#Теория%20автоматов) - [[#Теория автоматов]]
- [История](#История) - [[#История]]
- [Иерархия Хомского](#Иерархия%20Хомского) - [[#Иерархия Хомского]]
- [Конечный автомат](#Конечный%20автомат) - [[#Конечный автомат]]
- [ДКА и НКА](#ДКА%20и%20НКА) - [#ДКА и НКА]]
- [Регулярные выражения и автоматы](#Регулярные%20выражения%20и%20автоматы) - [[#Регулярные выражения и автоматы]]
- [Построение Томпсона](#Построение%20Томпсона) - [[#Построение Томпсона]]
- [Минимизация](#Минимизация) - [[#Минимизация]]
- [Границы конечных автоматов](#Границы%20конечных%20автоматов) - [[#Границы конечных автоматов]]
- [Формы представления конечного автомата](#Формы%20представления%20конечного%20автомата) - [[#Формы представления конечного автомата]]
- [Примеры конечных автоматов](#Примеры%20конечных%20автоматов) - [[#Примеры конечных автоматов]]
- [Автомат для идентификаторов](#Автомат%20для%20идентификаторов) - [[#Автомат для идентификаторов]]
- [Автомат для комментариев](#Автомат%20для%20комментариев) - [[#Автомат для комментариев]]
- [Автомат для регулярного выражения](#Автомат%20для%20регулярного%20выражения) - [[#Автомат для регулярного выражения]]
- [Автомат для четного числа символов "a"](#Автомат%20для%20четного%20числа%20символов%20"a") - [[#Автомат для четного числа символов "a"]]
## Формальные грамматики ## Формальные грамматики
@@ -98,20 +98,20 @@
<block> ::= "{" <statement>* "}" <block> ::= "{" <statement>* "}"
``` ```
Про звезду * в последней строке после `<statement>` поговорим [чуть позже](#Построение%20Томпсона). Про звезду * в последней строке после `<statement>` поговорим [[#Построение Томпсона|чуть позже]].
В примере видно, что `<statement>` ссылается сам на себя, используя для этого `<if-statement>` и `<block>`. Такая рекурсивная вложенность в грамматике и делает синтаксис язык [контекстно-свободным, а не регулярным](#Иерархия%20Хомского). В примере видно, что `<statement>` ссылается сам на себя, используя для этого `<if-statement>` и `<block>`. Такая рекурсивная вложенность в грамматике и делает синтаксис язык [[#Иерархия Хомского|контекстно-свободным, а не регулярным]].
## Теория автоматов ## Теория автоматов
### История ### История
Изначально, теория автоматов родилась не из программирования, а из вопроса "что вообще значит вычислять?". Программирование появилось позже, как массовая практика, и унаследовало уже готовый аппарат. Изначально, теория автоматов родилась не из программирования, а из вопроса "что вообще значит вычислять?". Программирование появилось позже, как массовая практика, и унаследовало уже готовый аппарат.
В самом начале, в 1943 году, [Уоррен Маккаллок](https://ru.wikipedia.org/wiki/Мак-Каллок,_Уоррен) и [Уолтер Питтс](https://ru.wikipedia.org/wiki/Питтс,_Уолтер) создали [формальную модель нейрона](https://ru.wikipedia.org/wiki/Искусственный_нейрон), которая по своей сути является переключательным автоматом. В 1950-ых годах [Стивен Клини](https://ru.wikipedia.org/wiki/Клини,_Стивен_Коул) вывел [связь регулярных выражений и конечных автоматов](#Регулярные%20выражения%20и%20автоматы). В 1956 году [Ноам Хомский](https://ru.wikipedia.org/wiki/Хомский,_Ноам) предложил [иерархию формальных грамматик](#Иерархия%20Хомского). В 1959 году [Михаэль Рабин](https://ru.wikipedia.org/wiki/Рабин,_Михаэль) и [Дана Скотт](https://ru.wikipedia.org/wiki/Скотт,_Дана) дали [строгое определение НКА](#ДКА%20и%20НКА), а также доказали его эквивалентность с ДКА. В самом начале, в 1943 году, [Уоррен Маккаллок](https://ru.wikipedia.org/wiki/Мак-Каллок,_Уоррен) и [Уолтер Питтс](https://ru.wikipedia.org/wiki/Питтс,_Уолтер) создали [формальную модель нейрона](https://ru.wikipedia.org/wiki/Искусственный_нейрон), которая по своей сути является переключательным автоматом. В 1950-ых годах [Стивен Клини](https://ru.wikipedia.org/wiki/Клини,_Стивен_Коул) вывел [[#Регулярные выражения и автоматы|связь регулярных выражений и конечных автоматов]]. В 1956 году [Ноам Хомский](https://ru.wikipedia.org/wiki/Хомский,_Ноам) предложил [[#Иерархия Хомского|иерархию формальных грамматик]]. В 1959 году [Михаэль Рабин](https://ru.wikipedia.org/wiki/Рабин,_Михаэль) и [Дана Скотт](https://ru.wikipedia.org/wiki/Скотт,_Дана) дали [[#ДКА и НКА|строгое определение НКА]], а также доказали его эквивалентность с ДКА.
### Иерархия Хомского ### Иерархия Хомского
В своей теории Хомский делит грамматику языка на четыре типа - от 3 до 0. Чем ниже номер типа, тем мощнее грамматика и тем сложнее устройство, нужное для распознавания. В своей теории Хомский делит грамматику языка на четыре типа - от 3 до 0. Чем ниже номер типа, тем мощнее грамматика и тем сложнее устройство, нужное для распознавания.
Тип 3 - **регулярные** грамматики. Примерами языка с такой грамматикой будут являться различные идентификаторы или числа. Для распознавания такой грамматики в основном используется [конечный автомат](#Конечный%20автомат). Тип 3 - **регулярные** грамматики. Примерами языка с такой грамматикой будут являться различные идентификаторы или числа. Для распознавания такой грамматики в основном используется [[#Конечный автомат|конечный автомат]].
Тип 2 - **контекстно-свободные** грамматики. Примером языка с такой грамматикой может быть синтаксис любого языка программирования. Для распознавания такой грамматики используется [автомат с магазинной памятью](https://ru.wikipedia.org/wiki/Автомат_с_магазинной_памятью). Тип 2 - **контекстно-свободные** грамматики. Примером языка с такой грамматикой может быть синтаксис любого языка программирования. Для распознавания такой грамматики используется [автомат с магазинной памятью](https://ru.wikipedia.org/wiki/Автомат_с_магазинной_памятью).
@@ -124,7 +124,7 @@
Строка принимается автоматом, если, начав в $q_0$ и применяя $\delta$ символ за символом, автомат оказывается в одном из состояний $F$. Строка принимается автоматом, если, начав в $q_0$ и применяя $\delta$ символ за символом, автомат оказывается в одном из состояний $F$.
Такие автоматы можно встретить в лексическом анализе (разбивает текст программы на токены), сетевых протоколах (разбирает TCP-состояние, парсит [HTTP-заголовки](../Веб-программирование/Общие%20стандарты%20и%20протоколы%20сети%20Интернет.md#Заголовки%20HTTP)), играх (поведение NPC), [регулярных выражениях](#Регулярные%20выражения%20и%20автоматы) и схемотехнике (сам по себе конечный автомат является стандартной моделью цифровых схем управления). Такие автоматы можно встретить в лексическом анализе (разбивает текст программы на токены), сетевых протоколах (разбирает TCP-состояние, парсит [HTTP-заголовки](../Веб-программирование/Общие%20стандарты%20и%20протоколы%20сети%20Интернет.md#Заголовки%20HTTP)), играх (поведение NPC), [[#Регулярные выражения и автоматы|регулярных выражениях]] и схемотехнике (сам по себе конечный автомат является стандартной моделью цифровых схем управления).
#### ДКА и НКА #### ДКА и НКА
>**Детерминированный конечный автомат** (ДКА) - конечный автомат, в котором существует ровно один возможный переход из определенного состояния по данному символу. >**Детерминированный конечный автомат** (ДКА) - конечный автомат, в котором существует ровно один возможный переход из определенного состояния по данному символу.
@@ -153,7 +153,7 @@
Именно по такому алгоритму работает большинство движков для регулярных выражений в стандартных библиотеках языков программирования. Именно по такому алгоритму работает большинство движков для регулярных выражений в стандартных библиотеках языков программирования.
#### Минимизация #### Минимизация
[Построение Томпсона](#Построение%20Томпсона) очень хорошо работает для построения автомата, но обычно дает автомат с избыточным числом состояний. Именно поэтому существуют методы минимизации полученного конечного автомата. [[#Построение Томпсона]] очень хорошо работает для построения автомата, но обычно дает автомат с избыточным числом состояний. Именно поэтому существуют методы минимизации полученного конечного автомата.
>**Теорема Майхилла-Нероуда** - для каждого регулярного языка существует единственный минимальный ДКА. >**Теорема Майхилла-Нероуда** - для каждого регулярного языка существует единственный минимальный ДКА.
@@ -170,7 +170,7 @@
Формально такую ограниченность конечных автоматов можно доказать через [лемму о накачке](https://en.wikipedia.org/wiki/Pumping_lemma_for_regular_languages). Формально такую ограниченность конечных автоматов можно доказать через [лемму о накачке](https://en.wikipedia.org/wiki/Pumping_lemma_for_regular_languages).
Почти в любом языке программирования синтаксис представляет собой [контекстно-свободный, а не регулярный](#Иерархия%20Хомского) язык. Поэтому лексер (конечный автомат) сам по себе не может разобрать структуру программы целиком, для этого ему нужен парсер с дополнительной памятью (стеком). Почти в любом языке программирования синтаксис представляет собой [[#Иерархия Хомского|контекстно-свободный, а не регулярный]] язык. Поэтому лексер (конечный автомат) сам по себе не может разобрать структуру программы целиком, для этого ему нужен парсер с дополнительной памятью (стеком).
#### Формы представления конечного автомата #### Формы представления конечного автомата
Конечный автомат можно описать в виде пять разных форм. Конечный автомат можно описать в виде пять разных форм.