Разработка приложения "Таймер" для отключения компьютера

 

Содержание


Введение

Глава 1 Общие сведения о гаджетах - таймерах

.1История возникновения различных таймеров

1.2Применение

.3Интересные факты

.4История развития языков программирования. Ранние этапы развития

.5Совершенствование

.6Объединение и развитие

.7Языки программирования системного уровня

.8Языки программирования более высокого уровня

Глава 2 Описание основных принципов создания приложения для выключения компьютера приложением «Таймер»

.1 Компоненты использованные для создания приложения

2.2 Интерфейс приложения

2.3 Описание кода программы

Заключение

Список использованной литературы

Листинг программы

Приложение (диск с программой)




Введение


Целью данной курсовой работы является разработка приложения для отключения компьютера по определенному времени, а также отмены отключения, показа времени начала работы программы и автозагрузки программы. Для реализации этой цели были поставлены следующие задачи:

·Обзор и анализ литературы и других источников по теме данной курсовой работы

·Создание интерфейса приложения

·Написание соответсвующего кода программы для работы приложения

·Тестирование приложения, отладка и анализ ошибок

Актуальность крусовой работы обуславливается тем, что данное приложение нашло примение у многих пользователей, где требуется отключение компьютера через определенное время, не требующее присутвия пользователя программы.

Курсовая работа состоит из следующих частей: Введение, двух частей, заключение, списка использованной литературы и приложений.

В первой части приведен теоретический материал по отключению компьютера и начала работы таймера.

Во второй части дается описание по разработке и созданию приложения для отключения компьютера.

В настоящее время применяются большей частью электронные цифровые таймеры, по принципу действия аналогичные электронным часам, вместе с тем, остаются ещё и механические таймеры, базовым элементом которых является часовой механизм, а также электромеханические, основой которых является реле времени <http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%BB%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B8>. Теоретически возможно построение простых таймеров на каких-либо других принципах (электрохимический счётчик времени, аналоговый электронный счётчик), однако на практике такие устройства не используются. Для автоматизации работ на персональном компьютере применяются программно реализованные таймеры или сетевые сервисы, например, OnlineТаймер <#"justify">Глава 1. История возникновения различных таймеров


.1 История возникновения и развития секундомера


Часы <http://ru.wikipedia.org/wiki/%D0%A7%D0%B0%D1%81%D1%8B> известны человеку очень давно. Сначала их роль играло солнце, потом вода, песок, даже огонь. Но ни о какой точности таких измерений говорить не приходилось. Такие измерения давали погрешность от нескольких минут до получаса. Ситуация несколько исправляется с появлением механических часов. Сначала появилась возможность находить время с точностью до минуты, с появлением секундной стрелки - до секунды. Но все равно таким часам было далеко до настоящего секундомера. Их, к примеру, нельзя было остановить и запустить в произвольный момент. И точность измерений была далека от идеала. Упоминания о первых «настоящих» секундомерах появляются в конце 17-начале 18 веков.

Насколько можно судить, это были практически такие же приборы, что использовались до середины XX века, то есть механические секундомеры. С началом активного развития электроники появляются электронные секундомеры.

Таймер (от англ. <http://ru.wikipedia.org/wiki/%D0%90%D0%BD%D0%B3%D0%BB%D0%B8%D0%B9%D1%81%D0%BA%D0%B8%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA> Timer) - в информатике средство обеспечения задержек и измерения времени <http://ru.wikipedia.org/wiki/%D0%92%D1%80%D0%B5%D0%BC%D1%8F> средствами компьютера <http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80>.

Главной характеристикой таймера является его точность - минимальный гарантированно выдерживаемый интервал времени. По этому параметру таймеры делят на:

·малоточные (ошибка измерения может достигать 0,1 с)

·точные (ошибка измерения не превышает 0,001 с)

·сверхточные (ошибка измерения не превышает 10?6 c)

Существуют два вида таймеров:

·Аппаратные таймеры функционируют независимо от центрального процессора <http://ru.wikipedia.org/wiki/%D0%A6%D0%B5%D0%BD%D1%82%D1%80%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80> и в момент срабатывания генерируют прерывание <http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D1%80%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5>.

·Программные таймеры реализуются за счёт выполнения в цикле заданного количества одинаковых «пустых» операций. При фиксированной частоте работы процессора это позволяет точно определять прошедшее время. Главными минусами такого метода являются: зависимость количества итераций цикла от типа и частоты процессора, невозможность выполнения других операций во время задержки.


.2 Применение


·В научных лабораториях

·В заводских лабораториях

·В учебных лабораториях ВУЗов, техникумов и школ

·В спорте

·В военном деле (засекание времени хода торпеды, определение момента поражения торпедой цели)

В первую очередь секундомеры используются в спорте для точного измерения отрезка времени, потребовавшегося спортсмену для проведения некого упражнения, например в спринте <http://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D1%80%D0%B8%D0%BD%D1%82_(%D0%BB%D1%91%D0%B3%D0%BA%D0%B0%D1%8F_%D0%B0%D1%82%D0%BB%D0%B5%D1%82%D0%B8%D0%BA%D0%B0)> или плавании <http://ru.wikipedia.org/wiki/%D0%9F%D0%BB%D0%B0%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_(%D1%81%D0%BF%D0%BE%D1%80%D1%82)>.

·В быту (на кухне, для определения времени готовки пищи)


1.3 Интересные факты


Цветочные часы (дар г. Женевы к 300-летию основания Санкт-Петербурга в мае 2003)

На разных этапах развития цивилизации человечество использовало солнечные, звёздные, водяные, огневые, песочные, колёсные, механические, электрические, электронные и атомные часы.

·Направление движения стрелок часов «по часовой стрелке» и «против часовой стрелки» <http://ru.wikipedia.org/wiki/%D0%9F%D0%BE_%D1%87%D0%B0%D1%81%D0%BE%D0%B2%D0%BE%D0%B9_%D1%81%D1%82%D1%80%D0%B5%D0%BB%D0%BA%D0%B5_%D0%B8_%D0%BF%D1%80%D0%BE%D1%82%D0%B8%D0%B2_%D1%87%D0%B0%D1%81%D0%BE%D0%B2%D0%BE%D0%B9_%D1%81%D1%82%D1%80%D0%B5%D0%BB%D0%BA%D0%B8> используется для указания направления кругового движения.

·Традиционное направление движения часовой стрелки совпадает с направлением, в котором движется тень горизонтальных солнечных часов, расположенных в северном полушарии Земли. Однако, существуют часы, у которых стрелки движутся «против часовой стрелки» (как у солнечных настенных).

·На циферблатах с римскими цифрами четвёртый час иногда обозначают как IIII вместо IV.[7] <http://ru.wikipedia.org/wiki/%D0%A7%D0%B0%D1%81%D1%8B>

·На рекламе стрелочных часов обычно около 10:10 или 8:20. Это делается для того, чтобы стрелки не закрывали название. Кроме того, время 10:10 на часах в витрине напоминают улыбочку (смайлик), что положительно влияет на лояльность покупателя[8] <http://ru.wikipedia.org/wiki/%D0%A7%D0%B0%D1%81%D1%8B>.

·Условный циферблат часов часто используется при ориентировании на местности для указания цели, маршрута или направления при взаимодействии подразделений (как правило американской армии) или отдельных наблюдателей. Направление объекта (или маршрута) указывается цифрой циферблата, угловому значению которого он соответствует относительно положения наблюдателя, как если бы циферблат представлялся горизонтально, его центр совпадал с наблюдателем, а 12 часов указывало текущее направление движения (или взгляда) самого наблюдателя. Так, объект находящийся строго справа, будет обозначен как «на 3 часа». После указания направления добавляется цифра, характеризующая расстояние до объекта.

·В Москве XVII века <http://ru.wikipedia.org/wiki/XVII_%D0%B2%D0%B5%D0%BA> на часах Спасской башни <http://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B0%D1%81%D1%81%D0%BA%D0%B0%D1%8F_%D0%B1%D0%B0%D1%88%D0%BD%D1%8F> двигалась не единственная часовая стрелка, а циферблат.


.4 История развития языков программирования. Ранние этапы развития


Можно сказать, что первые языки программирования возникали еще до появления современных электронных вычислительных машин: уже в XIX веке <http://ru.wikipedia.org/wiki/XIX_%D0%B2%D0%B5%D0%BA> были изобретены устройства, которые можно с долей условности назвать программируемыми - к примеру,механические пианино <http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%BF%D0%B8%D0%B0%D0%BD%D0%B8%D0%BD%D0%BE> и ткацкие станки <http://ru.wikipedia.org/wiki/%D0%A2%D0%BA%D0%B0%D1%86%D0%BA%D0%B8%D0%B9_%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%BA>. Для управления ими использовались наборы инструкций, которые в рамках современной классификации можно считать прототипами предметно-ориентированных языков программирования <http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F>. Значимым можно считать «язык», на котором леди Ада Августа графиня Лавлейс <http://ru.wikipedia.org/wiki/%D0%9B%D0%B0%D0%B2%D0%BB%D0%B5%D0%B9%D1%81,_%D0%90%D0%B4%D0%B0> написала программу для вычисления чисел Бернулли <http://ru.wikipedia.org/wiki/%D0%A7%D0%B8%D1%81%D0%BB%D0%B0_%D0%91%D0%B5%D1%80%D0%BD%D1%83%D0%BB%D0%BB%D0%B8> для Аналитической машины Чарльза Бэббиджа <http://ru.wikipedia.org/wiki/%D0%91%D1%8D%D0%B1%D0%B1%D0%B8%D0%B4%D0%B6,_%D0%A7%D0%B0%D1%80%D0%BB%D1%8C%D0%B7>, ставшей бы, в случае реализации, первым компьютером - хотя и механическим, с паровым двигателем - в мире.

В 1930 <http://ru.wikipedia.org/wiki/1930-%D0%B5_%D0%B3%D0%BE%D0%B4%D1%8B>-1940 годах <http://ru.wikipedia.org/wiki/1940-%D0%B5_%D0%B3%D0%BE%D0%B4%D1%8B>, А. Чёрч <http://ru.wikipedia.org/wiki/%D0%A7%D1%91%D1%80%D1%87,_%D0%90%D0%BB%D0%BE%D0%BD%D0%B7%D0%BE>, А. Тьюринг <http://ru.wikipedia.org/wiki/%D0%A2%D1%8C%D1%8E%D1%80%D0%B8%D0%BD%D0%B3,_%D0%90%D0%BB%D0%B0%D0%BD>, А. Марков <http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2,_%D0%90%D0%BD%D0%B4%D1%80%D0%B5%D0%B9_%D0%90%D0%BD%D0%B4%D1%80%D0%B5%D0%B5%D0%B2%D0%B8%D1%87_(%D0%BC%D0%BB%D0%B0%D0%B4%D1%88%D0%B8%D0%B9)> в СССР разработали математические абстракции (лямбда-исчисление <http://ru.wikipedia.org/wiki/%D0%9B%D1%8F%D0%BC%D0%B1%D0%B4%D0%B0-%D0%B8%D1%81%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5>, машину Тьюринга <http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D0%A2%D1%8C%D1%8E%D1%80%D0%B8%D0%BD%D0%B3%D0%B0>, нормальные алгорифмы <http://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC>) соответственно - для формализации алгоритмов <http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC>.

В это же время, в 1940-е годы, появились электрические цифровые компьютеры и был разработан язык, который можно считать первым высокоуровневым языком программирования для ЭВМ - «Plankalkül <http://ru.wikipedia.org/wiki/Plankalk%C3%BCl>», созданный немецким инженером К. Цузе <http://ru.wikipedia.org/wiki/%D0%A6%D1%83%D0%B7%D0%B5,_%D0%9A%D0%BE%D0%BD%D1%80%D0%B0%D0%B4> в период с1943 <http://ru.wikipedia.org/wiki/1943_%D0%B3%D0%BE%D0%B4> по 1945 годы <http://ru.wikipedia.org/wiki/1945_%D0%B3%D0%BE%D0%B4>[2] <http://ru.wikipedia.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F>.

Программисты ЭВМ начала 1950-х годов <http://ru.wikipedia.org/wiki/1950-%D0%B5_%D0%B3%D0%BE%D0%B4%D1%8B>, в особенности таких, как UNIVAC <http://ru.wikipedia.org/wiki/UNIVAC> и IBM 701, при создании программ <http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_(%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80)> пользовались непосредственно машинным кодом <http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4>, запись программы на котором состояла из единиц и нулей и который принято считать языком программирования первого поколения (при этом разные машины разных производителей использовали различные коды, что требовало переписывать программу при переходе на другую ЭВМ). Вскоре на смену такому методу программирования пришло применение языков второго поколения, также ограниченных спецификациями конкретных машин <http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80>, но более простых для использования человеком за счет использования мнемоник (символьных обозначений машинных команд) и возможности сопоставления имен адресам в машинной памяти. Они традиционно известны под наименованием языков ассемблера <http://ru.wikipedia.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%B0%D1%81%D1%81%D0%B5%D0%BC%D0%B1%D0%BB%D0%B5%D1%80%D0%B0> и автокодов <http://ru.wikipedia.org/wiki/%D0%90%D0%B2%D1%82%D0%BE%D0%BA%D0%BE%D0%B4>. Однако, при использовании ассемблера становился необходимым процесс перевода программы на язык машинных кодов перед ее выполнением, для чего были разработаны специальные программы, также получившие название ассемблеров. Сохранялись и проблемы с переносимостью программы с ЭВМ одной архитектуры на другую, и необходимость для программиста при решении задачи мыслить терминами «низкого уровня» - ячейка, адрес, команда. Позднее языки второго поколения были усовершенствованы: в них появилась поддержка макрокоманд <http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D0%BA%D1%80%D0%BE%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B0>.

С середины 1950-х начали появляться языки третьего поколения, такие как Фортран <http://ru.wikipedia.org/wiki/%D0%A4%D0%BE%D1%80%D1%82%D1%80%D0%B0%D0%BD>, Лисп <http://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D1%81%D0%BF> и Кобол <http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B1%D0%BE%D0%BB>[3] <http://ru.wikipedia.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F>. Языки программирования этого типа более абстрактны (их еще называют «языками высокого уровня») и универсальны, не имеют жесткой зависимости от конкретной аппаратной платформы <http://ru.wikipedia.org/wiki/%D0%90%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%B0> и используемых на ней машинных команд. Программа на языке высокого уровня может исполняться (по крайней мере, в теории, на практике обычно имеются ряд специфических версий или диалектов реализации языка) на любой ЭВМ, на которой для этого языка имеется транслятор (инструмент, переводящий программу на язык машины, после чего она может быть выполнена процессором).

Обновленные версии перечисленных языков до сих пор имеют хождение в разработке программного обеспечения, и каждый из них оказал определенное влияние на последующее развитие языков программирования[4] <http://ru.wikipedia.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F>. Тогда же, в конце 1950-х годов, появился Алгол <http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D0%BB>, также послуживший основой для ряда дальнейших разработок в этой сфере. Необходимо заметить, что на формат и применение ранних языков программирования в значительной степени влияли интерфейсные <http://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81> ограничения[5] <http://ru.wikipedia.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F>.


.5 Совершенствование


В период 1960 <http://ru.wikipedia.org/wiki/1960-%D0%B5_%D0%B3%D0%BE%D0%B4%D1%8B>-1970-х годов <http://ru.wikipedia.org/wiki/1970-%D0%B5_%D0%B3%D0%BE%D0%B4%D1%8B> были разработаны основные парадигмы языков программирования, используемые в настоящее время, хотя во многих аспектах этот процесс представлял собой лишь улучшение идей и концепций, заложенных еще в первых языках третьего поколения.

·Язык APL <http://ru.wikipedia.org/wiki/APL_(%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)> оказал влияние на функциональное программирование <http://ru.wikipedia.org/wiki/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5> и стал первым языком, поддерживавшим обработку массивов <http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)>[6] <http://ru.wikipedia.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F>.

·Язык ПЛ/1 <http://ru.wikipedia.org/wiki/%D0%9F%D0%9B/1> (NPL) был разработан в 1960-х годах как объединение лучших черт Фортрана и Кобола.

·Язык Симула <http://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%BC%D1%83%D0%BB%D0%B0>, появившийся примерно в это же время, впервые включал поддержку объектно-ориентированного программирования <http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5>. В середине 1970-х группа специалистов представила язык Smalltalk <http://ru.wikipedia.org/wiki/Smalltalk>, который был уже всецело объектно-ориентированным.

·В период с 1969 <http://ru.wikipedia.org/wiki/1969_%D0%B3%D0%BE%D0%B4> по 1973 годы <http://ru.wikipedia.org/wiki/1973_%D0%B3%D0%BE%D0%B4> велась разработка языка Си <http://ru.wikipedia.org/wiki/%D0%A1%D0%B8_(%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)>, популярного и по сей день[7] <http://ru.wikipedia.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F> и ставшего основой для множества последующих языков, например, столь популярных, как С++ и Java.

·В 1972 году <http://ru.wikipedia.org/wiki/1972_%D0%B3%D0%BE%D0%B4> был создан Пролог <http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%BB%D0%BE%D0%B3_(%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)> - наиболее известный (хотя и не первый, и далеко не единственный) язык логического программирования <http://ru.wikipedia.org/wiki/%D0%9B%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5>.

·В 1973 году <http://ru.wikipedia.org/wiki/1973_%D0%B3%D0%BE%D0%B4> в языке ML <http://ru.wikipedia.org/wiki/ML> была реализована расширенная система полиморфной <http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D0%B8%D0%BC%D0%BE%D1%80%D1%84%D0%B8%D0%B7%D0%BC_(%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)> типизации <http://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2>, положившая начало типизированным языкам функционального программирования <http://ru.wikipedia.org/wiki/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5>.

Каждый из этих языков породил по семейству потомков, и большинство современных языков программирования в конечном счете основано на одном из них.

Кроме того, в 1960-1970-х годах активно велись споры о необходимости поддержки структурного программирования <http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5> в тех или иных языках[8] <http://ru.wikipedia.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F>. В частности, голландский специалист Э. Дейкстра <http://ru.wikipedia.org/wiki/%D0%94%D0%B5%D0%B9%D0%BA%D1%81%D1%82%D1%80%D0%B0,_%D0%AD%D0%B4%D1%81%D0%B3%D0%B5%D1%80_%D0%92%D0%B8%D0%B1%D0%B5> выступал в печати с предложениями о полном отказе от использования инструкций GOTO во всех высокоуровневых языках. Развивались также приемы, направленные на сокращение объема программ и повышение продуктивности работы программиста и пользователя.



1.6 Объединение и развитие


В 1980-е годы <http://ru.wikipedia.org/wiki/1980-%D0%B5_%D0%B3%D0%BE%D0%B4%D1%8B> наступил период, который можно условно назвать временем консолидации. Язык С++ <http://ru.wikipedia.org/wiki/%D0%A1%2B%2B> объединил в себе черты объектно-ориентированного и системного программирования, правительство США <http://ru.wikipedia.org/wiki/%D0%A1%D0%A8%D0%90> стандартизировало язык Ада <http://ru.wikipedia.org/wiki/%D0%90%D0%B4%D0%B0_(%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)>, производный от Паскаля <http://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%81%D0%BA%D0%B0%D0%BB%D1%8C_(%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)> и предназначенный для использования в бортовых системах управления военными объектами, в Японии <http://ru.wikipedia.org/wiki/%D0%AF%D0%BF%D0%BE%D0%BD%D0%B8%D1%8F> и других странах мира осуществлялись значительные инвестиции в изучение перспектив так называемых языков пятого поколения, которые включали бы в себя конструкции логического программирования[9] <http://ru.wikipedia.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F>. Сообщество функциональных языков приняло в качестве стандарта ML и Лисп. В целом этот период характеризовался скорее опорой на заложенный в предыдущем десятилетии фундамент, нежели разработкой новых парадигм.

Важной тенденцией, которая наблюдалась в разработке языков программирования для крупномасштабных систем, было сосредоточение на применении модулей - объемных единиц организации кода. Хотя некоторые языки, такие, как ПЛ/1, уже поддерживали соответствующую функциональность, модульная система нашла свое отражение и применение также и в языкахМодула-2 <http://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D0%B0-2>, Оберон <http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D0%B5%D1%80%D0%BE%D0%BD_(%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)>, Ада и ML. Часто модульные системы объединялись с конструкциями обобщенного программирования <http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D0%BE%D0%B1%D1%89%D1%91%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5>[10] <http://ru.wikipedia.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F>.

Важным направлением работ становятся визуальные (графические) языки программирования <http://ru.wikipedia.org/wiki/%D0%92%D0%B8%D0%B7%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5>, в которых процесс «написания» программы как текста заменяется на процесс «рисования» (конструирования программы в виде диаграммы) на экране ЭВМ. Визуальные языки обеспечивают наглядность и лучшее восприятие логики программы человеком.

В 1990-х годах <http://ru.wikipedia.org/wiki/1990-%D0%B5_%D0%B3%D0%BE%D0%B4%D1%8B> в связи с активным развитием Интернета <http://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82> распространение получили языки, позволяющие создавать сценарии для веб-страниц <http://ru.wikipedia.org/wiki/%D0%92%D0%B5%D0%B1-%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0> - главным образом Perl <http://ru.wikipedia.org/wiki/Perl>, развившийся из скриптового инструмента для Unix-систем, и Java <http://ru.wikipedia.org/wiki/Java_(%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)>. Возрастала также и популярность технологий виртуализации <http://ru.wikipedia.org/wiki/%D0%92%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F>. Эти изменения, однако, также не представляли собой фундаментальных новаций, являясь скорее совершенствованием уже существовавших парадигм и языков (в последнем случае - главным образом семейства Си).

В настоящее время развитие языков программирования идет в направлении повышения безопасности и надежности, создания новых форм модульной организации кода и интеграции с базами данных <http://ru.wikipedia.org/wiki/%D0%91%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85>.


.7 Языки программирования системного уровня


Чтобы осознать различие между языками описания сценариев и системными, полезно вспомнить историю развития последних. Впервые они появились в качестве альтернативы языкам ассемблера, позволяющим использовать в программе практически все особенности конкретной аппаратной подсистемы. Каждому утверждению такого языка соответствует ровно одна машинная команда, и программисту приходиться иметь дело с такими низко уровневыми деталями, как распределение регистров и последовательности вызова процедур. В результате написание и сопровождение крупных программ на языке ассемблера оказывается чрезвычайно сложным делом.

К концу 50-х годов начали появляться языки программирования более высокого уровня, такие как Lisp, Fortran, ALGOL. В них уже не было точного соответствия между языковыми конструкциями и машинными командами. Преобразование строк исходного кода в последовательности двоичных команд осуществлялось компилятором. Со временем их число пополнилось языками PL /1, Pascal, C, C++, Java. Все они менее эффективно используют аппаратуру по сравнению с языками ассемблера, но позволяет быстрее создавать приложения. В результате им удалось практически полностью вытеснить языки ассемблера при создании крупных приложении.



1.8 Языки программирования более высокого уровня


Языки программирования системного уровня отличаются от ассемблеров, во-первых, тем, что они являются более высокоуровневыми, и, во-вторых, используют более строгий контроль типов. Термин высокоуровневый означает следующее: многие детали обрабатываются автоматически, а программисту для создания своего приложения приходится писать меньшее количество строк. В частности:

Распределением регистров занимается компилятор, так что программисту не надо писать код, обеспечивающий перемещение данных между регистрами и памятью;

Последовательности вызова процедур генерируются автоматически; программисту нет необходимости описывать помещение аргументов функции в стек и их извлечение оттуда;

Для описания структур управления программист может использовать также ключевые слова, как if, while; последовательности машинных команд, соответствующие этим описаниям компилятор генерирует динамически.

Типизация

Второе различие между языками ассемблера и языками программирования системного уровня состоит в типизации. Я использую этот термин для обозначения того, до какой степени значение информации бывает определено еще прежде, чем приходит время ее использования в программе. В сильно типизированных языках требуется, чтобы программист заранее декларировал способ использования каждого фрагмента информации, и затем уже языковые средства препятствуют применению ее каким-либо иным способом. В слабо же типизированных языках на способ обработки информации не налагается предварительных ограничении; интерпретация каждого элемента данных определяется только тем, как он фактически используется, без учета каких-либо предварительных объявлении.

Современные компьютеры устроены таким образом, что им не известно понятие типа. Каждое слово памяти может содержать значение любого типа; целое число, число с плавающей запятой, указатель или машинную команду. Интерпретация значения определяется способом его использования. Если указатель следующей машинной команды указывает в процессе исполнения машинной команды на некоторое слово в памяти, то оно и рассматривается как команда; если адрес слова задан в параметрах команды целочисленного сложения, то его значение и обрабатывается как целое число; и т.д. Одно и то же слово памяти может использоваться в различных случаях разными способами.

В противоположность этому для современных языков программирования характерна строгая типизация. Каждая переменная в языке программирования системного уровня должна быть объявлена с указанием конкретного типа, такого как целое число или указатель на строку символов, и затем использоваться только соответствующими этому типу способами.

Данные и программный код разделены; создание нового кода по ходу исполнения программы затруднено, если вообще возможно. Переменные могут объединяться в структуры или объекты с четко определенной субструктурой и методами манипулирования своими компонентами. Объект одного типа не может быть использован в ситуации, где предписано применение объект другого типа.

Языки описания сценариев создавались для связывания готовых программ. Их применение подразумевает наличие достаточного ассортимента мощных компонентов, которые требуется только объединить друг с другом.

Типизация дает ряд преимуществ. Во-первых, крупные программы становятся благодаря ей более управляемыми. Четкость системы типов делает для программиста ясным, для чего предназначены те или иные данные; он легко может различать их между собой и соответственно использовать. Во-вторых, компиляторы используют информацию о типах для обнаружения некоторых видов ошибок, таких как попытка, использовать число с плавающей запятой в качестве указателя. В-третьих, типизация повышает производительность приложении, позволяя компиляторам генерировать более специализированный код. Например, если компилятору известно, что некоторая переменная всегда содержит целочисленные значения, он может генерировать для манипулирования ею целочисленные инструкции; если же тип переменой компилятору неизвестен, то приходиться вставлять дополнительные инструкции для проверки типа во время исполнения.

Языки описания сценариев

Языки описания сценариев, такие как Perl, Python, Rexx, Tcl, Visual Basic и языки оболочек UNIX, предполагают стиль программирования, весьма отличный от характерного для языков системного уровня. Они предназначаются не для написания приложений с нуля, а для комбинирования компонентов, набор которых создается заранее при помощи других языков. Например, Tcl, Visual Basic могут использоваться для построения пользовательских интерфейсов из имеющихся элементов управления, а языки описания сценариев для оболочек UNIX применяются для формирования конвейеров обработки потоков данных из набора стандартных фильтров. Языки описания сценариев часто применяются и для дополнения готовых компонентов новыми возможностями; однако эта деятельность редко охватывает создание сложных алгоритмов или структур данных, которые уже обычно бывают уже заложены в компоненты. Иногда языки описания сценариев даже называют связующими или языками системной интеграции.

Как правило, языки описания сценариев не типизированы

Для языков описания сценариев характерно отсутствие типизации, которая только усложнила бы задачу соединения компонентов. Все элементы в них выглядят и функционируют одинаково и являются полностью взаимозаменяемыми. Например, в Tcl или Visual Basic переменная может содержать в одной точке программы строку, а в другой - целое число. Код и данные также часто бывают взаимозаменяемы. Например, Tcl, Visual Basic переменная может содержать в одной точке программы строку, а в другой - целое число. Код и данные также часто бывают взаимозаменяемы, так что программа может генерировать другую программу -- и сразу же запускать ее исполнение. Обычно языки описания сценариев используют переменные строковых типов, которые обеспечивают единообразный механизм представления для различных сущностей.

Отсутствие в языке деления переменных на типы упрощает соединение компонентов между собой. Нет априорных ограничении на то, каким образом может использоваться тот или иной элемент, а все компоненты значения представляются в едином формате. Таким образом, компонент или значение могут быть использованы в любой ситуации; будучи спроектированы для одних способов применения, они могут оказаться задействованы совершенно иными, о которых их создатель никогда не помышлял. Например, в UNIX - оболочках работа любой программы - фильтра включает чтение данных из входного потока и запись их в выходной поток. Любые две такие программы могут быть связаны путем назначения выходного потока одной в качестве входного потока другой. Следующая команда оболочки представляет систему из трех фильтров, подсчитывающую в выделенном фрагменте текста строки, содержащие слово scipting:

Программа select считывает текст, выделенный в данный момент на экране, и выводит его свои выходной поток; фильтр grep считывает входной поток и пропускает на выход строки, содержащие слово scripting; а программа WC подсчитывает число строк в своем потоке. Любой из подобных компонентов может найти применение во множестве различных ситуации, решая каждый раз иную общую задачу. Сильная типизация языков программирования системного уровня затрудняет повторное использование кода. Она поощряет программистов к созданию большого количества несовместимых друг с другом интерфейсов, каждый из которых требует применение объектов своего типа. Компилятор не позволяет объектам других типов взаимодействовать с этим интерфейсом, не смотря на то, что результат, мог бы оказаться и весьма полезным. Таким образом, чтобы использовать новый объект с существующем интерфейсом, программисту приходится писать переходник, преобразующий объект к типу, на который рассчитан интерфейс. А применение переходника требует, в свою очередь, перекомпиляции части или даже всего приложения целиком. Доминирующий в настоящее время способ распространения ПО в виде двоичных файлов делает этот подход невозможным.

Чтобы оценить преимущества бес типового языка программирования, рассмотрим следующий пример на языке Tcl:


Button.b -text Hello! -font {Times 16} - comand {puts hello}


Эта команда создает на экране новую кнопку с надписью на ней Hello! шрифтом Times 16 пунктов, при нажатии, на которую выводится короткое сообщение hello. В одной строке здесь уместилось шесть элементов различных типов: название команды (button), название кнопки (.b), идентификаторы атрибутов (-text, -font, -command), простые строки (Hello! hello), спецификация шрифта (Times 16), состоящая из названия начертания (Times) и размера в пунктах (16), а также целый Tcl-сценарии (puts hello). Все элементы представляются единообразно - в виде строк. В данном примере атрибуты могли быть перечислены в произвольном порядке, а неупомянутым атрибутам (их насчитывается более 20) будут присвоены значения по умолчанию. В случае реализации на Java тот же самый пример потребовал бы семи строк кода, составляющих два метода. Для С++ с использованием библиотеки Microsoft Foundation Classes (MFC) масштабы увеличились примерно до 25 строк кода, образующих три процедуры. Один только выбор шрифта требует нескольких обращении к функциям MFC*fontPtr=new Cront ();

fontPtr->CreteFont (16, 0, 0, 0, 700,0, 0, 0,

ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,

DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,Times New );

buttonPtr->SetFont(fontPtr);


Можно было бы обоитись без значительнои части этого кода, если бы не строгая типизация. Чтобы задать шрифт для кнопки, необходимо обратиться к методу SetFont; однако он требует передачи в качестве аргумента указателя на объект CFont. Приходиться объявлять и инициализировать новый объект. Инициализацию объекта CFont выполняет его метод Create Font, которыи имеет жёсткий интерфейс, требующий задания 14 различных аргументов. В TCL существенные характеристики шрифта (начертание Times и кегль 16 пунктов) могут быть указаны непосредственно без каких-либо объявлении или преобразовании. Более того, TCL позволяет описать и поведение кнопки непосредственно в теле создающей ее команды, тогда как в С++ или Java для этого необходим отдельный метод.

Языки описания сценариев на подъеме

Языки описания сценариев существуют уже длительное время, однако, в последние годы в результате сочетания ряда факторов существенно повысилась их актуальность. Наиболее важный из этих факторов - направленность в сторону приложении, собираемых из готовых компонентов, В качестве трех иллюстрации его проявления можно назвать графические интерфейсы пользователя, Internet и компонентные инфраструктуры разработки.

Графические интерфейсы пользователя

Первые графические интерфейсы пользователя появились в начале 1980 г. и приобрели широкое распространение к концу десятилетия. Сегодня на описание этой части программы во многих проектах уходит более половины всех усилии разработчиков. GUI по своей природе является составной компонентной системой. Цель его создания состоит не в реализации новых функциональных возможностей, а в том, чтобы наладить связи между графическими элементами управления и функциями внутренних частей приложения.

Некоторые из систем снабжены очень удобными графическими средствами для построения экранов, которые скрывают сложности лежащего в основе языка, однако, как только возникает необходимость в написании дополнительного кода, например, чтобы расширить спектр вариантов поведения элементов интерфейса, у разработчика сразу возникают трудности. Все лучшие среды ускоренной разработки основаны на языках описания сценариев: Visual Basic, HyperCard, TCL/TK.

Internet

Развитие и рост популярности Internet также способствовали распространению языков описания сценариев. Сама сеть является не чем иным, как средством связи систем. Она не создает никаких новых данных и не занимается их обработкой; все, что она делает - обеспечивает легкий доступ к огромному множеству существующих объектов. Идеальным языком программирования для решения большинства связанных с сетью задач мог бы стать тот, который лучше организует совместную работу всех связанных компонентов, т.е. язык описания сценария. Так, для написания сеть-сценариев широко употребляется язык Perl, а среди разработчиков WEB-страниц популярен JavaScrint.

Компонентные инфраструктуры

Третий пример применения языков описания сценариев - компонентные инфраструктуры, такие как ActiveX, JavaBeans. Хотя языки программирования системного уровня с успехом используются для создания компонентов, задачи сборки из них приложении удобнее решаются при помощи сценариев. Без хорошего языка описания сценариев, предназначенного для манипулирования компонентами инфраструктуры, теряется значительная часть ее достоинств. Этим можно объяснить отчасти, почему компонентные инфраструктуры добились большей популярности в мире ПК, где существует такое удобное связующее средство, как Visual Basic, нежели на другихплатформах, таких как Unix/Cobra, компонентные инфраструктуры, для которых лишены языков описания сценариев.

Технология сценариев

Еще одна причина роста популярности языков описания сценариев - развитие их технологии. Такие современные представители этой категории, как TCL, Perl мало, чем напоминают своих далеких предшественников вроде JCL. Так, JCL не предусматривал даже простейших форм интерактивного взаимодействия, а ранние UNIX - оболочки не поддерживали процедур. Данная технология еще и сегодня остается относительно незрелой. Например, Visual Basic не является в полном смысле языком описания сценариев. Первоначально он был разработан в качестве упрощенного языка системного уровня, а затем - модифицирован так, чтобы его было удобнее применять к описанию сценариев. Таким образом, у будущих языков подобного рода есть большой простор для совершенствования.

Кроме того, технология сценариев много выиграла от повышения производительности компьютерного оборудования. Еще не так давно, чтобы добиться приемлемой скорости работы приложения любого уровня сложности, необходимо было обращаться к языкам системного уровня. В некоторых случаях даже их эффективность оказывалась недостаточной, и программу приходилось писать на ассемблере. Современные машины работают в 100-500 раз быстрее компьютеров 80-х годов, и их производительность продолжает удваиваться примерно каждые 18 месяцев. Сегодня целый ряд приложении может быть реализован на языках описания сценариев при, тем не менее, великолепной производительности. Например, TCL-сценарии позволяет манипулировать тысячами объектов при сохранении хорошего уровня интерактивности. По мере того как компьютеры будут становиться быстрее и быстрее, применение языков описания сценариев будет становиться привлекательным для реализации все более и более масштабных приложений.

Другие языки

Существует огромное количество атрибутов, помимо степени строгости контроля типов или уровня языка, и есть очень много интересных примеров, которые не могут быть однозначно отнесены к одной из двух рассмотренных нами категории. Например, семейство Lisp занимает некоторое промежуточное положение, обладая атрибутами языков описания сценариев и языков программирования системного уровня. В Lisp впервые были реализованы такие концепции, как интерпретация и динамический контроль типов, которые широко используются в современных языках описания сценариев, А также автоматическое управление хранением и интегрированные среды разработки, применяемые в языках обеих категории.

Языки описания сценариев основаны на несколько другом наборе компромиссов, чем языки системного уровня. В них скорость исполнения и строгость контроля типов ставятся в шкале приоритетов на более низкое место, но зато выше цениться производительность труда программиста и повторное использование. Это соотношение ценностей оказывается все более оправданным по мере того, как компьютеры становятся быстродействующими и менее дорогими, чего нельзя сказать о программистах. Языки системного программирования хорошо подходят для создания компонентов, где основная сложность заключена в реализации алгоритмов и структур данных, тогда как языки описания сценариев лучше приспособлены для построения приложении из готовых компонентов, где сложность состоит в налаживании межкомпонентных связей. Задачи последнего рода получают все большее распространение, так что роль парадигмы сценариев будет возрастать и в будущем веке.

программа таймер работа компьютер


Глава 2. Описание основных принципов создания приложения для выключения компьютера приложением Таймер


2.1Компоненты использованные для создания приложения


Для создания приложения были использованы компоненты, которые не видны на интерфейсе, т.е. были скрыты, но все же активны. Например, один из трех компонентов maskedit, по идее он как бы совмещен с другим компонентом maskedit т.к. без него отчет времени не пошел бы, пришлось бы писать другой код для правильной работы приложения.

Компонент Delphi MaskEdit (Шаблон ввода) расположен на странице Additional Палитры компонентов. Он так же, как и компонент Edit, является однострочным редактором. Но вдобавок к свойствам и функциям компонента Edit, MaskEdit дает дополнительную возможность ввода текста по заданному шаблону.

С помощью шаблона можно контролировать число вводимых символов, ограничить тип вводимых данных (цифры, буквы, служебные символы). Можно добавлять дополнительные символы (разделители при вводе номера телефона, даты, времени и др. С помощью шаблона удобно вводить почтовые индексы, телефоны, даты, то есть такую информацию для которой определен свой формат.

Шаблон (маска) задается с помощью свойства EditMask и состоит из трех полей разделенных между собой символами точка с запятой. В первом поле находиться сам шаблон (маска). Второе поле определяет, войдут ли вспомогательные символы в итоговый текст (по умолчанию 1). Если стоит 0, то они не будут в итоговом результате, а видны на дисплее при редактировании. Любой иной символ разрешает такое включение. Третье поле отвечает за вывод незаполненных (пустых) символов в поле ввода (по умолчанию это символ подчеркивания). При не заданных значениях второго и третьего полей, действуют значения по умолчанию.

В компонентах Edit и MaskEdit вводимый и выводимый текст содержится в свойстве Text. Это свойство можно устанавливать в процессе проектирования или задавать программно. Выравнивание текста, как это имело место в метках и панелях, невозможно. Перенос строк тоже невозможен. Текст, не помещающийся по длине в окно, просто сдвигается, и пользователь может перемещаться по нему с помощью курсора. Свойство AutoSize в окнах редактирования имеет смысл, отличный от смысла аналогичного свойства меток: автоматически подстраивается под размер текста только высота, но не ширина окна.

Окна редактирования снабжены многими функциями, свойственными большинству редакторов. Например, в них предусмотрены типичные комбинации «горячих» клавиш: Ctrl-C - копирование выделенного текста в буфер обмена Clipboard (команда Copy), Ctrl-X - вырезание выделенного текста в буфер Clipboard (команда Cut), Ctrl-V - вставка текста из буфераClipboard в позицию курсора (команда Paste), Ctrl-Z - отмена последней команды редактирования. Правда, пользователи часто не догадываются об этих возможностях редактирования. Так что полезно напоминать им об этом соответствующими подсказками.

Свойство AutoSelect определяет, будет ли автоматически выделяться весь текст при передаче фокуса в окно редактирования. Его имеет смысл задавать равным true в случаях, когда при переключении в данное окно пользователь будет скорее заменять текущий текст, чем исправлять его. Имеются также свойства только времени выполнения SelLength, SelStart, SelText, определяющие соответственно длину выделенного текста, позицию перед первым символом выделенного текста и сам выделенный текст. Например, если в окне имеется текст «выделение текста» и в нем пользователь выделил слово «текста», то SelLength = 6, SelStart = 10 и SelText = 'текста'. Если выделенного текста нет, то свойство SelStart просто определяет текущее положение курсора.

Окна редактирования можно использовать и просто как компоненты отображения текста. Для этого надо установить в true их свойство ReadOnly и целесообразно установить AutoSelect в false. В этом случае пользователь не сможет изменять отображаемый текст, и окно редактирования становится подобным меткам, рассмотренным в разделе 3.3.2 <#"justify"> A: integer;

try := StrToInt(Edit1.Text);

...{операторы, использующие переменную А}

except on EConvertError do('Вы ввели ошибочное число;

повторите ввод');


Этот код обеспечивает сообщение пользователю об ошибке ввода и предотвращает ошибочные вычисления. Впрочем, это не лучший вариант предотвратить ошибочный ввод, поскольку пользователь узнает о своей ошибке только после того, как программа пытается использовать введенные данные. Лучше, если пользователь просто не сможет ввести неправильные символы. Например, если вы хотите, чтобы пользователь мог вводить в окно редактирования Edit только цифры и символ точки, вы можете в обработчик события OnKeyPress этого компонента вставить оператор:


if not (Key in ['0'..'9', ',']) then Key := #0;


Этот оператор подменит все символы, кроме цифр и запятой, нулевым символом, который не занесется в текст окна Edit.

Свойство MaxLength определяет максимальную длину вводимого текста. Если MaxLength = 0, то длина текста не ограничена. В противном случае значение MaxLength указывает максимальное число символов, которое может ввести пользователь.

Свойство Modified, доступное только во время выполнения, показывает, проводилось ли редактирование текста в окне. Если вы хотите использовать это свойство, то в момент начала работы пользователя с текстом Modified надо установить в false. Тогда при последующем обращения к этому свойству можно по его значению (true или false) установить, было или не было произведено редактирование.

Свойство PasswordChar позволяет превращать окно редактирования в окно ввода пароля. По умолчанию значение PasswordChar равно #0 - нулевому символу. В этом случае это обычное окно редактирования. Но если в свойстве указать иной символ (например, символ звездочки «*»), то при вводе пользователем текста в окне будут появляться именно эти символы, а не те, которые вводит пользователь Тем самым обеспечивается секретность ввода пароля.

Компонент MaskEdit отличается от Edit тем, что в нем можно задать строку маски в свойстве EditMask. Маска состоит из трех разделов, между которыми ставится точка с запятой (;). В первом разделе - шаблоне записываются специальным образом символы которые можно вводить в каждой позиции, и символы, добавляемые самой маской; во втором разделе записывается 1 или 0 в зависимости от того, надо или нет, чтобы символы, добавляемые маской, включались в свойство Text компонента; в третьем разделе указывается символ, используемый для обозначения позиций, в которых еще не осуществлен ввод. Прочитать результат ввода можно или в свойстве Text, которое в зависимости от вида второго раздела маски включает или не включает в себя символы маски, или в свойстве EditText, содержащем введенный текст вместе с символами маски.


Таблица 2.1

Символы шаблона маски

!Наличие символа «!» означает, что в EditText недостающие символы предваряются пробелами, а отсутствие символа «!» означает, что пробелы размещаются в конце.>Символ «>» означает, что все последующие за ним символы должны вводиться в верхнем регистре, пока не кончится маска или пока не встретится символ «<».<Символ «<» означает, что все последующие за ним символы должны вводиться в нижнем регистре, пока не кончится маска или пока не встретится символ «>».<>Символы «<>» означают, что анализ регистра не производится.\Символ «\» означает, что следующий за ним символ является буквенным, а не специальным, характерным для маски. Например, символ «>» после символа «\» воспримется как знак >, а не как символ, указывающий на верхний регистр.LСимвол «L» означает, что в данной позиции должна бытъ буква.lСимвол «l» означает, что в данной позиции может быть только буква или ничего.AСимвол «А» означает, что в данной позиции должна быть буква или цифра.aСимвол «а» означает, что в данной позиции может быть буква, или цифра, или ничего.CСимвол «С» означает, что в данной позиции должен быть любой символ.cСимвол «с» означает, что в данной позиции может быть любой символ или ничего.0Символ «0» означает, что в данной позиции должна быть цифра.9Символ «9» означает, что в данной позиции может быть цифра или ничего.#Символ «#» означает, что в данной позиции может быть цифра, знак «+», знак «-» или ничего.:Символ «:» используется для разделения часов, минут и секунд./Символ «/» используется для разделения месяцев, дней и годов в датах.Символ « » означает автоматическую вставку в текст пробела.Вводить маску можно непосредственно в свойство Edit Mask. Но удобнее пользоваться специальным редактором масок, вызываемым при нажатии кнопки с многоточием в строке свойства Edit Mask в Инспекторе Объектов.

В редакторе масок окно Sample Masks содержит наименования стандартных масок и примеры ввода с их помощью. В окно Input Mask надо ввести маску. Если вы выбираете одну из стандартных масок, то окно Input Mask автоматически заполняется, и вы можете, если хотите, отредактировать эту маску. Окно Character for Blanks определяет символ, используемый для обозначения позиций, в которых еще не осуществлен ввод (третий раздел маски). Индикатор Save Literal Charactersопределяет второй раздел маски: установлен, если второй раздел равен 1, и не установлен, если второй раздел равен 0.


Рис. 2.1 Окно редактора масок с загруженными файлами стандартных масок: американский


Рис. 2.2 Окно редактора масок с загруженными файлами стандартных масок: российский

Кнопка Masks позволяет выбрать и загрузить какой-либо другой файл стандартных масок. К сожалению, среди файлов стандартных масок, поставляемых с Delphi, отсутствует маска, соответствующая российским стандартам. Но вы легко можете сами сделать себе такой файл стандартных масок. Он делается в обычном текстовом редакторе и должен сохраняться как «только текст» с расширением.dem. Чтобы редактор масок Delphi видел этот файл, его надо сохранить в каталоге Delphi BIN. Каждая строка файла состоит из трех частей, разделяемых символом вертикальной черты. Первая часть состоит из пояснительного текста, появляющегося в левой панели окна Sample Masks редактора масок. Вторая часть - пример, который появляется в правой панели окна Sample Masks редактора масок. А третья часть - сама маска.

Однострочный редактор, или поле редактирования (поле ввода), представляет собой поле ввода текста, в котором возможно отображение и изменение текста. В Delphi есть несколько однострочных редакторов, из них наиболее часто используется компонент Edit.

Компонент Edit позволяет вводить и редактировать с клавиатуры различные символы, при этом поддерживаются операции, такие как перемещение по строке с использованием клавиш управления курсором, удаление символов с помощью клавиш <Backspace> и <Delete>, выделение части текста и др. Отметим, что у однострочного редактора отсутствует реакция на управляющие клавиши <Enter> и <Esc>. Для изменения регистра символов в поле редактирования служит свойство СharСase типа TEditcharCase, которое может принимать одно из трех значений:

ecLowerCase - текст преобразуется к нижнему регистру;

ecNormal - регистр символов не изменяется (по умолчанию);

ecUpperCase - текст преобразуется к верхнему регистру.

Компонент MaskEdit также является однострочным редактором, но по сравнению с компонентом Edit он предоставляет дополнительную возможность ввода информации по шаблону. С помощью шаблона (маски) можно ограничить число вводимых пользователем символов, тип вводимых символов (алфавитный, цифровой и т. д.). Кроме того, во вводимую информацию можно вставить дополнительные символы (разделители при вводе даты, времени и т. п.). С помощью редактирования по маске удобно вводить телефонные номера, даты, почтовые индексы и другую информацию заранее определенного формата.


.2 Интерфейс приложения


Интерфейс состоит из 3-х компонентов image, с 28-ми компонентов button, 2 компонента maskedit. Нижний maskedit для показа времени компьютера, на котором была активирована программа, а верхний, ведет отчет времени программы, по умолчанию это запуск компьютера.

Панель вокруг формы, отсутствует. Первоначальный интерфейс приложения показан на рисунке 2.3.


Рис. 2.3 Интерфейс


При нажатии на нижнюю черную панель интерфейс преобразуется (см. рисунок 2.4).


Рис 2.4 Полный интерфейс гаджета

Если нажать на любую черную область кроме нижней, то программа закроется. Но она останется в списке автозагрузочных программ.

Принцип работы гаджета состоит в том, что по нажатию по определенным кнопкам с определенным значением, которое записано на кнопке, отключиться компьютер, и точно так же можно будет отменить вылючение компьютера, нажатием на кнопку с надписью Отключить таймер


2.3 Описание кода программы


Для работы гаджета нужно добавить следующие модули выделенные жирным шрифтом в раздел описания модулей, который начинается с служебного слова Uses:


uses, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, ExtCtrls, StdCtrls, shellapi, Mask, Registry, jpeg;


При создании приложения были использованы следующие переменные:


var

Form1: TForm1;

a,b,c:TTime; //используем переменные с типом времени

procedure TForm1.Button3Click(Sender: TObject);(handle, nil,'shutdown',' -a','', SW_SHOWNORMAL); //код

отменяющий отключение компьютера;


Заключение


Повышение производительности компьютеров и перемены в составе используемого ПО делают роль языков описания сценариев в создании приложении будущего все более и более важной. Эти языки отличаются от языков программирования системного уровня тем, что их основное назначение - связывать различные компоненты и приложения друг с другом, выполняя роль своего рода клея. В них находят применение бестиповые подходы к описанию данных, что позволяет вывести программирование на более высокий уровень и ускорить процесс разработки по сравнению с языками системного уровня.

За прошедшие 15 лет в методологии написания программ для компьютеров произошла радикальная перемена. Она состоит в том, что разработчики перешли от языков программирования системного уровня, таких как С и С++, к языкам описания сценариев, примерами которых могут служить Perl Tcl. Хотя в эту перемену оказалось вовлечено огромное количество людей, лишь немногие из них осознают, что в действительности происходит, и еще меньше найдется таких, кто бы смог объяснить причины.

Эти языки создавались для различных целей, что обусловило ряд фундаментальных различий между ним. Системные разрабатывались для построения структур данных и алгоритмов с нуля, начиная от таких примитивных элементов, как слово памяти компьютера. В отличие от этого, языки описания сценариев создавались для связывания готовых программ. Их применение подразумевает наличие достаточного ассортимента мощных компонентов, которые требуется только объединить друг с другом. Языки системного уровня используют строгий контроль типов, что помогает разработчикам приложений справляться со сложными задачами; языки же описания сценариев не используют понятие типа, что упрощает установление связей между компонентами и ускоряет разработку прикладных систем.

Языки этих двух типов является взаимодополняющими, и большинство компьютерных платформ еще с середины 60-х годов оснащаются как теми, так и другими. В компонентных инфраструктурах они применяются, как правило, совместно компоненты создаются на языках программирования системного уровня, а для их связи между собой используются языки описания сценариев. Однако ряд современных тенденции, включая появление более быстрых машин и более совершенных языков описания сценариев, повышение значимости графического интерфейса пользователя и компонентных архитектур, а также рост популярности Internet, чрезвычайно расширили сферу применимости языков описания сценариев. Развитие этих тенденции продолжиться и в следующем десятилетии, вследствие чего все больше приложении будет создаваться целиком и полностью на языках описания сценариев, а роль языков программирования системного уровня сведется почти исключительно к созданию компонентов.

Цель, поставленная при написании курсовой работы достигнута. Все задачи выполненны.



Список использованной литературы


1.Э. Таненбаум <http://ru.wikipedia.org/wiki/%D0%A2%D0%B0%D0%BD%D0%B5%D0%BD%D0%B1%D0%B0%D1%83%D0%BC,_%D0%AD%D0%BD%D0%B4%D1%80%D1%8E>, А. Вудхалл <http://ru.wikipedia.org/w/index.php?title=%D0%92%D1%83%D0%B4%D1%85%D0%B0%D0%BB%D0%BB,_%D0%90.&action=edit&redlink=1>. «Операционные системы: Разработка и реализация.» <#"justify">5.В.Л. Шило «Популярные цифровые микросхемы» М. 1989 г

6.Н.Н. Васерин «Применение полупроводниковых индикаторов» М. 1991 г.

.Ю.И. Степанов «Справочник по ЕСКД» К. 1975 г.

.А. Уильямс «Применение интегральных схем» М. 1987 г.

.С.А. Бирюков «Цифровые устройства на интегральных микросхемах» М.1991 г.

10.Информатика и информационные технологии. Конспект лекций. Романова Ю.Д., Лесничая И.Г. (2009, 320 с.)

11.Информатика и информационные технологии. Конспект лекций. Цветкова А.В. (2007, 192 с.)

12.Информатика и информационные технологии. Шпаргалки. Цветкова А.В. (2008, 32с.)

13.Информатика и компьютерные технологии. Основные термины. Толковый словарь. Фридланд А.Я. и др. (2003, 3-е изд., 272 с.)

14.Информатика и основы программирования. (Учебное пособие) Меняев М.Ф. (2007, 458 с.)

.Информатика и программирование. (УМК) Комлева Н.В., Смирнов А.А., Хрипков Д.В. (ЕАОИ; 2008, 94с.)

.Информатика. (Учебник) Соболь Б.В. и др. (2007, 3-е изд, 446 с.)

17.Информатика. (Учебник) Под общ. ред. А.Н. Данчула (2004, 528с.)

18.Информатика. (Учебник) Каймин В.А. (2001, 2-е изд., 272с.)

.Информатика. (Учебное пособие) Горяев Ю.А. (МИЭМП; 2005, 116с.)

.Архитектура компьютера. Таненбаум Э.С. (2007, 844с.)


Содержание Введение Глава 1 Общие сведения о гаджетах - таймерах .1История возникновения различных таймеров 1.2Применение .3Интересные факты

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ