Olá sejam bem-vindos ao canal engenharia de software com ênfase uml Eu sou professor ganes 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 uml na aula de hoje eu vou dar continuidade ao tema sobre o diagrama de classes dessa vez explicando uma técnica básica para identificação de classes e operações ou seja métodos e também apresentando alguns exemplos utilizando os estereótipos UTI apresentados na aula anterior então vamos dar
início à nossa aula Então essa é a sexta aula sobre o diagrama de classes e nós vamos iniciar eh aprendendo uma técnica para identificar classes para pessoas que têm pouca experiência então eu gosto sempre de fazer uma pequena propaganda eu já publiquei quatro livros sobre o assunto o meu primeiro livro foi uma abordagem prática que na época tratava da omr 1.5 mas já abordava o omr 2 no final do livro depois eu lancei o livro MR2 guia de consulta rápida em seguida eu lancei o MR2 guia prático e depois eu lancei meu livro mais completo
mais atualizado que é o MR2 uma abordagem prática que se encontra na ter terceira Edição Então vamos lá como identificar classes bom existem algumas técnicas para identificar as classes candidatas classes candidatas são aquelas que TM probabilidade de fazer parte do modelo bom a uma das estratégias mais clássicas é inspecionar os requisitos e esses eh em busca de eh substantivos e verbos Eh esses requisitos eles podem estar contidos no próprio documento de especificação de requisitos ou na documentação eh relativa aos casos de uso por exemplo então como eu falei se procura por substantivos e verbos ou
descrições de ações um verbo descreve uma ação ah os substantivos eles podem representar classes candidatas ou eventualmente seus atributos e os verbos podem identificar a operações ah relacionados a uma determinada classe ou eventualmente associações entre essas classes eh Lembrando que existem vários tipos de modelos que podem ser produzidos com ml os mais comuns são o modelo conceitual e o modelo domínio o modelo conceitual é produzido durante a fase de engenharia de requisitos e o modelo domínio durante a fase de projeto como o modelo conceitual é produzido durante a fase de engenharia de requisitos somente se
identificam classe de entidade relacionadas diretamente ao domínio do problema e não se modelam métodos ou operações como são chamadas na oml porque as operações fazem parte da solução elas só são descobertas na fase de projeto e elas são representadas em um modelo domínio que nada mais é que um modelo conceitual H melhorado avançado em que foram H Onde se passa a identificar eh como o problema vai ser solucionado bom Então essa técnica de identificação de substantivos e verbos ela é uma técnica já bastante antiga e ela precisa ser refinada ela tem que passar por vários
ciclos então a gente pode começar primeiramente identificando somente substantivos E aí depois em uma fase posterior identificar os verbos bom então para cada substantivo é preciso representar uma classe no modelo conceitual ou eventualmente um atributo em uma das classes desse modelo e para cada descrição de ação Então deve se procurar um comportamento associado a uma classe ã muitas vezes esse comportamento será representado como uma operação ou seja um método então verbos em geral identificam ações mas eventualmente eles podem identificar uma associação entre as classes Ah também é preciso garantir que as operações recebam os dados
corretos para que o comportamento ser executado de forma correta e normalmente esses dados serão atributos que precisarão estar contidos em uma determinada classe Além disso eh pode ser útil procurar por eh descrições de restrições restrições estabelecem condições regras de negócio validações que precisam ser levadas em consideração quando da implementação da das classes dos seus atributos dos seus métodos então identificar restrições Ah é útil para eh verificar eh quais regras Quais consistências quais validações precisariam ser aplicadas às classes aos seus atributos à suas operações ou as suas associações E como eu já falei anteriormente esse processo
ele precisa passar por vários refinamentos e o o modelo ele precisa ser analisado refinado corrigido melhorado até ah ser considerado válido como eu falei ele pode ter no mínimo duas fases ele pode ser aplicado durante engenharia de de requisitos apenas para identificar classes conceituais nesse caso eu vou procurar para substantivos e na no na fase de projeto eu passo a procurar também por verbos para identificar as operações que devem ser aplicadas a cada classe bom Então essa é uma técnica básica para identificação de classe e operações agora eu vou falar um pouquinho sobre a arquitetura
mvc que eu comecei a discutir no vídeo anterior então arquitetura mvc ela representa classes com o estereótipo entity e um módulo chamado modelo ah Lembrando que nós temos outros dois módulos que são módulo de Fronteira ou visão onde ficam as classes de Fronteira ou visão e eu tenho módulo de controle que onde ficam as classes controle que interpreta os eventos que ocorrem sobre as classes de visão objetos que pertencem a classes com estereótipo entity não costumam em geral interagir muito com os objetos das classes de Fronteira eventualmente pode acontecer das classes da entidade se comunicarem
diretamente com classe divisão Aliás com seus objetos eh avisando que houve mudanças nos estados dos objetos e a visão pode eventualmente os objetos da classe visão no caso fazer uma solicitação de atualização diretamente as classes contidas no módulo de modelo eh mas é importante destacar que isso varia um pouco de autor para autor existe uma certa controvérsia com relação à arquitetura mvc alguns autores defendem que não que tudo tem que passar pelas classes de controle e as classes de fronteira e entidade não não se comunicam outros autores permitem uma interação mínima quando é feita apenas
uma atualização nos dados das classes de entidade Então não é necessário que a classe que os objetos da classe controle interfiram para que a visão seja atualizada bom ah mas de qualquer maneira o A grande maioria das interações entre a visão e o modelo ela passa pelo intermédio de objetos de classes controladoras então é função dos objetos de controle eh interpretar os eventos que ocorrem nas classes de nos objetos das classes de fronteira e se acharem necessário solicitar a execução de métodos em instâncias das classes entidade hã e também é função dos controladores dos objetos
das classes de controle H determinar se os resultados dos métodos devem um não ser apresentados nas pelos objetos de visão Aqui nós temos o exemplo de diagrama de classes Esse é o modelo conceitual onde foi aplicado o estereótipo entity lembrando Como já foi falado que o modelo conceitual é produzido durante a fase de engenharia de requisitos conté somente classe identidade e não ah representa detalhes de implementação não representa operações ou seja métodos porque isso já faz parte da solução então aqui eu tenho o modelo conceitual do sistema controle bancário eu tenho uma classe conta comum
que foi especializada nas classes conta especial e conta poupança eu tenho uma classe pessoa que foi especializada nas classes pessoa física e pessoa jurídica e eu tenho uma classe movimento então uma pessoa ou uma pessoa física ou uma pessoa jurídica possuem no mínimo uma no máximo muitas contas comum ou conta especial ou conta poupança e qualquer uma dessas contas pode ser possuída por no mínimo uma no máximo muitas pessoas notem que isto é uma associação de agregação quer dizer que quando eu consultar uma pessoa eu quero que surjam todas as contas com todas as contas
que ela possui também ah Além disso aqui tem uma restrição Unic determinando que uma pessoa pode possuir muitas contas contas contas comuns especial ou poupança porém elas não podem se repetir na coleção associada a uma pessoa além disso a classe conta comum ou especial ou poupança porque elas erdam por herança possui uma associação com a classe movimento ela determina que todos os movimentos que ocorrem numa conta devem ser registrados nessa classe então uma conta ela pode registrar no mínimo um no máximo muitos movimentos bom Aqui nós temos exatamente o mesmo modelo conceitual o mesmo diagrama
de classes só que dessa vez sem a aplicação do estereótipo entity eu pessoalmente não gosto de utilizar no modelo conceitual estereótipo entity porque ele esconde os atributos das classes porém existem situações em que isso pode ser útil quando se trata de diagramas bastante grandes então se aplica o estereótipo entity e usa um símbolo menor para não ã ocupar tanto espaço eu posso então ter um diagrama com utilizando eh clássico estereótipo ênteses para deixar claro que elas são classes de entidade e um outro diagrama posteriormente sem utilizar estereótipo é uma questão de eh estilo Mas eu
prefiro não usar o estereótipo entity porque ele esconde os atributos então Aqui nós temos o mesmo modelo só que dessa vez detalhando os atributos de cada uma das classes notem que a classe pessoa é uma classe abstrata Eu sei disso porque o nome dela tá em Itálico Então na verdade só nós só vamos interagir com pessoas físicas e pessoas jurídicas não haverão objetos da classe pessoa e Aqui nós temos o o diagrama de classe para o sistema de controle bancário dessa vez enfocando o modelo de domínio se vocês observarem as classes elas possuem a terceira
divisão contendo as operações então a classe conta comum tem as operações relacionadas às operações com as contas que são herdadas pela conta especial e conta poupança então eu posso abrir contas consultar validar consultar contas validar senhas e assim vai a classe movimento eu tenho as operações para registrar movimento para consultar movimentos a a classe pessoas físicas eu ten as operações para registrar uma pessoa validar o seu CPF consultar uma pessoa para seu CPF e assim por diante então isso aqui é um exemplo de modelo de domínio ele já foi se pegou o modelo conceitual e
se enriqueceu ele com as operações ou seja os métodos relacionados às classes da entidade poderiam haver outras classes nesse modelo que fossem necessárias a solução do problema mas nesse momento a gente só enriqueceu as classes de entidade com as operações Aqui nós temos um diagrama de classes relacionado diretamente ou exclusivamente ao processo de emissão de saldo então aqui só tem as classes que estão envolvidas com processo de emissão de saldo notem que aqui nós temos a classe de visão de visão emitir saldo e a classe de controle emitir saldo porque elas fazem parte desse processo
e eu tenho novamente as classes pessoa especializada em pessoa física e pessoa jurídica e a classe conta comum especializada em contto especial e poupança mas eu não tenho a classe movimento porque ela não é necessária para o processo de emissão de saldo notem que aqui eu apliquei estereótipos então eu posso perceber Posso perceber que visão é uma classe de Fronteira controle emitir saldo é uma classe controladora e as outras classes são classes de entidade Aqui nós temos um outro diagrama de classes dessa vez referente ao modelo domínio pro Sistema de Controle de biblioteca Então eu
tenho várias classes de entidade eu tenho uma classe gênero que identificam todos os gêneros de livros que eu tenho armazenado na biblioteca Eu tenho uma classe para armazenar os autores dos livros eu tenho uma classe para armazenar as editoras que publicam os livros e eu tenho uma classe livro que contém o que representa os livros que a Biblioteca possui os títulos que a Biblioteca possui Então você v notar que eu tenho informações relacionadas diretamente ao livro Como o título do livro O ano a edição a o total de de páginas o isbn e aqui eu
tenho algumas associações binárias simples com outras classes então eu sei que um livro ele possui apenas um gênero mas um gênero é possuído por no mínimo no máximo muitos livros Ah um livro pode ser escrito por muitos autores e um autor pode escrever muitos livros é uma associação muitos para muitos e uma editora ela pode publicar muitos livros mas um livro Só pode ser publicado por uma editora eu tenho também uma classe exemplar a classe exemplar está associada a classe livro por meio de uma associação de agregação isso significa que quando eu consultar um livro
eu quero eh que sejam listados além das informações do livro as informações de todos os exemplares daquele livro com a sua situação se eles estão emprestados se eles são para consulta local se eles estão disponíveis esse tipo de coisa notem que ao lado da classe exemplar existe uma classe de enumeração a gente consegue perceber isso pelo pelo estereótipo enumeration que é chamada de situação e ela tem quatro literais disponível emprestado reservado consulta local Esses são os valores válidos para o atributo situação exemplar do da classe exemplar notem que esse atributo é do tipo situação eu
tenho também uma classe empréstimo que ela contém os atributos data empréstimo data evolução e data em que o empréstimo foi efetivamente devolvido notem que a multiplicidade aqui é no mínimo Zero no máximo um que empréstimo Pode não ter sido devolvido ainda e empréstimo possui uma ação de agregação com exemplar então o empréstimo pode conter no mínimo um no máximo muitos exemplares um exemplar pode estar contido em nenhum ou muitos empréstimos então quando eu consultar um empréstimo eu quero que sejam listados todos os exemplares ah relacionados a aquele empréstimo também o empréstimo possui uma associação de
composição com a classe renovação então eu posso renovar o empréstimo então a classe renovação possui o atributo data de renovação Então sempre que eu consultar o empréstimo eu quero saber também todas as vezes que ele foi renovado ele pode ser renovado nenhuma ou muitas vezes Mas diferente do exemplar um exemplar pode fazer parte de muitos impr préstimos uma renovação faz parte de um empréstimo específico então por isso que foi usado aqui uma composição Além disso empréstimo possui três associações binárias simples com a classe sócio a classe sócio representa os sócios que podem retirar livos da
biblioteca então o sócio pode realizar nenhum ou muitos empréstimos ele pode renovar nenhum ou muitos empréstimos e ele pode devolver nenhum ou muitos empréstimos Além disso o sócio possui uma associação binária simples com a classe tipo sócio então a tipo sócio contém os vários tipos de sócio que a Biblioteca possui então tipo de sócio pode possuir nenhum ou muito sócios mas o sócio poderá deverá possuir um e somente um tipo deverá ser de um e somente um tipo Então esse aqui é mais um exemplo de modelo de classes modelo de domínio para o sistema de
controle de biblioteca e nós concluímos mais essa aula eu espero que vocês tenham gostado desse vídeo Se vocês gostaram da aula eu peço que vocês curtam compartilhem esse conteúdo com quem possa se interessar e se ainda não se inscreveu no canal eu peço que você se inscrevam obrigado pela atenção nós nos vemos nas próximas aulas [Música]