Тема 3. Структурни диаграми по UML 2.0:

58
Тема 3. Тема 3. Структурни Структурни диаграми по UML 2.0: диаграми по UML 2.0:

description

Тема 3. Структурни диаграми по UML 2.0:. Структурни диаграми. Дефиниция за Обектно ориентирано програмиране; Характеристики на ОО приложенията; Видове класови йерархии Структурни диаграми на класовете; Класови диаграми; Имплементация на класови наследявания ; - PowerPoint PPT Presentation

Transcript of Тема 3. Структурни диаграми по UML 2.0:

Page 1: Тема 3.  Структурни диаграми по UML 2.0:

Тема 3. Тема 3. Структурни Структурни диаграми по UML 2.0:диаграми по UML 2.0:

Page 2: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграмиСтруктурни диаграми Дефиниция за Обектно ориентирано програмиране;Дефиниция за Обектно ориентирано програмиране; Характеристики на ОО приложенията;Характеристики на ОО приложенията; Видове класови йерархииВидове класови йерархии Структурни диаграми на класовете;Структурни диаграми на класовете;

– Класови диаграми;Класови диаграми;– Имплементация на класови наследяванияИмплементация на класови наследявания;;– Асоциация- основни понятия (Кардиналност, Асоциация- основни понятия (Кардиналност,

Незадължителност), Мултипликатор; Роля;Незадължителност), Мултипликатор; Роля; Частни случаи;Частни случаи; Имплементиране на асоциация;Имплементиране на асоциация;

– Имплементиране на асоциации от тип едно към едно;Имплементиране на асоциации от тип едно към едно;– Имплементиране на еднопосочни и двупосочни Имплементиране на еднопосочни и двупосочни

асоциацииасоциации;;– Имплементиране на асоциации от тип едно към Имплементиране на асоциации от тип едно към

многомного;;– Имплементиране наИмплементиране на асоциации от тип много към асоциации от тип много към

многомного;;– Имплементиране на рекурсивни асоциацииИмплементиране на рекурсивни асоциации..

Page 3: Тема 3.  Структурни диаграми по UML 2.0:

Дефиниция за Обектно Дефиниция за Обектно ориентирано програмиранеориентирано програмиране

Дефиниция за Обектно ориентирано Дефиниция за Обектно ориентирано програмиране (ООП):програмиране (ООП):

Метод за създаване на програми, който Метод за създаване на програми, който използва абстракции чрез обекти, използва абстракции чрез обекти, затворени класове, комуникация чрез затворени класове, комуникация чрез съобщения, време на съществуване на съобщения, време на съществуване на обектите, класови йерархии и обектите, класови йерархии и полиморфизъм.полиморфизъм.

Page 4: Тема 3.  Структурни диаграми по UML 2.0:

Характеристики на ОО Характеристики на ОО приложениятаприложенията

Всяка ОО програмна система трябва Всяка ОО програмна система трябва да има следните характеристики:да има следните характеристики:

абстракции чрез обекти;абстракции чрез обекти; затворени класове;затворени класове; комуникация чрез съобщения;комуникация чрез съобщения; време на съществуване на обектите;време на съществуване на обектите; класови йерархии;класови йерархии; полиморфизъм.полиморфизъм.

Page 5: Тема 3.  Структурни диаграми по UML 2.0:

Характеристики на ОО Характеристики на ОО приложениятаприложенията

абстракции чрез обекти;абстракции чрез обекти;Дефиниция: Абстракцията е модел на Дефиниция: Абстракцията е модел на

обекти от реалния свят или концепция.обекти от реалния свят или концепция.Абстракцията е механизъм за възприемане Абстракцията е механизъм за възприемане

на сложни ситуации от реалния свят, на сложни ситуации от реалния свят, представени чрез опростен модел. ОО представени чрез опростен модел. ОО абстракция се основава на обекти и абстракция се основава на обекти и тяхното взаимодействие с други обекти. тяхното взаимодействие с други обекти. Например, цвят в модел на смесица от Например, цвят в модел на смесица от интензивности на основните цветове интензивности на основните цветове RGB (или друг модел).RGB (или друг модел).

Page 6: Тема 3.  Структурни диаграми по UML 2.0:

Характеристики на ОО Характеристики на ОО приложениятаприложенията Затворени класовеЗатворени класове

Дефиниция: Дефиниция: Затворени класове (encapsulation) Процес на скриване на Затворени класове (encapsulation) Процес на скриване на

вътрешните детайли на обекта от останалия свят. вътрешните детайли на обекта от останалия свят. В Java, процесът се прилага чрез включване на дефиниции за В Java, процесът се прилага чрез включване на дефиниции за

атрибутите и методите в тялото на класовата дефиниция. атрибутите и методите в тялото на класовата дефиниция. Пример:Пример:CPerson.javaCPerson.javapackage OOPSamples;package OOPSamples;

public class CPerson {public class CPerson {private class Sex private class Sex {{

static final int Male=0;static final int Male=0;static final int Female=1;static final int Female=1;

}}private int m_Sex;private int m_Sex;private String m_strName;private String m_strName;private String m_egn;private String m_egn;private CAddress m_address;private CAddress m_address;

……..}}

Page 7: Тема 3.  Структурни диаграми по UML 2.0:

Характеристики на ОО Характеристики на ОО приложениятаприложенията

Затворени класове Затворени класовеПример – скриване на имплементацията на Пример – скриване на имплементацията на

цветовете в класа CColor:цветовете в класа CColor:Първоначално се описва класът CColor като се Първоначално се описва класът CColor като се

предоставя един от начините за промяна-чрез предоставя един от начините за промяна-чрез стойностите на червената, зелената и синя стойностите на червената, зелената и синя негова стойност. негова стойност.

Впоследствие се разглежда класът CColor в по-Впоследствие се разглежда класът CColor в по-принципен начин на представяне, без да се принципен начин на представяне, без да се разкрива как вътрешно се представя обекта. разкрива как вътрешно се представя обекта. Той може да използва както модели:Той може да използва както модели:

модела HSV отенък, наситеност и стойност модела HSV отенък, наситеност и стойност (hue, saturation, value) ; (hue, saturation, value) ;

смесица от интензивности на основните смесица от интензивности на основните цветове (RGB). цветове (RGB).

Page 8: Тема 3.  Структурни диаграми по UML 2.0:

Характеристики на ОО Характеристики на ОО приложениятаприложенията

Затворени класове Затворени класовеСъстоянията и поведението на обекта се Състоянията и поведението на обекта се

контролира от добре дефинирани и контролира от добре дефинирани и ограничени интерфейси към него. ограничени интерфейси към него. Скриване на вътрешните детайли на Скриване на вътрешните детайли на обекта от останалия свят осигурява обекта от останалия свят осигурява постановката, че всеки обект постановката, че всеки обект съхранява своето вътрешно съхранява своето вътрешно уникално състояние и това уникално състояние и това състояние може да се променя с състояние може да се променя с добре дефинирани съобщения.добре дефинирани съобщения.

Page 9: Тема 3.  Структурни диаграми по UML 2.0:

Характеристики на ОО Характеристики на ОО приложениятаприложенията

Комуникация чрез съобщенияКомуникация чрез съобщения Комуникация чрез съобщенияКомуникация чрез съобщения;;За да реализират взаимодействия помежду си, За да реализират взаимодействия помежду си,

обектите се нуждаят от комуникация помежду обектите се нуждаят от комуникация помежду си. Взаимодействието може да е както между си. Взаимодействието може да е както между обектите от един клас, така и с други обекти. обектите от един клас, така и с други обекти. Това взаимодействие се осъществява със Това взаимодействие се осъществява със съобщениясъобщения

(в Java това става с методи)(в Java това става с методи) към други обекти, към други обекти, като се предава информация или искане за като се предава информация или искане за действие. Например, когато потребителя натисне действие. Например, когато потребителя натисне с мишката команден бутон в диалогова кутия на с мишката команден бутон в диалогова кутия на екрана, се праща съобщение към диалоговия екрана, се праща съобщение към диалоговия обект, или искане за действие от обекта. обект, или искане за действие от обекта.

Page 10: Тема 3.  Структурни диаграми по UML 2.0:

Характеристики на ОО Характеристики на ОО приложениятаприложенията Временно Временно

съществуване на обектитесъществуване на обектите Временно съществуване на обектите Временно съществуване на обектите

Всички обекти имат време за Всички обекти имат време за съществуванесъществуване. .

Те се създават и инициализират когато са Те се създават и инициализират когато са необходими в процеса на изпълнение на необходими в процеса на изпълнение на програмата, съществуват и извикват функциите програмата, съществуват и извикват функциите си и се премахват. Докато съществуват обектите си и се премахват. Докато съществуват обектите съхраняват собственото си идентичност и съхраняват собственото си идентичност и състояние. Много обекти, които са инстанции от състояние. Много обекти, които са инстанции от даден клас могат да съществуват различно даден клас могат да съществуват различно време. Всеки от обектите има собствена време. Всеки от обектите има собствена идентичност, определена от съвкупността от идентичност, определена от съвкупността от стойности на член-променливите си. стойности на член-променливите си.

Page 11: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на Структурни диаграми на класовете Класова диаграмакласовете Класова диаграма

Класова диаграма (Class diagram)Класова диаграма (Class diagram)Същност:Същност:

Символи:Символи:- (private) - частен елемент: - (private) - частен елемент:

атрибут или метод;атрибут или метод;+ (public) - публичен елемент;+ (public) - публичен елемент;# (protected) - защитен елемент;# (protected) - защитен елемент;

Page 12: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Класова диаграмаКласова диаграма

Page 13: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Класова диаграмаКласова диаграма

Page 14: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Класова диаграмаКласова диаграма

Page 15: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Класова диаграмаКласова диаграма

Page 16: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Класова диаграмаКласова диаграма

Page 17: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Класова диаграмаКласова диаграма

Правила за видимост (достъп)Правила за видимост (достъп) Публичните методи могат да се извикват от всички Публичните методи могат да се извикват от всички

външни класове OtherClass;външни класове OtherClass; защитените методи – от наследниците;защитените методи – от наследниците; частните, само от членовете на класа. частните, само от членовете на класа.

Правило за ограничаване на видимостта при Правило за ограничаване на видимостта при проектиране на приложенията: проектиране на приложенията:

Да се ограничава възможно най-много видимостта на Да се ограничава възможно най-много видимостта на атрибута или метода. Това правило означава, че атрибута или метода. Това правило означава, че ако даден елемент (атрибут или метод) няма ако даден елемент (атрибут или метод) няма причина да бъде публичен, той се прави защитен. причина да бъде публичен, той се прави защитен. Ако няма обосновка да бъде защитен, дефинира Ако няма обосновка да бъде защитен, дефинира се като частен.се като частен.

Page 18: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Класова диаграмаКласова диаграма

Page 19: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Класова диаграмаКласова диаграма

(Примерна класова йерархия)(Примерна класова йерархия)

Page 20: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Имплементация на класови Имплементация на класови

наследяваниянаследяванияПример за наследяване и вграждане на класове Пример за наследяване и вграждане на класове

е показаната класова йерархия на класовете:е показаната класова йерархия на класовете: Точка: CТочка: CPPoint;oint; Цвят: CColor;Цвят: CColor; Фигура: CShape, Дефинира цвят и позиция на Фигура: CShape, Дефинира цвят и позиция на

абстрактна фигура. Обектите са атрибути на абстрактна фигура. Обектите са атрибути на класа;класа;

Кръг: CCircle – наследник на фигура, Кръг: CCircle – наследник на фигура, дефинира радиуса;дефинира радиуса;

Правоъгълник : CRectangle – наследник на Правоъгълник : CRectangle – наследник на фигура, дефинира височина и ширина;фигура, дефинира височина и ширина;

Page 21: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Имплементация на класови Имплементация на класови

наследяваниянаследяванияpublic class CPointpublic class CPoint{{// Атрибути// Атрибутиprivate double myX;private double myX;private double myY;private double myY;// Конструктори// Конструктори

public CPoint(double x, double y) {public CPoint(double x, double y) {myX = x; myY = y;myX = x; myY = y;

}}public CPoint() {public CPoint() {

myX = 0.; myY = 0.;myX = 0.; myY = 0.;}}

// Методи// Методиpublic double getX() {public double getX() {

return myX;return myX;}}public double getY(){public double getY(){

return myY;return myY;}}public void setPoint(double x, double y) {public void setPoint(double x, double y) {

myX = x; myY = y;myX = x; myY = y;}}

}}

Page 22: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Имплементация на класови Имплементация на класови

наследяваниянаследявания/** CColor – RGB представяне*//** CColor – RGB представяне*/public class CColor {public class CColor {// Атрибути// Атрибути

privateprivate int red;int red;privateprivate int green;int green;privateprivate int blue;int blue;

// Конструктори// Конструкториpublic CColor()public CColor() { red = 255; green = 0; blue = 125; }{ red = 255; green = 0; blue = 125; }public CColor(int r, int g, int b)public CColor(int r, int g, int b) { red = r; green = g; blue = b; }{ red = r; green = g; blue = b; }

// Методи// Методиpublic long RGB2(int red, int green, int blue) {public long RGB2(int red, int green, int blue) { return (red | (green<<4) | (blue<<8)); return (red | (green<<4) | (blue<<8)); //red+16*green+256*blue;//red+16*green+256*blue; }}public int getR() { return red; }public int getR() { return red; }public int getG() {return green;}public int getG() {return green;}public int getB() { return blue; }public int getB() { return blue; }public void setRGB(int r, int g, int b)public void setRGB(int r, int g, int b) {{ red = r; green = g; blue = b;red = r; green = g; blue = b;}}

}}

Page 23: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Имплементация на класови Имплементация на класови

наследяваниянаследявания/**/*** CShape – абстрактен базов клас за фигури.* CShape – абстрактен базов клас за фигури.* Дефинира цвят (color) и позиция (origin) и get/set методи на фигурата * Дефинира цвят (color) и позиция (origin) и get/set методи на фигурата * Дефинира абстрактни методи за лице и периметър на реални фигури* Дефинира абстрактни методи за лице и периметър на реални фигури*/*/public abstract class CShapepublic abstract class CShape{{// Атрибути// Атрибутиprivate CColor color;private CColor color;private CPoint origin;private CPoint origin;// Конструктори// Конструктори

protected CShape(CColor col, CPoint org) {protected CShape(CColor col, CPoint org) {origin = new CPoint(org.getX(), org.getY());origin = new CPoint(org.getX(), org.getY());color = new CColor(col.getR(),col.getG(), col.getB());color = new CColor(col.getR(),col.getG(), col.getB());

}}protected CShape(CPoint org) {protected CShape(CPoint org) {

origin = new CPoint(org.getX(), org.getY());origin = new CPoint(org.getX(), org.getY());color = new CColor(0,0,0); // черенcolor = new CColor(0,0,0); // черен

}}

protected CShape() protected CShape() {{origin = new CPoint(0.0, 0.0); // позиция 0.,0. origin = new CPoint(0.0, 0.0); // позиция 0.,0. color = new CColor(0,0,0); // черенcolor = new CColor(0,0,0); // черен

}}

Page 24: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Имплементация на класови Имплементация на класови

наследяваниянаследявания// Методи// Методи

public abstract double area(); // реална функция в public abstract double area(); // реална функция в наследниканаследникаpublic abstract double perimeter(); // реална функция в public abstract double perimeter(); // реална функция в наследниканаследникаpublic CColor getColor()public CColor getColor() {{

return color;return color;}}public void setColor(CColor col)public void setColor(CColor col) {{

color.setRGB(col.getR(), col.getG(), col.getB());color.setRGB(col.getR(), col.getG(), col.getB());}}public CPoint getOrigin()public CPoint getOrigin(){{

return origin;return origin;}}public void setOrigin(CPoint org){public void setOrigin(CPoint org){

origin.setPoint(org.getX(), org.getY());origin.setPoint(org.getX(), org.getY());}}

}}

Page 25: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Имплементация на класови Имплементация на класови

наследяваниянаследяванияpublic class CCircle extends CShapepublic class CCircle extends CShape{{// Атрибути// Атрибути

private double radius;private double radius;// Конструктори// Конструктори

public CCircle()public CCircle() {{super();super();radius = 0.0;radius = 0.0;

}}public CCircle(final CPoint org, final double rad) // атрибути public CCircle(final CPoint org, final double rad) // атрибути за константностза константност{{

super(org);super(org);radius = rad;radius = rad;

}}

Page 26: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Имплементация на класови Имплементация на класови

наследяваниянаследявания// Методи// Методи на CCircleна CCircle

public double area()public double area() {{return Math.PI * radius * radius; // import java.lang.Math; (PI)return Math.PI * radius * radius; // import java.lang.Math; (PI)}}public double getRadius()public double getRadius() {{return radius;return radius;}}public double perimeter() {public double perimeter() {return 2 * Math.PI * radius; // 2 PI r достъп до библиотека return 2 * Math.PI * radius; // 2 PI r достъп до библиотека (пакет)(пакет)}}public void setRadius(double r)public void setRadius(double r) {{radius = r;radius = r;}}

}}

Page 27: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Имплементация на класови Имплементация на класови

наследяваниянаследявания /*/** CRectangle – дефинира височина (height) и ширина (width)* CRectangle – дефинира височина (height) и ширина (width)*/*/public class CRectangle extends CShapepublic class CRectangle extends CShape{{// Атрибути// Атрибути

private double height;private double height;private double width;private double width;

// Конструктори// Конструкториpublic CRectangle(){public CRectangle(){

super();super();height = 0.0; width = 0.0;height = 0.0; width = 0.0;

}}public CRectangle(CPoint org, double h, double w){public CRectangle(CPoint org, double h, double w){

super(org);super(org);height = h; width = w;height = h; width = w;

}}

Page 28: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Имплементация на класови Имплементация на класови

наследяваниянаследявания// Методи на CRectangle// Методи на CRectangle

public double area(){public double area(){return height * width;return height * width;

}}public double perimeter() {public double perimeter() {

return 2 * (height + width);return 2 * (height + width);}}public double getH(){public double getH(){

return height;return height;}}public double getW(){public double getW(){

return width;return width;}}public void setHW(double h, double w) {public void setHW(double h, double w) {

height = h; width = w;height = h; width = w;}}

}}

Page 29: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Асоциация (дефиниция)Асоциация (дефиниция)

Асоциация-Основни понятияАсоциация-Основни понятияДефиниция: Дефиниция: Асоциация (association): Отношение между Асоциация (association): Отношение между

два класа в класова йерархия, два класа в класова йерархия, определящо че елементите имат определящо че елементите имат взаимовръзка помежду си. Най-често се взаимовръзка помежду си. Най-често се имплементира с инстанция на променлива имплементира с инстанция на променлива от друг клас в класа. от друг клас в класа.

В ОО проектирането класовете и обектите В ОО проектирането класовете и обектите се организират в йерархии, които описват се организират в йерархии, които описват релациите между класовете. Най-простата релациите между класовете. Най-простата релация е връзката (релация е връзката (associationassociation)). .

Page 30: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Асоциация (дефиниция)Асоциация (дефиниция)

Примери:Примери:

Студентите Студентите ИЗУЧАВАТИЗУЧАВАТ дисциплини; дисциплини; Доцентите Доцентите ПРЕПОДАВАТПРЕПОДАВАТ курсове; курсове; Престъпниците Престъпниците ОБИРАТОБИРАТ банки; банки; Капитаните Капитаните КОМАНДВАТКОМАНДВАТ корабите. корабите.

Тази проста връзка съществува между различни Тази проста връзка съществува между различни класове обекти. Тя е важна за определяне как класове обекти. Тя е важна за определяне как взаимодействат обектите помежду си. взаимодействат обектите помежду си. ИЗУЧАВАТ, ПРЕПОДАВАТ, ОБИРАТ,ИЗУЧАВАТ, ПРЕПОДАВАТ, ОБИРАТ, КОМАНДВАТКОМАНДВАТ са глаголи, които дефинират са глаголи, които дефинират взаимодействието между обектите. взаимодействието между обектите.

Page 31: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Асоциация (дефиниция)Асоциация (дефиниция)

Идентифицирането на връзката между обектите Идентифицирането на връзката между обектите не е достатъчно за нейното описание. не е достатъчно за нейното описание. Необходимо е да се определи и Необходимо е да се определи и същината на същината на връзкатавръзката. .

Количествените характеристикина Количествените характеристикина отношението:отношението:Например, колко дисциплини Например, колко дисциплини ИЗУЧАВАТИЗУЧАВАТ студентите? Нито една, една или няколко. студентите? Нито една, една или няколко.

Отношението може да е Отношението може да е двупосочно или двупосочно или еднопосочно:еднопосочно:Например, не само студентите Например, не само студентите ИЗУЧАВАТ ИЗУЧАВАТ дисциплините, но и дисциплините се изучават дисциплините, но и дисциплините се изучават от студентите. от студентите.

Page 32: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Асоциация (дефиниция)Асоциация (дефиниция)

Дефиниция: Кардиналност Дефиниция: Кардиналност (cardinality)(cardinality) на връзката на връзката определя количествена определя количествена характеристика на отношението, характеристика на отношението, тоест дава отговор на въпроса тоест дава отговор на въпроса „„Колко обекта се свързват в Колко обекта се свързват в отношениетоотношението“.“.

Page 33: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Асоциация (дефиниция)Асоциация (дефиниция)

Дефиниция: Незадължителност Дефиниция: Незадължителност (optionality)(optionality) на връзката определя на връзката определя количествена характеристика на количествена характеристика на отношението, определяща отношението, определяща възможността за наличие или възможността за наличие или отсъствие на отношението, тоест отсъствие на отношението, тоест дава отговор на въпроса дава отговор на въпроса „Има ли „Има ли въобще такава връзка между въобще такава връзка между обектите в отношението“обектите в отношението“..

Page 34: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Асоциация (дефиниция)Асоциация (дефиниция)

Дефиниция: Мултипликатор Дефиниция: Мултипликатор ((multiplicity) multiplicity) на на връзката е връзката е UMLUML диаграма, обединяваща диаграма, обединяваща концепцията концепцията кардиналност и кардиналност и незадължителностнезадължителност..

За дефиниране на асоциация и нейното За дефиниране на асоциация и нейното представяне чрез диаграма е необходимо да се представяне чрез диаграма е необходимо да се определи определи колко обекта участват във колко обекта участват във връзкатавръзката, тоест мощност (кардиналност) - , тоест мощност (кардиналност) - cardinality на отношението и cardinality на отношението и има ли въобще има ли въобще такава връзка -такава връзка - optionalityoptionality. В диаграмите на . В диаграмите на класовите йерархии за описание на асоциацията класовите йерархии за описание на асоциацията се използва се използва обща концепцияобща концепция, , наречена наречена мултипликатормултипликатор ( (multiplicity).multiplicity).

Page 35: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Асоциация (дефиниция)Асоциация (дефиниция)

Видове мултипликатори:Видове мултипликатори: 0..10..1 Нула или един;Нула или един; 11 Само един;Само един; 0..*0..* Нула или повече;Нула или повече; 1..*1..* Един или повече;Един или повече; nn Само n, ( където n>1);Само n, ( където n>1); 0..n0..n Нула до n ( където n>1);Нула до n ( където n>1); 1..n1..n Един до n ( където n>1);Един до n ( където n>1);

Page 36: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Асоциация (дефиниция)Асоциация (дефиниция)

Дефиниция: Роля (Role)Дефиниция: Роля (Role) на обекта относно на обекта относно връзката му в отношението-определя връзката му в отношението-определя качествена характеристика на обекта относно качествена характеристика на обекта относно отношението. отношението. Един и същ клас може да Един и същ клас може да предоставя обекти, изпълняващи различни роли предоставя обекти, изпълняващи различни роли в различните отношения. Например, класът в различните отношения. Например, класът личност (Person) може да играе роля на съпруг в личност (Person) може да играе роля на съпруг в семейство, студент в университета, работник семейство, студент в университета, работник във фирма и други. Студентът магистър в във фирма и други. Студентът магистър в ролята на асистент в бакалавърската степен ролята на асистент в бакалавърската степен може да преподава лабораторни упражнения, може да преподава лабораторни упражнения, като същевременно посещава занятия (в като същевременно посещава занятия (в магистърската степен) в ролята на студент.магистърската степен) в ролята на студент.

Page 37: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Асоциация (дефиниция)Асоциация (дефиниция)

Обща схема за моделиране на асоциацияОбща схема за моделиране на асоциация::Елементите на схемата показват два класа A и B с обозначена Елементите на схемата показват два класа A и B с обозначена

асоциация между тях. Обозначението включва два асоциация между тях. Обозначението включва два мултипликатора мултипликатора multiplicityА,multiplicityА,BB на връзката от двата класа един на връзката от двата класа един към друг, обозначение на асоциацията към друг, обозначение на асоциацията labellabel и ролята и ролята role A, Brole A, B на класовете в асоциацията.на класовете в асоциацията.

Page 38: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Асоциация (дефиниция)Асоциация (дефиниция)

Примерни асоциации:Примерни асоциации: СтудентътСтудентът посещава посещава една или повечеедна или повече лекции; лекции; ЛекциитеЛекциите се посещава се посещава от нула или повечеот нула или повече студенти; студенти; Студентът, като асистентСтудентът, като асистент обучава по обучава по едно или едно или

повечеповече лабораторни упражнения; лабораторни упражнения; Лабораторното упражнениеЛабораторното упражнение може да се преподава от може да се преподава от

един студент като асистент.един студент като асистент. Лабораторното упражнениеЛабораторното упражнение е част от дисциплина; е част от дисциплина; Дисциплината има нула или повече Дисциплината има нула или повече частичасти; ; Служителят Служителят заемазаема една длъжност; една длъжност; Една длъжност Една длъжност се заемасе заема от един служител, но може да от един служител, но може да

има незаети длъжности;има незаети длъжности; Един служител може Един служител може да бъде командванда бъде командван от друг от друг

служител, който е негов единствен началник. Само служител, който е негов единствен началник. Само президентът на фирмата е служител без началник;президентът на фирмата е служител без началник;

Началникът Началникът командвакомандва нула или повече служители. нула или повече служители. Възможно е да има служител без подчинени;Възможно е да има служител без подчинени;

Page 39: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Асоциация (примери)Асоциация (примери)

Примерни модели на асоциации:Примерни модели на асоциации:

Схемата показва, че един служител може да има Схемата показва, че един служител може да има 0..*0..* подчинени и самият той подчинени и самият той да има нула до един началник да има нула до един началник 0..10..1, който да го , който да го командвакомандва..

Page 40: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Асоциация (частни случаи)Асоциация (частни случаи)

Частни случаи на асоциации:Частни случаи на асоциации:1. Между два класа може да има повече от една асоциация. Например, 1. Между два класа може да има повече от една асоциация. Например,

студентът може да посещава лабораторни упражнения и да преподава студентът може да посещава лабораторни упражнения и да преподава като асистент на лабораторни упражнения. Това се осъществява с две като асистент на лабораторни упражнения. Това се осъществява с две различни асоциации на студента в две различни роли на същия.различни асоциации на студента в две различни роли на същия.

Page 41: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Асоциация (частни случаи)Асоциация (частни случаи)

2. Възможно е рекурсивно дефиниране на асоциации, при които 2. Възможно е рекурсивно дефиниране на асоциации, при които асоциацията асоциацията командвакомандва се дефинира за класа служители и се дефинира за класа служители и определя отношение на класа със себе си. Служителят е от двете определя отношение на класа със себе си. Служителят е от двете страни на рекурсивното отношение командва, в ролята на началник страни на рекурсивното отношение командва, в ролята на началник и на обикновен служител, командван от началника.и на обикновен служител, командван от началника.

Page 42: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Асоциация (частни случаи)Асоциация (частни случаи)

3. Съществува еднопосочна асоциация, например 3. Съществува еднопосочна асоциация, например заема между служител и заема между служител и длъжност, длъжност, при която служителят знае каква длъжност заема, но длъжността при която служителят знае каква длъжност заема, но длъжността не е задължена да знае кой служител я заема. Това се нарича еднопосочна не е задължена да знае кой служител я заема. Това се нарича еднопосочна асоциация, тоест асоциация, която може да се изпълнява само в едната асоциация, тоест асоциация, която може да се изпълнява само в едната посока.посока.

Page 43: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Имплементиране на асоциацияИмплементиране на асоциация

Същност:Същност:Различните видове отношения Различните видове отношения (асоциациите) се представят чрез (асоциациите) се представят чрез комбинация от атрибути и методи. комбинация от атрибути и методи. Атрибутите съхраняват информацията, Атрибутите съхраняват информацията, необходима за отношението, а необходима за отношението, а методите - операциите на методите - операциите на отношението. Тъй като атрибутите и отношението. Тъй като атрибутите и методите се наследяват методите се наследяват - асоциациите - асоциациите също се наследяватсъщо се наследяват. .

Page 44: Тема 3.  Структурни диаграми по UML 2.0:

Структурни диаграми на класовете Структурни диаграми на класовете Имплементиране на асоциации от тип Имплементиране на асоциации от тип

едно към едноедно към едноПримерна асоциация от този вид е отношението между личност Примерна асоциация от този вид е отношението между личност

ССPersonPerson и адрес, на който живее и адрес, на който живее CAddressCAddress. В примера . В примера отношението е дефинирано като еднопосочно. То се отношението е дефинирано като еднопосочно. То се имплементира като инстанция на клас, представена като атрибут имплементира като инстанция на клас, представена като атрибут от класа от класа CAddressCAddress, включен в класа С, включен в класа СPersonPerson, както и методи за , както и методи за достъп (четене/запис) за поддръжката на атрибута.достъп (четене/запис) за поддръжката на атрибута.

При необходимост от двупосочност на отношението, тоест адресът При необходимост от двупосочност на отношението, тоест адресът да се отнася към личността, която живее на него, ще са да се отнася към личността, която живее на него, ще са необходими еквивалентни атрибути и методи в класа “адрес”.необходими еквивалентни атрибути и методи в класа “адрес”.

Page 45: Тема 3.  Структурни диаграми по UML 2.0:

Имплементиране на асоциации от Имплементиране на асоциации от тип едно към еднотип едно към едно

Принципи на имплементирането (кодирането) на Принципи на имплементирането (кодирането) на асоциацията:асоциацията:

Отношението едно към едно може да се Отношението едно към едно може да се имплементира по начина, по който се създава имплементира по начина, по който се създава връзка между таблици в база данни-с ключова връзка между таблици в база данни-с ключова стойност за достъп до данните и методи за стойност за достъп до данните и методи за промяната на ключа. Основната идея е да се промяната на ключа. Основната идея е да се осигури уникалност на ключа, асоцииран към осигури уникалност на ключа, асоцииран към даден обект. Връзката между обектите се даден обект. Връзката между обектите се осъществява с уникален идентификатор, който осъществява с уникален идентификатор, който служи за достъп до данните за свързания служи за достъп до данните за свързания обект. обект.

Page 46: Тема 3.  Структурни диаграми по UML 2.0:

Имплементиране на еднопосочни Имплементиране на еднопосочни асоциации от тип едно към едноасоциации от тип едно към едно

Схема на асоциациятаСхема на асоциацията::Асоциацията между обекти от класовете от примера означава да Асоциацията между обекти от класовете от примера означава да

се създаде обект от класа се създаде обект от класа CAddressCAddress, да се осигури уникален , да се осигури уникален идентификатор в него, например (идентификатор в него, например (OIUOIU), който впоследствие да ), който впоследствие да се използва за съхраняване в обектите от класа Ссе използва за съхраняване в обектите от класа СPersonPerson. . Необходимо е да имат функции за четене/запис на този Необходимо е да имат функции за четене/запис на този идентификатор. Аналогично се осигурява и еднопосочната идентификатор. Аналогично се осигурява и еднопосочната връзка между адрес и държава като се използва връзка между адрес и държава като се използва ISO codeISO code..

Page 47: Тема 3.  Структурни диаграми по UML 2.0:

Имплементиране на еднопосочни Имплементиране на еднопосочни асоциации от тип едно към едноасоциации от тип едно към едно

public class CCountry {public class CCountry {/** ISO code; Example BGR /** ISO code; Example BGR */*/private String m_Code;private String m_Code;/** Country; Example Bulgaria *//** Country; Example Bulgaria */private String m_Name;private String m_Name;public CCountry( String name, String code ) public CCountry( String name, String code )

{ m_Code=code; m_Name=name; }{ m_Code=code; m_Name=name; }public String getCode() public String getCode() { return m_Code; }{ return m_Code; }public String getName() public String getName() { return m_Name; }{ return m_Name; }private void setCode(String code) private void setCode(String code) { m_Code = code; }{ m_Code = code; }private void setName(String name) private void setName(String name) { m_Name=name; }{ m_Name=name; }public static void main(String[] args) {public static void main(String[] args) {

CCountry oCntry = new CCountry("Bulgaria", "BGR");CCountry oCntry = new CCountry("Bulgaria", "BGR");System.out.println(oCntry.getName() + " " + System.out.println(oCntry.getName() + " " +

oCntry.getCode());oCntry.getCode());}}

}}

Page 48: Тема 3.  Структурни диаграми по UML 2.0:

Имплементиране на еднопосочни Имплементиране на еднопосочни асоциации от тип едно към едноасоциации от тип едно към едно

class CAddress {class CAddress {/** Street and number; Example Studentska #1/** Street and number; Example Studentska #1 */*/private String m_strStreet;private String m_strStreet;/** Post code; Example 9010/** Post code; Example 9010 */*/private String m_strPostCode;private String m_strPostCode;/** Клас /** Клас CCountryCCountry */*/ public CCountry m_strCountry;public CCountry m_strCountry;/** City; Example Varna/** City; Example Varna */*/protected String m_strCity;protected String m_strCity;public CCountry getCountry()public CCountry getCountry(){{

return m_strCountry;return m_strCountry;}}public void setCountry( CCountry cntr )public void setCountry( CCountry cntr ){ m_strCountry = cntr; }{ m_strCountry = cntr; }

........

Page 49: Тема 3.  Структурни диаграми по UML 2.0:

Имплементиране на еднопосочни Имплементиране на еднопосочни асоциации от тип едно към едноасоциации от тип едно към едно

public class CCountry {public class CCountry {/** ISO code; Example BGR /** ISO code; Example BGR */*/private String m_Code;private String m_Code;/** Country; Example Bulgaria /** Country; Example Bulgaria */*/private String m_Name;private String m_Name;public CCountry( String name, String code ) public CCountry( String name, String code ) { m_Code=code; m_Name=name; }{ m_Code=code; m_Name=name; }public String getCode()public String getCode(){ return m_Code; }{ return m_Code; }public String getName()public String getName(){ return m_Name; }{ return m_Name; }private void setCode(String code)private void setCode(String code){ m_Code = code; }{ m_Code = code; }private void setName(String name)private void setName(String name){ m_Name=name; }{ m_Name=name; }public static void main(String[] args) {public static void main(String[] args) {CCountry oCntry = new CCountry("Bulgaria", "BGR");CCountry oCntry = new CCountry("Bulgaria", "BGR");System.out.println(oCntry.getName() + " " + oCntry.getCode());System.out.println(oCntry.getName() + " " + oCntry.getCode());}}

}}

Page 50: Тема 3.  Структурни диаграми по UML 2.0:

Имплементиране на еднопосочни Имплементиране на еднопосочни асоциации от тип едно към едноасоциации от тип едно към едно

public class CPerson {public class CPerson {////

private String m_strName;private String m_strName;private int m_Sex;private int m_Sex;private String m_egn;private String m_egn;private CAddress m_address;private CAddress m_address;public CPerson(String Name, String egn) throws Exception {...}public CPerson(String Name, String egn) throws Exception {...}public CPerson(String strName, int sex)public CPerson(String strName, int sex) { ...}{ ...}

////public CAddress GetAddress() {public CAddress GetAddress() {

return m_address;return m_address;}}

public static void main(String[] args) {public static void main(String[] args) {CPerson oPerson = new CPerson("N/A",Sex.Female);CPerson oPerson = new CPerson("N/A",Sex.Female);CAddress myAddress = new CAddress("Studentska CAddress myAddress = new CAddress("Studentska

#1","9010","Varna");#1","9010","Varna");// ако има асоциация 0..1// ако има асоциация 0..1

CCountry cntry = new CCountry("Bulgaria", "BGR");CCountry cntry = new CCountry("Bulgaria", "BGR");myAddress.setCountry(cntry);myAddress.setCountry(cntry);

}}}}

Page 51: Тема 3.  Структурни диаграми по UML 2.0:

Имплементиране на еднопосочни и Имплементиране на еднопосочни и двупосочни асоциациидвупосочни асоциации

Еднопосочност:Еднопосочност:Еднопосочните асоциации Еднопосочните асоциации се имплементират по просто, защото се имплементират по просто, защото

изискват атрибути и методи в едната посокаизискват атрибути и методи в едната посока. . ННапример, апример, отношението отношението заемазаема “holds “holds”” между служител и длъжност в между служител и длъжност в примера се имплементират изисква атрибути и методи в примера се имплементират изисква атрибути и методи в едната посока – от служител към длъжност. За да се едната посока – от служител към длъжност. За да се представи отношението, Спредстави отношението, СEmployeeEmployee ще има атрибут, ще има атрибут, наречен например “наречен например “positionposition” и методи “” и методи “setPositionsetPosition” и ” и ““getPositiongetPosition”. Не е необходимо да се осигуряват ”. Не е необходимо да се осигуряват еквивалентните обратни методи в класа еквивалентните обратни методи в класа PositionPosition. .

Page 52: Тема 3.  Структурни диаграми по UML 2.0:

Имплементиране на еднопосочни и Имплементиране на еднопосочни и двупосочни асоциациидвупосочни асоциации

Двупосочност:Двупосочност:Например, класът Например, класът CStudentCStudent на примерната диаграма ще има на примерната диаграма ще има

примерен атрибут, наречен например примерен атрибут, наречен например ““takestakes”, ”, представен чрез представен чрез списъка (от упражнения), който да се използва за съхраняване списъка (от упражнения), който да се използва за съхраняване на обекти от клас на обекти от клас CExamCExam, които служат за представяне на , които служат за представяне на посещаваните упражнения от студента. Класът посещаваните упражнения от студента. Класът CStudentCStudent трябва трябва да има и методи “да има и методи “addExamaddExam” и “” и “removeExamremoveExam” за добавяне и ” за добавяне и премахване на упражненията в списъка от упражнения, премахване на упражненията в списъка от упражнения, посещавани от студента в текущия момент. посещавани от студента в текущия момент.

Page 53: Тема 3.  Структурни диаграми по UML 2.0:

Имплементиране на еднопосочни и Имплементиране на еднопосочни и двупосочни асоциациидвупосочни асоциации

Поради двупосочността на асоциацията, класът Поради двупосочността на асоциацията, класът CExamCExam ( (Seminar)Seminar) трябва също да има трябва също да има съответстващи атрибути и методи относно съответстващи атрибути и методи относно CStudentCStudent, например атрибут (списък от , например атрибут (списък от студенти) – “студенти) – “studentsstudents” и методи за добавяне и ” и методи за добавяне и премахване на студенти към списъка – премахване на студенти към списъка – ““addStudentaddStudent” и “” и “removeStudentremoveStudent”. Така се ”. Така се осигирява двупосочната връзка в отношението осигирява двупосочната връзка в отношението между класовете. между класовете.

Page 54: Тема 3.  Структурни диаграми по UML 2.0:

Имплементиране на асоциации от Имплементиране на асоциации от тип едно към многотип едно към много

Пример: Пример: Професор към упражнения за дисциплинатаПрофесор към упражнения за дисциплината

Page 55: Тема 3.  Структурни диаграми по UML 2.0:

Имплементиране на асоциации от Имплементиране на асоциации от тип едно към многотип едно към много

public class Professor extends CPersonpublic class Professor extends CPerson { { ...... private HashSet exams;private HashSet exams; public HashSet getExams() {public HashSet getExams() {

return exams;return exams; }} private void setExams(HashSet ex) {private void setExams(HashSet ex) {

exams = ex;exams = ex; }} public void addExam(CExams exam ) {public void addExam(CExams exam ) {

if(!exams.contains(exam)) {if(!exams.contains(exam)) { exams.add(exam); // ако не е включено се включваexams.add(exam); // ако не е включено се включва exam.addInstructor(this); // упражнението трябва да знае кой го водиexam.addInstructor(this); // упражнението трябва да знае кой го води }}

}} public void removeExam(CExams exam ) {public void removeExam(CExams exam ) {

if(exams.contains(exam)) {if(exams.contains(exam)) { exams.remove(exam); // ако е включено се премахваexams.remove(exam); // ако е включено се премахва exam.removeInstructor(this); // упражнението се променя същоexam.removeInstructor(this); // упражнението се променя също }}exams.remove(exam);exams.remove(exam);

}}

Page 56: Тема 3.  Структурни диаграми по UML 2.0:

Имплементиране на асоциации от Имплементиране на асоциации от тип едно към многотип едно към много

// аналогичен код за паралелната асоциация: // аналогичен код за паралелната асоциация: public HashSet getExamsOverseen() {public HashSet getExamsOverseen() {

return examsOverseen;return examsOverseen; }} private void setExamsOverseen(HashSet sem) {private void setExamsOverseen(HashSet sem) {

examsOverseen=sem;examsOverseen=sem; }} public void addExamOverseen(CExams exam ) {public void addExamOverseen(CExams exam ) {

examsOverseen.add(exam);examsOverseen.add(exam); }} public void removeExamOverseen(CExams exam ) {public void removeExamOverseen(CExams exam ) {

examsOverseen.remove(exam);examsOverseen.remove(exam); }} }}

Page 57: Тема 3.  Структурни диаграми по UML 2.0:

Имплементиране на Имплементиране на рекурсивни рекурсивни асоциацииасоциации

Пример: Предпоставки за курс лекцииПример: Предпоставки за курс лекции

Page 58: Тема 3.  Структурни диаграми по UML 2.0:

Имплементиране на Имплементиране на рекурсивни рекурсивни асоциацииасоциации

public class CCourse {public class CCourse { private HashSet exams; // представяне на занятиятаprivate HashSet exams; // представяне на занятията private HashSet prerequisites; // представяне на private HashSet prerequisites; // представяне на

предпоставкитепредпоставките // рекурсивна асоциация// рекурсивна асоциация public void addPrerequisite(CCourse course) {public void addPrerequisite(CCourse course) { prerequisites.add(course);prerequisites.add(course); }} public void removePrerequisite(CCourse course) {public void removePrerequisite(CCourse course) { prerequisites.remove(course);prerequisites.remove(course); }} private HashSet getPrerequisites() {private HashSet getPrerequisites() { return prerequisites;return prerequisites; }} private void setPrerequisites(HashSet prereq) {private void setPrerequisites(HashSet prereq) { prerequisites=prereq;prerequisites=prereq; }}}}