Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Тема 1.1 Технология программирования в историческом аспекте




Содержание

 Введение…………………………………………………………………………3

Раздел 1  Программное обеспечение

Тема 1.1 Технология программирования в историческом аспекте …………..5

Тема 1.2 Основные понятия и определения ……………………………..........11

Тема 1.3 Классификация ПО…………………………….…………………......14

Раздел 2 Разработка программного обеспечения

Тема 2.1 Инструментальное обеспечение разработки и сопровождения программных средств ……………………………………………………...…..18

Тема 2.2 Инструментальные системы технологии программирования .........26

Тема 2.3 Структура проекта Delphi …………………………………………...29

Тема 2.4 Особенности объектно-ориентированного программирования в Delphi …………………………………………………………………………....37

Тема 2.5 Создание собственных компонентов ……………………..………...43

Тема 2.6 Обработка исключительных ситуаций……………………..……….48

Тема 2.7 Создание пользовательских библиотек, процедур и функций в Delphi ……………………..……………………………………………………..52

Тема 2.8 Создание DLL-библиотек в Delphi …………………………………55

Тема 2.9 Создание многопоточных приложений в Delphi ……………….….60

Тема 2.10 Создание приложений баз данных в среде Delphi ……………….64

Тема 2.11 Создание консольных приложений……………………..…………69

Тема 2.12 Использование динамической памяти в приложениях……...........72

Тема 2.13 Создание справочной системы……………………..……………...77

 Список литературы…………………………………………………………..86

Введение

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

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

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

Цели и задачи дисциплины

1. Изучение основных принципов, используемых в разработке интегрированных программных продуктов.

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

3. Формирование навыков работы со средствами автоматизации решения прикладных задач.

4. Формирование навыков использования встроенных средств разработки.

В результате изучения дисциплины студенты должны:

1. знать принципы построения прикладных информационных систем

2. уметь использовать современные программные средства для обработки разнородной информации;

3. уметь автоматизировать процесс решения прикладных задач с помощью встроенных языков программирования;

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



Раздел 1 Программное обеспечение

Тема 1.1 Технология программирования в историческом аспекте


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


    Появление ассемблеров позволило вместо двоичных или 16-ричных кодов использовать символические имена данных и мнемоники кодов операций. В результате программы стали бо­лее «читаемыми».
    Создание языков программирования высокого уровня, таких как FORTRAN и ALGOL, существенно упростило программиро­вание вычислений, снизив уровень детализации операций. Это, в свою очередь, позволило увеличить сложность программ.

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



    Слабым местом такой архитектуры было то, что при увеличе­нии количества подпрограмм возрастала вероятность искажения части глобальных данных какой-либо подпрограммой. Напри­мер, подпрограмма поиска корней уравнения на заданном ин­тервале по методу деления отрезка пополам меняет величину ин­тервала. Если при выходе из подпрограммы не предусмотреть восстановления первоначального интервала, то в глобальной об­ласти окажется неверное значение интервала. Чтобы сократить количество таких ошибок в подпрограммах, было предложено размещать локальные данные (рис. 1.3).

 

Рис. 1.3. Архитектура программы, использующей подпрограммы с локальными данными

Сложность разрабатываемого программного обеспечения при использовании подпрограмм с локальными данными по-прежне­му ограничивалась возможностью программиста отслеживать процессы обработки данных, но уже на новом уровне. Однако появление средств поддержки подпрограмм позволило осуществ­лять разработку программного обеспечения нескольким про­граммистам параллельно.
    В начале 60-х годов XX в. разразился «кризис программиро­вания». Он выражался в том, что фирмы, взявшиеся за разработ­ку сложного программного обеспечения, такого как операцион­ные системы, срывали все сроки завершения проектов [8]. Про­ект устаревал раньше, чем был готов к внедрению, увеличивалась его стоимость, и в результате многие проекты так никогда и не были завершены.

Объективно все это было вызвано несовершенством техноло­гии программирования. Прежде всего стихийно использовалась разработка «снизу—вверх» — подход, при котором вначале про­ектировали и реализовывали сравнительно простые подпрограм­мы, из которых затем пытались построить сложную программу. В отсутствие четких моделей описания подпрограмм и методов их проектирования создание каждой подпрограммы превраща­лось в непростую задачу, интерфейсы подпрограмм получались сложными, и при сборке программного продукта выявлялось большое количество ошибок согласования. Исправление таких ошибок, как правило, требовало серьезного изменения уже раз­работанных подпрограмм, что еще более осложняло ситуацию, так как при этом в программу часто вносились новые ошибки, которые также необходимо было исправлять... В конечном итоге процесс тестирования и отладки программ занимал более 80 % времени разработки, если вообще когда-нибудь заканчивался. На повестке дня самым серьезным образом стоял вопрос разработки технологии создания сложных программных продуктов, снижаю­щей вероятность ошибок проектирования.
    Анализ причин возникновения большинства ошибок позво­лил сформулировать новый подход к программированию, кото­рый был назван «структурным».
    Второй этап — структурный подход к программированию(60—70-егоды XX в.). Структурный подход к программированию представляет собой совокупность рекомендуемых технологиче­ских приемов, охватывающих выполнение всех этапов разработ­ки программного обеспечения. В основе структурного подхода лежит декомпозиция (разбиение на части) сложных систем с це­лью последующей реализации в виде отдельных небольших (до 40—50 операторов) подпрограмм. С появлением других принципов декомпозиции (объектного, логического и т. д.) данный спо­соб получил название процедурной декомпозиции.

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

Поддержка принципов структурного программирования была заложена в основу так называемых процедурных языков програм­мирования. Как правило, они включали основные «структурные» операторы передачи управления, поддерживали вложение под­программ, локализацию и ограничение области «видимости» данных. Среди наиболее известных языков этой группы стоит на­звать PL/1, ALGOL-68, Pascal, С.
    Одновременно со структурным программированием появи­лось огромное количество языков, базирующихся на других кон­цепциях, но большинство из них не выдержало конкуренции. Ка­кие-то языки были просто забыты, идеи других были в дальней­шем использованы в следующих версиях развиваемых языков.

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

Модульное программирование предполагает выделение групп подпрограмм, использующих одни и те же глобальные данные в отдельно компилируемые модули (библиотеки подпрограмм), на­пример модуль графических ресурсов, модуль подпрограмм вы­вода на принтер (рис. 1.4). Связи между модулями при исполь­зовании данной технологии осуществляются через специальный интерфейс, в то время как доступ к реализации модуля (телам подпрограмм и некоторым «внутренним» переменным) запре­щен. Эту технологию поддерживают современные версии языков Pascal и С (C++), языки Ада и Modula.

 

 

    Использование модульного программирования существенно упростило разработку программного обеспечения несколькими программистами. Теперь каждый из них мог разрабатывать свои модули независимо, обеспечивая взаимодействие модулей через специально оговоренные межмодульные интерфейсы. Кроме того, модули в дальнейшем без изменений можно было исполь­зовать в других разработках, что повысило производительность труда программистов.
    Практика показала, что структурный подход в сочетании с модульным программированием позволяет получать достаточно надежные программы, размер которых не превышает 100 000 опе­раторов. Узким местом модульного программирования явля­ется то, что ошибка в интерфейсе при вызове подпрограммы вы­является только при выполнении программы (из-за раздельной компиляции модулей обнаружить эти ошибки раньше невозмож­но). При увеличении размера программы обычно возрастает сложность межмодульных интерфейсов, и с некоторого момента предусмотреть взаимовлияние отдельных частей программы ста­новится практически невозможно. Для разработки программного обеспечения большого объема было предложено использовать объектный подход.

Третий этап — объектный подход к программированию (с середи­ны 80-х до конца 90-х годов XX в.).Объектно-ориентированное про­граммирование определяется как технология создания сложного программного обеспечения, основанная на представлении про­граммы в виде совокупности объектов, каждый из которых являет­ся экземпляром определенного типа (класса), а классы образуют иерархию с наследованием свойств. Взаимодействие программных объектов в такой системе осуществляется путем пе­редачи сообщений (рис. 1.5).

Объектная структура программы впервые была использована в языке имитационного моделирования сложных систем Simula, появившемся еще в 60-х годах XX в. Естественный для языков моделирования способ представления программы получил раз­витие в другом специализированном языке моделирования — языке Smalltalk (70-е годы XX в.), а затем был использован в но­вых версиях универсальных языков программирования, таких как Pascal, C++, Modula, Java.

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



    Бурное развитие технологий программирования, основанных на объектном подходе, позволило решить многие проблемы. Так, были созданы среды, поддерживающие визуальное программирова­ние, например Delphi, C++ Builder, Visual C++ и т. д. При исполь­зовании визуальной среды у программиста появляется возмож­ность проектировать некоторую часть, например интерфейсы бу­дущего продукта, с применением визуальных средств добавления и настройки специальных библиотечных компонентов. Результа­том визуального проектирования является заготовка будущей программы, в которую уже внесены соответствующие коды.
    Использование объектного подхода имеет много преиму­ществ, однако его конкретная реализация в объектно-ориенти­рованных языках программирования, таких как Pascal и C++, имеет существенные недостатки:

1. фактически отсутствуют стандарты компоновки двоичных результатов компиляции объектов в единое целое даже в пределах одного языка программирования. Компоновка объектов, полу­ченных разными компиляторами C++, в лучшем случае проблема­тична, что приводит к необходимости разработки программного обеспечения с использованием средств и возможностей одного языка программирования высокого уровня и одного компилято­ра, а значит, требует наличия исходных кодов используемых биб­лиотек классов;

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

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

Четвертый этап — компонентный подход и CASE-технологии (с середины 90-х годов XX в. до нашего времени).Компонентный подход предполагает построение программного обеспечения из отдельных компонентов физически отдельно существующих час­тей программного обеспечения, которые взаимодействуют между собой через стандартизованные двоичные интерфейсы. В отличие от обычных объектов объекты-компоненты можно собрать в ди­намически вызываемые библиотеки или исполняемые файлы, распространять в двоичном виде (без исходных текстов) и ис­пользовать в любом языке программирования, поддерживающем соответствующую технологию. На сегодня рынок объектов стал реальностью, так, в Интернете существуют узлы, предоставляю­щие большое количество компонентов, рекламой компонентов забиты журналы. Это позволяет программистам создавать про­дукты, хотя бы частично состоящие из повторно использован­ных частей, т. е. использовать технологию, хорошо зарекомендо­вавшую себя в области проектирования аппаратуры.










Последнее изменение этой страницы: 2018-04-12; просмотров: 635.

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