DNAIDENOWA.alle.bg

1. Среди за програмиране. Редактори. Компилатори. IDE, GUI

Среди за програмиране. Редактори. Компилатори. IDE, GUI

 

1. Системи за програмиране. Инструментални средства

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

1.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. Облекченията, които се дават на програмистите, са твърде малко.

Езици от трето ниво (езици от високо ниво). Заражда се идеята за разработване на езици със символично означаване на операциите и полетата с данни, като се избегне машинната зависимост. До такава идея пръв е достигнал Конрад Цузе, още през 1945 г., започвайки разработването на езика Plancalcul. През 50-те години се създават езиците от високо ниво като: Fortran (Джон Бакъс- 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, USE.IT, NATURAL II и др.

Езиците от пето поколение са предназначени основно за решаване на задачи от областта на изкуствения интелект. Типичен представител е езикът PROLOG. При него предметната област се описва с факти и правила, образуващи информационната база на програмата. Чрез специален механизъм за логически извод могат да се получат отговори на въпроси, отправени към информационната база.

 

1.2. Транслатори

Едновременно с езиците за програмиране се развиват и транслаторите. Това е програма, която превежда изходната програма в машинен код. Според начина, по който се осъществява това превеждане, транслаторите биват: компилатори и интерпретатори.

Компилаторът чрез непрекъснат процес прекодира целия текст на една програма от високо ниво, като създава нова програма на машинен език. Същата може да се съхрани и след това многократно да се изпълнява, без да се използва компилатора. Работата с език, реализиран чрез компилатор, обикновено минава през три етапа: текстът на програмата се създава с помощта на текстов редактор или програма за обработка на текст; вторият етап (след като програмата е тествана и са отстранени грешките) се състои в компилиране на програмата и третият етап е самото изпълнение на готовата програма.

Компилаторите избират за всяка от конструкциите на езика подходящ, предварително подготвен фрагмент на машинен език и от всички фрагменти съставят (компилират) цяла програма.

Интерпретаторът изпълнява програмата оператор по оператор, като още в момента трансформира всеки оператор в машинна инструкция. С други думи преведената последователност от машинни команди се изпълнява веднага. Това помага на програмиста да прави промени и веднага да вижда резултата, т.е. улеснява се процеса на писане и тестване на програмите. Основен недостатък на интерпретаторите е, че изпълняват програмите много бавно. Ако при изпълнение на програмата съответната конструкция бъде срещната отново, тя трябва пак да се преведе. Интерпретаторът трябва да се използва всеки път, когато се изпълнява програмата и по този начин се заема повече памет, отколкото при изпълнение на компилираните програми.

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

Разликата между компилатора и интерпретатора е аналогична на разликата между преводача на писмен текст и преводача на устна реч. Преводачът на писмени произведения разполага със завършен ръкопис и от него прави текст на друг език. Устният преводач предава всяка фраза или изречение непосредствено след изговарянето.

По принцип всеки език за програмиране може да бъде реализиран както чрез интерпретатор, така и чрез компилатор. В повечето случаи обаче са популярни или единият или другият вид реализация. Езиците FORTRAN, COBOL, PASCAL използват компилатори, LOGO и FORT използват интерпретатори, а в BASIC и LISP са широко разпространени в двете форми.

1.3. Текстови редактори

Текстовите редактори се използват за създаване и изменение на текстови файлове, представляващи програмния код. Текстът може да бъде последователност от оператори на някакъв език за програмиране, оформен като програмен модул. За целта се прилагат екранни и редови текстови редактори, като по-удобни са екранните. Някои текстови редактори поддържат функции, улесняващи програмирането на съответния език: цветово различаване на служебни думи, функции, класове, автоматична табулация, предложения за операнд.

1.4. Свързващи редактори

Следващата стъпка на разработване на потребителски програми е свързването. За изпълнение на тази стъпка се използват свързващи редактори,

Много големите програми се състоят от отделни обособени части, които се пишат от различни колективи от програмисти. След компилиране на отделните части, те трябва да се свържат в едно цяло, при това включвайки доста сложни връзки между тях. В една обща изпълнима програма се обединяват няколко обектни модула и библиотеки. Тази дейност се извършва от специализирана програма на системата за програмиране, наречена свързващ редактор (линкер).

1.5. Дебъгери (анализатори на програмата)

Настройката е важна стъпка от процеса на разработването на потребиителски програми. Могат да се използват различни средства за настройка. Дебъгерът (Debugger, програма за настройка) е специална програма, която подпомага настройването и тестването на потребителските програми. Тя предоставя средства за трасиране (стъпково изпълнение на програмата и подробен запис на последователността от действия по време на изпълнение), за наблюдение как се променят стойности на променливи и дава възможност за установяване точки на прекъсване в настройваната програма. Тя може да се включва в или като част от компилатора или интерпретатора и помага на програмистите да откриват и коригират грешките.

При създаване на програмите могат да възникнат следните видове грешки

  • "Грешка" при писане на програмата – отстраняват се с текстов редактор;
  • Грешки по време на компилация (синтактични грешки) – откриват се от транслатора;  
  • Грешки по време на изпълнение (Run-time error) – откриват се с дебъгер;
  • Грешки в алгоритъма (логически грешка) – най-трудни за откриване, откриват се по време на тестване на програмата и в най-лошия случай – при експлоатация;

1.6. Библиотеки

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

1.7. Декомпилатор

Това е програма, която разединява на съставни фрагменти дадена програма, която вече е била компилирана. Основен инструмент на кракерите.

1.8. Средства за поддържане на версиите

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

1.9. Средства за поддържане целостта на програмите

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

2. Интегрирани среди за разработване (IDE- integrated development environment)

 В повечето традиционни инструменти за разработване всяка от функциите по създаване на едно приложение (проектиране, редактиране, компилиране и настройване (debugging)) работи като отделна програма, всяка със собствен интерфейс.

В последните години отделните програми, включени в групата инструментални средства, се обединяват в т.нар. интегрирани среди (среди за програмиране - IDE).

Това понятие доби популярност при създаване на програмно осигуряване, работещо под Windows. Интегрираната среда за програмиране най-често осигурява средства за подготовка, транслиране, тестване и коригиране на грешки, и изпълнение на програмата, както и за нейното документиране. Тя предоставя разширен многопрозоречен редактор, възможност за работа с мишка и обслужва пълния цикъл за създаване и поддържане на изпълняваната програма.

Интегрираната среда включва:

  • език за програмиране;
  • транслатор (компилатор или интерпретатор);
  • свързващ редактор;
  • изпълнителна система;
  • система за проверка на програми;
  • система за поддържане на библиотеки;
  • текстови редактори и др.

Интегрираните среди се използват широко в практиката, тъй като при работа с тях компилирането, свързването и тестването се осъществява без да се напуска средата на редактора. При създаване на програми обикновено се налага програмните файлове да се коригират и компилират неколкократно, като последователно се използват редактора и компилатора. Интегрираната среда повишава производителността на програмисткия труд.

Има и случаи, в които в рамките на една и съща среда са организирани няколко системи за програмиране, всяка от които е свързана с различен език на програмиране (MS Visual Studio).

Много от съвременните интегрирани среди са ориентирани към създаване на приложения за операционни системи с графичен потребителски интерфейс (GUI – graphical user interface), каквито са операционните системи от фамилията Windows.

При такива системи вместо да се пишат много редове програмен код, за да се опише наличието и разположението на интерфейсни елементи, като командни бутони, текстови кутии, радиобугони, кутии за отметки и др. под., програмистът просто добавя предварително създадени обекти на някакво място върху екрана. Ако програмистът има известни умения за работа с графична програма, като Paint, това е достатъчно за създаване на ефективен потребителски интерфейс.

 

Освен интегрирани среди, като допълнителни средства могат да се прилагат мениджъри на проекта, автоматически генератори на приложения и др.

Красимир Дойчев

В момента разглеждате олекотената мобилна версия на уебсайта. Към пълната версия.