вівторок, 31 травня 2011 р.

РЕФЕРАТ

МОВА ТА СТИЛІ ПРОГРАМУВАННЯ
 Стиль в програмуванні   це прийоми та правила написання коду, тобто тексту програми. Правила хорошого стилю – це результат колективного досвіду багатьох програмістів, в певному розумінні частина програмістського ремесла. Зрозуміло, що “на смак та колір товаришів немає...”, але, спираючись на досвід та здоровий глузд, узгодимо та станемо дотримуватись певних вимог при створенні текстів програм. Основне правило хорошого стилю: програма повинна бути зрозумілою людям, бо саме вони використовують та супроводжують її роками. Почнемо з того, чого більшість авторів програм намагається позбігтися, або принаймні відкласти “на потім”.
2. Правила написання коментарів.
Найбільш ефективним засобом полегшення розуміння програми є її коментування. Проте програмісти, особливо ті, кому не доводилося перевіряти чи модифікувати чужі (або навіть свої, але через порівняно великий проміжок часу) програми, часто уникають написання коментарів з метою економії часу.
“Некоментована програма це найгірша помилка, яку може зробити програміст, а також свідоцтво дилетантського підходу (нехай навіть цей програміст має десятирічний досвід роботи)” [5].
Коментарі слід писати саме під час написання програми, бо з часом суттєві деталі програми можуть забутись. Можна вважати, що програма є добре відкоментованою, якщо при першому знайомстві з нею можна зрозуміти структуру програми, її суть і логіку роботи, лише переглядаючи керівні структури і читаючи коментарі, не аналізуючи детально оператори, які задають правила обробки даних.
Головне не кількість коментарів, а їх якість. Коментарі мають допомагати читати програму. Вони зайві, якщо повторюють те, що й так зрозуміло з тексту програми, або просто шкідливі, якщо йому суперечать. Так, абсолютно некорисним буде коментар вигляду:
(*перевірити, чи величина від’ємна*)
if (d < 0) then …
на відміну від, наприклад, такого:
(*якщо дискримінант від’ємний, то дійсних коренів не існує*)
if (d < 0) then …
В останньому випадку коментар пояснює не те, що робить програма (будь-хто, знайомий з синтаксисом умовного оператору, це зрозуміє), а прояснює, навіщо потрібна дана перевірка.
Коментарів вимагають цикли, розгалуження, оригінальні ідеї та моменти, пов’язані з особливостями мови програмування. В наступному прикладі неочевидним чином використовується цілочисленне ділення мови С. (Більше про стиль програмування стосовно саме мови С можна знайти в [2]).
Приклад (мова С):
/* ініціалізуємо масив: А – одинична матриця*/
for (i = 0; i < n; i++)
   for (j = 0; j < n; j++)
А[i][j] = (i/j)*(j/i);
Для виділення змісту коментаря в тексті програми можна використовувати блоки, які вирівняні по вертикалі. Наприклад:
/**********************************************/
/*         так розташований коментар          */
/*       виділяється в тексті програми        */
/**********************************************/
До цього часу ми говорили про пояснювальні коментарі. Крім них, обов’язковими є коментарі-заголовки для модулів (які повинні включати в себе, як мінімум, визначення задачі, яку розв’язує даний модуль, і приклад виклику з фактичними параметрами). Корисним також є вступний коментар для програми. Він повинен містити відомості про:
-         призначення програми;
-         перелік і призначення змінних програми;
-         вказівки по вводу-виводу;
-         опис методу або літературні джерела;
-         приблизний час роботи програми;
-         необхідний об’єм пам’яті;
-         відомості про авторів;
-         дату внесення останніх змін в програму.

Типи мов програмування: інтерпретатори, транслятори, компілятори та компоновщики

Більшість системних програм, як вже говорилося вище, пишеться на мовах асемблер та С. Загалом, системні програми можна писати на будь-якій мові, де є можливість працювати безпосередньо з процесором, пам'яттю та функціями операційної системи. Всі такі мови поділяються на два великі класи: інтерпретовані та трансльовані.
Інтерпретовані – це мови, програми на яких перетворюються на машинний код тільки під час виконання. Загальна схема роботи програм на таких мовах має вигляд:
На цій діаграмі ми бачимо, що між програмою та операційною системою є ще "перетворювач" (інтерпретатор), який послідовно читає програмний код, і послідовно на льоту перетворює його на машинний код. Прикладом такої мови є мова Rexx, розроблена IBM для операційної системи PCDOS. Такі програми, зазвичай, повільніші за трансльовані, але їх простіше редагувати, оскільки виконується не машинний код, а безпосередньо текст програми: рядок за рядком.
Трансльовані – це такі мови, програмний код яких цілком може бути безпосередньо перетворений у машинний код, і поширюватись у вигляді цілісного двійкового (виконуваного) мод 091;ля. Такий підхід дозволяє аналізувати код, і оптимізувати його, враховуючи при перетворенні не лише поточний рядок, а й попередні, і наступні. Такий процес називається компіляцією:

Перші два етапи називаються компіляцією, тобто утворення певного кістяку, за якими буде будуватись вихідний програмний код. Третій етап називається трансляцією, а останній – компоновкою.
Таким чином утворюється двійковий файл, який містить машинний код, і може бути зрозумілий операційній системі та безпосередньо процесору. Це значно пришвидшує програму, і тоді виконання програми має вигляд.
Як видно, ніяких проміжних програм при цьому немає, тобто програма безпосередньо працює з системою, а відтак – швидше.
      Моделі пам’яті та загальна структура програм
<;div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 10pt; mso-hyphenate: none; mso-pagination: none; text-align: justify;">
Кожна системна програма обов'язково повинна відповідати певному типу пам'яті. Цим визначається, яким чином ця програма завантажуватиметься в пам'ять, які на неї накладатимуться обмеження, та які ресурси їй доступні. Ці моделі пам'яті однакові як в асемблері, так і в С, тому доцільніше їх розглянути тут. Програми складаються з сегментів (частин). Кожна з яких може бути не більша за 64 Кб. Сегмент може містити код або дані, відповідно до термінів Фон Неймана. Програма може мати сегментів трьох типів: коду, даних та стеку. Відповідно, існує 6 типів моделей пам’яті, які задають співвідношення та обмеження на ці сегменти:
Tiny (дуже малий). Дані та код знаходяться в один та тільки одному сегменті як у двійковому, так і програмному коді.
Small (малий) – Дані та код по замовчанню знаходяться в одному і тому ж самому сегменті після компіляції, але в програмному коді small можуть бути розділені на сегмент даних.
Compact (компактний). Код знаходиться в одному сегменті, але кожна змінна – фактично у своє;му власному сегменті, оскільки адресується не за локальним посиланням, а шляхом точного вказання комірки. Така структура застосована, коли змінні містять великі обсяги даних.
Medium (середній) – протилежний попередньому. Дані знаходяться в одному сегменті, а кожна процедура – у своєму власному. Ця модель пам’яті дає оптимізацію при великих обсягах програмного коду в процедурах.
Large (великий) – позначає тип пам’яті, де розподіл програмного коду по сегментах відбувається за вибором програміста.
Flat (плоский) – програма взагалі не поділяється на сегменти, але може містити обсяг коду даних, більше за 64 Кбайт. Деякі операційні системи такої моделі пам'яті не підтримують, однак це можна обійти за допомогою драйвера-розширювача (наприклад, dos2gw). Така модель пам’яті використовується для великих програм: Windows, Linux тощо.

Класифікація мов програмування за семантикою, за призначенням, за рівнем використання, за способом компіляції

Мови програмування можна класифікувати за декількома параметрами. Найбільш поширеними є класифікація за семантикою, за призначенням, за рівнем використання та за способом компіляції. Отже, розглянемо їх:
1. За семантикою мови поділяються на імперативні та декларативні. Імперативні мови програмування є детальним викладенням якогось процесу обчислення або дій, які повинен виконати процесор або периферійний пристрій, або ж програмний засіб. Прикладом імперативних мов може слугувати будь-яка сучасна мова програмування, наприклад, C чи Assembler. На відміну від них, декларативні мови передбачають насамперед формулювання мети, тобто кінцевого результату. До декларативних мов належать спеціалізовані мови, такі як Prolog або Occam, але найбільш поширеними мовами цього типу є так звані "оболонки", себто командні інтерпретатори, які існують у кожній сучасній операційній системі, і в яких користувач дає операційній системі виконати певні дії над ресурсом.
2. За призначенням мови поділяються на алгоритмічні, математичні, логічні, функціональні, об’єктно-орієнтовані та спеціалізовані. До алгоритмічних належать всі мови, головним завданням яких є виконання певних задач, які піддаються формалізації. Такі мови містять ключові слова для утворення основних елементів алгоритмів – розгалужень, точок вибору, циклів, функцій тощо та відповідних структур даних. Це знову ж таки С, C++, Pascal, Ada тощо. До математичних мов належать такі мови, головною задачею в яких визнається формалізація та розв'язок математичних рівнянь. Чисто математичною мовою прийнято вважати мову Fortran. Ця мова містить виключно засоби для створення складних математичних виразів, але не містить жодного елементу алгоритму. Однак на сьогодні, більшу популярність набули так звані мішані мови, які також увібрали в собі елементи алгоритмічних мов, зберігаючи засоби для відображення математичної нотації. До таких мов належить, зокрема, MathLab. Логічні мови сконцентровані на відображенні логічних тверджень та автоматичному доказі висновків з цих тверджень. Прикладом такої мови може слугувати Prolog, створений для автоматичного доведення теорем. Функціональні мови призначені для моделювання процесів, і хоч вони містять елементи алгоритмічних мов, але їх основною задачею все-таки є процеси фактично без звертання до даних. Прикладом такої мови є Haskell - університетська розробка. Об'єктно-орієнтовані є протилежними за архітектурою. Подібно до концентрації функціональних мов на функціях та процесах, ці мови концентруються на маніпуляції даними та відносинами між ними, до яких прив'язуються відповідні дії. Класичними об'єктно-орієнтованими мовами є SmallTalk та C++. Спеціалізовані мови можуть містити будь-які конструкції та засоби, відповідно до специфіки сфери, для яких їх призначено. Так, мови розмітки документів XML та HTML містять способи вказання способу відображення даних у Web-браузері, а мова APL – методи для обробки векторних даних.
3. За рівнем використання мови поділяються на низькорівневі, високорівневі, надвисокорівневі та мішані. Низькорівневі мови працюють на рівні операційної системи та команд процесора. Найчастіше це асемблери різних типів. Високорівневі мови – на рівні так званого інтерфейсу програміста, написаного на низькорівневих мовах для забезпечення виконання певних типових задач, як, наприклад, звертання до файлової системи за допомогою більш універсальних засобів, ніж переривання або функції ОС. До цих мов можна віднести C++, Perl, Ada або Pascal. Надвисокорівневі мови, як правило, розширюють можливості певного комплексного програмного засобу, або ж побудовані на бібліотеках так званих компонентів – готових "цеглинок" для побудови кінцевого продукту. Такі мови (а точніше – діалекти, оскільки чистих мов такого типу на сьогодні не існує) – Object Pascal, Visual C++. Мішаними називають такі мови, які здатні працювати на кількох рівнях у межах однієї програми. Класичною мовою такого типу є C, яка містить засоби роботи як на низькому, так і високому рівнях.
4. За типом компіляції мови поділяються на інтерпретовані, трансльовані та мішані. Інтерпретовані мови, як вже здавалося вище, існують у вигляді відкритого програмного коду, який при виконанні рядок за рядком перетворюється в машинний код проміжною програмою-інтерпретатором. Прикладом такої мови є Rexx, Objective (діалект мови З) та Forth. Трансльовані мови цілком перетворюються в машинний код після аналізу програмного коду. Прикладами таких мов можуть слугувати більшість алгоритмічних мов на сьогодні. Мішаними називаються такі мови, які поєднують у собі кращі риси обох цих типів. Першою такою мовою була створена Sun Microsystems мова Java, яка компілюється в кросплатформений байт-код, а потім інтерпретується віртуальною машиною, яка транслює цей проміжний код у машинний код для поточного процесора. 
Які існують мови програмування
Фортран
Мови програмування стали з'являтися вже з середини 50-х років. Одним з перших мов такого типу стала мова Фортран (англ. FORTRAN від FORmula TRANslator - перекладач формул), розроблений в 1957 році. Фортран застосовується для опису алгоритму розв'язання науково-технічних завдань за допомогою ЦВМ. Так само, як і перші обчислювальні машини, ця мова призначався, в основному, для проведення природно-наукових і математичних розрахунків. У вдосконаленому вигляді цей мова збереглася до нашого часу. Серед сучасних мов високого рівня він є одним з найбільш використовуваних при проведенні наукових досліджень. Найбільш поширені варіанти Фортран-II, Фортран-IV, EASIC Fortran та їх узагальнення.
Алгол
Після Фортрану в 1958-1960 роках з'явилася мова Алгол (Алгол-58, Алгол-60) (англ. ALGOL від ALGOrithmic Language - алгоритмічна мова). Алгол був вдосконалений у 1964-1968 роках - Алгол-68. Алгол був розроблений комітетом, в який входили європейські та американські вчені. Він відноситься до мов високого рівня (high-level language) і дозволяє легко переводити алгебраїчні формули в програмні команди. Алгол був популярний в Європі, в тому числі СРСР, у той час як порівнянний з ним Фортран був поширений в США та Канаді. Алгол зробив помітний вплив на всі розроблені пізніше мови програмування, і, зокрема, на мову Pascal. Ця мова так само, як і Фортран, призначався для вирішення науково-технічних завдань. Крім того, ця мова застосовувався як засіб навчання основ програмування - мистецтва складання програм.
Зазвичай під поняттям Алгол мається на увазі мова Алгол-60, в той час як Алгол-68 розглядається як самостійна мова. Навіть коли мова Алгол майже перестав використовуватися для програмування, він ще залишався офіційною мовою для публікації алгоритмів.

Кобол
У 1959 - 1960 роках була розроблена мова Кобол (англ. COBOL від COmmom Business Oriented Language - спільну мову, орієнтований на бізнес). Це мова програмування третього покоління, призначений, в першу чергу, для розробки бізнес-додатків. Також Кобол призначався для вирішення економічних завдань, обробки даних для банків, страхових компаній та інших установ подібного роду. Розробником першого єдиного стандарту Кобола була Грейс Хоппер (бабуся Кобола).
Кобол зазвичай критикується за багатослівність і громіздкість, оскільки однією з цілей творців мови було максимально наблизити конструкції до англійської мови. (До цих пір Кобол вважається мовою програмування, на якому було написано більше всього рядків коду). У той же час, Кобол мав прекрасні для свого часу засоби для роботи зі структурами даних і файлами, що забезпечило йому довге життя в бізнес застосування, принаймні, в США.

Лісп
Майже одночасно з Коболєв (1959 - 1960 рр..) В Массачусетському технологічному інституті була створена мова Лісп (англ. LISP від ​​LISt Processing - обробка списків). Лісп заснований на представленні програми системою лінійних списків символів, які притім є основною структурою даних мови. Лісп вважається другим після Фортрану найстарішим високорівневих мовою програмування. Ця мова широко використовується для обробки символьної інформації і застосовується для створення програмного забезпечення, що імітує діяльність людського мозку.
Будь-яка програма на Ліспі складається з послідовності виразів (форм). Результат роботи програми полягає в обчисленні цих виразів. Всі вирази записуються у вигляді списків - однієї з основних структур Ліспу, тому вони можуть легко бути створені за допомогою самої мови. Це дозволяє створювати програми, що змінюють інші програми або макроси, що дозволяють істотно розширити можливості мови.
Основний сенс Лісп-програми "життя" у символьному просторі: переміщення, творчість, запам'ятовування, створення нових світів і т.д. Лісп як метафора мозку, символ, метафора сигналу: "Як відбувається біологічний аналіз сигналів мозком, як зовнішній фактор - фізичний і хімічний вплив, що є для організму подразником перетворюється в біологічно значимий сигнал, часто життєво важливий, що визначає всю поведінку людини або тварини; і як відбувається поділ різних сигналів на позитивні, негативні і байдужі, індиферентні. Сигнал це вже інтегративне поняття. Він являє собою розпізнавальний знак групи, комплексних подразників, пов'язаних між собою загальною історією і причинно наслідковими відносинами. У цьому комплексі, системі подразників, сигнальний стимул сам є також складовим елементом і за інших обставин його роль може належати іншої стимулу з комплексу. У сигналі концентрується весь минулий досвід тварини або людини.

Бейсік
У середині 60-х років (1963 р.) в Дартмутського коледжу (США) була створена мова Бейсік (англ. BASIC від Beginner's Allpurpose Instruction Code - всецелевой символічний код інструкцій для початківців). З часом, коли з'явились інші діалекти, цей «початковий» діалект стали називати Dartmouth BASIC. Мова часткого на Фортран II і частково на Алгол-60, з додатками, що роблять його більш зручним для роботи в режимі розділення часу, і, пізніше, обробки тексту та матричної арифметики. Спочатку Бейсік було реалізовано на мейнфреймі GE-265 з підтримкою безлічі терміналів. Всупереч поширеному переконанню, у момент своєї появи це був компільований мову.
Бейсік було спроектовано так, щоб студенти могли писати програми, використовуючи термінали із розділенням часу. Він створювався як рішення для проблем, пов'язаних із складністю старіших мов. Він призначався для більш «простих» користувачів, не стільки зацікавлених у швидкості обчислень, скільки в можливості використовувати комп'ютер для вирішення своїх завдань. У силу простоти мови Бейсік багато початківці програмісти починають з нього свій шлях у програмуванні.
Форт
В кінці 60-х - початку 70-х років з'явилася мова Форт (англ. FOURTH - четвертий). Цей мова стала застосовуватися в завданнях управління різними системами після того, як його автор Чарльз Мур написав на ньому програму, призначену для управління радіотелескопом Арізонській обсерваторії.
Ряд властивостей, а саме інтерактивність, гнучкість і простота розробки роблять Форт вельми привабливим і ефективним мовою в прикладних дослідженнях і при створенні інструментальних засобів. Очевидними областями застосування цієї мови є вмонтовані системи управління. Також знаходить застосування при програмуванні комп'ютерів під управ;лінням різних операційних систем.

Паскаль
З'явився в 1972 році мову Паскаль був названий так на честь великого французького математика XVII століття, винахідника першої у світі арифметичної машини Блеза Паскаля. Ця мова був створений швейцарським вченим, фахівцем у галузі інформатики Никлаусом Віртом як мова для навчання методам програмування. Паскаль - це мова програмування загального призначення.
Особливостями мови є строга типізація і наявність коштів структурного (процедурного) програмування. Паскаль був одним з перших таких мов. На думку Н. Вірта, мова повинна сприяти дисциплінування програмування, тому, поряд з суворою типізацією, у Паскалі зведені до мінімуму можливі синтаксичні неоднозначності, а сам синтаксис інтуїтивно зрозумілий навіть при першому знайомстві з мовою.
Мова Паскаль вчить не тільки тому, як правильно написати програму, але і тому, як правильно розробити метод рішення задачі, підібрати способи представлення та організації даних, використовуваних в задачі. З 1983 року мова Паскаль введений в навчальні курси інформатики середніх шкіл США.

Ада
На основі мови Паскаль в кінці 70-х років була створена мова Ада, названий на честь обдарованого математика Ади Лавлейс (Аугуста Ади Байрон - дочки поета Байрона). Саме вона в 1843 році змогла пояснити світу можливості Аналітичної машини Чарльза Беббіджа. Мова Ада був розроблений на замовлення Міністерства оборони США і спочатку призначався для вирішення завдань управління космічними польотами. Ця мова застосовується в задачах управління бортовими системами космічних кораблів, системами забезпечення життєдіяльності космонавтів у польоті, складними технічними процесами.
Ада - це структурний, модульний, об'єктно-орієнтована мова програмування, що містить високорівневі засоби програмування паралельних процесів. Синтаксис Ади успадкований від мов типу Algol чи Паскаль, але розширено, а також зроблено більш суворим і логічним. Ада - мова з суворою типізацією, в ньому виключена робота з об'єктами, що не мають типів, а автоматичні перетворення типів зведені до абсолютного мінімуму.
За твердженням Стефена Цейглера [2], розробка програмного забезпечення на Аді в цілому обходиться на 60% дешевше, а розроблена програма має в 9 разів менше дефектів, ніж при використанні мови Сі.

Сі
В даний час популярним серед програмістів є мова Сі (С - буква англійського алфавіту). Мова Сі бере свій початок від двох мов - BCPL і B. У 1967 році Мартін Річардс розробив BCPL як мова для написання системного програмного забезпечення та компіляторів. У 1970 році Кен Томпсон використовував В для створення ранніх версій операційної системи UNIX на комп'ютері DEC PDP-7. Як у BCPL, так і в В змінні не розділялись на типи - кожне значення даних займало одне слово в пам'яті і відповідальність на розрізнення, наприклад, цілих і дійсних чисел цілком лягала на плечі програміста.
Мова Сі був розроблений (на основі В) Деннісом Рітчі з Bell Laboratories і вперше був реалізований у 1972 році на комп'ютері DEC PDP-11. Популярність Сі отримав в якості мови ОС UNIX. Сьогодні практично всі основні операційні системи були написані на Сі чи С + +. Після двох десятиліть Сі є в наявності на більшості комп'ютерів. Він не залежить від апаратної частини.
В кінці 70-х років Сі перетворився в те, що ми називаємо «традиційний Сі». У 1983 році Американським комітетом національних стандартів у галузі комп'ютерів та обробки інформації був заснований єдиний стандарт цієї мови.
Ця мова має багаті засоби, дозволяє писати гнучкі програми, що використовують всі можливості сучасних персональних комп'ютерів.

В даний час широко використовуються системи візуального програмування Visual Basic, Visual C + +, Delphi та інші. Вони дозволяють створювати складні прикладні пакети, що володіють простим і зручним призначеним для користувача інтерфейсом.
 

Немає коментарів:

Дописати коментар