Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Part6.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
211.97 Кб
Скачать

6 Методології програмування

6.1 Основні методології

Методологія – це сукупність методів, об'єднаних загальним філософським підходом.

Коли говорять про методології на стадії розроблення програми, часто використовують термін “парадигма програмування”.

Парадигма програмування це зведення теоретичних основ і правил програмування, не зв'язане з конкретною мовою.

Розрізняють такі типи програмування залежно від методології:

- імперативне;

- об’єктно-орієнтоване;

- функціональне;

- логічне.

6.2 Імперативне програмування

Імперативне програмування ґрунтується на описі послідовної зміни станів обчислювача. Якщо під обчислювачем розуміти сучасний комп'ютер, то його станом будуть значення всіх комірок пам'яті, стан процесора і зв'язаних з ним пристроїв. Цей тип програмування орієнтований на класичну модель фон Неймана.

Імперативне програмування як модель використовує машину Тьюринга.

Основна синтаксична одиниця оператор. Розрізняють атомарні і структурні оператори. Для опису синтаксису часто використовують систему позначень Бекуса-Наура.

Імперативні мови Pascal, C та інші.

Сфера застосування керування апаратними засобами і розв’язання невеликих задач.

Розвитком імперативного програмування є структурне програмування, що полягає у покроковій деталізації програми і використанні тільки трьох керуючих конструкцій: чергування, умови і циклу.

6.3 Об’єктно-орієнтоване програмування

При об'єктному підході досліджувану систему представляють у вигляді об'єктів і зв'язків між ними, а поводження системи визначається змістом повідомлень між об'єктами.

Мови об'єктного програмування можна поділити на:

- чисті: Simula, Smalltalk;

- гібридні, які з'явилися внаслідок впровадження в імперативні мови об'єктних конструкцій: C++, Object Pascal;

- урізані, які з'явилися внаслідок видалення з гібридних мов найбільш небезпечних конструкцій: Java, C#.

Об'єктна мова повинна підтримувати інкапсуляцію, спадкування і поліморфізм.

Інкапсуляція – це приховання даних і комбінування даних і методів в одному об'єкті.

Спадкування – одержання даних і методів похідними класами від базових. По суті, спадкування дозволяє повторно використовувати існуючі визначення класів.

Якщо клас не має у своєму розпорядженні методу для обробки повідомлення, повідомлення може бути передане вгору, по ієрархії класів.

Якщо оброблювач події вибирається на етапі виконання програми, метод називається віртуальним.

Поліморфізм – розходження в дії методів, які мають однакові імена, але знаходяться в різних місцях ієрархії. Поліморфізм дозволяє приховувати різні реалізації за однаковим інтерфейсом.

Поліморфізм має різновиди

Параметричний поліморфізм зв'язаний з підтримкою родових типів (шаблони в C++).

Включаючий поліморфізм пов'язаний зі спадкуванням і уточненням типів. Єдиною базою для опису поліморфізму може бути λ-вирахування.

6.4 Найпростіше вирахування типів з уточненням λ

Для базових типів будемо використовувати позначення ρ, власне кажучи, ρ є метазмінною. Буквою Γ будемо позначати сукупність тверджень про уже відомі типи виразів.

Визначимо тип

τ ::= ρ | τ1 →τ2

і формат виразу

e ::= x | λx:τ .e | e1 e2 ,

де e1e2 означає застосування e1 до e2.

Правила утворення типів:

,

,

.

Приклади

Вираз S=λx:Integer.x+1 одержує тип Intege→Integer.

Вираз twice=λf:Integer.λy:Integer.f(f(y)) одержує тип (Integer → Integer)→( Integer → Integer).

Аплікація S до 0: S0 дає значення 1, яке має тип Integer.

Аплікація twice до S: twice(S)= λx.SSx дає вираз типу Integer → Integer.

6.5 Вирахування типів з перетинаннями λ ^

Наступна версія вирахування типів λ^ дозволяє описувати різновид спеціального поліморфізму, зв'язаний з перевантаженням функцій.

Для скінченного перетинання типів будемо використовувати позначення .

Тоді множина типових виразів має вигляд

.

За визначенням вираз e може бути віднесений до типу тоді і тільки тоді, коли він може бути віднесений до кожного з типів τi.

Правило для типів (typing)

.

Правила для підтипів (subtyping):

,

,

.

Якщо, наприклад, операція “+” перевантажена для цілих і дійсних чисел, то на рівні реалізації вибирається тип, що більше всього підходить для обчислення виразів.

6.6 Вирахування типів з обмеженою квантифікацією F

Термін “з обмеженою квантифікацією” означає “з обмеженням кількості типів”.

Мова цього типу вирахування поповнюється новим видом формул: . Їх можна трактувати як нескінченне перетинання типових виразів, отриманих з виразу τ за допомогою заміни змінної α на різні підтипи σσ'. На відміну від λі λ^ вирахування F є вирахуванням другого порядку, тому що включає квантифікацію за типами.

У даному вирахуванні додатково вводяться вирази типової абстракції за типовою змінною α виду Λα ≤ τ.e і типової конкретизації вигляду e[τ]. Синтаксично ці вирази мало відрізняються від виразів функціональної абстракції й аплікації.

Вираз e[τ] означає підставлення типу τ у вираз e замість типової змінної, зв'язаної у зовнішньому абстракторі.

Визначимо

,

.

Правила для типів:

,

.

Правило для підтипів

Дане вирахування описує, зокрема, параметричний поліморфізм.

Приклади опису параметризованих функцій:

1 з типом ,

2

з типом ,

3

з типом .

Застосуємо зазначені параметризовані функції до різних аргументів.

  1. id[int](3) = 3 .

  2. twice1[int](id)(3) = 3 .

До S функція twice1 незастосовна.

  1. twice2[int] = λ f . int→int . λ x: int . f ( f ( x )) ,

twice2[int](S) = λ x: int . S ( S ( x )) ,

twice2[int](S)(3) = 5 .

Існують також теорії, де використовуються екзистенціальні типи з виразами вигляду .

Це означає, що реалізація абстрактного типу даних існує і задовольняє обмеження α ≤ τ1.

Такий підхід дозволяє описувати інкапсуляцію даних.

У даному викладі ми обмежилися синтаксичним рівнем. Однак тип і підтип повинні бути погоджені також і за поводженням.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]