Центр информатизации образования
Задача Освещение города
Задача размещения базовых станций (3D оптимизация) Проект проводился нашими выпускниками в компании Motorola. Цели: При данном числе станций, заданном рельефе и т.д., определить максимальное возможное покрытие. Минимизация числа станций при заданном покрытии. В результате были разработаны инструменты.
Сайт: Дистанционный Конкурс-игра «КИО» (Конструируй, Исследуй, Оптимизируй) Каждый год, конец февраля – начало марта Задания двух уровней: – I уровень до 7 класса включительно, – II уровень 8–11 классы, студенты колледжей, техникумов и младших курсов университетов. 3 задачи, для решения которых нужно проявить изобретательность и смекалку. Для работы с задачами выдаётся специальное программное обеспечение. Каждая задача допускает много разных решений, а участники сравниваются по тому, насколько их решение оптимальнее решений других участников.
Разнообразие языков программирования Уже создано > 8500 языков программирования и каждый год появляются новые. Некоторыми языками умеет пользоваться только небольшое число их собственных разработчиков, другие становятся известны миллионам людей. Профессиональные программисты иногда применяют в своей работе более десятка разнообразных языков программирования.
Парадигмы программирования Архитектура машины, ассемблер Формула-ориентированные (FORTRAN) Процедурное, структурное программирование Объектно-ориентированное программирование Языково-ориентированное программирование Настоящее время
Парадигмы программирования Машинный код, ассемблер, ориентация на архитектуру вычислительной машины Компиляция формул (FORTRAN), вычисления Процедурное, структурное программирование Объектно-ориентированное программирование Языково-ориентированное программирование Компьютера Человека Удобно для … Естественно для …
Программист как преобразователь контекста
Классификация ПОЯ ПОЯ могут быть: графическими (процесс программирования – «рисование» схемы в специальном редакторе); текстовыми (программирование – составление текста на некотором формальном языке). Кроме того, ПОЯ можно разделить на: статические – языки, в которых не важно, в каком порядке программист рисует элементы схемы или составляет текст программы; динамические – имеет значение порядок действий (например, в Geometer's Sketchpad последовательность геометрического построения задаёт алгоритм).
Geometers Sketchpad
При создании ПОЯ нужно разработать не только сам язык, но и среду программирования (IDE), удобный редактор кода, отладчик, профилировщик и т.д. Тут возможно несколько подходов.
Создатели языков по-разному толкуют понятие язык программирования. К наиболее распространённым утверждениям, признаваемым большинством разработчиков, относятся следующие: Функция: язык программирования предназначен для написания компьютерных программ, которые применяются для передачи компьютеру инструкций по выполнению того или иного вычислительного процесса и организации управления отдельными устройствами.инструкций вычислительного процесса устройствами Задача: язык программирования отличается от естественных языков тем, что предназначен для передачи команд и данных от человека компьютеру, в то время, как естественные языки используются для общения людей между собой. В принципе, можно обобщить определение «языков программирования» это способ передачи команд, приказов, чёткого руководства к действию; тогда как человеческие языки служат для обмена информацией, эмоциями и т.д.естественных языковкоманд Исполнение: язык программирования может использовать специальные конструкции для определения и манипулирования структурами данных и управления процессом вычислений. структурами данных
Использовать достаточно гибкий существующий универсальный Язык Программирования (C#, Java, Python) и добавить предметно-ориентированные возможности при помощи библиотеки компонентов (Frameworkа); Использовать существующую систему для создания предметно-ориентированных языков (Meta Programming System от JetBrains или DSL от Microsoft – позволяет рисовать графические схемы и генерировать по ним код); Использовать среду программирования, в которой синтаксические конструкции языка можно модифицировать (настраивать процесс компиляции на определенную предметную область). Например, среда Phoenix, дополнение к компиляторам.Net; Создать собственный ЯП с компилятором, отладчиком и т.д. Для генерации лексического анализатора можно использовать продукты lex и yacc;lexyacc
Схема работы «Журнала в журнале»
Сайт Журнал в Журнале
Пример: Создание иконки
Требования к ПО Функциональность: программа должна выполнять ожидаемые функции. Функции нужно реализовывать в порядке их необходимости заказчику, чтобы это сделать, необходимо «вникнуть» в предметную область и определить, что действительно важно заказчику; выделить главные, вспомогательные и второстепенные функции. Надежность: необходимо обеспечить минимум ошибок, сбоев, защиту информации от непреднамеренной порчи. Программа должна разумно реагировать на ввод пользователем любых данных, иначе пользователи будут «бояться» ошибиться, что, как минимум, замедлит их работу с системой. Кроме того, программы, предназначенные для работы в компьютерных сетях, требуют защиты от разного рода вирусных и хакерских атак, – программа должна проверять все входящие данные, особенно тщательно те, которые приходят по сети. Удобство: программа должна иметь интуитивно-понятный интерфейс, удобный для пользователя. Нужно минимизировать количество действий, необходимых пользователю для выполнения задачи, но не в ущерб понятности самих действий. Эффективность: программа должна эффективно использовать память, процессор, «жёсткий» диск и другие ресурсы системы. В особых случаях (когда «медлительность» системы критична) это требование становится едва ли не самым важным, важнее надёжности, но чаще оно менее существенно, чем сопровождение. Сопровождение: программа должна быть понятной, гибкой и «простой в сопровождении, переносе на новые платформы и развитии» - это требование программистов, в отличие от предыдущих, которые являются требованиями заказчиков, пользователей. Удобство сопровождения, как правило, находится в противоречии с эффективностью и для большинства программ более важно. Понятность программы позволяет быстро её развивать, добавлять новые функции, исправлять ошибки.
Проектирование DSL Создание языка предметной области начинается с этапа моделирования данных - той информации, которая будет впоследствии записана в терминах DSL.
Программирование на языке общего назначения
Программирование на основе ПОЯ
При создании ПОЯ (чтобы им пользовались) нужно разработать не только сам язык, но и среду программирования (IDE), удобный редактор кода, отладчик, профилировщик и т.д. И тут может быть несколько подходов…
Интерфейс учителя
Интерфейс ученика
Разбиение системы на модули
Элементы редактора
Редакторы
Geometers Sketchpad (Графический язык)
Использовать достаточно гибкий существующий универсальный Язык Программирования (C#, Java, Python) и добавить предметно-ориентированные возможности при помощи библиотеки компонентов (Frameworkа); Использовать существующую систему для создания предметно-ориентированных языков (Meta Programming System от JetBrains или DSL от Microsoft – позволяет рисовать графические схемы и генерировать по ним код); Использовать среду программирования, в которой синтаксические конструкции языка можно модифицировать (настраивать процесс компиляции на определенную предметную область). Например, среда Phoenix, дополнение к компиляторам.Net; Создать собственный ЯП с компилятором, отладчиком и т.д. Для генерации лексического анализатора можно использовать продукты lex и yacc;lexyacc
В основе решения этих задач лежит математический аппарат Факультет Компьютерных Технологий и Информатики предоставляет базовое образование, которое позволит вам погружаться в любые прикладные задачи. Ваше математическое образование будет востребовано на прикладных задачах. Мы – прикладные математики!