Средства реализации информационных процессов
Общая характеристика процессов сбора, передачи, обработки и накопления информации. Технические средства реализации информационных процессов, языки и типы программирования. Классификация и структура компьютерных сетей, цели и направления защиты информации.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | учебное пособие |
Язык | русский |
Дата добавления | 27.09.2017 |
Размер файла | 273,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Циклы могут быть с предусловием (когда условие проверяется перед началом тела цикла) и с постусловием (когда условие проверяется после первого прохождения тела цикла).
Размещено на http://www.allbest.ru/
V. Программирование
5.1 Общие понятия программирования
Программа -- это логически упорядоченная последовательность команд, необходимых для управления компьютером (выполнения им конкретных операций), поэтому программирование сводится к созданию последовательности команд, необходимой для решения определенной задачи.
Управление компьютером осуществляется по определенному алгоритму. Для представления алгоритма в виде, понятном компьютеру, служат языки программирования. Сначала всегда разрабатывается алгоритм действий, а потом он записывается на одном из таких языков. В итоге получается текст программы -- полное законченное и детальное описание алгоритма на языке программирования.
Команды, поступающие в процессор по его шинам, на самом деле являются электрическими сигналами, но и их тоже можно представить как совокупности нулей и единиц, то есть числами. Разным командам соответствуют разные числа. Поэтому реально программа, с которой работает процессор, представляет собой последовательность чисел, называемую машинным кодом.
Поэтому текст программы переводится в машинный код и исполняется. Перевод осуществляется специальными программами, которые называются трансляторами.
Написать программу в машинном коде весьма сложно, причем эта сложность резко возрастает с увеличением размера программы и трудоемкости решения нужной задачи. Условно можно считать, что машинный код приемлем, если размер программы не превышает нескольких десятков байтов и нет потребности в операциях ручного ввода/вывода данных.
Поэтому сегодня практически все программы создаются с помощью языков программирования.
Теоретически программу можно написать и средствами обычного человеческого (естественного) языка -- это называется программированием на метаязыке (подобный подход обычно используется на этапе составления алгоритма), но автоматически перевести такую программу в машинный код пока невозможно из-за высокой неоднозначности естественного языка.
Языки программирования -- искусственные языки. От естественных они отличаются ограниченным числом «слов», значение которых понятно транслятору, и очень строгими правилами записи команд (операторов). Совокупность подобных требований образует синтаксис языка программирования, а смысл каждой команды и других конструкций языка -- его семантику. Нарушение формы записи программы приводит к тому, что транслятор не может понять назначение оператора и выдает сообщение о синтаксической ошибке, а правильно написанное, но не отвечающее алгоритму использование команд языка приводит к семантическим ошибкам (называемым еще логическими ошибками или ошибками времени выполнения).
Напомню, что процесс поиска ошибок в программе называется тестированием, процесс устранения ошибок -- отладкой.
5.2 Трансляторы
Для перевода программы с языка программирования в машинные коды, понятные компьютеру, существуют специальные программы - трансляторы. Трансляторы бывают двух видов: интерпретаторы и компиляторы.
Интерпретаторы переводят в машинный код (или некое промежуточное представление) и сразу выполняют каждый оператор программы. Причем только после того, как текущий оператор успешно выполнен, интерпретатор перейдет к следующему. При этом если один и тот же оператор должен выполняться в программе многократно, интерпретатор всякий раз будет выполнять его так, как будто встретил впервые. Поэтому недостатком интерпретатора является то, что программы, в которых требуется осуществить большой объем повторяющихся вычислений, могут работать медленно. Можно сказать, что интерпретатор моделирует некую виртуальную вычислительную машину, для которой базовыми инструкциями служат не элементарные команды процессора, а операторы языка программирования. Для выполнения этой же программы на другом компьютере, там также должен быть установлен интерпретатор.
С помощью интерпретатора допустимо в любой момент остановить работу программы, исследовать содержимое памяти, организовать диалог с пользователем, выполнить сколь угодно сложные преобразования данных и при этом постоянно контролировать состояние окружающей программно-аппаратной среды, благодаря чему достигается высокая надежность работы. Интерпретатор при выполнении каждого оператора проверяет множество характеристик операционной системы и при необходимости максимально подробно информирует разработчика о возникающих проблемах. Кроме того, интерпретатор очень удобен для использования в качестве инструмента изучения программирования, так как позволяет понять принципы работы любого отдельного оператора языка.
Компиляторы переводят весь текст программы в машинный код, затем его можно использовать отдельно от исходного текста. Компиляторы полностью просматривают весь текст программы (исходный код) в поисках синтаксических ошибок, выполняют определенный смысловой анализ и затем автоматически переводят на машинный язык -- генерируют машинный код. Нередко при этом выполняется оптимизация с помощью набора методов, позволяющих повысить быстродействие программы (например, с помощью инструкций, ориентированных на конкретный процессор, путем исключения ненужных команд, промежуточных вычислений и т. д.). В результате законченная программа получается компактной и эффективной, работает в сотни раз быстрее программы, выполняемой с помощью интерпретатора, и может быть перенесена на другие компьютеры с процессором, поддерживающим соответствующий машинный код.
Основной недостаток компиляторов -- трудоемкость трансляции языков программирования, ориентированных на обработку данных сложной структуры, часто заранее неизвестной или динамически меняющейся во время работы программы. Тогда в машинный код приходится вставлять множество дополнительных проверок, анализировать наличие ресурсов операционной системы, динамически их захватывать и освобождать, формировать и обрабатывать в памяти компьютера сложные объекты, что на уровне жестко заданных машинных инструкций осуществить довольно трудно, а для ряда задач практически невозможно.
В реальных системах программирования перемешаны технологии и компиляции и интерпретации. В процессе отладки программа может выполняться по шагам, а затем компилироваться в машинный код.
5.3 Языки программирования
Разные типы процессоров имеют разные наборы команд. Если язык программирования ориентирован на конкретный тип процессора и учитывает его особенности то он называется языком программирования низкого уровня. В данном случае «низкий уровень» не значит «плохой». Имеется в виду, что операторы языка близки к машинному коду и ориентированы на конкретные команды процессора.
Самым низким уровнем являются машинные коды.
Языком низкого уровня является язык ассемблера, который также представляет каждую команду машинного кода, но не в виде чисел, а с помощью символьных условных обозначений, называемых мнемониками. Однозначное преобразование одной машинной инструкции в одну команду ассемблера называется транслитерацией. Так как наборы инструкций для каждого модели процессора отличаются, конкретной компьютерной архитектуре соответствует свой язык ассемблера, и написанная на нем программа может быть использована только в этой среде.
С помощью языков низкого уровня создаются очень эффективные и компактные программы, так как разработчик получает доступ ко всем возможностям процессора. С другой стороны, при этом требуется очень хорошо понимать устройство компьютера, затрудняется отладка больших приложений, а результирующая программа не может быть перенесена на компьютер с другим типом процессора.
Подобные языки обычно применяют для написания небольших системных приложений, драйверов устройств, модулей стыковки с нестандартным оборудованием, когда важнейшими требованиями становятся компактность, быстродействие и возможность прямого доступа к аппаратным ресурсам. В некоторых областях, например в машинной графике, на языке ассемблера пишутся библиотеки, эффективно реализующие требующие интенсивных вычислений алгоритмы обработки изображении.
Языки программирования высокого уровня значительно ближе и понятнее человеку, нежели компьютеру. Особенности конкретных компьютерных архитектур в них не учитываются, поэтому создаваемые программы на уровне исходных текстов легко переносимы на другие платформы, для которых создан транслятор этого языка. Разрабатывать программы на языках высокого уровня с помощью понятных и мощных команд значительно проще, а ошибок при создании программ допускается гораздо меньше.
Поколения языков программирования
Языки программирования принято делить на пять поколений.
В первое поколение входят языки, созданные в начале 50-х годов, когда первые компьютеры только появились. Это был первый язык ассемблера, созданный по принципу «одна инструкция -- одна строка».
Расцвет второго поколения языков программирования пришелся на конец 50-х -- начало 60-х годов. Тогда был разработан символический ассемблер, в котором появилось понятие переменной. Он стал первым полноценным языком программирования. Благодаря его возникновению заметно возросли скорость разработки и надежность программ.
Появление третьего поколения языков программирования принято относить к 60-м годам. В это время родились универсальные языки высокого уровня, с их помощью удается решать задачи из любых областей. Такие качества новых языков, как относительная простота, независимость от конкретного компьютера и возможность использования мощных синтаксических конструкций, позволили резко повысить производительность труда программистов. Понятная большинству пользователей структура этих языков привлекла к написанию небольших программ (как правило, инженерного или экономического характера) значительное число специалистов из некомпьютерных областей. Подавляющее большинство языков этого поколения успешно применяется и сегодня.
С начала 70-х годов - период языков четвертого поколения. Эти языки предназначены для реализации крупных проектов, повышения их надежности и скорости создания. Они обычно ориентированы на специализированные области применения, где хороших результатов можно добиться, используя не универсальные, а проблемно-ориентированные языки, оперирующие конкретными понятиями узкой предметной области. Как правило, в эти языки встраиваются мощные операторы, позволяющие одной строкой описать такую функциональность, для реализации которой на языках младших поколений потребовались бы тысячи строк исходного кода.
Рождение языков пятого поколения произошло в середине 90-х годов. К ним относятся также системы автоматического создания прикладных программ с помощью визуальных средств разработки. Главная идея, которая закладывается в эти языки, -- возможность автоматического формирования результирующего текста на универсальных языках программирования (который потом требуется откомпилировать). Инструкции же вводятся в компьютер в максимально наглядном виде с помощью методов, наиболее удобных для человека, мало знакомого с программированием.
Обзор языков программирования высокого уровня
FORTRAN (Фортран). Это первый компилируемый язык, созданный Джимом Бэкусом в 50-е годы. Программисты, разрабатывавшие программы исключительно на ассемблере, выражали серьезное сомнение в возможности появления высокопроизводительного языка высокого уровня, поэтому основным критерием при разработке компиляторов Фортрана являлась эффективность исполняемого кода. Хотя в Фортране впервые был реализован ряд важнейших понятий программирования, удобство создания программ было принесено в жертву возможности получения эффективного машинного кода. Однако для этого языка было создано огромное количество библиотек, начиная от статистических комплексов и кончая пакетами управления спутниками, поэтому Фортран продолжает использоваться в некоторых организациях.
COBOL (Кобол). Это компилируемый язык для применения в экономической области и решения бизнес-задач, разработанный в начале 60-х годов. Он отличается большой «многословностью» -- его операторы иногда выглядят как обычные английские фразы. В Коболе были реализованы очень мощные средства работы с большими объемами данных, хранящимися на различных внешних носителях. На этом языке создано очень много приложений, которые эксплуатируются и сегодня.
Algol (Алгол). Компилируемый язык, созданный в 1960 году. Он был призван заменить Фортран, но из-за более сложной структуры не получил широкого распространения. В 1968 году была создана версия Алгол 68, по своим возможностям опережающая многие языки программирования, однако из-за отсутствия достаточно эффективных компьютеров для нее не удалось своевременно создать хорошие компиляторы.
Pascal (Паскаль). Язык Паскаль, созданный в конце 70-х годов основоположником множества идей современного программирования Никлаусом Виртом, во многом напоминает Алгол, но в нем ужесточен ряд требований к структуре программы и имеются возможности, позволяющие успешно применять его при создании крупных проектов.
Basic (Бейсик). Для этого языка имеются и компиляторы, и интерпретаторы. Он создавался в 60-х годах в качестве учебного языка и очень прост в изучении.
С (Си). Данный язык был создан в лаборатории Bell и первоначально не рассматривался как массовый. Он планировался для замены ассемблера, чтобы иметь возможность создавать столь же эффективные и компактные программы и в то же время не зависеть от конкретного типа процессора. Си во многом похож на Паскаль и имеет дополнительные средства для прямой работы с памятью (указатели). На этом языке в 70-е годы написано множество прикладных и системных программ и ряд известных операционных систем (Unix).
C++ (Си++). Это объектно-ориентированное расширение языка Си, созданное Бьярном Страуструпом в 1980 году. Множество новых мощных возможностей, позволивших резко повысить производительность программистов, наложилось на унаследованную от языка Си определенную низкоуровневость, в результате чего создание сложных и надежных программ потребовало от разработчиков высокого уровня профессиональной подготовки.
Java (Джава, Ява). Этот язык был создан компанией Sun в начале 90-х годов на основе Си++. Он призван упростить разработку приложений на основе Си++ путем исключения из него всех низкоуровневых возможностей. Но главная особенность этого языка -- компиляция не в машинный код, а в платформно-независимый байт-код (каждая команда занимает один байт). Этот байт-код может выполняться с помощью интерпретатора -- виртуальной Java-машины JVM (Java Virtual Machine) версии которой созданы сегодня для любых платформ. Благодаря наличию множества Java-машин программы на Java можно переносить не только на уровне исходных текстов, но и на уровне двоичного байт-кода. Особое внимание в развитии этого языка уделяется двум направлениям: поддержке всевозможных мобильных устройств и микрокомпьютеров, встраиваемых в бытовую технику (технология Jini) и созданию платформно-независимых программных модулей, способных работать на серверах в глобальных и локальных сетях с различными операционными системами (технология Java Beans). Пока основной недостаток этого языка -- невысокое быстродействие, так как язык Ява интерпретируемый.
С# (Си Шарп). В конце 90-х годов в компании Microsoft под руководством Андерса Хейльсберга был разработан язык С#. В нем воплотились лучшие идеи Си и Си++, а также достоинства Java. Правда, С#, как и другие технологии Microsoft, ориентирован на платформу Windows. Однако формально он не отличается от прочих универсальных языков. Язык С# предназначен для быстрой разработки .NET-приложений, и его реализация в системе Microsoft Visual Studio .NET содержит множество особенностей, привязываю-щих С# к внутренней архитектуре Windows и платформы .NET.
PL/1 (ПЛ/1). В середине 60-х годов компания IBM решила взять все лучшее из языков Фортран, Кобол и Алгол. В результате в 1964 году на свет появился новый компилируемый язык программирования, который получил название Programming Language One. В этом языке было реализовано множество уникальных решении, полезность которых удается оценить только спустя 33 года, в эпоху крупных программных систем. По своим возможностям ПЛ/1 значительно мощнее многих других языков (Си, Паскаля). Например, в ПЛ/1 присутствует уникальная возможность указания точности вычислений -- ее нет даже у Си++ и Явы. Этот язык и сегодня продолжает поддерживаться компанией IBM.
Smalltalk (Смолток). Работа над этим языком началась в 1970 году в исследовательской лаборатории корпорации XEROX, а закончились спустя 10 лет, воплотившись в окончательном варианте интерпретатора SMALLTALK-80. Данный язык оригинален тем, что его синтаксис очень компактен и базируется исключительно на понятии объекта. В этом языке отсутствуют операторы или данные. Всё, что входит в Смолток, является объектами, а сами объекты общаются друг с другом исключительно с помощью сообщений (например, появление выражения I + 1 вызывает посылку объекту I сообщения «+», то есть «прибавить», с параметром 1, который считается не числом-константой, а тоже объектом). Больше никаких управляющих структур, за исключением «оператора» ветвления (на самом деле функции принадлежащей стандартному объекту), в языке нет, хотя их можно очень просто смоделировать. Сегодня версия VisualAge forSmalltalk активно развивается компанией IBM.
LISP (Лисп). Интерпретируемый язык программирования, созданный в 1960 году Джоном Маккарти. Ориентирован на структуру данных в форме списка и позволяет организовывать эффективную обработку больших объемов текстовой информации.
Prolog (Пролог). Создан в начале 70-х годов Аланом Колмероэ. Программа на этом языке, в основу которого положена математическая модель теории исчисления предикатов, строится из последовательности фактов и правил, а затем формулируется утверждение, которое Пролог будет пытаться доказать с помощью введенных правил. Человек только описывает структуру задачи, а внутренний «мотор» Пролога сам ищет решение с помощью методов поиска и сопоставления.
Ada (Ада). Назван по имени леди Огасты Ады Байрон, дочери английского поэта Байрона. В 1980 году сотни экспертов Министерства обороны США отобрали из 17 вариантов именно этот язык, разработанный небольшой группой под руководством Жана Ишбиа. Он удовлетворил на то время все требования Пентагона, а к сегодняшнему дню в его развитие вложены десятки миллиардов долларов. Структура самого языка похожа на Паскаль. В нем имеются средства строгого разграничения доступа к различным уровням спецификаций, доведена до предела мощность управляющих конструкций.
Forth (Форт). Результат попытки Чарльза Мура в 70-х годах создать язык, обладающий мощными средствами программирования, который можно эффективно реализованным на компьютерах с небольшими объемами памяти, а компилятор мог бы выдавать очень быстрый и компактный код, то есть служил заменой ассемблеру. Однако сложности восприятия программного текста, записанного в непривычной форме, сильно затрудняли поиск ошибок, и с появлением Си язык Форт оказался забытым.
В настоящее время существуют специализированные языки программирования для некоторых областей - баз данных, Интернет (скриптовые, тэговые, - о них в соответствующих разделах), моделирования и др.
Например, языки моделирования используются при создании программ и формировании структур баз даны. Такие языки используют формальные способы их представления -- формальные нотации, с помощью которых можно визуально представить (изобразить с помощью мыши) объекты программы и взаимосвязи между ними в системе, имеющей специализированный редактор и генератор исходных текстов программ на основе созданной модели. Такие системы называются CASE-системами. В них активно применяются нотации IDEF, а в последнее время все большую популярность завоевывает язык графического моделирования UML.
Классификация с точки зрения принципов программирования (Алексеев Е.Г.)
Языки программирования можно разбить на 3 группы: процедурные, функциональные и логические. Основой всех языков программирования являются процедурные языки, поскольку в основе работы компьютера (центрального процессора) на самом низком уровне лежит возможность исполнять только примитивные команды, явно указывающие, что делать процессору. Языки других типов можно рассматривать как надстройки над процедурными языками программирования. В этих языках (функциональные и логические) заложены и реализованы определенные математические модели, позволяющие более эффективно программировать некоторые специфические типы задач. Но трансляторы, библиотеки и другие средства этих языков программирования все равно реализованы посредством процедурных языков программирования.
Процедурные языки программирования Программа состоит из последовательности императивных команд (явно, задающих какие преобразования выполнять над данными). Данные хранятся в виде переменных. Примером процедурного языка является язык программирования Паскаль. Языки низкого уровня (машинный код и Ассемблер) являются по принципам работы процедурными языками программирования. Но, это языки такого низкого уровня, что к ним даже не подходит термин “процедурные”. Скорее, лучше называть их императивными языками программирования.
Логические языки программирования. Языки программирования данного типа основываются на формальной логике и булевой алгебре. Программа не содержит в себе явных алгоритмов. Задаётся описание условий задачи и логических соотношений, по которым система программирования строит дерево вывода и находит решения задачи. Язык Пролог является логическим языком программирования.
Функциональные языки программирования Функциональное программирование основывается на использование списков и функций. Переменные могут отсутствовать вообще. Язык Лисп есть функциональный язык программирования.
Программы на логических и функциональных языках программирования обладают относительно низким быстродействием из-за сложности реализации.
Большинство современных процедурных языков программирования развивается в направлении объектно-ориентированного программирования.
5.4 Типы программирования
Алгоритмическое (модульное) программирование
Основная идея алгоритмического программирования -- разбиение программы на последовательность модулей, каждый из которых выполняет одно или несколько действий. Единственное требование к модулю -- чтобы его выполнение всегда начиналось с первой команды и всегда заканчивалось на самой последней (то есть, чтобы нельзя было попасть на команды модуля извне и передать управление из модуля на другие команды в обход заключительной).
Алгоритм на выбранном языке программирования записывается с помощью команд описания данных, вычисления значений и управления последовательностью выполнения программы.
Текст программы представляет собой линейную последовательность операторов присваивания, цикла и условных операторов. Таким способом можно решать не очень сложные задачи и составлять программы, содержащие несколько сот строк кода.
В таком программировании используются следующие элементы:
· Переменные и константы.
· Типы данных числовой, логический, строковый.
· Арифметические операции и выражения.
· Логические выражения (результат - только истина или ложь).
· Сложные структуры данных (составляющиеся из базовых и определенных ранее сложных типов): массивы, списки, деревья и т. п. При этом структура объединяет группу разных данных под одним названием.
Структурное программирование
При создании средних по размеру приложений (несколько тысяч строк исходного кода) используется структурное программирование, идея которого заключается в том, что структура программы должна отражать структуру решаемой задачи, чтобы алгоритм решения был ясно виден из исходного текста. Для этого надо иметь средства для создания программы не только с помощью трех простых операторов, но и с помощью средств, более точно отражающих конкретную структуру алгоритма. С этой целью в программирование введено понятие подпрограммы -- набора операторов, выполняющих нужное действие и не зависящих от других частей исходного кода. Программа разбивается на множество мелких подпрограмм (занимающих до 50 операторов -- критический порог для быстрого понимания цели подпрограммы), каждая из которых выполняет одно из действий, предусмотренных исходным заданием. Комбинируя эти подпрограммы, удается формировать итоговый алгоритм уже не из простых операторов, а из законченных блоков кода, имеющих определенную смысловую нагрузку, причем обращаться к таким блокам можно по названиям. Получается, что подпрограммы -- это новые операторы или операции языка, определяемые программистом.
Возможность применения подпрограмм относит язык программирования к классу процедурных языков.
Наличие подпрограмм позволяет вести проектирование и разработку приложения сверху вниз -- такой подход называется нисходящим проектированием. Сначала выделяется несколько подпрограмм, решающих самые глобальные задачи (например, инициализация данных, главная часть и завершение), потом каждый из этих модулей детализируется на более низком уровне, разбиваясь в свою очередь на небольшое число других подпрограмм, и так происходит до тех пор, пока вся задача не окажется реализованной.
Такой подход удобен тем, что позволяет человеку постоянно мыслить на предметном уровне, не опускаясь до конкретных операторов и переменных. Кроме того, появляется возможность некоторые подпрограммы не реализовывать сразу, а временно откладывать, пока не будут закончены другие части. Например, если имеется необходимость вычисления сложной математической функции, то выделяется отдельная подпрограмма такого вычисления, но реализуется она временно одним оператором, который просто присваивает заранее выбранное значение. Когда все приложение будет написано и отлажено, тогда можно приступить к реализации этой функции.
Немаловажно, что небольшие подпрограммы значительно проще отлаживать, что существенно повышает общую надежность всей программы.
Очень важная характеристика подпрограмм -- это возможность их повторного использования. С интегрированными системами программирования поставляются большие библиотеки стандартных подпрограмм, которые позволяют значительно повысить производительность труда за счет использования чужой работы по созданию часто применяемых подпрограмм.
Событийно-ориентированное программирование
С активным распространением системы Windows и появлением визуальных RAD-сред широкую популярность приобрел событийный подход к созданию программ -- событийно-ориентированное программирование.
Идеология системы Windows основана на событиях. Щелкнул человек на кнопке, выбрал пункт меню, нажал на клавишу или кнопку мыши - в Windows генерируется подходящее сообщение, которое отсылается окну соответствующей программы. Структура программы, созданной с помощью событийного программирования, следующая. Главная часть представляет собой один бесконечный цикл, который опрашивает Windows, следя за тем, не появилось ли новое сообщение. При его обнаружении вызывается подпрограмма, ответственная за обработку соответствующего события (обрабатываются не все события, их сотни, а только нужные), и подобный цикл опроса продолжается, пока не будет получено сообщение «Завершить работу».
События могут быть пользовательскими, возникшими в результате действий пользователя, системными, возникающими в операционной системе (например, сообщения от таймера), и программными, генерируемыми самой программой (например, обнаружена ошибка и ее надо обработать).
Событийное программирование является развитием идей нисходящего проектирования, когда постепенно определяются и детализируются реакции программы на различные события.
Объектно-ориентированное программирование
Развитие идей структурного и событийного программирования существенно подняло производительность труда программистов и позволило в разумные сроки (несколько месяцев) создавать приложения объемом в сотни тысяч строк. Однако такой объем уже приблизился к пределу возможностей человека, и потребовались новые технологии разработки программ.
Объектно-ориентированное программирование базируется на понятиях объекта, класса и на трех ключевых концепциях -- инкапсуляции, наследовании и полиморфизме.
В языках программирования и реализовано понятие объекта как совокупности свойств (структур данных, характерных для этого объекта), и методов их обработки (подпрограмм изменения свойств) и событий, на которые данный объект может реагировать и которые приводят, как правило, к изменению свойств объекта.
Объекты могут иметь идентичную структуру и отличаться только значениями свойств. В таких случаях в программе создается новый тип, основанный на единой структуре объекта (по аналогии с тем, как создаются новые типы для структур данных). Он называется классом, а каждый конкретный объект, имеющий структуру этого класса, называется экземпляром класса.
Объединение данных c методами в одном типе (классе) называется инкапсуляцией. Помимо объединения, инкапсуляция позволяет ограничивать доступ к данным объектов и реализации методов классов. В результате у программистов появляется возможность использования готовых классов в своих приложениях на основе только описании этих классов.
Важнейшая характеристика класса -- возможность создания на его основе новых классов с наследованием всех его свойств и методов и добавлением собственных. Класс, не имеющий предшественника, называется базовым.
Например, класс «студент» имеет свойства «ФИО», «год поступления», методы «посещать занятия» и «сдавать экзамены». Созданный на его основе класс «студент-заочник» наследует все эти свойства и методы, к которым дополнительно добавляется свойство «место работы» и метод «приезжать на сессию» Наследование позволяет создавать новые классы, повторно используя уже готовый исходный код и не тратя времени на его переписывание.
В большинстве случаев методы базового класса у классов-наследников приходится переопределять -- объект класса «студент-заочник» выполняет метод «посещать занятия» совсем не так, как объект класса «студент-очник». Все переопределяемые методы по написанию (названию) будут совпадать с методами базового объекта, однако компилятор по типу объекта (его классу) распознает, какой конкретно метод надо использовать, и не вызовет для объекта класса «студент-заочник» метод «посещать занятия» класса «студент». Такое свойство объектов переопределять методы наследуемого класса и корректно их использовать называется полиморфизмом.
Визуальное программирование
Технологии объектного, событийного и структурного программирования сегодня объединены в RAD-системах, которые содержат множество готовых классов, представленных в виде визуальных компонентов, которые добавляются в программу одним щелчком мыши. Программисту надо только спроектировать внешний вид окон своего приложения и определить обработку основных событий -- какие операторы будут выполняться при нажатии на кнопки, при выборе пунктов меню или щелчках мышкой. Весь вспомогательный исходный код среда сгенерирует сама, позволяя программисту полностью сосредоточиться только на реализации алгоритма.
информационный компьютерный сеть
5.5 Программирование как вид деятельности
Появление первых компьютеров породило программирование как науку. Разрабатывались первые математические теории обработки информации, средства доказательства правильности программ, оптимизации кода, создания эффективных компиляторов, формального тестирования и т. д.
Затем, с появлением универсальных языков программирования третьего поколения, эти аспекты стали менее актуальными -- исследования шли и идут в основном в области автоматической генерации исходных текстов и повышения эффективности компиляторов. Программирование превратилось в искусство -- миллионы людей, не имевших специального образования, получили возможности применять компьютеры для решения собственных прикладных задач, что потребовало от них мастерства создавать правильно работающие программы. Искусством программирование остается и сегодня для профессиональных разработчиков и любителей, создающих программы в одиночку или в небольших компаниях, где все решает индивидуальное мастерство.
Вместе с тем, при росте спроса со стороны государственных и частных организаций на все более и более сложные системы автоматизации предприятий, надежные операционные среды, комплексы глобального телекоммуникационного управления, возникла необходимость в постановке процесса разработки программного обеспечения (ПО) на поток, превращения программирования в ремесло. Было разработано несколько методологий и стандартов, позволивших эффективно организовывать труд сотен программистов средней квалификации, точно укладываться в отпущенные сроки и средства и не зависеть от настроения нескольких талантливых ведущих специалистов. Отрицательная сторона подобных методологий - отсутствие творческого элемента в работе и своеобразная конвейерная «потогонная» система промышленного производства программ, которая, будучи внедренной в организации, в условиях жесточайшего дефицита программистов во всем мире может только отпугнуть сотрудников.
Когда на свет появились первые компьютеры, одна минута их работы стоила очень дорого, а задачи решались достаточно простые, поэтому в расходах на подготовку программ труд разработчиков составлял небольшую часть. С появлением ПК и ростом спроса на большие программные системы практически всю расходную часть проекта стала составлять зарплата программистов. Большой процент таких проектов заканчивается неудачно, а расходы на них очень велики, поэтому проблемы создания качественного программного обеспечения точно в срок и в рамках бюджета сегодня самые важные и над созданием эффективных методологий производства ПО трудятся специалисты во всех развитых странах.
Методы маркетинга программного обеспечения
1) Коммерческое ПО. При создании программного продукта издатель, выполнив анализ рынка, заказывает у исполнителя разработку такого ПО, которое должно пользоваться на рынке спросом, и выделяет на его создание деньги. По окончании работ издатель получает все имущественные права на созданный продукт (право на тиражирование, продажу под собственной торговой маркой, право на получение дохода от программы любым способом). При этом может быть оговорено получение исполнителем некоторого процента (роялти) с каждой проданной копии (как правило, для программ, издающихся сотнями тысяч или миллионами копий, роялти составляет 1-3%) -- тогда он получает меньшую сумму на разработку или вообще создает программу за свой счет. Если же отчисления не предусмотрены, то все расходы по подготовке программы издатель берет на себя. Он также вкладывает средства в упаковку, рекламную кампанию, организацию сетей сбыта и т. д. Издатель обеспечивает расходы, связанные с сопровождением продукта и технической поддержкой пользователей.
За исполнителем навечно остаются авторские права на программу -- право указывать свое имя или логотип своей фирмы на начальной заставке, в документации, на упаковочной коробке.
Крупные компании имеют и подразделения разработки ПО, и отделы, занимающиеся его распространением, что помогает эффективно организовать весь процесс от производства программ до доставки их потребителю.
2) Условно-бесплатное ПО (shareware). В связи с активным развитием Интернета огромное число индивидуальных разработчиков получили возможность распространения своих программ по всему миру. Не имея средств на рекламные кампании, они предоставляют возможность получения ознакомительных версий их программ (демонстрационных или имеющих искусственные ограничения) через Интернет. Если человеку эта программа нравится, он оплачивает небольшую сумму и получает полную работоспособную версию.
В Интернете есть немало узлов, которые предлагают бесплатные услуги по размещению таких программ. Отечественным shareware-разработчикам можно порекомендовать сайт www.swrus.com, на котором можно найти множество материалов и форумов по всем вопросам организации shareware.
3) Бесплатное ПО (freeware, public domain). Такие программы не имеют никаких ограничений, однако автор может попросить заплатить ему некоторую сумму, не настаивая, впрочем, на этом (это метод freeware). Некоторые программы авторы называют «общественным достоянием» (public domain), ничего взамен не требуют и нередко распространяют такое ПО в исходных текстах.
Как правило, стимулом к созданию бесплатных программ служит стремление повысить собственную квалификацию, установить контакты с коллегами, а в случае удачно созданной программы получить известность.
Вопросы для подготовки к контрольной работе по темам «Модели решения задач», «Алгоритмизация», «Программирование»
1. Модели решения задач:
1.1. Этапы решения задач на ЭВМ - их названия и суть.
1.2. Шаги построения информационной модели.
1.3. Уметь построить математическую модель простой вычислительной задачи.
2. Алгоритмизация:
2.1. Понятия алгоритма, исполнителя, формального исполнителя, системы команд исполнителя.
2.2. Свойства алгоритма.
2.3. Формы представления алгоритмов - уметь строить и «читать» блок-схемы и алгоритмы на псевдокоде.
2.4. Основные типы алгоритмов - линейный, разветвляющийся (полное и неполное ветвление), циклический (с предусловием и постусловием) - уметь изобразить блок-схему и применять для построения алгоритмов.
3. Программирование:
3.1. Понятия программы, языка программирования, его синтаксиса и семантики.
3.2. Понятие и виды трансляторов (интерпретаторы и компиляторы), их достоинства и недостатки.
3.3. Типы языков программирования «по уровням» (машинные коды, ассемблер, языки высокого уровня) - понятия, особенности, применение.
3.4. Классификация языков программирования с точки зрения принципов программирования (процедурные, функциональные, логические) - основные идеи, примеры.
3.5. Типы программирования (алгоритмическое, структурное, событийно-ориентированное, объектно-ориентированное, визуальное) - знать основные принципы.
3.6. Методы маркетинга программного обеспечения (коммерческое, условно бесплатное, бесплатное) - знать суть.
VI. Базы данных
6.1 Базы данных (БД), системы управления базами данных (СУБД)
В широком смысле слова база данных (БД) - это совокупность сведений об объектах реального мира в какой-либо предметной области. Для удобной работы с данными их необходимо структурировать, т. е. ввести определенные соглашения о способах их представления.
База данных (в специальном смысле слова) -- совокупность данных, организованных по определенным правилам, предусматривающим общие принципы описания, хранения и манипулирования данными, независимая от прикладных программ.
Между собственно данными и пользователями располагается уровень программного обеспечения. Ядром его является система управления базами данных (database management system - DBMS), или диспетчер БД (database manager).
Система управления базами данных (СУБД) - это комплекс программных и языковых средств, реализующих создание баз данных, поддержание их в актуальном состоянии, а также обеспечивающих различным категориям пользователей возможность получать из БД необходимую информацию.
Выделяют следующие функции, реализуемые СУБД:
· организация и поддержка логической структуры данных;
· организация и поддержка физической структуры данных во внешней памяти;
· организация доступа к данным и их обработка в оперативной и внешней памяти.
Основная особенность СУБД как вида программного обеспечения (ПО) ЭВМ заключается в том, что являясь прикладным программным обеспечением, они выполняют и системные функции - расширяют возможности файловых систем системного ПО.
СУБД поддерживает пользовательские операции высокого уровня, т. е. предоставляет возможности работы с БД, не вникая в детали на уровне аппаратного обеспечения. Сюда включены и операции, которые можно выполнить с помощью языка SQL.
SQL - это специальный язык БД. Сейчас он поддерживается большинством СУБД и является официальным стандартом языка для работы с реляционными системами. Название SQL вначале было аббревиатурой от Structured Query Language (язык структурированных запросов), сейчас название языка уже не считается аббревиатурой, так как функции его расширились и не ограничиваются только созданием запросов.
СУБД не единственный компонент ПО для работы с БД, хотя и наиболее важный. Среди других - утилиты, средства разработки приложений, средства проектирования, генераторы отчетов и т. д.
Наибольшее распространение получили реляционные БД и, соответственно, реляционные СУБД.
6.2 Реляционные базы данных
Любая модель данных, в том числе и реляционная, включает три взаимосвязанные составляющие, которые кратко можно назвать объекты (структурная составляющая), целостность данных (целостная составляющая) и операторы (манипуляционная составляющая).
Реляционные объекты данных
Существует специальная терминология, принятая в теории реляционных БД (рис. 13).
Отношением называется вся таблица, отвечающая определенным свойствам (о которых более подробно - ниже).
Отношение характеризуется следующими понятиями:
Поле (атрибут) соответствует столбцу этой таблицы, а именно - свойствам объектов, сведения о которых хранятся в ней.
Степень отношения - количество полей отношения.
Запись (кортеж) соответствует заполненной строке таблицы.
Кардинальное число - количество записей в отношении в текущий момент времени.
Первичный ключ - это поле (или множество полей), значения которого уникально идентифицируют записи. Значения элементов первичного ключа не должны быть пустыми. Первичный ключ не должен быть избыточен.
Например, если надо в таблицу поместить сведения о студентах, то первичным ключом может быть поле НомерЗачетнойКнижки или НомерСтуденческогоБилета, но не оба вместе.
Домен - это общая совокупность значений, из которой берутся значения для конкретного поля. На практике домены часто не описывают явно, а задают типом, форматом и другими свойствами полей. Каждое поле должно быть определено на единственном домене.
Для всех отношений должны выполняться следующие свойства.
1. Нет одинаковых записей.
Следствие этого свойства: в отношении всегда существует первичный ключ.
2. Записи неупорядочены.
3. Поля не упорядочены.
4. Все значения полей неделимы.
Для обозначения таблицы (отношения) и его полей условимся использовать следующую запись:
ИмяТаблицы (ИмяПоля1, ИмяПоля2, …, ИмяПоляN),
где будем подчеркивать поля, входящие в первичный ключ, и где N - степень таблицы (отношения).
Проектирование реляционных баз данных
Проектирование связано с построением логической структуры БД. Иными словами, нужно решить вопрос, какие базовые таблицы, с какими полями следует задать. Суть этой проблемы сводится, в конечном счете, к нормализации отношений. Нормализация отношений основана на понятии функциональной зависимости.
Процесс нормализации отношений основан на концепции нормальных форм.
Говорят, что отношение находится в некоторой нормальной форме (НФ), если оно удовлетворяет заданному набору условий.
Известно несколько НФ: первая нормальная форма (1НФ), вторая нормальная форма (2НФ), третья нормальная форма (3НФ), нормальная форма Бойса-Кодда (НФБК), четвертая нормальная форма (4НФ), пятая нормальная форма (5НФ). Причем все условия, необходимые для некоторой НФ, должны выполняться и для всех последующих НФ.
Возникает вопрос, можно ли продолжить нормализацию дальше, получить 6-ю, 7-ю и т. д. НФ? Действительно, существуют дополнительные НФ, но 5НФ считается во многих смыслах окончательной. А для практического проектирования достаточной считают 3НФ. Поэтому рассмотрим только три первые нормальные формы.
Отношение находится в 1НФ тогда и только тогда, когда значения всех полей неделимы.
Например, в отношении Студенты не должно быть поля Дисциплины, так как его значением будет перечисление всех изучаемых студентом дисциплин, т.е. значение делимо.
Отношение находится во 2НФ тогда и только тогда, когда оно находится в 1НФ и каждое неключевое поле зависит от всего первичного ключа.
Например, рассмотрим отношение Успеваемость (НомерЗачетнойКнижки, Фамилия, Имя, Отчество, Дисциплина, Оценка).
Если первичным ключом здесь назначить НомерЗачетнойКнижки, то от него не будет зависеть поле Дисциплина. В этом случае отношение не находится во 2НФ.
Можно тогда в качестве первичного ключа взять множество полей {НомерЗачетнойКнижки, Дисциплина}. От такого ключа зависят все поля, но поля Фамилия, Имя, Отчество зависят только от поля НомерЗачетнойКнижки.
И при таком первичном ключе отношение не находится во 2НФ.
Чтобы получить отношения во 2НФ, произведем разбиение на два отношения:
Студенты (НомерЗачетнойКнижки, Фамилия, Имя, Отчество)
Успеваемость1 (НомерЗачетнойКнижки, Дисциплина, Оценка).
Отношение находится в 3НФ тогда и только тогда, когда оно находится во 2НФ и каждое неключевое поле напрямую зависит от первичного ключа.
Например, рассмотрим отношение Студенты (НомерЗачетнойКнижки, Фамилия, Имя, Отчество, Группа, Специальность). Тогда получается, что поле Специальность зависит от первичного ключа не напрямую, а через поле Группа.
Проведем разбиение на два отношения:
Группы (КодГруппы, Специальность) и
Студенты1 (НомерЗачетнойКнижки, Фамилия, Имя, Отчество, КодГруппы)
Полученные отношения в 3НФ.
Если отношение не находится ни во 2НФ, ни в 3НФ, существует избыточность, которая приводит к нарушению целостности данных.
Связи в реляционных базах данных
В БД отношения могут быть связаны друг с другом. Например, в БД Факультет отношение Студенты (НомерЗачетнойКнижки, Фамилия, Имя, Отчество, КодГруппы) связано с отношением Группы (КодГруппы, Специальность, Курс). Значение поля КодГруппы в отношении Студенты допустимо только в том случае, если такое значение имеется в качестве значения первичного ключа отношения Группы. В этом случае поле КодГруппы в отношении Студенты является внешним ключом, ссылающимся на первичный ключ - КодГруппы отношения Группы (см. рис. 14).
Размещено на http://www.allbest.ru/
Значение внешнего ключа является ссылкой к записи, содержащей соответствующее значение первичного ключа. Отношение, содержащее внешний ключ, называется ссылающимся (подчиненным), а отношение, содержащее объект ссылки (первичный ключ) - ссылочным (главным).
Размещено на http://www.allbest.ru/
Внешние ключи реализуют следующие три типа связей между двумя отношениями.
1. Один-к-одному: каждой записи первого отношения соответствует не более одной записи второго отношения, а каждой записи второго отношения - не более одной записи первого отношения. Например - см. рис. 15.
2. Один-ко-многим: каждой записи ссылочного (главного) отношения соответствует ноль, одна или несколько записей ссылающегося (подчиненного) отношения, а каждой записи ссылающегося (подчиненного) отношения соответствует только одна запись ссылочного (главного) отношения. Пример - см. рис. 14.
3. Многие-ко-многим: каждой записи первого отношения соответствует ноль, одна или несколько записей второго отношения, и каждой записи второго отношения соответствует ноль, одна или несколько записей первого отношения. В реляционной модели данных такая связь напрямую не реализуется - она может быть смоделирована разбиением на две связи типа один-ко-многим: вводится дополнительное отношение, в качестве полей которого задаются первичные ключи связываемых отношений. Причем в этом дополнительном отношении первичный ключ будет составным, включающим оба первичных ключа. Пример - см. рис. 16.
Размещено на http://www.allbest.ru/
VII. Программное обеспечение ЭВМ
7.1 Основные понятия. Программный продукт
Возможности компьютера как технической основы системы обработки данных связаны с используемым программным обеспечением (программами).
Программа -- упорядоченная последовательность команд (инструкций) компьютера для решения задачи.
Программное обеспечение -- совокупность программ обработки данных и необходимых для их эксплуатации документов.
Программы предназначены для машинной реализации задач. Термины задача и приложение имеют очень широкое употребление в контексте информатики и программного обеспечения (ПО).
Задача -- проблема, подлежащая решению.
Приложение -- программная реализация на компьютере решения задачи.
Существует большое число разнообразных классификаций задач. С позиций специфики разработки и вида программного обеспечения будем различать два класса задач -- технологические и функциональные.
Технологические задачи ставятся и решаются при организации технологического процесса обработки информации на компьютере. Технологические задачи являются основой для разработки сервисных средств программного обеспечения в виде утилит, сервисных программ, библиотек процедур и др., применяемых для обеспечения работоспособности компьютера, разработки других программ или обработки данных функциональных задач.
...Подобные документы
История развития ОАО "Мобильные ТелеСистемы", характер и направления реализации информационных процессов на нем. Возможные угрозы и их анализ. Неформальная модель нарушителя. Нормативно-правовой, организационный и инженерно-технический элемент защиты.
курсовая работа [39,8 K], добавлен 23.12.2013Технология сбора информации традиционными методами. Правила сбора оффлайновой информации. Технические средства сбора информации. Операции для быстрого восстановления данных в системах хранения. Технологический процесс и процедуры обработки информации.
курсовая работа [304,5 K], добавлен 02.04.2013Назначение и классификация компьютерных сетей. Распределенная обработка данных. Классификация и структура вычислительных сетей. Характеристика процесса передачи данных. Способы передачи цифровой информации. Основные формы взаимодействия абонентских ЭВМ.
контрольная работа [36,8 K], добавлен 21.09.2011Виды угроз безопасности в экономических информационных системах: цель, источники, средства реализации. Основные пути несанкционированного доступа к информации. Методы и средства защиты, используемые в АИТ маркетинговой деятельности, их классификация.
реферат [30,1 K], добавлен 12.03.2011Методы и средства защиты информационных данных. Защита от несанкционированного доступа к информации. Особенности защиты компьютерных систем методами криптографии. Критерии оценки безопасности информационных компьютерных технологий в европейских странах.
контрольная работа [40,2 K], добавлен 06.08.2010Содержательный и кибернетический подходы к определению и измерению информации. Кодирование символьной информации в компьютере. Линия информации и информационных процессов. Обзор процесса передачи информации по техническим каналам связи. Языки информатики.
презентация [173,0 K], добавлен 19.10.2014Комплексный подход в обеспечении информационной безопасности. Анализ процессов разработки, производства, реализации, эксплуатации средств защиты. Криптографические средства защиты информации. Основные принципы инженерно-технической защиты информации.
курсовая работа [725,1 K], добавлен 11.04.2016Необходимость защиты информации. Виды угроз безопасности ИС. Основные направления аппаратной защиты, используемые в автоматизированных информационных технологиях. Криптографические преобразования: шифрование и кодирование. Прямые каналы утечки данных.
курсовая работа [72,1 K], добавлен 22.05.2015Необходимость и потребность в защите информации. Виды угроз безопасности информационных технологий и информации. Каналы утечки и несанкционированного доступа к информации. Принципы проектирования системы защиты. Внутренние и внешние нарушители АИТУ.
контрольная работа [107,3 K], добавлен 09.04.2011Устройство компьютерных сетей. Системы для передачи информации, состоящие из терминалов, серверов и коммуникационной среды. Технические, программные и информационные средства сетей. Классификация компьютерных сетей. Сетевые операционные системы.
курсовая работа [3,7 M], добавлен 10.07.2014Особенности информационных технологий - совокупности методов и средств реализации операций сбора, регистрации, передачи, накопления и обработки информации на базе программно-аппаратного обеспечения для решения управленческих задач экономического объекта.
контрольная работа [28,4 K], добавлен 05.04.2010Изучение общих понятий теории систем и системного анализа. Методика построения объектных репозиториев открытых информационных систем. Принципы восприятия визуальной информации. Средства визуального моделирования рабочих процессов по интеграции данных.
курсовая работа [195,1 K], добавлен 04.06.2015Классификация информации по значимости. Категории конфиденциальности и целостности защищаемой информации. Понятие информационной безопасности, источники информационных угроз. Направления защиты информации. Программные криптографические методы защиты.
курсовая работа [1,1 M], добавлен 21.04.2015Способы и средства защиты информации от несанкционированного доступа. Особенности защиты информации в компьютерных сетях. Криптографическая защита и электронная цифровая подпись. Методы защиты информации от компьютерных вирусов и от хакерских атак.
реферат [30,8 K], добавлен 23.10.2011Развитие новых информационных технологий и всеобщая компьютеризация. Информационная безопасность. Классификация умышленных угроз безопасности информации. Методы и средства защиты информации. Криптографические методы защиты информации.
курсовая работа [25,9 K], добавлен 17.03.2004Понятие информационных процессов и технологий. Сбор и неосознанная и осознанная обработка информации человеком. Схема передачи ее от источника к получателю. Материальная природа носителей информации. Способы ее хранения и механизмы защиты, методы поиска.
презентация [1,2 M], добавлен 11.03.2015Разработка программного обеспечения для реализации криптографической защиты информации. Обоснование выбора аппаратно-программных средств. Проектирование модели информационных потоков данных, алгоритмического обеспечения, структурной схемы программы.
дипломная работа [2,0 M], добавлен 10.11.2014Проблемы и угрозы информационной безопасности. Защищенность информации и поддерживающей инфраструктуры от случайных или преднамеренных посторонних воздействий. Средства защиты информационных систем. Метод SSL-шифрования информации, типы сертификатов.
презентация [280,0 K], добавлен 10.11.2013Технические средства защиты информации. Основные угрозы безопасности компьютерной системы. Средства защиты от несанкционированного доступа. Системы предотвращения утечек конфиденциальной информации. Инструментальные средства анализа систем защиты.
презентация [3,8 M], добавлен 18.11.2014Анализ организационной структуры ОАО "МегаФон". Информационные потоки отделов. Исследование процессов защиты информации отделов. Классификация информации по видам тайн. Модель нарушителя, каналы утечки информации. Исследование политики безопасности.
курсовая работа [778,8 K], добавлен 07.08.2013