Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПрограмЧ1-вторник.docx
Скачиваний:
2
Добавлен:
09.11.2019
Размер:
336.34 Кб
Скачать

Основы информатики

НАЗВАНИЕ

От франц. « Informatique automatique»

От англ. «Сomputer science»

От русск. « Информатика

ОПРЕДЕЛЕНИЕ

Фундаментальная естественная наука изучающая общие свойства информации, процессы, методы и средства ее обработки (сбор, хранение, преобразование, перемещение, выдача)

Наука о преобразовании информации, базирующаяся на вычислительной технике и технических, программных и алгоритмических средствах

Комплексная научно - технологическая дисциплина, изучающая аспекты разработки, проектирования, создания машинных систем обработки данных, а также уровень их воздействия на жизнь общества

Наука о проблемах обработки различных видов информации, создании новых видов высокоэффективных ЭВМ расширяющих спектр информационных ресурсов

Наука о проблемах обработки различных видов информации, создании новых видов высокоэффективных ЭВМ расширяющих спектр информационных ресурсов

Наука, техника и применение машинной обработки, хранения и передачи информации

Наука об автоматизированной целесообразной обработке информ. в технических, экономических и социальных областях

Наука о процессах в биологических системах и управлении природными системами /биокибернетика - анализ информационно-управляющих процессах, протекающих в живых организмах и в фармокологии; бионика  (от др.-греч. βίον — живущее) — прикладная наука о применении в технических устройствах и системах принципов организации, свойств, функций и структур живой природы, то есть формы живого в природе и их промышленные аналоги. Пример репьяхи-липучки; биогеоценология – наука о системно-информационных моделях поддержания и сохранения равновесия природных систем и поиска стабилизирующих воздействий на них

ТЕОРЕТИЧЕСКАЯ ОСНОВА

  • фундаментальные науки – математика, кибернетика: теория информации, теория алгоритмов, математическая логика, теория формальных языков и грамматик, комбинаторный анализ и т. д.

  • разделы – архитектура ЭВМ, операционные системы, теория баз данных, технология программирования, методы математической статистики и др.

Лекція 1. ТЕОРЕТИЧНІ ОСНОВИ ПРОГРАМУВАННЯ: КЛАСИФІКАЦІЇ ПІДХОДІВ ДО ПРОГРАМУВАННЯ. ФУНКЦІОНАЛЬНИЙ ПІДХІД ДО ПРОГРАМУВАННЯ

    1. Класифікації підходів до програмування

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

Проведемо класифікацію мов і підходів до програмування.

1) Мови програмування «низького рівня» Перші мови програмування виникли відносно недавно(20-ті, 30-ті або 40-ві роки). Як можна було чекати, перші мови програмування, як і ЕОМ, були примітивні і орієнтувались на чисельні розрахунки. Програми були лінійними послідовностями операцій з регістрами. Необхідно зазначити, що рані мови програмування були оптимізовані під апаратну архітектуру комп’ютера, тому часто не могла бути виконана на іншій. Ранні мови програмування називають язиками ассемблерами.

2) Мови програмування «Високого рівня». Наступне десятиліття ознаменувалося появою мов програмування так званого "високого рівня", в порівнянні з раніше розглянутими попередниками, відповідно іменованими низькорівневими мовами.

2.1) Імперативний підхід. Основною відмінністю використання імперативного підходу було підвищення ефективності праці розробників за рахунок абстрагування від конкретних деталей апаратного забезпечення. Одна інструкція (оператор) мови високого рівня відповідала послідовності з декількох низькорівневих інструкцій, або команд. Виходячи з того, що програма, по суті, була набором директив, звернених до комп'ютера, такий підхід до програмування отримав назву імперативу. Ще однією особливістю мов високого рівня була можливість повторного використання раніше написаних програмних блоків, що виконують ті або інші дії, за допомогою їх ідентифікації і подальшого звернення до них, наприклад по імені. Такі блоки отримали назву функцій або процедур, і програмування набуло більш впорядкованого характеру. Крім того, з появою мов високого рівня залежність реалізації від апаратного забезпечення істотно зменшилась. Платаю за це ставила поява спеціальних програм,які перетворюють інструкції умов в коди програми, а також деяка втрата в швидкості обчислень. Природно, для навчання новим мовам програмування потрібне багато часу і засобів, а ефективність реалізації на колишньому апаратному забезпеченні знижувалася. Проте це були тимчасові труднощі, і, як показала практика програмування, багато хто з перших мов високого рівня виявився настільки вдало реалізованим, що активно використовуються і сьогодні. Проте це булі тимчасові труднощі і, як показала практика одним з таких прикладів є мова Fortran, що реалізовує обчислювальні алгоритми. Інший приклад - мова APL, що трансформувалася в BPL і потім в C. Основні конструкції останнього залишаються незмінними ось вже декілька десятиліть і присутні в мові C#. Приклади інших імперативних мов програмування: ALGOL, COBOL, Pascal, Basic.

2.2) Декларативний підхід. У 60-х роках виникає новий підхід до програмування, який до цих пір успішно конкурує з імперативним, а саме, декларативний підхід. Суть підходу полягає в тому, що програма є не набором команд, а описом дій, які необхідно здійснити.

Цей підхід, як ми побачимо згодом, істотно простіше і прозоріше формалізується математичними засобами. Отже, програми простіше перевіряти на наявність помилок (тестувати), а також на відповідність заданій технічній специфікації (верифікувати). Високий ступінь абстракції також є перевагою даного підходу. Фактично, програміст оперує не набором інструкцій, а абстрактними поняттями, які можуть бути достатньо узагальненими. На початковому етапі розвитку декларативним мовам програмування було складно конкурувати з імперативними через об'єктивні труднощі ефективної реалізації трансляторів. Програми працювали повільніше, проте вони могли вирішувати абстрактніші завдання з меншими трудовитратами. Зокрема, мова SML, була розробленай як засіб доказу теорем. Різні діалекти мови LISP (зокрема, Interlisp, Common Lisp, Scheme), виникли тому, що ядро і ідеологія цієї мови виявилися вельми ефективними при реалізації символьної обробки (аналізі текстів). Інші характерні приклади декларативних мов програмування: SML, Haskell, Ocaml, F#, Prolog.

2.2.1) Функціональний підхід Одним з шляхів розвитку декларативного стилю програмування став функціональний підхід, що виник після створення мови LISP. Особливістю даного підходу є те, що будь-яка програма, написана на такій мові, може інтерпретуватися як функція з одним або декількома аргументами. Такий підхід дає можливість прозорого моделювання тексту програм математичними засобами, а значить, вельми цікавий з теоретичної точки зору. Оскільки функція є природним формалізмом для мов функціонального програмування, реалізація різних аспектів програмування, пов'язаних з функціями,істотно спрощується. Зокрема, стає прозорим написання рекурсивних функцій, тобто функцій, що викликають самих себе як аргумент. Крім того, природною стає і реалізація обробки рекурсивних структур даних (наприклад, списків - базових елементів, скажімо, для мов сімейства LISP, дерев і ін.) Завдяки реалізації механізму зіставлення із зразком, такі мови як ML і Haskell цілком підходять для застосування для символьної обробки.

Природно, мови функціонального програмування не позбавлені недоліків. Часто до них відносять нелінійну структуру програми і відносно невисоку ефективність реалізації. Проте перший недолік достатньо суб'єктивний, а другий успішно подоланий сучасними реалізаціями, зокрема, рядом останніх трансляторів мов F# і SML, включаючи і компілятор для середовища Microsoft .NET.

2.2.2) Логічний підхід. У 70-х роках виникла ще одна гілка мов декларативного програмування, пов'язана з проектами в області штучного інтелекту, а саме мови логічного програмування. Згідно логічному підходу до програмування, програма є сукупністю правил або логічних висловів. Крім того, в програмі допустимі логічні причинно-наслідкові зв'язки, зокрема, на основі операції імплікації. Таким чином, мови логічного програмування базуються на класичній логіці і застосовні для систем логічного виводу, зокрема, для так званих експертних систем. На мовах логічного програмування природно формалізується логіка поведінки, і вони застосовні для описів правил ухвалення рішень, наприклад, в системах, орієнтованих на підтримку бізнесу. Важливою перевагою такого підходу є достатньо високий рівень машинної незалежності, а також можливість відкатів - повернення до попередньої підцілі при негативному результаті аналізу одного з варіантів в процесі пошуку рішення (скажімо, чергового ходу при грі в шахи), що позбавляє від необхідності пошуку вирішення шляхом повного перебору варіантів і збільшує ефективність реалізації. Одним з недоліків логічного підходу в концептуальному плані є специфічність класу вирішуваних завдань. Інший недолік практичного характеру полягає в складності ефективної реалізації для ухвалення рішень в реальному часі, скажімо, для систем життєзабезпечення. Нелінійність структури програми є особливістю декларативного підходу і, строго кажучи, є оригінальною особливістю, а не об'єктивним недоліком. Як приклади мов логічного програмування можна привести Prolog (назва виникла від слів Programming in Logic) і Mercury.

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

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

Об'єкти, класи і методи можуть бути поліморфними, що робить реалізоване програмне забезпечення гнучкішим і універсальним.

Складність адекватної (несуперечливою і повною) формалізації об'єктної теорії породжує труднощі тестування і верифікації створеного програмного забезпечення. Ймовірно, ця обставина є одним з найістотніших недоліків об'єктно-орієнтованого підходу до програмування. Мабуть, найбільш відомим прикладом об'єктно-орієнтованої мови програмування є мова C++, що розвинулася з імперативної мови С. Его прямим нащадком і логічним продовженням є мова С#. Інші приклади об'єктно-орієнтованих мов програмування: Visual Basic, Eiffel, Oberon.

Розвитком подійно керованої концепції об'єктно-орієнтованого підходу стала поява в 90-х роках цілого класу мов програмування, які отримали назву мов сценаріїв або скриптів.

В рамках даного підходу програма є сукупністю можливих сценаріїв обробки даних, вибір яких ініціюється настанням тієї або іншої події (клацання по кнопці миші, попадання курсора в певну позицію, зміна атрибутів того або іншого об'єкту, переповнювання буфера пам'яті і так далі). Події можуть ініціюватися як операційною системою (зокрема, Microsoft Windows), так і користувачем. Основні переваги мов даного класу успадковані від об'єктно-орієнтованих мов програмування. Це інтуїтивна ясність описів, близькість до наочної області, високий ступінь абстракції, хороша переносимість. Широкі можливості повторного використання коду також успадковані сценарними мовами від об'єктно-орієнтованих предків. Істотною перевагою мов сценаріїв є їх сумісність з передовими інструментальними засобами автоматизованого проектування і швидкої реалізації програмного забезпечення, або так званими CASE- (Computer-aided Software Engineering) і RAD- (Rapid Application Development) засобами.Одним з найбільш передових інструментальних комплексів, призначених для швидкої розробки додатків, є Microsoft Visual Studio .NET. Природно, що разом з достоїнствами об'єктно-орієнтованого підходу мови сценаріїв успадкували і ряд недоліків. До останніх, перш за все, відносяться складність тестування і верифікації програм і можливості виникнення в ході експлуатації множинних побічних ефектів, що виявляються за рахунок складної природи взаємодії об'єктів і середовища, представленого інтерфейсами з великою кількістю одночасно працюючих користувачів програмного забезпечення, операційною системою і зовнішніми джерелами даних. Характерні приклади сценарних мов програмування: Vbscript, Powerscript, Lotusscript, Javascript.

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

-ранні неструктурні підходи;

-структурний або модульний підхід (завдання розбивається на підзадачі, потім на алгоритми, складаються їх структурні схеми і здійснюється реалізація);

·- функціональний підхід;

· -логічний підхід;

· - об'єктно-орієнтований підхід;

·- мішаний підхід (деякі підходи можна комбінувати);

·- компонентно-орієнтований (програмний проект розглядається як багатокомпонентний, такий підхід прийнятий, зокрема, в .NET);

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