Зв'язність (англ. coupling) чи залежність (англ. dependency) — це міра, у якій модуль (компонент) програми залежить від кожного іншого модуля (використовує якусь інформацію про нього).
Зв'язність зазвичай протиставляється пов'язаності. Метрики програмного забезпечення зв'язність та пов'язаність, винайдені , першим розробником структурного проєктування, який також був першим їхнім прихильником (див. також ). Слабка зв'язність часто є ознакою добре структурованої комп'ютерної системи, та гарної архітектури, і в поєднанні з високою пов'язаністю дозволяє досягнути гарної прочитності та підтримуваності коду.
Види зв'язності
Зв'язність може бути «слабкою» (чи «низькою») або «сильною» («високою»). Розглянемо деякі види зв'язності в порядку від найвищих, до найнижчих:
Процедурне програмування
- Зв'язність за вмістом (сильна)
- З'являється, коли один модуль модифікує або залежить від внутрішнього вмісту іншого модуля (наприклад, використовує його змінні).
- Тому зміна способу, яким другий модуль обробляє дані, вимагатиме зміни залежного модуля.
- Зв'язність за спільністю даних
- Коли два модулі мають спільні глобальні дані (глобальні змінні).
- Зміна спільного ресурсу передбачає зміну всіх модулів що його використовують.
- Зовнішня зв'язність
- З'являється коли два модулі поділяють нав'язаний ззовні формат даних, протокол комунікації чи інтерфейс пристрою. Зазвичай це пов'язане з взаємодією з зовнішніми інструментами чи апаратурою.
- Зв'язність контролю
- З'являється коли один модуль контролює хід роботи іншого, передаючи йому інформацію про те що робити.
- Залежність-штамп (Залежність від структурованих даних)
- коли модулі мають спільну складну структуру даних, і використовують лише її частини, можливо різні (наприклад функції передається запис, хоча вона потребує лише його частину).
- Зв'язність даних
- Зв'язність даних виникає коли модулі діляться спільними даними через, наприклад, параметри. Кожне дане є елементарним, і єдиним яке ділиться (наприклад передача числа функції що обчислює квадратний корінь).
- Зв'язність через повідомлення (слабка)
- Найслабший тип зв'язності. Досягається за допомогою децентралізації стану (в об'єктах). Взаємодія компонентів проводиться через параметри та обмін повідомленнями.
- Відсутня
- Модулі взагалі не взаємодіють між собою.
Об'єктно-орієнтоване програмування
- Зв'язність підкласу
- Описує взаємозв'язок між предком та нащадком. Нащадок прив'язаний до предка, а предок ні.
- Тимчасова зв'язність
- Коли дві дії упаковані в один модуль лише тому, що вони можуть відбуваються одночасно.
У недавній праці інші концепції зв'язності були вивчені та використані як ознаки різних принципів модульності, що використовуються на практиці.
Недоліки
Сильно зв'язні системи зазвичай демонструють наступні характеристики розробки, які часто розглядаються як недоліки:
- Зміна одного модуля зазвичай викликає хвилю змін в інших модулях
- Збирання модулів до купи та стиковка вимагатиме більше зусиль та часу, через збільшення міжмодульних залежностей
- Конкретний модуль важче буде повторно використати та/або тестувати, тому що потрібно включити залежні модулі.
Проблеми продуктивності
Незалежно від сили зв'язності, продуктивність системи зменшується через створення повідомлень та параметрів, їх передавання, трансляцію та інтерпретацію. Дивіться подійно-орієнтоване програмування.
- Витрати на створення повідомлень
- Створення будь-якого повідомлення вимагає додаткових витрат як процесора так і пам'яті. Створення цілочисельного повідомлення (яке може бути посиланням на рядок, масив чи іншу структуру даних) вимагає менших витрат, ніж створення складного повідомлення такого як наприклад у SOAP. Для оптимізації потрібно зменшувати довжину повідомлення та збільшувати міру вмісту, яка в нього вкладається.
- Витрати на передачу повідомлень
- Оскільки для отримання змісту, повідомлення потрібно передати повністю, потрібно це оптимізувати. Коротші повідомлення передаються і приймаються швидше.
- Витрати на трансляцію повідомлень
- Протоколи повідомлень, і вони самі часто містять надлишкову інформацію (наприклад опис пакету і його структури). Тому отримувач часто потребує перетворення повідомлення в простішу форму, видаленням додаткових символів та інформації про структуру та/або приведенням типу значень до потрібного. Для оптимізації процесів трансляції повідомлення знову ж таки має мати якомога меншу довжину, за якомога більшого вмісту.
- Витрати на інтерпретацію повідомлень
- всі повідомлення мають інтерпретуватися приймачем. Прості повідомлення, такі як цілі, можуть не вимагати додаткової обробки. Проте, складні повідомлення, наприклад у SOAP, потребують парсера та перетворення рядків для відтворення змісту.
Способи вирішення проблем
Одним з підходів до зменшення зв'язності є , яке намагається обмежити відповідальності модулів у функціональності.
Слабка зв'язність виникає тоді, коли один модуль взаємодіє з іншим через простий та стабільний інтерфейс і його не хвилює як реалізований інший модуль. (дивіться: Інкапсуляція).
Такі системи як CORBA чи COM дозволяють об'єктам взаємодіяти між собою без необхідності знати що-небудь про реалізацію один одного. Обидві системи навіть дозволяють взаємодію між об'єктами написаними різними мовами.
Зв'язність та пов'язаність
Зв'язність та пов'язаність — два терміни, які дуже часто вживаються разом. Вони описують якості, які повинні мати модулі. Зв'язність характеризує взаємозв'язки між модулями, а пов'язаність описує зв'язок функцій усередині модуля. Низька пов'язаність спричиняє ситуацію, коли модуль виконує різні непов'язані завдання, і починає створювати проблеми, коли модуль стає великим.
Зв'язність модулів
У книзі «Software Engineering» зв'язність описує варіант метрики пов'язаної з цим терміном.
Для зв'язності даних та потоку керування:
- di: кількість вхідних параметрів даних
- ci: кількість вхідних контрольних параметрів
- do: кількість вихідних параметрів даних
- co: кількість вихідних контрольних параметрів
Для глобальної зв'язності:
- gd: кількість глобальних змінних, які використовуються як дані
- gc: кількість глобальних змінних, які використовуються для контролю
Для зв'язності середовищ:
- w: кількість викликаних модулів (fan-out)
- r: кількість модулів, що викликають модуль, який розглядається (fan-in)
Coupling(C)
має тим більше значення, чим більш зв'язним є модуль. Це число варіюється від приблизно 0.67 (слабка зв'язність) до 1.0 (сильна зв'язність)
Наприклад, якщо модуль має лише один вхідний, і один вихідний параметри:
Якщо модуль має 5 вхідних та вихідних параметрів, таке ж число контрольних параметрів, і використовує 10 глобальних змінних, викликає 3 модулі, і викликається чотирма,
Див. також
Примітки
- W. Stevens, G. Myers, L. Constantine, «Structured Design», IBM Systems Journal, 13 (2), 115-139, 1974.
- F. Beck, S. Diehl. On the Congruence of Modularity and Code Coupling. In Proceedings of the 19th ACM SIGSOFT Symposium and the 13th European Conference on Foundations of Software Engineering (SIGSOFT/FSE '11), Szeged, Hungary, September 2011. DOI:10.1145/2025113.2025162
- Pressman, Roger S. Ph.D (1982). Software Engineering — A Practitioner's Approach — Fourth Edition.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Zv yaznist angl coupling chi zalezhnist angl dependency ce mira u yakij modul komponent programi zalezhit vid kozhnogo inshogo modulya vikoristovuye yakus informaciyu pro nogo Zv yaznist zazvichaj protistavlyayetsya pov yazanosti Metriki programnogo zabezpechennya zv yaznist ta pov yazanist vinajdeni pershim rozrobnikom strukturnogo proyektuvannya yakij takozh buv pershim yihnim prihilnikom div takozh Slabka zv yaznist chasto ye oznakoyu dobre strukturovanoyi komp yuternoyi sistemi ta garnoyi arhitekturi i v poyednanni z visokoyu pov yazanistyu dozvolyaye dosyagnuti garnoyi prochitnosti ta pidtrimuvanosti kodu Vidi zv yaznostiKonceptualna model zv yaznosti Zv yaznist mozhe buti slabkoyu chi nizkoyu abo silnoyu visokoyu Rozglyanemo deyaki vidi zv yaznosti v poryadku vid najvishih do najnizhchih Procedurne programuvannya Zv yaznist za vmistom silna Z yavlyayetsya koli odin modul modifikuye abo zalezhit vid vnutrishnogo vmistu inshogo modulya napriklad vikoristovuye jogo zminni Tomu zmina sposobu yakim drugij modul obroblyaye dani vimagatime zmini zalezhnogo modulya Zv yaznist za spilnistyu danih Koli dva moduli mayut spilni globalni dani globalni zminni Zmina spilnogo resursu peredbachaye zminu vsih moduliv sho jogo vikoristovuyut Zovnishnya zv yaznist Z yavlyayetsya koli dva moduli podilyayut nav yazanij zzovni format danih protokol komunikaciyi chi interfejs pristroyu Zazvichaj ce pov yazane z vzayemodiyeyu z zovnishnimi instrumentami chi aparaturoyu Zv yaznist kontrolyu Z yavlyayetsya koli odin modul kontrolyuye hid roboti inshogo peredayuchi jomu informaciyu pro te sho robiti Zalezhnist shtamp Zalezhnist vid strukturovanih danih koli moduli mayut spilnu skladnu strukturu danih i vikoristovuyut lishe yiyi chastini mozhlivo rizni napriklad funkciyi peredayetsya zapis hocha vona potrebuye lishe jogo chastinu Zv yaznist danih Zv yaznist danih vinikaye koli moduli dilyatsya spilnimi danimi cherez napriklad parametri Kozhne dane ye elementarnim i yedinim yake dilitsya napriklad peredacha chisla funkciyi sho obchislyuye kvadratnij korin Zv yaznist cherez povidomlennya slabka Najslabshij tip zv yaznosti Dosyagayetsya za dopomogoyu decentralizaciyi stanu v ob yektah Vzayemodiya komponentiv provoditsya cherez parametri ta obmin povidomlennyami Vidsutnya Moduli vzagali ne vzayemodiyut mizh soboyu Ob yektno oriyentovane programuvannya Zv yaznist pidklasu Opisuye vzayemozv yazok mizh predkom ta nashadkom Nashadok priv yazanij do predka a predok ni Timchasova zv yaznist Koli dvi diyi upakovani v odin modul lishe tomu sho voni mozhut vidbuvayutsya odnochasno U nedavnij praci inshi koncepciyi zv yaznosti buli vivcheni ta vikoristani yak oznaki riznih principiv modulnosti sho vikoristovuyutsya na praktici NedolikiSilno zv yazni sistemi zazvichaj demonstruyut nastupni harakteristiki rozrobki yaki chasto rozglyadayutsya yak nedoliki Zmina odnogo modulya zazvichaj viklikaye hvilyu zmin v inshih modulyah Zbirannya moduliv do kupi ta stikovka vimagatime bilshe zusil ta chasu cherez zbilshennya mizhmodulnih zalezhnostej Konkretnij modul vazhche bude povtorno vikoristati ta abo testuvati tomu sho potribno vklyuchiti zalezhni moduli Problemi produktivnostiNezalezhno vid sili zv yaznosti produktivnist sistemi zmenshuyetsya cherez stvorennya povidomlen ta parametriv yih peredavannya translyaciyu ta interpretaciyu Divitsya podijno oriyentovane programuvannya Vitrati na stvorennya povidomlen Stvorennya bud yakogo povidomlennya vimagaye dodatkovih vitrat yak procesora tak i pam yati Stvorennya cilochiselnogo povidomlennya yake mozhe buti posilannyam na ryadok masiv chi inshu strukturu danih vimagaye menshih vitrat nizh stvorennya skladnogo povidomlennya takogo yak napriklad u SOAP Dlya optimizaciyi potribno zmenshuvati dovzhinu povidomlennya ta zbilshuvati miru vmistu yaka v nogo vkladayetsya Vitrati na peredachu povidomlen Oskilki dlya otrimannya zmistu povidomlennya potribno peredati povnistyu potribno ce optimizuvati Korotshi povidomlennya peredayutsya i prijmayutsya shvidshe Vitrati na translyaciyu povidomlen Protokoli povidomlen i voni sami chasto mistyat nadlishkovu informaciyu napriklad opis paketu i jogo strukturi Tomu otrimuvach chasto potrebuye peretvorennya povidomlennya v prostishu formu vidalennyam dodatkovih simvoliv ta informaciyi pro strukturu ta abo privedennyam tipu znachen do potribnogo Dlya optimizaciyi procesiv translyaciyi povidomlennya znovu zh taki maye mati yakomoga menshu dovzhinu za yakomoga bilshogo vmistu Vitrati na interpretaciyu povidomlen vsi povidomlennya mayut interpretuvatisya prijmachem Prosti povidomlennya taki yak cili mozhut ne vimagati dodatkovoyi obrobki Prote skladni povidomlennya napriklad u SOAP potrebuyut parsera ta peretvorennya ryadkiv dlya vidtvorennya zmistu Sposobi virishennya problemOdnim z pidhodiv do zmenshennya zv yaznosti ye yake namagayetsya obmezhiti vidpovidalnosti moduliv u funkcionalnosti Slabka zv yaznist vinikaye todi koli odin modul vzayemodiye z inshim cherez prostij ta stabilnij interfejs i jogo ne hvilyuye yak realizovanij inshij modul divitsya Inkapsulyaciya Taki sistemi yak CORBA chi COM dozvolyayut ob yektam vzayemodiyati mizh soboyu bez neobhidnosti znati sho nebud pro realizaciyu odin odnogo Obidvi sistemi navit dozvolyayut vzayemodiyu mizh ob yektami napisanimi riznimi movami Zv yaznist ta pov yazanistZv yaznist ta pov yazanist dva termini yaki duzhe chasto vzhivayutsya razom Voni opisuyut yakosti yaki povinni mati moduli Zv yaznist harakterizuye vzayemozv yazki mizh modulyami a pov yazanist opisuye zv yazok funkcij useredini modulya Nizka pov yazanist sprichinyaye situaciyu koli modul vikonuye rizni nepov yazani zavdannya i pochinaye stvoryuvati problemi koli modul staye velikim Zv yaznist modulivU knizi Software Engineering zv yaznist opisuye variant metriki pov yazanoyi z cim terminom Dlya zv yaznosti danih ta potoku keruvannya di kilkist vhidnih parametriv danih ci kilkist vhidnih kontrolnih parametriv do kilkist vihidnih parametriv danih co kilkist vihidnih kontrolnih parametriv Dlya globalnoyi zv yaznosti gd kilkist globalnih zminnih yaki vikoristovuyutsya yak dani gc kilkist globalnih zminnih yaki vikoristovuyutsya dlya kontrolyu Dlya zv yaznosti seredovish w kilkist viklikanih moduliv fan out r kilkist moduliv sho viklikayut modul yakij rozglyadayetsya fan in Coupling C 1 1di 2 ci do 2 co gd 2 gc w r displaystyle mathrm Coupling C 1 frac 1 d i 2 times c i d o 2 times c o g d 2 times g c w r Coupling C maye tim bilshe znachennya chim bilsh zv yaznim ye modul Ce chislo variyuyetsya vid priblizno 0 67 slabka zv yaznist do 1 0 silna zv yaznist Napriklad yaksho modul maye lishe odin vhidnij i odin vihidnij parametri C 1 11 0 1 0 0 0 1 0 1 13 0 67 displaystyle C 1 frac 1 1 0 1 0 0 0 1 0 1 frac 1 3 approx 0 67 Yaksho modul maye 5 vhidnih ta vihidnih parametriv take zh chislo kontrolnih parametriv i vikoristovuye 10 globalnih zminnih viklikaye 3 moduli i viklikayetsya chotirma C 1 15 2 5 5 2 5 10 0 3 4 0 98 displaystyle C 1 frac 1 5 2 times 5 5 2 times 5 10 0 3 4 0 98 Div takozhPov yazanist programuvannya Peklo zalezhnostej Inversiya keruvannya Spisok terminiv ob yektno oriyentovanogo programuvannya makePrimitkiW Stevens G Myers L Constantine Structured Design IBM Systems Journal 13 2 115 139 1974 F Beck S Diehl On the Congruence of Modularity and Code Coupling In Proceedings of the 19th ACM SIGSOFT Symposium and the 13th European Conference on Foundations of Software Engineering SIGSOFT FSE 11 Szeged Hungary September 2011 DOI 10 1145 2025113 2025162 Pressman Roger S Ph D 1982 Software Engineering A Practitioner s Approach Fourth Edition ISBN 0 07 052182 4