Похожие презентации:
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 – структурная парадигма с элементами ООП и ФП, динамическитипизируемый язык, управляемый со сборкой мусора и с элементами типизации
Программирование