Основы программирование
Императивное программирование
это парадигма основfнная на составлении алгоритма действий которые изменяют состояние программы.
Фактически, программа на этих языках — это код, который выполняется компьютером сразу, без предварительной компиляции
Декларативное программирование
это парадигма программирования, в которой задается спецификация решения задач описывается что представляет собой проблема и ожидаемый результат но без описания способа достижения этого результата.
Структурное программирование
Согласно принципу модульности программа разбивается на отдельные смысловые части (модули).
Модуль – это функционально законченная часть программы. Например, модуль вычисления
Использование при разработке модуля композиции трех базовых структур
- Линейной
- Ветвления
- Циклической
Структурное программирование называют программированием без GOTO.
Функциональное программирование
Команды можно собирать в подпрограммы, но их последовательность не имеет значения. Нет разницы, в каком порядке вы напишете подпрограммы — это же просто правила, а правила применяются тогда, когда нужно, а не когда про них сказали.
Логическое программирование
- парадигма программирования, а также раздел дискретной математики изучающий методы и возможности этой парадигмы, основанная на выводе новых фактов из данных фактов согласно заданным логическим правилам.
- Логическое программирование возникло как упрощение функционального программирования для математиков и лингвистов, решающих задачи символьной обработки.
Объектно-ориентированное программирование
Объект – это экземплар какого-то класса
Класс – это шаблон, в котором описаны все свойства будущего объекта и его метода
При этом если класс воздушного шарика определяет свойство цвет, то сам класс никакого значения цвета не имеет. Но экземпляры этого класса, которых, к слову, можно создавать сколько угодно, уже будут раскрашены в любые цвета
Прототипно-ориентированное программирование
стиль объектно-ориентированного программирования, при котором отсутствует понятие класса, а наследование производится путём клонирования существующего экземпляра объекта — прототипа. Каноническим примером прототип-ориентированного языка является язык Self.
Алгоритм
– это точное и понятное предписание (указание) исполнителю совершить определенную последовательность действий, направленных на достижение указанной цели или решение поставленной задачи.
Свойства алгоритмов
- Дискретность
- Понятеость (определенность)
- Однозначность (детерминированность)
- Массовость
- Результативность (конечность)
- Правильность
Виды алгоритмов
- Линейный – все действаия выполняются в строгой последовательности (приготовление пирога)
- Разветвляющийся – действия выполняются в зависимости от выполнения или не выполнения условия(переход улицы по светофору)
- Циклический – содержит повторяющиеся действия(колоть дрова)
Условные графические обозначения символов

Простые типы
У переменной простого типа под ключевым словом скрывается одно значение (зачастую читаемое как число) и к нему есть прямой доступ. Наиболее известные простые типы это:
- целое число со знаком,
- целое число без знака,
- дробное число (с запятой),
- символ,
- логическое значение.
В различных языках они могут немного отличаться.
Луп нахождения стороны

Луп кадратного уравнения
Funktsioonid
print()— вывод информации
sqrt() — извлечение квадратного корня из числа
from math import *
str() — тип данных для текстовой информации
if — если условие выполняется то
else — если условие не выполнилось то
for — цикл с шагом
while — цикл с условием
while True — повторять цикл вечно
try — попробовать выполнить команду
except — в случае провала попытки
.lower() — сделать все буквы маленькими
.upper() — сделать все буквы большими
.islower() — проверить являются ли буквы маленькими
.isupper() — проверить являются ли буквы большими
range() — в радиусе между a цифрой и b цифрой с каким-то шагом (если не изменять шаг то он будет 1)

Разработка программного обеспечения
Этапы разработки ПО
1. Описание потребностей и их анализ
2. Дизайн программного продукта
3. Разработка
4. Проверка
5. Выпуск и внедрение продукта
6. Обслуживание продукта
Модели жизненного цикла ПО
Waterfall (каскадная модель)
Итерационная, спиральная и инкрементная модели
Спиральная и инкрементная модели
Agile
Waterfall
Основная суть модели Waterfall в том, что этапы зависят друг от друга и следующий начинается, когда закончен предыдущий, образуя таким образом поступательное (каскадное) движение вперед.

Минусы и плюсы
— Очень много документов
— Иллюзия безопасности и ложные впечатления
— Пользователя и заказчика полностью изолируют
— Все требования должны быть сразу известны
— Waterfall тестирование происходит только в самом конце
+ Устойчива к обновлению кадров
+ Дисциплинирует
+ Гибкая на ранних этапах
+ Прозрачна
Итерационная, спиральная и инкрементная модели
Предполагает разбиение проекта на части (этапы, итерации) и прохождение этапов жизненного цикла на каждом их них. Каждый этап является законченным сам по себе, совокупность этапов формирует конечный результат.
На каждой итерации мы работали с одним и тем же продуктом и в конце каждой итерации получали результат, которым можно пользоваться (естественно, с определенными ограничениями).
С каждым этапом разработка приближается к конечному желаемому результату или уточняются требования к результату по ходу разработки, и соответственно в любой момент текущая итерация может оказаться последней или очередной на пути к завершению.

Плюсы и минусы
+ Затраты
+ Легче получить отзывы от клиента о проделанной работе
+ У клиента имеется возможность быстро получить и освоить созданное программное обеспечение
— Прогресс не очень хорошо прослеживаемый
— Структура системы имеет тенденцию к ухудшению при добавлении новых компонентов (частей)
Спиральная и инкрементная модели
Все этапы жизненного цикла при спиральной модели идут витками, на каждом из которых происходят проектирование, кодирование, дизайн, тестирование и т. д. Такой процесс отображает суть названия: поднимаясь, проходится один виток (цикл) спирали для достижения конечного результата. Причем не обязательно, что один и тот же набор процессов будет повторятся от витка к витку. Но результаты каждого из витков ведут к главной цели.

Плюсы
- наличие действий по анализу рисков, что обеспечивает их сокращение и заблаговременное определение непреодолимых рисков;
- обеспечение разбиения большого потенциального объема работ по выполнению проекта на небольшие части;
- первоочередность реализации решающих функций с высокой степенью риска, что позволяет при необходимости остановить работы над проектом на ранних циклах модели и уменьшить расходы;
- возможность гибкого проектирования, основанная на преимуществах каскадной модели при одновременном разрешении итераций;
- реализация преимуществ инкрементной модели (выпуск инкрементов, сокращение графика работ, неизменяемость ресурсов при постепенном росте системы);
- реализация связи с пользователем с высокой частотой и на ранних этапах модели, что обеспечивает создание нужного продукта высокого качества;
- возможность оценки системы пользователем на ранних этапах, за счет использования в жизненном цикле разработки ускоренного прототипирования;
- возможность пользователям принимать участие при планировании, анализе рисков, проектировании, разработке, выполнении оценочных действий;
- усовершенствование административного управления процессами жизненного цикла разработки, затратами, соблюдением графика и кадровым обеспечением, что достигается путем выполнения анализа (обзора) в конце каждой итерации;
- повышение производительности за счет использования пригодных для повторного использования результатов;
- повышение вероятности предсказуемого поведения системы с помощью уточнения поставленных целей;
- отсутствие необходимости в предварительном распределении всех нужных для выполнения проекта финансовых ресурсов;
- возможность регулярной оценки совокупных затрат, что в результате приводит к их общему сокращению.
Минусы - высокая стоимость модели за счет стоимости и дополнительных временных затрат на планирование, определение целей, выполнение анализа рисков и прототипирование при прохождении каждого цикла спирали;
- неоправданно высокая стоимость модели для проектов, имеющих низкую степень риска или небольшие размеры;
- усложненность структуры модели, что приводит к сложности ее использования разработчиками, менеджерами и заказчиками;
- необходимость в высокопрофессиональных знаниях для оценки рисков;
- возможность отдаления окончания работы над проектом в связи с желанием заказчика улучшать каждую созданную версию;
- необходимость в обработке дополнительной документации за счет большого количества промежуточных циклов;
- необходимость в четком распределении работ между разработчиками;
- сложность определения критериев для продолжения процесса разработки на следующей итерации;
- необходимость мощных инструментальных средств и методов прототипирования
Agile
Набор принципов гибкой разработки (всего их 12) и идей. Основные идеи Agile:
люди и взаимодействие важнее процессов и инструментов;
работающий продукт важнее исчерпывающей документации;
сотрудничество с заказчиком важнее согласования условий контракта;
готовность к изменениям важнее следования первоначальному плану.

Плюсы и минусы
+ тестирование на ранних стадиях
+ возможность оценки добавленного функционала “в действии”
+ исследование пользовательского опыта на всех этапах
+ возможность быстрой презентации на рынке “сырой”, но работающей версии
— отсутствие четкого плана развития проекта
— постоянная угроза переделывания большой части работы
— снижение качества продукта в угоду скорости и упрощения
Виды ошибок
Логические — работает, но результат может быть не тем
Сентакасические — выдает ошибку и не позволяет выдать результат
Семантические — неправильные объявление переменной (int a1=1, int a1=2)