Diagrama de clase

El diagrama de clases es un diagrama que se utiliza en la ingeniería de software para presentar las clases y las interfaces de los sistemas, así como sus relaciones. Este diagrama es parte de la parte estática de UML , no se ocupa de los aspectos temporales y dinámicos .

Una clase describe las responsabilidades, el comportamiento y el tipo de un conjunto de objetos. Los elementos de este conjunto son las instancias de la clase.

Una clase es un conjunto de funciones y datos (atributos) que están vinculados por un campo semántico. Las clases se utilizan en programación orientada a objetos . Permiten modelar un programa y, por tanto, dividir una tarea compleja en varios trabajos pequeños y sencillos.

Las clases se pueden vincular mediante el mecanismo de herencia , que permite resaltar las relaciones de parentesco. Son posibles otras relaciones entre clases, representadas por un arco específico en el diagrama de clases.

Finalmente, se instancian para crear objetos (una clase es un molde de objeto  : describe las características de los objetos, los objetos contienen sus propios valores para cada una de estas características cuando se instancian).

Diagrama de una clase

Una clase está representada por un rectángulo separado en tres partes:

El segundo y último representan el comportamiento de la clase.

Primera parte: el nombre de la clase.

Está escrito en el rectángulo superior.

En una clase clásica, el nombre está escrito en Roman (ejemplo: "ClassClassique").

El nombre de las clases abstractas está escrito en cursiva (ejemplo: AbstractClass ).

Las clases de plantilla tienen, en su esquina superior derecha, un rectángulo con un borde punteado que contiene los tipos de parámetros.

Segunda parte: atributos

La sintaxis de un atributo es la siguiente:

Nombre del atributo de visibilidad [ multiplicidad ]: typeAttribut = Inicialización;

Visibilidad

La noción de visibilidad indica quién puede tener acceso al atributo.

Solo puede tomar cuatro valores:

Personaje Papel Palabra clave Descripción
+ Acceso público público Todas las demás clases tienen acceso a este atributo.
# acceso protegido protegido Solo la clase en sí y las clases secundarias (herencia) tienen acceso a este atributo.
~ acceso al paquete paquete Clase visible solo en el paquete.
- acceso privado privado Solo la clase en sí tiene acceso a este atributo.

Para respetar el principio fundamental de encapsulación , todos los atributos deben ser privados .

Para que un atributo privado o protegido sea recuperable, generalmente usamos un getter (o descriptor de acceso ); para ser modificable, usualmente usamos un setter (o mutador ).

apellido

No debe contener espacios, signos de puntuación ni acentos. Para reemplazar espacios, existen varios acuerdos: se puede insertar un símbolo _ entre palabras o usar el método CamelCase que consiste en poner la primera letra de cada palabra en mayúscula (por ejemplo, el nombre del objeto puede convertirse en: object_name o ObjectName ).

Multiplicidad

La multiplicidad representa el número de veces que puede ocurrir la variable. Se muestra entre corchetes.

Por ejemplo, si una persona tiene dos números de teléfono, preferimos noTelephones [2] a noTelephone1 y noTelephone2.

Ejemplo //attribut public prenom de type string (chaine de caractères)

+ nombre: cadena

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

- edad: int

Tercera parte: los métodos

La sintaxis de un método es la siguiente:

Visibilidad functionName ( directionParamètreN nomParamètreN  : typeParamètreN ) returnType

Visibilidad

La noción de visibilidad es la misma que la de atributos.

Dirección de parámetro

Indica si el parámetro es entrante (in), si es saliente (out) o si es entrante y saliente (inout).

Ejemplos de método //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)

# calculateAge (en dateBirth: Date): void

Relaciones entre clases

Estas relaciones no son específicas de los diagramas de clases, también se pueden aplicar a todos los diagramas estáticos.

Herencia

La herencia es un bloque dividido por generalización y especialización, representado por una línea que conecta las dos clases y cuyo extremo en el lado de la clase padre tiene un triángulo.

La clase secundaria hereda todos los atributos y métodos, ya sean públicos, protegidos o privados. Sin embargo, no puede usar directamente atributos y métodos privados (ya sea de lectura o escritura), excepto a través de un método heredado (público o protegido).

Asociación

La combinación es una conexión semántica entre dos clases (conexión lógica). Se puede nombrar una asociación. La invocación de un método es una asociación. Puede ser binario, en este caso está representado por una sola línea, o n-aria, las clases están conectadas a un rombo por líneas simples. Estas relaciones se pueden nombrar. La asociación solo se usa en diagramas de clases.

multiplicidad  : comparable a las cardinalidades del sistema Merise , utilizado para contar el número mínimo y máximo de instancias de cada clase en la relación que une 2 o más clases. Aeronavegabilidad  : indica si será posible acceder de una clase a otra. Si la relación es entre las clases A y B y solo B es navegable, entonces podemos acceder a B desde A pero no al revés. Por defecto, la aeronavegabilidad es bidireccional.

Agregación

La agregación es una asociación con relación de subordinación, representada por una línea que conecta las dos clases y cuyo origen es diferente del otro extremo (la clase subordinada) por un rombo abierto. Una de las clases agrupa a otras clases. El objeto T usa una instancia de la clase T '.

Composición

La composición es una agregación que depende del ciclo de vida: la clase compuesta se destruye cuando la clase principal desaparece. El origen de esta asociación está representado por un diamante macizo. El objeto T 'está compuesto por T.

Adiccion

Implica que uno o más métodos reciben un objeto de un tipo de otra clase. No hay conexión con respecto a la destrucción de objetos, pero sigue existiendo una dependencia. Está simbolizado por una flecha punteada, cuyo final tiene tres líneas que se cruzan en el mismo punto.

Código de muestra

Algún software IDE le permite generar automáticamente el código fuente correspondiente al diagrama de clases.

El siguiente código fuente de Java corresponde al esquema UML de Animal, Cat y 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); } };

Ver también

Artículos relacionados

enlaces externos