В период появления первых компьютерных систем остро встал вопрос того, как «научить» машину воспринимать указываемые к исполнению задачи человеком. Тут и появился термин «компьютерное программирование». Сегодня многие пользователи, не знакомые с основами и тонкостями этих процессов, считают, что это что-то из области фантастики, недоступное рядовому обывателю. Однако при желании можно освоить программирование и самому. Но не будем забегать вперед и разложим все, как говорится, по полочкам.
Что такое программирование в общем понимании?
Если посмотреть на основные трактовки данного термина, нетрудно сделать простейший вывод. Что такое программирование? Это написание программ.
Тут же возникает вопрос того, что же такое программа. Программа или приложение - это, грубо говоря, набор специализированных команд, инструкций, директив или исполняемых сценариев, которые подлежат исполнению машиной, причем на уровне и «железных» устройств, и других задействованных средств.
Чтобы было понятно, что такое программирование, можно привести самый простой пример. Установленное пользовательское приложение, нацеленное на выполнение конкретной задачи, обращается не только к оперативной памяти и процессору, но и задействует другие физические устройства через инструменты управления ими, называемые драйверами, которые тоже представляют собой программы.
Немного истории
Говоря о том, что такое программирование в современной трактовке, стоит обратить свой взгляд на историю его возникновения. По сути, автоматизированное выполнение каких-то определенных действий, например, в области математических вычислений, известно человечеству достаточно давно.
Вспомнить хотя бы Древнюю Грецию, в которой было использовано устройство с шестернями разной величины, позволявшее производить простейшие арифметические действия. Это был самый настоящий прототип современного калькулятора.
В 1206 году появился уникальный аппарат по отслеживанию так называемого метонова цикла, построенный Аль-Джазари, который использовал сложные на то время механизмы, основанные на зажимах и кулачках.
Только в 1804 году свет увидел жаккардовый ткацкий станок, который был способен воспроизводить узоры на тканях, созданные на основе перфокарт.
Но настоящим прорывом стало программируемое аналитическое устройство, разработанное Чарльзом Бэббиджем, которое, к сожалению, при его жизни так и не было построено.
Зато в 1846 году дочь Байрона создала первую в мире программу для аналитической машины, которая решила уравнение Бернулли. Конечно, алгоритмы программирования, которые применяла графиня Ада Августа Лавлейс, были весьма примитивными, но именно они заложили то самое зерно, которое было использовано при создании современных компьютерных программ. И именно ее считают во всем мире прародительницей программирования.
Каким образом компьютер воспринимает команды?
Любая компьютерная программа должна машиной каким-то образом выполняться. Ей мало написать, мол, сделай то-то и то-то. Для этого были созданы языки программирования.
Но написать последовательность команд на каком-то языке, которых сегодня существует очень много, оказывается недостаточно. Машина все равно не воспримет текстовые фразы или математические формулы.
Универсальным средством стало использование двоичного (бинарного) кода, состоящего из последовательностей нулей и единиц, которые воспринимаются любым компьютерным устройством. Но как перевести смысловые фразы и формулы в такой вид? Для этого используются компиляторы, которые и преобразовывают список команд в понятный машине двоичный код. Можно встретить и троичные, и шестнадцатиричные коды, но они используются крайне редко.
Мнемокоды
Понятно, что вводить двоичные команды даже на примитивных устройствах было крайне затруднительно, ведь запомнить такие последовательности человек по природе своей просто не в состоянии.
Поэтому, чтобы унифицировать такие процессы, были придуманы так называемые мнемокоды, которые в виде текстовых команд являлись полными аналогами двоичных сочетаний. Текстовую команду, как уже понятно, запомнить намного легче, нежели длинную последовательность, состоящую из нулей и единиц.
Понятие переменных
Но и этим дело не ограничилось. Применяемые на заре развития алгоритмы программирования потребовали ввода новой величины, получившей название переменной.
Суть ее использования в любом языке программирования состоит в присвоении определенной области памяти, в которой хранится какое-то значение, буквенного обозначения. Для того чтобы перевести мнемокоды в инструкции, а переменные в области памяти, использовались инструменты, называемые трансляторами. И все языки, использовавшие такую методику, получили название ассемблеров.
Языки программирования
Сами же языковые средства, на которых пишутся (или в свое время писались) компьютерные программы, условно можно разделить на низко- и высокоуровневые.
Если кто из старшего поколения помнит, даже в советские времена в школах на уроках информатики преподавался язык Basic. С его помощью на тогдашних машинах Yamaha КУВТ можно было создавать примитивные программы математических вычислений, программировать простейшие картинки или музыку, звучащую из системного динамика. Для математики можно было использовать и логические операторы вроде «если», «то», «иначе». Но проблема всех тех, кто хорошенько обучился этому языку, состояла в том, что они никак не могли освоить новые средства.
Не говоря о том, что язык Ассемблер своим появлением произвел настоящую революцию и используется до сих пор, появились достаточно специфичные средства, например, языки структурного или объектно-ориентированного программирования (ООП).
К ООП смело можно отнести язык C+/++, на основе команд которого созданы те же операционные системы Windows. Программирование на «Си» является достаточно сложным, тем не менее при желании можно освоить и его. Как говорится, было бы желание. Можно пойти на те же курсы программирования или использовать для обучения соответствующую литературу. Правда, как считает большинство специалистов, самому вникнуть в основы языка еще можно, а вот развивать свои знания на практике буде крайне сложно. Тут никакие труды вроде книг «Программирование для чайников» не помогут.
Но вернемся к языкам. Относительно недавно появились языки, работающие на основе интерпретаторов (.NET Framework, Python, Java, Perl и т.д.). В них вместо машинного кода генерируется особый байт-код, который представляет собой двоичный код виртуальной машины.
Кстати сказать, программирование на Java можно без особых усилий освоить самому. Например, для мобильных устройств на основе Android-систем можно параллельно использовать Android Studio и пакет Java SDK, а в качестве тестировщика установить Genymotion. Можно поступить еще проще, обратившись к онлайн-конструктору App Inventor, в котором создание последовательности команд производится наподобие складывания пазлов.
Понятие парадигм
Понятие парадигм возникло не на пустом месте. В самом общем понимании парадигмы представляют собой некий взгляд на окружающий мир и действия, которые в его отношении можно предпринять. В компьютерном мире под таким термином понимается некое обобщение по отношению к работе программы.
Существуют приложения, ориентированные исключительно на одну парадигму или выполнение только одной задачи, но все современные языки и программы, создаваемые на их основе, решают несколько задач. Отсюда и появился термин многозадачности.
Современное программирование и его особенности
На современном этапе развития компьютерных технологий приоритетным для многих программистов являются ООП и программирование на Java. Заметьте, пакеты Java-платформы поддерживаются любой из ныне известных операционных систем, не говоря уже о мобильных устройствах.
И хотя, как считается, язык C+/++ является доминирующим, не стоит сбрасывать со счетов и Ассемблер. Удивительно, но большинство вирусов написано именно на нем. А если взять в расчет веб-программирование, скажем, на основе Delphi, тут вообще открываются такие широкие возможности и перспективы, что многие начинающие программисты об этом даже не догадываются.
Можно ли самому научиться программированию?
Вопросы, связанные с самостоятельным обучением, напрямую зависят от того, чему именно хочется научиться. Литература в виде книг «Программирование для чайников» дает лишь частичные ответы без конкретизации основных аспектов с учетом применения того или иного языка. Это, так сказать, для общего понимания. Курсы программирования - тоже вопрос спорный, ведь в данном случае все зависит не только от восприятия обучаемым, но и от того, какими знаниями обладает преподаватель, как он подает материал и т.д. Но если уж возникла необходимость изучения какого-то определенного языка или метода программирования, в наш век интернета проблемой это не является. Можно найти даже онлайн-курсы или подробное описание уроков по той же платформе Java, программированию Android- или iOS-устройств.
Краткие итоги
Что такое программирование в общих чертах, думается, уже понятно любому человеку. Здесь, правда, были затронуты только общие вопросы без конкретики использования каждого языка, средств написания приложений или сопутствующих программных модулей, интерпретации или трансляции команд, равно как и то, каким образом все это выполняется на уровне процессора, оперативной памяти или операционной системы. Все это достаточно сложно для понимания, а неподготовленному человеку вникнуть в суть всех этих процессов будет не так уж и просто. Тем не менее при желании и достаточно высокой степени мотивации изучить любой язык можно, а в дальнейшем стать высококлассным программистом.
ВВЕДЕНИЕ В ТУРБО ПАСКАЛЬ
ЯЗЫК ВЫСОКОГО УРОВНЯ ТУРБО ПАСКАЛЬ
Классификацию языков программирования, с каждым из которых можно связать профильно–ориентированный курс информатики, можно представить следующей схемой:
Программирование – это раздел информатики, задача которого – разработка программного обеспечения ЭВМ. В узком смысле слово программирование обозначает процесс разработки программы на определенном языке программирования.
На начальном этапе программирование было операциональным и одновременно процедурным, а в уже усовершенствованном виде – структурным (классический пример – Паскаль). Процедурное программирование, в своей основе, сходится к следующему: программа представляет собой детальное описание решения задачи, т.е. алгоритм в некоторой специальной записи. Основные понятия – оператор и данные.
Принципиально иное направление в программировании связано с методологиями (парадигмами) непроцедурного программирования. Объектно-ориентированная программа – совокупность множества независимых объектов. Каждый объект можно использовать для решения задачи, не вникая во внутренние механизмы его функционирования. Наиболее популярные языки объектного программирования – C++, Delphi, Visual Basic.
При использовании декларативного языка программист указывает исходные информационные структуры, взаимосвязи между ними и то, какими свойствами должен обладать результат. При этом процедуру его получения (алгоритм) программист не строит. В этих языках отсутствует понятие «оператор» («команда»).
В настоящей работе рассматривается структурное программирование на языке Паскаль.
Программирование как процесс создания программы формально состоит из выбора языка программирования и замены элементов блок-схемы алгоритма соответствующими элементами выбранного языка программирования. Правильная программа на алгоритмическом языке представляет собой формальную запись конечной последовательности действий, приводящих к решению поставленной задачи.
Программа непосредственно в процессорных кодах представляет собой последовательность из 0 и 1. Команды машинного языка, в большинстве случаев, состоят из двух частей – кода операции (указание процессору, что сделать) и из операндов (с чем нужно сделать операцию).
Для ускорения процесса программирования сначала был разработан язык Ассемблер, а в дальнейшем языки высокого уровня (в т.ч. и Турбо Паскаль). Программа на языке Ассемблер стала записываться как последовательность строк, каждая из которых включает содержание действия (имя операции) и обозначения операндов. Программы на языках высокого уровня состоят уже из операторов (интегрированных команд), каждому из которых может соответствовать несколько машинных операций.
Алгоритмический язык высокого уровня – это система правил для представления данных и описания процесса их обработки.
Система правил формирования множества конструкций языка (слов, выражений, операторов) - синтаксис языка .
Систему правил однозначного истолкования исполнителем программы (человеком и техническим устройством) смысла синтаксических конструкций алгоритмического языка определяет семантика .
Чтобы программа, написанная на языке высокого уровня (например, Турбо Паскаль) однозначно воспринималась и истолковывалась процессором ее необходимо привести в соответствие с его системой команд (СКИ). Эту функцию выполняет специальная программа – компилятор.
При практической реализации разработанной программы существуют причины ее невыполнения при некотором наборе исходных данных (не достижение результативного окончания работы), которыми могут быть:
Исходная Выполняемая
программа программа
Сообщения об ошибках
§ Ошибки синтаксиса, т.е. нарушение формальных правил записи алгоритма;
§ Выход начальных данных за пределы допустимого множества;
§ Несоответствие алгоритма возможностям исполнителя.
Именно поэтому кроме преобразования текста программы в машинный код компилятор решает и вторую задачу: обнаруживает и сигнализирует о синтаксических ошибках программы (встреченной в исходном тексте программы недопустимой комбинации символов).
Генерация машинного кода и обнаружение синтаксических ошибок не может свидетельствовать об отсутствии в программе других ошибок и что она не нуждается в отладке.
В том случае, когда ошибки имеют смысловой (семантический) характер для их локализации и исправления прибегают к тестированию программы. Тестирование состоит в проверке работоспособности алгоритма (программы) при таких значениях исходных данных, которые охватили бы все возможные пути обработки данных. На практике тестирование проводят лишь на некоторых наборах исходных данных (предельных: минимальных и максимальных, недопустимых). Тестирование может обнаружить ошибку, но не доказывает их полное отсутствие.
Процесс обработки программы на языке Паскаль:
Процесс программирования на универсальном языке высокого уровня Паскаль состоит из следующих действий: ввода и редактирования текста программы, трансляции и отладки. Для повышения качества и скорости разработки программ была создана интегрированная система программирования Турбо Паскаль, представляющая собой единство двух начал: компилятора и среды программирования – инструментальная программная оболочка языка, предоставляющая разнообразные сервисные услуги.
Для выполнения каждого этапа применяются специальные средства интегрированной среды программирования: редактор текстов (editor), компилятор (compiler), компоновщик (linker), отладчик (debugger).
Поскольку многие программы выполняют одни и те же действия (ввод/вывод данных, вычисление математических функций и т.п.) были организованы библиотеки подпрограмм, когда алгоритмы этих действий хранятся уже в скомпилированном виде в памяти компьютера. При написании программы только требуется указать, из какой библиотеки какую подпрограмму вызвать, а связыванием программы и библиотек в единое целое производит специальная программа-компоновщик (редактор связей).
Теоретический раздел любой науки базируется на математических методах исследования. Это относится и к информатике. Она использует методы математики для построения и изучения моделей обработки, передачи и использования информации, создаёт тот теоретический фундамент, на котором строится всё здание информатики.
По своей природе информация дискретна и представляется обычно в символьно-цифровом виде в текстах и точечном виде на рисунках. С учётом этого в информатике широко используется математическая логика как раздел дискретной математики. Следующее направление теоретической информатики - вычислительная математика , которая разрабатывает методы решения задач на компьютерах с использованием алгоритмов и программ.
Подраздел теория информации (а также теория кодирования и передачи информации) изучает информацию в виде абстрактного объекта, лишённого конкретного содержания. Здесь исследуются общие свойства информации и законы, управляющие её рождением, развитием и уничтожением. Здесь же изучаются те формы, в которые может отобразиться содержание любой конкретной элементарной единицы информации.
Системный анализ - еще одно направление теоретической информатики. В нём изучается структура реальных объектов, явлений, процессов и определяются способы их формализованного описания через информационные модели. Имитационное моделирование - один из важнейших методов компьютерного моделирования, в котором воспроизводятся процессы и явления, протекающие в реальных объектах.
Наконец, теория принятия решений изучает общие схемы выбора нужного решения из множества альтернативных возможностей. Такой выбор часто происходит в условиях конфликта или противоборства. Модели такого типа изучаются в теории игр. Рисунок 1 Условное изображение структуры информатики в виде карты:
Искусственный интеллект
Это направление информатики - самое молодое, возникшее в середине 70-х годов. Однако именно искусственный интеллект определяет стратегические направления развития информатики. Искусственный интеллект тесно связан с теоретической информатикой , откуда он заимствовал многие модели и методы, например, использование логических средств для преобразования знаний. Столь же прочны связи этого направления с кибернетикой. Математическая и прикладная лингвистика, нейрокибернетика и гомеостатика теснейшим образом связаны с развитием искусственного интеллекта . И конечно, работы в этой области немыслимы без развития систем программирования (рис. 1).
Рис. 1
Основная цель работ в области искусственного интеллекта - стремление проникнуть в тайны творческой деятельности людей, их способности к овладению знаниями, навыками и умениями. Для этого необходимо раскрыть те глубинные механизмы, с помощью которых человек способен научиться практически любому виду деятельности. И если суть этих механизмов будет разгадана, то есть надежда реализовать их подобие в искусственных системах, т.е. сделать их по-настоящему интеллектуальными. Такая цель исследований в области искусственного интеллекта тесно связывает их с достижениями психологии - науки, одной из задач которой является изучение интеллекта человека. В психологии сейчас активно развивается особое направление - когнитивная психология , исследования в котором направлены на раскрытие закономерностей и механизмов, связанных с процессами познавательной деятельности человека и которые интересуют специалистов в области искусственного интеллекта.
Другое направление психологии - психолингвистика также интересует специалистов в области искусственного интеллекта. Её результаты касаются моделирования общения не только с помощью естественного языка, но и с использованием иных средств: жестов, мимики, интонации и т.п.
Кроме теоретических исследований активно развиваются и прикладные аспекты искусственного интеллекта. Например, робототехника занимается созданием технических систем, которые способны действовать в реальной среде и частично или полностью заменить человека в некоторых сферах его интеллектуальной и производственной деятельности. Такие системы получили название роботов.
Экспертная система - еще одно прикладное направление искусственного интеллекта. В отличие от других интеллектуальных систем, экспертная система имеет три главные особенности: 1 - она адаптирована для любого пользователя, 2 - она позволяет получать не только новые знания, но и профессиональные умения и навыки, связанные с данными знаниями, т.е. не только даёт знать что..., но и знать как..., 3 - она передаёт не только знания, но и пояснения и разъяснения, т.е. обладает обучающей функцией.
Программирование
Программирование как научное направление возникло с появлением вычислительных машин и только программное обеспечение определяет эффективность использования ЭВМ. В настоящее время это достаточно продвинутое направление информатики. В этой области работает значительный отряд специалистов, которые подразделяются на системных и прикладных программистов.
Системные программисты являются, как правило, специалистами очень высокого уровня и разрабатывают системное программное обеспечение , которое включает в себя операционные системы, языки программирования и трансляторы. Операционные системы обеспечивают функционирование вычислительной техники и предоставляют пользователю комфортные условия взаимодействия с компьютером.
Языки программирования создаются для разработки прикладного программного обеспечения. Эти языки относятся к языкам высокого уровня, мнемоника и семантика которых близка к естественному языку общения людей.
Есть ещё машинные языки, которые используются непосредственно в ЭВМ и которые состоят из последовательности машинных команд, закодированных в микропроцессорах. Для преобразования программ, написанных на языке высокого уровня в программы на машинном языке используются специальные программы - трансляторы , которые также создаются системными программистами.
Прикладное или проблемно-ориентированное программирование ориентировано на разработку пользовательских программ для решения тех или иных задач в различных областях науки, техники, производства. Например, в образовании используются пакеты педагогических программных средств (ППС) , в которые включаются обучающие и контролирующие программные средства в определённой предметной области.
Прикладная информатика
Достижения современной информатики широко используются в различных областях человеческой деятельности: в научных исследованиях (АСНИ - автоматизированные системы для научных исследований), в разработке новых изделий (САПР - системы автоматизированного проектирования), в информационных системах (АИС - автоматизированные информационные системы), в управлении (АСУ - автоматические системы управления), в обучении (АОС - автоматизированные обучающие системы) и др.
МИНИСТЕРСТВО НАУКИ И ОБРАЗОВАНИЯРОССИЙСКОЙ ФЕДЕРАЦИИ
КАЗАНСКИЙ ГОСУДАРСТВЕННЫЙ
ФИНАНСОВО-ЭКОНОМИЧЕСКИЙ ИНСТИТУТ
Кафедра математики и экономической информатики
Понятие о программировании. Языки программирования
Выполнил: Молотов Л.А.
Проверила: доц. Кодолова И.А.
Казань 2010
Введение 3
1. Основные положения о программировании 4
1.1.Понятие программирования 4
1.2.Парадигмы программирования 5
1.3.Инструментарий технологии программирования 8
2. Языки программирования 11
2.1. Понятие языка программирования 11
2.2. Классификация языков программирования 14
2.3. Описание некоторых языков программирования 17
3. Язык программирования Java 22
3.1. Обзор языка Java 22
3.2.Процесс создания Java-программы 23
3.3. Достоинства языка Java 25
Заключение 28
Список использованных источников 29
Введение
Когда изучаешь какой-либо вопрос, считаешь, что знаешь его; когда можешь писать о нем, становишься уверенней в своих знаниях; уверенность возрастает, когда можешь научить этому кого-нибудь другого; и совершенно уверен, когда начинаешь программировать. Алан.Дж.Перлис
До середины 60-х компьютеры были слишком дорогими машинами, использовавшимися только для особых задач, и выполнявшими только одну задачу за раз.
Языки программирования этой эры, как и компьютеры на которых они использовались, были разработаны для специфичных задач, таких как научные вычисления. Поскольку машины были дорогими и медленными, то и машинное время было дорого – поэтому скорость выполнения программы стояла на первом месте.
Однако в течение 60-х цена на компьютеры стала падать так, что даже небольшие компании могли их себе позволить; скорость компьютеров всё увеличивалась, и наступило время, когда создатели языков программирования все больше стали задумываться об удобстве написания программ, а не только скорости их выполнения.
На заре компьютеризации, машинный язык был единственным языком, большего человек к тому времени не придумал. Для спасения программистов от сурового машинного языка программирования, были созданы языки высокого уровня (т.е. немашинные языки).«Мелкие» (атомарные) операции, выполняемые непосредственно устройствами машины, объединили в более «крупные», высокоуровневые операции и целые конструкции, с которыми человеку куда проще и удобнее работать. Так программирование сделало колоссальный прорыв: новые языки стали своеобразным связующим мостом между человеком и машинным языком компьютера.
Прогресс компьютерных технологий определил процесс появления новых разнообразных знаковых систем для записи алгоритмов (языков программирования) и развитие процесса программирования в целом.
1. Основные положения о программировании
1.1. Понятие программирования
Терминпрограммирование означаетпроцесс и искусство создания компьютерных программ с помощью специальных языков программирования.
В общем смысле слова, программирование есть формализация предопределенного состояния, по реакции на событие, реализуемого средствами математики или естественных наук.
В узком смысле слова, программирование рассматривается как кодирование алгоритмов на заданном языке программирования. В более широком смысле программирование - процесс создания программ, то есть разработка программного обеспечения.
Программирование включает в себя:
· Проектирование - разработка комплекса алгоритмов
· Кодирование и компиляцию - написание исходного текста программы и преобразование его в исполнимый код с помощью компилятора
· Тестирование и отладку - выявление и устранение ошибок в программах
· Испытания и сдачу программ
· Сопровождение
Различные языки программирования поддерживают различные стили программирования (так называемые«парадигмы программирования»). Отчасти, искусство программирования состоит в том, чтобы выбрать один из языков, наиболее полно подходящий для решения имеющейся задачи. Разные языки требуют от программиста различного уровня внимания к деталям при реализации алгоритма, результатом чего часто бывает компромисс между простотой и производительностью (или между временем программиста и временем пользователя).
Единственный язык, напрямую выполняемый процессором - это машинный язык (также называемый «машинным кодом»). Как уже было сказано, изначально, все программисты прорабатывали каждую мелочь в машинном коде, но сейчас эта трудная работа уже не делается. Вместо этого, программисты пишут исходный код, и компьютер (используя компилятор, интерпретатор или ассемблер, речь о которых пойдёт чуть позже) транслирует его, в один или несколько этапов, уточняя все детали, в машинный код, готовый к исполнению на целевом процессоре. Однако, в некоторых языках, вместо машинного кода генерируется интерпретируемый двоичный код «виртуальной машины», также называемый байт-кодом (byte-code). Такой подход применяется в Forth, Lisp, Java (данному языку посвящена 3 Глава реферата).
Теперь, когда мы знаем немного о понятии «программирование», можно переходить к материальной части процесса создания программ. Это, разумеется, технические (аппаратные) средства обеспечения программирования - совокупность электрических, электронных и механических компонентов автоматизированных систем составляет их техническое обеспечение (в отличие от программных средств, представляющих собой программное обеспечение автоматизированных систем). Например, электронная вычислительная машина (ЭВМ) или компьютер - комплекс технических и программных средств, основанных на использовании электроники и предназначенных для автоматической или автоматизированной обработки данных в процессе решения вычислительных и информационных задач.
1.2. Парадигмы программирования
В основе того или иного языка программирования лежит некоторая руководящая идея, оказывающая существенное влияние на стиль соответствующих программ.В зависимости от назначения и/или способа написания программ различаютпарадигмы (также известные как подходы или технологии ) программирования :
Структурное программирование - методология программирования, базирующаяся на системном подходе к анализу, проектированию и реализации программного обеспечения. Эта методология родилась в начале 70-х годов и оказалась настолько жизнеспособной, что и до сих пор является основной в большом количестве проектов. Основу этой технологии составляют следующие положения:
· Сложная задача разбивается на более мелкие, функционально лучше управляемые задачи. Каждая задача имеет один вход и один выход. В этом случае управляющий поток программы состоит из совокупности элементарных подзадач с ясным функциональным назначением.
· Простота управляющих структур, используемых в задаче. Это положение означает, что логически задача должна состоять из минимальной, функционально полной совокупности достаточно простых управляющих структур. В качестве примера такой системы можно привести алгебру логики, в которой каждая функция может быть выражена через функционально полную систему: дизъюнкцию, конъюнкцию и отрицание.
· Разработка программы должна вестись поэтапно. На каждом этапе должно решаться ограниченное число четко поставленных задач с ясным пониманием их значения и роли в контексте всей задачи. Если такого понимания не достигается, это говорит о том, что данный этап слишком велик и его нужно разделить на более элементарные шаги.
Концепция модульного программирования. Так же как и для структурной технологии программирования, концепцию модульного программирования можно сформулировать в виде нескольких понятий и положений:
· Функциональная декомпозиция задачи - разбиение большой задачи на ряд более мелких, функционально самостоятельных подзадач - модулей. Модули связаны между собой только по входным и выходным данным.
· Модуль - основа концепции модульного программирования. Каждый модуль в функциональной декомпозиции представляет собой «черный ящик» с одним входом и одним выходам. Модульный подход позволяет безболезненно производить модернизацию программы в процессе ее эксплуатации и облегчает ее сопровождение. Дополнительно модульный подход позволяет разрабатывать части программ одного проекта на разных языках программирования, после чего с помощью компоновочных средств объединять их в единый загрузочный модуль.
· Реализуемые решения должны быть простыми и ясными. Если назначение модуля непонятно, то это говорит о том, что декомпозиция начальной или промежуточной задачи была проведена недостаточно качественно. В этом случае необходимо еще раз проанализировать задачу и, возможно, провести дополнительное разбиение на подзадачи. При наличии сложных мест в проекте их нужно подробнее документировать с помощью продуманной системы комментариев. Этот процесс нужно продолжать до тех пор, пока вы действительно не добьетесь ясного понимания назначения всех модулей задачи и их оптимального сочетания.
· Назначение всех переменных модуля должно быть описано с помощью комментариев по мере их определения.
Объектно-ориентированное программирование (ООП). Идея ООП заключается в стремлении связать данные с обрабатывающими эти данные процедурами в единое целое - объект. ООП основано на трех важнейших принципах, придающих объектам новые свойства. Этими принципами являются инкапсуляция, наследование и полиморфизм.
· Инкапсуляция - объединение в единое целое данных и алгоритмов обработки этих данных. В рамках ООП данные называются полями объекта, а алгоритмы - объектными методами.
· Наследование - свойство объектов порождать своих потомков. Объект - потомок автоматически наследует от родителей все поля и методы, может дополнять объекты новыми полями и заменять (перекрывать) методы родителя или дополнять их.
· Полиморфизм - свойство родственных объектов (т.е. объектов, имеющих одного общего родителя) решать схожие по смыслу проблемы разными способами.
Существуют и другие технологии программирования, о которых также следует немного сказать.
Прикладное программирование - разработка и отладка программ для конечных пользователей, например бухгалтерских, обработки текстов и т.п.
Системное программирование - разработка средств общего программного обеспечения, в том числе операционных систем, вспомогательных программ, пакетов программ общесистемного назначения, например: автоматизированных систем управления, систем управления базами данных и т.д.
Декларативное (логическое, продукционное) программирование - метод программирования, предназначенный для решения задач искусственного интеллекта. В указанном контексте программа описывает логическую структуру решения задачи, указывая преимущественно, что нужно сделать, не вдаваясь в детали, как это делается. Используются языки программирования типа Пролог.
Параллельное программирование - разработка программ, обеспечивающих одновременное (параллельное) выполнение операций, связанных с обработкой данных.
Процедурное (процедурно-ориентированное) программирование - метод программирования, в соответствии с которым программы пишутся как перечни последовательно выполняемых команд. При этом используются процедурно-ориентированные языки программирования.
Функциональное программирование - метод программирования, основанный на разбиении алгоритма решения задачи на отдельные функциональные модули, а также описании их связей и характера взаимодействия. Для функционального программирования наиболее широко используются языки НОРЕ и ML. Элементы функционального программирования реализуются также другими языками, например Си.
Эвристическое программирование - метод программирования, основанный на моделировании мыслительной деятельности человека. Используется для решения задач, не имеющих строго формализованного алгоритма или связанных с неполнотой исходных данных.
1.3. Инструментарий технологии программирования
И наконец, чтобы полностью разобраться в принципе системы программирования, рассмотрим инструментарий технологии программирования , т.е. совокупность программ, обеспечивающих технологию разработки, отладки и внедрения программных продуктов.
В настоящее время бурно развивается направление, связанное с технологией создания программных продуктов. Это обусловлено переходом на промышленную технологию производства программ, стремлением к сокращению сроков, трудовых и материальных затрат на производство и эксплуатацию программ, обеспечению гарантированного уровня их качества.
В рамках этих направлений сформировались следующие группы программных продуктов:
1. средства для создания приложений (совокупность языков и систем программирования, а также различные программные комплексы для отладки и поддержки создаваемых программ.), включающие:
· локальные средства, обеспечивающие выполнение отдельных работ по созданию программ; включают языки и системы программирования, а также инструментальную среду пользователя;
· интегрированные среды разработчиков программ, обеспечивающие выполнение комплекса взаимосвязанных работ по созданию программ, повышающие производительность труда программистов;
2. CASE -технология (Computer - AidedSystem Engineering), представляющая методы анализа, проектирования и создания программных систем и предназначенная для автоматизации процессов разработки и реализации информационных систем.
Хотелось бы остановиться на CASE - технологиях более подробно, т.к. представление о них связано в нашем сознании с чем-то, не имеющим отношения к обычному программированию.
Средства CASE -технологий делятся на две группы:
· встроенные в систему реализации - все решения по проектированию и реализации привязаны к выбранной системе управления базами данных (СУБД);
· независимые от системы реализации - все решения по проектированию ориентированы на унификацию начальных этапов жизненного цикла и средств их документирования, обеспечивают большую гибкость в выборе средств реализации.
Основное достоинство CASE -технологии - поддержка коллективной работы над проектом за счет возможности работы в локальной сети разработчиков, экспорта/импорта любых фрагментов проекта, организационного управления проектом.
В рамках CASE -технологий проект сопровождается целиком, а не только его программные коды. Проектные материалы, подготовленные в CASE -технологии, служат заданием программистам, а само программирование скорее сводится к кодированию – переводу на определенный язык структур данных и методов их обработки, если не предусмотрена автоматическая кодогенерация.
Большинство CASE -технологий использует также метод «прототипов» для быстрого создания программ на ранних этапах разработки. Кодогенерация программ осуществляется автоматически - до 90% объектных кодов и текстов на языках высокого уровня, а в качестве языков наиболее часто используются Ада, Си, Кобол.
Сегодня лидирующей в мире CASE-системой считается Rational Rose корпорации Rational Software. Система Rational Rose нацелена на создание модулей с использованием языка Unified Modeling Language (UML). Последняя версия CASE-системы этой компании уже вовсю применяется для создания коммерческого ПО и поддерживает популярные языки программирования Java, С++, Смолток, Ада, Visual Basic и Forte.
Используя такие технологии, можно интерактивно разрабатывать архитектуру создаваемого приложения, генерировать его исходные тексты и параллельно работать над документированием разрабатываемой системы.
Наконец, рассмотрев практически все аспекты процесса программирования, мы переходим к наиболее значимой составляющей - языкам программирования.«Для машин естественные языки не естественны»,- сказал когда-то американский программист Алан.Дж.Перлис. Докажем верность его высказывания в следующей главе.
2. Языки программирования
2.1. Понятие языка программирования
Процесс работы компьютера заключается в выполнении программы, то есть набора вполне определённых команд во вполне определённом порядке. Машинный вид команды, состоящий из нулей и единиц, указывает, какое именно действие должен выполнить центральный процессор. Значит, чтобы задать компьютеру последовательность действий, которые он должен выполнить, нужно задать последовательность двоичных кодов соответствующих команд. Программы в машинных кодах состоят из тысячи команд. Писать такие программы - занятие сложное и утомительное. Программист должен помнить комбинацию нулей и единиц двоичного кода каждой программы, а также двоичные коды адресов данных, используемых при её выполнении. Гораздо проще написать программу на каком-нибудь языке, более близком к естественному человеческому языку, а работу по переводу этой программы в машинные коды поручить компьютеру. Так возникли языки, предназначенные специально для написания программ, - языки программирования.
Язык программирования - это специальный язык, на котором пишут команды для управления компьютером. Языки программирования созданы для того, чтобы людям было проще читать и писать для компьютера, но они затем должны транслироваться (транслятором или интерпретатором) в машинный код, который только и может исполняться компьютером. Языки программирования можно разделить на языки высокого уровня и языки низкого уровня.
Язык низкого уровня - это язык программирования, предназначенный для определенного типа компьютера и отражающий его внутренний машинный код; языки низкого уровня часто называют машинно-ориентированными языками. Их сложно конвертировать для использования на компьютерах с разными центральными процессорами, а также довольно сложно изучать, поскольку для этого требуется хорошо знать принципы внутренней работы компьютера.
Язык высокого уровня - это язык программирования, предназначенный для удовлетворения требований программиста; он не зависит от внутренних машинных кодов компьютера любого типа. Языки высокого уровня используют для решения проблем и поэтому их часто называют проблемно-ориентированными языками. Каждая команда языка высокого уровня эквивалентна нескольким командам в машинных кодах, поэтому программы, написанные на языках высокого уровня, более компактны, чем аналогичные программы в машинных кодах.
Создатели языков по-разному толкуют понятие язык программирования. Среди общин мест, признаваемых большинством разработчиков, находятся следующие:
Функция : язык программирования предназначен для написания компьютерных программ, которые применяются для передачи компьютеру инструкций по выполнению того или иного вычислительного процесса и организации управления отдельными устройствами.
Задача : язык программирования отличается от естественных языков тем, что предназначен для передачи команд и данных от человека компьютеру, в то время как естественные языки используются лишь для общения людей между собой. В принципе, можно обобщить определение «языков программирования» - это способ передачи команд, приказов, чёткого руководства к действию; тогда как человеческие языки служат также для обмена информацией.
Исполнение : язык программирования может использовать специальные конструкции для определения и манипулирования структурами данных и управления процессом вычислений.
Со времени создания первых программируемых машин человечество придумало уже более двух с половиной тысяч языков программирования. Каждый год их число пополняется новыми. Некоторыми языками умеет пользоваться только небольшое число их собственных разработчиков, другие становятся известны миллионам людей. Профессиональные программисты иногда применяют в своей работе более десятка разнообразных языков программирования.
Но создать язык, удобный для написания программ, недостаточно. Для каждого языка нужен свой переводчик. Такими переводчиками являются специальные программы-трансляторы.
Транслятор - это программа, предназначенная для перевода программы, написанной на одном языке программирования, в программу на другом языке программирования. Процесс перевода называется трансляцией. Тексты исходной и результирующей программ находятся в памяти компьютера.Примером транслятора является компилятор.
Компилятор - это программа, предназначенная для перевода программы, написанной на каком-либо языке, в программу в машинных кодах. Процесс такого перевода называется компиляцией.
Компилятор создаёт законченный результат - программу в машинных кодах. Затем эта программа выполняется. Откомпилированный вариант исходной программы можно сохранить на диске. Для повторного выполнения исходной программы компилятор уже не нужен. Достаточно загрузить с диска в память компьютера откомпилированный в предыдущий раз вариант и выполнить его.
Существует другой способ сочетания процессов трансляции и выполнения программы. Он называется интерпретацией. Суть процесса интерпретации состоит в следующем. Вначале переводится в машинные коды, а затем выполняется первая строка программы. Когда выполнение первой строки окончено, начинается перевод второй строки, которая затем выполняется и так далее. Управляет этим процессом программа-интерпретатор.
Интерпретатор - это программа, предназначенная для построчных трансляции и выполнения исходной программы. Такой процесс называется интерпретацией.
В процесс трансляции входит проверка исходной программы на соответствие правилам используемого в ней языка. Если в программе обнаружены ошибки, транслятор вводит сообщение о них на устройство вывода (обычно, на экран дисплея).
Интерпретатор сообщает о найденных им ошибках после трансляции каждой строки программы. Это значительно облегчает процесс поиска и исправления ошибок в программе, однако существенно увеличивает время трансляции. Компилятор транслирует программу намного быстрее, чем интерпретатор, но сообщает о найденных им ошибках после завершения компиляции всей программы. Найти и исправить ошибки в этом случае труднее. Поэтому интерпретаторы рассчитаны, в основном, на языки, предназначенные для обучения программированию, и используются начинающими программистами. Большинство современных языков предназначены для разработки сложных пакетов программ и рассчитаны на компиляцию.
Иногда один и тот же язык может использовать и компилятор, и интерпретатор. К числу таких языков относится, например, Бейсик.
2.2. Классификация языков программирования
Если вы успели заметить, в тексте уже прозвучали несколько отдельных названий языков программирования. Но перед тем как более подробно их описать, необходимо классифицировать их по группам для удобства восприятия.
Во-первых это машинно-ориентированные языки, т.е. языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (внутреннего языка, структуры памяти и т.д.). Машинно-ориентированные языки позволяют использовать все возможности и особенности Машинно-зависимых языков:
· высокое качество создаваемых программ (компактность и скорость выполнения);
· возможность использования конкретных аппаратных ресурсов;
· предсказуемость объектного кода и заказов памяти;
· для составления эффективных программ необходимо знать систему команд и особенности функционирования данной ЭВМ;
· трудоемкость процесса составления программ (особенно на машинных языках и ЯСК), плохо защищенного от появления ошибок;
· низкая скорость программирования;
· невозможность непосредственного использования программ, составленных на этих языках, на ЭВМ других типов.
Машинно-ориентированные языки по степени автоматического программирования подразделяются на классы.
Как я уже упоминал, отдельный компьютер имеет свой определенный Машинный язык (далее МЯ), ему предписывают выполнение указываемых операций над определяемыми ими операндами, поэтому МЯ является командным. Однако, некоторые семейства ЭВМ имеют единый МЯ для ЭВМ разной мощности. В команде любого из них сообщается информация о местонахождении операндов и типе выполняемой операции.
В новых модулях ЭВМ намечается тенденция к повышению внутренних языков машинно - аппаратным путем реализовывать более сложные команды, приближающиеся по своим функциональным действиям к операторам алгоритмических языков программирования.
Языки Символического Кодирования (далее ЯСК), так же, как и МЯ, являются командными. Однако коды операций и адреса в машинных командах, представляющие собой последовательность двоичных (во внутреннем коде) или восьмеричных (часто используемых при написании программ) цифр, в ЯСК заменены на символы (идентификаторы), форма написания которых помогает программисту легче запоминать смысловое содержание операции. Это обеспечивает существенное уменьшение числа ошибок при составлении программ и в значительной степени облегчает труд программиста.
Есть также языки, включающие в себя все возможности ЯСК, посредством расширенного введения макрокоманд - они называются Автокоды .
В различных программах встречаются некоторые достаточно часто использующиеся командные последовательности, которые соответствуют определенным процедурам преобразования информации. Эффективная реализация таких процедур обеспечивается оформлением их в виде специальных макрокоманд и включением последних в язык программирования, доступный программисту.
Язык, являющийся средством для замены последовательности символов описывающих выполнение требуемых действий ЭВМ на более сжатую форму - называется Макрос (средство замены).
В основном, Макрос предназначен для того, чтобы сократить запись исходной программы. Компонент программного обеспечения, обеспечивающий функционирование макросов, называется макропроцессором. На макропроцессор поступает макроопределяющий и исходный текст. Реакция макропроцессора на вызов- выдача выходного текста.
Следующий вид языков - машинно-независимые языки . Это средства описания алгоритмов решения задач и информации, подлежащей обработке. Они удобны в использовании для широкого круга пользователей и не требуют от них знания особенностей организации функционирования ЭВМ и ВС.
Подобные языки получили название высокоуровневых языков программирования. Программы, составляемые на таких языках, представляют собой последовательности операторов, структурированные согласно правилам рассматривания языка(задачи, сегменты, блоки и т.д.). Операторы языка описывают действия, которые должна выполнять система после трансляции программы на МЯ.
Таким образом, командные последовательности (процедуры, подпрограммы), часто используемые в машинных программах, представлены в высокоуровневых языках отдельными операторами. Программист получил возможность не расписывать в деталях вычислительный процесс на уровне машинных команд, а сосредоточиться на основных особенностях алгоритма.
С расширением областей применения вычислительной техники возникла необходимость формализовать представление постановки и решение новых классов задач. Необходимо было создать такие языки программирования, которые, используя в данной области обозначения и терминологию, позволили бы описывать требуемые алгоритмы решения для поставленных задач, ими стали проблемно - ориентированные языки . Эти языки, ориентированные на решение определенных проблем, должны обеспечить программиста средствами, позволяющими коротко и четко формулировать задачу и получать результаты в требуемой форме.
Универсальные языки были созданы для широкого круга задач: коммерческих, научных, моделирования и т.д. Первый универсальный язык был разработан фирмой IBM. Он позволяет работать с символами, разрядами, числами с фиксированной и плавающей запятой. Язык учитывает включенные во многие машины возможности прерывания и имеет соответствующие операторы. Предусмотрена возможность параллельного выполнения участков программ.
Появление новых технических возможностей поставило задачу перед системными программистами - создать программные средства, обеспечивающие оперативное взаимодействие человека с ЭВМ их назвали диалоговыми языками .
Эти работы велись в двух направлениях. Создавались специальные управляющие языки для обеспечения оперативного воздействия на прохождение задач, которые составлялись на любых раннее неразработанных (не диалоговых) языках. Разрабатывались также языки, которые кроме целей управления обеспечивали бы описание алгоритмов решения задач.
Непроцедурные языки составляют группу языков, описывающих организацию данных, обрабатываемых по фиксированным алгоритмам (табличные языки и генераторы отчетов), и языков связи с операционными системами.
Позволяя четко описывать как задачу, так и необходимые для её решения действия, таблицы решений дают возможность в наглядной форме определить, какие условия должны быть выполнены, прежде чем переходить к какому-либо действию. Одна таблица решений, описывающая некоторую ситуацию, содержит все возможные блок-схемы реализаций алгоритмов решения.Программы, составленные на табличном языке, удобно описывают сложные ситуации, возникающие при системном анализе.
2.3. Описание некоторых языков программирования
Что ж, перейдем, наконец, непосредственно к языкам программирования.
Кобол (COBOL - COmmon Business-Oriented Language)- язык программирования высокого уровня, разработанный в конце 1950-х гг. ассоциацией КАДАСИЛ для решения коммерческих и экономических задач. Отличается развитыми средствами работы с файлами. Поскольку команды программ, написанных на этом языке, активно используют обычную английскую лексику и синтаксис, Кобол рассматривается как один из самых простых языков программирования. В настоящее время используется для решения экономических, информационных и других задач.
Лисп (LISP - LISt Processing)- алгоритмический язык, разработанный в 1960г. Дж. Маккарти и предназначенный для манипулирования перечнями элементов данных. Используется преимущественно в университетских лабораториях США для решения задач, связанных с искусственным интеллектом. В Европе для работ по искусственному интеллекту предпочитают использовать Пролог.
ЛОГО (LOGO)- язык программирования высокого уровня, разработан в Массачусетском технологическом институте ориентировочно в 1970 г. для целей обучения математическим понятиям. Используется также в школах и пользователями ПК при написании программ для создания чертежей на экране монитора и управления перьевым графопостроителем.
Паскаль (PASCAL - акроним с французского - Program Applique a la Selection et la Compilation Automatique de la Litterature)- процедурно-ориентированный язык программирования высокого уровня, разработанный в конце 1960-х гг. Никлаусом Виртом первоначально для обучения программированию в университетах. Назван в честь французского математика XVII в. Блеза Паскаля. В своей начальной версии Паскаль имел довольно ограниченные возможности, поскольку предназначался для учебных целей, однако последующие доработки позволили сделать его хорошим универсальным языком, широко используемым в том числе для написания больших и сложных программ. Существует ряд систем программирования на этом языке для разных типов ЭВМ. Для IBM PC наиболее популярной является система Turbo Pascal фирмы Borland (США).
Пролог (PROLOG - PROgramming in LOGic)- язык программирования высокого уровня декларативного типа, предназначенный для разработки систем и программ искусственного интеллекта. Относится к категории языков пятого поколения. Был разработан в 1971 г. в университете г. Марселя (Франция), относится к числу широко используемых и постоянно развиваемых языков.
Си (С)- многоцелевой язык программирования высокого уровня, разработанный Денисом Ритчи в начале 1970-х гг. на базе языка BCPL. Используется на мини-ЭВМ и ПК. Является базовым языком операционной системы Unix, однако применяется и вне этой системы для написания быстродействующих и эффективных программных продуктов, включая и операционные системы. Для IBM PC имеется ряд популярных версий языка Си, в том числе Turbo С (фирмы Borland), Microsoft С и Quick С (фирмы Microsoft), а также Zortech С (фирмы Symantec). Многие из указанных версий обеспечивают также работу с Си и Си++ .
Си++ (C++)- язык программирования высокого уровня, созданный Бьярном Страустрапом на базе языка Си. Является его расширенной версией, реализующей принципы объектно-ориентированного программирования. Используется для создания сложных программ. Для IBM PC наиболее популярной является система Turbo C++ фирмы Borland (США).
Фортран (FORTRAN - FORmula TRANslation)- язык программирования высокого уровня, разработанный фирмой IBM в 1956 г. для описания алгоритмов решения вычислительных задач. Относится к категории процедурно-ориентированных языков. Наиболее распространенными версиями этого языка являются Фортран IV, Фортран 77 и Фортран 90. Используется на всех классах ЭВМ.
В середине 60-х годов (1963 г.) в Дартмутском колледже (США) был создан язык Бейсик (англ. BASIC от Beginner’s Allpurpose Instruction Code - всецелевой символический код инструкций для начинающих). Со временем, когда стали появляться другие диалекты, этот «изначальный» диалект стали называть Dartmouth BASIC. Язык был основан частично на Фортран II и частично на Алгол-60, с добавлениями, делающими его удобным для работы в режиме разделения времени и, позднее, обработки текста и матричной арифметики.Бейсик был спроектирован так, чтобы студенты могли писать программы, используя терминалы с разделением времени. Он создавался как решение для проблем, связанных со сложностью более старых языков. Он предназначался для более «простых» пользователей, не столько заинтересованных в скорости программ, сколько просто в возможности использовать компьютер для решения своих задач. В силу простоты языка Бейсик многие начинающие программисты начинают с него свой путь в программировании.
Рефал , разработан у нас в России (СССР), в 1966г. Этот язык прост и удобен для описания манипуляций над произвольными текстовыми объектами.
Рефал широко применяется при разработке трансляторов с алгоритмических языков как универсальных и проблемно - ориентированных, так и автокодов. Кроме использования в задачах трансляции, Рефал имеет такие важные сферы применения, как машинное выполнение громоздких аналитических выкладок в теоретической физике и прикладной математике; проектирование «умных» информационных систем, осуществляющих нетривиальную логическую обработку информации; машинное доказательство теорем; моделирование целенаправленного поведения; разработка диалоговых обучающих систем; исследования в области искусственного интеллекта и т.п.Вследствие того, что в Рефале программист сам определяет структуру обрабатываемой информации, эффективность программы существенно зависит от удачного или неудачного выбора этой структуры. Правильное использование некоторых переменных также позволяет значительно повысить эффективность Рефал - программы.
AppleScript - машинно-зависимый (ориентирован на работу с ПК типа Macintosh фирмы Apple), близкий к естественному английскому язык программирования, предназначенный для автоматизации повторяющихся задач, преимущественно связанных с процессами компьютерной графики (в том числе обработки результатов сканирования, ввода изображений, цветоделения, составления каталогов, передачи печатных документов в World Wide Web и др.).
Clipper - язык высокого уровня и система программирования, предназначенные для разработки программ для ПК, преимущественно систем управления большими объемами данных. Владельцем и разработчиком языка и системы Clipper является фирма Nantucket (США). Первые программные продукты Clipper - ClipperWinter"84 (май 1985 г.), МсМах (версия для ПК Macintosh -1986 г.). Они реализует концепцию открытой архитектуры и представляет собой язык, компилятор и систему разработки программ для ПК, включающую набор команд и функций, препроцессор, компоновщик, набор утилит.
dBASE - язык программирования высокого уровня, предназначенный для создания пакетов прикладных программ, связанных с манипулированием большими объемами данных (Xbase). Первая версия языка dBASE II вышла в свет в начале 1980-х гг., в августе 1994 г. была выпущена версия dBASE 5.0 для Windows.
HTML , html (HyperText Markup Language) - язык разметки гипертекста, разработан в исследовательском центре CERN в 1992 г. Он является производным от SGML. HTML устанавливает формат гипермедийных документов в сети WWW. HTML-документы представляют собой ASCII-файлы, доступные для просмотра и редактирования в любом текстовом редакторе. Отличием от обычного текстового файла является наличие в HTML-документах специальных команд - тэгов, которые указывают правила форматирования документа.
PostScript - объектно-ориентированный язык, разработанный фирмой Adobe Systems (США). Является одним из основных стандартов для печати и передачи документов, работает с изображениями, включая шрифты. Представляет собой набор команд по формированию сложных геометрических фигур из коллекции простейших заготовок (круги, прямоугольники, прямые и кривые линии и т. д.). Шрифты и чертежи, выполненные с использованием векторной графики языка PostScript, могут масштабироваться без потери качества их печати или отображения на экране монитора. Используется для управления лазерными принтерами при печати документов и другими устройствами вывода данных.
SQL (Structured Query Language) - язык структурированных запросов - предназначен для обеспечения доступа к реляционным базам данных. Создан корпорацией IBM. Большинство файловых серверов и многие СУБД используют SQL в качестве стандартного средства доступа к данным из приложений-клиентов.
VRML (Virtual Reality Modelling Language) - язык моделирования виртуальной реальности (сленговый термин - вермел) - предназначен для унификации и упрощения представления трехмерной и подвижной графики, в том числе синхронизации изображения и звука. VRML рассматривается разработчиками как язык хотя и родственный, но альтернативный по отношению к HTML и взаимодействующий с ним. Впервые идея языка была предложена Марком Песке (Mark Pesce) в 1993г.
3. Язык программирования Java
3.1. Обзор языка Java
Данная часть работы посвящена одному из самых перспективных на сегодняшний день языков программирования - языку Java. Технологию по имени Java можно без преувеличения назвать революционной в индустрии разработки программного обеспечения. В чём же перспективность и революционность этой технологии?
Сегодня создание программного обеспечения представляет собой чрезвычайно тяжелое занятие. Трудности связаны с разнообразием архитектур машин, операционных систем, графических оболочек и т. д. Стремительный рост технологий, связанных с сетью Internet, дополнительно усложняет эту задачу. К сети Internet подключены компьютеры самых разных типов - IBM PC, Macintosh, рабочие станции Sun и другие. Все эти системы образуют единую сеть, которая должна работать как одно целое, обеспечивая при этом высокий уровень безопасности информации.
Таким образом, современные приложения должны быть безопасны, высокопроизводительны, работать в распределенной среде, быть нейтральны к архитектуре. Созданная компанией Sun Microsystems система разработки Java удовлетворяет всем этим требованиям. Java - объектно-ориентированный язык, удобный и надёжный в эксплуатации благодаря таким своим достоинствам, как многозадачность, поддержка протоколов Internet и многоплатформенность.
Язык Java поставляется с достаточно объемной библиотекой классов. Библиотеки классов Java значительно упрощают разработку приложений, предоставляя в распоряжение программиста мощные средстварешения распространенных задач.
Программы, разработанные на языке программирования Java, можно разделить по своему назначению и функциональности на две большие группы:
· Самостоятельные программы (назовём их приложения Java), работающие независимо на локальном компьютере
· Апплеты (applets), работающие в Internet
В настоящее время работа Java поддерживается всеми основными компьютерными платформами. Самостоятельное приложение, предназначенное для автономной работы, компилируется и выполняется на локальной машине под управлением системы времени выполнения Java.
Апплеты, которые обеспечивают языку его популярность, представляют собой разновидность приложений Java, которые интерпретируются Виртуальной Машиной Java, встроенной практически во все современные браузеры.
Каждый апплет - это небольшая программа, динамически загружаемая по сети с Web сервера при открытии в браузере HTML страницы, в которой имеется ссылка на апплет - точно так же, как картинка, звуковой файл или элемент мультипликации. Главная особенность апплетов заключается в том, что они являются настоящими программами, а не очередным форматом файлов для хранения мультфильмов или какой-либо другой информации. Апплет не просто проигрывает один и тот же сценарий, а реагирует на действия пользователя и может динамически менять свое поведение. С помощью апплетов вы можете сделать страницы сервера Web динамичными и интерактивными. Апплеты позволяют выполнять сложную локальную обработку данных, полученных от сервера Web или введенных пользователем с клавиатуры. Из соображений безопасности апплеты (в отличие от обычных приложений Java) не имеют никакого доступа к файловой системе локального компьютера. Все данные для обработки они могут получить только от сервера Web.
3.2. Процесс создания Java-программы
Исходный файл на языке Java - это текстовый файл, содержащий в себе одно или несколько описаний классов. Транслятор Java предполагает, что исходные тексты программ хранятся в файлах с расширениями java. Получаемый в процессе трансляции байт-код для каждого класса записывается в отдельном выходном файле, с именем совпадающем с именем класса, и расширением class. Именно сlass-файлы, содержащие байт-код, интерпретируются системой времени выполнения Java в машинный код конкретной системы. Прежде всего, байт-код Java загружается в систему времени выполнения загрузчиком классов. Загрузчик классов отвечает за то, чтобы были загружены все классы, необходимые для выполнения приложения. Затем байт-код проверяется верификатором байт-кода на отсутствие операций, которые могли бы нарушить безопасность системы или вызвать в ней аварийную ситуацию. Важно отметить, что загрузчик классов и верификатор байт-кодов не делают никаких предположений относительно происхождения кодов: получены они с локальной файловой системы или с другого континента. Верификатор гарантирует, что любой код, прошедший проверку, может быть использован интерпретатором без риска повредить его.
После такой проверки на безопасность байт-код интерпретируется в машинный код и запускается на выполнение интерпретатором. Причём классы, полученные локально (заслуживающие безусловного доверия), и классы, присланные по сети из остального мира (и потенциально враждебные), находятся в разных пространствах имён. При разрешении ссылки на какой-либо класс он ищется прежде всего в локальном пространстве. Это не позволяет "внешним" кодам подменить один из базовых классов в системе. Также в процессе интерпретации происходит подключение необходимых библиотек (файлы с расширением jar). Весь описанный процесс исполнения Java программ изображён на рис. 1.
Рис. 1. Процесс создания Java-приложения
Как уже было сказано выше, технология Java предполагает лёгкую переносимость программных продуктов с одной платформы на другую. Такую степень лёгкости переноса не обеспечивает ни какой язык программирования.
Если приложение Java (или апплет) должно работать на нескольких платформах, нет необходимости компилировать его исходные тексты несколько раз. Можно откомпилировать и отладить приложение Java на одной, наиболее удобной платформе. В результате получится байт-код, пригодный для любой платформы, где есть виртуальный процессор Java (рис.2).
Рис. 2. Подготовка приложения Java для работы на разных платформах
3.3. Достоинства языка Java
Язык должен был воплощать следующие качества: простоту и мощь, безопасность, объектную ориентированность, надежность, интерактивность, архитектурную независимость, возможность интерпретации, высокую производительность и легкость в изучении. Даже если вы никогда не напишете ни одной строки на языке Java, знать о его возможностях весьма полезно, поскольку именно перечисленные выше свойства языка и являются определяющими в его выборе.
Безопасность. В популярной литературе наших дней, особенно если речь заходит об Internet, стало модной темой обсуждение вопросов безопасности. Люди уверены, что использование Internet в коммерческой деятельности равносильно написанию номера своей кредитной карточки на стенке телефонной будки. Один из ключевых принципов разработки языка Java заключался в обеспечении защиты от несанкционированного доступа. Программы на Java не могут вызывать глобальные функции и получать доступ к произвольным системным ресурсам, что обеспечивает в Java уровень безопасности, недоступный для других языков.
Надежность. Java ограничивает вас в нескольких ключевых областях и таким образом способствует обнаружению ошибок на ранних стадиях разработки программы. В то же время в ней отсутствуют многие источники ошибок, свойственных другим языкам программирования. В традиционных средах программирования распределение памяти является довольно нудным занятием - программисту приходится самому следить за всей используемой в программе памятью, не забывая освобождать ее по мере того, как потребность в ней отпадает. Зачастую программисты забывают освобождать захваченную ими память или, что еще хуже, освобождают ту память, которая все еще используется какой-либо частью программы. Исключительные ситуации в традиционных средах программирования часто возникают в таких, например, случаях, как деление на нуль или попытка открыть несуществующий файл, и их приходится обрабатывать с помощью неуклюжих и нечитабельных конструкций. Java фактически снимает обе эти проблемы, используя сборщик мусора для освобождения незанятой памяти и встроенные объектно-ориентированные средства для обработки исключительных ситуаций.
Специальный процесс сборки мусора - это одна из интереснейших особенностей языка программирования Java и среды выполнения приложений Java, предназначенная для удаления ненужных объектов из памяти. Эта система избавляет программиста от необходимости внимательно следить за использованием памяти, освобождая ненужные более области явным образом.
Интерактивность. Java создавалась как средство, которое должно удовлетворить насущную потребность в создании интерактивных сетевых программ. В Java реализовано несколько интересных решений, позволяющих писать код, который выполняет одновременно массу различных функций и не забывает при этом следить за тем, что и когда должно произойти. В языке Java для решения проблемы синхронизации процессов применен наиболее элегантный из всех когда-либо изобретенных методов, который позволяет конструировать прекрасные интерактивные системы. Простые в обращении изящные подпроцессы Java дают возможность реализации в программе конкретного поведения, не отвлекаясь при этом на встраивание глобальной циклической обработки событий.
Независимость от архитектуры ЭВМ. Вопрос о долговечности и переносимости кода важнее религиозных войн между ПК и Макинтошами. Создатели Java наложили на язык и на среду времени выполнения несколько жестких требований, которые на деле, а не на словах позволяют, однажды написав, всегда запускать программу в любом месте и в любое время.
Интерпретация плюс высокая производительность. Необычайная способность Java исполнять свой код на любой из поддерживаемых платформ достигается тем, что ее программы транслируются в некое промежуточное представление, называемое байт-кодом, который, в свою очередь, может интерпретироваться в любой системе, в которой есть среда времени выполнения Java. Большинство ранних систем, в которых пытались обеспечить независимость от платформы, обладало огромным недостатком - потерей производительности (Basic, Perl). Несмотря на то, что в Java используется интерпретатор, байт-код легко переводится непосредственно в «родные» машинные коды (Just In Time compilers) «на лету». При этом достигается очень высокая производительность (Symantec JIT встроен в Netscape Navigator).
Простота изучения. Язык Java, хотя и более сложный чем языки командных интерпретаторов, все же неизмеримо проще для изучения, чем другие языки программирования, например C++. Java отличен от С++ облегченным восприятием синтаксиса Java.
Заключение
Изобретение языка программирования высшего уровня позволило нам общаться с машиной, похоже, даже понимать её. Действительно,если мы обратим внимание на темпы роста и развития новейших технологий в области программирования, то можно предположить, что в ближайшем будущем, человеческие познания в этой сфере, помогут произвести на свет языки, умеющие принимать, обрабатывать и передавать информации в виде мысли, слова, звука или жеста. Такие языки могут по праву носить имя «высочайших». Возможно, концепция решения этого вопроса проста, а ближайшее будущее этого проекта уже не за горами, и в этот момент, где-нибудь горбится молодой, никем не признанный специалист и разрабатывает новейшую систему искусственного интеллекта, которая наконец-то позволит человеку, с помощью своих машинных языков, вести диалог с компьютером на ТЫ.
Быть может именно язык программирования Java, очень элегантный и красивый язык, станет основой программирования будущего. Ведь именно Java оснащён богатейшей библиотекой классов и в то же время довольно прост для освоения. Необходимо также отметить, что цикл разработки приложений сокращен за счет того, что система построена на основе интерпретатора. Приложение получается автоматически переносимым между множеством платформ и операционных систем. За счет встроенной системы сборки мусора программист освобождается от необходимости явного управления памятью. Приложение легко сопровождается и модифицируется, т.к. модули могут быть загружены с сети. Встроенная система безопасности, не допускает незаконного доступа и проникновения вирусов. Все эти качества, я считаю, позволят Javaзанять лидирующее место среди языков программирования.
Завершая свой труд на такой оптимистичной ноте, хочется сказать, что прогресс науки и техники, высоко-компьютеризированное будущее человечества, как единственного существа на планете, пусть и не использующего один, определенный разговорный язык, но способного так быстро прогрессировать и развивать свой интеллект,позволит в скором времени перейти от многоязыковой системы к всеобщему пониманию.
Список использованных источников
1. Бишоп Д. Эффективная работа: Java 2. - СПб.: Питер; К.: Издательская группа BHV, 2002г. – 592с.
2. Ваулин А.С.«Языки программирования»: кн.5, 1993 г. – 232с.
3. Вебер Д. Технология Java в подлиннике: пер. с англ. - СПб.: БХВ - Петербург, 2001г.– 1104с.
4. ЗарецкаяИ.Т., КолодяжныйБ.Г., ГуржийА.Н., СоколовА.Ю. Информатика 10-11 класс. - К.: «Форум», 2001 г.– 494с.
5. ЛяховичВ.Ф. Основы информатики. -Ростов-на-Дону: Феникс, 1996г. – 699с.
6. Ушкова В.«Новые языки программирования и тенденции их развития», 1982 г. – 335с.
7. Вычислительная техника и программирование / Под ред. А.В.Петрова -М.: Высш. шк., 1990г. – 479с.
8. Информатика: Базовый курс / С.В. Симонович и др. - СПб.: Питер, 1999г. – 640с.
9. Материалы интернет-сайта: www.sun.ru
МИНИСТЕРСТВО НАУКИ И ОБРАЗОВАНИЯРОССИЙСКОЙ ФЕДЕРАЦИИ
КАЗАНСКИЙ ГОСУДАРСТВЕННЫЙ
ФИНАНСОВО-ЭКОНОМИЧЕСКИЙ ИНСТИТУТ
Кафедра математики и экономической информатики
Понятие о программировании. Языки программирования
Выполнил: Молотов Л.А.
Проверила: доц. Кодолова И.А.
Казань 2010
Введение 3
1. Основные положения о программировании 4
1.1.Понятие программирования 4
1.2.Парадигмы программирования 5
1.3.Инструментарий технологии программирования 8
2. Языки программирования 11
2.1. Понятие языка программирования 11
2.2. Классификация языков программирования 14
2.3. Описание некоторых языков программирования 17
3. Язык программирования Java 22
3.1. Обзор языка Java 22
3.2.Процесс создания Java-программы 23
3.3. Достоинства языка Java 25
Заключение 28
Список использованных источников 29
Введение
Когда изучаешь какой-либо вопрос, считаешь, что знаешь его; когда можешь писать о нем, становишься уверенней в своих знаниях; уверенность возрастает, когда можешь научить этому кого-нибудь другого; и совершенно уверен, когда начинаешь программировать. Алан.Дж.Перлис
До середины 60-х компьютеры были слишком дорогими машинами, использовавшимися только для особых задач, и выполнявшими только одну задачу за раз.
Языки программирования этой эры, как и компьютеры на которых они использовались, были разработаны для специфичных задач, таких как научные вычисления. Поскольку машины были дорогими и медленными, то и машинное время было дорого – поэтому скорость выполнения программы стояла на первом месте.
Однако в течение 60-х цена на компьютеры стала падать так, что даже небольшие компании могли их себе позволить; скорость компьютеров всё увеличивалась, и наступило время, когда создатели языков программирования все больше стали задумываться об удобстве написания программ, а не только скорости их выполнения.
На заре компьютеризации, машинный язык был единственным языком, большего человек к тому времени не придумал. Для спасения программистов от сурового машинного языка программирования, были созданы языки высокого уровня (т.е. немашинные языки).«Мелкие» (атомарные) операции, выполняемые непосредственно устройствами машины, объединили в более «крупные», высокоуровневые операции и целые конструкции, с которыми человеку куда проще и удобнее работать. Так программирование сделало колоссальный прорыв: новые языки стали своеобразным связующим мостом между человеком и машинным языком компьютера.
Прогресс компьютерных технологий определил процесс появления новых разнообразных знаковых систем для записи алгоритмов (языков программирования) и развитие процесса программирования в целом.
1. Основные положения о программировании
1.1. Понятие программирования
Терминпрограммирование означаетпроцесс и искусство создания компьютерных программ с помощью специальных языков программирования.
В общем смысле слова, программирование есть формализация предопределенного состояния, по реакции на событие, реализуемого средствами математики или естественных наук.
В узком смысле слова, программирование рассматривается как кодирование алгоритмов на заданном языке программирования. В более широком смысле программирование - процесс создания программ, то есть разработка программного обеспечения.
Программирование включает в себя:
· Проектирование - разработка комплекса алгоритмов
· Кодирование и компиляцию - написание исходного текста программы и преобразование его в исполнимый код с помощью компилятора
· Тестирование и отладку - выявление и устранение ошибок в программах
· Испытания и сдачу программ
· Сопровождение
Различные языки программирования поддерживают различные стили программирования (так называемые«парадигмы программирования»). Отчасти, искусство программирования состоит в том, чтобы выбрать один из языков, наиболее полно подходящий для решения имеющейся задачи. Разные языки требуют от программиста различного уровня внимания к деталям при реализации алгоритма, результатом чего часто бывает компромисс между простотой и производительностью (или между временем программиста и временем пользователя).
Единственный язык, напрямую выполняемый процессором - это машинный язык (также называемый «машинным кодом»). Как уже было сказано, изначально, все программисты прорабатывали каждую мелочь в машинном коде, но сейчас эта трудная работа уже не делается. Вместо этого, программисты пишут исходный код, и компьютер (используя компилятор, интерпретатор или ассемблер, речь о которых пойдёт чуть позже) транслирует его, в один или несколько этапов, уточняя все детали, в машинный код, готовый к исполнению на целевом процессоре. Однако, в некоторых языках, вместо машинного кода генерируется интерпретируемый двоичный код «виртуальной машины», также называемый байт-кодом (byte-code). Такой подход применяется в Forth, Lisp, Java (данному языку посвящена 3 Глава реферата).
Теперь, когда мы знаем немного о понятии «программирование», можно переходить к материальной части процесса создания программ. Это, разумеется, технические (аппаратные) средства обеспечения программирования - совокупность электрических, электронных и механических компонентов автоматизированных систем составляет их техническое обеспечение (в отличие от программных средств, представляющих собой программное обеспечение автоматизированных систем). Например, электронная вычислительная машина (ЭВМ) или компьютер - комплекс технических и программных средств, основанных на использовании электроники и предназначенных для автоматической или автоматизированной обработки данных в процессе решения вычислительных и информационных задач.
1.2. Парадигмы программирования
В основе того или иного языка программирования лежит некоторая руководящая идея, оказывающая существенное влияние на стиль соответствующих программ.В зависимости от назначения и/или способа написания программ различаютпарадигмы (также известные как подходы или технологии ) программирования :
Структурное программирование - методология программирования, базирующаяся на системном подходе к анализу, проектированию и реализации программного обеспечения. Эта методология родилась в начале 70-х годов и оказалась настолько жизнеспособной, что и до сих пор является основной в большом количестве проектов. Основу этой технологии составляют следующие положения:
· Сложная задача разбивается на более мелкие, функционально лучше управляемые задачи. Каждая задача имеет один вход и один выход. В этом случае управляющий поток программы состоит из совокупности элементарных подзадач с ясным функциональным назначением.
· Простота управляющих структур, используемых в задаче. Это положение означает, что логически задача должна состоять из минимальной, функционально полной совокупности достаточно простых управляющих структур. В качестве примера такой системы можно привести алгебру логики, в которой каждая функция может быть выражена через функционально полную систему: дизъюнкцию, конъюнкцию и отрицание.
· Разработка программы должна вестись поэтапно. На каждом этапе должно решаться ограниченное число четко поставленных задач с ясным пониманием их значения и роли в контексте всей задачи. Если такого понимания не достигается, это говорит о том, что данный этап слишком велик и его нужно разделить на более элементарные шаги.
Концепция модульного программирования. Так же как и для структурной технологии программирования, концепцию модульного программирования можно сформулировать в виде нескольких понятий и положений:
· Функциональная декомпозиция задачи - разбиение большой задачи на ряд более мелких, функционально самостоятельных подзадач - модулей. Модули связаны между собой только по входным и выходным данным.
· Модуль - основа концепции модульного программирования. Каждый модуль в функциональной декомпозиции представляет собой «черный ящик» с одним входом и одним выходам. Модульный подход позволяет безболезненно производить модернизацию программы в процессе ее эксплуатации и облегчает ее сопровождение. Дополнительно модульный подход позволяет разрабатывать части программ одного проекта на разных языках программирования, после чего с помощью компоновочных средств объединять их в единый загрузочный модуль.
· Реализуемые решения должны быть простыми и ясными. Если назначение модуля непонятно, то это говорит о том, что декомпозиция начальной или промежуточной задачи была проведена недостаточно качественно. В этом случае необходимо еще раз проанализировать задачу и, возможно, провести дополнительное разбиение на подзадачи. При наличии сложных мест в проекте их нужно подробнее документировать с помощью продуманной системы комментариев. Этот процесс нужно продолжать до тех пор, пока вы действительно не добьетесь ясного понимания назначения всех модулей задачи и их оптимального сочетания.
· Назначение всех переменных модуля должно быть описано с помощью комментариев по мере их определения.
Объектно-ориентированное программирование (ООП). Идея ООП заключается в стремлении связать данные с обрабатывающими эти данные процедурами в единое целое - объект. ООП основано на трех важнейших принципах, придающих объектам новые свойства. Этими принципами являются инкапсуляция, наследование и полиморфизм.
· Инкапсуляция - объединение в единое целое данных и алгоритмов обработки этих данных. В рамках ООП данные называются полями объекта, а алгоритмы - объектными методами.
· Наследование - свойство объектов порождать своих потомков. Объект - потомок автоматически наследует от родителей все поля и методы, может дополнять объекты новыми полями и заменять (перекрывать) методы родителя или дополнять их.