
- •Тема 9. Програмне забезпечення Лекція 16
- •14.1. Класифікація програмного забезпечення
- •Прикладне пз
- •14.2. Поняття операційної системи
- •14.3. Координація операційною системою дій еом
- •14.4. Стисла характеристика основних операційних систем ос сім'ї dos
- •Ос сім'ї unix
- •Ос сім'ї Windows
- •Сім'я ос реального часу
- •Ос Linux
- •Покоління мов програмування
Покоління мов програмування
. Перші мови програмування були дуже примітивними і це були машинні коди - машинні мови, що дозволяли задавати назви команд у символічному вигляді і вказувати числа в двійковому, шістнадцятковому й десятковому форматах. Процес програмування був складним і передбачав запис програмістом усіх алгоритмів безпосередньо машинною мовою.
Першим кроком на шляху до полегшення завдань програмування була відмова від використання цифр для запису команд і операндів безпосередньо в тій формі, у якій вони використовуються в машині. З цією метою при розробці програм стали широко застосовувати мнемонічний запис різних команд замість їхнього шістнадцяткового представлення (асемблерні мови). Програми, написані мовою асемблеру, є принципово машпнно-залежними, тобто команди в цих програмах виражаються в термінах певних машинних атрибутів. Програму мовою асемблеру досить складно виконати на іншій машині, оскільки для цього її потрібно переписати з урахуванням нової конфігурації регістрів і набору команд.
При розв'язанні багатьох задач типова прикладна програма змушена покладатися на операційну систему. Наприклад, вона може звернутися до диспетчера вікна для організації взаємодії з користувачем чи диспетчера файлів для зчитування даних із пристроїв масової пам'яті. Різні операційні системи виконують такі запити по-різному. Тому якщо програма призначена для розсилання і виконання в мережі, що поєднує машини різного типу, які мають різні операційні системи, то вона має бути незалежною як від операційних систем, так і від типу використовуваних машин.
З'явилася необхідність у мовах програмування високого рівня і були сформульовані вимоги до таких мов:
Мова має бути близькою до тих фрагментів природних мов, які забезпечують конкретну предметну галузь діяльності людини; (мова, орієнтована на ділові сфери застосування, має містити поняття, використовувані в цьому виді діяльності: документ, база даних тощо).
Усі засоби мови мають бути формалізовані настільки, щоб їх можна було реалізувати як машинні програми.
Мова програмування не тільки підтримує предметно-орієнтовану діяльність, а й стимулює її розвиток (поняття бази даних, обчислювальної мережі призвело до революції в діловій діяльності).
Мова програмування - щось більше, ніж засіб опису алгоритмів: вона несе в собі систему понять, на основі яких людина може обмірковувати свої задачі, і нотацію, за допомогою якої вона може виразити свої міркування з приводу розв'язання задачі.
Виходячи з такого підходу, у 60-х роках з'явилися мови програмування третього покоління, що відрізнялися від попередніх поколінь тим, що їхні мовні конструкції мали вищий рівень і були машинно-незалежними.
Це універсальні мови високого рівня. Найбільш відомими прикладами ранніх мов третього покоління є FORTRAN (FORmula ТRANslation – перекладач формул), розроблений під керівництвом Дж. Бекуса 1960 р., яка була призначена для наукових і інженерних розрахунків, і СОВОL ( мова загального призначення ділової орієнтації), розроблена у 1960 р. фахівцями військово-морського флоту США для розв'язання економічних задач, АLGOL, розроблений міжнародною робочою групою.
З появою мов програмування третього покоління мета забезпечення машинної незалежності програм була в основному досягнутою. Оскіль ки оператори в мовах третього покоління не прив'язані до особливостей якоїсь конкретної машини, вони легко можуть бути скомпільовані на будь-якому комп'ютері. Теоретично програма, написана мовою третього покоління, може бути виконана на будь-якій машині використанням відповідного компілятора.
Насправді не все так просто. При розробці самого компілятора доводиться враховувати певні обмеження, що накладаються тією машиною, для якої він призначений. У результаті ці обмеження відбиваються мовою програмування, що підлягає перекладу на машинну мову. Наприклад, розмір машинних регістрів і чарунок пам'яті впливає на максимальний розмір значень цілих змінних, котрими може безпосередньо оперувати програма. Такі обмеження призводять до того, що та сама мова програмування на різних машинах має свої особливості.
Проблема переносу програм з однієї машини на іншу полягає у відсутності спільної точки зору на те, що саме вважати стандартом цієї мови програмування. У зв'язку з цим Американський національний інститут стандартів (АNSI) і Міжнародна організація з стандартизації (ІSO) прийняли стандарти для багатьох популярних мов програмування. В інших випадках застосовуються неформальні стандарти, що є наслідком популярності того чи іншого діалекту мови, а також бажання багатьох розробників компіляторів створювати продукти, сумісні з іншими, подібними до них.
Стисла характеристика основних мов програмування
На сьогодні розроблено значна кількість мов програмування. Вони відрізняються одна від одної різними властивостями, а виходить, і галуззю застосування..
До машинно-залежних мов належить асемблер. Мова асемблера робить доступними всі програмно-керовані компоненти ЕОМ. Тому він застосовується для написання програм, що явно використовують специфіку конкретної апаратури. Асемблер - це найбільш трудомістка мова програмування і через її низький рівень не вдається побудувати засоби налагодження, що істотно знизили б цю трудомісткість. Програмуванні мовою асемблера оперує з термінами команд апаратної частини машини, і тому вимагає від програміста детальних знань технічних компонентів комп'ютера. Кожен комп'ютер має таку систему програмування. Як правило, ця система програмування розробляється і поставляється фірмою-виготовлювачем ЕОМ.
Використання мови асемблера обмежується галуззю системного програмування, тобто для програмування мікропроцесорів, для розробки операційних систем чи окремих компонентів ОС, програм обміну між системним блоком і периферійними пристроями (драйверів) тощо.
До машинно-орієнтованшмов можна віднести також мову С ( Сі ) . Ця мова є результатом спроби об'єднати переваги низькорівневих можливостей алгоритмічних мов високого рівня (АМВР). Мову С часто називають мовою асемблера з вбудованими структурами даних. Використання структур даних дозволяє більш систематично підходити до реалізації завдання мовою С і скорочує обсяг текстів розроблювальних програм. Особливістю цієї мови є максимальне використання можливостей конкретної обчислювальної архітектури на основі бітових операцій, функцій і призначень. Завдяки цьому програми мовою С компактні і працюють швидко. Однак синтаксис мови досить складний, тому читання текстів програм на ній вимагає певних навичок.
Мова С спочатку була орієнтована насамперед на розробку системних програм. Вона, зокрема, послужила головним інструментом для створення операційних систем МS DOS і UNIX. Зараз мова застосовується головним чином для створення системних і прикладних програм, у яких швидкість роботи й обсяг пам'яті є основними параметрами.
Найбільш широко представлений клас процедурних мов програмування. Серед них можна виділити такі популярні мови високого рівня, як Бейсик, Паскаль,С, Фокал, Фортран, Ада, Кобол, Модула-2, РL/1 і низку інших.
Історично однією з найпоширеніших мов став Бейсик. Це пояснюється, насамперед, тим, що Бейсик простий в освоєнні й використанні. Написати на ньому невелику програму в 20-30 рядків й відразу одержати результат її роботи можна буквально за кілька хвилин. У Бейсик, як правило, вбудовуються зручні функції для роботи з екраном дисплея, клавіатурою, магнітними накопичувачами, принтером, комунікаційними каналами. Це дозволяє ставитися до Бейсика як до продовження апаратури ЕОМ. Щоб освоїти якусь особливість чи режим роботи апаратних засобів, найпростіше написати і виконати відповідну програму на Бейсику.
Для різних типів ЕОМ, що істотно відрізняються одна від одної, розроблено відповідні версії мови. Найбільш вдалою вважається версія фірми Місгоsof.
Поява могутніх компіляторів, таких, наприклад, як Quick Basic і Visual Basic фірми Місгоsoft поставила цю мову в ряд з іншими мовами високого рівня і додає їй додаткової популярності.
Мова Visual Basic - об'ктно-орієнтована мова, причому дещо більше, аніж просто мова програмування. Це - могутній інтегрований пакет розробки програмного забезпечення, який дозволяє програмісту створювати графічний інтерфейс користувача з заздалегідь визначених компонентів (таких як кнопки, прапорці опцій, текстові поля, смуги прокручування тощо) і настроювати роботу цих компонентів у додатку, описуючи їхню реакцію на різні події. Наприклад, якщо мова йде про кнопку, програміст повинний описати, що має трапитися, якщо користувач натисне її.Visual Basic зараз став однією з найбільш відомих і широко використовуваних мов програмування.
C++ –це обєктно-орієнтованне розширення мови С. В цій мові велика кількість нових потужних можливостей, що дозволяють підвищити продуктивність програмістів, поєдналася з низькорівневістю мови С, в результаті чого створення складних і надійних програм потребує від розробників високого рівня професійної підготовки.
JAVA( Джава )– мова, що була створенна на основі мови С++. Вона покликана спростити розробку додатків на основі С++ шляхом виключення з неї низькорівневих можливостей. Але головною особливістю цієї мови є компіляція не в машинний код, а в платформо-незалежний байт-код ( кожна команда займає один байт).Цей байт-код може виконуватись з допомогою інтерпретатора – виртульної машини Java-машини, версії якої зараз створені для будь-яких платформ. Завдяки множени Java-машин програми наJavaможна переносити не тільки на рівні первинних текстів, але і на рівні двійкового байт-коду, тому по популярності моваJavaсьгодні займає друге місце післяБейсика.
Особливу увагу при розвитку цієї мови приділяють двум напрямкам: підтримці різних мікрокомп’ютерів, що вбудовуються в побутову техніку і створенню платформо-незалежних програмних модулів для серверів в локальних та глобальних мережах з різними операційними системами. Поки що основним недоліком мови Java є невисока швидкодія,так якпрограми на цій мові виконуються черезінтерпретатор.
Мову Паскаль можна вважати однією з найпоширеніших, хоча вона й створювалася як навчальна. Згодом Паскаль зарекомендував себе як відмінний інструмент для рішення серйозних задач, тому що його розробник спеціально конструював мову, яка дозволяє створювати добре структуровані програми.
Причиною популярності цієї мови стала поява оригінальної версії мови Паскаль - Турбо-Паскаль фірми Вогland Іnternational. Турбо-Паскаль характеризується такими важливими особливостями, як повноек-ранне редагування і управління, графіка, звуковий супровід і зв'язки з ОС. Система програмування на Турбо-Паскалі сама є резидентною програмою. Вона дозволяє користувачу вводити його програми і виконувати їх негайно, не витрачаючи час на компілювання.
Delphi – мова (інтегрована система розробки програм), побудована на основі мови Оbject-Pascal. Особливої уваги заслуговує могутня вбудована підтримка баз даних Delphi. Це дозволяє швидко здійснювати розробку складних прикладних програм.
Мова Фортран - перша мова програмування високого рівня, активно використовувана і на сучасних персональних комп'ютерах. Близькість її конструкції до традиційної архітектури ЕОМ (йдеться про традиційну фон-неймановську архітектуру) зробила Фортран надзвичайно популярним. Застосовується Фортран головним чином при розробці прикладних систем, орієнтованих на наукові дослідження, інженерні завдання, автоматизацію проектування та інші галузі, де накопичено великі бібліотеки стандартних програм.
Мова Фортран має недоліки, такі, як відсутність типів, оголошення змінних і типів за замовчуванням, , незручні структури управління та ін. Певний час навіть було розпочато спроби заборонити його використання. Однак серед програмістів Фортран залишився популярною й активно застосовуваною мовою. Зараз відомо кілька версій цієї мови для ПЕОМ. Це Fortran Compiler фірми Місгsoft, Фортран IV, Фортран 77, ФортранF2k(2000). .
Мову Кобол було розроблено спеціально для розв'язання економічних задач. На відміну від Фортрану Кобол дає можливість складати більш зручні для читання програми, які можуть бути зрозумілі і непрограмісту. У програмах на Коболі особливо виявляється самодокументованість, що полегшує їхнє виправлення й удосконалення, а при обробці даних складної структури він буває ефективніше Паскалю. Кобол, будучи широко розповсюдженим на великих і середніх машинах, на ПЕОМ використовується мало.
Окрім наведенних мов програмування широкого призначення існує велика кількість спеціалізованих мов. Наприклад, мови проектування баз даних SGL, dBase, Visual FoxPro та інш., опису електронних схем VHDL, моделювання графіки UML, мови програмування для Інтернет HTML,Perl та інші. Про ці мови річ будеуподальшому в спеціальних дисциплінах.
Помітимо, що мови високого рівня, яка була б ідеальною для усіх випадків, не існує. Найбільш важливе завдання, очевидно, полягає в тому, щоб визначити, яка мова є «найкращою» у кожній конкретній ситуації. У багатьох випадках такий вибір диктується дуже простими причинами - доступністю того чи іншого транслятора й умінням складати програми цією мовою. Якщо, однак, у розпорядженні користувача є досить великий вибір мов програмування, то необхідно враховувати такі обставини:
призначення розроблювальної програми (чи буде вона використовуватися тимчасово чи постійно, чи буде вона модернізуватися і розвиватися);
час виконання програми (йдеться про співвідношення обчислювальних процедур і процедур вводу-виводу);
очікуваний розмір програми (чи вистачить пам'яті для реалізації цілком усієї програми чи слід її розділити на окремі взаємодіючі модулі);
необхідність сполучення розроблювальної програми з іншими пакетами чи профамами, у тому числі складеними іншими мовами програмування;
чи передбачено можливість перенесення програми на інші типи ЕОМ;
основні типи даних, з якими буде працювати програми (цілі і дійсні числа, рядки, списки й інші типи структур);
характер і рівень використання апаратних засобів (дисплея, клавіатури, НМД тощо);
- можливість і доцільність використання наявних стандартних бібліо- тек програм, процедур, функцій.
Виконання програми - реалізація мови програмування
Розглянемо, як реалізується процес перекладу програми з мови високого рівня в таку форму, що може бути виконана-машиною (ЕОМ). Переклад програми з однієї мови на іншу називається трансляцією. Програма у своєму оригінальному вигляді називається вихідною програмою, а відтрансльована її версія – об'єктним кодом.
Розрізняють транслятори двох типів: інтерполятори і компілятори ( часто останній тип отоджується з трансляторами взагалі).
Інтерпретатори призначені для послідовного пооператорного перетворення кожної команди первинної програми в машинний код з одночасовим її виконанням. Машинна програма у повному обсязі при цьому не створюється. Виконання програми проходить досить повільно порівнянно з випадком компилляції. Цей вид трансляції рекомендуеться використовувать при наладці нових програмних продуктів.
Компілятори, навпаки, призначені для формування повного завантажувального модуля по первинній програмі користувача. Це дозволяє відділити програму від середовища її розробки і в подальшому використовувати автономно.
Процес трансляції складається з трьох етапів - лексичного аналізу, синтаксичного аналізу і генерації коду, що виконуються елементами транслятора, які звуться лексичним аналізатором, синтаксичним аналізатором і генератором коду (рис. 5.6)
****************************
Лексичний аналіз - це процес виділення окремих символьних рядків з тексту вихідної програми. Наприклад, символи «153» мають інтерпретуватися транслятором не як сукупність цифр, що складаєть ся з одиниці, п'ятірки і трійки, а як єдине числове значення, яке дорів нює ста п'ятдесяти трьом
Таким чином, лексичний аналізатор символ за символом зчитує текст вихідної програми, визначаючи, які групи символів утворюють самостійні одиниці тексту. Потім ці одиниці класифікуються, щоб з'ясувати, що вони собою являють - числа, слова, арифметичні оператори тощо. Як тільки одиницю тексту класифіковано, лексичний аналізатор генерує її бітовий образ, що зветься лексемою і передає його синтаксичному аналізатору.
Синтаксичний аналізатор аналізує програму в термінах лексичних одиниць (лексем), а не окремих символів. Завданням синтаксичного аналізатора є об'єднання цих одиниць в оператори. Синтаксичний аналіз - це процес ідентифікації граматичної структури програми і роз-- пізнавання ролі кожного її компонента.
Останнім етапом трансляції є генерація кодів - процес створення команд машинної мови, що імітують виконання операторів, розпізнаних синтаксичним аналізатором. Цей процес включає безліч різних аспектів, і один із яких - підвищення ефективності генерованого коду.
Об'єктний код програми, отриманий у результаті її трансляції, хоча й записаний машиною мовою, але найчастіше ще не має тієї форми, яка необхідна для виконання машиною. Однією з причин цього є те, що багато засобів програмування дозволяють розробляти програми у вигляді окремих модулів, трансльованих у різний час (це сприяє наданню програмному забезпеченню модульної структури). Тому об'єктний код, отриманий у результаті окремого процесу трансляції, найчастіше являє собою усього лише певну складову частину програми, яка має бути пов'язана з іншими її частинами для вирішення завдань, що стоять перед усією системою в цілому.. Тому об'єктний код програми насправді являє собою програму машинною мовою, яка звичайно містить кілька недозволених посилань; цю програму необхідно пов'язати з іншими програмами, перш ніж можна буде одержати повноцінний виконуваний модуль.
Пов'язування об'єктного коду програми з іншими модулями виконує програма, яка називається редактором зв'язків. Її завдання – зв'язати між собою кілька об'єктних модулів (отриманих у результаті попередніх незалежно виконаних процедур трансляцій) програм операційної системи й інше програмне забезпечення з метою одержання завершеного виконуваного модуля (який іноді називають завантажувальним модулем), що являє собою файл, розташований у зовнішній пам'яті машини.
Нарешті, щоб виконати відтрансльовану програму, її завантажувальний модуль має бути розміщено в основній пам'яті машини за допомогою спеціальної програми, яка називається завантажувачем). Завантажувач звичайно є частиною програми-планувальника операційної системи. Важливість цього етапу є особливо великою в багатозадачних системах. У подібних системах будь-яка програма змушена використовувати пам'ять разом з іншими паралельно виконуваними процесами, причому набір паралельно виконуваних процесів змінюється при кожному виконанні програми. Тому точне розташування виділеної для певної програми ділянки пам'яті залишається невідомим, аж до її виклику І на виконання. Отже, підготовка програми мовою програмування високого рівня складається з трьох послідовних етапів: трансляції, зв'язування і завантаження, як показано на рис. 5.8.
****************************
Після виконання трансляції і зв'язування програму можна повторно завантажувати і виконувати без звертання до її вихідного тексту.
Об'єктно-орієнтоване програмування
В міру розвитку обчислювальної техніки виникали різні концепції програмування. На кожному етапі створювався новий підхід, що допомагав програмістам справлятися зі зростаючим ускладненням програм. Перші програми створювалися за допомогою ключових перемикачів на передній панелі комп'ютера. Очевидно, що такий спосіб підходить тільки для дуже невеликих програм. Потім була винайдена мова асемблера, що дозволяла писати довші програми.
Використовуючи мову високого рівня, наприклад FORTRAN програмісти могли писати програми до кількох тисяч рядків довжиною. Для того часу такий підхід до програмування був найбільш перспективним. Однак мова програмування, що розумілася легко в коротких програмах, у великих програмах ставала нечитабельною (і некерованою). Порятунок від таких неструктурованих програм прийшов після винаходу в 1960 р. мов структурного програмування. До них належать мови Алгол, Паскаль і С. Структурне програмування має на увазі точно позначені керуючі структури, програмні блоки, відсутність (чи, принаймні, мінімальне використання) операторів GОТО, автономні підпрограми, у яких підтримується рекурсія і локальні змінні. Суттю структурного програмування є можливість розбивки програми на її складові елементи. Використовуючи структурне програмування, середній програміст може створювати і підтримувати програми понад 50000 рядків довжиною.
Хоча структурне програмування, при його використанні для написання помірно складних програм, принесло гарні результати, воно виявлялося недієвим, коли програма досягала певної довжини. Щоб написати більш складну програму, необхідний був новий підхід до програмування. Як наслідок було розроблено принципи об'єктно-орієнтованого програмування (ООП). ООП акумулює найкращі ідеї, втілені в структурному програмуванні, і поєднує їх з могутніми концепціями, які дозволяють оптимально організовувати програми. Об'єктно-орієнтоване програмування дозволяє розкласти проблему на пов'язані між собою задачі. Кожна проблема стає самостійним об'єктом, що містить свої власні коди і дані, які належать до цього об'єкта. У цьому разі вся процедура в цілому спрощується і програміст одержує можливість оперувати з набагато більшими за обсягом програмами. Усі мови ООП, включаючи С++, ґрунтуються на трьох основних концепціях: інкапсуляції, поліморфізмі і спадкуванні. Розглянемо ці концепції.
Інкапсуляція - це механізм, що поєднує дані і код, який маніпулює з цими даними, і захищає те й інше від зовнішнього втручання чи неправильного використання. В об'єктно-орієнтованому програмуванні код і дані можуть бути об'єднані разом; у цьому випадку кажуть, що створюється так звана «чорна скринька». Усі необхідні дані і коди перебувають усередині неї. Коли коди і дані поєднуються таким чином, створюється об'єкт. Іншими словами, об'єкт - це те, що підтримує інкапсуляцію.
Насправді об'єкт є змінною визначеного користувачем типу. Може здатися дивним, що об'єкт, який поєднує коди і дані, можна розглядати як змінну. Однак стосовно об'єктно-орієнтованого програмування це саме так. Кожен елемент даних такого типу є складеною змінною.
Поліморфізм - це властивість, яка дозволяє те саме ім'я використовувати для розв'язання двох чи більше задач, технічно різних. Метою поліморфізму, стосовно ООП, є використання одного імені для завдання загальних для класу дій. Виконання кожної конкретної дії буде визначатися типом даних. Наприклад, для мови С, у якій поліморфізм підтримується недостатньо, віднайдення абсолютної величини числа вимагає трьох різних функці. Ці функції підраховують абсолютну величину цілих, довгих цілих і чисел із плаваючою крапкою відповідно. У С++ кожна з цих функцій може бути названа тільки однією абривіатурою аbs. У С++ можна використовувати одне ім'я функції для безлічі різних дій. Це називається перевантаженням функції.
У більш загальному сенсі, концепцією поліморфізму є ідея «один інтерфейс, безліч методів». Це означає, що можна створити загальний інтерфейс для групи близьких за змістом дій. При цьому виконання конкретної дії залежить від даних. Перевагою поліморфізму є те, що він допомагає знижувати складність програм, дозволяючи використання того ж інтерфейсу для задавання єдиного класу дій. Вибір же конкретної дії, залежно від ситуації, покладається на компілятор. Вам, програмісту, не потрібно робити цього вибору самому. Потрібно тільки пам'ятати і використовувати загальний інтерфейс.
Ключовим у розумінні поліморфізму є те, що він дозволяє маніпулювати об'єктами різного ступеня складності шляхом створення спільного для них стандартного інтерфейсу для реалізації схожих дій.
Спадкування – це процес, за допомогою якого один об'єкт може набувати властивостей іншого. Точніше, об'єкт може успадковувати основні властивості іншого об'єкта і додавати до них риси, характерні тільки для нього. Спадкування є важливим, оскільки воно дозволяє підтримувати концепцію ієрархії класів. Застосування ієрархії класів робить керованими великі потоки інформації. Наприклад, опис житлового будинку. Будинок - це частина загального класу, називаного будівлею. З іншого боку, будівля - це частина більш загального класу конструкція, що є частиною ще більш загального класу об'єктів, якому можна назвати створенням рук Людини. У кожному випадку породжений клас успадковує всі, пов'язані з батьком, якості і додає до них свої власні визначальні характеристики. Без використання ієрархії класів, для кожного об'єкта довелося б задати всі характеристики, які б вичерпно його визначали.
Програмна інженерія
Глобальні процеси інформатизації суспільства безумовно повинні були вплинути на викладання в університетах наук, пов’язаних з інформаційними технологіями, які втілились в розробці міжнародних рекомендацій під егідою професіональних асоціацій ACM (Association for Computing Machinery) і IEEE Computing Society.
Узагальнена область з комп’ютерних знань - комп’ютінг (computing) поділена на п’ять основних дисциплін: інформатика (computer science), програмна інженерія (software engineering), проектування апаратних платформ (hardware engineering), інформаційні системи (information systems) та інформаційні технології (information technology). Не зважаючи на таке формальне розділення, всі п’ять напрямків – споріднені науки. Вони тісно пов’язані між собою. Всі вони в більшій чи меншій ступені вивчають основи інформатики, програмування і технічні засоби, безумовно, з різним поглибленням в залежності від спеціалізації. В останній час найбільш змінилися підходи до викладання програмного забезпечення. Тепер ця дисципліна називається не програмуванням, а програмною інженерією, з дійсно інженерними підходами до створення програмних продуктів.
Програмна інженерія намагається інтегрувати принципи математики і інформатики з інженерними підходами, розробленими для виготовлення матеріальних продуктів[3]. Основні характеристики інженерного підходу такі:
інженери в своїй діяльності завжди ретельно оцінюють альтернативи в пошуку оптимальних рішень, порівнюючи можливі витрати і прибутки;
інженери завжди намагаються працювати з використанням кількісних характеристик і при необхідності дають приблизні рішення на основі досвіду та емпіричних даних;
інженери придають особливе значення використанню дисциплінованого процесу при реалізації проекту і розуміють важливість ефективної організації командної роботи;
інженери відповідають за весь життєвий цикл виробу, починаючи з дослідження, розробки, проектування, виробництва, тестування, впровадження і закінчуючи супроводом в експлуатації;
інженери придають велике значення вибору і використанню інструментальних засобів;
інженери-програмісти повинні мати освіту і досвід роботи в предметній області.
Програмна інженерія грунтється на цілій низці дисциплін, що ввійшли в рекомендації міжнародних асоціацій як проект SE 2004 (Software Engineering 2004). Теоретичні і концептуальні основи викладання програмної інженерії лежать, перш за все, в різних областях інформатики, але для одержання повноцінної освіти студентам необхідно бути знайомим з рядом концепцій з інших областей, таких як математика, інженерія, управління проектами і одна або декілька конкретних предметних областей. Всі студенти, вивчаючі програмну інженерію, повинні вміти інтегрувати теорію і практику, розуміти важливість абстракцій і моделювання, бути здібними розбиратися в нових для себе предметних галузях, не пов’язаних безпосередньо з комп’ютінгом, а також розуміти важливість висококваліфікованого проектування. При цьому стрімка еволюція програмної інженерії потребує постійного оновлення навчальних планів. Навчальні плани повинні співпадати з вимогами до рівня освіти фахівців програмістів в різних країнах, що є передумовою визнання наших дипломів в зовнішньому світі. В основу навчальних планів повинні бути закладені такі фахові дисципліни, як віща математика, основи комп’ютінга і інженерії, мови програмування, технологія проектування і верифікації програмного забезпечення, якість і управління програмними проектами. Обов’язковою складовою навчальної програми повинна стати професійна практика.
175