This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Некоторые трудности при обучении программированию:
что нельзя обойти и умолчать…
Незнанов Алексей Андреевич, доцент департамента анализа данных и искусственного интеллекта факультета компьютерных наук НИУ ВШЭ
Максименкова Ольга Вениаминовна, старший преподаватель департамента программной инженерии факультета компьютерных наук НИУ ВШЭ
Система [system] – такое объединение множества элементов некоторыми связями, у которого появляются свойства, отсутствующие у любого элемента по отдельности
• Системный подход – подход к моделированию, акцентирующий внимание на выявлении систем и их взаимодействий
• Основа развития современных технологий!
• Иерархия систем• Надсистемы и подсистемы
• Синергия и эмерджентность!• Система интегративные свойства и системные свойства• Система состав и структура• Система поведение и взаимодействие с другими системами• Система иерархия (стратификация и классификация подсистем и
надсистем)• Система антагонистические свойства (диалектика)
Интерфейс [interface] (inter – внешнее, между + face – лицо, фасад, если inter – между, то смысл хорошо передаёт юмористический
перевод – «междумордие»):
• В широком смысле – формальное или неформальное определение связи в тройке «сущность1 – связь – сущность2» [entity1 – relationship – entity2]
• Часть системы, открытая для других систем, внешнее восприятие системы
• Система связей с унифицированными сигналами и/или аппаратурой, предназначенная для обмена материей/информацией между техническими устройствами и/или людьми
Обычно из контекста ясно, о каком значении термина идёт речь
Система 2
Система 1
Интерфейс
системы 1
Интерфейс
системы 2
Внешняя часть
системы
(неотъемлемая! )
Система 2
Система 1
Интерфейс
взаимодействия
Система связей +
протокол
Случай 1: Случай 2:
Протокол
• Протокол (протокол взаимодействия) [protocol] – формально описанный способ взаимодействия двух и более субъектов (систем! посредством их интерфейсов!) для их совместной деятельности с учётом контекста
• Естественно, протокол использует интерфейсы!
• Стек протоколов – иерархически организованный набор протоколов взаимодействия определённых систем в соответствии с выбранными уровнями абстракции
• Примеры: стек сетевых протоколов, стек протоколов доступа к данным во внешней памяти, …
• Всегда можно говорить и о стеке соответствующих интерфейсов, это просто не принято
Алгоритм как сущность. Определения и основные свойства
• Алгоритм [algorithm] – чётко описанная последовательность элементарных действий исполнителя над исходными данными для достижения предварительно сформулированного результата
• В программировании: • Исполнитель [executor, actor] – средства вычислительной техники (компьютер)
• Данные [data] – любая информация, представленная в форме, пригодной для хранения, передачи и обработки средствами вычислительной техники
• На самом деле вопрос «что такое алгоритм?» очень глубок:• Что мы хотим от формального определения алгоритма• Сравнение различных исполнителей алгоритмов и их классификация• Модели вычислений и аксиоматический подход• Формализация входа и выхода алгоритма• Связь формализации алгоритма с теорией групп и теорией категорий• Конечность алгоритма и алгоритмическая разрешимость • Массовость алгоритмов• Понятие корректности алгоритма• Параллельные, распределённые, квантовые алгоритмы
• Yuri Gurevich – Introduction to Algorithms and Computational Complexity, 2 of 3: What Is An Algorithm?(http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Yuri-Gurevich-Introduction-to-Algorithms-and-Computational-Complexity-2-of-n)
• Программа [program] – формальная запись алгоритма и обрабатываемых им данных на некотором формальном языке для некоторого класса исполнителей
• Глубокое понимание программирования как создания программы требует понимания теории формальных языков и теории трансляции
• Но «на пальцах» можно объяснить это через рассмотрение различных представлений «исходного кода» на языках программирования различного уровня – от Ассемблера до СиПлюсПлюса и ЯвыСкрипта
• Исходный код [source code] – текст компьютерной программы на языке программирования, который может быть прочтён человеком
Русскоязычная терминология, связанная с частями исходного кода
• Больше половины переводов трудов по программированию на русский – «отстой» с точки зрения качества терминологии
• Точно определена терминологическую систему целиком и нет необоснованных отступлений от неё
• Как минимум точно введены: оператор, операция, предложение, выражение, команда, инструкция
• При ссылке на источник → Указана используемая терминологическая система
• «Оператор» и «выражение» → Выражение может являться частью оператора (отношение «содержит» или «часть-целое»)
• «Оператор» и «управляющая конструкция» → Управляющая конструкция является оператором, но есть и другие виды операторов(отношение «обобщения» или «это есть»)
• Фраза [phrase] – любая последовательность лексем, являющаяся правильной (валидной), то есть удовлетворяющая синтаксическим и семантическим правилам языка программирования
• Выражение [expression] – фраза на языке программирования, предназначенная для выполнения вычислений, которые позволяют получить некоторый результат, называемый значением выражения
• Выражение состоит из операндов (переменных, констант и др.), объединенных знаками операций. Вызов подпрограммы как функции тоже можно считать операцией
• В зависимости от типа результата выражения могут быть арифметическими (возвращающими число), логическими (логическое значение), символьными (строку символов) и др.
• ‼ Выражение нужно для получения своего значения!
• Оператор [statement, operator] – фраза на языке программирования, определяющая законченный этап обработки данных. В состав операторов входят ключевые слова, данные, выражения и др. Различают:
1. Атомарные операторы, никакая часть которых не является самостоятельным оператором 2. Структурные операторы, объединяющие набор операторов в единый (укрупненный)
оператор
• Конструкция (управляющая конструкция) [construction, structure] – структурный оператор, предназначенный для управления ходом выполнения программы
• Переменная [variable] – именованный элемент данных, значение которого может изменяться
• Имя [name] переменной – правильный идентификатор языка программирования, однозначно определяющий переменную
• Значение [value] переменной – значение элемента данных, который идентифицируется именем переменной
• Переменная содержит некоторое значение, само по себе «значение» – базовое неопределяемое понятие
• Тип [type] переменной – тип данных, которые могут храниться в переменной
• Адрес [address] переменной – адрес начала участка памяти, занимаемого значением переменной
• В случае динамического распределения памяти среди всех возможных адресов выделяют специальный адрес, указывающий на отсутствие значения переменной. В языке C++ таким значением является NULL.
• Чтобы лучше понять разницу между значениями l-value и r-value, рассмотрим следующий пример из MSDN:
1. // lvalues_and_rvalues1.cpp
2. // compile with: /EHsc
3. #include <iostream>
4. using namespace std;
5. int main()
6. {
7. int x = 3 + 4;
8. cout << x << endl;
9. }
• В этом примере x — l-value, поскольку оно продолжает существовать за пределами выражения, в котором оно определено
• Выражение 3 + 4 (со значением, равным 7) — r-value, поскольку оно возвращает временное значение, которое не сохраняется за пределами выражения, в котором оно определено