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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



Билет №1

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

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

Первый этап - до 55г. Началом принимается 1946 год, когда началась опытная эксплуатация первых опытных образцов вычислительных машин. Данные о первых из них: общая масса - 30 тонн, число электронных ламп - 18 тыс., потребляемая мощность - 150 кВт, объем памяти - 20 10-ти разрядных чисел. Числа в ЭВМ вводились с помощью перфокарт и набора переключателей, а программа задавалась соединением гнезд на специальных наборных платах. Ламповые ЭВМ имели большие габариты и массу, потребляли много энергии и были очень дорогостоящими, что резко сужало круг пользователей ЭВМ, а, следовательно, объем производства этих машин. Увеличению количества решаемых задач препятствовали низкая надежность, ограниченность их ресурсов и чрезвычайно трудоемкий процесс подготовки, ввод и отладка программ, написанных на языке машинных команд.Повышение быстродействия ЭВМ шло за счет увеличения ее памяти и использование двоичных кодов для представления чисел и команд. Для ускорения процесса подготовки программ стали создавать первые языки автоматизации программирования. Представителями первых ЭВМ являлись ЭНИАК (США) и МЭСМ (СССР).

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

Третий этап - до 70 г. Увеличение быстродействия и надежности полупроводниковых схем, уменьшения их габаритов, потребляемой мощности и стоимости удалось добиться за счет создания технологии производства интегральных схем (ИС), состоящих из десятка электронных элементов. Это позволило не только повысить производительность и снизить стоимость больших ЭВМ, но и создать малые, простые, дешевые и надежные машины-мини-ЭВМ (СМ-1420). Простота обслуживания мини-ЭВМ, их сравнительно низкая стоимость и малые габариты позволяли снабдить этими машинами небольшие коллективы исследователей, разработчиков- экспериментаторов и т.д.

Четвертый этап - до 78 г. Успехи в развитии электроники привели к созданию больших интегральных схем (БИС), где в одном кристалле размещалось несколько десятков тысяч электронных элементов. Это позволило разработать более дешевые ЭВМ, имеющие большую память и меньший цикл выполнения команд. Разрабатывались новые ОС, позволяющие программистам отлаживать свои программы прямо за дисплеем ЭВМ и ускоряло разработку программ. В 71 году был изготовлен первый микропроцессор - БИС, в которой полностью размещался процессор ЭВМ простой архитектуры. Появились дешевые микрокалькуляторы и микроконтроллеры - управляющие устройства, построенные на одной или нескольких БИС, содержащих процессор, память и системы связи с датчиками и исполнительными органами в объекте управления. Программа управления объектами вводилась в память ЭВМ либо при изготовлении, либо непосредственно на предприятии.Представители этого поколения ЭВМ: СМ-1800, "Электроника 60М".

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

Билет№2

Билет №3

Системы счисления.

Система счисления - символический метод записи чисел, представление чисел с помощью письменных знаков.Число — это некоторая абстрактная сущность для описания количества.Цифры — это знаки, используемые для записи чисел.

Цифры бывают разные: самыми распространёнными являются арабские цифры, представляемые известными нам знаками от 0 до 9; менее распространены римские цифры, мы их можем иногда встретить на циферблате часов или в обозначении века (XIX век).

Системы счисления разделить на три класса: позиционные; непозиционные; смешанные.

смешанные и непозиционные системы: Денежные знаки — это пример смешанной системы счисления.Примером "чисто" непозиционной системы счисления является римская система.

Позиционные системы счисления - это системы счисления, в которых значение цифры напрямую зависит от её положения в числе.

Например, число 01 обозначает единицу, 10 — десять.Позиционные системы счисления позволяют легко производить арифметические расчёты.Представление чисел с помощью арабских цифр — самая распространённая позиционная система счисления, она называется «десятичной системой счисления». Для составления машинных кодов удобно использовать не десятичную, а двоичную систему счисления, содержащую только две цифры, 0 и 1. Обратите внимание, что в двоичной системе максимальная цифра 1.Программисты для вычислений также пользуются ещё восьмеричной и шестнадцатеричной системами счисления.

Зависимость плотности записи информации от основания системы счисления

Плотность информации в записи числа зависит от основания системы счисления х и выражается функцией y=(ln(x))/x.

Эта функция имеет максимум при x=e=2,718281828…. Т.е. система счисления с наибольшей плотностью записи имеет нецелочисленное основание!Из целых чисел ближайшее к числу е - это число 3.Поэтому из целочисленных систем счисления наибольшей плотностью записи информации обладает троичная система счисления, т.е. система с основанием равным трём.

Билет №4

Основные понятия операционной системы

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

 

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

 

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

 

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

Билет №5

Билет №6

Основы программирования в редакторе С++.

Объектно-ориентированное программирование – это самый высокоуровневый вид программирования в настоящее время. Здесь поддерживаются достижения предыдущих поколений и добавлены новые свойства. Эти новые свойства реализуют парадигму объектно-ориентированного программирования.

 

Объектно-ориентированное программирование на C++ основывается на следующих основных этапах разработки программ.

 

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

 

Второй этап состоит в типизации объектов и синтезе абстрактных типов данных.

 

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

 

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

 

Четвертый этап представляет собой композиционную иерархизацию объектов как выделение родовидовых и композиционных отношений над объектами.

 

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

 

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

 

Язык программирования C++ обладает всеми основными свойствами языков объектно-ориентированного программирования и существенно отличается по своей концепции от базового языка C.

 

Существует несколько принципов, лежащих в основе языка C++:

 

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

 

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

 

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

Билет №7

Алфавит и ключевые слова

Алфавит языка С++ состоит из следующих символов и их наборов:

латинские буквы

цифры

специальные символы + - * / {}.,;: ' " & | % = > < () [ ]! # ()

составные символы, каждый из которых рассматривается как один символ: ==!= >= <= /* */ && || %= &= ++ -- += *= -= /=::.* -> ->*... << <<= >> >>=

Буквы кириллицы в C++ допустимы только внутри строк и комментариев.

Ключевые слова

Как и в любом языке программирования, в С++ существует набор ключевых слов для обозначения управляющих структур, директив и т.д. Вот этот набор:asm auto break case char class const continue default delete do double else enum extern float for friend goto if inline int long new operator overload public register return short sizeof static struct switch this typedef union unsigned virtual void while

Билет №8

Билет №9

Билет №13

Билет №14

Билет №15

Адреса и ссылки.

Ссылки

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

 

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

 

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

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

#include void swap(double& a, double& b) { double temp = a; a = b; b = temp;}

А вызов функции тогда будет уже без взятия адреса переменных.

swap(x, y);

Конструкция double& объявляет ссылку на переменную типа double. При таком объявлении функции в стек будут положены не значения переменных, а их адреса.

Ссылка — это указатель, с которым можно работать, как с обычной переменной.

Ссылка не может быть равна NULL. Указатель может. Ссылка не может быть непроинициализирована. Указатель может.

Для взятия адреса переменной и для объявления ссылки используется одинаковый символ — амперсанд. Но в случае взятия адреса & стоит в выражении, перед именем переменной. А в случае объявления ссылки — в объявлении, после объявления типа.

Билет №16

Билет №17

Многомерные массивы.

Многомерные массивы в C++ рассматриваются как массивы, элементами которых являются массивы.

Определение многомерного массива должно содержать информацию о типе, размерности и количестве элементов каждой размерности.

int MyArray1[10]; // Одномерный массив размерности 10.int MyArray2[20][10]; // 20 одномерных массивов размерности 10.int MyArray3[30][20][10]; // 30 двумерных массивов размерности 20*10.

По крайней мере, для Borland C++ 4.5, элементы многомерного массива располагаются в памяти в порядке возрастания самого правого индекса, т.е. самый младший адрес имеют элементы

MyArray1[0],MyArray2[0][0],MyArray3[0][0][0],

затем элементы

MyArray1[1],MyArray2[0][1],MyArray3[0][0][1]

и т.д.

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

int MyArray[3][3][3] = {0,1,2,3,4,5,6,7,8,9,10,11};

Начальные значения получают следующие элементы трёхмерного массива:

MyArray[0][0][0] == 0MyArray[0][0][1] == 1MyArray[0][0][2] == 2MyArray[0][1][0] == 3MyArray[0][1][1] == 4MyArray[0][1][2] == 5MyArray[0][2][0] == 6MyArray[0][2][1] == 7MyArray[0][2][2] == 8MyArray[1][0][0] == 9MyArray[1][0][1] == 10MyArray[1][0][2] == 11

Остальные элементы массива получают начальные значения в соответствии со статусом массива (в глобальном массиве значения остальных элементов равны 0, в локальном массиве элементам присваиваются неопределённые значения).

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

int MyArray[3][3][3] = { {{0,1}}, {{100},{200,210},{300}}, {{1000},{2000,2100},{3000,3100,3200}} };

В результате выполнения этого оператора определения будут означены следующие элементы массива MyArray:

MyArray[0][0][0] == 0MyArray[0][0][1] == 1MyArray[1][0][0] == 100MyArray[1][1][0] == 200MyArray[1][1][1] == 210MyArray[1][2][0] == 300MyArray[2][0][0] == 1000MyArray[2][1][0] == 2000MyArray[2][1][1] == 2100MyArray[2][2][0] == 3000MyArray[2][2][1] == 3100MyArray[2][2][2] == 3200

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

int MyArray[ ][3][3] = { {{0,1}}, {{100},{200,210},{300}}, {{1000},{2000,2100}} };

Транслятор понимает, что речь идёт об определении массива размерности 3*3*3.

А в таком случае

int MyArray[ ][3][3] = { {{0,1}}, {{100},{200,210},{300}}, {{1000},{2000,2100}}, {{10000}} };

предполагается размерность 4*3*3. В результате MyArray оказывается массивом из четырёх частично проинициализированных двумерных массивов. Следует помнить, что в C++ нет принципиальной разницы между массивом массивов произвольной размерности и обычным одномерным массивом. Потому и простор для творчества в деле инициализации многомерных массивов ограничивается левым индексом.

Билет №18

Работа со строками.

Строка в С++ - это массив символов, оканчивающийся нулевым символом ('\0').

Таким образом, можно определить строки двумя способами: как массив символов или как указатель на первый символ строки, например:

char str1[10] = "string1"; // объявление строки с помощью массива символов

Итак, теперь подробнее. Вы уже знаете, что массив - это набор однородных значений. Так вот строка есть не что иное, как набор символов, и, соответственно, для хранения строк можно использовать символьные массивы. Например, строка "QWERTY" имет тип char[7], а пустая строка "" имеет тип char[1]. Почему char[1]? Именно потому, что любая строка завершается так называемым нулевым символом, то есть символом, код которого в ASCII-таблице равен 0 (этот символ также является escape-символом и его символьный эквивалент представляется как '\0'). Благодаря этому свойству Вы всегда можете определить конец строки, если у Вас строка занимает меньшее количество символов, чем то количество, которое было указано в квадратных скобках при оъявлении массива, т.е. определить фактическую длину строки, хранящейся в массиве.

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

Объявление char str[] = "ABCDE"; присваивает переменной-строке

начальное значение "ABCDE". А точнее, создает массив из 6 символов:

'A','B','C','D','E' и символа '\0'.

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

Сразу необходимо отметить, что С++ сам автоматически сделает последний элемент массива нулевым символом (а Вы уже помните, что любая строка обязательно заканчивается нулевым символом), то есть, хотя в данном случае Вы массиву str присваиваете строку "ABCDE", длина которой составляет 5 символов, C++ выделяет память под 6 символов, записывает туда строку и затем в последний (пятый при счете от 0) записывает нулевой символ.

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

Объявление char str[10] = "ABCDE"; создает массив из 10 символов

и первые пять элементов этого массива принимают значения 'A','B','C','D'

и 'E' соответственно, остальные символы будут ноль-символы.

В данном случае в первые 5 элементов массива записывается строка "ABCDE", а всем остальным элементам присваиваются нули.

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

char str[]={'A','B','C','D','E','\0'};

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

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

Типичная ошибка программирования. Создание или использование "строки", которая не содержит завершающего нулевого символа.

Типичная ошибка программирования. Путают символьные и строковые константы.

Символьная константа - это один символ, заключенный в апострофы, например: 'A' или '\n'. Строковая константа - это последовательность символов, заключенная в двойные кавычки. В числе символов строки могут находится любые символьные константы, например, "Visual C++\n" состоит из следующих символов: 'V', 'i', 's', 'u', 'a', 'l', ' ', 'C', '+', '+', '\n', '\0'. Таким образом, "A" - это строковая константа и состоит из двух символов: 'A' и '\0'. Соседние строковые константы транслятором "склеиваются", например: "АБВ" "ГДЕ" означает то же, что "АБВГДЕ".

Рассмотрим небольшой пример:

//Задана строка, скопировать ее в символьный массив.

#include<iostream.h>

void main()

{

char str1 [ ] = "1234567890", /* объявляем символьный массив str1 и

инициализируем его */

str2[11]; // объявляем символьный массив без инициализации

 

/* в цикле пока не встретится конец строки присваиваем текущему элементу

массива str2 символ из массива str1

*/

for(int i = 0; str1[i]!= '\0'; i++) str2[i] = str1[i];

 

// копируем ноль-символ в str2.

str2 [i] = '\0';

 

cout << str2 << '\n'; // вывод строки на экран

}

Обратите внимание, выход из цикла происходит, когда str1[i] равно ноль-символу, т.е. ноль-символ не копируется в str2, следовательно это нужно сделать за циклом.

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

cin >> Имя_массива;

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

cout << Имя_массива;

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

Например,

#include <iostream.h>

void main()

{

char str[31]; // объявление символьного массива

cout<<"Enter a string (max 30 symbols):";

cin>>str; // ввод строки

cout<<"\nYou enter string:"<<str; // вывод строки

}

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

Билет №19

Модульная структура программы на C++.

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

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

· функциональную спецификацию модуля (описание семантики функций, выполняемых этим модулем по каждому из его входов).

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

Метод восходящей разработки

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

Метод нисходящей разработки

Метод нисходящей разработки заключается в следующем. Как и в предыдущем методе сначала строится модульная структура программы в виде дерева. Затем поочередно программируются модули программы, начиная с модуля самого верхнего уровня (головного), переходя к программированию какого-либо другого модуля только в том случае, если уже запрограммирован модуль, который к нему обращается. После того, как все модули программы запрограммированы, производится их поочередное тестирование и отладка в таком же (нисходящем) порядке. При этом первым тестируется головной модуль программы, который представляет всю тестируемую программу и поэтому тестируется при «естественном» состоянии информационной среды, при котором начинает выполняться эта программа. При этом те модули, к которым может обращаться головной, заменяются их имитаторами (так называемыми заглушками [5]). Каждый имитатор модуля представляется весьма простым программным фрагментом, который, в основном, сигнализирует о самом факте обращения к имитируемому модулю, производит необходимую для правильной работы программы обработку значений его входных параметров (иногда с их распечаткой) и выдает, если это необходимо, заранее запасенный подходящий результат. После завершения тестирования и отладки головного и любого последующего модуля производится переход к тестированию одного из модулей, которые в данный момент представлены имитаторами, если таковые имеются. Для этого имитатор выбранного для тестирования модуля заменяется самим этим модулем и, кроме того, добавляются имитаторы тех модулей, к которым может обращаться выбранный для тестирования модуль. При этом каждый такой модуль будет тестироваться при «естественных» состояниях информационной среды, возникающих к моменту обращения к этому модулю при выполнении тестируемой программы. Таким образом, большой объем «отладочного» программирования при восходящем тестировании заменяется программированием достаточно простых имитаторов используемых в программе модулей. Кроме того, имитаторы удобно использовать для того, чтобы подыгрывать процессу подбора тестов путем задания нужных результатов, выдаваемых имитаторами. При таком порядке разработки программы вся необходимая глобальная информация формируется своевременно, т.е. ликвидируется весьма неприятный источник просчетов при программировании модулей. Некоторым недостатком нисходящей разработки, приводящим к определенным затруднениям при ее применении, является необходимость абстрагироваться от базовых возможностей используемого языка программирования, выдумывая абстрактные операции, которые позже нужно будет реализовать с помощью выделенных в программе модулей. Однако способность к таким абстракциям представляется необходимым условием разработки больших программных средств, поэтому ее нужно развивать.

Билет №1

Билет №4

Билет №15

Билет №1

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

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

Первый этап - до 55г. Началом принимается 1946 год, когда началась опытная эксплуатация первых опытных образцов вычислительных машин. Данные о первых из них: общая масса - 30 тонн, число электронных ламп - 18 тыс., потребляемая мощность - 150 кВт, объем памяти - 20 10-ти разрядных чисел. Числа в ЭВМ вводились с помощью перфокарт и набора переключателей, а программа задавалась соединением гнезд на специальных наборных платах. Ламповые ЭВМ имели большие габариты и массу, потребляли много энергии и были очень дорогостоящими, что резко сужало круг пользователей ЭВМ, а, следовательно, объем производства этих машин. Увеличению количества решаемых задач препятствовали низкая надежность, ограниченность их ресурсов и чрезвычайно трудоемкий процесс подготовки, ввод и отладка программ, написанных на языке машинных команд.Повышение быстродействия ЭВМ шло за счет увеличения ее памяти и использование двоичных кодов для представления чисел и команд. Для ускорения процесса подготовки программ стали создавать первые языки автоматизации программирования. Представителями первых ЭВМ являлись ЭНИАК (США) и МЭСМ (СССР).

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

Третий этап - до 70 г. Увеличение быстродействия и надежности полупроводниковых схем, уменьшения их габаритов, потребляемой мощности и стоимости удалось добиться за счет создания технологии производства интегральных схем (ИС), состоящих из десятка электронных элементов. Это позволило не только повысить производительность и снизить стоимость больших ЭВМ, но и создать малые, простые, дешевые и надежные машины-мини-ЭВМ (СМ-1420). Простота обслуживания мини-ЭВМ, их сравнительно низкая стоимость и малые габариты позволяли снабдить этими машинами небольшие коллективы исследователей, разработчиков- экспериментаторов и т.д.



Поделиться:


Последнее изменение этой страницы: 2016-08-16; просмотров: 2165; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.189.2.122 (0.101 с.)