додати матеріал


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

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

ФСПО МГАПІ


Реферат з інформаційних технологій

«C + +»



Виконав: студент групи ВМ
Zabot
Перевірив: викладач
Корольов Н. А.


Москва 2003


Зміст


Чому C + + ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. 1

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

Зауваження щодо проекту мови ... ... ... ... ... ... .... ... .. ... ... ... ... ... ... ... ... .... ... 3

Порівняння мов С + + і С ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 4

Ефективність і структура ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .... 6

КОРОТКИЙ ОГЛЯД С + + ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 8

ПАРАДИГМИ ПРОГРАМУВАННЯ:. ... ... ... ... ... ... ... ... ... ... ... ... 9

Процедурне програмування ... .. ... ... ... ... ... ... ... .... ... .. 9

Модульне програмування ... ... ... ... .... ... ... ... ... ... ... ... 9

Абстракція даних ... ... ... ... ... ... ... ... ... ... ... ... ... .. ... .... ... ... 10

Об'єктно-орієнтоване програмування .. ... ... ... 11

Поліпшений С (підтримка процедурного і модульного програмування) ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .... 13

Підтримка абстракції даних ... ... ... ... ... ... ... ... .... ... ... ... ... ... .. 14

Підтримка об'єктно-орієнтованого програмування 14

Межі досконалості ... ... ... ... ... ... ... ... ... ... ... ... ... .... .... ... ... .. ... ... ... 15

Висновок ... ... ... ... ... ... .... ... ... ... ... ... ... ... .... .... ... ... ... ... ... ... .. ... .... .... 16



Чому C + +

С + + в даний час вважається панівною мовою, використовуваним для розробки комерційних програмних продуктів. В останні роки це панування злегка затряслося внаслідок аналогічних претензій з боку такої мови програмування, як Java, але маятник громадської думки гойднувся в інший бік, і багато програмістів, які кинули С + + заради Jаvа, останнім часом поспішили повернутися до своєї колишньої прихильності. У будь-якому випадку ці дві мови настільки схожі, що, вивчивши один з них, ви автоматично освоюєте 90% іншого.
С # - це нова мова, розроблений Мiсгоsоft для мережевої платформи. По суті С # є різновидом С + +, і незважаючи на ряд принципових відмінностей, мови С # і С + + збігаються приблизно на 90%. Ймовірно, пройде чимало часу, перш ніж мову С # складе серйозну конкуренцію мови С + +; але навіть якщо це й станеться, то знання мови С + + виявиться істотною перевагою.
С + + є мовою програмування загального призначення. Природна для нього область застосування - системне програмування, що розуміється в широкому сенсі цього слова. Крім того, С + + успішно використовується в багатьох областях програми, що далеко виходять за зазначені рамки. Реалізації С + + тепер є на всіх машинах, починаючи з самих скромних мікрокомп'ютерів - до найбільших супер-ЕОМ, і практично для всіх операційних систем.

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


Бьерн Страуструп є розробником мови С + + і творцем першого транслятора. Він - співробітник науково-дослідного обчислювального центру AT & T Bell Laboratories в Мюррей Хілл (Нью-Джерсі, США). Він отримав звання магістра математики та обчислювальної техніки в університеті м. Аарус (Данія), а лікарське звання з обчислювальної техніки в Кембриджського університету (Англія). Він спеціалізується в галузі розподілених систем, операційних систем, моделювання та програмування. Разом з М. А. Елліс він є автором повного керівництва по мові С + + - "Керівництво по С + + з примітками".
Безумовно С + + багатьом зобов'язаний мови С [8], який зберігається як його підмножина. Збережено і усі властиві З засоби низького рівня, призначені для вирішення найбільш нагальних завдань системного програмування. С, у свою чергу, багато чим зобов'язаний своєму попередникові мови BCPL [13]. Коментар мови BCPL був відновлений в С + +. Ще одним джерелом натхнення була мова SIMULA-67 [2,3]; саме з нього була запозичена концепція класів (разом c похідними класами і віртуальними функціями). Можливість в С + + перевантаження операцій і свобода розміщення описів скрізь, де може зустрічатися оператор, нагадують мову Алгол-68 [24].
Більш ранні версії мови, що отримали назву "С з класами" [16], використовувалися, починаючи з 1980 р. Ця мова виникла тому, що автору потрібно написати програми моделювання, керовані перериваннями. Мова SIMULA-67 ідеально підходить для цього, якщо не враховувати ефективність. Мова "С з класами" використовувався для великих завдань моделювання. Суворій перевірці піддалися тоді можливості написання на ньому програм, для яких критичні ресурси часу і пам'яті. У цій мові бракувало перевантаження операцій, посилань, віртуальних функцій і багатьох інших можливостей. Вперше С + + вийшов за межі дослідницької групи, в якій працював автор, в липні 1983 р., однак тоді багато можливості С + + ще не були розроблені.
Назва С + + (Сі плюс плюс), було придумано Ріком Маскітті влітку 1983 р. Ця назва відображає еволюційний характер змін мови С. Позначення + + відноситься до операції нарощування С. Трохи більш короткий ім'я С + є синтаксичної помилкою. Крім того, воно вже було використано як назва зовсім іншої мови. Знавці семантики С знаходять, що С + + гірше, ніж + + С. Мова не отримав назви D, оскільки він є розширенням С, і в ньому не робиться спроб вирішити будь-які проблеми за рахунок відмови від можливостей С. Ще одну цікаву інтерпретацію назви С + + можна знайти у додатку до [12].
Спочатку С + + був задуманий для того, щоб автора і його друзям не треба було програмувати на асемблері, С або інших сучасних мовах високого рівня. Основне його призначення - спростити і зробити більш приємним процес програмування для окремого програміста. До недавнього часу не було плану розробки С + + на папері. Проектування, реалізація та документування йшли паралельно. Ніколи не існувало "проекту С + +" або "Комітету з розробки С + +". Тому мова розвивалася і продовжує розвиватися так, щоб подолати всі проблеми, з якими зіткнулися користувачі. Поштовхами до розвитку служать також і обговорення автором всіх проблем з його друзями та колегами.
З моменту виходу в світ першого видання цієї книги мову С + + піддався істотним змінам і уточненням. В основному це стосується вирішення неоднозначності при перевантаженні, зв'язуванні та управлінні пам'яттю. Разом з тим, були внесені незначні зміни з метою збільшити сумісність з мовою С. Були також введені деякі узагальнення і суттєві розширення, як то: множинне успадкування, функції-члени зі специфікаціями static і const, захищені члени (protected), шаблони типу і обробка особливих ситуацій. Всі ці розширення та доопрацювання були націлені на те, щоб С + + стала мовою, на якому можна створювати і використовувати бібліотеки. Всі зміни описуються в [10,18,20,21 і 23].
Інші розширення, введені за період між 1985 і 1991 р.р. (Такі як множинне спадкування, статичні функції-члени і чисті віртуальні функції), швидше за з'явилися в результаті узагальнення досвіду програмування на С + +, ніж були почерпнуті з інших мов.
Зроблені за ці шість років розширення мови насамперед були спрямовані на підвищення виразності С + + як мови абстракції даних і об'єктно-орієнтованого програмування взагалі і як засобу для створення високоякісних бібліотек з користувача типами даних зокрема.
Приблизно в 1987 р. стало очевидно, що робота зі стандартизації С + + неминуча і що слід негайно приступити до створення основи для неї [22].
Фірма AT & T Bell Laboratories внесла основний внесок в цю роботу. Близько ста представників з порядка 20 організацій вивчали й коментували те, що стало сучасною версією довідкового керівництва і вихідними матеріалами для ANSI по стандартизації. С + +. Нарешті, з ініціативи фірми Hewlett-Packard в грудні 1989 р. у складі ANSI був утворений комітет X3J16. Очікується, що роботи зі стандартизації С + + в ANSI (американський стандарт) стануть складовою частиною робіт по стандартизації силами ISO (Міжнародної організації зі стандартизації).
С + + розвивався одночасно з розвитком деяких фундаментальних класів.

Зауваження щодо проекту мови


При розробці мови С + + одним з найважливіших критеріїв вибору була простота. Коли виникало питання, що спростити: посібник з мови та іншу документацію або транслятор, - то вибір робили на користь першого. Величезне значення надавалося сумісності з мовою С, що завадило видалити його синтаксис.
У С + + немає типів даних і елементарних операцій високого рівня. Наприклад, не існує типу матриця з операцією звернення або типу рядок з операцією конкатенації. Якщо користувачеві знадобляться подібні типи, він може визначити їх у самій мові. Програмування на С + + по суті зводиться до визначення універсальних або залежних від галузі застосування типів. Добре продуманий тип відрізняється від вбудованого типу лише способом визначення, але не способом застосування.
З мови виключалися можливості, які можуть призвести до накладних витрат пам'яті або часу виконання, навіть якщо вони безпосередньо не використовуються у програмі. Наприклад, було відкинуто пропозицію зберігати в кожному об'єкті деяку службову інформацію. Якщо користувач описав структуру, що містить дві величини, що займають по 16 розрядів, то гарантується, що вона поміститься в 32-х розрядний регістр.
Мова С + + проектувався для використання в досить традиційному середовищі, а саме: в системі програмування С операційної системи UNIX. Але є цілком обгрунтовані доводи на користь використання С + + в багатшій програмному середовищі. Такі можливості, як динамічне завантаження, розвинені системи трансляції і бази даних для зберігання визначень типів, можна успішно використовувати без шкоди для мови.
Типи С + + і механізми упрятиванія даних розраховані на певний синтаксичний аналіз, проведений транслятором для виявлення випадкового псування даних. Вони не забезпечують секретності даних і захисту від навмисного порушення правил доступу до них. Однак, ці кошти можна вільно використовувати, не боячись накладних витрат пам'яті і часу виконання програми. Враховано, що конструкція мови активно використовується тоді, коли вона не тільки витончено записується на ньому, але і цілком по засобах звичайних програм.

Порівняння мов С + + і С


Вибір С в якості базової мови для С + + пояснюється наступними його перевагами:
(1) універсальність, стислість і відносно низький рівень;
(2) адекватність більшості завдань системного програмування;
(3) він іде в будь-якій системі і на будь-якій машині;
(4) повністю підходить для програмного середовища UNIX.
В С існують свої проблеми, але в мові, що розробляється, "з нуля" вони з'явилися б теж, а проблеми С, принаймні, добре відомі. Більш важливо те, що орієнтація на С дозволила використовувати мову "С з класами" як корисний (хоча і не дуже зручний) інструмент протягом перших місяців роздумів про введення в С класів у стилі Симула.
С + + став використовуватися ширше, але у міру зростання його можливостей, що виходять за межі С, знову і знову виникала проблема сумісності. Ясно, що відмовившись від частини спадщини З, можна уникнути деяких проблем (див., наприклад, [15]). Це не було зроблено з наступних причин:
(1) існують мільйони рядків програм на С, які можна поліпшити за допомогою С + +, але за умови, що повної переписом їх на мову С + + не потрібно;
(2) існують мільйони рядків бібліотечних функцій та службових програм на С, які можна було б використовувати в С + + за умов сумісності обох мов на стадії зв'язування і їх великої синтаксичного подібності;
(3) існують сотні тисяч програмістів, які знають С; їм достатньо опанувати тільки новими засобами С + + і не треба вивчати основ мови;
(4) оскільки С і С + + будуть використовуватися одними і тими ж людьми на одних і тих же системах багато років, відмінності між мовами повинні бути або мінімальними, або максимальними, щоб звести до мінімуму кількість помилок і непорозумінь. Опис С + + було перероблено так, щоб гарантувати, що будь-яка допустима в обох мовах конструкція означала в них одне і те ж.
Як мова, так і стандартні бібліотеки С + + проектувалися в розрахунку на переносимість. Наявні реалізації мови будуть працювати в більшості систем, що підтримують С. У програмах на С + + можна використовувати бібліотеки С. Більшість службових програм, розрахованих на С, можна використовувати і в С + +.
Мова С сам розвивався в останні кілька років, що частково було пов'язане з розробкою С + + [14]. Стандарт ANSI для С [27] містить, наприклад, синтаксис опису функцій, запозичений з мови "С з класами". Відбувається взаємне запозичення, наприклад, тип покажчика void * був придуманий для ANSI З, а вперше реалізований в С + +. Як було обіцяно в першому виданні цієї книги, опис С + + було доопрацьовано, щоб виключити невиправдані розбіжності. Тепер С + + більш сумісний з мовою С, ніж це було спочатку ($ $ R.18). В ідеалі С + + повинен максимально наближатися до ANSI C, але не більше [9]. Стовідсоткової сумісності ніколи не було і не буде, оскільки це порушить надійність типів і узгодженість використання вбудованих і призначених для користувача типів, а ці властивості завжди були одними з головних для С + +.
Для вивчення С + + не обов'язково знати С. Програмування на С сприяє засвоєнню прийомів і навіть трюків, які при програмуванні на С + + стають просто непотрібними. Наприклад, явне перетворення типу (приведення), в С + + потрібно набагато рідше, ніж в С (див. "Зауваження для програмістів на С" нижче). Тим не менш, гарні програми на мові С по суті є програмами на С + +. Наприклад, всі програми з класичного опису З [8] є програмами на С + +. У процесі вивчення С + + буде корисний досвід роботи з будь-якою мовою зі статичними типами.

Зауваження для програмістів на С


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

Ефективність та структура

Розвиток мови С + + відбувалося на базі мови С, і, за невеликим винятком, С був збережений як підмножини C + +. Базова мова С був спроектований таким чином, що є дуже тісний зв'язок між типами, операціями, операторами та об'єктами, з якими безпосередньо працює машина, тобто числами, символами та адресами. За винятком операцій new, delete і throw, а також перевіряється блоку, для виконання операторів і виразів С + + не потрібно прихованої динамічної апаратної або програмної підтримки.
Спочатку мова З замислювався як конкурент асемблера, здатний витіснити його з основних і найбільш вимогливих до ресурсів задач системного програмування. У проекті С + + було вжито заходів, щоб успіхи С в цій області не опинилися під загрозою. Різниця між двома мовами раніше все складається в ступені уваги, що приділяється типам і структурам. Мова С виразний і в той же час поблажливий по відношенню до типів. Мова С + + ще більш виразна, але такої виразності можна досягти лише тоді, коли типам приділяють велику увагу. Коли типи об'єктів відомі, транслятор правильно розпізнає такі вирази, в яких інакше програмісту довелося б записувати операції з втомливими подробицями. Крім того, знання типів дозволяє транслятору виявляти такі помилки, які в іншому випадку були б виявлені тільки при тестуванні. Відзначимо, що саме по собі використання суворої типізації мови для контролю параметрів функції, захисту даних від незаконного доступу, визначення нових типів і операцій не вабить додаткових витрат пам'яті та збільшення часу виконання програми.
У проекті С + + особлива увага приділяється структуруванню програми. Це викликано збільшенням розмірів програм з часу появи С. Невелику програму (скажімо, не більше 1000 рядків) можна змусити з упертості працювати, порушуючи всі правила хорошого стилю програмування. Однак, діючи так, людина вже не зможе впоратися з великою програмою. Якщо у вашої програми в 10 000 рядків погана структура, то ви виявите, що нові помилки з'являються в ній так само швидко, як видаляються старі. С + + створювався з метою, щоб велику програму можна було структурувати таким чином, щоб одній людині не довелося працювати з текстом в 25000 рядків. В даний час можна вважати, що ця мета повністю досягнута.
Існують, звичайно, програми ще більшого розміру. Однак ті з них, які дійсно використовуються, зазвичай можна розбити на кілька практично незалежних частин, кожна з яких має значно менший згаданого розмір. Природно, труднощі написання та супроводу програми визначається не тільки числом рядків тексту, але й складністю предметної області. Так що наведені тут числа, якими обгрунтовувалися наші міркування, не треба сприймати надто серйозно.
На жаль, не всяку частина програми можна добре структурувати, зробити незалежною від апаратури, досить зрозумілою і т.д. У С + + є засоби, які безпосередньо й ефективно представляють апаратні можливості. Їх використання дозволяє позбутися від занепокоєння про надійність і простоті розуміння програми. Такі частини програми можна приховувати, надаючи надійний і простий інтерфейс з ними.
Природно, якщо С + + використовується для великої програми, то це означає, що мова використовують групи програмістів. Корисну роль тут відіграють властиві мові модульність, гнучкість і строго типізовані інтерфейси. У С + + є такий же гарний набір засобів для створення великих програм, як у багатьох мовах. Але коли програма стає ще більше, проблеми з її створення і супроводу переміщуються з області мови в більш глобальну область програмних засобів і управління проектом.
У цій книзі основна увага приділяється методам створення універсальних засобів, корисних типів, бібліотек і т.д. Ці методи можна успішно застосовувати як для маленьких, так і для великих програм. Більше того, оскільки всі нетривіальні програми складаються з декількох значною мірою незалежних один від одного частин, методи програмування окремих частин стануть в нагоді як системним, так і прикладним програмістам.
Може виникнути підозра, що запис програми з використанням докладної системи типів, збільшить розмір тексту. Для програми на С + + це не так: програма на С + +, в якій описані типи формальних параметрів функцій, визначені класи тощо, зазвичай буває навіть коротше свого еквівалента на С, де ці кошти не використовуються. Коли в програмі на С + + використовуються бібліотеки, вона також виявляється коротше свого еквівалента на С, якщо, звичайно, він існує.

КОРОТКИЙ ОГЛЯД С + +


Мова програмування С + + замислювався як мова, яку буде:
- Краще мови С;
- Підтримувати абстракцію даних;
- Підтримувати об'єктно-орієнтоване програмування.
С + + - мова загального призначення і задуманий для того, щоб справжні програмісти отримали задоволення від самого процесу програмування. За винятком другорядних деталей він містить мова С як підмножина. Мова С розширюється введенням гнучких і ефективних засобів, призначених для побудови нових типів. Програміст структурує своє завдання, визначивши нові типи, які точно відповідають поняттям предметної області завдання. Такий метод побудови програми зазвичай називають абстракцією даних. Інформація про типи міститься в деяких об'єктах типів, визначених користувачем. З такими об'єктами можна працювати надійно і просто навіть у тих випадках, коли їх тип не можна встановити на стадії трансляції. Програмування з використанням таких об'єктів зазвичай називають об'єктно-орієнтованим. Якщо цей метод застосовується правильно, то програми стають коротшими і зрозуміліше, а супровід їх спрощується.
Ключовим поняттям С + + є клас. Клас - це визначений користувачем тип. Класи забезпечують упрятиваніе даних, їх ініціалізацію, неявне перетворення користувача типів, динамічне завдання типів, контрольоване користувачем управління пам'яттю і засоби для перевантаження операцій. У мові С + + концепції контролю типів і модульної побудови програм реалізовані більш повно, ніж у С. Крім того, С + + містить удосконалення, прямо з класами не пов'язані: символічні константи, функції-підстановки, стандартні значення параметрів функцій, перевантаження імен функцій , операції керування вільною пам'яттю і контрольний тип. У С + + збережені всі можливості З ефективної роботи з основними об'єктами, що відображають апаратну "реальність" (розряди, байти, слова, адреси і т.д.). Це дозволяє досить ефективно реалізовувати власні типи.
Об'єктно-орієнтоване програмування - це метод програмування, спосіб написання "хороших" програм для безлічі завдань. Якщо цей термін має якийсь сенс, то він повинен мати на увазі: така мова програмування, який надає гарні можливості для об'єктно-орієнтованого стилю програмування.
Не можна сказати, що одна мова краще іншого тільки тому, що в ньому є можливості, які в іншому відсутні. Часто буває якраз навпаки. Тут більш важливо не те, які можливості має мову, а те, наскільки наявні в ньому можливості підтримують обраний стиль програмування для певного кола завдань.
Мова С + + проектувався для підтримки абстракції даних і об'єктно-орієнтованого програмування на додаток до традиційного стилю С. Втім, це не означає, що мова потребує якогось одного стилю програмування від всіх користувачів.

ПАРАДИГМИ ПРОГРАМУВАННЯ:

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


Первісною (і, можливо, найбільш використовуваної) парадигмою програмування було:
Визначте, які процедури вам потрібні; використовуйте кращі з відомих вам алгоритмів!
Наголос робився на обробку даних за допомогою алгоритму, що виробляє потрібні обчислення. Для підтримки цієї парадигми мови надавали механізм передачі параметрів і одержання результатів функцій. Література, що відображає такий підхід, заповнена міркуваннями про способи передачі параметрів, про те, як розрізняти параметри різних типів, про різні види функцій (процедури, підпрограми, макрокоманди, ...) і т.д. Першим процедурною мовою був Фортран, а Алгол60, Алгол68, Паскаль і С продовжили цей напрямок.

Модульне програмування

З часом при в проектуванні програм акцент змістився з організації процедур на організацію структур даних. Крім усього іншого це викликано і зростанням розмірів програм. Модулем зазвичай називають сукупність пов'язаних процедур і тих даних, якими вони керують.
Парадигма програмування набула вигляду:
Визначте, які модулі потрібні; поділіть програму так, щоб дані були приховані в цих модулях
Ця парадигма відома також як "принцип приховування даних". Якщо в мові немає можливості згрупувати пов'язані процедури разом з даними, то він погано підтримує модульний стиль програмування. Тепер метод написання "хороших" процедур застосовується для окремих процедур модуля.
Оскільки дані є єдина річ, яку хочуть приховувати, поняття упрятиванія даних тривіально розширюється до поняття упрятиванія інформації, тобто імен змінних, констант, функцій і типів, які теж можуть бути локальними в модулі. Хоча С + + і не призначався спеціально для підтримки модульного програмування, класи підтримують концепцію модульності ($ $ 5.4.3 і $ $ 5.4.4). Крім цього С + +, природно, має вже продемонстровані можливості модульності, які є в С, тобто подання модуля як окремої одиниці трансляції.

Абстракція даних


Модульне програмування передбачає групування всіх даних одного типу навколо одного модуля, керуючого цим типом.
Звичайно таке рішення набагато краще, ніж хаос, властивий традиційним, неструктурованим рішень, але модельований таким способом типи абсолютно очевидно відрізняються від "справжніх", вбудованих. Кожен керуючий типом модуль повинен визначати свій власний алгоритм створення "змінних" цього типу. Не існує універсальних правил присвоювання ідентифікаторів, що позначають об'єкти такого типу. У "змінних" таких типів не існує імен, які були б відомі транслятору або іншим системним програмам, і ці "змінні" не підкоряються звичайними правилами областей видимості і передачі параметрів.
Тип, реалізований керуючим їм модулем, з багатьох важливих аспектів істотно відрізняється від вбудованих типів. Такі типи не отримують тієї підтримки з боку транслятора (різного виду контроль), яка забезпечується для вбудованих типів. Проблема тут у тому, що програма формулюється в термінах невеликих (одне-два слова) дескрипторів об'єктів, а не в термінах самих об'єктів. Це означає, що транслятор не зможе відловити дурні, очевидні помилки.
Іншими словами, концепція модульності, що підтримує парадигму упрятиванія даних, не забороняє такий стиль програмування, але і не сприяє йому.
У мовах Ада, Clu, С + + і подібних їм ця трудність долається завдяки тому, що користувачеві дозволяється визначати свої типи, які трактуються в мові практично так само, як вбудовані. Такі типи зазвичай називають абстрактними типами даних, хоча краще, мабуть, їх називати просто користувацькими. Більш суворим визначенням абстрактних типів даних було б їх математичне визначення. Якщо б вдалося його дати, то, що ми називаємо в програмуванні типами, було б конкретним поданням дійсно абстрактних сутностей.
Парадигму ж програмування можна висловити тепер так:
Визначте, які типи вам потрібні; надайте повний набір операцій для кожного типу.
Якщо немає необхідності в різних об'єктах одного типу, то стиль програмування, суть якого зводиться до упрятиванію даних, і слідування якому забезпечується за допомогою концепції модульності, цілком адекватний цій парадигмі.
Більшість модулів (хоча і не всі) краще визначати як користувацькі типи.

Межі абстракції даних


Абстрактний тип даних визначається як якийсь "чорний ящик". Після свого визначення він по суті ніяк не взаємодіє з програмою. Його ніяк не можна пристосувати для нових цілей, не змінюючи визначення. У цьому сенсі це негнучке рішення.

Об'єктно-орієнтоване програмування


Об'єктно-орієнтоване програмування найкращим чином надає технологію управління елементами будь-якої складності, створюючи умови для багаторазового використання програмних компонентів і об'єднання даних з методами їх обробки.

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

Інкапсуляція

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

Успадкування

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

Поліморфізм

Присвоєння методом єдиного імені або ідентифікатора в рамках ієрархії класів таким чином, щоб будь-який клас в ієрархії мав можливість по-своєму виконувати пов'язані із цим методом дії.
Одночасно з появою і деталізацією концепції з'явилися і засновані на ній мови програмування. Одним з перших з'явився алгоритмічну мову Modula 2. Мова програмування Turbo Pascal, розроблений фірмою Borland, починаючи з версії 5.5 став об'єктно-орієнтованим. Але найбільш послідовно втілення концепція об'єктно-орієнтованого програмування знайшла в алгоритмічній мові C + +.
Нехай, наприклад, потрібно визначити для графічної системи тип shape (фігура). Проблема полягає в тому, що ми не розрізняємо загальні властивості фігур (наприклад, фігура має колір, її можна намалювати і т.д.) і властивості конкретної фігури (наприклад, окружність - це така фігура, яка має радіус, вона зображується за допомогою функції , що малює дуги і т.д.).
Суть об'єктно-орієнтованого програмування в тому, що воно дозволяє висловлювати ці відмінності і використовує їх. Мова, який має конструкції для вираження і використання подібних відмінностей, підтримує об'єктно-орієнтоване програмування. Всі інші мови не підтримують його. Тут основну роль відіграє механізм успадкування, запозичений з мови Симула.
Ті функції, для яких можна визначити заявлений інтерфейс, але реалізація яких (тобто тіло з операторної частиною) можлива тільки для конкретних фігур, відзначені службовим словом virtual (віртуальні). У Симула і С + + віртуальність функції означає: "функція може бути визначена пізніше в класі, похідному від даного".
Визначте, який клас вам необхідний; надайте повний набір операцій для кожного класу; спільність класів висловіть явно за допомогою наслідування.
Якщо спільність між класами відсутня, цілком достатньо абстракції даних. Наскільки можна застосувати об'єктно-орієнтоване програмування для даної галузі застосування визначається ступенем спільності між різними типами, яка дозволяє використовувати успадкування та віртуальні функції. У деяких областях, таких, наприклад, як інтерактивна графіка, є широкий простір для об'єктно-орієнтованого програмування. В інших областях, в яких використовуються традиційні арифметичні типи і обчислення над ними, важко знайти застосування для більш розвинених стилів програмування, ніж абстракція даних. Тут засоби, що підтримують об'єктно-орієнтоване програмування, очевидно, надлишкові.
Знаходження спільності серед окремих типів системи являє собою нетривіальний процес. Ступінь такої спільності залежить від способу проектування системи. У процесі проектування виявлення спільності класів має бути постійною метою. Вона досягається двома способами: або проектуванням спеціальних класів, що використовуються як "цеглини" при побудові інших, або пошуком схожих класів для виділення їх загальної частини в один базовий клас.
Для представлення на С + + безлічі взаємозалежних класів можна використовувати дружні класи ($ $ 5.4.1).
Ще один спосіб вираження спільності понять у мові надають шаблони типу. Шаблонний клас задає ціле сімейство класів. Наприклад, шаблонний клас список задає класи виду "список об'єктів T", де T може бути довільним типом. Таким чином, шаблонний тип вказує, як виходить новий тип із заданого як параметр. Найтиповіші шаблонні класи - це контейнери, зокрема, списки, масиви і асоціативні масиви.

Поліпшений С (підтримка процедурного і модульного програмування)

Мінімальна підтримка процедурного програмування включає функції, арифметичні операції, що вибирають оператори і цикли. Крім цього повинні бути надані операції введення-виведення. Базові мовні засоби С + + успадкував від С (включаючи покажчики), а операції введення-виведення надаються бібліотекою.
Сама зародкова концепція модульності реалізується за допомогою механізму роздільної трансляції.

Підтримка абстракції даних


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

Підтримка об'єктно-орієнтованого програмування


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

Межі досконалості


Мова С + + проектувався як "кращий С", що підтримує абстракцію даних і об'єктно-орієнтоване програмування. При цьому він повинен бути придатним для більшості основних завдань системного програмування.
Основна складність для мови, який створювався в розрахунку на методи упрятиванія даних, абстракції даних і об'єктно-орієнтованого програмування, в тому, що для того, щоб бути мовою загального призначення, він повинен:
- Йти на традиційних машинах;
- Співіснувати з традиційними операційними системами й мовами!
- Змагатися з традиційними мовами програмування в ефективності
виконання програми;
- Бути придатним у всіх основних галузях додатки.
Це означає, що повинні бути можливості для ефективних числових операцій (арифметика з плаваючою точкою без особливих накладних витрат, інакше користувач вважатиме за краще Фортран) і засоби такого доступу до пам'яті, який дозволить писати цією мовою драйвери пристроїв. Крім того, треба вміти писати виклики функцій в досить незвичній запису, прийнятої для звернень до традиційних операційних системах. Нарешті, повинна бути можливість з мови, що підтримує об'єктно-орієнтоване програмування, викликати функції, написані на інших мовах, а з інших мов викликати функцію на цій мові, що підтримує об'єктно-орієнтоване програмування.
Далі, не можна розраховувати на широке використання шуканого мови програмування як мови загального призначення, якщо реалізація його цілком покладається на можливості, які відсутні в машинах з традиційною архітектурою.
Якщо не вводити в мову можливості низького рівня, то доведеться для основних завдань більшості областей додатка використовувати деякі мови низького рівня, наприклад С або асемблер. Але С + + проектувався з розрахунком, що в ньому можна зробити все, що припустимо на С, причому без збільшення часу виконання. Взагалі, С + + проектувався, виходячи з принципу, що не повинно виникати жодних додаткових витрат часу і пам'яті, якщо тільки цього явно не побажає сам програміст.
Мова проектувався в розрахунку на сучасні методи трансляції, які забезпечують перевірку узгодженості програми, її ефективність і компактність подання. Основним засобом боротьби зі складністю програм бачиться, перш за все, строгий контроль типів і інкапсуляція. Особливо це стосується великих програм, що створюються багатьма людьми. Користувач може не бути одним із творців таких програм, і може взагалі не бути програмістом. Оскільки ніяку справжню програму не можна написати без підтримки бібліотек, створюваних іншими програмістами, останнє зауваження можна віднести практично до всіх програм.
С + + проектувався для підтримки того принципу, що будь-яка програма є модель деяких існуючих в реальності понять, а клас є конкретним поданням поняття, взятого з області додатки ($ $ 12.2). Тому класи пронизують всю програму на С + +, і накладаються жорсткі вимоги на гнучкість поняття класу, компактність об'єктів класу та ефективність їх використання. Якщо працювати з класами буде незручно або занадто накладно, то вони просто не будуть використовуватися, і програми виродиться в програми на "кращому С". Значить користувач не зуміє насолодитися тими можливостями, заради яких, власне, і створювався мову.

Висновок


Як було обіцяно в першому виданні книги «Бьерн Страуструп. Мова програмування С + + », запити користувачів визначили розвиток С + +. Його направляв досвід широкого кола користувачів, що працюють в різних галузях програмування. За шість років, що відокремлюють нас від першого видання опису С + +, число користувачів зросла в сотні разів. За ці роки були засвоєні багато уроки, були запропоновані і підтвердили практикою своє право на існування різні прийоми програмування.
Мова C + + з'явився потужним і стрімким ривком у розвитку програмування. C + + і донині займає панівне становище серед мов програмування у світі. Величезна безліч професійних програмістів використовує саме його при розробці різного роду проектів. Очевидно, ця мова буде зберігати своє солідне становище ще не один рік, при цьому як і раніше розвиваючись і вдосконалюючись.

Список літератури


1. «Бьерн Страуструп. Мова програмування С + + »
  1. Джесс Ліберті, «Освой самостійно C + + за 21 день», вид. Дім «Вільямс», Москва - Санкт-Петербург - Київ, 2001
  2. М. Секун, «Самовчитель Visual C + + 6», вид. «БХВ-Петербург», Санкт-Петербург, 2003


Посилання на літературу


Тут наведено список книг і статей, на які є прямі посилання, а також тих, які тільки згадуються.
[1] AVAho, JEHopcroft, and JDUlman: Data Structures and Algoritms. Addison-Wesley, Reading, Massachusetts. 1983.
[2] OJ.Dahl, B. Myrhaug, and K. Nugaard: SIMULA Common Base Language. Norwegian Computing Ctnter S-22. Oslo, Norway. 1970
[3] OJ.Dahl and CARHoare: Hierarhical Program Construction in Structured Programming. Academic Press, New York. 1972. pp. 174-220.
[4] Margaret A. Ellis and Bjarne Stroustrup: The Annotated C + + Reference Manual. Addison-Wesley, Reading, Massachusetts. 1990.
[5] A. Goldberg and D. Rodson: SMALLTALK-80 - The Language and Its Implementation. Addison-Wesley, Reading, Massachusetts. 1983.
[6] REGriswold et.al.: The Snobol14 Programming Language. Prentice-Hall, Englewood Cliffs, New Jersy, 1970.
[7] REGriswold and MTGriswold: The ICON Programming Language. Prentice-Hall, Englewood Cliffs, New Jersy. 1983.
[8] Brian W. Kernighan and Dennis M. Ritchie: The C Programming Language. Prentice-Hall, Englewood Cliffs, New Jersy. 1978. Second edition 1988.
[9] Andrew Koenig and Bjarne Stroustrup: C + +: As Close to C as possible - but no closer. The C + + Report. Vol.1 No.7. July 1989.
[10] Andrew Koenig and Bjarne Stroustrup: Exception Handling for C + + (revised). Proc USENIX C + + Conference, April 1990. Also, Journal of Object Oriented Programming, Vol.3 No.2, July / August 1990. pp.16-33.
[11] Barbara Liskov et.al.: CLU Reference Manual. MIT/LCS/TR-225.
[12] George Orwell: 1984. Secker and Warburg, London. 1949.
[13] Martin Richards and Colin Whitby-Strevens: BCPL - The Language and Its Compiler. Cambridge University Press. 1980.
[14] L. Rosler: The Evolution of C - Past and Future. AT & T Bell Laboratories Technical Journal. Vol.63 No.8 Part 2. October 1984. pp.1685-1700.
[15] Ravi Sethi: Uniform Syntax for Type Exdivssions and Declarations. Software Practice & Experience, Vol.11. 1981. pp.623-628.
[16] Bjarne Stroustrup: Adding Classes to C: An Exercise in Language Evolution. Software Practice & Experience, Vol.13. 1983. pp.139-61.
[17] Bjarne Stroustrup: The C + + Programming Language. Addison-Wesley. 1986.
[18] Bjarne Stroustrup: Multiple Inheritance for C + +. Proc. EUUG Spring Conference, May 1987. Also USENIX Computer Systems, Vol.2 No 4, Fall 1989.
[19] Bjarne Stroustrup and Jonathan Shopiro: A Set of C classes for Co-Routine Style Programming. Proc. USENIX C + + conference, Santa Fe. November 1987. pp.417-439.
[20] Bjarne Stroustrup: Type-safe Linkage for C + +. USENIX Computer Systems, Vol.1 No.4 Fall 1988.
[21] Bjurne Stroustrup: Parameterized Type for C + +. Proc. USENIX C + + Conference, Denver, October 1988. pp.1-18. Also, USENIX Computer Systems, Vol.2 No.1 Winter 1989.
[22] Bjarne Stroustrup: Standardizing C + +. The C + + Report. Vol.1 No.1. January 1989.
[23] Bjarne Stroustrup: The Evolution of C + +: 1985-1989. USENIX Computer Systems, V
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Реферат | 78.6кб. | скачати

Схожі роботи:
Мова програмування С
Мова програмування Лiсп
Що таке мова програмування
Мова програмування Pascal
Мова програмування Turbo Pascal
Лісп мова функціонального програмування
Мова програмування Turbo-Basic
Мова програмування високого рівня С
Мова логічного програмування Visual Prolog
© Усі права захищені
написати до нас
Рейтинг@Mail.ru