Развитие языков программирования
Машинный код
Ассемблер
Алгоритмические языки
Два способа трансляции
Плюсы и минусы ЯВУ
Fortran
Структурное программирование
Парадигмы программирования
Функциональный подход
Функции высокого порядка (Higher order functions)
Функциональные языки: LISP
Преимущества программирования чистыми функциями
Недостатки ФП
ФП в C#
Рефакторинг по ФП
Логическое программирование
Языки логического программирования: Prolog
Процедурные языки
Pascal (1970)
Си (1972)
Структурное программирование
Инструменты структурного языка
Объектно-ориентированное программирование
Объекты
Классы
Атрибуты
Объектно-ориентированный анализ и проектирование
Концептуальные классы – анализ
Программные классы - точка зрения реализации
Объектно-ориентированное программирование
Современные языки - мультипарадигменные
Современные языки - мультипарадигменные
4.72M
Category: programmingprogramming

1_Развитие_языков_программирования

1. Развитие языков программирования

2. Машинный код

Язык логических нулей и единиц. Запись на этом языке была очень
сложной и утомительной.

3. Ассемблер

• Создан в конце 40-х
• Вместо двоичных цифр, обозначающих какую-то команду, писались короткие слова или
аббревиатура. Сложно, зависит от платформы, но эффективно.

4. Алгоритмические языки

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

5. Два способа трансляции

• Компиляция (Compilation) инструкции программы
выполняются лишь тогда, когда
собран перевод всего текста
программы.
• Интерпретация (Interpretation) инструкции программы
переводятся и сразу выполняются.

6. Плюсы и минусы ЯВУ

• Относительная простота написания,
• Удобная читаемость,
• Возможности ее коррекции.
• Однако при этом очевидны и недостатки:
дополнительное время и память на трансляцию.

7. Fortran

• В 1956 появился Fortran (от англ. FORmula TRANslator – Переводчик формул).
• Легко понимаемый в коротких программах, этот язык становился
нечитаемым, когда дело касалось больших программ.

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

Проблема решилась после изобретения языков структурного
программирования :
• появились программные блоки
• независимые подпрограммы
• поддержка рекурсии и локальных переменных
• отсутствие оператора безусловного перехода (GoTo)
• И другие возможности разбиения программы на составляющие
элементы.

9. Парадигмы программирования

10. Функциональный подход

• Функция принимает на вход аргументы и выдает результат без
сторонних эффектов (purity)
• Программа представляет собой набор функций, применяемых к
начальным данным, позволяющий декларативно получить
требуемый результат (LISP). Код программы на аппликативном
языке может быть записан следующим образом:
function1(function2(function3(beginning_date)));

11.

12. Функции высокого порядка (Higher order functions)

13. Функциональные языки: LISP

14. Преимущества программирования чистыми функциями

• Чистые функции облегчают чтение и отладку кода, т.к. их
единственная цель - явно сообщить, как именно
преобразовываются данные
• Облегчение тестирования, т.к. они не содержат внешних
зависимостей => не надо их создавать и подделывать (mocking)
• Сигнатуры чистых функций всегда более понятны, т.к. дают
название цели метода – перевод аргументов в результат
• Естественная поддержка параллельности, т.к. отсутствуют
разделяемые данные

15. Недостатки ФП

• Создавать маленькие блоки – функции просто, но сложно
выстраивать их в конвейеры для больших систем
• В реальных системах требуется изменение состояний => нужно
больше функционального кода
• Операции ввода-вывода требуют impurity, но их можно скрыть за
нижним слоем функций

16. ФП в C#

https://gamedevacademy.org/c-functional-programming-tutorialcomplete-guide/

17. Рефакторинг по ФП

18.

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

• Языки системы правил, называемые также языками логического
программирования (Prolog), основываются на определении набора
правил, при выполнении которых возможно выполнение определенных
действий.
• Правила могут задаваться в виде утверждений и в виде таблиц
решений.
• Код программы на языке системы правил может быть записан
следующим образом:
if condition1 then operator1;
if condition2 then operator2;
if condition3 then operator3;

20. Языки логического программирования: Prolog

21. Процедурные языки

• Процедурные языки представляют собой последовательность
выполняемых операторов. К процедурным языкам относятся
FORTRAN, C, Pascal, С++ и некоторые другие.
• Код программы на процедурном языке может быть записан
следующим образом:
оperator1; operator2; operator3;

22. Pascal (1970)

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

23. Си (1972)

• Керниган и Ритчи создали для начала работы над Unix
• Похож на высокоуровневый ассемблер
• Породил множество производных языков

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

• Решение задачи разбивается на решение подзадач
• Задача не решена до тех пор, пока не решены ее
подзадачи
• Одинаковые подзадачи встречаются в разных
местах программы
• Подзадачи принимают на вход данные и их
преобразуют
• Подзадачи – кирпичики, данные - бетон

25.

26. Инструменты структурного языка

27.

28.

29.

Структурное программирование - нисходящее проектирование (Top-down)
Начальный модуль разбивается по нескольким маленьким
От общего к частному
Совокупность модулей и функций выстраивается вокруг задачи (меньше кода)
ООП - восходящее проектирование (Bottom-up)
Итоговый модуль собирается из уже готовых маленьких
От частного к общему
Приоритет - автономность каждого кусочка и
простота его встраивания
Больше кода, но высокая переиспользуемость

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

31.

32. Объекты

Всё вокруг можно рассматривать, как объекты
Объект обладает своей:
обязанностью
поведением
состоянием
Сообщения могут менять состояния объектов

33. Классы

• Определяют общие черты и поведение семейства объектов
• Каждый объект можно создать только по “чертежу” - классу

34. Атрибуты

Это свойства, отличающие одни объекты от других
Можно определить на этапе анализа:
Тип
Значение по умолчанию
Распределение значений
Множественность

35. Объектно-ориентированный анализ и проектирование

• На вход подаются идеи на естественном языке
• Системные аналитики совместно с клиентом формулируют
системные требования: функциональные и нефункциональные
• Архитектор распределяет по текстовым требованиям обязанности
по концептуальным классам
• Программисты реализуют концептуальный дизайн системы с
помощью программных классов и паттернов проектирования

36.

37. Концептуальные классы – анализ

38. Программные классы - точка зрения реализации

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

• Абстракция - придание объекту характеристик, которые чётко
определяют его границы, отличая от всех других объектов. Основная
идея состоит в том, чтобы отделить способ использования составных
объектов данных от деталей их реализации в виде более простых
объектов.
• Инкапсуляция - объединение данных и методов (функций) в классе с
целью сокрытия данных объекта от остальной программы и
обеспечения целостности и независимости объекта (изменять
свойства объекта можно только через специальные методы)
• Наследование - механизм языка, позволяющий описать новый класс
на основе уже существующего класса с добавлением новых свойств и
методов.
• Полиморфизм - свойство системы использовать объекты с
одинаковым интерфейсом без информации о типе и внутренней
структуре объекта.

40.

41.

42. Современные языки - мультипарадигменные

• C# - строго-типизированный, управляемый со сборкой мусора
ООП язык с элементами ФП.
• Также поддерживает динамическую типизацию для связи с
динамическими языками (тип dynamic)

43. Современные языки - мультипарадигменные

Python – структурная парадигма с элементами ООП и ФП, динамически
типизируемый язык, управляемый со сборкой мусора и с элементами типизации
English     Русский Rules