Olá, sejam bem-vindos ao canal Engenharia de Software com ênfase e eu sou o professor Julianes Guedes e eu já atuo na área de modelagem de software há vários anos. Eu tenho quatro livros publicados sobre o assunto e eu já ministrei diversas palestras e cursos técnicos sobre modelagem de software utilizando a linguagem. Na aula de hoje, eu vou abordar o diagrama de perfis, que é um diagrama que permite adaptar ao ML para domínios para os quais ela não foi projetada originalmente.
Então isso é uma forma de estender a UML, permitir que ela se adapte a novas tecnologias, a novas plataformas, as a novos domínios. Então vamos iniciar a nossa aula. Então, eu gosto sempre de fazer uma pequena propaganda.
Como eu disse, eu já publiquei quatro livros sobre UML. O meu primeiro livro foi um abordagem prática, que na época tratava da UMR 1. 5, mas que já abordava a UML2 no final do livro.
Depois eu lancei o MR2, guia de consulta rápida, que era exclusivo sobre a UMR2. Em seguida, eu lancei o livro MR2, guia prático, baseado no guia de consulta rápida. E finalmente eu lancei o meu carro chefe, o meu livro mais completo e atualizado, que é o MRI2, uma abordagem prática que se contra edição.
Mas vamos iniciar o nosso conteúdo. Então, ah, o diagrama de perfis, como eu falei, ele permite adaptar ao ML a um domínio, a uma plataforma, para uma determinada tecnologia, ã, para a qual a UML, ela não havia sido projetada originalmente. Então, como eu falei, é uma forma de evoluir a linguagem, adaptar a linguagem a novas tecnologias, de forma então que ela não se torne defasada, que ela possa ser utilizada para ã suportar, para modelar tecnologias, domínios, plataformas que surgiram depois da linguagem ter sido criada.
Então, por meio da criação de perfis, eu posso estender a linguagem UML. Eu faço isso por meio da criação de novas metaclasses e principalmente novos estereótipos que vão permitir adaptar a OML para esses novos domínios, permitir que a OML seja utilizado para modelar modelar eh características do software específicas de determinadas plataformas, determinados eh domínios. Eh, na verdade, a maioria dos diagramas de perfis, eles criam mais estereótipos do que, eh, metaclasses provavelmente ditas.
Embora estereótipos sejam criados a partir de metaclasses, um estereótipo nada mais é que uma metaclasse provavelmente dita, mas é uma mas é uma metaclasse que adapta uma metaclasse anterior, como nós vamos estudar ao longo desse vídeo. Obviamente eu posso criar novas metaclasses, mas quando eu crio novas metaclasses, eu costumo criar eh conceitos totalmente novos. Então, ã, dependendo da quantidade de metaclasses que for criada, lembrando que estereótipos também são metaclasses, mas são metaclasses específicas, ah, um estereótipo ele só pode ser utilizado em conjunto com uma metaclasse que já existia anteriormente.
Ah, eu posso então na medida que eu for criando eh novas metaclasses, eu posso criar uma linguagem nova baseada no ML. Mas isso é assunto para um outro vídeo. Por enquanto, nós vamos nós vamos concentrar no diagrama de perfis, que é uma forma de estender a MR, mas estender a OMR de forma conservadora.
Nós vamos estender, nós vamos entender isso ao longo desse vídeo. Então, eh, o diagrama de perfis, ele é um mecanismo leve que permite estender a OML. Como eu falei, eh, as extensões produzidas pelo diagrama de perfis, elas costumam ser conservadoras, ou seja, elas não costumam alterar eh de forma expressiva eh os metamodelos originais.
Elas adicionam principalmente estereótipos, restrições e valores rotulados. Elas podem adicionar metaclasses totalmente novas, mas é preciso ter um pouco de cuidado com isso, porque pode-se acabar criando uma linguagem nova. Então, normalmente, ã, o diagrama de perfis, ele adapta um ou mais conceitos já existentes para que eles possam ser eh utilizados em domínios específicos que eh não existiam na época em que a OML foi criada eh para e para os quais ela não foi projetada.
Então, eu posso estender a OML de forma que ela possa eh ser utilizada para modelar conceitos que ela não suportava originalmente. Bom, então vamos fazer uma rápida revisão sobre modelos e metamodelos. Isso já foi falado em outros vídeos, mas é bom reforçar.
O modelo ele é uma visão de um sistema físico. Ele captura uma visão do sistema físico. Ele é uma abstração desse sistema que tem um propósito específico que pode ser e descrever determinados aspectos estruturais ou determinados aspectos comportamentais do software.
Esse propósito, ele estabelece o que é útil para aquele modelo, o que precisa ser representado naquele modelo e o que não é útil, que é irrelevante para aquele modelo e, portanto, não deve ser representado. Então, o modelo ele descreve de forma completa os aspectos do sistema físico que foram considerados relevantes para o propósito daquele modelo específico no nível de detalhe apropriado. Então, um modelo de caso de uso, ele tem por função representar os requisitos funcionais do software e que pessoas, ou seja, os atores pode utilizar esses requisitos ou essas funcionalidades.
O modelo de classes conceitual, ele representa somente classes relacionadas ao domínio do problema, que representa os conceitos que precisam ser compreendidos a respeito do problema. Ah, um modelo de sequência, ele descreve os o conjunto de mensagens que ser devem ser disparados quando uma determinada funcionalidade for executada. o conjunto de mensagens que devem ser disparadas entre os objetos envolvidos naquele processo e assim por diante.
Cada um tem hã o seu propósito e determina que tipo de informações devem ser modeladas na por cada modelo específico. Bom, já um metamodelo, ele é também um modelo, mas é um modelo que estabelece uma linguagem para expressar modelos. Basicamente, o metamodelo, ele representa um conjunto de conceitos que serão utilizados na modelagem de um determinado modelo.
Então, o seu papel é estabelecer a semântica para modelar elementos dentro de um modelo que será instanciado. Então, um modelo nada mais é que uma instância de um metamodelo. Então, se eu quiser criar um modelo de caso de uso, eu tenho que utilizar, eu vou instanciar metaclasses que definem o metamodelo para o modelo de caso.
Como ele, ela, esse metamodelo, ele representa conceitos como atores, casos de uso, associações de inclusão, associações de extensão, pontos de extensão, por exemplo. Nós vamos ver um exemplo disso. Então, o que é uma metaclasse?
Bom, um o metamodelo, ele contém um conjunto de metaclasses. Então, ah, uma metaclasse, ela é uma metaclasse em um e um metamodelo. E as instâncias dessa metaclasse serão elementos concretos, ã, da OML aplicados em modelos.
Então, esses elementos, um uma instância de uma de uma metaclasse pode ser, por exemplo, uma classe, uma associação, um ator, um caso de uso, uma lifeline, um componente, etc. Então, as metaclasses elas compõem metamodelos. Em essência, uma metaclasse, ela define um conceito.
Este conceito eh será utilizado para eh instanciar elementos e modelos. Continuando, então vamos falar sobre a metaclasse Hector. Então, a metaclasse Hector, ela faz parte do metamodelo, ã, utilizado pelo para criar modelos de caso de uso.
Então, a metaclasse Hector, ela representa o conceito de ator que é utilizado para criar diagramas de casos de uso, que é um dos componentes utilizados na criação de casos de uso. Para aqueles que já assistiram meus vídeos sobre o diagrama de caso de uso, sabem que um ator representa um conjunto de usuários que utilizam determinadas funcionalidades do sistema. Então, existe uma metaclasse para representar esse conceito e ela compõe um metamodelo.
Então, sempre que nós representamos um ator em um modelo de caso de uso, nós estamos instanciando um elemento da metaclasse Actor. Então, aqui nós temos uma figura representando a metaclasse Hector. Então, ela é semelhante a uma classe, porém ela pode conter o estereótipo metaclass para deixar claro que ela é uma metaclasse.
Ah, bom, lembrando que estereótipos são uma forma de dar de estabelecer uma característica especial, de dar um destaque para um determinado componente, atribuindo novas características ou novos comportamentos a esse componente, distinguindo o componente em questão dos seus pares. Ah, aqui nós temos o metamodelo para modelagem de casos de uso. Aqui todos esses elementos aqui representados são metaclasses.
Poderia ter estereotip metaclas, mas como são todos metaclasses, ah, isso não costuma ser representado. Ah, e esse é exatamente o mesmo metamodelo definido pela ah pela documentação da OML. Aqui no caso e uma parte do metamodelo ML é o metamodelo para modelagem de diagramas de casos de uso.
Então vocês perceberão que nós temos aqui a metaclasse Actor, que como já foi falado, representa os conceitos referentes aos atores. A metaclasse use case que representa o conceito ah referente a caso de uso. Nós temos a metaclasse extend e a metaclasse include, que são as associações de extensão e de inclusão.
Nós temos a metaclasse extension point que representa o conceito de ponto de extensão. Então, ah, pode-se perceber, por exemplo, que as metaclasses Actor e Usase, elas são derivadas da metaclasse de Haveard classifier, o classif classificador comportamentado, que é uma metaclasse um pouco mais primitiva. E ela foi eh especializada em actory e us case para representar os conceitos de atores e casos de uso.
Ela é utilizada para especializar outras metaclasses também. Ah, um caso de uso, ele se relaciona com a metaclasse classificador. Ã, e ele também se relaciona com as metaclasses extend include extension point.
Uma vez que um caso de uso pode ter vários pontos de extensão, ele pode ter várias associações de extensão, pode ter várias associações de inclusão, como já foi ensinado em outros vídeos. Ah, também se percebe que as associações de extend e de include, as metaclasses de extend e include, elas são especializadas a partir das metaclasses directedad relationship e named element. Então, elas herdam características dessas duas metaclasses, uma vez que elas são elementos nomeados e elas são um tipo de relacionamento direto.
Uma extensão, ela se relaciona com a metaclasse de restrição, a metaclasse constraint. uma vez que uma extensão pode ter várias restrições e também tá associado com a metaclasse extension point, uma vez que um uma extensão pode estar associado a muitos pontos de extensão. Ah, e o ponto de extensão ele foi especializado a partir do elemento refinável, o refinable element.
Bom, então isto aqui é um exemplo de um metamodelo específico para modelagem de caso de uso. Para modelar classes, existe um outro metamodelo. Para modelar diagramas de sequência, existe um outro metamodelo.
Para modelar diagramas de componente, existe um outro metamodelo. E assim sucessivamente. Na verdade, isso são trechos do metamodelo maior, mais completo, que é o metamodelo da OML como eh como um todo.
Ah, OK. Então vamos lá. Como se criam perfis?
Então, como eu falei, um perfil ele é um tipo de pacote que estende um determinado metamodelo, o metamodelo de referência, ou seja, o metamodelo que já existe. Ah, então ele adiciona nova meta, novas metaclasses baseadas ah a partir desse metamodelo original. Ah, então a principal construção de extensão de um perfil é o stereotype ou estereótipo.
Ah, e ele é definido como parte dos perfis. Basicamente um um perfil ele vai introduzir várias restrições sobre uma sobre metamodel sua metamodelagem ordinária através do uso de metaclasses que são definidas no pacote ah de perfis. Bom, não é permitido a um perfil modificar o metamodelo.
Isso ele não pode fazer. Ele apenas estende esse metamodelo. Então ele não pode retirar quaisquer restrições que tenham sido aplicadas no metamodelo, mas ele pode adicionar novas restrições específicas aplicadas às metaclasses do novo perfil, do perfil que está sendo criado.
Então um perfil ele é uma adaptação de um metamodelo já existente que precisa estar contido em um pacote separado. Aqui nós temos um pacote que contém um perfil UML para internet, ou seja, nós estamos criando um perfil específico para modelar conceitos relacionados à internet. E esse pacote, ele recebeu o estereótipo pro file para deixar claro que ele contém as metaclasses de um perfil.
Ah, falando um pouco mais sobre estereótipos, então o estereótipo ele é uma forma ã de estender eh metaclasses. Na verdade, ele é uma metaclasse ã por si só, mas ele é uma metaclasse limitada. Por quê?
porque ele não pode ser utilizado diretamente. Um estereótipo sempre precisa ser utilizado em conjunto com uma das metaclasses que ele estendeu. Então, cada estereótipo pode estender uma ou mais metaclasses através de extensões em um perfil.
E uma metaclasse, ela pode ser estendida por diversos estereótipos, se isso for considerado necessário. Dentro do contexto de modelo, um estereótipo ele permite atribuir novas características a um elemento ML. Então, aquele elemento que recebe o estereótipo, ele passa a ter um comportamento diferente de seus pares.
Então, se um caso de uso recebe um estereótipo, ele passa a ser um caso de uso especial. Ele continua sendo um caso de uso, mas tem um comportamento um pouco diferente, possui características um pouco diferentes dos casos de uso normais. Da mesma forma, se uma classe recebe um estereótipo, ela passa a ter um comportamento um pouco diferente, passa a apresentar novos comportamentos, novas características.
Então, nós já estudamos estereótipos em outros vídeos. H, estereótipos famosos são, por exemplo, o estereótipo entity, o estereótipo control e o estereótipo boundary, que já foram estudados em outros vídeos, que deixam claro, por exemplo, que uma classe é uma classe de entidade, ou seja, ela está relacionada diretamente ao domínio do problema, ou que uma classe é uma classe de fronteira ou divisão quando recebe estereótipo boundary, ou quando uma classe é uma classe de controle quando recebe o estereótipo Ponto. Existem diversos outros estereótipos que podem ser aplicados a classes.
Por exemplo, eu posso decarr claro que uma classe é uma classe de enumeração, aplicando estereótipo enumeration. Ou eu posso dizer que uma classe está representando uma tabela no banco de de dados relacionais utilizando o estereótipo table, por exemplo. E existem diversos outros tipos de estereótipos.
Eu posso aplicar estereótipos também a associações, por exemplo, associações de include e extend. são associações estereotipadas. Elas, eu tô deixando claro que é um tipo de associação de inclusão ou é um tipo de associação de extensão.
Ah, estereótipos eles costumam vir entre sinais de menor e maior quando são estereótipos de texto. Alguns estereótipos modificam o desenho padrão de um componente quando são chamados estereótipos gráficos. Bom, mas dentro do contexto de modelo, o estereótipo ele permite atribuir novas características a um determinado elemento, UML.
Já dentro do contexto de metamodelos e perfis, um estereótipo ele define como a metaclasse pode ser estendida. esse estereótipo irá eh atribuir novas características e ou restrições a a essa metaclasse, mas não poderá tirar quaisquer características ou restrições que aquela metaclasse já possuísse anteriormente. Ah, então quando uma nova metaclasse ela é derivada a partir de uma metaclasse anterior e recebe o estereótipo stereotype, então fica claro que essa nova metaclasse ela irá modelar instâncias da metaclasse original, mas contendo um estereótipo que vai ter o nome da nova metaclasse que foi criada.
Então, a partir daí, eu posso modelar elementos estereotipados em um determinado modelo e esses esses elementos estereotipados terão características que vão os diferenciar de alguma maneira dos seus elementos originais. Então, eu posso ter um diagrama de classes com classes normais e eu posso ã também colocar classes com estereótipos enumeration ou entity ou control ou boundar que vão se destacar em relação às classes padrão, as classes originais. Então eu sei que no momento que eles recebem aqueles estereótipos, eles têm um comportamento um pouco diferente das classes originais.
Ah, vamos falar um pouquinho sobre sobre extensão dentro do conceito, dentro do contexto de diagrama de perfis. Para o diagrama de perfis, uma extensão é um tipo de associação que é utilizada para indicar que as propriedades de uma metaclasse elas são estendidas através do estereótipo. Então aqui nós temos exemplo.
Aqui nós temos a metaclasse Hector que recebeu stereotip metacass e ela foi estendida criando uma nova metaclasse que foi chamada internet actor e recebeu o o estereótipo stereotype. Isso significa que eu tenho que usar essa metaclasse em conjunto com a metaclasse actor, mas eu posso colocar atores do meu modelo de caso de uso utilizando o estereótipo internet actor. Isso significa que eles representam um ator especial, um ator que ah só pode ser utilizado no contexto da internet.
Ah, para sistemas que são acessados via internet, por exemplo. Então, um ator com estereótipo Internet Actor será será representado dessa forma. O símbolo do ator permanece o mesmo até aqui, porque isso aqui é só por enquanto, isso é só um estereótipo de texto.
Mas além do nome do ator, ele vai receber esse texto entre sinais de menor e maior, internet actor. Para destacar que isso é um ator especial, não é um ator normal, é um ator que utiliza o sistema via internet, por exemplo. e eu posso criar ah desenhos novos símbolos pros meus elementos estereotipados.
Para isso, eu posso associar um desenho gráfico por meio de uma associação de composição. Lembrando que uma associação de composição representa uma complementação do objeto todo e o objeto parte. Então, nesse caso, o desenho irá complementar eh o conteúdo, no caso, do estereótipo internet actor.
Então, como vocês podem notar, eu associei o desenho de um desenho com de um ator, mas dessa vez com um globo no lugar da cabeça normal, por meio de uma associação de composição. Então isso significa que esse estereótipo, quando aplicado, irá modificar o desenho padrão da ah do ator normal. Então, em vez de utilizar um bonequinho padrão para representar o ator, eu vou utilizar esse desenho com o a cabeça globalizada, representando um globo terrestre.
Ah, então no momento que eu aplicar o estereótipo Internet Actor, ao invés de um ator normal, como eu falei, a imagem que será utilizada será esta do ator com a cabeça globalizada, que é a imagem que foi associada à aquele estereótipo. E aqui eu tenho um exemplo de um perfil ah que adapta o o metamodelo utilizado para criar modelos de classe para sistemas de mensagens assíncrons. Então esse perfil ele criou quatro estereótipos a partir de metaclasses que já existiam, no caso da met da metaclasse class e da metaclasse association.
Então, ã, eu estou estendendo a metaclasse class, criando três estereótipos para serem utilizados em conjunto com ela. Então, eu criei um estereótipo message qui, hum, como se errado, message co representa uma fila de mensagens que deverão ser eh recebidas, que deverão ser atendidas. H, um stereotipo producer que representa o produtor dessas mensagens, uma classe que irá produzir essas mensagens e o estereótipo consumer que representa uma classe que representará o consumidor que irá ler essas mensagens.
Eles possuem atributos particulares como o tamanho máximo da fila de mensagens e o tipo de fila, se vai ser uma FIFA, uma LIFA e assim vai. E eu tenho um estereótipo que representa as associações que podem ser aplicadas a essas ã essas classes estereotipadas, que é o co que eu chamei de coinding e que contém o exterior, um atributo para determinar o tipo de ligação ã que vai ser utilizada para essas mensagens. Então isso aqui é um exemplo de um exemplo simples de perfil para sistemas assíncronas.
E nós concluímos mais essa aula sobre o ML. Nós concluímos essa aula sobre o diagrama de perfis. Ah, eu espero que vocês tenham gostado dessa aula.
Espero que vocês tenham considerado essa aula válida. Se vocês gostaram desse vídeo, então eu peço que vocês curtam e compartilhem esse vídeo com quem vocês acreditem que possa se interessar. E se você ainda não estão não estão inscritos no canal, eu peço que vocês se inscrevam.
Eu agradeço a atenção de vocês. Nós nos vemos em outras aulas. Obrigado pela atenção.