- •1.1. Методологія процедурно‑ орієнтованого програмування
- •1.2. Методологія об'єктно-орієнтованого програмування
- •1.3. Методологія об'єктно-орієнтованого аналізу і проектування
- •1.4. Методологія системного аналізу і системного моделювання
- •Розділ 2
- •2.1. Передісторія. Математичні основи
- •Мал. 2.4. Приклади неорієнтованого (а) і орієнтованого (б) графів
- •Мал. 2.5. Приклади неорієнтованого (а) і орієнтованого (б) дерев
- •Мал. 2.6. Ієрархічні схеми неорієнтованого дерева (а) і орієнтованого дерева (б)
- •2.2. Діаграми структурного системного аналізу
- •I (Input) – вхід, т. Е. Все, що поступає в процес або споживається процесом.
- •2.3. Основні етапи розвитку uml
- •2. Забезпечити початкові поняття язика uml можливістю розширення і спеціалізації для більш точного представлення моделей систем в конкретній наочній області.
- •3. Опис язика uml повинен підтримувати таку специфікацію моделей, яка не залежить від конкретних язиків програмування і інструментальних засобів проектування програмних систем.
- •4. Опис язика uml повинен включати семантичний базис для розуміння загальних особливостей ооап.
- •7. Інтегрувати в себе новітні і якнайкращі досягнення практики ооап.
- •3.2. Загальна структура язика uml
- •3.3. Пакети в язиці uml
- •3.4. Основні пакети метамоделі язика uml
- •3.5. Специфіка опису метамоделі язика uml
- •3.6. Особливості зображення діаграм язика uml
- •4.1. Варіант використовування
- •4.2. Актори
- •4.3. Інтерфейси
- •4.4. Примітки
- •4.5. Відносини на діаграмі варіантів використовування
- •4.6. Приклад побудови діаграми варіантів використовування
- •4.7. Рекомендації по розробці діаграм варіантів використовування
- •5.1. Клас
- •5.2. Відносини між класами
- •5.5. Шаблони або класи, що параметризуються
- •5.6. Рекомендації по побудові діаграм класів
- •6.1. Автомати
- •Include – ця мітка використовується для звернення до підавтомата, при цьому наступний за нею вираз дії містить ім'я цього підавтомата.
- •6.3. Перехід
- •6.4. Складовий стан і підстан
- •6.5. Історичний стан
- •Мал. 6.10. Графічне зображення недавнього (а) і давнього (б) історичного стану
- •6.6. Складні переходи
- •Мал. 6.11. Графічне зображення паралельного переходу з паралельних станів (а) і паралельного переходу в паралельні стани (б)
- •6.7. Заключні рекомендації по побудові діаграм станів
- •7.1. Стан дії
- •7.2. Переходи
- •7.5. Рекомендації по побудові діаграм діяльності
- •8.2. Повідомлення
- •Мал. 8.7. Діаграма послідовності із стереотипними значеннями повідомлень
- •8.3. Приклад побудови діаграми послідовності
- •8.4. Заключні рекомендації по побудові діаграм послідовності
- •9.1. Кооперація
- •9.3. Зв'язки
- •9.4. Повідомлення
- •9.6. Заключні рекомендації по побудові діаграм кооперації
- •10.1. Компоненти
- •10.2. Інтерфейси
- •10.3. Залежність
- •10.4. Рекомендації по побудові діаграми компонентів
- •11.1. Вузол
- •11.2. З'єднання
- •Мал. 11.4. Фрагмент діаграми розгортання із з'єднаннями меходу вузлами
- •11.3. Рекомендації по побудові діаграми розгортання
- •12.1. Загальна характеристика case‑ засобу Rational Rose 98/2000
- •12.2. Особливості робочого інтерфейсу Rational Rose
- •12.3. Початок роботи над проектом в середовищі Rational Rose
- •12.4. Розробка діаграми варіантів використовування в середовищі Rational Rose
- •12.5. Розробка діаграми класів в середовищі Rational Rose
- •12.6. Розробка діаграми станів в середовищі Rational Rose
- •12.7. Розробка діаграми послідовності в середовищі Rational Rose
- •12.8. Розробка діаграми кооперації в середовищі Rational Rose
- •12.9. Розробка діаграми компонентів в середовищі Rational Rose
- •12.10. Розробка діаграми розгортання в середовищі Rational Rose
Розділ 2
Історичний огляд розвитку методології об'єктно-орієнтованого аналізу і проектування складних систем
2.1. Передісторія. Математичні основи
Представлення різних понять навколишнього нас світу за допомогою графічної символіки йде своїми витоками в глибоку старовину. Як приклади можна привести умовні позначення знаків Зодіаку, магічні символи різних окультних доктрин, графічні зображення геометричних фігур на площині і в просторі. Важливою гідністю тієї або іншої графічної нотації є можливість образного закріплення змістовного значення або семантики окремих понять, що істотно спрощує процес спілкування між присвяченими у відповідні теорії і ідеології.
Теорія множин
Як одну з найвідоміших систем графічних символів, що зробили безпосередній вплив на розвиток наукового мислення, слід зазначити язик діаграм англійського логіка Джона Венна (1834–1923). В даний час діаграми Венна застосовуються для ілюстрації основних теоретико‑ множинних операцій, які є предметом спеціального розділу математики – теорії множин. Оскільки багато загальних ідей моделювання систем мають адекватний опис в термінології теорії множин, розглянемо основні поняття даної теорії, що мають відношення до сучасних концепцій і технологій дослідження складних систем.
Початковим поняттям теорії множин є саме поняття множина, під якою прийнято розуміти деяку сукупність об'єктів, добре помітних нашою думкою або інтуїцією. При цьому не робиться ніяких припущень ні про природу цих об'єктів, ні про спосіб їх включення в дану сукупність. Окремі об'єкти, що становлять ту або іншу множину, називають елементами даної множини. Питання «Чому ми розглядаємо ту або іншу сукупність елементів як множину?» не вимагає відповіді, оскільки в загальне визначення множини не входять ніякі додаткові умови на включення окремих елементів в множину. Якщо нам хочеться, наприклад, розглянути множину, що складається з трьох елементів: «сонце, море, апельсин», то ніхто не зможе заборонити це зробити.
Прикладів конкретних множин можна привести достатньо багато. Це і безліч квартир житлового будинку, і безліч натуральних чисел, з якої починається знайомство кожної дитини з великим таїнством рахунку. Сукупність комп'ютерів в офісі теж є множиною, хоча, можливо, вони і сполучені між собою в мережу. Безліч людей, що живуть на планеті, як і безліч зірок на небозводі, теж можуть служити прикладами множин, хоча природа їх істотно різна.
Примітка
Створюється враження, що ситуація із завданням множин більш менш зрозуміла. Але це враження брехливе. Навіть не кажучи про відомі парадокси теорії множин, як бути з «безліччю» думок окремої людини? Або множеством всіх фарб, які зустрічаються в природі? Проте такі каверзні випадки ми розглядати не будемо, обмеживши круг ситуацій такими, в яких ідентифікація окремих елементів множин не перетворюється на серйозну проблему. З другого боку, процес моделювання складних систем зв'язаний саме з подібного роду труднощами.
В теорії множин використовується спеціальна угода, по якій множини позначаються прописними буквами латинського алфавіту, і традиція ця настільки загальновизнана, що не виникає ніякого сумніву в її доцільності. При цьому окремі елементи позначаються рядковими буквами, іноді з індексами, які вносять деяку впорядкованість в послідовність розгляду цих елементів. Важливо розуміти, що який би то не було порядок, взагалі кажучи, не входить в початкове визначення множини. Таким чином, множина, наприклад, квартир 100‑ квартирного житлового будинку з використанням спеціальних позначень можна записати таким чином: A={aj, 02, а3. а{00}. Тут фігурні дужки служать позначенням сукупності елементів, кожний з яких має свій унікальний числовий індекс. Важливо розуміти, що для даної конкретної множини елемент ato позначає окрему квартиру в даному житловому будинку. При цьому зовсім необов'язково, щоб номер цієї квартири був рівний 10, хоча з погляду зручності це було б бажано.
Прийнято називати елементи окремої множини тими, що належать даній множині. Даний факт записується за допомогою спеціального символу «е», який так і називається – символ приналежності. Наприклад, запис а10ьА означає той простий факт, що окрема квартира (можливо, з номером 10) належить даній безлічі квартир деякого житлового будинку.
Наступним важливим поняттям, яке служить прототипом багатьох більш конкретних термінів при моделюванні складних систем, є поняття підмножини. Здавалося б, інтуїтивно і тут немає нічого неясного. Якщо є деяка сукупність, що розглядається як множина, то будь-яка її частина і буде підмножиною. Так, наприклад, сукупність квартир на першому поверсі житлового будинку є ніщо інше, як підмножина прикладу, що розглядається нами. Ситуація стає не такою тривіальною, якщо розглядати безліч абстрактних понять, таких як єство або клас.
Для позначення підмножини використовується спеціальний символ. Якщо затверджується, що множина А є підмножиною множини В, то це записується як Аа В. Запоминать подібні значки не завжди зручно, тому з часом була запропонована спеціальна система графічних позначень.
Як же використовуються діаграми Венна в теорії множин? Виявляється, той факт, що деяка сукупність елементів утворює множину, можна позначити графічно у вигляді круга. В цьому випадку коло має змістовний сенс або, виражаючись більш точним язиком, семантику межі даної множини. Очевидно, що розгляд відношення включення елементів однієї множини в інше можна зобразити графічно таким чином (мал. 2.1). На цьому малюнку більшій множині У відповідає зовнішній круг, а меншій множині (підмножині) А – внутрішній.
Мал. 2.1. Діаграма Венна для відношення включення двох множин
Так само можна зобразити і основні теоретико‑ множинні операції. Так, перетином двох множин А і В називається деяка третя множина З, яке складається з тих і лише тих елементів двох початкових множин, які одночасно належать і множині А, і безлічі В. Для цієї операції також є спеціальне позначення: С= А про В. Наприклад, якщо як множина А для операції перетину розглянути безліч співробітників деякої фірми, а як множина В – безліч всіх чоловіків, то неважко здогадатися, що множина З складатиметься з елементів – ± всіх співробітників чоловічої статі даної фірми. Операція перетину множин також може бути проілюстрована за допомогою діаграм Венна (мал. 2.2). На цьому малюнку умовно зображено дві множини А і В, затіненій області якраз і відповідає множина З, є перетином множин А і В.
Мал. 2.2 Діаграма Венна для перетину двох множин
Наступною операцією, яка також допускає наочну інтерпретацію, є операція об'єднання множин. Під об'єднанням двох множин А і В розуміється деяка третя множина, хай це буде D, яке складається з тих і лише тих елементів, які належать або А, або В, або ним обом одночасно. Звичайно, спеціальне позначення є і для цієї операції: D= AuB. Так, якщо як множина А розглянути множину, що складається з клавіатури і миші, а як множина В – множина, що складається з системного блоку і монітора, то неважко здогадатися, що їх об'єднання, т. е. множина D, утворює основні складові персонального комп'ютера. І для цієї операції є умовне графічне уявлення (мал. 2.3). На цьому малюнку об'єднанню двох початкових множин також відповідає затемнена область, тільки розміри і форма її відрізняються від випадку перетину двох множин на попередньому малюнку.
Мал. 2.3. Діаграма Венна для об'єднання двох множин
Примітка
При виборі позначень для множин допускається деяке свавілля, яке не завжди зрозуміле особам, далеким від математики. Проте тут доречна аналогія з вибором імен для змінних і процедур в язиках високого рівня, коли програміст сам вирішує, як йому позначати відповідну конструкцію в програмі.
Останнє, на що було б слід звернути увагу при такому короткому знайомстві з основами теорії множин – це на так звані поняття потужності множини і відношення множин. Хоча існують і інші операції над множинами, а також цілий ряд додаткових понять, їх розгляд виходить за рамки справжньої книги. Що стосується поняття потужності множини, то даний термін важливий для аналізу кратності зв'язків, оскільки асоціюється з кількістю елементів окремої множини. У разі кінцевої множини ситуація дуже проста, оскільки потужність кінцевої множини рівна кількості елементів цієї множини. Таким чином, повертаючись наприклад з множиною А квартир житлового будинку, можна сказати, що його потужність рівна 100.
Ситуація ускладнюється, коли розглядаються нескінченні множини, т. е. множини, що не є кінцевими. Не вдаючись в технічні деталі, які послужили джерелом драматичної по своїх наслідках кризи основ математики, обмежимо наш розгляд нескінченною безліччю рахункової потужності. Такими множинами прийнято рахувати множини, що містять нескінченне число елементів, які, проте, можна перенумерувати натуральними числами 1, 2, 3 і т. д. При цьому важливо мати у вигляді, що досягти останнього елемента при такій нумерації принципово неможливо, інакше множина виявиться кінцевою. Наприклад, є всі підстави вважати безліч всіх зірок нескінченною, хоча багато хто з них має свою унікальну назву. З другого боку, безліч всіх можливих комбінацій з 8 символів, які можуть служити для введення деякого пароля, кінцеве, хоча і достатньо велике. Або, кажучи строгим язиком, ця множина має кінцеву потужність.
Примітка
Проблема нескінченного могла б показатися відвернутою і мала деякий філософський відтінок, якби не її зв'язок з моделюванням складних систем. Так, при розгляді деякої наочної області з метою побудови її моделі доводиться виділяти кінцеве число єств, створюючих певний «скелет» майбутньої моделі. І це при тому, що реальність предметів допускає нескінченний розгляд їх властивостей, атрибутів і взаємозв'язків.
Нарешті, було згадано і наступне поняття, різні аспекти якого служитимуть темою розгляду у всіх подальших розділах. Це фундаментальне поняття відношення множин, яке часто замінюється термінами зв'язок або співвідношення. Даний термін веде своє походження від теорії множин і служить для позначення будь-якої підмножини впорядкованих кортежів, побудованих з елементів деяких початкових множин. При цьому під кортежем розуміється просто набір або список елементів, важливо тільки, щоб вони були впорядковані. Іншими словами, якщо розглядати перший елемент кортежу, то він завжди буде першим в списку елементів, другий елемент кортежу буде другим елементом в списку і т. д. Чи можна це записати з використанням спеціальних позначень?
Хоча і існує деяка неоднозначність в прийнятих позначеннях, кортеж з двох елементів зручно позначати як ‹a1, a2‑ , з трьох елементів – ‹a1, a2, a3‑ і т. д. При цьому окремі елементи можуть належати як одній і тій же множині, так і різним множинам. Важливо мати у вигляді, що порядок вибору елементів для побудови кортежів строго фіксований для конкретної задачі. Йдеться про те, що перший елемент завжди вибирається з першої множини, другий – з другого, і т. д:
Відношення в цьому випадку характеризуватиме спосіб або семантику вибору окремих елементів з одного або декількох множин для подібного впорядкованого списку. В цьому значенні взаємозв'язок є окремим випадком відношення, про що буде сказано в подальшому. На жаль, діаграми Венна не призначені для ілюстрації відносин в загальному випадку. Проте відносини послужили початковою ідеєю для розвитку іншої теорії, яка навіть в своїй назві несе відбиток графічної нотації, а саме – теорії графів. В зв'язку з цим найважливішим є той факт, що теоретико‑ множинні відносини послужили також основою для розробки реляційної алгебри в теорії реляційних баз даних. Розвиток останньої привів до тому, що останніми роками саме реляційні СУБД конкретних фірм домінують на ринку відповідного програмного забезпечення.
Теорія графів
Граф можна розглядати як графічну нотацію для бінарного відношення двох множин. Бінарне відношення складається з таких кортежів або списків елементів, які містять тільки два елементи деякої множини. Хоча основні поняття теорії графів одержали свій розвиток задовго до появи теорії множин як самостійної наукової дисципліни, формальне визначення графа зручно представити в теоретико‑ множинних термінах.
Графом називається сукупність двох множин: безліч крапок або вершин і безліч сполучаючих їх ліній або ребер. Формально граф задається у вигляді двох множин: G=(V, Е), де V={v1v2. vn} – безліч вершин графа, а Е={е1, е2. еm} – безліч ребер графа. Натуральне число n визначає загальну кількість вершин конкретного графа, а натуральне число m – загальна кількість ребер графа. Слід помітити, в загальному випадку не всі вершини графа можуть з'єднуватися між собою, що ставить у відповідність кожному графу деяке бінарне відношення PQ, що складається зі всіх пар вигляду ‹vi, vj‑ , де vi,vj= V. При цьому пара ‹vi, vj‑ і, відповідно, пара ‹vj, vi‑ принадлежат відношенню PG в тому і лише в тому випадку, якщо вершини vi і vj з'єднуються в графі G деяким ребром ek=Е. Вершини графа зображаються крапками, а ребра – відрізками прямих ліній. Поряд з вершинами і ребрами записуються відповідні номери або ідентифікатори, що дозволяють їх ідентифікувати однозначним чином.
Примітка
Взагалі кажучи, графи бувають двох різних типів. Розглянуте вище визначення відноситься до неорієнтованого графа, т. е. до такого графа, у якого зв'язуючі вершини ребра не мають напряму або орієнтації. Окрім неорієнтованих графів існують орієнтовані графи, які визначаються таким чином.
Орієнтований граф також задається у вигляді двох множин G=(V, E), де V={v1, v2,.vn} – безліч вершин графа, а E={е1, е2,.еm] – безліч дуг графа. Натуральне число n визначає загальну кількість вершин конкретного графа, а натуральне число m – загальна кількість дуг графа. При цьому кожна дуга еk=Е орієнтованого графа G має своє начало– деяку єдину вершину vi=V і кінець – деяку єдину вершину vj=V, На відміну від ребра, дуга завжди має позначення із стрілкою, яка направлена до кінцевої вершини дуги. Безліч дуг ставить у відповідність кожному орієнтованому графу деяке бінарне відношення PG, що складається зі всіх пар вигляду ‹vi, vj‑ , де vi, vj=V. При цьому пара ‹vi, vj‑ належить відношенню PG в тому і лише в тому випадку, якщо вершини vi і vj з'єднуються в графі G деякою дугою еk=Е з початкомs28 у вершині viи кінцем у вершині vj.
_Нижче представлено два приклади конкретних графів (мал. 2.4). При цьому перший з них (мал. 2.4, а) є неорієнтованим графом, а другий (мал. 2.4, би) – орієнтованим графом. Як неважко помітити, для неорієнтованого графа ребро е1 сполучає вершини v1 і v2, ребро е2 – вершини v1 і v3, а ребро e3 – вершини v2 і v3 і т. д. Останнє ребро, e8, сполучає вершини v4 і v5, тим самим задається опис графа в цілому. Інших ребер даний граф не містить, як не містить інших вершин, не зображених на малюнку. Так, хоча ребра е6 і e7 візуально перетинаються, але точка їх перетину не є вершиною графа.
Для орієнтованого графа (мал. 2.4, би) ситуація дещо інша. А саме, вершини v1 і v2 сполучені дугою е1, для якої вершина v2 є початком дуги, а вершина v1 – кінцем цієї дуги. Далі дуга е2 сполучає вершини v1 і v4, при цьому початком дуги e2 є вершина v1, а кінцем – вершина v4.
