Synopsis

Основы программирование

Императивное программирование

это парадигма основfнная на составлении алгоритма действий которые изменяют состояние программы.

Фактически, программа на этих языках — это код, который выполняется компьютером сразу, без предварительной компиляции

Декларативное программирование

это парадигма программирования, в которой задается спецификация решения задач описывается что представляет собой проблема и ожидаемый результат но без описания способа достижения этого результата.

Структурное программирование

Согласно принципу модульности программа разбивается на отдельные смысловые части (модули).
Модуль – это функционально законченная часть программы. Например, модуль вычисления

Использование при разработке модуля композиции трех базовых структур

  • Линейной
  • Ветвления
  • Циклической

Структурное программирование называют программированием без GOTO.

Функциональное программирование

Команды можно собирать в подпрограммы, но их последовательность не имеет значения. Нет разницы, в каком порядке вы напишете подпрограммы — это же просто правила, а правила применяются тогда, когда нужно, а не когда про них сказали.

Логическое программирование

  • парадигма программирования, а также раздел дискретной математики изучающий методы и возможности этой парадигмы, основанная на выводе новых фактов из данных фактов согласно заданным логическим правилам.
  • Логическое программирование возникло как упрощение функционального программирования для математиков и лингвистов, решающих задачи символьной обработки.

Объектно-ориентированное программирование

Объект – это экземплар какого-то класса

Класс – это шаблон, в котором описаны все свойства будущего объекта и его метода

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

Прототипно-ориентированное программирование

стиль объектно-ориентированного программирования, при котором отсутствует понятие класса, а наследование производится путём клонирования существующего экземпляра объекта — прототипа. Каноническим примером прототип-ориентированного языка является язык Self.

Алгоритм

– это точное и понятное предписание (указание) исполнителю совершить определенную последовательность действий, направленных на достижение указанной цели или решение поставленной задачи.

Свойства алгоритмов

  1. Дискретность
  2. Понятеость (определенность)
  3. Однозначность (детерминированность)
  4. Массовость
  5. Результативность (конечность)
  6. Правильность

Виды алгоритмов

  • Линейный – все действаия выполняются в строгой последовательности (приготовление пирога)
  • Разветвляющийся – действия выполняются в зависимости от выполнения или не выполнения условия(переход улицы по светофору)
  • Циклический – содержит повторяющиеся действия(колоть дрова)

Условные графические обозначения символов

Простые типы

У переменной простого типа под ключевым словом скрывается одно значение (зачастую читаемое как число)  и к нему есть прямой доступ. Наиболее известные простые типы это:

  • целое число со знаком,
  • целое число без знака,
  • дробное число (с запятой),
  • символ,
  • логическое значение.

В различных языках они могут немного отличаться.

Луп нахождения стороны

Луп кадратного уравнения

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)