Схема BG051PO001-4.3.05 „Развитие на професионалното образование и обучение в сътрудничество с работодателите” Договор: BG051PO001-4.3.05 – 0022 Име на проект: „Образователни паркове за развитие на професионално знание и компетенции в областта на...
О ПЕРАТИВНА ПРОГРАМА
„РАЗВИТИЕ НА ЧОВЕШКИТЕ РЕСУРСИ” 2007-2013
МИНИСТЕРСТВО НА ОБРАЗОВАНИЕТО И НАУКАТА
Схема BG051PO001-4.3.05 „Развитие на професионалното образование и обучение в сътрудничество с работодателите”
Инвестира във вашето бъдеще!
Договор: BG051PO001-4.3.05 – 0022
Име на проект: „Образователни паркове за развитие на професионално знание и компетенции в областта на компютърните технологии и системи в колаборация с IT сектора“
Бенефициент:
Професионална гимназия по компютърни
технологии и системи –
гр. Правец
ДЕЙНОСТ 6.
Разработване
на електронно съдържание за специализираните
професионални курсове,
заложени за професионално обучение в
4
образователни парка
Отчетен
период: 01.03.2014 г. – 31.03.2014 г.
ДИСЦИПЛИНА: ТЕХНОЛОГИЯ НА ПРОГРАМИРАНЕТО
Тема 1. Методи за разработка на програмни системи. Видове програмни системи. Особености при програмирането за desktop, уеб или мобилни платформи
История - СРЕДА MS-DOS
Еволюцията на езиците за програмиране (от машинни през асембелерни до езици за програмиране от високо ниво) е установила класическа технология (фиг. 1.1.) за преобразуване на една първична програма, съставена на символен програмен език, в програма на машинен език и нейното следващо изпълнение след зареждане в оперативната памет.
Фиг. 1.1. Класическа технология за преобразуване на първична програма
Програмата се записва на диск посредством обработваща програма - текстов редактор, като текстов файл, съдържащ първичния текст на съответния програмен език (например за езици C/C++ - Proba.c, Proba.cpp; за езика Pascal - Proba.pas; за асемблерен език - Proba.asm). Създаденият текстов файл се подава като входни данни на обработваща програма езиков процесор - компилатор за съответния програмен език. Компилаторът превежда програмата на машинен език в относителни адреси (Proba.obj), като създава обектна програма (object code). Обектният файл се чете от друга обработваща програма - свързващ редактор, който настройва относителните адреси на обектната програма, добавя необходимите модули от системната библиотека, като ги обединява заедно с потребителския код в изпълнима програма (executable code). Програмата се записва на външен носител като изходен (резултатен) изпълним файл (Proba.exe, Xxxxx.xxx).
Обработката на една първична програма Java се отличава от описаната no-горе технологична схема и включва следните две стъпки: компилация и интерпретация. Компилаторът на Java превежда първичния файл (например Proba.java) в т.нар. байтов код, като създава файл със стандартно разширение .class (Proba.class). Полученият файл се подава като вход на Java- интерпретатор, който извършва окончателната обработка.
И така, обработката на едно традиционно MS-DOS-приложение включва две стъпки (два паса): компилация (compiling) и свързване (linking).
Трите файла - първичен (source), обектен (object) и изпълним (executable), като правило се разполагат резидентно на дисков носител.
Изпълнението на програмата (преобразувания файл Proba.exe) се осъществява в оперативната памет на компютъра. То е функция на операционната система (ОС). Изпълнява се служебна зареждаща програма Loader. Тя включва следните действия, които се изпълняват последователно:
1. Търсене на изпълнимия файл върху дисковото пространство;
2. Зареждане на изпълнимия файл в оперативната памет;
3. Предаване на управлението на изпълнимия файл.
Компилирането, свързването и изпълнението се активират по един и същ начин след въвеждане на команден ред. За операционната система MS- DOS командният ред се обработва от компонента на системното програмно осигуряване, наречена команден интерпретатор - Xxxxxxx.xxx.
Част от командите на ОС се реализират от програми, които са вградени в командния интерпретатор (DIR, COPY, DEL, ERASE и др.). Те са вътрешни. Останалите команди на ОС са съхранени като файлове с разширение .com или .ехе и всеки път изпълнението им се предшества от тяхното зареждане в оперативната памет. Тези команди са външни. Очевидно всяка приложна потребителска програма се явява външна команда за MS-DOS.
Командният интерпретатор разпознава командите (вътрешни и външни) и издава диагностични съобщения при неправилно въведени команди. Командният ред, с който се въвеждат команди, има следния формат:
[<устройство>][<пътека>]<команда/програма>[<квалификатори>] [<параметри>],
,където <устройство> и <пътека> указват мястото върху диска на резидентното разполагане на командния/програмния файл.
Ако се зададе само името на командата/програмата (например DIR) и то съвпада с име на вътрешна команда, изпълнява се вътрешната команда, независимо че в текущия каталог има наличен файл с това име.
Командата/програмата задава име на програмния файл. Програмните файлове са два вида - с разширение .com и с разширение .ехе.
<Квалификаторите> представляват най-често едносимволни ключове, предшествани от наклонена черта /. Те задават специфичен режим на изпълнение.
<Параметрите> са символни низове, разделени с интервал и служат за подаване на допълнителна информация при активирането на програмата.
Има разлика в търсенето, структурата и зареждането на програмни файлове с разширение .com и .ехе. При търсене .corn-файловете се сканират с приоритет. По-точно, когато в командния ред постъпи име без разширение, служебно му се добавя разширение .com и започва търсене в текущия каталог (директория, папка). Ако така конструираното име не се намери, търсенето започва отново, но този път служебно му се задава разширение .ехе. Това е една от причините [7,43] .ехе-файловете да са с по-голям период на подготовка при изпълнение. Ако и в този случай името не бъде намерено, се провежда трето търсене, като името вече е с разширение .bat. Файловете с разширение .bat съдържат команди на ОС, които се изпълняват в пакетен режим. Командата PATH служи за задаване на списък от каталози, които наред с текущия се претърсват автоматично за програмни файлове с разширение .com, .xxx x .bat.
Един обобщен опростен алгоритъм на работа на команден интерпретатор при търсене на програмен файл може да бъде онагледен с блоксхемата, показана на фиг. 1.2. Ще поясним действието на командния интерпретатор. Приема се, че той е реализиран модулно и е обособен като функция с име Commandlnterpret(). В началото на екрана се изписва подсещащ текст, резултат от активирането на функцията DisplayPrompt(). Изписаният текст, резултат от активирането на функцията DisplayPrompt(). Изписаният текст и мигащият курсор указват, че интерпретаторът е в готовност и очаква въвеждане на команда от потребителя. Следва четене на команден ред / действие Line=GetCmdLine()/. Извиква се функция GetCmdLine(), която буферира командния ред в символния масив Line. Командата се отделя от масива Line /действие Name=strtok(Line)/ и се присвоява на символната променлива Name. Следва проверка дали променливата Name съдържа низ, който е вътрешна команда /действие Found=LookInternCmd(Name)/. За целта се активира функция LookInternCmd(), чиято върната стойност се присвоява на флаговата променлива Found. В случай, че резултатът от проверката е положителен /клон Yes на проверката Found=l?/ следва изпълнение на вътрешната команда и предаване на управлението в началото, след което командният интерпретатор очаква въвеждане и обработка на нова команда/ програма. В случай, че първоначално въведеният низ не бъде разпознат като вътрешна команда, се извършва проверка за външна команда, т.е. за програма. Към името се добавя разширение .com /действие Buf=Name||".com"/. Проверява се дали в текущия каталог или в каталозите, към които е указана пътека, има наличен файл, чието име съвпада със съдържанието на буфера Buf /действие Found=LookPathDir(Buf)/. За целта се активира функция LookPathDir(), чиято връщана стойност се присвоява на флаговата променлива Found. В случай, че резултатът от проверката е положителен /клон Yes на проверката Found=l?/ следва зареждане на програмата под формата на разпознат файл с разширение .com, предаване на управлението, изпълнениена програмата като външна команда и предаване на управлението в началото, след което командният интерпретатор очаква въвеждане и обработка на нова команда/програма. В случай, че низът от буфера Buf не бъде разпознат като .corn-файл, към името се прибавя ново разширение .ехе /действие Buf=Name||".exe"/, след което отново се извършва търсене в текущия каталог и каталозите, към които има пътека. Целта е откриване на файл с име, съвпадащо със съдържанието на низа от буфера Buf /действие Found=LookPathDir(Buf) и проверка Found=l?/. В случай, че резултатът от проверката е положителен /клон Yes на проверката Found=l?/ следва зареждане на програмата под формата на разпознат .xxx-xxxx, предаване на управлението, изпълнение на програмата като външна команда и предаване на управлението в началото, след което командният интерпретатор очаква въвеждане и обработка на нова команда/програма. В случай, че низът от буфера Buf не бъде разпознат като .ехе-файл, към името се прибавя ново, трето разширение .bat /действие Buf=Name|| ".bat"/, след което отново се извършва търсене в текущия каталог и каталозите, към които има пътека за откриване на файл с име, съвпадащо със съдържанието на низа от буфера Buf /действие Found=LookPathDir(Buf) и проверка Found=l?/. Ако резултатът от търсенето е положителен /клон Yes на проверката Found=l?/, следва изпълнение на разпознатия .bat-файл и предаване на управлението в началото, след което командният интерпретатор очаква въвеждане и обработка на нова команда/програма. Ако резултатът от търсенето е отрицателен и в този трети случай, не остава нищо друго, освен да се изведе познатото съобщение Bad command or file name /действие Message("Bad command or file name")/, след което управлението отново се връща в началото и командният интерпретатор извежда съответен промпт, очаквайки нова поредна команда.
Блокът „Изпълнение на вътрешна команда" обобщено означава обработката на всички команди, които са вградени в тялото на командния интерпретатор като DIR, COPY, DEL, ERASE и други.
Блокът „Зареждане на програма" тук не е пояснен. Подробности по този въпрос са изложени в т. 7.7.2. Структура и зареждане на .com- и .ехе- файлове в оперативната памет.
Блокът „Изпълнение на
програма" включва действията по
предаване
на управлението на
стартираната програма (зареждане на
програмния брояч
със стартовия
адрес), изпълнение на програмата и
нейното приключване, след което
управлението се предава отново на
командния интерпретатор.
Блокът „Изпълнение на пакетен файл с разширение .bat" може да се прецизира с алгоритмичния фрагмент, показан на фиг. 1.3.
NumBat е променлива, която съдържа броя на командите, влизащи в обработвания .bat-файл. К означава индексна променлива брояч. Изпълнява се цикъл до изчерпване на командите, които съставят .bat-файла. Всяка . команда от тялото на пакетния файл се интерпретира от командния интерпретатор Commandlnterpret().
СЪЗДАВАНЕ НА ПРИЛОЖЕНИЯ В СРЕДА WINDOWS
В тази точка последователно се разглеждат характерните особености при компилиране, свързване, търсене, зареждане и изпълнение на програми под управление на Windows. Типичното наименование на изпълнима програма в среда Windows е приложение (application).
MS-DOS и Windows са две коренно различни операционни среди. Това води до разлики в структурата, технологията за създаване и изпълнението на една програма в среда MS-DOS и среда Windows. За разлика от MS-DOS структурата на едно Windows-приложение е по-сложна и изграждането му е свързано с повече обработки.
Една MS-DOS-програма
се явява изпълним файл (executable
file), който
най-често обработва входни данни (входен
поток от клавиатура или файл), извършва
определено действие като обработва
постъпилите данни и извежда резултата
(изходен поток с резултати, на екран или
файл). Описаната схема визира класическия
модел на изчислителен процес IРО
(Input, Process,
Output). При
това MS-DOS
по своя замисъл и идеология
е операционна система (среда), която
предоставя минимално обкръжение на
потребителските
програми (достъп до
файлова система, MS-DOS-функции
и BIOS-функции). За всичко
останало се грижи програмистът - да
вгради поотделно във всяка една програма
например потребителски интерфейс,
help-конвенции, overlay-
структура на собствената програма в
паметта и др.
Една Windows-програма се явява изпълним файл (executable file), който създава един или повече прозорци и използва цикъл за анализ и обработка на съобщения, за да приеме потребителски вход, да изведе резултат или да предприеме определено действие. Обработката на съобщения се нарича реакция на събития. Описаната схема визира освен класическия IPO-модел на изчислителен процес и други модели на изчислителен процес като Client- Server, при който се осъществява динамичен обмен на данни между активни приложения. При това Windows пo своя замисъл е операционна система (среда), която предоставя голяма част от собствените си възможности на потребителските програми [9]. Например единен графичен потребителски интерфейс, който е валиден и възприет за системни и потребителски приложения, има различни възможности за обмен на данни между приложения като механизъм чрез буфер от тип пощенска кутия (Clipboard), механизъм за динамичен обмен на данни DDE (Dynamic Data Exchange), механизъм на вградена обектна връзка OLE (Object Linking and Embedding), механизъм за работа с динамични библиотеки (Dynamic Link Libraries). B Windows е възможно едновременно изпълнение на няколко програми, в това число многократно стартиране и изпълнение на една и съща програма, възможност за превключване между програмите чрез потребителска намеса, съвместимост със съществуващо програмно осигуряване, използване на наличните апаратни ресурси и достъп до оперативната памет. Изброените възможности, които се предоставят на програмиста, са достъпни благодарение на приложение на принципите на обектно ориентираното програмиране. Всичко това прави Windows по-привлекателна среда от MS-DOS.
Във връзка с цитираните механизми за обмен на данни между приложения, ще поясним следните термини:
Обмен с буфер от типа пощенска кутия (Clipboard). В среда Windows се поддържа буфер, с помощта на крито потребителят има възможност да копира (copy), изрязва/отсича (cut) и пренася на ново място (paste) определени информационни компоненти като отделни текстови символи, думи, редове, параграфи, дори файлове или други графични обекти - таблици, изображения. Обменът е възможен както в рамките на един файл, така и между различни файлове.
Обмен DDE (Dynamic Data Exchange). Идеята се състои в това, че съществуват определен брой стандартни съобщения от типа DDE, които се обработват от Windows-приложенията и служат за предаване в програмите на дескриптори от глобалната памет, съдържащи необходимите данни за обмен. Форматът на тези съобщения се нарича протокол DDE. В този смисъл важно е да се знаят следните термини [43]:
Сървър (server) - приложение, което изпраща данни.
Клиент (client) - приложение, което изпраща заявка към сървър и приема данни от него.
Xxxxx (conversation, session) - активна, непрекъсната връзка между клиент и сървер.
Транзакция (transaction) - единен акт на обмен на данни в процеса на сеанса.
Тема (topic) - наименование на типа предавани данни.
Елемент данни (data item) - група данни, предавани по едно съобщение. Всеки елемент данни има свой уникален дескриптор. Елементите данни са текстови редове. Да се предават редове в DDE е неудобно и затова съществува начин те да се кодират. За целта служи универсалният обект за обмен на данни между приложения атом (atom).
Обмен OLE (Object Linking and Embedding). Основната идея се състои в това, че съществува възможност обекти, създадени с едно приложение, да се свързват или вграждат в състава на друго приложение. Същественото предимство е, че всички промени, които се извършват с вградения или свързания обект, се отразяват и са валидни и в приложенията, към които обектът преди това е бил свързан или вграден. От значение са следните термини [43]:
Обект (object) - данни (a piece of information), представляващи например рисунка или текст, които могат да се свързват или вграждат.
Първичен документ (source document) - документ, в който се създава обектът.
Целеви документ (destination document) - документ, в който обектът се изпраща или разполага.
Вграден обект (embedded object) - обект от целеви документ, който е копие от данни, създадени в друго приложение. Избирането на вграден обект води до активиране на приложението, с което обектът е създаден, без да се излиза от документа, който се обработва.
Свързан обект (linked object) - създаването му изгражда връзка между първичен документ и целеви документ. Тук няма копие, а данните се отнасят само до първичния документ. Когато променяте данни в свързан обект, вие променяте информацията в първичния документ. Когато променяте данни в първичния документ, промените се отразяват и в целевия документ.
Обмен през динамични библиотеки (DLL). Динамичните библиотеки в среда Windows са структури, които съдържат обектен код и/или данни, които се предоставят и могат да бъдат ползвани от множество различни приложения. Въпросите за създаване и работа с динамични библиотеки са разгледани подробно по-долу.
Традиционната Windows-програма (приложение) преди всичко създава един или повече прозорци и използва цикъл за обработка на съобщения (реакция на събития). Кодът за тези и други необходими допълнителни действия се формира във вид на първичен текстов файл, съставен на програмен език от високо ниво, който се компилира и свързва до изпълним вид. Дотук схемата се препокрива с действията по създаване на едно MS- DOS-приложение. При работа в среда Windows това не е достатъчно за създаване на пълноценно приложение. Извършват се още допълнителни обработки поради следните две важни причини:
А. Работи се с динамични библиотеки в среда Windows;
Б. Има ресурсно обезпечаване на едно Windows-приложение.
1.2.1. ТЕХНОЛОГИЧНИ РЕЖИМИ ЗА
СЪЗДАВАНЕ
НА WINDOWS-ПРИЛОЖЕНИЯ
Създаването в текстов вид, компилирането, свързването и изпълнението на едно Windows-приложение може да се постигне в различни режими:
А. Работа с проект в интегрирана програмна среда
Съвременните програмни продукти предлагат на потребителя интегрирана програмна среда IDE (Integrated Development Environment) за работа. Тя осигурява режим на работа, при който етапите от обработката на едно Windows-приложение (текстово редактиране, компилиране на първични текстове, компилиране на ресурси, свързване, свързване на ресурси и изпълнение) са обединени. С помощта на рационално разработени менюта с множество възможности и богата налична помощна информация на потребителя се предлага дружелюбно (user friendly) обкръжение, което предоставя възможности и за допълнителни обработки като тестване и настройка.
Организацията на изброените обработки за създаване на едно Windows- приложение се постига чрез работа с проект в интегрираната програмна среда. В състава на проектния .prj-файл се указва структурата на проекта за изграждане на приложението - кои са имената на първичните .с- или .срр- файлове, имената на заглавните .h-файлове, името на ресурсния .re-файл и името на дефиниционния .def-файл. За създаване на приложението е необходимо при отворен проект да се активира опция Make, меню Compile. Строи се приложение .ехе-файл, чието име се определя (съвпада) с името на проектния файл.
Б. Работа с помощна програма Make
Възможностите за автоматизация на програмирането, които предоставя разгледаната помощна програма Make, са напълно приложими и при създаване на Windows-приложения. Текстът на примерен входен Makefile, който съдържа необходимите команди за създаване на едно традиционно Windows- приложение Proba.exe е представен по-долу. То се състои от първични файлове Proba.cpp и Proba.h, ресурсен файл Froba.rc и дефиниционен файл Proba.def.
# този Make-файл създава Windows-приложение
# зависимости за изпълнимия файл Proba.exe
Proba.exe: Proba.obj Proba.res Proba.def
Tlink Proba, Proba, Implib, Proba.def
Rc Proba.res
# зависимости за обектния файл Proba.obj
Proba.obj: Proba.cpp Proba.h
Bcc -c Proba.cpp
# зависимости за ресурсния файл Proba.rc
Proba.res: Proba.rc
Rc -r Proba.rc
В. Автоматизирано генериране
на
Windows-приложения
Трудоемкостта на създаване на Windows-приложения по описания дотук начин е наложила развитие на средства за визуално програмиране, които правят този процес по-лек и по-технологичен за програмиста. В Borland се ползва библиотеката класове VCL (Visual Component Library), а в Microsoft библиотеката класове MFC (Microsoft Foundation Classes). На тази основа широка популярност имат пакетите за визуално програмиране като Delphi, C++Builder, JBuilder, Visual C, Visual BASIC, които не се разглеждат тук.
Системи за програмиране. Инструментални средства
Системата за програмиране се състои от инструментални средства, предназначени за създаване на програми. Създаването на дадено приложение най-общо преминава през няколко стъпки, като за всяка от тях са необходими съответни инструментални средства. Към тези средства като минимум могат да се включат: езици за програмиране, текстови редактори, графични редактори, транслатори. програми за настройка и тестване на приложенията и др.
1.3.1. Език за програмиране
Основен елемент на системата за програмиране е езикът за програмиране.
Съществуват различни по характер и предназначение ЕП. Широко разпространена е следната класификация на ЕП, основаваща се на историческото развитие и концепциите за програмиране:
· първо ниво – машинни езици;
· второ ниво – асемблерни езици;
· трето ниво – езици от високо ниво;
· четвърто ниво – езици от много високо ниво (високопроизводителни езици);
· пето ниво – езици за задачи от областта на изкуствения интелект.
Езици от първо ниво. Единственият език, разбираем от конкретен компютър е неговият машинен език. Затова първите програми са създадени на машинен език. Самата програма е последователност от инструкции на компютъра и представлява двоичен низ с определена дължина и структура. При написване на програмата директно на машинен език се появяват редица проблеми:
1. Програмистът трябва да запомни синтаксиса и семантиката на редица машинни инструкции, което налага да се правят справки в процеса на програмиране.
2. Програмистът трябва да се грижи сам за разполагане на данните в паметта, т.е. трябва да помни адреса на всяка данна.
3. Проблем с правилното въвеждане на програмата – голяма вероятност за грешки
4. Проблем с откриване на грешките и тяхното коригиране
5. Преносимостта на програмите не е възможна.
6. Усвояването на един машинен език не позволява лесен преход към изучаването на друг машинен език.
Поради тези съображения специалистите насочват своите усилия към разработването на по-съвършени системи за програмиране. Появяват се езиците от второ ниво – асемблерните езици.
Езици от второ ниво. Асемблерните езици са предназначени да намалят трудностите при писане на програми. При тях кодът на операцията се заменя с мнемоничен код (който се помни лесно), а вместо абсолютни адреси на клетки се използват имена на полетата с данни (символни адреси). Следователно програма, написана на асемблерен език, представлява не поредица от двоични цифри, а текст. Например, за означаване на операциите се използват следните служебни думи: ADD – за събиране, SUB – за изваждане, MULT – за умножение, DIV – за целочислено деление, MOD – за намиране на остатъка при целочислено деление, LOAD – за извличане на целочислена данна в акумулатора на ЦП, STORE – за запис в паметта и др. Като пример ще посочим и означаването на някои от регистрите на микропроцесор на Intel: акумулатор – AH, AX, AL, база – BH, BX, BL, брояч (counter)– CH, CX, CL, данни– DH, DX, DL. Програмистът може да избира за имена на полета произволни буквено-цифрови съчетания, които да му напомнят за съдържанието им. Например, за клетки от паметта, съдържащи обем, може да се избере символен адрес volume, а за клетки, съдържащи възраст – age.
За да бъде възприет и изпълнен от компютъра, този текст трябва да бъде преведен в машинен код от специална програма, наречена Асемблер.
Така че тройката от асемблерен език, асемблер и текстов редактор може да се разглежда като най-простата система за програмиране.
За спестяване на програмистки труд по-късно започват да се използват макроасемблерите, в които се дефинират и именуват групи от често използвани операции, наречени макроси.
Програмирането на асемблерен език и до днес не е загубило своята роля. Отделни части на системния и приложен софтуер все още се програмират на асемблерен език.
Независимо, че програмирането на асемблерни езици е улеснено, при тях продължават да съществуват проблеми:
1. Необходимо е много добро познаване на архитектурата на съответния компютър.
2. Асемблерните езици са също машинно зависими, т.е. съществува проблемът с преносимостта на програмите.
3. Облекченията, които се дават на програмистите, са твърде малко.
Езици от трето ниво (езици от високо ниво). Заражда се идеята за разработване на езици със символично означаване на операциите и полетата с данни, като се избегне машинната зависимост. До такава идея пръв е достигнал Xxxxxx Xxxx, още през 1945 г., започвайки разработването на езика Plancalcul. През 50-те години се създават езиците от високо ниво като: Fortran (Xxxx Xxxxx- 1957), Cobol (1960), Algol, а по-късно Basic (1965) Pascal (1971),. Първоначално се е смятало, че отдалечаването на ЕП от архитетурата на компютъра ще доведе до намаляване на ефективността на програмите, но създаденият от Бакъс транслатор за превод от Fortran на машинен език извършва истинска революция в програмирането. Машинните програми, преведени от транслатора, показват много добри качества, близки до машинните програми, написани от човек. Със създаването на езика Алгол се очертава и другата роля на ЕП – да служат като средство за описание на алгоритми. Затова ЕП от високо ниво се наричат още алгоритмични езици. Алгоритмичният език е строг и формален и по това прилича на машинния език, а по възможност за четене прилича на езика на блок-схемите, което го прави отлично средство за обмен на алгоритми и обучение в алгоритмизация на задачи за програмиране.
Езиците от високо ниво използват специални думи, наречени оператори и правила за използване на тези оператори. Един оператор обобщава действието на много машинни инструкции. Програмата се описва на език, близък до естествения език (английски) и чрез възприетата в математиката символика. Езиците от високо ниво въвеждат процедурния стил в програмирането. Програмата се разделя на процедури и данни.Една процедура се дефинира от няколко оператора само веднъж и се запаметява. След това може да се ползва на много места в програмата. Най-добър ефект се получава, когато различни процедури ползват общи данни. Известни процедурни езици са Fortran, Cobol, Modula-2, Pascal, Basic, C (Си).
По-късно се появяват и езици от високо ниво, основани на обектно-ориентирания подход. При него основни програмни елементи са обектите. Всеки обект принадлежи към съответен клас. Класовете образуват йерархия на принципа на наследяването. Обектно-ориентирани езици са SmallTalk, Ada, C++, Visual Basic, Delphi, Java и др.
Предимствата на езиците от високо ниво са улесняване на програмисткия труд и осигуряване на машинна независимост. Недостатък е по-бавното изпълнение на програмите.
Езиците от четвърто ниво (много високо ниво) са разработени, за да улеснят максимално потребителя, който не е експерт по програмиране. При тях се описва КАКВО трябва да се извърши, без да се указва как. Те имат следните по-важни области на приложение: езици за запитвания в бази данни; генератори за отчети; графични езици; генератори на програми; средства, обслужващи процеса на вземане на решение. Езици от четвърто ниво са FOCUS, RAISq, NOMAN, SQL, XXX.XX, NATURAL II и др.
Езиците от пето поколение са предназначени основно за решаване на задачи от областта на изкуствения интелект. Типичен представител е езикът PROLOG. При него предметната област се описва с факти и правила, образуващи информационната база на програмата. Чрез специален механизъм за логически извод могат да се получат отговори на въпроси, отправени към информационната база.
1.3.2. Транслатори
Едновременно с езиците за програмиране се развиват и транслаторите. Това е програма, която превежда изходната програма в машинен код. Според начина, по който се осъществява това превеждане, транслаторите биват: компилатори и интерпретатори.
Компилаторът чрез непрекъснат процес прекодира целия текст на една програма от високо ниво, като създава нова програма на машинен език. Същата може да се съхрани и след това многократно да се изпълнява, без да се използва компилатора. Работата с език, реализиран чрез компилатор, обикновено минава през три етапа: текстът на програмата се създава с помощта на текстов редактор или програма за обработка на текст; вторият етап (след като програмата е тествана и са отстранени грешките) се състои в компилиране на програмата и третият етап е самото изпълнение на готовата програма.
Компилаторите избират за всяка от конструкциите на езика подходящ, предварително подготвен фрагмент на машинен език и от всички фрагменти съставят (компилират) цяла програма.
Интерпретаторът изпълнява програмата оператор по оператор, като още в момента трансформира всеки оператор в машинна инструкция. С други думи преведената последователност от машинни команди се изпълнява веднага. Това помага на програмиста да прави промени и веднага да вижда резултата, т.е. улеснява се процеса на писане и тестване на програмите. Основен недостатък на интерпретаторите е, че изпълняват програмите много бавно. Ако при изпълнение на програмата съответната конструкция бъде срещната отново, тя трябва пак да се преведе. Интерпретаторът трябва да се използва всеки път, когато се изпълнява програмата и по този начин се заема повече памет, отколкото при изпълнение на компилираните програми.
Създаването на интерпретатор е много по-лесно от създаването на компилатор. В замяна на това, изпълнението на компилирана програма е по-бързо от интерпретирана програма. Интерпретаторите имат и други недостатъци, но са много подходящи за работа със сравнително прости езици за малки компютри или за твърде сложни езици, за които е трудно или невъзможно да се направи компилатор.
Разликата между компилатора и интерпретатора е аналогична на разликата между преводача на писмен текст и преводача на устна реч. Преводачът на писмени произведения разполага със завършен ръкопис и от него прави текст на друг език. Устният преводач предава всяка фраза или изречение непосредствено след изговарянето.
По принцип всеки език за програмиране може да бъде реализиран както чрез интерпретатор, така и чрез компилатор. В повечето случаи обаче са популярни или единият или другият вид реализация. Езиците FORTRAN, COBOL, PASCAL използват компилатори, LOGO и FORT използват интерпретатори, а в BASIC и LISP са широко разпространени в двете форми.
1.3.3. Текстови редактори
Текстовите редактори се използват за създаване и изменение на текстови файлове, представляващи програмния код. Текстът може да бъде последователност от оператори на някакъв език за програмиране, оформен като програмен модул. За целта се прилагат екранни и редови текстови редактори, като по-удобни са екранните. Някои текстови редактори поддържат функции, улесняващи програмирането на съответния език: цветово различаване на служебни думи, функции, класове, автоматична табулация, предложения за операнд.
1.3.4. Свързващи редактори
Следващата стъпка на разработване на потребителски програми е свързването. За изпълнение на тази стъпка се използват свързващи редактори,
Много големите програми се състоят от отделни обособени части, които се пишат от различни колективи от програмисти. След компилиране на отделните части, те трябва да се свържат в едно цяло, при това включвайки доста сложни връзки между тях. В една обща изпълнима програма се обединяват няколко обектни модула и библиотеки. Тази дейност се извършва от специализирана програма на системата за програмиране, наречена свързващ редактор (линкер).
1.3.5. Дебъгери (анализатори на програмата)
Настройката е важна стъпка от процеса на разработването на потребиителски програми. Могат да се използват различни средства за настройка. Дебъгерът (Debugger, програма за настройка) е специална програма, която подпомага настройването и тестването на потребителските програми. Тя предоставя средства за трасиране (стъпково изпълнение на програмата и подробен запис на последователността от действия по време на изпълнение), за наблюдение как се променят стойности на променливи и дава възможност за установяване точки на прекъсване в настройваната програма. Тя може да се включва в или като част от компилатора или интерпретатора и помага на програмистите да откриват и коригират грешките.
При създаване на програмите могат да възникнат следните видове грешки
"Грешка" при писане на програмата – отстраняват се с текстов редактор;
Грешки по време на компилация (синтактични грешки) – откриват се от транслатора;
Грешки по време на изпълнение (Run-time error) – откриват се с дебъгер;
Грешки в алгоритъма (логически грешка) – най-трудни за откриване, откриват се по време на тестване на програмата и в най-лошия случай – при експлоатация;
1.3.6. Библиотеки
Към инструменталните средства има група други програми. В тях най-често се включват библиотеките от програми, в които се съхраняват обектни модули за някои често използвани процедури, които автоматично се извличат оттам чрез свързващи редактори. Библиотеките съдържат подпрограми, които се използват най-често, например, подпрограми за вход/изход, тригонометрични функции, подпрограми за изчертаване на графични примитиви - линия, дъга, правоъгълник и т. н.
1.3.7. Декомпилатор
Това е програма, която разединява на съставни фрагменти дадена програма, която вече е била компилирана. Основен инструмент на кракерите.
1.3.8. Средства за поддържане на версиите
Съществуват и елементи на системите за програмиране, които поддържат различни версии на програмата, като за всяка нова версия съхраняват само измененията спрямо някоя предишна версия. По този начин се пести памет, без да се губи нито един вариант на разработваните програми.
1.3.9. Средства за поддържане целостта на програмите
С помощта на несложен език се описват взаимните връзки между отделните компоненти на голямата програма, така че при изменение на някой от тях да бъдат автоматично извършени определени технологични действия (компилация, асемблиране, свързване и др.), запазващи целостта й.
2. Интегрирани среди за разработване (IDE- integrated development environment)
В повечето традиционни инструменти за разработване всяка от функциите по създаване на едно приложение (проектиране, редактиране, компилиране и настройване (debugging)) работи като отделна програма, всяка със собствен интерфейс.
В последните години отделните програми, включени в групата инструментални средства, се обединяват в т.нар. интегрирани среди (среди за програмиране - IDE).
Това понятие доби популярност при създаване на програмно осигуряване, работещо под Windows. Интегрираната среда за програмиране най-често осигурява средства за подготовка, транслиране, тестване и коригиране на грешки, и изпълнение на програмата, както и за нейното документиране. Тя предоставя разширен многопрозоречен редактор, възможност за работа с мишка и обслужва пълния цикъл за създаване и поддържане на изпълняваната програма.
Интегрираната среда включва:
език за програмиране;
транслатор (компилатор или интерпретатор);
свързващ редактор;
изпълнителна система;
система за проверка на програми;
система за поддържане на библиотеки;
текстови редактори и др.
Интегрираните среди се използват широко в практиката, тъй като при работа с тях компилирането, свързването и тестването се осъществява без да се напуска средата на редактора. При създаване на програми обикновено се налага програмните файлове да се коригират и компилират неколкократно, като последователно се използват редактора и компилатора. Интегрираната среда повишава производителността на програмисткия труд.
Има и случаи, в които в рамките на една и съща среда са организирани няколко системи за програмиране, всяка от които е свързана с различен език на програмиране (MS Visual Studio).
Много от съвременните интегрирани среди са ориентирани към създаване на приложения за операционни системи с графичен потребителски интерфейс (GUI – graphical user interface), каквито са операционните системи от фамилията Windows.
При такива системи вместо да се пишат много редове програмен код, за да се опише наличието и разположението на интерфейсни елементи, като командни бутони, текстови кутии, радиобугони, кутии за отметки и др. под., програмистът просто добавя предварително създадени обекти на някакво място върху екрана. Ако програмистът има известни умения за работа с графична програма, като Paint, това е достатъчно за създаване на ефективен потребителски интерфейс.
Освен интегрирани среди, като допълнителни средства могат да се прилагат мениджъри на проекта, автоматически генератори на приложения и др.
Изготвил:….......
Инж. Xxxxxxx Xxxxxx
13