Інтернет Windows Android

Adventik - Полносервісное digital-агентство. Історія мови сі Мова ci

C ++ компільований мова програмування загального призначення, поєднує властивості як високорівневих, так і низькорівневих мов програмування. У порівнянні з його попередником, мовою програмування Сі, найбільшу увагу приділено підтримці об'єктно-орієнтованого і узагальненого програмування. Назва «мову програмування C ++» походить від мови програмування C, в якому унарний оператор ++ позначає інкремент змінної.

Мова програмування C ++ широко використовується для розробки програмного забезпечення. А саме, створення різноманітних прикладних програм, розробка операційних систем, драйверів пристроїв, а також відео ігор і багато іншого. Він був створений на початку 1980-х років, Бьyoрном Страуструпом. Він придумав ряд удосконалень до мови програмування C, для власних потреб. тобто з самого початку не планувалося створення мови програмування С ++.

Він підтримує такі парадигми програмування, як процедурне програмування, об'єктно-орієнтоване програмування, узагальнене програмування, забезпечує модульність, роздільну компіляцію, обробку винятків, абстракцію даних, оголошення типів (класів) об'єктів, віртуальні функції.

Ім'я мови, вийшло в підсумку, походить від оператора унарна Постфіксний инкремента C ++ (збільшення значення змінної на одиницю). Ім'я C + не було використано тому, що є синтаксичної помилкою в C і, крім того, це ім'я було зайнято іншою мовою. Мова також був названий D, оскільки «є розширенням C і не намагається усувати проблеми шляхом видалення елементів C».

Переваги мови:

1. Масштабованість. Мовою C ++ розробляють програми для найрізноманітніших платформ і систем.

2. Можливість роботи на низькому рівні з пам'яттю, адресами, портами.

3. Можливість створення узагальнених алгоритмів для різних типів даних, їх спеціалізація, і обчислення на етапі компіляції, використовуючи шаблони.

4. Кросплатформеність. Доступні компілятори для великої кількості платформ, на мові C ++ розробляють програми для найрізноманітніших платформ і систем.

5. Ефективність. Мова спроектований так, щоб дати програмісту максимальний контроль над усіма аспектами структури і порядку виконання програми.

Недоліки мови:

1. Наявність безлічі можливостей, які порушують принципи тіпобезопасності призводить до того, що в С ++ програми можуть легко закрастися важковловима помилка.

2. Погана підтримка модульності. Підключення інтерфейсу зовнішнього модуля через препроцесорну вставку заголовки (#include) серйозно уповільнює компіляцію, при підключенні великої кількості модулів.

3. Мова C ++ є складним для вивчення і для компіляції.

4. Деякі перетворення типів неінтуітівнимі. Зокрема, операція над беззнаковим і знаковим числами видає беззнаковий результат.

5. Деякі вважають недоліком мови C ++ відсутність вбудованої системи збірки сміття. З іншого боку, в C ++ є достатньо коштів, що дозволяють майже виключити використання небезпечних покажчиків, немає принципових проблем і в реалізації і використанні збірки сміття (на рівні бібліотек, а не мови). Відсутність вбудованої збірки сміття дозволяє користувачеві самому вибрати стратегію управління ресурсами.

Мова програмування C ++

Останнє оновлення: 28.08.2017

Мова програмування С ++ являє високорівнева компільований мова програмування загального призначення зі статичної типізацією, який підходить для створення самих різних додатків. На сьогоднішній день С ++ є одним з найпопулярніших і поширених мов.

Своїм корінням він йде в мову Сі, який був розроблений в 1969-1973 роках в компанії Bell Labs програмістом Деннісом Рітчі (Dennis Ritchie). На початку 1980-х років данський програміст Бйорн Страуструп (Bjarne Stroustrup), який в той час працював в компанії Bell Labs, розробив С ++ як розширення до мови Сі. Фактично спочатку C ++ просто доповнював мову Сі деякими можливостями об'єктно-орієнтованого програмування. І тому сам Страуструп спочатку називав його як "C with classes" ( "Сі з класами").

Згодом новий мова стала набирати популярність. У нього були додані нові можливості, які робили його не просто доповненням до Сі, а зовсім новою мовою програмування. У підсумку "Сі з класами" був перейменований в С ++. І з тих по обидві мови стали розвиватися незалежно один від одного.

С ++ є потужним мовою, успадкувавши від Сі багаті можливості по роботі з пам'яттю. Тому нерідко С ++ знаходить своє застосування в системному програмуванні, зокрема, при створенні операційних систем, драйверів, різних утиліт, антивірусів і т.д. До слова сказати, ОС Windows здебільшого написана на С ++. Але тільки системним програмуванням застосування даного мови не обмежується. С ++ можна використовувати в програмах будь-якого рівня, де важливі швидкість роботи і продуктивність. Нерідко він застосовується для створення графічних додатків, різних прикладних програм. Також особливо часто його використовують для створення ігор з багатою насиченою візуалізацією. Крім того, останнім часом набирає хід мобільний напрямок, де С ++ теж знайшов своє застосування. І навіть в веб-розробці також можна використовувати С ++ для створення веб-додатків або якихось допоміжних сервісів, які обслуговують веб-додатки. Загалом С ++ - мову широкого користування, на якому можна створювати практично будь-які види програм.

С ++ є компільовані мовою, а це значить, що компілятор транслює вихідний код на С ++ в виконуваний файл, який містить набір машинних інструкцій. Але різні платформи мають свої особливості, тому скомпільовані програми можна просто перенести з однієї платформи на іншу і там вже запустити. Однак на рівні вихідного коду програми на С ++ по більшою мірою володіють переносимість, якщо не використовуються якісь специфічні для поточної ос функції. А наявність компіляторів, бібліотек та інструментів розробки майже під всі поширені платформи дозволяє компілювати один і той же вихідний код на С ++ в додатки під ці платформи.

На відміну від Сі мову C ++ дозволяє писати програми в об'єктно-орієнтованому стилі, представляючи програму як сукупність взаємодіючих між собою класів і об'єктів. Що спрощує створення великих додатків.

Основні етапи розвитку

У 1979-80 роках Бйорн Страуструп розробив розширення до мови Сі - "Сі з класами". У 1983 мова була перейменований в С ++.

У 1985 році була випущена перша комерційна версія мови С ++, а також перше видання книги "Мови програмування C ++", яка представляла перший опис цієї мови при відсутності офіційного стандарту.

У 1989 була випущена нова версія мови C ++ 2.0, яка включала ряд нових можливостей. Після цього мова розвивалася відносно повільно аж до 2011 року. Але при цьому в 1998 році була зроблена перша спроба по стандартизації мови організацією ISO (International Organiztion for Standartization). Перший стандарт отримав назву ISO / IEC 14882: 1998 або скорочено С ++ 98. Надалі в 2003 була видана нова версія стандарту C ++ 03.

У 2011 році був виданий новий стандарт C ++ 11, який містив безліч додатків і збагачував мову С ++ великим числом нових функціональних можливостей. Після цього в 2014 році було випущено невеликий додаток до стандарту, відоме також як C ++ 14. І ще один ключовий реліз мови намічений на 2017.

Компілятори та середовища розробки

Для розробки програм на С ++ необхідний компілятор - він транслює вихідний код на мові С ++ в виконуваний файл, який потім можна запускати. Але зараз є дуже багато різних компіляторів. Вони можуть відрізнятися по різних аспектів, зокрема, щодо реалізації стандартів. Базовий список компіляторів для З ++ можна подивитися в вікіпедії. Рекомендується для розробки вибирати ті компілятори, які розвиваються і реалізують всі останні стандарти. Так, протягом усього керівництва переважно буде використовуватися вільно розповсюджуваний компілятор g ++, розроблений в рамках проекту GNU.

Також для створення програм можна використовувати інтегровані середовища розробки IDE, такі як Visual Studio, Netbeans, Eclipse, Qt і т.д.

Завдяки чому склався такий статус мови З? Історично ця мова невіддільний від операційної системи Unix, яка в наші дні переживає своє друге народження. 60-і роки були епохою становлення операційних систем і мов програмування високого рівня. У той період для кожного типу комп'ютерів незалежно розроблялися ОС і компілятори, а нерідко навіть свої мови програмування (згадаємо, наприклад, PL / I). У той же час, спільність виникають при цьому проблем вже стала очевидною. Відповіддю на усвідомлення цієї спільності стала спроба створити універсальну мобільну операційну систему, а для цього знадобився не менше універсальний і мобільний мову програмування. Такою мовою став З, а Unix стала першою ОС, практично повністю написаною на мові високого рівня.

Тісний зв'язок з Unix дала мови З такий полігон для обкатки, якого не було в той час ні у одного іншої мови. Завдання системного програмування по праву вважалися в той час найскладнішими в галузі. Здебільшого вони були настільки машинно-залежними, що багато хто взагалі не мислили їх рішення інакше, ніж на асемблері. Мови високого рівня призначалися для прикладного програмування і лише дуже обмежено реалізовували функції, необхідні для системних робіт, причому найчастіше тільки для певного типу машин.

Мова С з самого початку створювався так, щоб на ньому можна було писати системні завдання. Творці С не стали розробляти абстрактну модель виконавця мови, а просто реалізували в ньому ті можливості, в яких найбільше потребували практиці системного програмування. Це в першу чергу були кошти безпосередньої роботи з пам'яттю, структурні конструкції управління і модульна організація програми. І по суті більше нічого в мову включено не було. Все інше було віднесено до бібліотеки часу виконання. Тому недоброзичливці інший раз відгукуються про мову С як про структурний асемблері. Але що б вони не базікали, підхід виявився дуже вдалим. Завдяки йому був досягнутий новий рівень по співвідношенню простоти і можливостей мови.

Є, втім, ще один фактор, який визначив успіх мови. Творці дуже вміло розділили в ньому машинно-залежні і незалежні властивості. Завдяки цьому більшість програм вдається писати універсально - їх працездатність не залежить від архітектури процесора і пам'яті. Нечисленні ж апаратно-залежні частини коду можна локалізувати в окремих модулях. А користуючись препроцесором, можна створювати такі модулі, які при компіляції на різних платформах будуть породжувати відповідний машинно-залежний код.

Багато суперечок викликав синтаксис мови С. Застосовані в ньому прийоми скорочення запису при надмірному використанні можуть зробити програму абсолютно нечитаною. Але, як говорив Дейкстра, - кошти не винні в тому, що їх безграмотно використовують. Насправді ж, запропоновані в С скорочення синтаксису відповідають найбільш часто зустрічається на практиці стереотипним ситуаціям. Якщо вважати скорочення ідіомами для виразного і компактного представлення таких ситуацій, то користь від них стає безумовною і очевидною.

Отже, С виник як універсальна мова системного програмування. Але він не залишився в цих рамках. До кінця 80-х років мова З, відтіснивши Fortran з позиції лідера, завоював масову популярність серед програмістів в усьому світі і став використовуватися в самих різних прикладних задачах. Чималу роль тут зіграло поширення Unix (а значить і С) в університетському середовищі, де проходило підготовку нове покоління програмістів.

Як і всі мови, С поступово вдосконалювався, але більшість удосконалень не носило радикального характеру. Найбільш істотним з них, мабуть, слід вважати введення суворої специфікації типів функцій, яка значно підвищила надійність межмодульного взаємодії на С. Все такі удосконалення були в 1989 році закріплені в стандарті ANSI який і понині визначає мову С.

Але якщо все так безхмарно, то чому ж ще продовжують використовуватися всі інші мови, що підтримує їх існування? Ахіллесовою п'ятою мови З стало те, що він виявився занадто низькорівневим для тих завдань, які поставили на порядок денний 90-і роки. Причому ця проблема є два аспекти. З одного боку, в мову були вбудовані занадто низькорівневі засоби - перш за все це робота з пам'яттю і адресна арифметика. Недарма зміна розрядності процесорів дуже болісно відбивається на багатьох С-програмах. З іншого боку, в С бракує коштів високорівневих - абстрактних типів даних і об'єктів, поліморфізму, обробки винятків. Як наслідок, в програмах на С техніка реалізації завдання часто домінує над її змістовної стороною.

Перші спроби виправити ці недоліки стали робитися ще на початку 80-х років. Уже тоді Бйорн Страуструп в AT & T Bell Labs став розробляти розширення мови С під умовною назвою. Стиль ведення розробки цілком відповідав духу, в якому створювався і сама мова С, - в нього вводилися ті чи інші можливості з метою зробити більш зручною роботу конкретних людей і груп. Перший комерційний транслятор нової мови, який отримав назву C ++ з'явився в 1983 році. Він був препроцесором, який транслював програму в код на С. Однак фактичним народженням мови можна вважати вихід в 1985 році книги Страуструпа. Саме з цього моменту C ++ починає набирати усесвітню популярність.

Головне нововведення C ++ - механізм класів, що дає можливість визначати і використовувати нові типи даних. Програміст описує внутрішнє уявлення об'єкта класу і набір функцій-методів для доступу до цієї вистави. Однією із заповітних цілей при створенні C ++ було прагнення збільшити відсоток повторного використання вже написаного коду. Концепція класів пропонувала для цього механізм успадкування. Спадкування дозволяє створювати нові (похідні) класи з розширеним уявленням і модифікованими методами, не зачіпаючи при цьому скомпільований код вихідних (базових) класів. Разом з тим спадкування забезпечує один з механізмів реалізації поліморфізму - базової концепції об'єктно-орієнтованого програмування, згідно з якою, для виконання однотипної обробки різних типів даних може використовуватися один і той же код. Власне, поліморфізм - теж один з методів забезпечення повторного використання коду.

Введення класів не вичерпує всіх новацій мови C ++. У ньому реалізовані повноцінний механізм структурної обробки виключень, відсутність якого в С значно ускладнювало написання надійних програм, механізм шаблонів - витончений механізм макрогенерації, глибоко вбудований в мову, відкриває ще один шлях до повторної використовуваного коду, і багато іншого.

Таким чином, генеральна лінія розвитку мови була спрямована на розширення його можливостей шляхом введення нових високорівневих конструкцій при збереженні наскільки можливо повної сумісності з ANSI С. Звичайно, боротьба за підвищення рівня мови йшла і на другому фронті - ті ж класи дозволяють при грамотному підході ховати низькорівневі операції, так що програміст фактично перестає безпосередньо працювати з пам'яттю і системно-залежними сутностями. Однак мова не містить механізмів, що змушують розробника правильно структурувати програму, а автори не випустили ніяких систематичних рекомендацій по використанню його досить витончених конструкцій. Чи не подбали вони своєчасно і про створення стандартної бібліотеки класів, що реалізує найбільш часто зустрічаються структури даних.

Все це призвело до того, що багато розробників змушені були самі досліджувати лабіринти мовної семантики і самостійно відшукувати успішно працюють ідіоми. Так, наприклад, на першому етапі розвитку мови багато творців бібліотек класів прагнули побудувати єдину ієрархію класів із загальним базовим класом Object. Ця ідея була запозичена з Smalltalk - одного з найбільш відомих об'єктно-орієнтованих мов. Однак вона виявилася абсолютно нежиттєздатною в C ++ - ретельно продумані ієрархії бібліотек класів виявлялися негнучкими, а робота класів - неочевидній. Для того щоб бібліотеками класів можна було користуватися, їх доводилося поставляти в початкових текстах.

Поява темплетний класів і зовсім спростувало цей напрям розвитку. Успадкуванням стали користуватися тільки в тих випадках, коли потрібно породження спеціалізованої версії наявного класу. Бібліотеки стали складатися з окремих класів і невеликих незв'язаних між собою ієрархій. Однак на цьому шляху стало знижуватися повторне використання коду, так як в C ++ неможливо полиморфное використання класів з незалежних ієрархій. Повсюдне ж застосування темплетов веде до неприпустимого зростання обсягу скомпільованої коду - не будемо забувати, темплети реалізуються методами макрогенерації.

Один із найважчих недоліків C ++, успадкований ним від синтаксису З, полягає в доступності компілятору опису внутрішньої структури всіх використаних класів. Як наслідок, зміна внутрішньої структури представлення якого-небудь бібліотечного класу призводить до необхідності перекомпіляції всіх програм, де ця бібліотека використовується. Це сильно обмежує розробників бібліотек в частині їх модернізації, адже, випускаючи нову версію, вони повинні зберігати двійкову сумісність з попередньою. Саме ця проблема змушує багатьох фахівців вважати, що C ++ непридатний для ведення великих і надвеликих проектів.

І все ж, незважаючи на перераховані недоліки і навіть на неготовність стандарту мови (це після п'ятнадцяти з гаком років використання!), C ++ залишається одним з найбільш популярних мов програмування. Його сила насамперед в практично повній сумісності з мовою С. Завдяки цьому програмістам C ++ доступні всі напрацювання, виконані на С. При цьому C ++ навіть без використання класів привносить в З ряд настільки важливих додаткових можливостей і зручностей, що багато хто користується їм просто як поліпшеним З .

Що стосується об'єктної моделі C ++, то поки ваша програма не стала дуже великий (сотні тисяч рядків), нею цілком можна користуватися. Намітилася останнім часом тенденція переходу до компонентного програмного забезпечення тільки підсилює позиції C ++. При розробці окремо взятих компонентів недоліки C ++ ще не виявляються, а зв'язування компонентів в працюючу систему проводиться вже не на рівні мови, а на рівні операційної системи.

У світлі всього сказаного перспективи C ++ не виглядають похмурими. Хоча і монополія на ринку мов програмування йому не світить. Мабуть, з упевненістю можна стверджувати лише те, що ще однією модернізації-розширення ця мова не переживе. Недарма, коли з'явилася Java, на неї звернули таку пильну увагу. Мова, близький по синтаксису до C ++, а значить, здається знайомим багатьом програмістам, був позбавлений від найбільш кричущих недоліків C ++, успадкованих їм з 70-х років. Однак не схоже, щоб Java справлялася з покладеної на неї деякими роллю.

Особлива роль мов C / C ++ в сучасному програмуванні практично позбавляє сенсу приведення конкретних адрес в Інтернеті, де можна знайти матеріали по ним. Таких місць просто занадто багато. Однак, якщо цікаво докладніше познайомитися з еволюцією C ++, то почніть з невеликої статті http://citforum.syzran.ru/programming/prg96/76.shtml.

Олександр Сергєєв, [Email protected]
Стаття з журналу BYTE / Росія, Лютий 2000

Для того, щоб наочно продемонструвати використання описаних мов на практиці нами була обрана задача, в якій потрібно ввести зі стандартного вводу або з файлу ряд цілих чисел, а потім вивести тільки непарні з них, причому в зворотному порядку проходження. Це одна з найпростіших завдань, яка істотно вимагає для свого рішення роботи з масивами, циклами, розгалуженням і в / в, а також дозволяє продемонструвати виклики підпрограм. При цьому вона доступна для огляду і легко сприймається.

Лістинг 1. З

1 #include / * Підключаємо функції введення-виведення * / 2 3 void main (void) 4 (5 int М; / * Масив з 10 цілих, рахунок з 0 * / 6 int N; 7 for (N = 0; N<10; ++N) /* Вводим не более 10 чисел */ 8 if (EOF == scanf ("%d, M+N)) 9 break; /* Если конец файла, прерываем цикл */ 10 11 for (-N; N>= 0; --N) / * Проходимо масив в зворотному * / 12 if (M [N]% 2) / * порядку і виводимо непарні * / 13 printf ( "% d \ n", M [N]); 14)

  • Рядок 3.У C / C ++ виконання програми завжди починається з функції main.
  • Рядки 7 і 11.У заголовку циклу через крапку з комою вказуються початкова установка, умова продовження і правило перерахунку параметра циклу. операції ++ і -/- - найвідоміші від зобов'язань щодо зменшення мови С, що означають інкремент і декремент змінної, тобто збільшення і зменшення її значення на одиницю.
  • Рядок 8.функція scanfвводить по формату, заданому першим параметром, значення змінних, адреси яких задані іншими параметрами. Тут адреса, куди вводиться значення, обчислюється за допомогою адресної арифметики, до адреси розташування масиву Мдодається зсув на Nелементів. Той же ефект можна отримати, записавши & M [N].
  • Рядок 12.операція % обчислює залишок від ділення. Умова оператора ifвважається виконаним, якщо чисельне значення виразу відмінно від нуля.
  • Рядок 13.функція printf- друк за форматом діє аналогічно scanf, Але замість адрес їй передаються значення, що підлягають висновку.
1 #include 2 3 template class Array 4 (5 public: Array (T Size = 1): M (new T), N (Size), n (0) () 6 Array (void) (delete М;) 7 T Count (void) const ( return n;) 8 T operator (int i) const (return M [i];) 9 void Add (Т Data); 10 private: 11 T * М; // Адреса розподіленої пам'яті 12 int N, n; // N - розподілено; n - використано 13); 14 15 template void Array :: Add (T Data) 16 (if (N-n) // Якщо використано всі розподілене 17 (int * P = new T; // місце, розподілимо побільше 18 for (int i = 0; i A; // Масив цілих змінного розміру 28 while (1) // Нескінченний цикл 29 (int N; 30 cin >> N; // cin - стандартний потік введення 31 if (cin.eof ()) break; // Вихід з циклу по кінця файлу 32 A.Add (N); // Додаємо введене число в масив 33) 34 for (int N = A.Count () - 1; N> = 0; --N) // Проходимо по масиву 35 if ( A [N]% 2) 36 cout<, І звільнить пам'ять
  • Рядки 3-13.Оголошується темплетний клас Аrrayз параметром Т. Він являє собою масив змінного розміру об'єктів типу Т. Звичайно, в нашій задачі немає ніякої необхідності використовувати темплетний клас. Однак нам хотілося продемонструвати, як на C ++ створюється поліморфна структура даних, здатна працювати з будь-яким типом елементів.
  • Рядок 5.Конструктор класу. У ньому инициализируется уявлення об'єкта. Наприклад, в поле Мзаноситься адреса блоку пам'яті, замовленого операцією new T.
  • Рядок 8.Приклад перевантаження операції. функція operatorбуде викликатися, коли квадратні дужки з'являтимуться праворуч від об'єкту класу Array.
  • Рядок 9.Ця функція основна в реалізації. Вона додає елементи в масив, розширюючи його при необхідності. Оскільки вона складніша інших, її визначення винесене з опису класу. Функції, описані в тілі класу, реалізуються в C ++ не виклик, а inline-підстановкою. Це прискорює роботу програми, хоча збільшує її розмір.
  • Рядки 15-24.визначення функції Аrrау :: Add (T)(Між іншим, це її повне ім'я).
  • Рядок 27.Створюємо об'єкт типу Array. Темплете Аггапараметрізіруется типом int.

C ++ (читається сі-плюс-плюс) - компільований, статично типізований мова програмування загального призначення, на якому можна створювати програми будь-якого рівня складності.
Більше 20 років ця мова знаходиться в трійці найпопулярніших і затребуваних мов програмування. (В цьому можна переконатися, відвідавши сайт TIOBE).
Мова виникла на початку 1980-х років, коли співробітник фірми Bell Labs Бйорн Страуструп придумав ряд удосконалень до мови C під власні потреби.

Bjarne Stroustrup - творець мови C ++

Страуструп вирішив доповнити мову C можливостями, наявними в мові Симула. Мова C, будучи базовою мовою системи UNIX, на якій працювали комп'ютери Bell, є швидким, багатофункціональним і стерпним. Страуструп додав до нього можливість роботи з класами та об'єктами. В результаті практичні задачі моделювання виявилися доступними для вирішення як з точки зору часу розробки (завдяки використанню Симула-подібних класів), так і з точки зору часу обчислень (завдяки швидкодії C).
Ось як про це говорить сам розробник мови:



У 1998 році був опублікований перший стандарт мови, відомий як C ++ 98, розроблений комітетом з стандартизації. C ++ продовжує розвиватися, щоб відповідати сучасним вимогам. Одна з груп, що розробляють мову C ++ і напрямних комітету по стандартизації C ++ пропозиції щодо його поліпшення - це Boost, Яка займається, в тому числі, вдосконаленням можливостей мови шляхом додавання в нього особливостей метапрограмування. Останній стандарт вийшов у 2017 році і носить найменування С ++ 17. Наступний стандарт не змусить себе довго чекати і з'явиться, як очікують, у 2020 році.
Ніхто не має права на мову C ++, він є вільним. У березні 2016 року в Росії було створено робочу групу РГ21 С ++. Група була організована для збору пропозицій до стандарту C ++, відправки їх в комітет і захисту на загальних зборах Міжнародної організації зі стандартизації.
С ++ - це мультипарадигмальності мову (від слова парадигма - стиль написання комп'ютерних програм), що включає широкий спектр різних стилів і технологій програмування. Часто його зараховують до об'єктно-орієнтованим мовам, але, строго кажучи, це не так. В процесі роботи розробник отримує абсолютну свободу у виборі інструментів для того, щоб завдання, яке вирішується за допомогою того чи іншого підходу, була вирішена максимально ефективно. Іншими словами, С ++ не примушується програміста дотримуватися тільки одного стилю розробки програми (наприклад, об'єктно-орієнтованого).
C ++ має багату стандартну бібліотеку, яка включає в себе поширені контейнери і алгоритми, введення-виведення, регулярні вирази, підтримку багатопоточності і інші можливості. C ++ вплинув на багато мов програмування, в їх числі: Java, C #, D. Посукольку C ++ належить сімейству мов заснованих на синтаксисі мови Сі, то можна легко освоїти і інші мови програмування цього сімейства: JavaScript, PHP, Perl, Objective-C і мн . ін., в тому числі, і сам батьківський мову - Сі. ()
За час свого існування за мовою С ++ закріпилися стійкі міфи, які легко спростовуються (див. Тут: Частина 1 і Частина 2)

Історія мови і виходу стандартів

1983

Творець мови - Бйорн Страуструп, Співробітник Bell Labs, представив ранню версію мови C ++ ( "Сі з класами")

1985

Перший комерційний випуск C ++, мова набуває сучасну назву

1986

Випуск першого видання The C ++ Programming Language - книги, присвяченої C ++, яку написав Бйорн Страуструп

1998

Ратифікований міжнародний стандарт мови C ++: ISO / IEC 14882: тисячі дев'ятсот дев'яносто вісім «Standard for the C ++ Programming Language»

2003
2005

Випущений звіт Library Technical Report 1 (TR1). Не будучи офіційно частиною стандарту, звіт описував розширення стандартної бібліотеки, які повинні бути включені в наступну версію мови C ++

2011

Вихід нового стандарту - C ++ 11 або ISO / IEC 14882: 2011 року; новий стандарт включив доповнення в ядрі мови та розширення стандартної бібліотеки, в тому числі велику частину TR1

2014

Вихід стандарту C ++ 14 ( «International Standard ISO / IEC 14882 до: 2014 (E) Programming Language 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 ++» (2007) Бйорн Страуструп описує принципи, яких він дотримувався при проектуванні C ++ (наводяться в скороченні):

  • Отримати універсальна мова зі статичними типами даних, ефективністю і переносимістю мови C.
  • Безпосередньо і всебічно підтримувати безліч стилів програмування.
  • Дати програмісту свободу вибору, навіть якщо це дасть йому можливість вибирати неправильно.
  • Максимально зберегти сумісність з C, тим самим роблячи можливим легкий перехід від програмування на C.
  • Уникнути різночитань між C і C ++: будь-яка конструкція, допустима в обох мовах, повинна в кожному з них позначати один і той же і приводити до одного і того ж поведінки програми.
  • Уникати особливостей, які залежать від платформи або не є універсальними.
  • «Не платити за те, що не використовується» - ніяке мовне засіб не повинно призводити до зниження продуктивності програм, які не використовують його.
  • Чи не вимагати занадто ускладненою середовища програмування.

C і C ++

Синтаксис C ++ успадкований від мови C. Хоча, формально, одним із принципів C ++ залишається збереження сумісності з мовою C, фактично групи по стандартизації цих мов не взаємодіють, а внесені ними зміни не тільки не корелюють, а й нерідко принципово суперечать один одному ідеологічно. Так, елементи, які нові стандарти C додають в ядро, в стандарті C ++ є елементами стандартної бібліотеки і в ядрі взагалі відсутні, наприклад, динамічні масиви, масиви з фіксованими межами, засоби паралельної обробки. Як вважає Страуструп, об'єднання розробки цих двох мов принесло б велику користь, але воно навряд чи можливо з політичних міркувань. Так що практична сумісність між C і C ++ поступово буде втрачатися.
В даному прикладі, в залежності від використовуваного компілятора, буде виведено або "C ++", або "C":

програма 9.1

#include int main () (printf ( "% s \ n", (sizeof ( "a") == sizeof (char))? "C ++": "C"); return 0;)

Пов'язано це з тим, що символьні константи в C мають тип int, а в C ++ - тип char, але розміри цих типів розрізняються.

Моделі життєвого циклу додатки

Життєвий циклпрограмного забезпечення - це період часу, який починається з моменту прийняття рішення про необхідність створення програмного продукту і закінчується в момент його повного вилучення з експлуатації. Цей цикл - процес побудови і розвитку програмного забезпечення (ПО). Існує кілька моделей життєвого циклу.
каскадна модельжиттєвого циклу (англ. waterfall model) була запропонована в 1970 р Уинстоном Ройсом. Вона передбачає послідовне виконання всіх етапів проекту в строго фіксованому порядку. Перехід на наступний етап означає повне завершення робіт на попередньому етапі. Вимоги, визначені на стадії формування вимог, строго документуються у вигляді технічного завдання і фіксуються на весь час розробки проекту. Кожна стадія завершується випуском повного комплекту документації, достатньої для того, щоб розробка могла бути продовжена іншою командою розробників.
Етапи проекту відповідно до каскадної моделлю:

  1. Формування вимог;
  2. проектування;
  3. Реалізація;
  4. тестування;
  5. впровадження;
  6. Експлуатація та супровід.

У каскадної моделі перехід від однієї фази проекту до іншого передбачає повну коректність результату попередньої фази. У великих проектах цього домогтися практично неможливо. Тому така модель придатна тільки для розробки невеликого проекту. (Сам У. Ройс не дотримався даної моделі і використовував модель итерационную).
ітераційна модель
Альтернативою каскадної моделі є модель итеративной і інкрементальною розробки (англ. Iterative and incremental development, IID), що отримала від Т. Гілбі в 70-і рр. назва еволюційної моделі. Модель IID передбачає розбиття життєвого циклу проекту на послідовність ітерацій, кожна з яких нагадує «міні-проект», включаючи всі процеси розробки в застосуванні до створення менших фрагментів функціональності, в порівнянні з проектом в цілому. Мета кожної ітерації - отримання працюючої версії програмної системи, що включає функціональність, певну інтегрованим змістом усіх попередніх і поточної ітерації. Результат фінальної ітерації містить всю необхідну функціональність продукту. Таким чином, із завершенням кожної ітерації продукт від нього бере зріст - інкремент - до його можливостей, які, отже, розвиваються еволюційно.


Різні варіанти ітераційного підходу реалізовані в більшості сучасних методологій розробки:

Процес розробки - Rational Unified Process (RUP)

Rational Unified Process (RUP)(Раціональний уніфікований процес) - методологія розробки програмного забезпечення, яка підтримується компанією Rational Software (IBM). У методології даються рекомендації по всіх етапах розробки: від моделювання бізнесу до тестування та здачі в експлуатацію готової програми. В якості мови моделювання використовується мова Unified Modelling Language (UML).
Повний життєвий цикл розробки продукту складається з чотирьох фаз, кожна з яких включає в себе одну або декілька ітерацій.

  • Початкова стадія (Inception)
  • Визначення масштабів проекту і обсягу необхідних ресурсів. Визначаються основні вимоги, обмеження і ключова функціональність продукту. Оцінюються ризики. Планування дій. При завершенні початкової фази оцінюється досягнення етапу життєвого циклу мети (англ. Lifecycle Objective Milestone), яке передбачає угоду зацікавлених сторін про продовження проекту.

  • Уточнення (Elaboration)
  • Документування вимог. Проектування, реалізація і тестування виконуваної архітектури. Уточнення термінів і вартості. Зниження основних ризиків. Успішне виконання фази розробки означає досягнення етапу життєвого циклу архітектури (англ. Lifecycle Architecture Milestone).

  • Побудова (Construction)
  • У фазі «Побудова» відбувається реалізація більшої частини функціональності продукту: дизайн програми завершено, вихідний код написаний. Фаза Побудова завершується першим зовнішнім релізом системи і віхою початкової функціональної готовності (Initial Operational Capability).

  • Впровадження (Transition)
  • У фазі «Впровадження» створюється фінальна версія продукту і передається від розробника до замовника. Це включає в себе програму бета-тестування, навчання користувачів, а також визначення якості продукту. У разі, якщо якість не відповідає очікуванням користувачів або критеріям, встановленим у фазі Початок, фаза Впровадження повторюється знову. Виконання всіх цілей означає досягнення віхи готового продукту (Product Release) та завершення повного циклу розробки.



"Інформаційна технологія. Системна і програмна інженерія. Процеси життєвого циклу програмних засобів ». Цей стандарт прийнятий Федеральним агентством з технічного регулювання і метрології РФ і аналогічний міжнародному стандарту ISO / IEC 12207: 2008. Даний стандарт, встановлює загальну структуру процесів життєвого циклу програмних засобів, на яку можна орієнтуватися в програмної індустрії. Стандарт не пропонує конкретну модель життєвого циклу. Його положення є загальними для будь-яких моделей життєвого циклу, методів і технологій створення програмного забезпечення. Він описує структуру процесів життєвого циклу, що не конкретизуючи, як реалізувати або виконати дії і завдання, включені в ці процеси.

Презентація до уроку
теми повідомлень
  • Фонд вільного програмного забезпечення (FSF)
  • Вільні ліцензії ПО
  • FreeSoftware і Open Source
  • Історія розвитку мов програмування
  • Історія виникнення мови C. C і C ++
  • Історія
  • Критика C ++
  • Історія UNIX
  • Спіральна модель життєвого циклу ПО
  • UML (англ. Unified Modeling Language - уніфікована мова моделювання)
  • Microsoft Solutions Framework
  • IDE для програмування на C / C ++ в Windows
  • Компілятори З / C ++
  • Створення консольного застосування в Windows
питання
  1. Чому каскадна модель розробки ПЗ не застосовується у великих проектах?
  2. У чому полягає відмінність між каскадної і итерационной моделями розробки?
  3. Перерахуйте стадії розробки ПО в методології Rational Unified Process (RUP)

Чому C ++

С ++ в даний час вважається панівною мовою, використовуваним для розроб-лення комерційних програмних продуктів. В останні роки це панування злегка по-коливалося внаслідок аналогічних претензій з боку такої мови программірова-ня, як Java, але маятник громадської думки хитнувся в інший бік, і багато програмістів, які кинули С ++ заради Jаvа, останнім часом поспішили повернутися до своєї колишньої прихильності. У будь-якому випадку ці дві мови настільки схожі, що, вивчивши один з них, ви автоматично освоюєте 90% іншого.

С # - це нова мова, розроблений Мiсгоsоft для мережевої платформи. За суще-ству С # є різновидом С ++, і незважаючи на ряд принципових відмінностей, мови С # і С ++ збігаються приблизно на 90%. Ймовірно, пройде чимало часу, перш ніж мова С # складе серйозну конкуренцію мови С ++; але навіть якщо це і станеться, то знання мови С ++ виявиться істотною перевагою.

С ++ є мовою програмування загального призначення. Природна для нього область застосування - системне програмування, що розуміється в широкому сенсі цього слова. Крім того, С ++ успішно використовується в багатьох областях додатки, далеко виходять за зазначені рамки. Реалізації С ++ тепер є на всіх машинах, починаючи з найскромніших мікрокомп'ютерів - до найбільших супер-ЕОМ, і практично для всіх операційних систем.

Виникнення і еволюція мови C ++

Бйорн Страуструп є розробником мови С ++ і творцем першого транслятора. Він - співробітник науково-дослідного обчислювального центру AT & T Bell Laboratories в Мюррей Хілл (Нью-Джерсі, США). Він отримав звання магістра математики та обчислювальної техніки в університеті м Аарус (Данія), а лікарське звання з обчислювальної техніки в Кембриджський університет (Англія). Він спеціалізується в області розподілених систем, операційних систем, моделювання та програмування. Разом з М. А. Елліс він є автором повного керівництва по мові С ++ - "Керівництво по С ++ з примітками".

Безумовно С ++ багатьом зобов'язаний мови С, який зберігається як його підмножина. Збережені і всі властиві З кошти низького рівня, призначені для вирішення найбільш нагальних завдань системного програмування. С, в свою чергу, багато чим зобов'язаний своєму попередникові мови BCPL. Коментар мови BCPL був відновлений в С ++. Ще одним джерелом натхнення була мова SIMULA-67; саме з нього була запозичена концепція класів (разом c похідними класами і віртуальними функціями). Можливість в С ++ перевантаження операцій і свобода розміщення описів всюди, де може зустрічатися оператор, нагадують мову Алгол-68.

Більш ранні версії мови, що отримали назву "С з класами", використовувалися, починаючи з 1980 р Ця мова виникла тому, що автору знадобилося написати програми моделювання, керовані перериваннями. Мова SIMULA-67 ідеально підходить для цього, якщо не враховувати ефективність. Мова "С з класами" використовувався для великих завдань моделювання. Суворій перевірці піддалися тоді можливості написання на ньому програм, для яких критичні ресурси часу і пам'яті. У цій мові бракувало перевантаження операцій, посилань, віртуальних функцій і багатьох інших можливостей. Вперше С ++ вийшов за межі дослідницької групи, в якій працював автор, в липні 1983 р проте тоді багато можливостей С ++ ще не були розроблені.

Назва С ++ (Сі плюс плюс), було придумано Ріком Маскітті влітку 1983 г. Це назва відображає еволюційний характер змін мови С. Позначення ++ відноситься до операції нарощування С. Трохи більше коротку назву З + є синтаксичної помилкою. Крім того, воно вже було використано як назва зовсім іншої мови. Знавці семантики З знаходять, що С ++ гірше, ніж ++ С. Мова не отримав назви D, оскільки він є розширенням С, і в ньому не робиться спроб вирішити будь-які проблеми за рахунок відмови від можливостей С. Ще одну цікаву інтерпретацію назви С ++ можна знайти в додатку до.

Спочатку С ++ був задуманий для того, щоб автору і його друзям не треба було програмувати на асемблері, С або інших сучасних мовах високого рівня. Основне його призначення - спростити і зробити більш приємним процес програмування для окремого програміста. До недавнього часу не було плану розробки С ++ на папері. Проектування, реалізація і документування йшли паралельно. Ніколи не існувало "проекту С ++" або "Комітету з розробки С ++". Тому мова розвивалася і продовжує розвиватися так, щоб подолати всі проблеми, з якими зіткнулися користувачі. Поштовхами до розвитку служать також і обговорення автором всіх проблем з його друзями і колегами.

З моменту виходу в світ першого видання цієї книги мова С ++ зазнав суттєвих змін і уточнень. В основному це стосується вирішення неоднозначності при перевантаженні, зв'язуванні і управлінні пам'яттю. Разом з тим, були внесені незначні зміни з метою збільшити сумісність з мовою С. Були також введені деякі узагальнення і суттєві розширення, як то: множинне спадкування, функції-члени зі специфікаціями static і const, захищені члени (protected), шаблони типу і обробка особливих ситуацій. Всі ці розширення і доопрацювання були націлені на те, щоб С ++ стала мовою, на якому можна створювати і використовувати бібліотеки. Всі зміни описуються в.

Інші розширення, введені за період між 1985 і 1991 р.р. (Такі як множинне спадкування, статичні функції-члени і чисті віртуальні функції), швидше за з'явилися в результаті узагальнення досвіду програмування на С ++, ніж були почерпнуті з інших мов.

Зроблені за ці шість років розширення мови перш за все були спрямовані на підвищення виразності С ++ як мови абстракції даних і об'єктно-орієнтованого програмування взагалі і як засоби для створення високоякісних бібліотек до призначених для користувача типами даних зокрема.

Приблизно в 1987 р стало очевидно, що робота по стандартизації С ++ неминуча і що слід негайно приступити до створення основи для неї.

Фірма AT & T Bell Laboratories внесла основний внесок в цю роботу. Близько ста представників з близько 20 організацій вивчали і коментували те, що стало сучасною версією довідкового керівництва і вихідними матеріалами для ANSI по стандартизації. С ++. Нарешті, з ініціативи фірми Hewlett-Packard в грудні 1989 р в складі ANSI був утворений комітет X3J16. Очікується, що роботи по стандартизації С ++ в ANSI (Американський стандарт) стануть складовою частиною робіт по стандартизації силами ISO (Міжнародної організації зі стандартизації).

С ++ розвивався одночасно з розвитком деяких фундаментальних класів.