O estereótipo de classe está implícito em um diagrama de classe UML? Deve ser especificado?

Aug 15 2020

Comumente vejo diagramas de classe onde não há <<class>>estereótipo. Outros onde há o comum <<interface>>e outros com alguns interessantes como <<shape>>ou <<computer>>e assim que para um diagrama de classes eu pessoalmente não vejo necessidade, mas Ok.

Estou fazendo um diagrama UML para um projeto de álgebra moderna em C++, mas, como sabemos, a linguagem não deve ser tão influente ao trabalhar com UML. Para este projeto, reconheci os estereótipos <<interface>>e <<abstract>>tudo bem até este ponto, mas existem structs e classes, quero fazer as coisas da melhor maneira possível, então vim me perguntar quais são <<class>>os <<struct>>estereótipos válidos?

Agradeço suas respostas ou comentários.

Nota: acho que structdeve ser válido porque especifica o tipo para uma determinada implementação.

Respostas

4 Christophe Aug 15 2020 at 13:00

Você não precisa indicar para indicar classes explicitamente em um diagrama de classes: é assumido por padrão, de acordo com UML:

Uma Classe é mostrada usando o símbolo Classificador. Como Class é o Classificador mais usado, nenhuma palavra-chave é necessária para indicar que a metaclasse é Class.

Você é livre para definir seus próprios estereótipos em UML. Eles são melhor documentados em um diagrama de perfil que mostra como eles se relacionam com os elementos UML padrão.

UML é linguagem de implementação neutra. É muito comum definir tipos de dados específicos da linguagem (por exemplo float, , doubleque não pertencem à UML padrão) e estereótipos (por exemplo class, e struct). Veja por exemplo aqui um perfil C# , para uma linguagem em que classes e structs possuem semânticas diferentes.

Esteja ciente de que nem tudo entre « », que parece um estereótipo, é um estereótipo. Também pode ser uma palavra-chave bem definida:

  • interfaceé uma palavra-chave que se refere a algo com um significado claro no metamodelo UML, que é compartilhado entre diagramas de classes e diagramas de componentes.
  • enumerationé uma palavra-chave que se refere a um tipo especial de tipo, que precisa ser descrito de forma diferente de outros tipos e classes de dados básicos.

Além disso, duas observações muito importantes:

  • A introdução de estereótipos específicos da linguagem torna seu modelo de design menos geral e corre o risco de obter modelos de implementação detalhados em vez de focar no design abstrato. Portanto, você deve pensar nos prós e contras. Se o seu modelo for neutro em termos de linguagem, você pode se concentrar no OOD e deixá-lo ser reutilizado para uma porta java ou C#, por exemplo. Se sua intenção principal é criar um modelo de implementação, é claro que não há problema.
  • Em C++ a structé a classcom todos os membros públicos por padrão. Este é um princípio fundamental da linguagem. A diferença é apenas sobre o controle de acesso. Como na UML você documenta o controle de acesso no nível do membro, ter um estereótipo « struct »que exija que todos os membros sejam públicos parece apenas redundante. Aconselho usar classes não estereotipadas em UML e decidir na implementação usar uma estrutura ou uma classe dependendo da visibilidade do membro.