Enterprise LAN UML - Унифициран език за моделиране
UML - Унифициран език за моделиране
Unified Modeling Language, накраткоUML, се използва в различни етапи на разработка на софтуер. UML се превежда наунифициран език за моделиране.
Ако погледнете UML спецификацията, можете да видите част от излишъка. Самата спецификация заема около 900 страници А4. За щастие, за да четете UML диаграми, трябва само да знаете конвенциите, използвани в UML.
В UML програмите се представят чрез диаграми. UML диаграмите представят общата архитектура на програма или някои от нейните характеристики. Това означава, че в UML диаграми се създава само модел на бъдещата програма. UML е доста високо ниво на абстракция, така че програмите, написани на UML, могат по-късно да бъдат реализирани на всеки език, който има достатъчно възможности за обектно-ориентирано програмиране.
Unified Modeling Language може да се използва на различни етапи от разработката на софтуер: както по време на проектиране на софтуер, така и по време на кодиране на определен език. Тъй като UML е представен чрез диаграми, този език се използва не само от програмисти, но също така, например, от мениджъри в компании за разработка на софтуер (но трябва да знаете някои OOP концепции).
Сега нека се отдалечим от скучните дефиниции и да помислим защо ние, обикновените програмисти, се нуждаем от този UML? Представете си тази ситуация: имаме три класа, всеки с 300 реда код. Между класовете се определят сложни връзки. Доста трудно е да следвате кода в тази ситуация. Но ако тези класове са представени от UML диаграма, тогава всички класове и връзките между тях ще бъдат видими в една малка картина(диаграма).
Една последна бележка преди да започнем: uml е сравнително нов език, създаден в средата на 90-те (1994-1996). В момента има uml 2.2 спецификация. Ще разгледаме версия 2. Разликите между uml 1 и uml 2 не са важни за нас.
UML диаграми на класове (диаграма на класове)
Можете да създадете няколко типа диаграми в UML. В повечето случаи ще използваме диаграми на класове (Class diagram). Този тип диаграма показва взаимодействието на програмните класове.
Елементи на UML диаграма
UML диаграмите са съставени от елементи. Елементите са представени с правоъгълници, в които е изписано името на елемента. Например, нека изобразим някакъв клас в UML диаграма (например взех класа Camera, написан от нас по-рано):
Коментари в UML
Атрибут и операция в UML диаграми
Ако в C++ променлива, принадлежаща към клас, се нарича класово поле или членска променлива, то в UML такава променлива се нарича атрибут. Същото е и с функция/метод на клас - в UML това е операция.
Има отделен блок за атрибути и операции в елементи. Всеки блок е разделен с хоризонтална лента. Например за класа Camera елемент с атрибути и операции би изглеждал така:
Типът на атрибута (както и типът на аргумента на операцията) се посочва чрез двоеточие:
Тук можете да видите всички предимства на UML. В Unified Modeling Language не е необходимо да рисуватевсичкидетайли на класовете. Това ще стане при писане на код на определен език (в нашия случай C++). Можете да пропуснете ненужните подробности в UML диаграма. Например, само онези операции/атрибути, които са важни за тази диаграма, могат да бъдат добавени към диаграмата на елемента,маловажните характеристики на клас в UML могат да бъдат пропуснати.
Видимост на атрибути и операции в UML: +, -, # (спецификатори за достъп)
Спецификаторите за езиков достъп на C++ (публичен, частен, защитен) в UML са представени от знаци + (публичен), - (частен), # (защитен), които предхождат името на атрибута/операцията. Възможен е и вариант с ключовите думи public, private, protected. Картината по-долу показва и двете опции:
Позволете ми да ви напомня значението на спецификаторите за достъп: публични - полетата/методите на класа са видими извън класа. Тези. те могат да бъдат достъпни от обекти на класа. private - полетата/методите на класа се виждат само вътре в дефиницията на класа. защитен - полетата/методите на класа са видими в дефиницията на самия клас и в дефинициите на производните класове.
Връзки между класове в ООП (UML, C++)
В програмите има различни видове взаимодействие (или комуникация) между класовете: един клас може да бъде извлечен от друг, третият може да съдържа обект на четвъртия като поле. Има специални интелигентни имена за различни видове взаимодействие в UML.
Първият вид връзка е асоциацията. На български може да се превежда по различни начини: асоциация, връзка, съюз. Според мен най-добрият вариант е комуникацията, но аз използвам тази дума за всички видове взаимодействие в класа. Следователно, за да обозначим типа асоциация на връзката, ще използваме думата асоциация.
Асоциацията е най-слабият вид връзка. Обикновено асоциация възниква, когато един клас извиква метод на друг или когато метод се извиква с обект от друг клас като аргумент.
В диаграмите връзката е обозначена с плътна линия.
Например, нека напишем прост клас:
атака(инт щети) // щети - щети
Като напомняне, стандартните C++ типове са класове. Туккак ще изглежда взаимодействието на класовете MonstAr и int на UML диаграмата:
Забележете как тази диаграма показва липсата на атрибути на елемента.
Понякога асоциацията показва насоченост (ако има значение). UML спецификацията използва думата navigable. Според мен на български тук трябва да се използвапосока, тъй като тази дума правилно отразява същността. Насочеността е показана със стрелка (обърнете внимание как е нарисувана стрелката, има значение):
Имайте предвид, че стрелката сочи int. В този случай посоката на асоциирането ни казва, че методът MonstAr::Attack използва обект от тип int.
За представяне на наследяването в UML се използва обобщение (обобщение, напомням ви, че всички термини са взети от UML спецификацията). Пример:
атака(инт щети) // щети - щети
BigMonstAr : публичен MonstAr // голям (голям) MonstAr
SmallMonstAr : публичен MonstAr // малък (малък) MonstAr
При обобщаване се прави плътна линия. Обърнете внимание как е нарисувана стрелката - празен триъгълник.
Сега относно думатагенерализация(генерализация). В UML се използва той, а ненаследяване, тъй като при този тип връзка един от класовете (базов) е общ, а останалите класове (производни) са по-специализирани.
Агрегиране - агрегиране, агрегиране, включване в UML
Следващият тип връзка между класовете е агрегацията (думата идва от лат. aggregatio - съединяване). На български би било струпване, натрупване или съединяване на части. Ще използваме думатаагрегиране.
И така, в UML агрегирането отразява връзката на класовете, когатообект от един клас е атрибут на друг. Пример:
В диаграмите агрегацията е показана като отворен диамант.
Състав на клас - състав в UML
Съставът на класа е по-силна връзка между класовете, отколкото агрегацията. Има тънка граница между агрегиране и композиция. Характеристика на композицията е, че обектите, от които е създадена композицията, могат да принадлежат само към класа, с който образуват композиция. В същото време животът на обекта и класът, в който е вграден обектът, са еднакви.
Нека започнем с два примера от реалния живот. Например, DVD устройство и дисковете, които чете, образуват агрегация. Дисковете могат да се сменят свободно. Пример за състав е хляб и брашно. Вече не е възможно да се извлече брашното. В тези два примера разликата между композицията и агрегацията е ясно видима: компонентите, събрани чрез агрегация, могат да бъдат разделени, но това не може да се направи с композицията. Но обратно към програмирането.
Един от отличителните белези на агрегацията е използването на указатели. И обратното, ако не се използват указатели при свързване на класове, тогава има голяма вероятност да имаме композиция от класове.
клас Claws; // нокти - нокти
В този случай чудовището "има нокти" (дефинирани в отделен клас). Може би примерът не е много успешен, но съставът на класовете е ясно видим тук: не можете да отделите ноктите му от чудовището (той ще бъде много нещастен). В UML композицията изглежда така:
На диаграмите композицията е показана като запълнен диамант.
Предстоят ни много примери, в които можем да се упражняваме в определянето на типа връзка между класовете.
Реализация - реализация в UML
Последната връзка, която ще разгледаме, е реализацията.- изпълнение. Тази връзка показва връзката: клас - обект.