Парадигми програмування
Завантажити презентаціюПрезентація по слайдам:
Парадигма програмування — це спосіб мислення Парадигма програмування — це спосіб мислення розробника програми. Розглянемо три основних парадигми — процедурне, об’єктне (модульне) і об’єктно-орієнтоване (ієрархічне) програмування. Всі вони підтримуються мовою програмування С++, яка розвинулася з мови процедурного програмування С. Процедурне програмування Процедурне програмування подає програму у вигляді набору алгоритмів, для оформлення яких можуть застосовуватися іменовані програмні блоки - процедури і функції.
Для процедур і функцій передбачається наявність Для процедур і функцій передбачається наявність механізмів передачі параметрів і поверненні результату. Спочатку процедурне програмування користувалося довільними засобами керування, в тому числі, переходом за міткою — одним з найбільш вживаних операторів керування в Фортрані. Ось приклад програмного тексту C КВАДРАТНИЙ КОРІНЬ З ДІЙСНОГО ЧИСЛА REAL FUCTION ROOT (A) S=A IF (A.EQ.0) GO TO 20T=(S+A/S)*.5 IF (ABS((T-S)/T).LE.1.E-6) GO TO 20 S=T GO TO 1020ROOT=S END
В 1968 році голландський вчений Е.Дейкстра вперше В 1968 році голландський вчений Е.Дейкстра вперше звернув увагу на проблеми, що виникають у програмах з неконтрольованими переходами, в 1970 році проголосив новий напрямок, який він назвав структур(ова)ним програмуванням. Структурне програмування — це варіант процедурного, що вживає три типи структур керування: послідовне виконання дій, розгалуження і цикл. Фортран не підтримував цю парадигму — в наборі його засобів не було циклів за умовами. Починаючи з Алголу, а особливо в Паскалі, цикли стають основним засобом організації обчислень в програмі.
Автор Паскалю, професор Н.Вірт, відібрав до Автор Паскалю, професор Н.Вірт, відібрав до створюваної ним мови програмування лише прості в поясненні і легкі в реалізації конструкції. Завдяки сильній типізації програми в Паскалі відзначаютьсянадійністю, вони мобільні завдяки закладеній в них концепції Паскаль-машини, їх легко читати і розуміти завдяки дисципліні програмування, продиктованої вжитою парадигмою.Але разом з цим застосування Паскалю гальмувалося саме складністю виходу за межі віртуальної машини, потребою ефективного використання наявної апаратури. Головним критерієм, вжитим Б.Керніганом і Д.Річі до створеної ними мови С, стала саме гнучкість використання особливостей конкретної апаратури і ефективність виконання програм.
З ростом обсягу програм і складності даних з'явилася З ростом обсягу програм і складності даних з'явилася нова проблема структурної організації даних, найбільш ємко висловлена Віртовською формулою “алгоритми + структури даних = програми”. Поняття модуля як абстракції даних було вперше запропоноване Парнасом у 1972 році. У найбільш повному виді поняття абстракції даних було реалізоване в мові програмування Модула-2. Головна ідея полягає в забезпеченні доступу до даних, не залежному від їх конкретного представлення. Самі дані і програми їх обробки вбудовуються (інкапсулюються) в окремій одиниці програми.
Об'єктно-орієнтована парадигма наділила класи Об'єктно-орієнтована парадигма наділила класи ієрархією. Об'єктно-орієнтоване програмування за метафорою Б.Страуструпа, автора С++ — однієї з найпопулярніших мов об'єктно-орієнтованого програмування, — це високоінтелектуальний синонім доброго програмування. Дійсно, алгоритми, реалізовані в процедурному програмуванні, надто конкретні. Будь-яка модифікація — це вже новий алгоритм і таким чином кількість процедур і функцій, що знаходяться у вжитку, надмірно зростає. Модульне програмування групує алгоритми в модулі, одночасно інкапсулюючи структури даних. Тепер залишається зробити наступний крок — побудувати ієрархію модулів або класів.
Таких ієрархій може бути дві. Перша з них — бути Таких ієрархій може бути дві. Перша з них — бути частиною чогось. Наприклад, грань є частиною многогранника, ребро — частиною грані, вершина — частиною ребра. Інша ієрархія — бути узагальненням або конкретизацією. Наприклад, овал і многокутник служать конкретизацією плоскої фігури, чотирикутник — конкретизацією многокутника, подальшими конкретизаціями чотирикутника можуть служити паралелограм, прямокутник, ромб, квадрат. Той факт, що квадрат, ромб, прямокутник є повноцінними паралелограмами дозволяє їм користуватися усіма програмними засобами, створеними для паралелограма, паралелограм в свою чергу є повноцінним чотирикутником і так далі.
Цей принцип (reusable — знову вживаний ) став одним з Цей принцип (reusable — знову вживаний ) став одним з найважливіших досягнень об'єктно-орієнтованої парадигми. Знову вживаючи вже існуюче програмне забезпечення в більш конкретизованих умовах, ми дописуємо лише ту його частину, яка стосується особливостей наявної конкретизації. Цей принцип дістав назву programming by difference або дописування програм. Об'єктно-орієнтована парадигма доводить до логічної завершеності принцип моделювання реального світу. Програма складається з об'єктів, що відповідають реальним поняттям або предметам. Виконання програми зводиться до взаємодії об'єктів, яке служить абстракцією реальної взаємодії їх прототипів.
Сьогодні в сімействі мов об'єктно-орієнтованого Сьогодні в сімействі мов об'єктно-орієнтованого програмування три найбільш відомих представника: С++, Java і C #. Java і C # виросли з С++. Вони мають свою сферу застосування в розподіленому програмуванні . Ще одна перевага С++ — його мультипарадигменність.С++ підтримує традиційні для модульного програмування механізми абстракції даних, доповнені можливостями об’єктно-орієнтованої парадигми. С++ містить в собі мову С (з деякими застереженнями), а тому підтримує процедурну парадигму. Ось приклад функції для обчислення квадратного кореня в С/С++:
double root (double x, double eps) double root (double x, double eps) { double s=0.5*x; double t; do { t=s; s=(s+x/s)*0.5; } while ((fabs(s-t)/s)>eps); return s; };
Структура дозволяє нам збирати разом декілька видів Структура дозволяє нам збирати разом декілька видів інформації, представленої її полями. Так структура Employee є абстракцією службовця, до членів якої внесено суттєву с точки зору управління кадрами інформацію — атрибути об'єкту const short kMaxNameSize = 20; struct Employee {char name [kMaxNameSize];unsigned int id; float salary; } Над об'єктами типу Employee виконують якісь дії, наприклад, створюють, роздруковують, нараховують зарплату, тощо. Ці дії забезпечуються функціями, які було б логічно теж розмістити в структурі. Тоді їх називають методами .
Структури дають нам досить простий тип інкапсуляції Структури дають нам досить простий тип інкапсуляції ( encapsulation ) — об'єднання елементів з метою створення нової сутності. Приклад —точки площини разом з операціями додавання, порівняння, тощо struct Point { //Атрибути double _x; double _y; //Методи Point operator+(Point); bool operator==(Point); double modulus (); double phi (); }
Інкапсуляція ділить об'єкт на дві частини: інтерфейсІнкапсуляція ділить об'єкт на дві частини: інтерфейс і реалізацію. Вище ми записали інтерфейс, а так записується реалізація методів. Читаємо: оператор додавання + із структури Point. Point Point::operator+(Point v) { Point w; w._x = _x + v._x; w._y = _y + v._y; return w; }
Схожі презентації
Категорії