Виртуальная школа компьютерных технологий icon

Виртуальная школа компьютерных технологий



НазваниеВиртуальная школа компьютерных технологий
страница1/4
Сазанов В.М
Дата конвертации05.07.2012
Размер0.58 Mb.
ТипЛекция
  1   2   3   4




ВИРТУАЛЬНАЯ ШКОЛА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ

Лекция 8.

Технологии и языки программирования




Составитель: Сазанов В.М.
Содержание лекции

Аннотация





Аннотация 1

Использовалась литература: 1

Цель - Знать и уметь - Поле понятий 2

^ Знать - Уметь – Обладать навыками 2

Перечень понятий и категорий 2

Вводная часть 3

Традиционная модель вычислений 3

Трансляторы и процесс трансляции 5

^ Формальные грамматики и НБФ-нотация 7

Расширенная НБФ-нотация 8

Развитие языков программирования 8

Первые языки программирования 8

Области применения языков программирования 9

^ Парадигмы программирования 9

Стандартизация языков программирования 10

Среда проектирования 10

Объектно-ориентированная технология и основы проектирования ИС 11

^ Основные концепции ООП 11

Концепция современного анализа и проектирования информационных систем 12

Методология объектно-ориентированного программирования 12

Методология объектно-ориентированного анализа и проектирования 14

^ Основные этапы развития языка UML 17

Приложение 1. История объектно-ориентированного программирования 19

Из "древней истории" 19

"Средние века" ООП. Хронология 20

Наше время 20

Что дальше? 21

Оригинальные возможности Smalltalk 22

Литература прошлых лекций 23



^

Использовалась литература:


  1. Непейвода Н. Н.
    Стили и методы программирования   
    Интернет-Университет Информационных Технологий http://www.INTUIT.ru

  2. Баженова И. Ю. Сухомлин В. А. Введение в программирование   
    Интернет-Университет Информационных Технологий http://www.INTUIT.ru

  3. Бобровский С. История объектно-ориентированного программирования
    PC Week/RE № 28 от 05.08.2003

  4. Роганов Е. А. Основы информатики и программирования
    Интернет-Университет Информационных Технологий http://www.INTUIT.ru

  5. Зыков С. В. Введение в теорию программирования. Функциональный подход
    Интернет-Университет Информационных Технологий http://www.INTUIT.ru



^

Цель - Знать и уметь - Поле понятий


Цель лекции

Знать - Уметь – Обладать навыками





Знать:

  • Определения

  • Понятия, составляющие предмет информатики

Уметь:

Ориентироваться в понятиях и моделях

Обладать навыками:

  • Построения моделей


^

Перечень понятий и категорий





Понятия




Новые

Категории










Информация

Материя – Энергия – Информация

Информационные ресурсы

Информационное общество



< Использовано: Непейвода Н. Н. Стили и методы программирования

   Интернет-Университет Информационных Технологий    http://www.INTUIT.ru >
^

Вводная часть

Традиционная модель вычислений


В архитектуре вычислительной системы имеются следующие три элемента:

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

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

  3. ^ Управляющее устройство, способное указывать команды, которые должен выполнять процессор (иногда управляющее устройство рассматривается как составная часть процессора).

Эти элементы обладают следующими особенностями.

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

Значение в ячейке, с точки зрения процессора, является последовательностью битов фиксированной длины без каких бы то ни было ограничений.

  1. ^ Линейная адресация. Ячейки памяти идентифицируются адресами: числами от нуля до максимально возможной для данной машины величины (обозначающей последнюю ячейку). Адреса служат указателями для процессора, откуда следует извлекать или куда помещать значение.

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

  1. ^ Пассивность памяти. Ячейка памяти всегда содержит какое-то значение. Полученное ячейкой значение не может быть изменено иначе как при выполнении специальной команды процессора, предназначенной для этого действия, - команды засылки, или присваивания, значения. Изменяемая ячейка указывается своим адресом.

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

  3. ^ Централизация управления. Управляющее устройство содержит адрес команды, назначаемой для выполнения процессором. Если эта команда является командой передачи управления, при ее выполнении определяется адрес ячейки, содержащей команду, которая должна выполняться после текущей, и этот адрес становится новым содержимым устройства управления. В противном случае адрес команды, назначаемой процессором для выполнения следующей, есть текущее содержимое устройства управления, увеличиваемое на единицу (очередная выполняемая команда содержится в ячейке памяти, следующей за текущей). Таким образом, управляющее устройство можно моделировать как регистр, называемый счетчиком команд. Этот регистр модифицируется автоматически либо командами передачи управления2).

  4. ^ Наличие канала связи между памятью и процессором. Для передачи данных или команд между памятью и процессором используется специальное оборудование, называемое каналом связи. Работа канала осуществляется в случаях, когда требуется:

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

    2. получить операнды для выполнения команды (активизируется процессором);

    3. изменить значение ячейки при выполнении команды (активизируется процессором).

Такую архитектуру будем называть традиционной.

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

На рис. 2.1 показано взаимодействие устройств традиционной машины.



Рис. 2.1.  Схема выполнения двухадресной команды на машине традиционной архитектуры

В команде КО1О2 К — код операции, O1 и O2 — адреса операндов. Команда размещена по адресу 3. Сплошными стрелками отмечена передача информации по каналу. Пунктирные стрелки обозначают действия, которые осуществляются непосредственно до исполнения команды (запрос кода команды по адресу 3) и после нее (указание на необходимость запроса команды, следующей в памяти за исполняемой).

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

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

На эти принципиально непреодолимые ограничения классической модели вычислений указал Бэкус еще в середине семидесятых годов (Тьюринговская лекция Бэкуса [35]), назвав канал связи памяти с процессором узким местом (буквально bottleneck) традиционной модели.

Традиционная архитектура машин менее всего связана с конкретным классом решаемых задач. Она скорее связана с двумя наиболее распространенными и наиболее низкоуровневыми стилями программирования: структурным и автоматным программированием.

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

Подводя итоги, кратко перечислим подходы к программированию:

  • ранние неструктурные подходы;

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

  • функциональный подход;

  • логический подход;

  • объектно-ориентированный подход;

  • смешанный подход (некоторые подходы можно комбинировать);

  • компонентно-ориентированный (программный проект рассматривается как множество компонент, такой подход принят, в частности, в .NET);

  • чисто объектный подход (идеальный с математической точки зрения вариант, который пока не реализован практически).
^

Трансляторы и процесс трансляции

Трансляторы


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

  • компилирующие окончательный выполнимый код;

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

Окончательным выполнимым кодом являются приложения, реализованные как EXE-файлы, DLL-библиотеки, COM-компоненты. К интерпретируемому коду можно отнести байт-код JAVA-программ, выполняемый посредством виртуальной машины JVM.

Языки, формирующие окончательный выполнимый код, называются компилируемыми языками. К ним относятся языки С, C++, FORTRAN, Pascal. Языки, реализующие интерпретируемый код, называются интерпретируемыми языками. К таким языкам относятся язык Java, LISP, Perl, Prolog.

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

Объектный код, создаваемый компилятором, представляет собой область данных и область машинных команд, имеющих адреса, которые в дальнейшем "согласуются" редактором связи (иногда называемым загрузчиком). Редактор связи размещает в едином адресном пространстве все по отдельности откомпилированные объектные модули и статически подключаемые библиотеки.

Будем называть выполнимой формой программы код, получаемый в результате трансляции исходной программы.
^

Процесс трансляции


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

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

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

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

На рисунке 2.1 представлены основные этапы, выполняемые в процессе трансляции исходной программы.


Рис. 2.1.  Основные этапы трансляции программы

Фаза анализа программы состоит из:

  • лексического анализа;

  • синтаксического анализа;

  • семантического анализа.

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

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

Процесс выделения лексем достаточно трудоемок и требует применения сложных контекстно-зависимых алгоритмов.

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

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

К наиболее общим задачам, решаемым семантическим анализатором, относятся:

  • обнаружение ошибок времени компиляции;

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

  • замена макросов их определениями;

  • выполнение директив времени компиляции.

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

На фазе синтеза программы производится:

  • генерация кода;

  • редактирование связей.

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

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

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

Формальные грамматики и НБФ-нотация


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

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

Формальная грамматика использует строгую систему обозначений. Существуют различные типы грамматик. НБФ-грамматика является контекстно-свободной грамматикой. Эта грамматика использует НБФ-нотации, предложенные Джоном Бэкусом в конце 50-х годов для описания синтаксиса языка ALGOL.

Простая НБФ-нотация позволяет описывать все достоверные конструкции языка программирования, используя следующие символы:

  • символ ::= имеет значение "определяется как" и предшествует указанию всех допустимых значений описываемой синтаксической единицы;

  • символ | имеет значение "или" и используется для перечисления альтернативных вариантов;

  • пара символов < > ограничивает имя синтаксической единицы, называемой также нетерминальным символом или синтаксической категорией.

Значения, указываемые вне скобок < >, называются терминальными символами.

НБФ-грамматика состоит из набора правил (называемых иногда металингвистическими формулами или продукциями), записываемых при помощи НБФ-нотации.

Например:

<цифра>::= 0|1|2|3|4|5|6|7|8|9

<целочисленное значение> ::=

цифра | цифра < целочисленное значение>

В данном примере символы 0, 1, 2, 3 и т.д. являются терминальными символами.

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

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

Можно сказать, что грамматика состоит из множества терминальных и нетерминальных символов, начального нетерминального символа и набора правил. В 1959 году Ноам Хомский предложил следующую классификацию грамматик:

  • регулярные грамматики, используемые для построения лексических анализаторов;

  • контекстно-свободные грамматики, используемые для построения дерева грамматического разбора. К этому типу относятся НБФ-грамматики;

  • контекстно-зависимые грамматики, представляемые набором правил типа x->y, в которых х может быть любой цепочкой нетерминальных символов, а y – цепочкой терминальных и нетерминальных символов. Этот тип грамматик намного сложнее контекстно-свободных грамматик и не имеет столь широкого применения при моделировании языков программирования;

  • грамматики с фразовой структурой, реализуемые набором правил типа x->y, в которых х может быть любой цепочкой нетерминальных символов, а y – цепочкой терминальных и нетерминальных символов (при этом нет никаких ограничений на длину получаемых цепочек символов). Большинство таких грамматик являются неразрешимыми и не имеют практического интереса.
^

Расширенная НБФ-нотация


При описании правил НБФ-грамматики с применением стандартной НБФ-нотации синтаксические конструкции, имеющие необязательные или альтернативные элементы, выглядят при всей их простоте достаточно громоздко. Расширенная НБФ-нотация вводит ряд дополнительных элементов, позволяющих значительно улучшить наглядность представления правил НБФ-грамматики.

Расширенная НБФ-нотация вводит следующие дополнительные элементы:

  • необязательные элементы указываются заключенными в квадратные скобки;

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

  • последовательность нескольких однотипных элементов обозначается заключением элемента в фигурные скобки, за которыми указывается символ звездочка ({<целое>}*).



< Использовано: Баженова И. Ю. Сухомлин В. А. Введение в программирование

   Интернет-Университет Информационных Технологий    http://www.INTUIT.ru >
  1   2   3   4




Похожие:

Виртуальная школа компьютерных технологий iconВиртуальная школа компьютерных технологий
Ольга Бруковская: «В самое ближайшее время произойдет интеграция Webby и HeadHunter» 10
Виртуальная школа компьютерных технологий iconВиртуальная школа компьютерных технологий
На первой лекции рассмотривались основные понятия Информатики как фундаментальной естественной науки
Виртуальная школа компьютерных технологий iconВиртуальная школа компьютерных технологий
Решается задача поиска моделей, описывающих отдельные процессы и явления в системе образования
Виртуальная школа компьютерных технологий iconВиртуальная школа компьютерных технологий
На первой лекции рассмотривались основные понятия Информатики как фундаментальной естественной науки
Виртуальная школа компьютерных технологий iconВиртуальная школа компьютерных технологий
Решается задача поиска моделей, описывающих отдельные процессы и явления в системе образования
Виртуальная школа компьютерных технологий iconВиртуальная школа компьютерных технологий
На первой лекции рассмотривались основные понятия Информатики как фундаментальной естественной науки
Виртуальная школа компьютерных технологий iconВиртуальная школа компьютерных технологий
На первой лекции рассмотривались основные понятия Информатики как фундаментальной естественной науки
Виртуальная школа компьютерных технологий iconВиртуальная школа компьютерных технологий
Артамонов Г. Т. Анализ производительности цвм методами теории массового обслуживания. М.: Энергия, 1972. – 176 с
Виртуальная школа компьютерных технологий iconВиртуальная школа компьютерных технологий
Термин «информация» в середине ХХ века ввел К. Шеннон применительно к теории передачи сообщений в телеграфии
Виртуальная школа компьютерных технологий iconВиртуальная школа компьютерных технологий лекция 6
В данной лекции вводится понятие интерфейса, рассматриваются основные интерфейсные функции и технические характеристики интерфейсов...
Разместите кнопку на своём сайте:
Документы


База данных защищена авторским правом ©podelise.ru 2000-2014
При копировании материала обязательно указание активной ссылки открытой для индексации.
обратиться к администрации
Документы

Разработка сайта — Веб студия Адаманов