Основы Pascal. Типы данных. Структура программы на языке Pascal

Вид материалаДокументы
Потерянной динамической переменной
Абстрактные типы данных.
Концепции и особенности объектно-ориентированного программирования.
Абстрактные типы данных
Технологические процессы разработки программного обеспечения.
Создание инфраструктуры
Версия разработчика
Выходная версия
Информационные технологии
Подобный материал:
1   ...   6   7   8   9   10   11   12   13   ...   17
Типы данных: указатели, операции над ними и проблемы, возникающие при работе с ними, ссылки.

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

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

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

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

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

Абстрактные типы данных.

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

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

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

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

Концепции и особенности объектно-ориентированного программирования.

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

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

ООП характеризуется тремя основными свойствами: инкапсуляцией, наследованием и полиморфизмом. В контексте ООП инкапсуляция подразумевает выделение и объединение в описании класса структур данных и выполняемых над ними действий. Кроме того, инкапсуляция предполагает сокрытие внутренней прикладной структуры данных и подпрограмм класса и определение внешних интерфейсов доступа к ним.

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

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

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

  1. Технологические процессы разработки программного обеспечения.

Классические технологические процессы.

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

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

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

Анализ требований и проектирование. Анализ требований — процесс жизненного цикла программы, во время которого требования заказчика уточняются, формализуются и документируются. Основной вопрос, решаемый на данном этапе — «Что должна делать будущая система?». Проектирование — процесс жизненного цикла программы, во время которого исследуются и определяются её будущие структура и взаимосвязи элементов. Основной вопрос, который решается на этом этапе — «Как система будет удовлетворять заданным требованиям?». Результатом анализа и проектирования должен стать проект, содержащий достаточные сведения для реализации системы на его основе.

Программирование (реализация).

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

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

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

Завершение эксплуатации.

Технологические процессы по стандарту ISO/IEC 12207:1995. Основные и организационные процессы.

Международный стандарт ISO/IEC 12207:1995 “Information Technology — Software Life Cycle Processes” описывает структуру жизненного цикла программного обеспечения и его процессы. Процессы делятся на три группы — основные, организационные и вспомогательные.



Структура процессов жизненного цикла ПО

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

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

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

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

Вспомогательные технологические процессы по стандарту ISO/IEC 12207:1995.

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

определения состояния компонентов ПО в системе;

управления модификациями ПО;

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

управления хранением и поставкой ПО.

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

Основные технологические стадии. Версии программного продукта.

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

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

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

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

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

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

  1. Локальные и глобальные сети ЭВМ (локальные сети, Internet).

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

Основные отличия между ЛВС и ГВС:

- скорость передачи сообщений между конечными узлами;

- диаметр сети или протяженность каналов связи;

- конфигурация связей;

- количество узлов сети.

Исторически глобальные сети возникли раньше, что связано с эволюцией ЭВМ. Первые ЭВМ — большие системы, обычно не более одной на организацию или научный центр. Со временем возникла необходимость обмена данными между научными центрами или госучреждениями, то есть передача информации на большие расстояния. Эти причины привели к созданию глобальных сетей, охватывающих любые пространства. Линии связи дороги, а пользователей много. Следовательно, нужно уменьшить количество передаваемой вспомогательной информации. В локальных сетях эта проблема остро не стоит. Стоимость передачи единицы информации здесь гораздо меньше, так как каналы связи принадлежат только одному предприятию, расстояния гораздо меньше и технологии передачи дешевле. Соответственно и скорость гораздо выше между конечными узлами в ЛВС. В частности, это относится к проблеме затухания сигнала. Если расстояние большое, то сигнал следует создавать в виде гармоники определенной частоты, попадающей в полосу пропускания данного проводника (медь и подобные). Кодирование и декодирование сигнала усложняется. А в локальных сетях можно передавать импульсы прямоугольной формы, так как расстояние между узлами — сотни метров. На большое расстояние такой сигнал передать невозможно. Прямоугольные сигналы легче декодировать, и скорость передачи может быть выше. Что касается конфигурации связей, то в ГВС конфигурацию можно назвать случайной, то есть между двумя узлами может быть множество путей. В ЛВС обычно используются стандартные технологии, достаточно жестко фиксирующие вид и конфигурацию связей между узлами. Наиболее часто встречаются следующие конфигурации:

- звезда;

- шина;

- кольцо;

- древовидная;

- комбинированные.

Отсюда можно сделать вывод, что задача маршрутизации в глобальных сетях сложнее, чем в локальных. И последнее, количество узлов в глобальной сети неограниченно, в то время как в локальных сетях количество узлов ограничивается применяемой стандартной технологией во избежание такой проблемы, как перенаселенность сети (congestion error). Из проведенного сравнения видно, что в глобальных сетях многие вопросы решать сложнее, что отражается на качестве и разнообразии сетевых служб. Так, например, в глобальных сетях достаточно сложно организовать процесс обработки данных в реальном режиме времени. Решение такой задачи, как просмотр всех имеющихся сетевых ресурсов, проблематично, а в локальной сети тривиально. После соединения с удаленным ресурсом в ЛВС пользователь может работать с помощью известного набора команд и прикладного ПО, тогда как работа в ГВС требует определенного набора специфических знаний. Особенно это отличие было заметно на первоначальном этапе развития ВС. Несмотря на различия, глобальные и локальные сети являются разновидностями систем одного класса — вычислительных сетей. Поэтому при создании ЛВС и ГВС приходится решать одни и те же задачи, но, возможно, в разных масштабах и разными средствами. В определенной степени ЛВС являются подмножеством ГВС, так как возникли позднее и переняли от ГВС ряд уже созданных технологий. В настоящее время наблюдается тенденция к сближению технологий ГВС и ЛВС. Предпосылки этого сближения изложены ниже. Во-первых, увеличивается пропускная способность каналов связи, используемых глобальными сетями. Вследствие этого появляется возможность организации работы в глобальных сетях с приближением к реальному режиму времени. Технологически это основывается на средствах оптической передачи данных. Цена оптоволоконных проводников сравнилась с электрическими проводниками высших категорий (витая пара 6 категории, максимальная пропускная способность ~1 Гб/с при длине 100 м, в то время как эта же характеристика оптоволоконных проводников ~10 Гб/с на 2–3 км). Однако препятствия заключаются в дороговизне оборудования и монтажа, со временем и эта проблема будет снята. Во-вторых, в локальных сетях возникают проблемы масштабирования из-за ограничений на количество узлов в сети. С возникновением корпоративных сетей появилась необходимость решения, позволяющего обойти эти ограничения. В глобальных сетях подобная задача решалась изначально. Многие из этих решений переносятся в ЛВС. Одним из таких примеров может служить перенос стека протоколов TCP/IP в локальные сети. Этот протокол обеспечивает широкие возможности по масштабированию сетей, однако, требует более сложного администрирования. На заре современных локальных сетей в 80-е годы рабочие станции не были настолько мощны, чтобы программно поддерживать функциональность стека TCP/IP. Поэтому использовались более простые и эффективные протоколы (IPX/SPX). Современные ПК превосходят своих предшественников по производительности в десятки и сотни раз, и это ограничение не играет роли. Наряду с технологиями низкого уровня переносятся и технологии высокого уровня. Возникло такое понятие, как сеть интранет, то есть локальные или корпоративные, в своей основе, сети, но использующие такие технологии, как WWW, электронную почту, FTP для решения внутренних задач. Выгоды поддержки технологий глобальных сетей очевидны. Эта отрасль бурно развивается, появляются новые технологии, причем на открытой основе, то есть распространяются фактически бесплатно. Этот конгломерат технологий способен решать самые разные задачи. Создав в своих программных продуктах возможности работы с технологиями ГВС, производители обеспечивают успех за счет совместимости с другими продуктами и возможности дальнейшего развития.

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

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

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