Diagram klas

Diagram klas przedstawia schemat stosowany w inżynierii oprogramowania przedstawienie klas i interfejsów systemów, a także ich relacje. Ten schemat jest częścią statyczną część z UML , nie zainteresowanego z czasowych i dynamicznych aspektów .

Klasa opisuje obowiązki, zachowanie i rodzaj zbioru obiektów. Elementy tego zestawu to instancje klasy.

Klasa to zestaw funkcji i danych (atrybutów), które są połączone ze sobą za pomocą pola semantycznego. Klasy są używane w programowaniu obiektowym . Umożliwiają zamodelowanie programu, a tym samym podzielenie złożonego zadania na kilka małych prostych zadań.

Klasy można łączyć za pomocą mechanizmu dziedziczenia , który umożliwia podkreślenie pokrewieństwa. Między klasami możliwe są inne relacje, reprezentowane przez określony łuk na diagramie klas.

Na koniec są tworzone instancje w celu tworzenia obiektów (klasa jest formą obiektową  : opisuje cechy obiektów, obiekty zawierają własne wartości dla każdej z tych cech, gdy są tworzone).

Schemat klasy

Klasa jest reprezentowana przez prostokąt podzielony na trzy części:

Drugi i ostatni reprezentują zachowanie klasy.

Pierwsza część: nazwa klasy

Jest napisane w górnym prostokącie.

W klasycznej klasie nazwa jest zapisywana w języku łacińskim (przykład: „ClassClassique”).

Nazwy klas abstrakcyjnych są zapisane kursywą (przykład: AbstractClass ).

Klasy szablonów mają w prawym górnym rogu prostokąt z przerywaną obwódką, który zawiera typy parametrów.

Druga część: atrybuty

Składnia atrybutu jest następująca:

Visibility attributeName [ multiplicity ]: typeAttribut = Inicjalizacja;

Widoczność

Pojęcie widoczności wskazuje, kto może mieć dostęp do atrybutu.

Może przyjąć tylko cztery wartości:

Postać Rola Słowo kluczowe Opis
+ dostęp publiczny publiczny Wszystkie inne klasy mają dostęp do tego atrybutu.
# chroniony dostęp chroniony Tylko sama klasa i klasy podrzędne (dziedziczenie) mają dostęp do tego atrybutu.
~ dostęp do pakietu pakiet Klasa widoczna tylko w pakiecie.
- dostęp prywatny prywatny Tylko sama klasa ma dostęp do tego atrybutu.

Aby przestrzegać podstawowej zasady hermetyzacji , wszystkie atrybuty powinny być prywatne .

Aby umożliwić odzyskanie atrybutu prywatnego lub chronionego, zwykle używamy metody pobierającej (lub akcesorium ); aby być modyfikowalnymi, zwykle używamy setera (lub mutatora ).

Nazwisko

Nie może zawierać spacji, znaków interpunkcyjnych ani akcentów. Aby wymienić obowiązuje kilka umów istnieje: można wstawić symbol _ między słowami lub użyć metody CamelCase , która ma położyć pierwszą literę każdego słowa w stolicy (na przykład nazwa obiektu może stać: object_name lub ObjectName ).

Wielość

Wielokrotność oznacza, ile razy zmienna może wystąpić. Jest pokazany w nawiasach kwadratowych.

Na przykład, jeśli dana osoba ma dwa numery telefonów, wolimy noTelephones [2] od noTelephone1 i noTelephone2.

Przykład //attribut public prenom de type string (chaine de caractères)

+ imię: ciąg

//attribut privé age de type int (entier)

- wiek: wew

Część trzecia: Metody

Składnia metody jest następująca:

Widoczność functionName ( directionParamètreN nomParamètreN  : typeParamètreN ) returnType

Widoczność

Pojęcie widoczności jest tym samym, co pojęcie atrybutów.

Kierunek parametru

Wskazuje, czy parametr jest przychodzący (wchodzący), wychodzący (wychodzący), czy przychodzący i wychodzący (przychodzący).

Przykłady metody //méthode publique getAge() retournant un entier

+ getAge (): int

//méthode protégée calculerAge() prenant comme paramètre dateNaissance de type Date et ne retournant rien (void)

# obliczAge (w dateBirth: Date): void

Relacje między klasami

Te relacje nie są specyficzne dla diagramów klas, można je również zastosować do wszystkich diagramów statycznych.

Dziedzictwo

Dziedziczenia jest blok podzielenie przez uogólnienie i specjalizacji, reprezentowany przez linię łączącą dwie klasy, a której koniec po stronie tej klasy macierzystego jest trójkąt.

Klasa potomna dziedziczy wszystkie atrybuty i metody, zarówno publiczne, chronione, jak i prywatne. Jednak nie może bezpośrednio używać atrybutów i metod prywatnych (zarówno do odczytu, jak i do zapisu), z wyjątkiem metody dziedziczonej (publicznej lub chronionej).

Stowarzyszenie

Kombinacja jest semantyczny związek między dwiema klasami (połączenie logiczne). Można nazwać stowarzyszenie. Wywołanie metody jest asocjacją. Może być binarny, w tym przypadku jest reprezentowany przez pojedynczą linię lub n-arny, klasy są połączone z rombem pojedynczymi liniami. Te relacje można nazwać. Asocjacja jest używana tylko w diagramach klas.

Wielość  porównywalny do cardinalities z Merise układ jest wykorzystywany do zliczania minimalną i maksymalną liczbę wystąpień dla każdej grupy w stosunku do wiązania z 2 lub więcej klas. zdatność do lotu  : wskazuje, czy będzie możliwy dostęp z jednej klasy do drugiej. Jeśli relacja zachodzi między klasami A i B i tylko B jest nawigowalna, wtedy możemy uzyskać dostęp do B z A, ale nie odwrotnie. Domyślnie zdatność do lotu jest dwukierunkowa.

Zbiór

Agregacja jest stowarzyszeniem z relacji podporządkowania, reprezentowana przez linię łączącą dwie klasy i których pochodzenie jest różny od drugiego końca (klasa podporządkowana) przez otwartą diamentu. Jedna z klas grupuje inne klasy. Obiekt T używa instancji klasy T '.

Kompozycja

Kompozycja jest agregacja z cyklu zależnej: skomponowaną klasa jest zniszczona, gdy znika klasa dominująca. Pochodzenie tego skojarzenia jest reprezentowane przez solidny diament. Obiekt T 'składa się z T.

Uzależnienie

Sugeruje, że jedna lub więcej metod otrzymuje obiekt jednego typu z innej klasy. Nie ma związku w odniesieniu do niszczenia obiektów, ale nadal istnieje zależność. Symbolizuje go kropkowana strzałka, której koniec ma trzy linie przecinające się w tym samym punkcie.

Przykładowy kod

Niektóre oprogramowanie IDE umożliwia automatyczne generowanie kodu źródłowego odpowiadającego diagramowi klas.

Poniższy kod źródłowy Java odpowiada schematowi UML Animal, Cat and Pet Shop:

/* Déclaration des classes */ public class Animal { /** * Nom de l'Animal */ protected String nom; /** * Cri de l'Animal */ protected Son cri; /** * Constructeur de la classe Animal */ public Animal(String nom, String sonChemin) { this.nom = nom; this.cri = new Son(sonChemin); } /** * Returne le Nom de l'Animal */ public String nom(){ return this.nom; } /** * Returne le cri de l'Animal */ public Son cri(){ return this.cri; } } public class Son { /** * Nom du fichier son */ private String nomFichier; /** * Constructeur */ public Son(String fichier) { this.nomFichier = fichier; } /** * Permet une lecture du Son */ public void lire() { ... } /** * Arrete la lecture du Son */ public void stop() { ... } } public class Chat extends Animal //Héritage { /** * Constructeur */ public Chat(String nom) { super(nom, "miaulement.ogg"); //Appel du Constructeur d'Animal } } public class Animalerie { /** * Liste de tous les Animaux */ private LinkedList<Animal> members; /** * Constructeur */ public Animalerie(){ this.members = new LinkedList<Animal>(); //Agrégation } /** * Ajout d'un Animal dans l'Animalerie */ public void ajouteAnimal(Animal monanimal) { members.add(monanimal); } };

Zobacz też

Powiązane artykuły

Linki zewnętrzne