|
Скачати 2.03 Mb.
|
Нині відомо більше 8500 мов програмування. Перші мови програмування були точно зав’язані на вузько спеціальні задачі тієї чи іншої програмної системи. Наприклад, для наукових цілей використовувалась мова ФОРТРАН, для бухгалтерії – переважно мова КОБОЛ. Проте для системних робіт використовувалася мова програмування низького рівня – Асемблер. Мови програмування високого рівня відрізняв певний рівень абстракції в інтерпретації команд та даних, вони доволі наближені до природної людської мови. Програмування не раз переживало важкі часи. І кожен раз це призводило до створення нових, більш абстрактних, парадигм програмування та мов, що їх реалізовували. Однією з революційних концепцій програмування було структурне програмування, що базувалось на процедурній абстракції. Процедури (або просто підпрограми) дозволяли структурувати текст програми, допускали повторне використання окремих частин програми (реалізоване у вигляді виклику процедури з будь-якого місця програми, в тому числі і з самої процедури). Тим самим ця концепція наводила певний порядок у програмах (які часто порівнювали із спагеті-кодом через багатократні переходи та заплутаність текстів програм), долаючи «демонів складності». Найбільш поширеними мовами програмування високого рівня в межах цієї концепції були мови ПЛ/1, Pascal, C, Modula-2. Структурні мови програмування дозволяли писати досить складні програми. Проте фатальним для концепції структурного програмування ставав об’єм програми. В той час як важливою підтримкою складних інженерних проектів виступало програмування, написання реально складної та великої програми в межах цієї концепції ставало неможливою. Один із нових підходів до програмування одержав назву об’єктно-орієнтованого програмування (ООП). Для реалізації цієї концепції були створені нові мови програмування. Одним із найбільш вдалих проектів була мова С++, яка повністю підтримувала весь парк програм, створених для компіляторів з мови С. Саме цей факт і забезпечив мові С++ комерційний успіх. Іншими прикладами об’єктно-орієнтованих мов програмування служать мови Smalltalk, Java та інші. Концепція об’єктно-орієнтованого програмування базується на трьох основних принципах. По-перше, об’єкт інкапсулює (приховує) у собі дані та методи, які ними оперують, залишаючи назовні лише можливість послати або одержати повідомлення – дозволену інформацію про себе. По-друге, існує можливість створювати нові об’єкти з розширеним списком можливостей шляхом спадкування від існуючих об’єктів. І нарешті, різні об’єкти можуть мати методи з однаковим інтерфейсом, проте різним функціонуванням. Ця властивість реалізує підхід, що одержав назву поліморфізму. Його ідея : один інтерфейс – багато методів. Сучасні мови програмування, С++ зокрема, доросли таким чином до так званого «метапрограмування», або програмування з допомогою шаблонів – можна створювати програми, які створюють інші програми як результат своєї роботи. Таким чином, мова програмування одержує певну самостійність, яка з одного боку значно спрощує розв’язання багатьох проблем, проте й вносить певний елемент некерованості, незалежності від авторського задуму. Як страшну аналогію можна навести ідеї сучасних авторів-фантастів про війни роботів із людством. Крім того, мова диктує стиль мислення програміста. І доволі часто трапляється, що вся міць і потужність мови використовуються там, де в цьому зовсім мало потреби.
Невпинний розвиток комп’ютерних технологій та проникнення Інтернету у всі галузі нашого життя диктує нові вимоги до комп’ютерних програм. Тепер програми існують у безкрайній мережі, що пов’язує мільйони комп’ютерів. Отже, вони повинні підтримувати можливість створення програмного забезпечення із включенням програм, написаних різними мовами програмування, які здатні функціонувати в різних операційних системах. На жаль, існуючі мови важко пристосовувати до гармонійної міжмовної взаємодії, оскільки вони як раз прив’язані до різних операційних систем або навіть різних версій однієї операційної системи. Крім того, дуже рідко програми, що мають ринкову цінність, створюються однією людиною – набагато частіше над ними працюють цілі колективи програмістів, які можуть використовувати для розробки різні мови програмування та технології. Особливо це стосується програм, призначених для роботи з мережею. До створення технології Microsoft .NET Framework така розробка програм передбачала цілу низку необхідних узгоджень між різними частинами програми, оскільки мови та технології, що використовувалися, хоча й мали схожий синтаксис, проте спиралися на різні принципи роботи. Microsoft .NET Framework — це програмна технологія, запропонована фірмою Microsoft для створення програм різних типів, в тому числі і веб-застосувань. Однією з центральних ідей цієї технології є сумісність різних служб, створених різними мовами програмування. Програми можуть звертатись до методів та класів, створених на цій платформі з використанням різних мов. Ця можливість реалізована завдяки тому, що середовище розробки .NET при компіляції кожної програми, створеної будь-якою мовою програмування, що існують на платформі .NET, створює двійковий код, спеціальною проміжною мовою, що одержала назву MSIL (Microsoft Intermediate Language або як спочатку MultiSystem Intermediate Language), або просто IL. Цей код подібний до байт-коду мови Java і містить так звану збірку (assembly). Крім власне інструкцій IL–мовою збірка включає ще так звані метадані – інформацію про всі використані в програмі типи та інформацію про саму збірку (версія збірки, обмеження по безпеці, тощо). На наступному етапі, коли платформно-незалежний код мовою IL має бути пристосований до довільної конкретної платформи, на якій буде «жити» програма, цю задачу виконує спеціальний JIT (just-in-time compiler) компілятор («компіляція на льоту»). Роботою цього компілятора керує спеціальна служба CLR (Common Language Runtime) – стандартне середовище виконання для мов .NET. CLR керує всіма задачами низького рівня, пов’язаними з розгортанням застосувань, використанням пам’яті, тощо. Крім цього, частиною .NET є стандартна система типів CTS (Common Type System), та потужна бібліотека базових класів, які використовуються усіма мовами платформи .NET. Отже, платформа .NET – це нова модель для створення програмних застосувань (applications). Серед багатьох інших переваг цієї моделі однією з основних є можливість повної мовної взаємодії при створенні програм, а також використання потужної бібліотеки базових об’єктів.
Хоча платформа .NET і передбачає можливість використання різних мов програмування (наприклад, C++ та Visual Basic), спеціально для неї група програмістів фірми Microsoft розробила нову мову програмування, яка одержала назву С#. Ця мова дозволяє у повному обсязі скористатися можливостями, що надає технологія .NET. Фактично, C# являє собою гібрид різних мов програмування, від кожної з яких вона взяла найкраще. Будучи спадкоємицею мови С++, мова С# використовує подібний до неї синтаксис, проте позбавлена неоднозначностей, які допускали компілятори С++. Багато спільного має також із мовою Java, яка створювалась спеціально як мова, що дозволяє реалізовувати застосування, які можуть використовуватись в різних операційних системах. Її створення як раз і було намаганням розв’язати так звану проблему «перенесення» комп’ютерних програм в інше операційне середовище. Ця можливість була реалізована за рахунок компіляції у два етапи. На першому етапі Java-компілятор створює машиннонезалежний так званий «байт-код». Цей байт-код виконується віртуальною машиною Java (JVM – Java Virtual Machine). Вона являє собою спеціальну операційну систему. Отже, програма мовою Java може бути виконана на будь-якій платформі, де реалізовано JVM. А оскільки така реалізація була відносно не складною, то JVM були достатньо швидко та успішно реалізовані у досить різноманітних програмних середовищах. Проте мова Java не вирішила проблему міжмовної взаємодії в програмах. На відміну від Java, С# генерує код, що може бути використаний лише у середовищі виконання .NET – так званий керований код (managed code). Зокрема, це передбачає автоматичне керування пам’яттю та відсутність потреби працювати напряму із вказівниками на адреси у пам’яті, що дуже зменшує кількість ймовірних помилок при розробці та використанні програми. Ще одна приємна риса, яка відрізняє мову С# – можливість одночасно створювати і програму, і документацію до неї у форматі XML. Для цього треба лише використовувати спеціальний тип коментарів та після завершення роботи згенерувати окремий файл із документацією до програми (ця можливість вбудована у середовище розробки.) Компонент .NET Microsoft Visual Studio – це інтегроване середовище розробки програмного забезпечення, яке забезпечує абсолютно комфортний інтерфейс для створення С#-програм.
Інтегроване середовище розробки (Integrated Development Environment – IDE) Visual Studio 2005 – це універсальне середовище єдиного формату для всіх мов програмування .NET. Тобто при створенні проекту будь-якого типу будь-якою мовою програмування з набору ви матимете справу з одним і тим самим середовищем розробки. Більшість його можливостей ви засвоїте при самостійному вивченні, зараз же розглянемо лише самі основні з них. Перш за все, Visual Studio має справу з проектами. В перекладі з латинської «проект» – той, що виступає попереду, висунутий наперед. Під проектом в даному разі розуміють всю сукупність програмних засобів для реалізації деякої задачі. Тобто проект може містити кілька програмних файлів, бази даних, класи тощо. Для створення проекту використаємо послідовність команд меню : File -> New Project. Далі у діалоговому вікні необхідно вибрати один із запропонованих типів проектів. Зупинимо свій вибір на консольному застосуванні – Console Application. Маємо можливість обрати ім’я для свого застосування, наприклад, Console_First. В результаті Visual Studio сформує заготовку проекту Console_First. Власне, він цілком дієздатний, в чому можна переконатись з допомогою команд Debug -> Start Without Debugging. Зверніть увагу, що код основної програми мовою C# міститься у файлі Program.cs. Розширення .cs є обов’язковим для кодів програм, що обробляються компілятором мови C#. Компілятор є одним із елементів VisualStudio і запускається командою пункту меню Debug. Можна скористатись також комбінаціями відповідних «гарячих» клавіш. Залишимо поки що програмний код і розглянемо деякі діалогові вікна. Вікно Solution Explorer (оглядач рішень) дозволяє керувати рішенням – реалізацією проекту. Можна включати в проект додаткові елементи, такі як бази даних, класи, бібліотеки тощо, або навпаки – виключати, можна перейменувати певні елементи. Рухаючись по розгалуженням рішення, можна лівою кнопкою миші згортати або розгортати директорії елементів проекту, змінюючи значки «+» та «-». Вікно Properties (властивості) відображує головні властивості вибраного елементу проекту. Зробимо, наприклад, активним Program.cs у вікні Solution Explorer. Тоді у вікні Properties ми побачимо характеристики саме цього програмного файлу. Зокрема, у полі File Name міститься ідентифікатор даного програмного файлу. Змінимо його, наприклад, на My_Program.cs. У діалоговому вікні, що виникне на екрані, побачимо зауваження про перейменування файлу і пропозицію перейменувати відповідним чином всі посилання у проекті, з якою варто погодитись. Зверніть увагу, що середовище VisualStudio дозволяє вам вибирати оптимальні форми відображення всіх вікон на екрані. Вони можуть бути заховані у панелях по боках екрану, якщо активізувати піктограму «Auto Hide». Якщо ця піктограма знаходиться у позиції, в якій нагадує канцелярську кнопку, – вікно закріплене на екрані, якщо ж «кнопка» перевернута горизонтально, вікно згортається у невеличку панель. Непотрібні вікна можна видалити з екрану при натисканні мишою кнопки Close. Реанімувати після цього вікно на екрані, можна через команду View. При роботі з кодом програми є можливість згортати та розгортати цілі фрагменти коду подібно до того, як це діяло у вікні Solution Explorer. І, безумовно, вражаючий ефект створює підтримка технології IntelliSense, яка при наборі тексту «підказує» вам завершення початого рядка. Ну, і звичайно, звертайте увагу на повідомлення компілятора у вікні Error List. Всі пропущені дужки, крапки з комою будуть ним помічені просто під час набору тексту програми. Крім засобів поточного синтаксичного аналізу тексту до ваших послуг інтегрований налагоджувач, роботу з яким можна розпочати з допомогою панелі інструментів Debug. Ліва кнопка миші дозволить вмикати та вимикати точки переривань (breakpoints) на лівому сірому стопці поруч з програмним кодом. Команди Debug -> Windows дозволять вибрати потрібне вікно для контролю виконання програми.
Будь-яка мова має певний мовний лексикон – словник мови. Кожна мова програмування також базується на своєму словнику. Проте всі мови програмування спираються на певний набір основних термінів так чи інакше відбитий у мові. З’ясуємо основні з них, починаючи з простіших. Перш за все слід згадати константи та змінні. Значення цих термінів знайоме будь-кому, хто вивчав математику. Константа – це величина, яке не змінює свого значення. Отже, значення константи має бути визначене в той момент, коли ви описуєте константу в програмі, тобто знайомите з нею компілятор. Змінна – це очевидно, величина, яка протягом роботи програми може набувати різних значень. Вище вже говорилось про необхідність типізації даних, тобто кожна змінна програми має відноситись до певного типу даних, допустимих в межах синтаксису (тобто правил використання слів) даної мови програмування. Змінні також мають бути «представлені» компілятору. Проте тут слід розрізняти два етапи: опис (декларацію) змінної, який для компілятора є повідомленням про характер змінної та дає змогу контролювати її використання в програмі, та визначення змінної, тобто власне створення змінної в пам’яті. Надання початкового значення змінній називається ініціалізацією. За своїми властивостями змінні також різні. Крім змінних, які можуть зберігати певні значення (числові, символьні, текстові, тощо), за що вони ще називаються змінними value-типу , або просто змінними-значеннями, існують змінні reference-типу, або змінні-посилання (або адресні змінні). Їх різнить місце розташування та особливості звертання до них. Звичайні змінні розташовані у так званому стеку – спеціальній області пам’яті програми, елементи якої обслуговуються за принципом черги (англ. LIFO, last input – first output) – елемент, записаний останнім, вибирається першим. Змінні-посилання розташовуються у так званій «купі» (область Heap) і звертання до них, принаймні технічно це реалізовано саме так, відбувається опосередковано з допомогою її адреси. Фізичні та математичні константи мають усталені імена, наприклад, – стала Ейлера, – гравітаційна стала, тощо. Змінні в математиці також позначають звичними літерами – . Імена змінних та констант в програмі звуться ідентифікаторами. Складати ідентифікатори програміст має право довільно, не обмежуючи свою фантазію, в межах, звісно власної культури та правил синтаксису мови. Хороший стиль програмування (більше про стиль програмування можна самостійно прочитати у посібниках [1, 2]) означає, як мінімум, що програма, яку ви створюєте, має властивість readability – зручність для читання та сприйняття, а отже, і внесення змін та супроводження її. Тому ідентифікатори слід вибирати так, щоб вони відбивали зміст змінної або константи. Наприклад, константи прийнято записувати, використовуючи лише великі літери – MAX, або MIN, для змінних зазвичай використовують малі літери. При цьому для позначення лічильних змінних вибирають літери i,j,k, робочі (тимчасові) змінні часто позначають temp , work або просто val. Більшість мов програмування серед символів свого алфавіту містить знак підкреслення. Його зручно вживати, складаючи ідентифікатори з кількох частин, наприклад, array_size, vektor_len або file_num. Деякі спеціалісти вважають більш прийнятною формою для ідентифікаторів, що складаються з декількох частин, використання великих літер для початку кожної частини, наприклад, formName, тощо. При цьому використовують також ряд правил скорочення. Змінні та константи використовують у виразах – вони є операндами, які з’єднані допустимими операціями, тобто діями, що мають бути виконані над операндами. Кожний тип даних має визначений набір операцій, які по кількості операндів діляться на унарні (коли операція стосується одного операнда), наприклад, знак мінус перед числом, та бінарні (ті, що стосуються двох операндів), наприклад арифметичні додавання, віднімання, ділення та множення. Існує також спеціальна операція вибору, яка є тернарною (тобто стосується трьох операндів.) Взагалі кажучи, робота зі змінною складається з двох етапів: декларації (проголошення змінної) та ініціалізації (присвоєння змінній значення). У випадку використання задекларованої змінної, якій не було присвоєне значення, може виникнути помилка компіляції: Potential use of unassigned variable Для того, щоб краще запам’ятати це, згадаємо дитячу казку про Буратіно. У цій казці Мальвіна питає Буратіно: «Вам дали 5 яблук, а Ви віддали комусь 3 яблука, скільки в Вас залишилось?». З точки зору програмування завдання є неоднозначним, бо невідомо скільки яблук у Буратіно було спочатку. А програмістам потрібно пам’ятати, що змінні потрібно завжди ініціалізувати. Проте, якщо компілятор мови C# пропустить неініціалізовану змінну, то він присвоїть їй значення за наступними правилами:
Будь-яка програма складається з операторів, які описують певну послідовність дій. Як правило, оператори поділяються на групи, що певною мірою описують їх функціональність. Базовими елементами програми називаються такі основні логічні структури:
Слід зауважити, що насправді до трьох основних структур слід додати допоміжні: неповне розгалуження, багатогілкове розгалуження (вибір з декількох варіантів), виклик процедури (особливо важливим це стає у випадку рекурсивної процедури) У будь-якій мові програмування існують групи операторів розгалуження та операторів циклу. З’ясуємо зміст ще одного терміну, що вживається в програмуванні, – модуль. Модулем називають окрему програмну одиницю, яка автономно (незалежно) компілюється. Термін «модуль» вживається у двох сенсах. Традиційно під модулем розуміли підпрограму (процедуру або функцію), тобто послідовність зв’язаних фрагментів програми, які виконують окрему задачу. Звертання до модуля відбувається по імені. Важливо підкреслити два основних моменти – окрема компіляція та реалізація однієї окремої задачі. (Детальніше про принцип модульності див. у [2]). З часом під терміном модуль стали розуміти також окремий набір (бібліотеку) програмних елементів, націлених на розв’язання однієї або кількох пов’язаних між собою складних задач. Цей термін добре знайомий тим, хто вивчав мови програмування Pascal або Modula. Отже, спростимо зараз термін «модуль» до терміну «функція» та поговоримо про них. Звертання до функції відбувається за її іменем. Інші функції, що її викликають, обмінюються з нею інформацією через інтерфейс функції – список її параметрів. Ці параметри у визначенні функції носять назву формальних параметрів. Формальних, тому що функція задає формальну схему дій з цими параметрами. Так само у визначеному інтегралі змінна інтегрування є формальною. Від заміни її імені з на або значення інтегралу не зміниться. У момент виклику функції формальні параметри мають бути конкретизовані – на їх місце підставляються необхідні значення. Тому параметри у виклику функції звуть фактичними параметрами або просто аргументами. Результат своєї діяльності функція повертає модулю, який її викликав. Як правило, це відбувається у вигляді присвоєння цього результату деякій змінній або використання цього результату у деякому виразі. Модуль, який не формує результат свого виклику, у деяких мовах програмування, зокрема у мові Pascal, зветься процедурою. В інших мовах програмування (С, С++, Java, С#) процедури як окремий модуль не реалізовані – їх заміняють функції з порожнім (void) результатом. Щодо назв функції рекомендовано вживати пари «дієслово-іменник», у якості прикладу можна використати DoSomething. Слід зазначити, що в момент виклику модуля (функції) з технічної точки зору відбуваються дуже складні і важливі маніпуляції, які зазвичай приховані від уваги програміста. Оскільки модуль після компіляції зберігається окремо, то в момент його виклику і передачі йому керування система має створити для нього всі необхідні йому параметри. Вони створюються у стеку і в них копіюються значення фактичних параметрів. Тобто модуль працює з комплектом копій переданих йому змінних, а після завершення роботи модуля стек звільняється від записаних у нього параметрів. Такий спосіб передачі параметрів є найпростішим і забезпечує модулю доступ лише до значень вхідних даних. Він називається передачею параметрів за значенням. Якщо ж необхідно, щоб модуль повернув через свій інтерфейс деяку інформацію, необхідно задіяти інший, більш складний механізм передачі параметрів. Такі параметри мають бути спеціальним чином виділені. У мові Pascal, наприклад, для цього використовують спеціальне службове слово – специфікацію var. Це означає, що параметр буде передаватись, як адресна змінна. Тобто модуль одержить для роботи значення адреси місця розташування аргументу, таким чином матиме доступ не до копії змінної, а безпосередньо до неї самої. Цей спосіб передачі параметрів із зрозумілих причин називається передачею за адресою або за посиланням. |
Програма курсу програмування на мов і С++ Курс націлений на отримання знань і практичних навиків програмування на мовах C і C + + в рамках процедурно-орієнтованого програмування.... |
Основні методології (стилі, парадигми) програмування. Поняття програми.... Дів розробки програм Граді Буча “О’єктно-орієнтоване програмування (ООП) – це методологія програмування, яка заснована на представленні... |
Курс програмування на С # Зусилля, які ви витратите на вивчення С #, будуть винагороджені, так як Сі Шарп був розроблений в якості основної мови програмування,... |
27. Процедурні мови програмування Процедурні мови програмування. Характеристика процедурних мов програмування. Алфавіт. Основні поняття мови: числа, рядки, ідентифікатори,... |
27. Методика навчання обєктно-орієнтованого програмування. Об'єктно́-орієнтоване́... Не зважаючи на те, що ця парадигма з'явилась в 1960-тих роках, вона не мала широкого застосування до 1990-тих. На сьогодні багато... |
29. Опис та використання підпрограм Реалізація базових алгоритмічних структур процедурною мовою програмування. Опис процедур та функцій процедурною мовою програмування.... |
2. Дробово-лінійне програмування Постановка задачі дробово-лінійного... Дослідження операцій”, “Економетрія”, “Моделювання економіки”, “Економічна кібернетика” а також дисциплін циклу загальноекономічної... |
Методичні рекомендації щодо вивчення інформатики у 2012-2013 навчальному році Особливо гостро стоїть питання поглибленого вивчення інформатики та сучасних мов програмування |
ПОРЯДОК проведення відкритої Всеукраїнської студентської олімпіади з програмування Першості світу) з програмування АСМ-ICPC (Association for Computing Machinery International Collegiate Programming Contest), яка... |
1. Українська мова належить до: а східнослов’янської підгрупи мов;... Яке з поданих слів має значення „спрямований вперед; який рухається у висхідному напрямі” |