Защо ни е това
В предишния урок видя, че програмата се пише на език за програмиране и после се превежда на машинен код. Но между „имам идея“ и „имам работеща програма“ има много повече работа — и много помощни програми, които я вършат вместо теб. Този урок е за тях.
Освен това ще подредим самата работа. Голяма програма не се пише на един дъх — тя се организира като проект.
Ключово
Програмистът не пише само код. Той минава през етапи (анализ, проектиране, разработване, документиране) и ползва набор от инструменти, събрани в една среда за програмиране.
Програмен проект
Проект
Множество от дейности с точно определени цел, начало и край, което трябва да доведе до получаване на очаквани резултати в рамките на зададено време и ресурси.
Програмният проект по нищо не се различава от който и да е друг проект — просто резултатът от него е програма. Ето кои са важните му характеристики:
- Полезен — решава проблем, който представлява интерес. Например електронно досие на ученик или информационна система за училищната библиотека.
- Целесъобразен — резултатите или не съществуват, или съществуват, но не са достъпни: не могат да се купят или купуването им не е оправдано икономически.
- Изисква работа в екип — няколко изпълнители разпределят и координират работата си. За управлението се определя ръководител на екипа. (В този учебник ще се ограничим с проекти по силите на един изпълнител.)
- Налага дисциплина — описани са изискванията към резултата и към процеса: в каква среда, с какви ресурси, в какъв срок. Ако дисциплината се наруши, частите не се „сглобяват“ или сроковете падат.
Етапите при разработване
Процесът на реализация на програмен проект минава през четири основни етапа (наричани още фази). Съвкупността им се нарича жизнен цикъл на проекта.
Анализ на задачата
Задачата се формулира от клиент, който обикновено не е специалист по програмиране и я описва с понятията на своята дейност. Затова първата стъпка е тя да се проучи и анализира. Проверява се дали вече има готови програмни решения за същата или подобна задача, кои функции изпълняват те и дали стигат на клиента. Ако не стигат — се формулират новите функции.
Тук се преценява и осъществимостта на проекта. Ако не е осъществим в исканите срокове, се формулират разумни подзадачи. Резултатът от етапа е Задание за разработка — документ, в който са фиксирани целта, функциите и очакваните резултати.
Проектиране
Разработва се структурата на програмата: от какви части ще е съставена, коя част коя функция реализира, как частите ще взаимодействат. Определя се какви данни ще се използват, кои идват от клиента и в какъв вид, и кои ще произведе програмата. Фиксира се интерфейсът с потребителя — графичен или буквено-цифров. Резултатът е Детайлно задание за разработка.
Разработване
Същинската програмистка работа: създава се потребителският интерфейс, написват се програмните части и се интегрират в програмно решение. Важен подетап е тестването, а то е два вида:
| Вид тестване | Кой го прави | Какво проверява |
|---|---|---|
| Вътрешно (прозрачно) | Програмистът, който е написал програмата | Тестови набори от данни, които минават през всяка част на програмата |
| Външно (непрозрачно) | Лице, което не познава подробностите от реализацията | Екстремални стойности, нерегламентирани входни данни, бързодействие, удобство |
Документиране
Документирането започва още със Заданието за разработка. След като програмата е създадена, към документацията се добавя Ръководство за потребителя — как се работи с интерфейса, как се стартират функциите, как се извеждат резултати.
Бележка
В този учебник основното внимание е върху етапа разработване. Но когато по-нататък правиш свой проект, ще минеш и през останалите три.
Инструментите на програмиста
В ерата на нетехнологичното програмиране програмистът пишел текста на програмата — изходния код — на хартия. После кодът се пренасял на перфолента или перфокарти, предавали се на техническия персонал и резултатът се получавал отпечатан на хартия (листинг). Всеки инструмент по-долу е стъпка встрани от този кошмар.
Текстов редактор
Първото голямо облекчение. Позволява текстът да се въведе от терминала във файл, да се променя и да се съхранява. Специализираните редактори за програми предлагат оцветяване на отделните части на програмата в различни цветове, подреждане на текста и подсказване за евентуални грешки.
Редактор за графичен интерфейс
Появява се с цветните монитори. Позволява прозорците и елементите в тях да се подреждат нагледно, вместо да се описват с код. Разчита на силно развити библиотеки от графични компоненти.
Транслация — компилатор и интерпретатор
Всяка програма трябва да се транслира, т.е. да се направи разбираема за компютъра. Двата основни подхода вече ги познаваш от предишния урок, но сега ще ги погледнем откъм инструментите:
- Компилаторът анализира операторите и заменя всеки от тях с парче програма на машинен език. Полученото се нарича обектен код. Той още не съдържа стандартните подпрограми, а само указания те да бъдат извикани.
- Свързващият редактор добавя нужните стандартни подпрограми към обектния код. Резултатът е изпълним код — той вече може да се зареди в паметта и да се изпълни.
- Интерпретаторът също анализира всеки оператор, но вместо да го превежда, настройва предварително подготвено парче машинен код и го изпълнява веднага. Ако един оператор се изпълни хиляда пъти, той се „превежда“ хиляда пъти.
Бележка
Има и междинни форми: програмата се превежда на универсален, машинно независим междинен език. Тогава за пренасяне върху нова платформа стига да се напише компилатор само за междинния език. Точно така работи C# — превежда се на междинен език, който после се изпълнява от .NET.
Дебъгер
Транслаторът улавя синтактичните грешки — неправилно изписан текст, разместени елементи, липсващи специални знаци. Но една програма може да се транслира успешно и въпреки това да е логически неправилна — да не дава искания резултат.
Дебъгерът (от англ. debug — „отстраняване на буболечки“) позволява програмата да се изпълни стъпка по стъпка и да се наблюдава какво се случва на всяка стъпка. Така се откриват местата, където са допуснати логически грешки.
Внимание
Не бъркай двата вида грешки. Ако компилаторът мълчи, това не значи, че програмата е вярна — значи само, че е граматически правилна. Логическата грешка се лови с тестови данни и с дебъгер.
Други инструменти
Спектърът се разширява непрекъснато. Струва си да се споменат:
- програми за поддържане на версии;
- програми за автоматично прекомпилиране само на частите, засегнати от промяна в модул, от който зависят;
- програми, подпомагащи документирането;
- програми за автоматизирано генериране на тестови данни.
Среда за програмиране и IDE
Система за програмиране
Съвкупност от инструментални програми, предназначени за създаване на нови програми.
Основните ѝ компоненти са изброените вече: текстов редактор, компилатор от един или няколко езика, свързващ редактор, дебъгер, плюс една или няколко библиотеки от стандартни програми.
Интегрирана среда за програмиране (IDE)
Система за програмиране, в която всички елементи са обединени в едно цяло — англ. Integrated Development Environment.
Първата IDE в света е средата Maestro I. В недалечното минало много се използвали интегрираните среди Turbo с буквено-цифров интерфейс за езиците C, C++ и Pascal. Днес популярни са CodeBlocks (C, C++, Fortran) и Eclipse (над 20 езика).
В този учебник ще работим с Visual Studio на Microsoft — средата, базирана на технологичната платформа .NET, която поддържа и C#. Илюстрациите са с безплатната ограничена версия Visual Studio 2019, но по-стари и по-нови версии също вършат работа: в поддържания от тях C# няма съществени разлики.
Упражнение
Задача 1. Ако искаш да инсталираш Visual Studio на своя компютър, намери адреса на безплатната версия с компилатор за C#, свали инсталационния файл и го изпълни като администратор. Нужни са около 1,2 GiB свободно място и инсталация на платформата .NET.
Задача 2. Провери работоспособността на средата: отвори меню start, напиши Visual Studio в полето за търсене и стартирай средата. Постави икона за бързо стартиране на лентата на задачите.
Какво трябва да запомниш
- Програмният проект минава през четири етапа: анализ на задачата, проектиране, разработване и документиране.
- Компилаторът дава обектен код; свързващият редактор го превръща в изпълним код, като добавя стандартните подпрограми.
- Синтактичните грешки ги хваща транслаторът. Логическите — само тестването и дебъгерът.
- Вътрешното тестване го прави авторът на програмата, външното — човек, който не познава реализацията.
- Съвкупността от инструменти е система за програмиране; когато са обединени в едно цяло, това е интегрирана среда (IDE).