Методическое пособие по курсу «информатика»
Вид материала | Методическое пособие |
- Методическое пособие по курсу «Информатика» для студентов, обучающихся по всем направлениям, 1648.11kb.
- С. В. Тимченко информатика 4 Учебно-методическое пособие, 268.2kb.
- Методическое пособие по курсу "Моделирование" для студентов, обучающихся по направлению, 512.51kb.
- Учебно-методическое пособие по курсу «Информационные технологии» для студентов Института, 1419.29kb.
- Учебно-методическое пособие по курсу Геоинформационное картографирование, 606.48kb.
- Методическое пособие для практических занятий красноярск 2002, 894.08kb.
- Методическое пособие по курсу: «История и философия науки», 337.53kb.
- Практикум по курсу "Информатика", 153.44kb.
- Темы рефератов по курсу «Информатика», 10.55kb.
- Современной Гуманитарной Академии (С) современная гуманитарная академия, 2011 методическое, 218.52kb.
Вопросы для самопроверки
- Что такое классификация объектов?
- Какие существуют методы классификации?
- В чем состоят достоинства и недостатки иерархического метода классификации? Приведите пример иерархической классификации.
- В чем состоят достоинства и недостатки фасетной системы классификации? Приведите пример фасетной классификации.
- Что такое словарь дескрипторов?
- В каких областях используется дескрипторная система классификации? Приведите пример.
- Что такое система кодирования информации?
- Что такое классификационное кодирование? Приведите примеры.
- Что такое регистрационное кодирование? Приведите примеры.
- Как можно классифицировать информацию, циркулирующую в организации?
ПРЕОБРАЗОВАНИЕ ИНФОРМАЦИИ
Компьютер в истории человечества является первым средством автоматизированного преобразования информации. Этап решения задачи на ЭВМ, состоящий из разработки программы в соответствии с алгоритмом решения задачи, ее отладке и дальнейшем развитии программы в ходе ее применения называется программированием.
Программирование происходит всегда в некоторой конкретной программной обстановке, задающей тип ЭВМ, язык программирования и те или иные средства разработки программ (библиотека стандартных программ и модулей, экспертная система, база данных, редактор, транслятор, отладчик и т.д.). Задаются, как правило, ограничения на время исполнения программы и объем используемой памяти. Важной характеристикой является также представление о жизненном цикле разрабатываемой программы: одноразового или многократного применения; будет ли программа товарным продуктом, отчуждаемым от разработчиков; автономная программа или входящая в систему; диалоговая или работающая в автоматическом режиме и т.п. Общим является требование обеспечения достоверности и надежности программы.
Различают три типа программирования:
- синтезирующее, предполагающее полное построение программы по заданной спецификации задачи или по общему алгоритму ее решения;
- сборочное, опирающееся на библиотеки модулей или подпрограмм и состоящее в выборе подходящих модулей и их быстрой (часто автоматизированной) сборке в результирующую программу, решающую задачу из того класса, на который рассчитана библиотека модулей;
- конкретизирующее, предполагающее существование универсальной программы, решающей любую задачу данного класса и состоящее в адаптации универсальной программы к особенностям частной решаемой задачи; в результате получается либо более простая программа, либо использующая меньшее количество ресурсов.
Способ записи программ, допускающий их непосредственное выполнение на ЭВМ, называют машинным языком или языком программирования.
Принципы создания компьютерных языков:
— процедурное программирование;
— функциональное программирование;
— логическое программирование;
— объектно-ориентированное программирование.
Процедурное программирование
Процедурный подход к обработке информации возник на заре программирования. Именно с этим стилем программирования связано все развитие вычислительной техники. Несмотря на прогресс технологии, большинство современных компьютеров построены по тем же принципам, что и машины 40–х годов. В их основе лежит так называемая архитектура фон Неймана, названная в честь американского ученого Дж. фон Неймана, впервые изложившего принципиальные положения архитектуры ЭВМ во второй половине 40-х годов.
Основные принципы архитектуры фон Неймана состоят в следующем:
- ЭВМ состоит из процессора, памяти и внешних устройств;
- единственным источником активности (не считая стартового и аварийного вмешательства человека) в ЭВМ является процессор, который, в свою очередь, управляется программой, находящейся в памяти машины;
- память машины может быть представлена как последовательность дискретных ячеек, каждая из которых имеет свой адрес; каждая ячейка хранит команду программы или некоторую единицу обрабатываемой информации, причем и то и другое выглядят одинаково (машинное слово);
- в любой момент времени процессор выполняет одну команду программы, адрес которой находится в специальном регистре процессора — счетчике команд;
- обработка информации происходит только в регистрах процессора; информацию в процессор можно ввести из любой ячейки памяти или внешнего устройства, или наоборот, направить в любую ячейку или на внешнее устройство;
- в каждой команде программы зашифрованы следующие предписания: из каких ячеек памяти взять обрабатываемую информацию; какие совершить операции с взятой информацией; в какие ячейки памяти направить полученную информацию; как изменить содержимое счетчика команд, чтобы знать, откуда взять для выполнения следующую команду;
- машина выполняет программу команда за командой в соответствии с изменением содержимого счетчика команд и расположением команд в памяти, пока не получит команду остановиться.
Имеется некоторая последовательность управляющих символов (команд), закодированная в двоичной либо другой форме, а также данных, закодированных в той же форме. Команды и данные различаются лишь способом интерпретации. Команды, располагаясь в оперативной памяти в некоторой последовательности и по определенным адресам, образуют программу. В этом случае можно выделить единый алгоритм функционирования любого вычислительного устройства фон-неймановской архитектуры. Упрощенно он выглядит так:
Извлечь команду из оперативной памяти;
Извлечь из памяти данные (операнды), требуемые для реализации команды;
Выполнить команду;
При необходимости сохранить результаты в памяти;
Вернуться к шагу 1.
Развитие процедурных языков определялось особенностями вычислительной машины Дж. фон Неймана; способы представления знаний и задач, а также методов их решения были ориентированы на экономию ресурсов. При этом интеллектуальный комфорт пользователя был проигнорирован. Программа разрабатывается в терминах тех действий, которые она должна выполнять. Основная единица программы — процедура — последовательность операторов, выполняющая определенный вспомогательный алгоритм. Процедуры могут вызывать другие процедуры, вместе они работают по определенному алгоритму, ведущему к решению задачи. Кроме понятия оператор в основе процедурного языка лежит понятие операнд — данные, которые обрабатываются при помощи операторов. Типы операндов: простой, массив, структуры. Типы операторов: присваивания, условных операций, итерации.
Программа, написанная на процедурном языке, явно указывает способ получения результата, но не сам результат.
Существует большое число процедурных языков программирования. Это —Algol, Fortran, Pascal, С, Basic и др.
Функциональное программирование
Применение ЭВМ для решения задач искусственного интеллекта и обработки текстов привело к созданию функциональных языков. Эти языки имеют хорошо проработанное математическое основание — –исчисление. Функция в математике — отображение объектов из множества величин (области определения функции или домена) в объекты другого множества (область значений функции). Переменные в функциональной программе рассматриваются как переменные в математике: если они существуют, то имеют какую-то величину, и эта величина не может измениться. Функциональная программа описывает, что должно быть вычислено, то есть является просто выражением, определенным в терминах заранее заданных функций и функций, определенных пользователем. Величина этого выражения является результатом программы. Таким образом, здесь отсутствует состояние программы и предыстория вычислений. Первым языком функционального программирования является созданный в начале 1960-х годов язык ЛИСП (LISP — LISt Processing). В отличие от процедурных языков, в которых действия в основном выражаются в виде итерации — повтора какого-либо фрагмента программы несколько раз, в ЛИСП вычисления производятся с помощью рекурсии — вызова функцией самой себя, а основная структура данных — это список.
Логическое программирование
Математическая логика использует отточенный формальный язык для представления знаний об объектах той или иной предметной области, включая явные средства выражения гипотез и суждений. Подобные качества роднят логику и искусство программирования. Идея непосредственного применения логики в качестве средства программирования возникла практически одновременно с первыми процедурными языками. Главная особенность такого подхода состоит в том, что программа (логическая) состоит из набора утверждений (аксиом), а вычисление, выполняемое под управлением такой программы, представляет собой логический вывод некоторого целевого утверждения — искомого результата. Вывод производится из аксиом программы по правилам математической логики, причем эти правила применяются автоматически, программист не должен их специально указывать.
Часто стиль программирования, проповедуемый в рамках направления логическое программирование, называют декларативным, поскольку целевое («вычисляемое») утверждение программы заранее декларирует (объявляет) искомый результат. При этом программист в своей программе не должен описывать шаг за шагом весь процесс вычислений, доверяя поиск решения логической машине вывода.
Привлекательность применения логики в программировании состоит прежде всего в том, что в результате постепенного уточнения формулировки задачи она приобретает все более ясную форму, понятную как создателю программы, так и ее возможным читателям (потребителям). Особенно хорошо язык логики подходит для формулирования задач искусственного интеллекта. Все это объясняется тем, что язык логики опирается на общие законы человеческого мышления, а не на технические особенности кодирования для вычислительной машины того или иного типа.
Серьезные практические результаты в области логического программирования появились только в 70-е годы после того, как была подготовлена достаточная теоретическая база и достигнут значительный прогресс в развитии вычислительной техники. К этому времени после целой череды экспериментальных языков группой Алана Колмероэ в Марселе была создана (еще неэффективная) реализация языка, заменившего последовательные вычисления машины фон Неймана на логический вывод. Новый язык, названный Прологом (ПРОграммирование ЛОГическое), предназначался для анализа текстов, написанных на естественном языке, т.е. для решения задач, обычно относимых к области искусственного интеллекта. Приблизительно в те же годы были разработаны и теоретические основы нового направления в программировании. Основные результаты в этой области принадлежат Алану Робинсону и Роберту Ковальскому. Первая реализация Пролога, выполненная кстати на Фортране, заинтересовала специалистов, но не получила широкого распространения по причине низкой эффективности. Мешал распространению Пролога и накопившийся к этому времени у специалистов (в основном американских) общий скепсис по отношению к идее логического программирования, поскольку все реализации предшественников Пролога были также неэффективны.
Настоящая революция в этой области произошла в конце 70-х, когда Дэвид Уоррен из Эдинбургского университета создал первый компилятор для языка Пролог. Этот компилятор работал настолько эффективно, что скепсис специалистов немедленно сменился всеобщим энтузиазмом. С тех пор и до настоящего времени направление логического программирования успешно развивается и поддерживается как профессионалами, так и просто любителями программирования.
Объектно-ориентированное программирование
Проектирование и разработка программ, реализующих модели сложных процессов и явлений достаточно сложны и трудоемки. Одним из подходов, обеспечивающих структурирование математической модели и упрощение ее программирования, является объектный подход, в котором реальный процесс или система представляются совокупностью объектов, взаимодействующих друг с другом.
«Если процедуры и функции — глаголы, а данные — существительные, то процедурные программы строятся из глаголов, а объектно-ориентированные — из существительных»2. Принцип объектно-ориентированного программирования (ООП) основан на формализации описания объектов. Под объектом понимается совокупность свойств (параметров) определенных сущностей и методов их обработки (программных средств). Объект содержит инструкции (программный код), определяющие действия, которые может выполнять объект и обрабатываемые данные. Состояние объекта определяется перечнем всех возможных (обычно статических) свойств и текущими значениями (обычно динамическими) каждого из этих свойств. Свойства объекта характеризуются значениями его параметров.
Определенное воздействие одного объекта на другой с целью вызвать соответствующую реакцию называют операцией. В объектно-ориентированных языках программирования операции называют методами. Можно выделить пять типов операций: конструктор, создание и инициализация объекта; деструктор, разрушающий объект; модификатор, изменяющий состояние объекта; селектор для доступа к переменным объекта без их изменения; итератор для доступа к содержанию объекта по частям в определенной последовательности.
Основные идеи объектно-ориентированного подхода опираются на следующие положения:
— Программа представляет собой модель некоторого реального процесса, части реального мира.
— Модель реального мира или его части может быть описана как совокупность взаимодействующих между собой объектов.
— Объект описывается набором параметров, значения которых определяют состояние объекта, и набором операций (действий), которые может выполнять объект.
— Взаимодействие между объектами осуществляется посылкой специальных сообщений от одного объекта к другому. Сообщение, полученное объектом, может потребовать выполнения определенных действий, например, изменения состояния объекта.
— Объекты, описанные одним и тем же набором параметров и способные выполнять один и тот же набор действий представляют собой класс однотипных объектов.
С точки зрения языка программирования класс объектов можно рассматривать как тип данного, а отдельный объект — как данное этого типа. Определение программистом собственных классов объектов для конкретного набора задач должно позволить описывать отдельные задачи в терминах самого класса задач (при соответствующем выборе имен типов и имен объектов, их параметров и выполняемых действий). Таким образом, объектно-ориентированный подход предполагает, что при разработке программы должны быть определены классы используемых в программе объектов и построены их описания, затем созданы экземпляры необходимых объектов и определено взаимодействие между ними.
Три основных достоинства ООП: упрощение проектирования; ускорение разработки за счет многократного использования готовых модулей; легкость модификации.
Общим предком практически всех используемых сегодня объектных и объектно-ориентированных языков является Simula, созданный в 1960 году Далем, Мюрхогом и Ныгардом. Существенно, что Simula, предназначенная для описания систем и моделирования, ввела дисциплину написания программ, отражающую словарь предметной области.
Практически все объектно-ориентированные языки программирования являются развивающимися языками, их стандарты регулярно уточняются и расширяются. Следствием этого развития являются неизбежные различия во входных языках компиляторов различных систем программирования. Наиболее распространенными в настоящее время являются системы программирования Microsoft C++ , Microsoft Visual C++ и системы программирования фирмы Borland International.