1 / 58

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

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

qamar
Télécharger la présentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Структурни диаграми • Дефиниция за Обектно ориентирано програмиране; • Характеристики на ОО приложенията; • Видове класови йерархии • Структурни диаграми на класовете; • Класови диаграми; • Имплементация на класови наследявания; • Асоциация- основни понятия (Кардиналност, Незадължителност), Мултипликатор; Роля; • Частни случаи; • Имплементиране на асоциация; • Имплементиране на асоциации от тип едно към едно; • Имплементиране на еднопосочни и двупосочни асоциации; • Имплементиране на асоциации от тип едно към много; • Имплементиране наасоциации от тип много към много; • Имплементиране на рекурсивни асоциации.

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

  4. Характеристики на ОО приложенията Всяка ОО програмна система трябва да има следните характеристики: • абстракции чрез обекти; • затворени класове; • комуникация чрез съобщения; • време на съществуване на обектите; • класови йерархии; • полиморфизъм.

  5. Характеристики на ОО приложенията • абстракции чрез обекти; Дефиниция: Абстракцията е модел на обекти от реалния свят или концепция. Абстракцията е механизъм за възприемане на сложни ситуации от реалния свят, представени чрез опростен модел. ОО абстракция се основава на обекти и тяхното взаимодействие с други обекти. Например, цвят в модел на смесица от интензивности на основните цветове RGB (или друг модел).

  6. Характеристики на ОО приложенията • Затворени класове Дефиниция: Затворени класове (encapsulation) Процес на скриване на вътрешните детайли на обекта от останалия свят. В Java, процесът се прилага чрез включване на дефиниции за атрибутите и методите в тялото на класовата дефиниция. Пример: CPerson.java package OOPSamples; public class CPerson { private class Sex { static final int Male=0; static final int Female=1; } private int m_Sex; private String m_strName; private String m_egn; private CAddress m_address; …. }

  7. Характеристики на ОО приложенията Затворени класове Пример – скриване на имплементацията на цветовете в класа CColor: Първоначално се описва класът CColor като се предоставя един от начините за промяна-чрез стойностите на червената, зелената и синя негова стойност. Впоследствие се разглежда класът CColor в по-принципен начин на представяне, без да се разкрива как вътрешно се представя обекта. Той може да използва както модели: • модела HSV отенък, наситеност и стойност (hue, saturation, value) ; • смесица от интензивности на основните цветове (RGB).

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

  9. Характеристики на ОО приложениятаКомуникация чрез съобщения • Комуникация чрез съобщения; За да реализират взаимодействия помежду си, обектите се нуждаят от комуникация помежду си. Взаимодействието може да е както между обектите от един клас, така и с други обекти. Това взаимодействие се осъществява със съобщения (в Java това става с методи) към други обекти, като се предава информация или искане за действие. Например, когато потребителя натисне с мишката команден бутон в диалогова кутия на екрана, се праща съобщение към диалоговия обект, или искане за действие от обекта.

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

  11. Структурни диаграми на класовете Класова диаграма Класова диаграма (Class diagram) Същност: Символи: - (private) - частен елемент: атрибут или метод; + (public) - публичен елемент; # (protected) - защитен елемент;

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

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

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

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

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

  17. Структурни диаграми на класовете Класова диаграма Правила за видимост (достъп) • Публичните методи могат да се извикват от всички външни класове OtherClass; • защитените методи – от наследниците; • частните, само от членовете на класа. • Правило за ограничаване на видимостта при проектиране на приложенията: Да се ограничава възможно най-много видимостта на атрибута или метода. Това правило означава, че ако даден елемент (атрибут или метод) няма причина да бъде публичен, той се прави защитен. Ако няма обосновка да бъде защитен, дефинира се като частен.

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

  19. Структурни диаграми на класовете Класова диаграма(Примерна класова йерархия)

  20. Структурни диаграми на класовете Имплементация на класови наследявания Пример за наследяване и вграждане на класове е показаната класова йерархия на класовете: • Точка: CPoint; • Цвят: CColor; • Фигура: CShape, Дефинира цвят и позиция на абстрактна фигура. Обектите са атрибути на класа; • Кръг: CCircle – наследник на фигура, дефинира радиуса; • Правоъгълник : CRectangle – наследник на фигура, дефинира височина и ширина;

  21. Структурни диаграми на класовете Имплементация на класови наследявания public class CPoint { // Атрибути private double myX; private double myY; // Конструктори public CPoint(double x, double y) { myX = x; myY = y; } public CPoint() { myX = 0.; myY = 0.; } // Методи public double getX() { return myX; } public double getY(){ return myY; } public void setPoint(double x, double y) { myX = x; myY = y; } }

  22. Структурни диаграми на класовете Имплементация на класови наследявания /** CColor – RGB представяне*/ public class CColor { // Атрибути private int red; private int green; private int blue; // Конструктори public CColor() { red = 255; green = 0; blue = 125; } public CColor(int r, int g, int b) { red = r; green = g; blue = b; } // Методи public long RGB2(int red, int green, int blue) { return (red | (green<<4) | (blue<<8)); //red+16*green+256*blue; } public int getR() { return red; } public int getG() {return green;} public int getB() { return blue; } public void setRGB(int r, int g, int b) { red = r; green = g; blue = b; } }

  23. Структурни диаграми на класовете Имплементация на класови наследявания /** * CShape – абстрактен базов клас за фигури. * Дефинира цвят (color) и позиция (origin) и get/set методи на фигурата * Дефинира абстрактни методи за лице и периметър на реални фигури */ public abstract class CShape { // Атрибути private CColor color; private CPoint origin; // Конструктори protected CShape(CColor col, CPoint org) { origin = new CPoint(org.getX(), org.getY()); color = new CColor(col.getR(),col.getG(), col.getB()); } protected CShape(CPoint org) { origin = new CPoint(org.getX(), org.getY()); color = new CColor(0,0,0); // черен } protected CShape() { origin = new CPoint(0.0, 0.0); // позиция 0.,0. color = new CColor(0,0,0); // черен }

  24. Структурни диаграми на класовете Имплементация на класови наследявания // Методи public abstract double area(); // реална функция в наследника public abstract double perimeter(); // реална функция в наследника public CColor getColor() { return color; } public void setColor(CColor col) { color.setRGB(col.getR(), col.getG(), col.getB()); } public CPoint getOrigin() { return origin; } public void setOrigin(CPoint org){ origin.setPoint(org.getX(), org.getY()); } }

  25. Структурни диаграми на класовете Имплементация на класови наследявания public class CCircle extends CShape { // Атрибути private double radius; // Конструктори public CCircle() { super(); radius = 0.0; } public CCircle(final CPoint org, final double rad) // атрибути за константност { super(org); radius = rad; }

  26. Структурни диаграми на класовете Имплементация на класови наследявания // Методина CCircle public double area() { return Math.PI * radius * radius; // import java.lang.Math; (PI) } public double getRadius(){ return radius; } public double perimeter() { return 2 * Math.PI * radius; // 2 PI r достъп до библиотека (пакет) } public void setRadius(double r){ radius = r; } }

  27. Структурни диаграми на класовете Имплементация на класови наследявания /* * CRectangle – дефинира височина (height) и ширина (width) */ public class CRectangle extends CShape { // Атрибути private double height; private double width; // Конструктори public CRectangle(){ super(); height = 0.0; width = 0.0; } public CRectangle(CPoint org, double h, double w){ super(org); height = h; width = w; }

  28. Структурни диаграми на класовете Имплементация на класови наследявания // Методи на CRectangle public double area(){ return height * width; } public double perimeter() { return 2 * (height + width); } public double getH(){ return height; } public double getW(){ return width; } public void setHW(double h, double w) { height = h; width = w; } }

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

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

  31. Структурни диаграми на класовете Асоциация (дефиниция) Идентифицирането на връзката между обектите не е достатъчно за нейното описание. Необходимо е да се определи и същината на връзката. • Количествените характеристикина отношението: Например, колко дисциплини ИЗУЧАВАТ студентите? Нито една, една или няколко. • Отношението може да е двупосочно или еднопосочно: Например, не само студентите ИЗУЧАВАТ дисциплините, но и дисциплините се изучават от студентите.

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

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

  34. Структурни диаграми на класовете Асоциация (дефиниция) Дефиниция: Мултипликатор (multiplicity) на връзката е UML диаграма, обединяваща концепцията кардиналност и незадължителност. За дефиниране на асоциация и нейното представяне чрез диаграма е необходимо да се определи колко обекта участват във връзката, тоест мощност (кардиналност) - cardinality на отношението и има ли въобще такава връзка -optionality. В диаграмите на класовите йерархии за описание на асоциацията се използва обща концепция, наречена мултипликатор (multiplicity).

  35. Структурни диаграми на класовете Асоциация (дефиниция) Видове мултипликатори: • 0..1 Нула или един; • 1 Само един; • 0..* Нула или повече; • 1..* Един или повече; • n Само n, ( където n>1); • 0..n Нула до n ( където n>1); • 1..n Един до n ( където n>1);

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

  37. Структурни диаграми на класовете Асоциация (дефиниция) Обща схема за моделиране на асоциация: Елементите на схемата показват два класа A и B с обозначена асоциация между тях. Обозначението включва два мултипликатора multiplicityА,B на връзката от двата класа един към друг, обозначение на асоциацията labelи ролята role A, B на класовете в асоциацията.

  38. Структурни диаграми на класовете Асоциация (дефиниция) Примерни асоциации: • Студентът посещава една или повече лекции; • Лекциите се посещава от нула или повече студенти; • Студентът, като асистент обучава по едно или повече лабораторни упражнения; • Лабораторното упражнение може да се преподава от един студент като асистент. • Лабораторното упражнение е част от дисциплина; • Дисциплината има нула или повече части; • Служителят заема една длъжност; • Една длъжност се заема от един служител, но може да има незаети длъжности; • Един служител може да бъде командван от друг служител, който е негов единствен началник. Само президентът на фирмата е служител без началник; • Началникът командва нула или повече служители. Възможно е да има служител без подчинени;

  39. Структурни диаграми на класовете Асоциация (примери) Примерни модели на асоциации: Схемата показва, че един служител може да има 0..* подчинени и самият той да има нула до един началник 0..1, който да го командва.

  40. Структурни диаграми на класовете Асоциация (частни случаи) Частни случаи на асоциации: 1. Между два класа може да има повече от една асоциация. Например, студентът може да посещава лабораторни упражнения и да преподава като асистент на лабораторни упражнения. Това се осъществява с две различни асоциации на студента в две различни роли на същия.

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

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

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

  44. Структурни диаграми на класовете Имплементиране на асоциации от тип едно към едно Примерна асоциация от този вид е отношението между личност СPerson и адрес, на който живее CAddress. В примера отношението е дефинирано като еднопосочно. То се имплементира като инстанция на клас, представена като атрибут от класа CAddress, включен в класа СPerson, както и методи за достъп (четене/запис) за поддръжката на атрибута. При необходимост от двупосочност на отношението, тоест адресът да се отнася към личността, която живее на него, ще са необходими еквивалентни атрибути и методи в класа “адрес”.

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

  46. Имплементиране на еднопосочни асоциации от тип едно към едно Схема на асоциацията: Асоциацията между обекти от класовете от примера означава да се създаде обект от класа CAddress, да се осигури уникален идентификатор в него, например (OIU), който впоследствие да се използва за съхраняване в обектите от класа СPerson. Необходимо е да имат функции за четене/запис на този идентификатор. Аналогично се осигурява и еднопосочната връзка между адрес и държава като се използва ISO code.

  47. Имплементиране на еднопосочни асоциации от тип едно към едно public class CCountry { /** ISO code; Example BGR */ private String m_Code; /** Country; Example Bulgaria */ private String m_Name; public CCountry( String name, String code ) { m_Code=code; m_Name=name; } public String getCode() { return m_Code; } public String getName() { return m_Name; } private void setCode(String code) { m_Code = code; } private void setName(String name) { m_Name=name; } public static void main(String[] args) { CCountry oCntry = new CCountry("Bulgaria", "BGR"); System.out.println(oCntry.getName() + " " + oCntry.getCode()); } }

  48. Имплементиране на еднопосочни асоциации от тип едно към едно class CAddress { /** Street and number; Example Studentska #1*/ private String m_strStreet; /** Post code; Example 9010*/ private String m_strPostCode; /** Клас CCountry */ public CCountry m_strCountry; /** City; Example Varna */ protected String m_strCity; public CCountry getCountry() { return m_strCountry; } public void setCountry( CCountry cntr ) { m_strCountry = cntr; } ....

  49. Имплементиране на еднопосочни асоциации от тип едно към едно public class CCountry { /** ISO code; Example BGR */ private String m_Code; /** Country; Example Bulgaria */ private String m_Name; public CCountry( String name, String code ) { m_Code=code; m_Name=name; } public String getCode() { return m_Code; } public String getName() { return m_Name; } private void setCode(String code) { m_Code = code; } private void setName(String name) { m_Name=name; } public static void main(String[] args) { CCountry oCntry = new CCountry("Bulgaria", "BGR"); System.out.println(oCntry.getName() + " " + oCntry.getCode()); } }

  50. Имплементиране на еднопосочни асоциации от тип едно към едно public class CPerson { // private String m_strName; private int m_Sex; private String m_egn; private CAddress m_address; public CPerson(String Name, String egn) throws Exception {...} public CPerson(String strName, int sex) { ...} // public CAddress GetAddress() { return m_address; } public static void main(String[] args) { CPerson oPerson = new CPerson("N/A",Sex.Female); CAddress myAddress = new CAddress("Studentska #1","9010","Varna"); // ако има асоциация 0..1 CCountry cntry = new CCountry("Bulgaria", "BGR"); myAddress.setCountry(cntry); } }

More Related