<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8499211462974489983</id><updated>2018-05-23T02:35:07.979-07:00</updated><title type='text'>C++/ Linux</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://pm11blet.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8499211462974489983/posts/default'/><link rel='alternate' type='text/html' href='https://pm11blet.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Юра Дмитрів</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-kI9Jym0QXrQ/AAAAAAAAAAI/AAAAAAAAAC0/_hYGgINMxuk/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>1</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8499211462974489983.post-3643945423223759138</id><published>2018-05-23T02:32:00.002-07:00</published><updated>2018-05-23T02:32:33.455-07:00</updated><title type='text'></title><content type='html'>&lt;div&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;Чому C ++&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;С ++ в даний час вважається панівною мовою, використовуваним для разра¬боткі комерційних програмних продуктів. В останні роки це панування злегка по¬колебалось внаслідок аналогічних претензій з боку такої мови программірова¬нія, як Java, але маятник громадської думки хитнувся в інший бік, і багато програмістів, які кинули С ++ заради Jаvа, останнім часом поспішили повернутися до своєї колишньої прихильності. У будь-якому випадку ці дві мови настільки схожі, що, вивчивши один з них, ви автоматично освоюєте 90% іншого.&lt;/div&gt;&lt;div&gt;С # - це нова мова, розроблений Мiсгоsоft для мережевої платформи. За суще¬ству С # є різновидом С ++, і незважаючи на ряд принципових відмінностей, мови С # і С ++ збігаються приблизно на 90%. Ймовірно, пройде чимало часу, перш ніж мова С # складе серйозну конкуренцію мови С ++; але навіть якщо це і станеться, то знання мови С ++ виявиться істотною перевагою.&lt;/div&gt;&lt;div&gt;С ++ є мовою програмування загального призначення. Природна для нього область застосування - системне програмування, що розуміється в широкому сенсі цього слова. Крім того, С ++ успішно використовується в багатьох областях додатки, далеко виходять за зазначені рамки. Реалізації С ++ тепер є на всіх машинах, починаючи з найскромніших мікрокомп&#39;ютерів - до найбільших супер-ЕОМ, і практично для всіх операційних систем.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://1.bp.blogspot.com/-9PjrmFamcD8/WwUEiE8Nw6I/AAAAAAAADCA/3U7GbyHMShEsT0_df6UXFeeT2EQzSOdegCPcBGAYYCw/s1600/images.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;159&quot; data-original-width=&quot;316&quot; src=&quot;https://1.bp.blogspot.com/-9PjrmFamcD8/WwUEiE8Nw6I/AAAAAAAADCA/3U7GbyHMShEsT0_df6UXFeeT2EQzSOdegCPcBGAYYCw/s1600/images.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;Виникнення мови С++&lt;/h2&gt;&lt;br /&gt;Бйорн Страуструп є розробником мови С ++ і творцем першого транслятора. Він - співробітник науково-дослідного обчислювального центру AT &amp;amp; T Bell Laboratories в Мюррей Хілл (Нью-Джерсі, США). Він отримав звання магістра математики та обчислювальної техніки в університеті м Аарус (Данія), а лікарське звання з обчислювальної техніки в Кембриджський університет (Англія). Він спеціалізується в області розподілених систем, операційних систем, моделювання та програмування. Разом з М. А. Елліс він є автором повного керівництва по мові С ++ - &quot;Керівництво по С ++ з примітками&quot;.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Безумовно С ++ багатьом зобов&#39;язаний мови С [8], який зберігається як його підмножина. Збережені і всі властиві З кошти низького рівня, призначені для вирішення найбільш нагальних завдань системного програмування. С, в свою чергу, багато чим зобов&#39;язаний своєму попередникові мови BCPL [13]. Коментар мови BCPL був відновлений в С ++. Ще одним джерелом натхнення була мова SIMULA-67 [2,3]; саме з нього була запозичена концепція класів (разом c похідними класами і віртуальними функціями). Можливість в С ++ перевантаження операцій і свобода розміщення описів всюди, де може зустрічатися оператор, нагадують мову Алгол-68 [24].&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Більш ранні версії мови, що отримали назву &quot;С з класами&quot; [16], використовувалися, починаючи з 1980 р Ця мова виникла тому, що автору знадобилося написати програми моделювання, керовані перериваннями. Мова SIMULA-67 ідеально підходить для цього, якщо не враховувати ефективність. Мова &quot;С з класами&quot; використовувався для великих завдань моделювання. Суворій перевірці піддалися тоді можливості написання на ньому програм, для яких критичні ресурси часу і пам&#39;яті. У цій мові бракувало перевантаження операцій, посилань, віртуальних функцій і багатьох інших можливостей. Вперше С ++ вийшов за межі дослідницької групи, в якій працював автор, в липні 1983 р проте тоді багато можливостей С ++ ще не були розроблені.&lt;br /&gt;Назва С ++ (Сі плюс плюс), було придумано Ріком Маскітті влітку 1983 г. Це назва відображає еволюційний характер змін мови С. Позначення ++ відноситься до операції нарощування С. Трохи більше коротку назву З + є синтаксичної помилкою. Крім того, воно вже було використано як назва зовсім іншої мови. Знавці семантики З знаходять, що С ++ гірше, ніж ++ С. Мова не отримав назви D, оскільки він є розширенням С, і в ньому не робиться спроб вирішити будь-які проблеми за рахунок відмови від можливостей С. Ще одну цікаву інтерпретацію назви С ++ можна знайти в додатку до [12].&lt;br /&gt;&amp;nbsp; &amp;nbsp; Спочатку С ++ був задуманий для того, щоб автору і його друзям не треба було програмувати на асемблері, С або інших сучасних мовах високого рівня. Основне його призначення - спростити і зробити більш приємним процес програмування для окремого програміста. До недавнього часу не було плану розробки С ++ на папері. Проектування, реалізація і документування йшли паралельно. Ніколи не існувало &quot;проекту С ++&quot; або &quot;Комітету з розробки С ++&quot;. Тому мова розвивалася і продовжує розвиватися так, щоб подолати всі проблеми, з якими зіткнулися користувачі. Поштовхами до розвитку служать також і обговорення автором всіх проблем з його друзями і колегами.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://2.bp.blogspot.com/-cMhrZEt3yHo/WwUEhvNO1CI/AAAAAAAADB8/RiYwVaurBd87OoKHsGaBZYYOjXloIdNRQCPcBGAYYCw/s1600/0-02-04-972a79b06dabfd0e107a2bee9f4b9a853d3687857beaf8be85e24d29a718a9e6_276203a7.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1280&quot; data-original-width=&quot;1280&quot; height=&quot;320&quot; src=&quot;https://2.bp.blogspot.com/-cMhrZEt3yHo/WwUEhvNO1CI/AAAAAAAADB8/RiYwVaurBd87OoKHsGaBZYYOjXloIdNRQCPcBGAYYCw/s320/0-02-04-972a79b06dabfd0e107a2bee9f4b9a853d3687857beaf8be85e24d29a718a9e6_276203a7.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; З моменту виходу в світ першого видання цієї книги мова С ++ зазнав суттєвих змін і уточнень. В основному це стосується вирішення неоднозначності при перевантаженні, зв&#39;язуванні і управлінні пам&#39;яттю. Разом з тим, були внесені незначні зміни з метою збільшити сумісність з мовою С. Були також введені деякі узагальнення і суттєві розширення, як то: множинне спадкування, функції-члени зі специфікаціями static і const, захищені члени (protected), шаблони типу і обробка особливих ситуацій. Всі ці розширення і доопрацювання були націлені на те, щоб С ++ стала мовою, на якому можна створювати і використовувати бібліотеки. Всі зміни описуються в [10,18,20,21 і 23].&lt;br /&gt;&lt;br /&gt;Інші розширення, введені за період між 1985 і одна тисяча дев&#39;ятсот дев&#39;яносто один р.р. (Такі як множинне спадкування, статичні функції-члени і чисті віртуальні функції), швидше за з&#39;явилися в результаті узагальнення досвіду програмування на С ++, ніж були почерпнуті з інших мов.&lt;br /&gt;Зроблені за ці шість років розширення мови перш за все були спрямовані на підвищення виразності С ++ як мови абстракції даних і об&#39;єктно-орієнтованого програмування взагалі і як засоби для створення високоякісних бібліотек до призначених для користувача типами даних зокрема.&lt;br /&gt;Приблизно в 1987 р стало очевидно, що робота по стандартизації С ++ неминуча і що слід негайно приступити до створення основи для неї [22].&lt;br /&gt;Фірма AT &amp;amp; T Bell Laboratories внесла основний внесок в цю роботу. Близько ста представників з близько 20 організацій вивчали і коментували те, що стало сучасною версією довідкового керівництва і вихідними матеріалами для ANSI по стандартизації. С ++. Нарешті, з ініціативи фірми Hewlett-Packard в грудні 1989 р в складі ANSI був утворений комітет X3J16. Очікується, що роботи по стандартизації С ++ в ANSI (Американський стандарт) стануть складовою частиною робіт по стандартизації силами ISO (Міжнародної організації зі стандартизації).&lt;br /&gt;&lt;br /&gt;С ++ розвивався одночасно з розвитком деяких фундаментальних класів.&lt;br /&gt;&lt;br /&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;Зауваження по проекту мови&lt;/h2&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; При розробці мови С ++ одним з найважливіших критеріїв вибору була простота. Коли виникало питання, що спростити: посібник з мови та іншу документацію або транслятор, - то вибір робили на користь першого. Величезне значення надавалося сумісності з мовою С, що завадило видалити його синтаксис.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; В С ++ немає типів даних і елементарних операцій високого рівня. Наприклад, не існує типу матриця з операцією звернення або типу рядок з операцією конкатенації. Якщо користувачеві знадобляться подібні типи, він може визначити їх в самій мові. Програмування на С ++ по суті зводиться до визначення універсальних або залежних від галузі застосування типів. Добре продуманий користувальницький тип відрізняється від вбудованого типу лише способом визначення, але не способом застосування.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; З мови виключалися можливості, які можуть привести до накладних витрат пам&#39;яті або часу виконання, навіть якщо вони безпосередньо не використовуються в програмі. Наприклад, було відкинуто пропозицію зберігати в кожному об&#39;єкті деяку службову інформацію. Якщо користувач описав структуру, яка містить дві величини, що займають по 16 розрядів, то гарантується, що вона поміститься в 32-х розрядний регістр.&lt;br /&gt;&lt;br /&gt;Мова С ++ проектувався для використання в досить традиційному середовищі, а саме: в системі програмування С операційної системи UNIX. Але є цілком обґрунтовані аргументи на користь використання С ++ в багатшою програмному середовищі. Такі можливості, як динамічне завантаження, розвинені системи трансляції та бази даних для зберігання визначень типів, можна успішно використовувати без шкоди для мови.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Типи С ++ і механізми упрятиванія даних розраховані на певний синтаксичний аналіз, проведений транслятором для виявлення випадкового псування даних. Вони не забезпечують секретності даних і захисту від навмисного порушення правил доступу до них. Однак, ці кошти можна вільно використовувати, не боячись накладних витрат пам&#39;яті і часу виконання програми. Враховано, що конструкція мови активно використовується тоді, коли вона не тільки витончено записується на ньому, а й цілком по кишені звичайних програм.&lt;br /&gt;&lt;br /&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;Порівняння мов С ++ і С&lt;/h2&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Вибір С в якості базової мови для З ++ пояснюється наступними його перевагами:&lt;br /&gt;&lt;br /&gt;(1) універсальність, стислість і відносно низький рівень;&lt;br /&gt;(2) адекватність більшості завдань системного програмування;&lt;br /&gt;(3) він йде в будь-якій системі і на будь-якій машині;&lt;br /&gt;(4) повністю підходить для програмного середовища UNIX.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; В С існують свої проблеми, але в мові, що розробляється &quot;з нуля&quot; вони з&#39;явилися б теж, а проблеми С, по крайней мере, добре відомі. Більш важливим є те, що орієнтація на С дозволила використовувати мову &quot;З з класами&quot; як корисний (хоча і не дуже зручний) інструмент протягом перших місяців роздумів про введення в С класів в стилі Симула.&lt;br /&gt;&lt;br /&gt;С ++ став використовуватися ширше, але в міру зростання його можливостей, що виходять за межі С, знову і знову виникала проблема сумісності. Ясно, що відмовившись від частини спадщини С, можна уникнути деяких проблем (див., Наприклад, [15]). Це не було зроблено з наступних причин:&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; (1) існують мільйони рядків програм на С, які можна поліпшити за допомогою С ++, але за умови, що повною перепису їх на мову С ++ не буде потрібно;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; (2) існують мільйони рядків бібліотечних функцій і службових програм на С, які можна було б використовувати в С ++ за умов сумісності обох мов на стадії зв&#39;язування і їх великого синтаксичного подібності;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; (3) існують сотні тисяч програмістів, які знають С; їм досить опанувати тільки новими засобами С ++ і не треба вивчати основ мови;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; (4) оскільки С і С ++ будуть використовуватися одними і тими ж людьми на одних і тих же системах багато років, відмінності між мовами повинні бути або мінімальними, або максимальними, щоб звести до мінімуму кількість помилок і непорозумінь. Опис С ++ було перероблено так, щоб гарантувати, що будь-яка допустима в обох мовах конструкція означала в них одне і те ж.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Як мова, так і стандартні бібліотеки С ++ проектувалися в розрахунку на переносимість. Наявні реалізації мови будуть працювати в більшості систем, що підтримують С. В програмах на С ++ можна використовувати бібліотеки С. Більшість службових програм, розрахованих на С, можна використовувати і в С ++.&lt;br /&gt;&lt;br /&gt;Мова С сам розвивався в останні кілька років, що частково було пов&#39;язано з розробкою С ++ [14]. Стандарт ANSI для С [27] містить, наприклад, синтаксис опису функцій, запозичений з мови &quot;З з класами&quot;. Відбувається взаємне запозичення, наприклад, тип покажчика void * був придуманий для ANSI З, а вперше реалізований в С ++. Як було обіцяно в першому виданні цієї книги, опис С ++ було доопрацьовано, щоб виключити невиправдані розбіжності. Тепер С ++ більш сумісний з мовою С, ніж це було спочатку ($$ R.18). В ідеалі С ++ повинен максимально наближатися до ANSI C, але не більше [9]. Стовідсоткової сумісності ніколи не було і не буде, оскільки це порушить надійність типів і узгодженість використання вбудованих і призначених для користувача типів, а ці властивості завжди були одними з головних для С ++.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Для вивчення С ++ не обов&#39;язково знати С. Програмування на С сприяє засвоєнню прийомів і навіть трюків, які при програмуванні на С ++ стають просто непотрібними. Наприклад, явне перетворення типу (приведення), в С ++ потрібно набагато рідше, ніж в С (див. &quot;Зауваження для програмістів на З&quot; нижче). Проте, хороші програми на мові С по суті є програмами на С ++. Наприклад, всі програми з класичного опису З [8] є програмами на С ++. У процесі вивчення С ++ буде корисний досвід роботи з будь-якою мовою зі статичними типами.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;Зауваження для програмістів на З&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Чим краще програміст знає С, тим важче буде для нього при програмуванні на С ++ відійти від стилю програмування на С. Так він втрачає потенційні переваги С ++.&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Але набагато важливіше намагатися думати про програму як про безліч взаємопов&#39;язаних понять, які подаються класами і об&#39;єктами, ніж представляти її як суму структур даних і функцій, щось роблять з цими даними.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;Ефективність і структура&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Розвиток мови С ++ відбувалося на базі мови С, і, за невеликим винятком, С був збережений як підмножини C ++. Базова мова С був спроектований таким чином, що є дуже тісний зв&#39;язок між типами, операціями, операторами і об&#39;єктами, з якими безпосередньо працює машина, тобто числами, символами і адресами. За винятком операцій new, delete і throw, а також перевіряється блоку, для виконання операторів і виразів С ++ не потрібно прихованої динамічної апаратної або програмної підтримки.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Спочатку мова З замислювався як конкурент асемблера, здатний витіснити його з основних і найбільш вимогливих до ресурсів завдань системного програмування. У проекті С ++ було вжито заходів, щоб успіхи З в цій області не опинилися під загрозою. Різниця між двома мовами перш все полягає в ступені уваги, що приділяється типам і структурам. Мова С виразний і в той же час поблажливий по відношенню до типів. Мова С ++ ще більш виразний, але такий виразності можна досягти лише тоді, коли типам приділяють велику увагу. Коли типи об&#39;єктів відомі, транслятор правильно розпізнає такі вирази, в яких інакше програмісту довелося б записувати операції з нудними подробицями. Крім того, знання типів дозволяє транслятору виявляти такі помилки, які в іншому випадку були б виявлені тільки при тестуванні. Відзначимо, що саме по собі використання суворої типізації мови для контролю параметрів функції, захисту даних від незаконного доступу, визначення нових типів і операцій не тягне додаткових витрат пам&#39;яті і збільшення часу виконання програми.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; У проекті С ++ особлива увага приділяється структуруванню програми. Це викликано збільшенням розмірів програм з часу появи С. Невелику програму (скажімо, не більше 1000 рядків) можна змусити з упертості працювати, порушуючи всі правила хорошого стилю програмування. Однак, діючи так, людина вже не зможе впоратися з великою програмою. Якщо у вашої програми в 10 000 рядків погана структура, то ви виявите, що нові помилки з&#39;являються в ній так само швидко, як видаляються старі. С ++ створювався з метою, щоб більшу програму можна було структурувати таким чином, щоб одній людині не довелося працювати з текстом в 25000 рядків. В даний час можна вважати, що ця мета повністю досягнута.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Існують, звичайно, програми ще більшого розміру. Однак ті з них, які дійсно використовуються, зазвичай можна розбити на кілька практично незалежних частин, кожна з яких має значно менший згаданого розмір. Природно, труднощі написання і супроводження програми визначається не тільки числом рядків тексту, а й складністю предметної області. Так що наведені тут числа, якими обґрунтовувалися наші міркування, не треба сприймати надто серйозно.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; На жаль, не всяку частину програми можна добре структурувати, зробити незалежною від апаратури, досить зрозумілою і т.д. В С ++ є кошти, безпосередньо і ефективно представляють апаратні можливості. Їх використання дозволяє позбутися від занепокоєння про надійність і простоті розуміння програми. Такі частини програми можна приховувати, надаючи надійний і простий інтерфейс з ними.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Природно, якщо С ++ використовується для великої програми, то це означає, що мова використовують групи програмістів. Корисну роль тут зіграють властиві мові модульність, гнучкість і строго типізовані інтерфейси. В С ++ є такий же хороший набір засобів для створення великих програм, як у багатьох мовах. Але коли програма стає ще більше, проблеми з її створення і супроводу переміщуються з області мови в більш глобальну область програмних засобів і управління проектом.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;У цій книзі основна увага приділяється методам створення універсальних засобів, корисних типів, бібліотек і т.д. Ці методи можна успішно застосовувати як для маленьких, так і для великих програм. Більш того, оскільки всі нетривіальні програми складаються з декількох в значній мірі незалежних одна від одної частин, методи програмування окремих частин знадобляться як системним, так і прикладним програмістам.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Може виникнути підозра, що запис програми з використанням докладної системи типів, збільшить розмір тексту. Для програми на С ++ це не так: програма на С ++, в якій описані типи формальних параметрів функцій, визначені класи і т.п., зазвичай буває навіть коротше свого еквівалента на С, де ці кошти не використовуються. Коли в програмі на С ++ використовуються бібліотеки, вона також виявляється коротше свого еквівалента на С, якщо, звичайно, він існує.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;КОРОТКИЙ ОГЛЯД С ++&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Мова програмування С ++ замислювався як мова, яка буде:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; - краще мови С;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; - підтримувати абстракцію даних;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- підтримувати об&#39;єктно-орієнтоване програмування.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; С ++ - мова загального призначення і задуманий для того, щоб справжні програмісти отримали задоволення від самого процесу програмування. За винятком другорядних деталей він містить мову С як підмножина. Мова С розширюється введенням гнучких і ефективних засобів, призначених для побудови нових типів. Програміст структурує свою задачу, визначивши нові типи, які точно відповідають поняттям предметної області завдання. Такий метод побудови програми зазвичай називають абстракцією даних. Інформація про типи міститься в деяких об&#39;єктах типів, визначених користувачем. З такими об&#39;єктами можна працювати надійно і просто навіть в тих випадках, коли їх тип не можна встановити на стадії трансляції. Програмування з використанням таких об&#39;єктів зазвичай називають об&#39;єктно-орієнтованим. Якщо цей метод застосовується правильно, то програми стають коротшими і зрозуміліше, а супровід їх спрощується.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Ключовим поняттям С ++ є клас. Клас - це визначений користувачем тип. Класи забезпечують упрятиваніе даних, їх ініціалізацію, неявне перетворення користувальницьких типів, динамічне завдання типів, контрольоване користувачем управління пам&#39;яттю і засоби для перевантаження операцій. У мові С ++ концепції контролю типів і модульної побудови програм реалізовані більш повно, ніж у С. Крім того, С ++ містить удосконалення, прямо з класами не зв&#39;язані: символічні константи, функції-підстановки, стандартні значення параметрів функцій, перевантаження імен функцій , операції керування вільною пам&#39;яттю і контрольний тип. В С ++ збережені всі можливості З ефективної роботи з основними об&#39;єктами, що відображають апаратну &quot;реальність&quot; (розряди, байти, слова, адреси і т.д.). Це дозволяє досить ефективно реалізовувати власні типи.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Об&#39;єктно-орієнтоване програмування - це метод програмування, спосіб написання &quot;хороших&quot; програм для безлічі завдань. Якщо цей термін має якийсь сенс, то він повинен мати на увазі: така мова програмування, який надає хороші можливості для об&#39;єктно-орієнтованого стилю програмування.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Не можна сказати, що одна мова кращий за інший тільки тому, що в ньому є можливості, які в іншому відсутні. Часто буває якраз навпаки. Тут важливіше не те, які можливості має мову, а то, наскільки наявні в ньому можливості підтримують обраний стиль програмування для певного кола завдань.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Мова С ++ проектувався для підтримки абстракції даних і об&#39;єктно-орієнтованого програмування на додаток до традиційного стилю С. Втім, це не означає, що мова вимагає якогось одного стилю програмування від всіх користувачів.&lt;/div&gt;&lt;div&gt;ПАРАДИГМИ ПРОГРАММИРОВАНИЯ:&lt;/div&gt;&lt;div&gt;процедурне програмування&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Первісну (і, можливо, найбільш використовуваної) парадигмою програмування було:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Визначте, які процедури вам потрібні; використовуйте кращі з відомих вам алгоритмів!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Наголос робився на обробку даних за допомогою алгоритму, що виробляє потрібні обчислення. Для підтримки цієї парадигми мови надавали механізм передачі параметрів і отримання результатів функцій. Література, яка відображає такий підхід, заповнена міркуваннями про способи передачі параметрів, про те, як розрізняти параметри різних типів, про різні види функцій (процедури, підпрограми, макроси, ...) і т.д. Першим процедурним мовою був Фортран, а Алгол60, Алгол68, Паскаль і С продовжили цей напрямок.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;модульне програмування&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Згодом при в проектуванні програм акцент змістився з організації процедур на організацію структур даних. Крім усього іншого це викликано і зростанням розмірів програм. Модулем зазвичай називають сукупність пов&#39;язаних процедур і тих даних, якими вони керують.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Парадигма програмування набула вигляду:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Визначте, які модулі потрібні; поділіть програму так, щоб дані були приховані в цих модулях&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Ця парадигма відома також як &quot;принцип приховування даних&quot;. Якщо в мові немає можливості згрупувати пов&#39;язані процедури разом з даними, то він погано підтримує модульний стиль програмування. Тепер метод написання &quot;хороших&quot; процедур застосовується для окремих процедур модуля.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Оскільки дані є єдина річ, яку хочуть приховувати, поняття упрятиванія даних тривіально розширюється до поняття упрятиванія інформації, тобто імен змінних, констант, функцій і типів, які теж можуть бути локальними в модулі. Хоча С ++ і не призначався спеціально для підтримки модульного програмування, класи підтримують концепцію модульності ($$ 5.4.3 і $$ 5.4.4). Крім цього С ++, природно, має вже продемонстровані можливості модульності, які є в С, тобто уявлення модуля як окремої одиниці трансляції.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;Абстракція даних&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Модульне програмування передбачає групування всіх даних одного типу навколо одного модуля, керуючого цим типом.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Звичайно таке рішення набагато краще, ніж хаос, властивий традиційним, неструктурованих рішень, але моделюються таким способом типи абсолютно очевидно відрізняються від &quot;справжніх&quot;, вбудованих. Кожен керуючий типом модуль повинен визначати свій власний алгоритм створення &quot;змінних&quot; цього типу. Не існує універсальних правил присвоювання ідентифікаторів, що позначають об&#39;єкти такого типу. У &quot;змінних&quot; таких типів не існує імен, які були б відомі транслятору або іншим системним програмам, і ці &quot;змінні&quot; не підкоряються звичайними правилами областей видимості і передачі параметрів.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Тип, що реалізовується керуючим їм модулем, з багатьох важливих аспектів істотно відрізняється від вбудованих типів. Такі типи не отримують тієї підтримки з боку транслятора (різного виду контроль), яка забезпечується для вбудованих типів. Проблема тут в тому, що програма формулюється в термінах невеликих (одно-два слова) дескрипторів об&#39;єктів, а не в термінах самих об&#39;єктів. Це означає, що транслятор не зможе відловити дурні, очевидні помилки.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Іншими словами, концепція модульності, що підтримує парадигму упрятиванія даних, не забороняє такий стиль програмування, але і не сприяє йому.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; У мовах Ада, Clu, С ++ і подібних до них ця трудність долається завдяки тому, що користувачеві дозволяється визначати свої типи, які трактуються в мові практично так само, як вбудовані. Такі типи зазвичай називають абстрактними типами даних, хоча краще, мабуть, їх називати просто для користувача. Більш суворим визначенням абстрактних типів даних було б їх математичне визначення. Якби вдалося його дати, то, що ми називаємо в програмуванні типами, було б конкретним поданням дійсно абстрактних сутностей.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Парадигму ж програмування можна висловити тепер так:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Визначте, які типи вам потрібні; надайте повний набір операцій для кожного типу.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Якщо немає необхідності в різних об&#39;єктах одного типу, то стиль програмування, суть якого зводиться до упрятиванія даних, і проходження якого забезпечується за допомогою концепції модульності, цілком адекватний цій парадигмі.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Більшість модулів (хоча і не всі) краще визначати як призначені для користувача типи.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;Межі абстракції даних&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Абстрактний тип даних визначається як якийсь &quot;чорний ящик&quot;. Після свого визначення він по суті ніяк не взаємодіє з програмою. Його ніяк не можна пристосувати для нових цілей, не змінюючи визначення. У цьому сенсі це негнучке рішення.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Об&#39;єктно-орієнтоване програмування&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Об&#39;єктно-орієнтоване програмування найкращим чином надає технологію управління елементами будь-якої складності, створюючи умови для багаторазового використання програмних компонентів і об&#39;єднання даних з методами їх обробки.&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Суть об&#39;єктно-орієнтованого програмування полягає у використанні концепції &quot;об&#39;єктів&quot;, тобто, скоріше, образів, ніж даних.&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Керівна ідея цього підходу полягає в прагненні зв&#39;язати дані з обробними ці дані методами в єдине ціле - об&#39;єкт. Об&#39;єкти мають характеристики і можливості.&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Фактично об&#39;єктно-орієнтоване програмування можна розглядати як модульне програмування нового рівня, коли замість багато в чому випадкового, механічного об&#39;єднання процедур і даних акцент робиться на їх смислове зв&#39;язок.&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Об&#39;єктна модель здатна однаково добре описати як елементи управління графічного інтерфейсу (типу кнопок і списків, що розкриваються), так і реальні об&#39;єкти (велосипед, літак, кота і воду). Таким чином, завдання об&#39;єктно-орієнтованого програмування полягає в тому, щоб правильно уявити ці об&#39;єкти на мові програмування.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; У мові C ++ повністю підтримуються принципи об&#39;єктно-орієнтованого програмування, включаючи три кити, на яких воно складається: інкапсуляцію, успадкування і поліморфізм.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;інкапсуляція&lt;/div&gt;&lt;div&gt;Поєднання структур даних з функціями (методами), призначеними для маніпулювання цими даними. Інкапсуляція досягається шляхом введення класу нового механізму структурування та типізації даних.&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;спадкування&lt;/div&gt;&lt;div&gt;Створення нових, похідних класів, які успадковують дані і функції від одного або декількох раніше визначених базових класів. При цьому можливо перевизначення або додавання нових даних і методів. В результаті створюється ієрархія класів.&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;поліморфізм&lt;/div&gt;&lt;div&gt;Присвоєння методом єдиного імені або ідентифікатора в рамках ієрархії класів таким чином, щоб будь-який клас в ієрархії мав можливість по-своєму виконувати пов&#39;язані з цим методом дії.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Одночасно з появою і деталізацією концепції з&#39;явилися і засновані на ній мови програмування. Одним з перших з&#39;явився алгоритмічний мову Modula 2. Мова програмування Turbo Pascal, розроблений фірмою Borland, починаючи з версії 5.5 став об&#39;єктно-орієнтованим. Але найбільш послідовно втілення концепція об&#39;єктно-орієнтованого програмування знайшла в алгоритмічній мові C ++.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Нехай, наприклад, потрібно визначити для графічної системи тип shape (фігура). Проблема полягає в тому, що ми не розрізняємо загальні властивості фігур (наприклад, фігура має колір, її можна намалювати і т.д.) і властивості конкретної фігури (наприклад, окружність - це така фігура, яка має радіус, вона зображується за допомогою функції , яка малює дуги і т.д.).&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Суть об&#39;єктно-орієнтованого програмування в тому, що воно дозволяє виражати ці відмінності і використовує їх. Мова, який має конструкції для вираження і використання подібних відмінностей, підтримує об&#39;єктно-орієнтоване програмування. Всі інші мови не підтримують його. Тут основну роль відіграє механізм успадкування, запозичений з мови Симула.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Ті функції, для яких можна визначити заявлений інтерфейс, але реалізація яких (тобто тіло з операторної частиною) можлива тільки для конкретних фігур, відзначені службовим словом virtual (віртуальні). У Симула і С ++ віртуальність функції означає: &quot;функція може бути визначена пізніше в класі, похідному від даного&quot;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Визначте, який клас вам необхідний; надайте повний набір операцій для кожного класу; спільність класів висловіть явно за допомогою наслідування.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Якщо спільність між класами відсутня, цілком достатньо абстракції даних. Наскільки може бути застосовано об&#39;єктно-орієнтоване програмування для даної галузі застосування визначається ступенем спільності між різними типами, яка дозволяє використовувати успадкування та віртуальні функції. У деяких областях, таких, наприклад, як інтерактивна графіка, є широкий простір для об&#39;єктно-орієнтованого програмування. В інших областях, в яких використовуються традиційні арифметичні типи і обчислення над ними, важко знайти застосування для більш розвинених стилів програмування, ніж абстракція даних. Тут засоби, що підтримують об&#39;єктно-орієнтоване програмування, очевидно, надлишкові.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Знаходження спільності серед окремих типів системи являє собою нетривіальний процес. Ступінь такої спільності залежить від способу проектування системи. В процесі проектування виявлення спільності класів має бути постійною метою. Вона досягається двома способами: або проектуванням спеціальних класів, використовуваних як &quot;цеглини&quot; при побудові інших, або пошуком схожих класів для виділення їх загальної частини в один базовий клас.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Для подання на С ++ безлічі взаємозалежних класів можна використовувати дружні класи ($$ 5.4.1).&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Ще один спосіб вираження спільності понять в мові надають шаблони типу. Шаблонний клас задає ціле сімейство класів. Наприклад, шаблонний клас список задає класи виду &quot;список об&#39;єктів T&quot;, де T може бути довільним типом. Таким чином, шаблонний тип вказує, як виходить новий тип із заданого в якості параметра. Найтиповіші шаблонні класи - це контейнери, зокрема, списки, масиви і асоціативні масиви.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Покращений С (підтримка процедурного і модульного програмування)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Мінімальна підтримка процедурного програмування включає функції, арифметичні операції, які вибирають оператори і цикли. Крім цього повинні бути надані операції вводу-виводу. Базові мовні засоби С ++ успадкував від С (включаючи покажчики), а операції введення-виведення надаються бібліотекою.&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Сама зародкова концепція модульності реалізується за допомогою механізму роздільного трансляції.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;Підтримка абстракції даних&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Підтримка програмування з абстракцією даних в основному зводиться до можливості визначити набір операцій (функції і операції) над типом. Всі звернення до об&#39;єктів цього типу обмежуються операціями з заданого набору. Однак, маючи такі можливості, програміст скоро виявляє, що для зручності визначення і використання нових типів потрібні ще деякі розширення мови. Хорошим прикладом такого розширення є&lt;/div&gt;&lt;div&gt;перевантаження операцій.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;Підтримка об&#39;єктно-орієнтованого програмування&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Підтримку об&#39;єктно-орієнтованого програмування забезпечують класи разом з механізмом успадкування, а також механізм виклику функцій-членів в залежності від істинного типу об&#39;єкта (справа в тому, що можливі випадки, коли цей тип невідомий на стадії трансляції). Особливо важливу роль відіграє механізм виклику функцій-членів. Не менш важливі засоби, що підтримують абстракцію даних (про них ми говорили раніше). Всі доводи на користь абстракції даних і базуються на ній методів, які дозволяють природно і красиво працювати з типами, діють і для мови, що підтримує об&#39;єктно-орієнтоване програмування. Успіх обох методів залежить від способу побудови типів, від того, наскільки вони прості, гнучкі та ефективні. Метод об&#39;єктно-орієнтованого програмування дозволяє визначати більш загальні і гнучкі призначені для користувача типи в порівнянні з тими, які виходять, якщо використовувати тільки абстракцію даних.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Отже, ми вказали, яку мінімальну підтримку повинен забезпечувати мову програмування для процедурного програмування, для упрятиванія даних, абстракції даних і об&#39;єктно-орієнтованого програмування.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Межі досконалості&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Мова С ++ проектувався як &quot;кращий С&quot;, що підтримує абстракцію даних і об&#39;єктно-орієнтоване програмування. При цьому він повинен бути придатним для більшості основних завдань системного програмування.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Основні труднощі для мови, який створювався в розрахунку на методи упрятиванія даних, абстракції даних і об&#39;єктно-орієнтованого програмування, в тому, що для того, щоб бути мовою загального призначення, він повинен:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; - йти на традиційних машинах;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; - співіснувати з традиційними операційними системами і мовами;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; - змагатися з традиційними мовами програмування в ефективності&lt;/div&gt;&lt;div&gt;виконання програми;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; - бути придатним у всіх основних областях додатки.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Це означає, що повинні бути можливості для ефективних числових операцій (арифметика з плаваючою точкою без особливих накладних витрат, інакше користувач вважатиме за краще Фортран) і засоби такого доступу до пам&#39;яті, який дозволить писати цією мовою драйвери пристроїв. Крім того, треба вміти писати виклики функцій в досить незвичній записи, прийнятої для звернень в традиційних операційних системах. Нарешті, повинна бути можливість з мови, що підтримує об&#39;єктно-орієнтоване програмування, викликати функції, написані на інших мовах, а з інших мов викликати функцію на цій мові, що підтримує об&#39;єктно-орієнтоване програмування.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Далі, не можна розраховувати на широке використання шуканого мови програмування як мови загального призначення, якщо реалізація його цілком покладається на можливості, які відсутні в машинах з традиційною архітектурою.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Якщо не вводити в мову можливості низького рівня, то доведеться для основних завдань більшості областей додатки використовувати деякі мови низького рівня, наприклад С або асемблер. Але С ++ проектувався з розрахунком, що в ньому можна зробити все, що допустимо на С, причому без збільшення часу виконання. Взагалі, С ++ проектувався, виходячи з принципу, що не повинно виникати ніяких додаткових витрат часу і пам&#39;яті, якщо тільки цього явно не побажає сам програміст.&lt;/div&gt;&lt;/div&gt;Мова проектувався в розрахунку на сучасні методи трансляції, які забезпечують перевірку узгодженості програми, її ефективність і компактність подання. Основним засобом боротьби зі складністю програм бачиться, перш за все, строгий контроль типів і інкапсуляція. Особливо це стосується великих програм, що створюються багатьма людьми. Користувач може не бути одним із творців таких програм, і може взагалі не бути програмістом. Оскільки ніяку справжню програму можна написати без підтримки бібліотек, що створюються іншими програмістами, останнє зауваження можна віднести практично до всіх програм.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; С ++ проектувався для підтримки того принципу, що будь-яка програма є модель деяких існуючих в реальності понять, а клас є конкретним поданням поняття, взятого з області додатки ($$ 12.2). Тому класи пронизують всю програму на С ++, і накладаються жорсткі вимоги на гнучкість поняття класу, компактність об&#39;єктів класу і ефективність їх використання. Якщо працювати з класами буде незручно або занадто накладно, то вони просто не будуть використовуватися, і програми виродяться в програми на &quot;кращому С&quot;. Значить користувач не зможе насолодитися тими можливостями, заради яких, власне, і створювався мову.&lt;br /&gt;&lt;br /&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;Висновок&lt;/h2&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Як було обіцяно в першому виданні книги «Бйорн Страуструп. Мова програмування С ++ », запити користувачів визначили розвиток С ++. Його направляв досвід широкого кола користувачів, що працюють в різних областях програмування. За шість років, що відокремлюють нас від першого видання опису С ++, число користувачів зросла в сотні разів. За ці роки були засвоєні багато уроки, були запропоновані і підтвердили практикою своє право на існування різні прийоми програмування.&lt;br /&gt;&amp;nbsp; &amp;nbsp; Мова C ++ з&#39;явився потужним і стрімким ривком у розвитку програмування. C ++ і донині займає панівне становище серед мов програмування в світі. Величезна безліч професійних програмістів використовує саме його при розробці різного роду проектів. Очевидно, ця мова буде зберігати своє солідне становище ще не один рік, при цьому як і раніше розвиваючись і вдосконалюючись.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://pm11blet.blogspot.com/feeds/3643945423223759138/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='https://pm11blet.blogspot.com/2018/05/c.html#comment-form' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8499211462974489983/posts/default/3643945423223759138'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8499211462974489983/posts/default/3643945423223759138'/><link rel='alternate' type='text/html' href='https://pm11blet.blogspot.com/2018/05/c.html' title=''/><author><name>Юра Дмитрів</name><uri>https://plus.google.com/112833109074690816809</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-kI9Jym0QXrQ/AAAAAAAAAAI/AAAAAAAAAC0/_hYGgINMxuk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://1.bp.blogspot.com/-9PjrmFamcD8/WwUEiE8Nw6I/AAAAAAAADCA/3U7GbyHMShEsT0_df6UXFeeT2EQzSOdegCPcBGAYYCw/s72-c/images.png" height="72" width="72"/><thr:total>0</thr:total></entry></feed>