- •Информационные процессы
- •1.1 Информатика и информатизация общества
- •1.2 Появление и развитие информатики
- •1.3 Цели, задачи и функции информатики
- •2. Разработке информационной техники и создание новейшей технологии по переработке информации.
- •1.4 Понятие информации, ее виды, свойства и особенности
- •По способу передачи и восприятия различают информацию:
- •1.5 Количество информации. Единицы измерения информации
- •Тема 2. Общая характеристика процессов сбора, передачи, обработки и накопления информации
- •2.1 Информация и информационные процессы
- •2.2 Сбор информации
- •1. Первичный сигнал с помощью датчика преобразуется в эквивалентный ему электрический сигнал (электрический ток).
- •2.3 Передача информации
- •2.4 Обработка информации
- •2.5 Накопление информации
- •3. Основные понятия и методы теории информации и кодирования
- •3.1 Системы счисления и кодирования
- •3.1.1 Непозиционные системы счисления
- •3.1.2 Позиционные системы счисления
- •3.1.3 Двоичная система счисления
- •3.1.4 Другие системы счисления, используемые в компьютерных технологиях
- •3.2 Формы представления и преобразования информации
- •3.2.1 . Кодирование и форматы представления числовых данных
- •4. Экономическая информация как информационный ресурс
- •4.2 Экономическая информация как составляющая управленческой информации
- •4.3 Организационно-экономическое управление как объект компьютеризации
- •5.1. Основы функционирования эвм
- •5.1.1. Архитектура и структура эвм. Принципы фон Неймана
- •5.1.2. Принципы работы центрального процессора
- •5.1.3. Память эвм. Виды запоминающих устройств
- •5.1.4. Классификация эвм.
- •Классификация по этапам развития
- •5.1.5. Персональный эвм: структура и особенность
- •5.2. Базовая аппаратная конфигурация персональных эвм
- •5.2.1. Основные блоки пк
- •5.2.2. Системная плата
- •5.2.3. Микропроцессор
- •5.2.4. Внутренняя память
- •Специальная память
- •5.2.5. Внешние запоминающие устройства.
- •Накопители на гибких магнитных дисках
- •Накопители на жестких магнитных дисках
- •Накопители на компакт-дисках
- •Записывающие оптические и магнитооптические накопители
- •Флэш-память
- •5.2.6. Аудиоадаптер
- •5.2.7. Видеосистема компьютера
- •Монитор на базе электронно-лучевой трубки
- •Жидкокристаллические мониторы
- •Сенсорный экран
- •5.2.8. Клавиатура
- •5.2.9. Манипуляторы
- •5.3. Периферийные устройства персональных компьютеров.
- •5.3.1. Принтеры, сканеры, плоттеры
- •5.3.2. Модемы и факс-модемы
- •7. Программные средства реализации информационных процессов
- •7.2 Операционные системы: назначение и классификация
- •7.3 Понятие файла. Таблица fat
- •7.4 Операционная система ms-dos
- •7.14 Базы данных
- •Концепция баз данных
- •Технология бд
- •Проектирование баз данных
- •2. Логическое проектирование и выбор инструментальных средств субд. Инфологическое проектирование
- •Функциональный и объектный подход
- •Логическое проектирование
- •Модели данных
- •Реляционная модель
- •7.5.3 Реляционные системы управления базой данных и их характеристики
- •Проектирование реляционной бд
- •Система управления базой данных Microsoft Access
- •Структура таблицы и типы данных
- •Ввод данных в ячейки таблицы
- •Редактирование данных
- •Сортировка данных
- •Отбор данных с помощью фильтра
- •Ввод и просмотр данных посредством формы
- •Формирование запросов и отчетов для однотабличной базы данных
- •Формирование отчетов
- •Тема 8. Информационные технологии
- •8.1 Понятие информационных технологий
- •8.2 Этапы развития информационных технологий
- •8.3 Виды информационных технологий
- •8.4 Основные компоненты информационных технологий
- •9. Информационные системы
- •9.1 Понятие информационных систем и этапы их развития
- •9.2 Структура информационных систем
- •9.3 Классификация информационных систем
- •9.4 Специализированные поисковые информационные системы.
- •9.6 Основы проектирования информационных систем
- •9.7 Интеллектуальные информационные системы.
- •Тема 10. Тенденции и перспективы развития компьютерной техники и информационных технологий
- •10.1 Тенденции и перспективы развития эвм
- •10.1.1 Этапы развития эвм
- •10.1.3 Перспективы развития эвм, основанных на принципах фон Немана
- •10.1.4 Нейрокомпьютеры и перспективы их развития
- •10.2 Перспективы развития информационных технологий
- •11. Модели решения функциональных и вычислительных задач
- •11.1 Этапы решения задач на эвм
- •11.2 Понятие модели, классификация моделей
- •11.3 Использование моделей при решении задач на эвм
- •11.4 Инструментарий решения функциональных и вычислительных задач
- •12. Алгоритмизация
- •12.1 Понятие алгоритма
- •12.2. Свойства алгоритмов
- •12.3. Способы представления алгоритмов
- •12.4. Базовые алгоритмические конструкции
- •12.4.1. Базовая структура «следование» (линейная структура)
- •12.4.2. Базовая структура «ветвление»
- •12.4.3. Базовая структура «цикл»
- •Тема №13 Стили программирования
- •13.1 Понятия стиля программирования и проектирования программ
- •13.2 Неавтоматизированное и автоматизированное программирование
- •13.3 Процедурное программирование
- •13.3.1 Структурное проектирование
- •13.3.2 Модульное программирование
- •13.4 Логическое и функциональное программирование Логическое программирование
- •13.5 Объектно-ориентированное проектирование
- •17.1 Основные сведения о компьютерных сетях. Локальные и глобальные сети эвм.
- •17.1.1 Преимущества использования локальных сетей в решении прикладных задач обработки данных
- •Способы коммутации данных.
- •17.1.2 Классификация компьютерных сетей
- •Одноранговые сети;
- •Сети на основе сервер;.
- •Комбинированные сети.
- •17.1.3 Топология компьютерных сетей
- •Наиболее распространенные виды топологий сетей:
- •17.2. Принципы взаимодействия сетевых устройств
- •17.2.1. Интерфейсы, протоколы, стеки протоколов
- •17.2.2. Модель iso/osi
- •17.3. Функциональное назначение основных видов коммуникационного оборудования
- •17.3.1. Типовой состав оборудования локальной сети
- •Роль кабельной системы
- •Сетевые адаптеры
- •Физическая структуризация локальной сети. Повторители и концентраторы
- •Логическая структуризация сети. Мосты и коммутаторы
- •Маршрутизаторы
- •17.3.2. Функциональное соответствие видов коммуникационного оборудования уровням модели osi
- •17.4 Стандарты технологии Ethernet. Метод доступа csma/cd
- •Метод доступа csma/cd
- •17.5 Стандарт Token Ring
- •17.5.1. Основные характеристики стандарта
- •17.5.2. Маркерный метод доступа
- •17.6.1. Функции и характеристики сетевых операционных систем
- •17.6.2 Клиент-серверные приложения
- •Клиенты и серверы локальных сетей
- •Системная архитектура "клиент-сервер"
- •18.1. История и принципы организации глобальных компьютерных сетей
- •18.2. Функционирование Интернет
- •18.2.1. Передача данных в Интернет
- •18.2.2. Подключение к Интернет
- •18.2.3. Семейство сетевых протоколов
- •18.2.4.Система адресации в Интернет
- •18.3 Службы Интернета
- •18.3.4. Usenet – электронные новости
- •18.4 Просмотр Web-страниц
- •18.4.1 Общие сведения о программах просмотра
- •18.4.2. Доступ к нужным Web-страницам
- •18.4.3. Упрощение доступа к часто посещаемым страницам
- •18.4.4. Доступ к ресурсам Интернета в автономном режиме
- •18.4.5. Настройка обозревателя
- •18.5. Поиск информации в Интернете
- •18.5.1. Поисковые системы
- •18.5.2. Правила выполнения запросов
- •18.5.3. Алгоритм информационного поиска в режиме удаленного доступа
- •Тема 19. Основы защиты информации и сведений,
- •19.1 Информационная безопасность, способы и средства защиты информации
- •19.2 Организационные и правовые методы защиты информации
- •19.3 Обеспечение безопасности и сохранности информации в вычислительных системах и сетях
- •19.3.1 Технические методы защиты информации
- •19.3.2 Программные методы защиты информации к программным методам защиты информации относятся резервирование и восстановление файлов, применение антивирусных программ, использование паролей.
- •19.3.2.1 Резервирование файлов
- •19.3.2.2 Восстановление файлов
- •19.3.2.3 Пароли
- •19.4 Классификация компьютерных вирусов и антивирусных программ
- •Различают следующие виды антивирусных программ:
- •Своевременное обнаружение зараженных вирусами файлов и дисков, полное уничтожение обнаруженных вирусов на каждом компьютере позволяют избежать распространения вирусной эпидемии на другие компьютеры.
- •19.5 Защита информации в компьютерных системах методом криптографии
- •Тема 20. Компьютерная графика
- •20.1 Представление в компьютере графической информации
- •20.1.1 Растровые рисунки
- •20.1.2 Векторные рисунки
- •20.1.3 Фрактальная графика
- •20.1.4. Способы создания цвета и кодирование информации
- •20.1.5 Форматы графических файлов
- •20.2 Оборудование для работы с изображениями
- •20.2.1 Компьютер для работы с изображениями
- •20.2.3 Оборудование для ввода графической информации в компьютер
- •20.3 Простейшие графические программы
- •20.4 Обзор современного графического программного обеспечения
13.4 Логическое и функциональное программирование Логическое программирование
В традиционном представлении программа - последовательность команд, выполняемых компьютером. Но существует и другой стиль программирования, при котором программа - просто совокупность утверждений. Этот стиль (или, как сейчас модно говорить, парадигма) получил название декларативное программирование. В противоположность первый стиль называют императивным программированием. Соответственно и языки программирования делят на императивные и декларативные. Наиболее важными разновидностями декларативного программирования, являются функциональное и логическое (или реляционное) программирование.
Логическое программирование - программирование, основанное на логике. Часто его определяют как использование языка логики в качестве языка программирования, вместе с использованием логического вывода в качестве вычислительного механизма. Это очень хорошее определение, но оно очень широкое. Логическое программирование, определенное таким образом, включает в себя то же функциональное программирование, как и многие другие стили программирования.
Исторически сложилось так, что термином "логическое программирование" обозначают использование в качестве языка программирования некоторого подмножества чистой логики первого порядка. Это означает, что для выражения концепции действия применяется математическое понятие отношения или предиката.
Пролог остается наиболее распространенным языком логического программирования. Логическое программирование хорошо подходит для некоторых применений, таких как дедуктивные базы данных, синтаксический анализ (особенно неоднозначных грамматик) и сложные комбинаторные задачи.
Дальнейшее развитие логических языков продолжается в двух главных направлениях, которые можно назвать "алгоритмическим" и "переборным". Первое ориентировано главным образом на решение задач, для которых известны эффективные алгоритмы и требуются более тонкие средства управления, чем присутствующие в Прологе. Второе ориентировано на задачи, для которых нет эффективных алгоритмов, и где существенное место занимает перебор вариантов. Языки этого направления заменяют несколько примитивный перебор с возвратами, характерный для Пролога, более изощренными методами.
Функциональное программирование
В программировании мы имеем дело с двумя видами сущностей: данными и операциями. Первые мы рассматриваем как пассивную составляющую вычислительного процесса, материал, которым мы хотим управлять. Вторые - как его активную составляющую, описание правил выполнения действий над данными. Поэтому, любой язык программирования должен предоставлять возможность описывать эти сущности. Прежде всего, язык должен содержать элементарные выражения, представляющие примитивные данные и операции над ними. Затем, нам необходимы средства объединения простых объектов (как данных, так и операций) в более сложные. Наконец, язык программирования должен иметь средства абстрагирования, позволяющие отвлечься от конкретного устройства сложных объектов и манипулировать ими как едиными сущностями.
Функциональное программирование использует математическое понятие функции для выражения концепции действия. Подобно обычным математическим функциям, процедуры («функции») функциональных языков отображают одни объекты (аргументы) в другие (значения). Причём, в отличие от процедур (функций) императивных языков, значения функций однозначно определяются их аргументами и не зависят от истории вычислительного процесса. Но имеется важное различие между математическими функциями и процедурами. Процедуры должны быть эффективно определены. Например, в математике мы можем определить квадратный корень из числа a как такое число, которое, будучи возведённым в квадрат, даёт a. Это совершенно законное определение, тем не менее оно не даёт метода находить этот самый корень. (Однако нельзя сказать, что такое определение совершенно бесполезно, поскольку оно важно в качестве средства спецификации.) В дальнейшем мы будем использовать термины «процедура» и «функция» как синонимы за исключением тех случаев, когда необходимо подчеркнуть эту разницу между математическим понятием функции и её определением на языке программирования.
Это же понятие функции как мы увидим в дальнейшем, используется и для выражения концепции данных. Вообще, изучение функционального программирования - хороший повод убедиться, что разница между «данными» и «операциями» не столь уж принципиальна. Функции в функциональных языках являются объектами «первого класса».
Языки программирования налагают различные ограничения на методы использования элементов языка. Элементы первого класса - это элементы с наименьшим количеством ограничений. Важные свойства таких первоклассных элементов:
На них можно ссылаться посредством переменных.
Их можно включать в структуры данных.
Их можно передавать как параметры.
Они могут быть возвращены в качестве результата.
За небольшими исключениями (например, Алгол-68) императивные языки ограничивают «права и свободы» функций и процедур. В отличие от них, функциональные языки предоставляет функциям статус первого класса. Это создаёт трудности для их эффективной реализации, но приводит к значительному увеличению выразительной силы этих языков. Диалект языка Лисп Scheme позволяет прозрачно выразить основные идеи функционального программирования.
Программа на декларативных языках представляет собой описание объектов, и связей между ними. В функциональных языках эти связи представляются функциями, в логических - отношениями (предикатами).
С точки зрения функционального программирования программа - функция, применяемая к вводу и возвращающая вывод.
output = program(input)
Логическая программа - отношение между вводом и выводом.
program(input, output)
На первый взгляд это различие между двумя парадигмами может показаться несущественным. Ведь с одной стороны любая функция всего лишь частный случай отношения между её аргументами и значениями, а с другой - любое отношение можно рассматривать как функцию во множество истинностных значений.
Имеется, однако, более серьёзные отличия. Функции в функциональных языках "однонаправлены". Они получают аргументы и возвращают результат. В логических языках разница между вводом и выводом условна. Мы можем указать желаемый вывод и получить ввод, который его обеспечит. Другое важное отличие - индетерминизм логических языков. Результат в них не обязательно определяется однозначно.
Проиллюстрировать эти различия можно простым примером. Рассмотрим две программы, определяющие площади материков.
Функциональная программа |
Логическая программа |
area(Eurasia) = 55 area(Africa) = 29 area(NorthAmerica) = 20 area(SouthAmerica) = 18 area(Australia) = 7 area(Antarctica) =14 |
area(Eurasia,55) area(Africa,29) area(NorthAmerica,20) area(SouthAmerica,18) area(Australia,7) area(Antarctica,14) |
Теперь к функциональной программе можно обратиться, например, с запросом area(Eurasia) и получить ответ 55.
Запросы к логической программе разнообразнее: area(Eurasia,a) выдаст ответ {a = 55}, а area(m,29) - {m=Africa}. Запрос area(m,a) выдаст любую из шести возможных пар, но, добавляя ограничения, мы можем сузить область допустимых результатов. Возможные ответы на area(m,a),a>20 - {m=Eurasia,a=55}и {m=Africa, a=29}, а на area(m,a),a>20,a<40 получим единственно возможный ответ: {m=Africa, a=29}. Этот по выражению Хоара "ангельский индетерминизм" и составляет главную силу логического программирования.
Предпринимаются попытки объединить эти два стиля. Один из подходов - "функционально-логическое программирование", в котором отношения задаются функциями, но запросы выполняются как в логических языках. То есть допускаются обращения вида area(m) = 20 --> {m = NorthAmerica}.
Более тонкие различия проявляются в стратегии управления вычислениями. Так функциональные языки обычно делят на "ленивые" (откладывающие вычисление значения выражения, до тех пор, пока оно реально потребуется) и "энергичные". Для логических и особенно функционально-логических языков разнообразие шире. Еще больше вариантов возникает в случае параллельных вычислений.
Другая характеристика языка - используемая в нём система типов данных. Вообще, для декларативных языков характерен "декларативный" подход и к организации данных. То есть понятие структуры данных никак не связано с её представлением в памяти компьютера. Напрочь отсутствует такое понятие как указатель. Редко встречаются и массивы. Наиболее распространенные структуры - списки и деревья.
Некоторые языки полностью игнорируют понятие типа данных. Имена переменных в них не связываются по умолчанию с каким-либо типом - все объекты образуют единое универсальное пространство. Такие языки называют бестиповыми, а также "языками с динамической типизацией" или "языками со скрытыми типами". Наиболее радикальны в этом плане Лисп и Пролог. Формы представления программ и данных в них одинаковы - символьные выражения. Это позволяет программе обрабатывать и преобразовывать другие программы и даже саму себя.
Так или иначе, типы возникают естественно, даже в бестиповых языках, когда объекты классифицируются согласно их использованию. Но вот что лучше - считать типы существующими априори или организовывать подмножества объектов из единой области? Этот вопрос остаётся нерешённым, так как отражает (возможно, неразрешимое) противоречие между надежностью и гибкостью языка. Споры о необходимости контроля типов ведутся и сегодня, но практический успех языка часто определяет более или менее успешная попытка найти компромисс. В этом отношении система типов Хиндли-Милнера - один из наиболее интересных примеров. Её разновидности используются во многих функциональных языках.
Еще одно важное свойство языков - поддержка модульности. Ранние языки слабо развиты в этом отношении. Они имеют "плоское" пространство имён в духе Си. Наиболее развита система модулей у SML и OCAML, но многие считают её чересчур сложной. Возможно "золотую середину" представляют Haskell, Mercury и т.п., использующие простой модульный механизм в стиле Модулы-2. Для практических нужд этого вполне достаточно.