Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПЕРСОНАЛЬНОГО КОМПЬЮТЕРА



ОСНОВЫ ПРОГРАММИРОВАНИЯ

ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПЕРСОНАЛЬНОГО КОМПЬЮТЕРА

Компьютер сам по себе (" Наrdwаrе " — " жесткий товар" — аппаратные средст­ва, аппаратура) без разработанных человеком для него программ (" Softwаrе " — " мягкий товар" — программные средства, программное обеспечение) не может вы­полнить какой-либо работы. Программным обеспечением (ПО) называют органи­зованную совокупность программ постоянного употребления, ориентирующую ЭВМ на тот или иной класс применений.

Различают три основные группы программ для компьютера: системное, при­кладное программное обеспечение и инструментальные средства, обеспечивающие создание новых программ для ЭВМ.

Системное программное обеспечение

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

Прикладное программное обеспечение

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

Инструментальные средства

Инструментальные средства (системы программирования) — это пакеты про­грамм для создания или изменения программ для ЭВМ. Современные системы про­граммирования предоставляют программисту мощные и удобные средства для раз­работки программ.

Описание алгоритма с помощью естественного языка.

Рассмотрим следующие типичные операции алгоритма:

а) присвоение :

х = выражение.

Здесь х - переменная, которой будет присвоено значение, полученное в результате вычисления выражения. Например, х = у + 1.

б) условие :

Если условие, перейти на N.

В случае, когда результат проверки условия - ИСТИНА, осуществляется переход к операции N. В противном случае выполняется следующая по порядку операция.

в) переход к операции с номером N :

Перейти на N.

г) конец вычислений .

Программа заканчивает работу.

Описание алгоритма с помощью алгоритмических языков.

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

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

а) ху;

б) х · у;

в) х Ч у.

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

КАК ВЫЗВАТЬ ПРОГРАММУ?

Программы хранятся на дисках в виде программных файлов — совокупности команд для решения на компьютере определенной задачи. Файлы распознают по именам.

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

ЯЗЫКИ ПРОГРАММИРОВАНИЯ

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

Современные компьютеры не настолько совершенны, чтобы понимать про­граммы, записанные на каком-либо употребляемом человеком языке — русском, английском, японском. Команды, предназначенные для ЭВМ, необходимо запи­сывать в понятной ей форме. С этой целью применяются языки программирования — искусственные языки, алфавит, словарный запас и структура которых удобны человеку и понятны компьютеру.

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

Исходя из этого все языки программирования делятся на языки низкого, высо­кого и сверхвысокого уровня.

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

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

Более многочисленную группу составляют языки программирования высокого уровня, средства которых допускают описание задачи в наглядном, легко воспри­нимаемом виде. Отличительной особенностью этих языков является их ориентация не на систему команд той или иной ЭВМ, а на систему операторов, характерных для записи определенного класса алгоритмов. К языкам программирования этого типа относятся: Бейсик, Фортран, Алгол, Паскаль, Си. Программа на языках высо­кого уровня записывается системой обозначений, близкой человеку (например, фиксированным набором слов английского языка, имеющих строго определенное назначение). Программу на языке высокого уровня проще понять и значительно легче отладить.

К языкам программирования сверхвысокого уровня можно отнести Алгол-68, при разработке которого сделана попытка формализовать описание языка, привед­шая к появлению абстрактной и конкретной программ. Абстрактная программа создается программистом, конкретная — выводится из первой. Предполагается, что при таком подходе принципиально невозможно породить неверную синтакси­чески (а в идеале и семантически) конкретную программу. Язык АРL относят к языкам сверхвысокого уровня за счет введения сверхмощных операций и операто­ров. Запись программ на таком языке получается компактной.

Все вышеперечисленные языки — вычислительные. Более молодые — декла­ративные (непроцедурные) языки, отличительная черта которых — задание связей и отношений между объектами и величинами и отсутствие определения последова­тельности выполнения действий (Пролог). Такие языки сыграли важную роль в программировании, так как они дали толчок к разработке специализированных языков искусственного интеллекта и языков представления знаний.

Движущие силы эволюции ЯП

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

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

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

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

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

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

История развития ЯП

Известно, что первым программистом была женщина - леди Ада Лавлейс, дочь лорда Байрона. Она разрабатывала программы для одного из первых механических компьютеров, созданного в начале прошлого века английским ученым Чарльзом Беббиджом. Однако настоящее программирование в современном понимании началось с момента создания первой электронной вычислительной машины. Но тем не менее, имя этой замечательной женщины - Ada - присвоено одному из самых мощных современных ЯП, который является базовым для министерства обороны США.

Первые ЭВМ, созданные человеком, имели небольшой набор команд и встроенных типов данных, но позволяли выполнять программы на машинном языке. Машинный язык (МЯ) - единственный язык, понятный ЭВМ. Он реализуется аппаратно: каждую команду выполняет некоторое электронное устройство. Программа на МЯ представляет собой последовательность команд и данных, заданных в цифровом виде. Например, команда вида 1А12 в 16-ричном виде или 0001101000010010 в двоичном виде означает операцию сложения ( ) содержимого регистров 1 и 2.

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

Стремление программистов оперировать не цифрами, а символами, привело к созданию мнемонического языка программирования, который называют ассемблером, мнемокодом, автокодом. Этот язык имеет определенный синтаксис записи программ, в котором, в частности, цифровой код операции заменен мнемоническим кодом. Например, команда сложения записывается в виде AR 1, 2 и означает сложение ( A ddition) типа регистр-регистр ( R egister) для регистров 1 и 2. Теперь программа имеет более удобочитаемую форму, но ее не понимает ЭВМ. Поэтому понадобилось создать специальную программу транслятор, который преобразует программу с языка ассемблера на МЯ. Эта проблема потребовала, в свою очередь, глубоких научных исследований и разработки различных теорий, например теорию формальных языков, которые легли в основу создания трансляторов. Практически любой класс ЭВМ имеет свой язык ассемблера. На сегодняшний день язык ассемблера используется для создания системных программ, использующих специфические аппаратные возможности данного класса ЭВМ.

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

Принципиальными отличиями ЯВУ от языков низкого уровня являются:

· использование переменных;

· возможность записи сложных выражений;

· расширяемость типов данных за счет конструирования новых типов из базовых;

· расширяемость набора операций за счет подключения библиотек подпрограмм;

· слабая зависимость от типа ЭВМ.

С усложнением ЯП усложняются и трансляторы для них. Теперь в набор инструментов программиста, кроме транслятора, входит текстовый редактор для ввода текста программ, отладчик для устранения ошибок, библиотекарь для создания библиотек программных модулей и множество других служебных программ. Все вместе это называется системой программирования. Наиболее яркими представителями ЯВУ являются FORTRAN, PL/1, Pascal, C, Basic, Ada.

Может возникнуть вопрос: почему создано столько различных языков одного класса? Почему нельзя создать один язык на все случаи жизни? Ответ на этот вопрос может быть таким же, как и на вопрос о различных языках народов мира: так уж получилось. Каждый из разработчиков ЯВУ стремился создать самый лучший и самый универсальный язык, который позволял бы быстро получать самые эффективные, надежные и безошибочные программы. Однако в процессе этого поиска выяснилось, что дело не в самом языке, а в технологии его использования. Поэтому дальнейшее развитие языков стало определяться новыми технологиями программирования.

Одновременно с развитием универсальных ЯВУ стали развиваться проблемно-ориентированные ЯП, которые решали экономические задачи ( COBOL ), задачи реального времени ( Modula-2, Ada ), символьной обработки ( Snobol ), моделирования ( GPSS, Simula, SmallTalk ), численно-аналитические задачи ( Analitic ) и другие. Эти специализированные языки позволяли более адекватно описывать объекты и явления реального мира, приближая язык программирования к языку специалиста в проблемной области.

Другим направлением развития ЯП является создание языков сверхвысокого уровня (ЯСВУ). На языке высокого уровня программист задает процедуру (алгоритм) получения результата по известным исходным данным, поэтому они называются процедурными ЯП. На ЯСВУ программист задает отношения между объектами в программе, например систему линейных уравнений, и определяет, что нужно найти, но не задает как получить результат. Такие языки еще называют непроцедурными, т.к. сама процедура поиска решения встроена в язык (в его интерпретатор). Такие языки используются, например, для решения задач искусственного интеллекта ( Lisp, Prolog ) и позволяют моделировать мыслительную деятельность человека в процессе поиска решений.

К непроцедурным языкам относят и языки запросов систем управления базами данных ( QBE, SQL ).

Классификация ЯП

Исходя из вышесказанного, ЯП можно классифицировать по следующим признакам.

1. По степени ориентации на специфические возможности ЭВМ ЯП делятся на:

· машинно-зависимые;

· машинно-независимые.

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

2. По степени детализации алгоритма получения результата ЯП делятся на:

· языки низкого уровня;

· языки высокого уровня;

· языки сверхвысокого уровня.

3. По степени ориентации на решение определенного класса задач:

· проблемно-ориентированные;

· универсальные.

4. По возможности дополнения новыми типами данных и операциями:

· расширяемые;

· нерасширяемые.

5. По возможности управления реальными объектами и процессами:

· языки систем реального времени;

· языки систем условного времени.

6. По способу получения результата:

· процедурные;

· непроцедурные.

7. По типу решаемых задач:

· языки системного программирования;

· языки прикладного программирования.

8. Непроцедурные языки по типу встроенной процедуры поиска решений делятся на:

· реляционные;

· функциональные;

· логические.

Рассмотренная схема классификации позволяет каждому ЯП присвоить один из признаков каждого класса.

Тенденции развития ЯП

Рассмотренная схема классификации ЯП позволяет сделать вывод о том, что ЯП обладают определенной специализацией. Поэтому рассмотрим тенденции развития классов ЯП.

Языки системного программирования, на которых создаются операционные системы, трансляторы и другие системные программы, развиваются в направлении повышения их уровня и независимости от ЭВМ. На сегодняшний день почти 90% системного программного обеспечения создается не на языке ассемблера, а на языке C. Например, операционная система Unix практически полностью написана на C. Язык C позволяет получать программы, сравнимые по своей эффективности с программами, написанными на языке ассемблера. Правда, объем программ получается больше, но зато эффективность их создания гораздо выше.

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

Другим направлением является повышение уровня самого машинного языка. Например, известны Lisp -машины, в которых машинным языком является язык Lisp (реализован аппаратно). Другим примером являются ЭВМ 5-го поколения с машинным языком искусственного интеллекта Prolog.

ЯВУ развиваются в направлении поддержки технологий программирования, обеспечения низкоуровневых операций (уровня ассемблера), обеспечения новых информационных технологий (НИТ) и независимости от среды реализации. Следует сказать, что по своим возможностям ЯВУ постепенно сближаются и программисту на C все труднее становится спорить о преимуществах языка C с программистом, работающим на языке Basic.

Тотальный бум переживает технология объектно-ориентированного программирования (ООП): практически все современные ЯВУ поддерживают ООП. Да и все современные программные системы построены на принципах ООП, и сегодня каждый программирующий студент знает, что такое инкапсуляция, наследование и полиморфизм. Для обозначения факта поддержки ООП языки получают приставку Object (например, ObjectPascal ) или другие (например, C++ ).

Windows, сети ЭВМ, серверы, базы данных и Internet, как основа НИТ, оказывают сильнейшее влияние на современные ЯП. Разработчики ЯП просто обязаны включать в языки средства поддержки НИТ, чтобы привлечь программистов на свою сторону. Для поддержки Windows создаются системы визуального программирования с приставкой Visual, например Visual C++, Visual Basic и др. Для работы с БД, сетями и Internet в ЯП включаются специальные внутренние или внешние средства.

Стремление к созданию программ, независимых от типа ЭВМ и операционной системы, привело к созданию языка Java. Основная задача Java - обеспечить выполнение программ, распространяемых через Web -страницы Internet, на любой рабочей станции. Кроме того, Java поддерживает все средства НИТ и в ближайшее время, очевидно, станет самым популярным ЯП.

Популярность языков искусственного интеллекта за последние 5 лет, к сожалению, заметно упала. На мой взгляд это связано прежде всего с психологическими проблемами, которые испытывают программисты при использовании этих языков. Например, в мощнейшем языке Lisp программа имеет очень сложную для понимания списочную структуру и небольшой по объему проект очень быстро выходит из под контроля. В языке Prolog программист должен точно знать логику работы встроенной машины логического вывода, а работа программы зависит от структуры и содержимого базы знаний (БЗ). Если с проектированием программы и структуры БЗ программист справляется, то для заполнения БЗ он должен быть экспертом в предметной области либо тесно контактировать с экспертом и извлекать из него знания, а то и другое является сложной задачей.

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

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

Трансляторы

Так как текст записанной на языке высокого уровня программы не понятен компьютеру, то требуется перевести его на машинный язык. Такой перевод программы с языка программирования на язык машинных кодов называется трансляцией, а выполняется он специальными программами — трансляторами.

Существует три вида трансляторов: интерпретаторы, компиляторы и ассембле­ры.

Интерпретатором называется транслятор, производящий пооператорную (покомандную) обработку и выполнение исходной программы.

Компилятор преобразует (транслирует) всю программу в модуль на машин­ном языке, после этого программа записывается в память компьютера и лишь по­том исполняется.

Ассемблеры переводят программу, записанную на языке ассемблера (автоко­да), в программу на машинном языке.

Любой транслятор решает следующие основные задачи:

• анализирует транслируемую программу, в частности определяет, содержит ли она синтаксические ошибки;

• генерирует выходную программу (ее часто называют объектной или рабочей) на языке команд ЭВМ (в некоторых случаях транслятор генерирует выходную про­грамму на промежуточном языке, например, на языке ассемблера);

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

Синтаксис

Каждый язык (не только программирования) характеризуется алфавитом - набором букв, допустимых к использованию, и синтаксисом - набором правил, по которым эти символы следует записывать. Большинство ЯП в качестве алфавита используют латинский алфавит, дополненный арабскими цифрами и всякого рода разделителями вроде скобок, знаков арифметических операций, запятых, etc.

Наиболее общим в синтаксисах ЯП является выделение среди всех лексем (минимальных единиц языка, имеющих самостоятельный смысл) служебных (зарезервированных) слов и правила записи операторов - " предложений" из лексем.

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

Синтаксические правила наиболее распространенных алгоритмических ЯП различаются лишь в деталях.

Оператор условия

Необходимость его присутствия в языке очевидна. Предоставляет возможность выполнить то или иное действие в зависимости от истинности некоторого логического условия (ЛУ). Практически во всех языках называется if.

Условный оператор практически всегда имеет две формы - усеченную, когда указывается лишь действие, выполняемое при истинности ЛУ, и полную когда указываются действия выполняемые при обоих значениях ЛУ. Типичный пример

if (a=4) a=a+1;
else a=b-2; //C++

Параметрический цикл

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

Наиболее часто такие циклы имеют следующий смысл. Некоторой переменной, называемой параметром присваивается некоторое начальное значение. Затем выполняются повторяемые операторы, называемые телом цикла, после чего параметр изменяется на некоторое значение, называемое шагом. Новое значение параметра сравнивается с конечным значением, и, если значение параметра не превысило конечное значение, все (выполнение тела цикла и изменение параметра) повторяется; в противном случае цикл считается завершенным.

Do 100 I=3, 8, 1
*операторы тела цикла
100 Continue
* Fortran IV

Операторы цикла с условием

Однако не всякий алгоритм позволяет заранее предсказать количество повторений тех или иных действий: довольно часто некоторые действия следует повторять вплоть до достижения некоторой цели (читай - выполнения некоторого условия). Соответственно, для предоставления программисту возможности простой и эффективной реализации такого рода алгоритмов в ЯП высокого уровня включают циклы с условием окончания.

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

Здесь следует отметить, что в зависимости от того, когда производится проверка ЛУ - до или после выполнения тела цикла - различают циклы с предпроверкой и постпроверкой условия. Небольшие размышления позволяют сделать вывод о некоторых свойствах такого рода циклов.

· цикл с предпроверкой условия может ни разу не выполниться, в том случае, если условие продолжения цикла не выполняется даже при первой проверке;

· цикл с постпроверкой выполнится как минимум один раз вне зависимости от значения условия продолжения.

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

Do While Not EOF()
& & Тело цикла c предпроверкой
EndDo & & FoxPro

Repeat
{Тело цикла с постпроверкой}
Until i=4; {Pascal}

Механизмы пересылки данных

Предоставляют программисту возможность перенести значение каким-либо образом размещенных в памяти данных в другие (тоже размещенные) данные. Попросту говоря позволяет присваивать одним переменным значение других переменных. Реализуются с помощью либо оператора (Pascal), либо операции (C++). Стоит отметить, что перемещение самих данных (изменение месторасположения переменных) не реализовано практически ни в одном ЯП.

a: = b; {Pascal}
a=b=c=d; //С++

Первый из приведенных примеров демонстрирует реализацию с помощью оператора, второй - с помощью операции (напомним, что операция обладает результатом).

Механизмы размещения данных

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

var
a: byte; {Pacal}

float c; // C++

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

struct Point {
int x, y;
char color; } //C++

D: Array[2..5] Of Word; {Pascal}

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

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

Различные языки программирования могут позволять (FoxPro, C++) или не позволять (Pascal) размещать переменные в процессе выполнения программы. Однако, большинство ЯП, в том числе и Pascal, имеют механизмы динамического распределения памяти (ДРП), позволяющие выделять (и освобождать по завершении использования) не занятую никакой программой память для временного использования. При этом доступ к выделенным таким образом участкам памяти производится с использованием указателей.

Механизмы доступа к данным

Для предоставления программисту простого и легкого доступа к различным объектам, все ЯП высокого уровня используют идентификаторы. С идентификатором компилятор однозначно сопоставляет некоторый адрес в памяти и подставляет его (адрес) в машинный код на этапе компиляции программы. Естественно по идентификатору (читай - адресу) можно произвести чтение и/или запись какого либо значения, то есть получить полный доступ к данным (стандартных типов).

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

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

Point.x = Point.y-3; //C++

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

D[3]: = D[2]+D[4]; {Pascal}

Интерфейсные механизмы

Выполнение любых алгоритмов бесполезно, если оно не сопровождается демонстрацией результатов и вводом исходных данных. Поэтому каждый ЯП, за исключением, пожалуй, С и С++, содержит специальные операторы ввода-вывода. Кроме того, вместо использования стандартных операторов ввода-вывода языка, за счет управления аппаратными средствами ЦВМ, программист может производить ввод и вывод информации более " продвинутыми" способами. Соответственно, для этого необходимы механизмы управления аппаратурой.

Механизмы структуризации

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

Дальнейшее развитие данной концепции достаточно давно (около 1978 года) привело к идее объединения стуктур данных с их структурными свойствами, из чего выросла концепция объектно-ориентированного программирования. Однако, ее реализация слишком различна для разных ЯП (а в некоторых до сих пор полностью не реализована),

чтобы выносить ее в общий обзор языков программирования.

Типы и структуры данных


Поделиться:



Последнее изменение этой страницы: 2017-03-17; Просмотров: 389; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.085 с.)
Главная | Случайная страница | Обратная связь