телевизори. Конзоли. Проектори и аксесоари. Технологии. Цифрова телевизия

Общи характеристики c. §1 Обща информация за езика. Етапи на проектиране на програмата. Модели на жизнения цикъл на приложението. Поддържани програмни парадигми

1. Въведение

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

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

Като основа за обсъждане на проблемите на автоматичното програмиране ще вземем скорошната лекция на Shalyto A.A. и неговите статии за „програмиране“ към дефиницията на парадигмата за автоматично програмиране.

C/C++ Standard Library включва редица функции за четене и запис в конзолата (клавиатура и монитор). Тези функции четат и записват данни като обикновен поток от знаци.

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

Стандартната изходна функция printf()

Функцията printf() е стандартна изходна функция. Използвайки тази функция, можете да изведете на екрана на монитора низ от знаци, число, стойност на променлива...

Функцията printf() има прототип в stdio.h
int printf(char *контролен низ, ...);

Ако е успешен, printf() връща броя на отпечатаните знаци.

Контролният ред съдържа два типа информация: знаци, които се отпечатват директно на екрана, и спецификатори на формат, които указват как се отпечатват аргументите.

Функцията printf() е форматирана изходна функция. Това означава, че в параметрите на функцията е необходимо да посочите формата на данните, които ще бъдат изведени. Форматът на данните се определя от спецификатори на формат. Спецификаторът на формата започва със знак %, последван от код на формат.

Спецификатори на формат:

символ
цяло десетично число
%i цяло десетично число
%e десетично число във формата x.xx e+xx
%E десетично число във формата x.xx E+xx
%f
%F десетично число с плаваща запетая xx.xxxx
%g %f или %e, което от двете е по-кратко
%G %F или %E, което от двете е по-кратко
%o осмично число
символен низ
%u десетично число без знак
шестнадесетично число
шестнадесетично число
%% символ %
%p показалец
показалец

В допълнение към командите за форматиране могат да се прилагат модификатори l и h.

%ld печат дълго вътр
%hu печат кратък без подпис
%Lf дълъг двоен печат

В спецификатора на формата след символа % може да се посочи точността (брой цифри след десетичната запетая). Точността се задава, както следва: %.n<код формата>. Където n е броят на цифрите след десетичната запетая и<код формата>- един от кодовете, дадени по-горе.

Например, ако имаме променлива x=10.3563 от тип float и искаме да покажем нейната стойност с точност до 3 знака след десетичната запетая, тогава трябва да напишем:

printf("Променлива x = %.3f",x);

Резултат:
Променлива x = 10,356

Можете също така да посочите минималната ширина на полето, разпределено за печат. Ако редът или числото са по-големи от указаната ширина на полето, тогава редът или числото се отпечатват изцяло.

Например, ако напишете:

printf("%5d",20);

тогава резултатът ще бъде както следва:
20

Моля, обърнете внимание, че числото 20 не е отпечатано от самото начало на реда. Ако желаете неизползваните места на полето да бъдат запълнени с нули, тогава трябва да поставите символ 0 пред ширината на полето.

Например:

printf("%05d",20);

Резултат:
00020

В допълнение към спецификаторите на формата на данните контролният ред може да съдържа контролни знаци:

\b BS, отдолу
\f Нова страница, промяна на страницата
Нов ред, подаване на ред
\r Връщане на карета
\T Хоризонтална табулация
\v Вертикален раздел
\" Двойни кавички
\" апостроф
\\ Наклонена черта
\0 Нулев знак, нулев байт
\a Сигнал
Осмична константа
\xN Шестнадесетична константа
\? Въпросителен знак

Най-често ще използвате символа \n. С този контролен знак можете да отидете на нов ред. Вижте примерните програми и ще разберете всичко.

Примери за програми.

/* Пример 1 */
#включи

void main(void)
{
int a,b,c; // Декларация на променливи a,b,c
а=5;
b=6;
c=9;
printf("a=%d, b=%d, c=%d",a,b,c);
}

Резултат от програмата:
a=5, b=6, c=9

/* Пример 2 */
#включи

void main(void)
{
float x,y,z;

X=10,5;
y=130.67;
z=54;

Printf("Координати на обект: x:%.2f, y:%.2f, z:%.2f", x, y, z);
}

Резултат от програмата:
Координати на обекта: x:10.50, y:130.67, z:54.00

/* Пример 3 */
#включи

void main()
{
int x;

X=5;
printf("x=%d", x*2);
}

Резултат от програмата:
х=10

/* Пример 4 */
#включи

void main(void)
{
printf("\"Текст в кавички\"");
printf("\nСъдържание на кислород: 100%%");
}

Резултат от програмата:
"Текст в кавички"
Съдържание на кислород: 100%

/* Пример 5 */
#включи

void main(void)
{
int a;

А=11; // 11 в десетична система е равно на b в шестнадесетична
printf("a-dec=%d, a-hex=%X",a,a);
}

Резултат от програмата:
a-dec=11, a-hex=b

/* Пример 6 */
#включи

void main(void)
{
char ch1,ch2,ch3;

Ch1="A";
ch2="B";
ch3="C";

Printf("%c%c%c",ch1,ch2,ch3);
}

Резултат от програмата:
ABC

/* Пример 7 */
#включи

void main(void)
{
char *str="Моят низ.";

Printf("Това е %s",str);
}

Резултат от програмата:
Това е моята линия.

/* Пример 8 */
#включи

void main(void)
{
printf("Здравей!\n"); // След отпечатването ще има преход към нов ред - \n
printf("Казвам се Павел."); // Това ще бъде отпечатано на нов ред
}

Резултат от програмата:
Здравейте!
Казвам се Павел.

Стандартната функция за въвеждане scanf()

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

Функцията scanf() има следния прототип в stdio.h:
int scanf(char *контролен низ);

Функцията връща броя променливи, на които е присвоена стойност.

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

Спецификатори на формат:

Когато въвеждате низ с помощта на функцията scanf() (спецификатор на формат %s), низът се въвежда преди първия интервал!! тези. ако въведете низа "Hello world!" използвайки функцията scanf().


scanf("%s",str);

тогава след въвеждане на резултантния низ, който ще се съхранява в масива str, ще се състои от една дума „Hello“. ФУНКЦИЯТА ВЪВЕЖДА НИЗ ПРЕДИ ПЪРВИЯ ИНТЕРВАЛ! Ако искате да въведете низове с интервали, използвайте функцията

char *получава (char *buf);

С функцията gets() можете да въвеждате цели низове. Функцията gets() чете символи от клавиатурата, докато се появи символът за нов ред (\n). Самият знак за нов ред се появява, когато натиснете enter. Функцията връща указател към buf. buf - буфер (памет) за входния низ.

Въпреки че gets() не е темата на тази статия, нека напишем примерна програма, която ви позволява да въведете цял ред от клавиатурата и да го изведете на екрана.

#включи

void main(void)
{
char буфер; // масив (буфер) за входния низ

Получава (буфер); // въведете ред и натиснете enter
printf("%s",буфер); // изведе въведения низ на екрана
}

Още една важна забележка! За да въведете данни с помощта на функцията scanf(), тя трябва да предава адреси на променливи като параметри, а не самите променливи. За да получите адреса на променлива, трябва да предхождате името на променливата с & (амперсанд). Знакът & означава вземане на адреса.

Какво означава адрес? Ще се опитам да обясня. В програмата имаме променлива. Променливата съхранява стойността си в паметта на компютъра. Така че това е адресът, който получаваме с помощта & е адресът в паметта на компютъра, където се съхранява стойността на променливата.

Нека да разгледаме примерна програма, която ни показва как да използваме &

#включи

void main(void)
{
int x;

Printf("Въведете променлива x:");
scanf("%d",&x);
printf("Променлива x=%d",x);
}

Сега нека се върнем към контролния ред на функцията scanf(). Отново:

int scanf(char *контролен низ);

Символът за интервал в контролния низ командва един или повече интервали да бъдат пропуснати във входния поток. В допълнение към интервала може да се възприеме символ за табулация или нов ред. Ненулев знак показва, че знакът е прочетен и изхвърлен.

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

Например:

scanf("%d%*c%d",&i,&j);

въвеждането на 50+20 ще зададе променлива i на 50, променлива j на 20, а символът + ще бъде прочетен и игнориран.

Командата за форматиране може да укаже най-голямата ширина на полето за четене.

Например:

scanf("%5s",str);

показва необходимостта от четене на първите 5 знака от входния поток. Ако въведете 1234567890ABC, масивът str ще съдържа само 12345, останалите знаци ще бъдат игнорирани. Разделители: интервал, табулация и нов ред - при въвеждане на символ те се третират като всички останали знаци.

Ако се появят други знаци в контролния низ, те са предназначени да идентифицират и пропуснат съответния знак. Поток от символи 10plus20 оператор

scanf("%dplus%d",&x,&y);

ще присвои стойността 10 на променливата x, стойността 20 на променливата y и ще пропусне знаците плюс, защото се срещат в контролния низ.

Една от мощните характеристики на функцията scanf() е нейната способност да указва сканиран набор. Наборът за търсене дефинира набора от знаци, с които ще бъдат сравнени знаците, прочетени от функцията scanf(). Функцията scanf() чете знаци, стига да се появяват в набора за търсене. Веднага щом въведеният знак не бъде намерен в набора за търсене, функцията scanf() се премества към следващия спецификатор на формат. Наборът за търсене се определя от списък със знаци, затворени в квадратни скоби. Знакът % се поставя преди отварящата скоба. Нека да разгледаме това с пример.

#включи

void main(void)
{
char str1, str2;
scanf("%%s", str1, str2);
printf("\n%s\n%s",str1,str2);
}
Нека въведем набор от знаци:
12345abcdefg456

Програмата ще покаже на екрана:
12345
abcdefg456

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

scanf("%10", str1);

Можете също да дефинирате знаци, които не са включени в набора за търсене. Първият от тези знаци се предхожда от ^. Много знаци правят разлика между малки и главни букви.

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

char str; // масив от 80 знака
scanf("%s",str);

Имайте предвид, че str не се предхожда от &. Това се прави, защото str е масив и името на масива - str е указател към първия елемент от масива. Следователно знакът & не трябва да се използва. Вече предаваме адреса на функцията scanf(). Е, просто казано, str е адресът в паметта на компютъра, където ще се съхранява стойността на първия елемент от масива.

Примери за програми.

Пример 1.
Тази програма показва заявката "На колко години си?:" и чака въвеждане на данни. Ако например въведете числото 20, програмата ще покаже реда „Вие сте на 20 години.“. Когато извикваме функцията scanf(), поставяме знак & пред променливата възраст, тъй като функцията scanf() се нуждае от адреси на променливи. Функцията scanf() ще запише въведената стойност на посочения адрес. В нашия случай въведената стойност 20 ще бъде записана на адреса на променливата възраст.

/* Пример 1 */

#включи

void main(void)
{
int възраст;

Printf("\nНа колко години си?:");
scanf("%d",&възраст);
printf("Вие сте на %d години.", възраст);
}

Пример 2.
Програма калкулатор. Този калкулатор може да събира само числа. Когато въведете 100+34, програмата ще изведе резултата: 100+34=134.

/* Пример 2 */

#включи

void main(void)
{
int x, y;

Printf("\nКалкулатор:");
scanf("%d+%d", &x, &y);
printf("\n%d+%d=%d", x, y, x+y);
}

Пример 3.
Този пример показва как да зададете ширината на полето за четене. В нашия пример ширината на полето е пет знака. Ако въведете низ с голям брой знаци, всички знаци след 5-ия ще бъдат отхвърлени. Забележете извикването на функцията scanf(). Знакът & не предшества името на масива, защото името на масива е адресът на първия елемент от масива.

/* Пример 3 */

#включи

void main(void)
{
char име;

Printf("\nВъведете вашето потребителско име (не повече от 5 знака):");
scanf("%5s", име);
printf("\nВъведохте %s", име);
}

Пример 4.
Последният пример в тази статия показва как може да се използва набор за търсене. След стартиране на програмата въведете число от 2 до 5.

/* Пример 4 */

#включи

void main(void)
{
въглен бал;

Printf("Вашата оценка е 2,3,4,5:");
scanf("%", &bal);
printf("\nРейтинг %c", bal);
}

Изучаване на основите и тънкостите на езика за програмиране C++. Учебник с практически задачи и тестове. Искаш ли да се научиш да програмираш? Тогава сте на правилното място - тук е безплатно обучение по програмиране. Независимо дали имате опит или не, тези уроци по програмиране ще ви помогнат да започнете да създавате, компилирате и отстранявате грешки в C++ програми в различни среди за разработка: Visual Studio, Code::Blocks, Xcode или Eclipse.

Много примери и подробни обяснения. Перфектен както за начинаещи (манекени), така и за по-напреднали. Всичко е обяснено от нулата до най-малките подробности. Тези уроци (200+) ще ви дадат добра база/фундамент в разбирането на програмирането не само на C++, но и на други езици за програмиране. И то абсолютно безплатно!

Също така е обхванато поетапното създаване на игра в C++, графичната библиотека SFML и повече от 50 задачи за тестване на вашите умения и знания в C++. Допълнителен бонус е.

За повторно публикуване +20 към кармата и моята благодарност!

Глава № 0. Въведение. Начало на работа

Глава №1. Основи на C++

Глава № 2. Променливи и основни типове данни в C++

Глава №3. Оператори в C++

Глава № 4. Обхват и други типове променливи в C++

Глава № 5. Редът, в който кодът се изпълнява в програмата. Цикли и разклонения в C++

C++ (да се чете c-plus-plus) е компилиран, статично типизиран език за програмиране с общо предназначение, в който можете да създавате програми с всякакво ниво на сложност.
Повече от 20 години този език е сред трите най-популярни и търсени езици за програмиране. (Можете да проверите това, като посетите уебсайта на TIOBE).
Езикът възниква в началото на 80-те години на миналия век, когато служителят на Bell Labs Björn Stroustrup предлага редица подобрения на езика C за собствените си нужди.

Bjarne Stroustrup – създател на езика C++

Straustrup реши да разшири езика C с възможностите, открити в езика Simula. C, който е основният език на системата UNIX, на която работят компютрите Bell, е бърз, богат на функции и преносим. Stroustrup добави възможност за работа с класове и обекти. В резултат на това практическите проблеми с моделирането се оказаха лесни за решаване както по отношение на времето за разработка (благодарение на използването на подобни на Simula класове), така и по отношение на времето за изчисление (благодарение на скоростта на C).
Ето как самият разработчик на езика говори за това:



През 1998 г. първият езиков стандарт, известен като C++98, беше публикуван от комитет по стандартизация. C++ продължава да се развива, за да отговори на днешните изисквания. Една от групите, които разработват езика C++ и представят предложения за подобряването му на Комитета по стандартите на C++, е Увеличете, който се занимава, наред с други неща, с подобряване на възможностите на езика чрез добавяне на функции за метапрограмиране към него. Последният стандарт е пуснат през 2017 г. и се нарича C++17. Следващият стандарт няма да закъснее и се очаква да се появи през 2020 г.
Никой не притежава правата върху езика C++; той е безплатен. През март 2016 г. в Русия беше създадена работна група WP21 C++. Групата беше организирана, за да събира предложения за стандарта C++, да ги изпраща на комисия и да ги защитава на общи събрания на Международната организация по стандартизация.
C++ е многопарадигмен език (от думата paradigm - стил на писане на компютърни програми), включващ широк набор от различни програмни стилове и технологии. Често се класифицира като обектно-ориентиран език, но строго погледнато, това не е така. По време на работния процес разработчикът получава абсолютна свобода при избора на инструменти, така че проблемът, решен с помощта на определен подход, да бъде решен възможно най-ефективно. С други думи, C++ не принуждава програмиста да се придържа само към един стил на разработка на програма (например обектно-ориентиран).
C++ има богата стандартна библиотека, която включва общи контейнери и алгоритми, I/O, регулярни изрази, многонишкова поддръжка и други функции. C++ е повлиял на много езици за програмиране, включително: Java, C#, D. Тъй като C++ принадлежи към семейство езици, базирани на синтаксиса на езика C, можете лесно да овладеете други езици за програмиране от това семейство: JavaScript, PHP , Perl, Objective-C и много други. и т.н., включително самия език-майка - C. ()
По време на своето съществуване езикът C++ се е сдобил с устойчиви митове, които лесно се опровергават (вижте тук: Част 1 и Част 2)

История на изданието на езика и стандартите

1983

Създателят на езика е Бьорн Страуструп, служител на Bell Labs, представи ранна версия на езика C++ („C с класове“)

1985

Първата търговска версия на C++, езикът приема съвременното си име

1986

Издаване на първото издание на The C++ Programming Language - книга, посветена на C++, написана от Björn Stroustrup

1998

Международният стандарт за езика C++ е ратифициран: ISO/IEC 14882:1998 „Стандарт за езика за програмиране C++“

2003
2005

Технически доклад на библиотеката 1 (TR1) е издаден. Въпреки че не е официално част от стандарта, докладът описва разширения към стандартната библиотека, които трябва да бъдат включени в следващата версия на езика C++.

2011

Пускане на нов стандарт – C++11 или ISO/IEC 14882:2011; новият стандарт включва допълнения към езиковото ядро ​​и разширяване на стандартната библиотека, включително по-голямата част от TR1

2014

Пускане на стандарта C++14 („Международен стандарт ISO/IEC 14882:2014(E) език за програмиране C++”); C++14 може да се разглежда като малко разширение над C++11, съдържащо предимно корекции на грешки и незначителни подобрения

2017

Пускането на нов стандарт – C++1z (C++17). Този стандарт въведе много промени и допълнения. Например STD включва библиотеки на стандарта C11, файлова система, базирана на boost::filesystem, и по-голямата част от експерименталната TS I библиотека.

2020

C++20 е неофициалното име на стандарта ISO/IEC за езика за програмиране C++, който се очаква да последва C++17. Проект на стандарт N4800.

Философия на C++

В книгата си The Design and Evolution of C++ (2007), Björn Stroustrup описва принципите, които следва при проектирането на C++ (съкратено):

  • Вземете език с общо предназначение със статични типове данни, ефективността и преносимостта на езика C.
  • Директно и цялостно поддържа различни стилове на програмиране.
  • Дайте на програмиста свобода на избор, дори ако това му дава възможност да избере грешно.
  • Поддържайте възможно най-голяма съвместимост със C, като по този начин правите възможен лесен преход от C програмиране.
  • Избягвайте несъответствия между C и C++: всяка конструкция, която е валидна и на двата езика, трябва да означава едно и също нещо във всеки от тях и да води до едно и също поведение на програмата.
  • Избягвайте функции, които зависят от платформата или не са универсални.
  • „Не плащайте за това, което не използвате“ - никоя езикова функция не трябва да води до намаляване на производителността на програми, които не я използват.
  • Не изисквайте прекалено сложна среда за програмиране.

C и C++

Синтаксисът на C++ е наследен от езика C. Въпреки че формално един от принципите на C++ остава поддържането на съвместимост с езика C, всъщност стандартизационните групи за тези езици не взаимодействат и промените, които правят, не само не корелират, но често фундаментално си противоречат идеологически. По този начин елементите, които новите C стандарти добавят към ядрото, са в стандартните елементи на C++ на стандартната библиотека и изобщо не са в ядрото, например динамични масиви, масиви с фиксирани граници, съоръжения за паралелна обработка. Според Страуструп комбинирането на развитието на тези два езика би било от голяма полза, но е малко вероятно да бъде възможно по политически причини. Така че практическата съвместимост между C и C++ постепенно ще бъде загубена.
В този пример, в зависимост от използвания компилатор, ще бъде изведен или „C++“, или „C“:

Програма 9.1

#включи int main() ( printf("%s\n", (sizeof("a") == sizeof(char)) ? "C++" : "C"); return 0; )

Това се дължи на факта, че символните константи в C са от тип int, а в C++ са от тип char, но размерите на тези типове са различни.

Модели на жизнения цикъл на приложението

Жизнен цикълсофтуерът е период от време, който започва от момента на вземане на решение за необходимостта от създаване на софтуерен продукт и завършва в момента, в който той бъде напълно изтеглен от експлоатация. Този цикъл е процес на изграждане и разработване на софтуер. Има няколко модела на жизнения цикъл.
Каскаден моделжизнен цикъл (английски водопаден модел) е предложен през 1970 г. от Уинстън Ройс. Той предвижда последователно изпълнение на всички етапи на проекта в строго фиксиран ред. Преходът към следващия етап означава пълно завършване на работата на предишния етап. Изискванията, определени на етапа на формиране на изискванията, са строго документирани под формата на технически спецификации и се записват за цялото развитие на проекта. Всеки етап завършва с издаването на пълен набор от документация, достатъчна да позволи разработката да бъде продължена от друг екип за разработка.
Етапи на проекта според модела на водопада:

  1. Формиране на изисквания;
  2. Дизайн;
  3. внедряване;
  4. Тестване;
  5. внедряване;
  6. Експлоатация и поддръжка.

При каскадния модел преходът от една фаза на проекта към друга предполага, че резултатът от предишната фаза е напълно правилен. При големи проекти това е почти невъзможно да се постигне. Следователно този модел е подходящ само за разработване на малък проект. (Самият У. Ройс не се придържа към този модел и използва итеративен модел).
Итеративен модел
Алтернатива на каскадния модел е моделът на итеративно и инкрементално развитие (IID), получен от Т. Гилб през 70-те години. име на еволюционния модел. Моделът IID включва разделяне на жизнения цикъл на проекта в поредица от итерации, всяка от които прилича на „мини-проект“, включително всички процеси на разработка, приложени към създаването на по-малки части от функционалност в сравнение с проекта като цяло. Целта на всяка итерация е да се получи работеща версия на софтуерната система, включително функционалност, дефинирана от интегрираното съдържание на всички предишни и текущи итерации. Резултатът от последната итерация съдържа цялата необходима функционалност на продукта. Така със завършването на всяка итерация продуктът получава прираст - прираст - към своите възможности, които следователно се развиват еволюционно.


В повечето съвременни методологии за разработка се прилагат различни варианти на итеративния подход:

Процес на разработка - рационален унифициран процес (RUP)

Рационален унифициран процес (RUP)(rational unified process) е методология за разработка на софтуер, поддържана от Rational Software (IBM). Методологията дава препоръки за всички етапи на разработка: от бизнес моделиране до тестване и въвеждане в експлоатация на готовата програма. Unified Modeling Language (UML) се използва като език за моделиране.
Пълният жизнен цикъл на разработване на продукта се състои от четири фази, всяка от които включва една или повече итерации.

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

  • Изясняване
  • Изисквания за документиране. Проектиране, внедряване и тестване на изпълнима архитектура. Уточняване на срокове и разходи. Намаляване на ключови рискове. Успешното завършване на фазата на разработка означава достигане на етапа на жизнения цикъл на архитектурата.

  • Строителство
  • Във фазата „Изграждане“ се изпълнява по-голямата част от функционалността на продукта: дизайнът на приложението е завършен, изходният код е написан. Фазата на изграждане завършва с първото външно издание на системата и етапа на първоначалната оперативна способност.

  • Въведение
  • Във фазата „Внедряване“ се създава окончателната версия на продукта и се прехвърля от разработчика към клиента. Това включва програма за бета тестване, обучение на потребителите и определяне на качеството на продукта. В случай, че качеството не отговаря на очакванията на потребителя или критериите, зададени в началната фаза, фазата на внедряване се повтаря отново. Постигането на всички цели означава постигане на крайъгълен камък Пускане на продукта и завършване на пълния цикъл на разработка.



"Информационни технологии. Системно и софтуерно инженерство. Процеси на жизнения цикъл на софтуера". Този стандарт е приет от Федералната агенция за техническо регулиране и метрология на Руската федерация и е подобен на международния стандарт ISO/IEC 12207:2008. Този стандарт установява обща структура на процесите на жизнения цикъл на софтуера, които могат да бъдат следвани в софтуерната индустрия. Стандартът не предлага конкретен модел на жизнения цикъл. Неговите разпоредби са общи за всички модели на жизнения цикъл, методи и технологии за създаване на софтуер. Той описва структурата на процесите от жизнения цикъл, без да уточнява как да се изпълняват или изпълняват дейностите и задачите, включени в тези процеси.

Презентация към урока
Теми за съобщения
  • Фондация за свободен софтуер (FSF)
  • Лицензи за безплатен софтуер
  • Безплатен софтуер и отворен код
  • История на развитието на езиците за програмиране
  • Историята на езика C. C и C++
  • История
  • Критика на C++
  • История на UNIX
  • Спирален модел на жизнения цикъл на софтуера
  • UML (унифициран език за моделиране)
  • Microsoft Solutions Framework
  • IDE за програмиране на C/C++ под Windows
  • C/C++ компилатори
  • Създаване на конзолно приложение в Windows
Въпроси
  1. Защо водопадният модел на разработка на софтуер не се използва в големи проекти?
  2. Каква е разликата между водопада и итеративните модели на развитие?
  3. Избройте етапите на разработка на софтуер в методологията на Rational Unified Process (RUP).

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

Видове програми

За да комуникираме ефективно с компютъра, което искаме, има широк набор от езици за програмиране.

В зависимост от вида на проекта има много фактори, които трябва да се вземат предвид при избора на език за програмиране. Ето списък на най-забележителните фактори:

Компилация, интерпретация и JIT компилация

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

Интерпретираните езици за програмиране се четат от програма, наречена интерпретатор, и се изпълняват от същата програма. Интерпретираните езици за програмиране могат да работят на различни операционни системи, точно като интерпретатор, и дори нямат дълго време за компилиране. Но програмите, написани с помощта на интерпретирани езици, обикновено работят много по-бавно от еквивалентните, компилирани програми.

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

Високи или ниски нива на програмиране

Езиците от ниско ниво работят предимно директно с хардуера и следователно са най-подходящи за писане на драйвери на устройства. Драйверите са програми, които контролират хардуера и имат директен достъп до него. Въпреки това, програма, написана на език от ниско ниво, обикновено е трудна за пренасяне към други платформи. И следователно за всяка ОС едно и също устройство идва с различни драйвери. Езиците за програмиране на ниско ниво почти винаги се компилират.

В езиците от високо ниво целият фокус е върху концепцията за език. Това означава, че такъв език за програмиране трябва да бъде лесен за разбиране, като например представяне на данни като масиви, низове, обекти и т.н. Езикът от високо ниво обикновено е по-лесен за разбиране от език от ниско ниво. И като правило разработването на програма на език от високо ниво е много по-лесно и по-бързо, отколкото на език от ниско ниво. Както можете да видите, различните нива на програмиране са предназначени за напълно различни задачи и не трябва да сравнявате функционалността на езиците на различни нива, безсмислено е.

Език за програмиране Системи с типове данни

За всеки език за програмиране има спецификация, която определя различни правила, които езиците за програмиране трябва да следват. Някои езици нямат типове данни, така че това не се отнася за тях. Въпреки това, повечето езици (включително C++) имат типове данни, така че тази информация ще ви бъде полезна.

Силна или слаба система от типове данни

Слабата входна система не налага никакви ограничения; програмистът трябва да следи това. Когато казвам „слаба система от данни“, имам предвид, че език с такава система от данни не регулира стриктно наличните преобразувания на типове данни. Например, ако подадете низ или символ вместо число към функцията за умножение, езиците за програмиране, които не са строго въведени, ще изпълнят такъв код, въпреки че резултатът от умножението губи всякакво значение, тъй като низът не може да бъде умножен по номер. Освен това резултатът от извършването на това безсмислено умножение ще бъде непредвидим. Ако езикът за програмиране е строго въведен, тогава на етапа на компилация преводачът ще съобщи за грешка и ще спре процеса на изграждане на проекта. Например,

// примерна програма в C++ #include използване на пространство от имена std; int main())( char string = "example"; int number = 5; cout<< string * number << endl; // умножаем строку на число }

В резултат на това компилаторът ще докладва грешка:

грешка: невалидни операнди от типове „char“ и „int“ към двоичен „operator*“

Ще се опитаме да направим същото на език за програмиране, който не е строго типизиран - php. Моля, обърнете внимание, че дори когато декларирате променливи, не е необходимо да указвате типа на данните.

Резултатът от изпълнението на този код ще бъде нула. Няма да възникне грешка, въпреки че изглежда, че не можете да умножите низ по число. Но в PHP всичко е възможно. Езиковият компилатор на PHP няма да докладва грешка, скриптът ще работи и дори ще произведе резултата и ако нашата програма се състои от 1000 реда код, тогава ще ни бъде трудно да открием тази грешка. Това е ярък пример за език за програмиране със „слаба система от типове данни“, тоест предотвратяването на такива абсурдни операции лежи изцяло на раменете на програмиста.

Дефиниран или недефиниран тип данни

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

Статичен или динамичен тип данни

Ако езикът е статично въведен, тогава компилаторът/интерпретаторът извършва проверка на типа веднъж преди процеса на компилация/интерпретация. Ако типът данни е динамичен, тогава типовете данни се проверяват по време на изпълнение.

Система за безопасен или несигурен тип данни

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

Тези фактори могат да характеризират един или няколко езика за програмиране.

Поддържани програмни парадигми

Парадигмите на програмиране са методологии или начини за програмиране, които езикът за програмиране поддържа. Ето списък на основните парадигми:

Декларативна парадигма

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

Функционална парадигма

Функционалното програмиране е подгрупа на декларативното програмиране, което се опитва да реши проблеми по отношение на математически уравнения и функции. Функционалното програмиране третира променливите и обектите като данни, които не се споделят, за разлика от императивните езици.

Обобщена парадигма

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

Императивна парадигма

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

Структурна парадигма

Езиците за структурно програмиране имат за цел да предоставят някаква форма на код - йерархична структура. Когато структурата на кода е ясно видима, редът, в който се изпълняват изразите, става интуитивно ясен. Такива езици обикновено не насърчават „скачането“ от една част на кода към друга, например операторът goto, който всички знаем, който е дефиниран в езиците C и C++.

Процедурна парадигма

Процедурният език за програмиране се отнася до структурирани езици за програмиране, които поддържат концепцията за процедура или подпрограма.

Обектно-ориентирана парадигма

Обектно-ориентираното програмиране (понякога съкратено OOP) е подмножество от структурирано програмиране, което изразява програмите по отношение на "обекти". Тази парадигма позволява кодът да се използва повторно и този подход е доста лесен за разбиране.

Стандартизация

Езиците имат ли официален стандарт? Стандартизацията е много важна, за да се гарантира безконфликтно разбиране на програмата от различни компилатори/интерпретатори. Някои езици са стандартизирани от Американския национален институт по стандартизация (ANSI), други са стандартизирани от Международната организация по стандартизация (ISO). Всички езици за програмиране трябва да бъдат стандартизирани, в противен случай няма да има споразумение за това кое е правилно и неправилно в синтаксиса.

Нека характеризираме езика за програмиране C++

Сега, след като разгледахме основните характеристики на езиците за програмиране, нека да определим на кои фактори отговаря езикът за програмиране C++.

C++ е стандартизиран по ISO език за програмиране.

Известно време C++ нямаше официален стандарт, но от 1998 г. C++ беше стандартизиран от комитет на ISO.

C++ компилиран език.

C++ се компилира директно в машинен код, което го прави един от най-бързите езици в света.

C++ е строго типизиран език.

C++ предполага, че програмистът знае какво прави и позволява невероятен брой възможности, ограничени само от въображението.

C++ поддържа статични и динамични типове данни.

По този начин проверката на типа данни може да се извърши по време на компилиране или по време на изпълнение. И това още веднъж доказва гъвкавостта на C++.

C++ поддържа много парадигми.

C++ поддържа процедурни, генерични и обектно-ориентирани парадигми за програмиране, както и много други парадигми.

C++ е преносим език за програмиране.

Като един от най-често използваните езици в света и като отворен език, C++ има широк набор от компилатори, които работят на различни платформи. Кодът на стандартната библиотека на C++ ще работи на много платформи.

C++ е напълно съвместим с езика C

В C++ можете да използвате C библиотеки и те ще работят правилно.



Свързани публикации