[Música] Olá sejam bem-vindos ao canal engenheria de software com ênfase uml Eu sou professor Jes Guedes eu já atuo na área de modelagem de software há vários anos eu tenho quatos publicados sobre o assunto e eu já ministrei diversas palestras de cursos técnicos sobre Model de software com ML na aula de hoje eu pretendo falar sobre uma técnica básica para identificar classes e operações sobre essas classes para pessoas que ainda têm pouca experiência em modelagem de software em identificar classes de entidade eh eu também pretendo apresentar alguns exemplos de diagrama de classe incluindo aplicando estereótipos
do tipo boundary contra o entity que já foram vistos em vídeos anteriores Então vamos dar início ao nosso conteúdo então o tema principal como eu falei dessa aula é identificar classes Mas como eu falei eu vou apresentar alguns exemplos de diagrama de classe também então eu gosto sem de fazer uma pequena propaganda como eu disse eu já publiquei quatro livros sobre o assunto meu primeiro livro foi o m uma abordagem prática que na época tratava sobre o Mr 1.5 mas que já incluí a ml2 no final do livro A ml2 tava começando a ser lançado
na época depois lancei um livro exclusivamente sobre o ml2 que foi o guia de consulta rápida ah Poucos Anos depois eu evoluí esse livro pro pro livro m2 guia prático e finalmente eu lancei o meu livro principal mais importante mais completo que é o m2 uma abordagem prática que se encontra na terceira Edição Mas vamos ao conteúdo Como identificar classes existem algumas técnicas para a identificação de classes candidat O que são classes candidatas são classes que são promissoras que t a probabilidade de realmente compor o modelo que nós estamos criando a técnica mais antiga ou
mais clássica ou talvez a mais comum é examinar os requisitos do sistema os requisitos do software esses requisitos podem estar contidos em documentos requisitos ou na documentação dos casos de uso ou n revistas com os com os usuários por exemplo então ah durante a esse exame dos requisitos se procura em primeiro momento por substantivos e um segundo momento por verbos ou descrições de ação os substantivos eles são candidatos a representar classes que estão relacionados ao domínio do problema que estamos tentando solucionar eventualmente os substantivos podem eh identificar atributos dessas classes já os verbos eles podem
identificar operações que devem ser eh suportadas por essas classes eventualmente eles podem também identificar associações entre as classes Ah também pode ser útil procurar por descrições de restrições ou condições nesses que devem ser aplicados substantivos e verbos eh como eu falei os requisitos eles podem ser classificados requisitos funcionais requisitos não funcionais requisitos funcionais se referem às funcionalidades à funções que o software oferece enquanto que requisitos não funcionais identificam características gerais do software como o seu nível de confiabilidade o seu nível de portabilidade o seu nível de escalabilidade Ah o nível de desempenho esperado pelo software
o nível de proteção esperado por esse software esse tipo de coisa então os requisitos não funcionais eles são particular ente úteis para procurar por essas possíveis restrições embora elas possam ser encontrados os requisitos funcionais também H bom então Eh em um primeiro momento para cada substantivo deve-se tentar representar uma classe no modelo conceitual ou eventualmente um atributo em uma dessas classes O que é o modelo conceitual Como já foi ensinado anteriormente o modelo conceitual é um modelo de classes que é produzido durante a fase de engenharia de requisitos então ele identifica classe de entidade relacionadas
diretamente ao domínio do problema que nós estamos tentando solucionar uma vez que esse modelo é produzido durante a fase de engenharia de requisitos ele não eh identifica operações ou seja métodos porque eles já fazem parte da solução posteriormente durante a fase do projeto toma-se o modelo conceitual e passa-se também a identificar métodos e outras características da solução do problema então aí se transforma modelo conceitual e o modelo domí e esse modelo conceitual é enriquecido de tal forma que se crie um diagrama de classes que já enfoca a solução na Eng requisito se produz modelo conceitual
que apenas identifica o problema na fase de projeto também se identifica a solução então verbos normalmente identificam ações que vão corresponder a operações nas classes Mas podem eventualmente identificar uma associação entre as classes Ah bom também é preciso garantir que no momento que as operações foram identificadas que essas operações recebam os dados corretos para que o a operação em questão possa ser executada corretamente e esses dados muitas vezes vão ser atributos que precisarão estar contidas em um ou em um ou mais mais classes Ah o processo de identificação de classes por meio da eh identificação
de substantivos e verbos ele vai passar por diversos refinamentos precisa passar por diversos refinamentos onde o modelo Inicial ele vai ser analisado corrigido e melhorado então Eh como eu falei primeiramente se produz o modelo conceitual só se trabalha com substantivos e o segundo momento se produz o m domínio onde vai se trabalhar também com verbos eu vou falar um pouquinho sobre os aplicação dos estereótipos boundary contol entity e a arquitetura mvc os estereótipos Bound cont entity já foram estudados em outras aulas basicamente o estereótipo boundary e o cont entity também são estereótipos gráficos que modificam
o desenho e padrão das classes estereótipos boundary identificam a classe de Fronteira ou divisão são classes objetos são responsáveis por interagir com os usuários fazem parte da interação entre os usuários e o sistema ah objetos das classes controle eles são responsáveis por interpretar os eventos que ocorrem nas classes boundary e se achar necessário repassar para classe de entidade normalmente solicitando a execução de métodos e objetos de entidade ou classes que recebem o est poente são classes comos objetos eh estão relacionados diretamente ao domínio do problema e essas classes normalmente vão ter muitos objetos normalmente essas
classes vão ser persistentes e é nessas classes que a lógica do negócio deve estar contido isso se nós seguirmos a arquitetura mvc arquitetura mvc é abetura de Model vi control que significa modelo visão e controle a na camada no módulo de modelo vão estar contidas as classes de entidade no módulo divisão as classes do Fronteira e no modo de controle as classes de controle Ah bom eh em geral objetos de classe de entidade Eles não têm muitas interações com objetos de classe de Fronteira Mas pode acontecer do modelo comunicar as as instâncias de Fronteira diretamente
que houve uma mudança nos valores de seus objetos e pode acontecer de objetos da do mdulo de visão ou seja objetos das classes de fronteira ah eventualmente fazer uma solicitação de atualização diretamente a modelo porém normalmente a a maioria das interações entre a visão e o modelo será feita por intermédio de objetos das classes controladoras Então as instâncias das controladoras elas interpretam os eventos que ocorrem nas instâncias das classes de fronteira e se achar necessário elas solicitam a execução de métodos pelas instâncias das classes de entidad e elas também decidem se os resultados da execução
desses métodos devem ser apresentados pelos objetos Fronteira Aqui nós temos um exemplo de diagrama de classes é um modelo conceitual onde foi aplicado o estereótipo entity estes símbolos aqui todos eles representam classes masão onde foi aplicado estereótipo ou seja um estereótipo gráfico que modifica o desenho padrão da classe então Aqui nós temos o modelo conceitual para o sistema de controle bancário e aqui só são apresentadas classes entidade então nós temos uma classe conta comum que foi especializada nas classes conta especial e conta poupança nós temos uma classe movimento que está associada a uma classe conta
comum ou especial ou poupança como as classes conta especial cont poupança el especialização de conta comum elas também erdam as associações dela então eu consigo ler esta Associação de tal forma que eu sei que uma conta comum ela pode registrar nenhum ou muitos movimentos mas o movimento só pode ser registrado por uma conta comum ou uma conta especial ou uma conta poupança Eu também tenho uma classe pessoa que foi especializado em pessoa física e pessoa jurídica e eu tenho uma associação entre essa classe e a classe conta comum onde se diz que uma classe pessoa
ela um objeto da classe pessoa no caso uma pessoa física ou uma pessoa jurídica porque pessoa é uma classe abstrata ele irá possuir no mínimo um no máximo muitas contas comum ou especial ou poupança e uma conta será possuída por uma no mínimo uma no máximo muitas pessoas como nós podemos votar pela multiplicidade Além disso nós temos que isso aqui uma associação do tipo agregação e significa que quando uma pessoa física ou jurídica for consultar Eu também quero saber todas as contas que ela possui Então as informações da pessoa deverão ser complementadas pelas informações das
contas que elas possuem Ah aqui nós temos o mesmo diagrama de classes conceitual mas dessa vez sem aplicar o estereótipo entity no diagrama de classes o estereótipo entity tem vantagens e desvantagens por ele ser um estereótipo gráfico ele esconde os atributos e mos das classes então isso pode ser útil ou não ele pode ser útil no sentido em que o diagrama pode ficar menor e pode ter menos menos informações pros eh usuários eh visualizarem em primeiro momento é pode ser ruim justamente porque esconde os atributos e métodos das classes então Eu normalmente não gosto de
usar o estereótipo empty Ah porque ele esconde os atributos e métodos das classes bom mas aqui nós temos o mesmo modelo conceitual dessa vez sem sem aplicar oic entity são as mesmas classes com as mesmas associações que já foram explicadas Ah e Aqui nós temos um diagrama de classes dessa vez representando o modelo de domínio do Sistema de Controle bancário as mesmas classes só que dessa vez vocês podem notar que as classes contém também métodos que são as operações que se que cada que os objetos cada uma dessas classes pode executar então se nós observarmos
a classe conta comum nós vamos ver que existem os métodos para abertura de conta para consulta de conta para validar senha para emitir saldo e assim vai ah algumas outras informações que foram consideradas úteis são algumas restrições né que dizem por exemplo que uma pessoa foi especializada em pessoa física e pessoa jurídica mas que essa especialização é de junta e completa quer dizer que uma pessoa ou é fí fsica ou é jurídica não pode ser as duas ao mesmo tempo e é completa porque eu não posso especializar mais a classe pessoa e aqui já na
conta comum também é a especialização é de junta mas é incompleta De repente pode existir algum outro tipo de conta que eu possa criar que eu possa especializar a partir da classe conta comum Ah eu também posso criar modelos de classes específicos para um determinado processo do sistema então aqui eu estou focando o processo de emissão de saldo onde eu estou representando todas as classes envolvidas no processo não somente classe entidade Então eu tenho uma classe para ah representar a visão do processo de emissão de salto essa é uma classe de Fronteira receber o estereótipo
boundary Então ela também é um estereótipo gráfico que modifica o desenho padrão da classe então este é o símbolo de uma classe Fronteira Aqui nós temos uma classe de controle que representa a classe cujas instâncias irão controlar o processo de emissão de saldo também estereótipo gráfico que modifica o desenho padrão da classe então uma classe de controle representada por um círculo com uma seta e Aqui nós temos as classes de entidade que estão envolvidas no processo de emissão de sal vocês vão notar que a classe movimento não se encontra nesse processo não se encontra nesse
diagrama porque ela não é necessária a esse processo e Aqui nós temos um outro diagrama de classe dessa vez é um modeo de domínio para os Sistema de Controle de biblioteca aqui só tem classes de entidade bom ah classe não somente classe de entidade nós temos também uma classe de numeração bom eh Então as classes identificadas foram a classe livro que contém os atributos como título do livro ano do livro A edição do livro o total de páginas do livro isbl etc do livro e nós temos outras classe como gênero autor e editora então um
livro ele possui um gênero mas um gênero pode ser possuido por muitos livros um livro é escrito por no mínimo um no máximo muitos autores um autor pode escrever no mínimo um no máximo muitos livros e um livro é publicado por uma editora mas uma editora pode publicar muitos livros eu consigo ver ess eu consigo perceber essa informação por meio da multiplicidade Ah eu também tenho uma classe exemplar porque um livro ele pode ter muitos exemplares ess exemplares podem ter sido adquiridos eh ao longo do tempo então eles podem estar em ações diferentes Então eu
preciso armazenar essas informações então uma classe deat os atributos data aquisição e situação do exemplar essa situação é do tipo situação que não é um tipo primitivo esse tipo está representado pela classe de numeração situação que contém os literais válidos para esse tipo de atributo ou seja os valores válidos então um exemplar ele pode pode passar passar paraas situações disponível emprestado reservado ou consulta local bom eu consigo perceber também que existe uma associação de agregação entre livro e exemplar um livro ele é representado por um mínimo no máximo muitos exemplares e um exemplar é representado
por um somente um livro mas quando eu consultar um livro Como isto aqui é uma associação de agregação eu quero que as informações de livro sejam complementados pelas informações dos exemplares desse livro para ver todos os exemplares que aquele livro possui e situação em que ele se encontram Ah eu também tenho uma classe empréstimo que possui os atributos data empréstimo data evolução data em que o empréstimo realmente foi devolvido e os métodos para registrar o empréstimo devolver um exemplar renovar exemplares e para ver verificar a cação dos empréstimos o empréstimo ele possui associações com algumas
classes eh próximas a ele então a classe empréstimo tem as associações por classe sócio Ah um sócio ele pode realizar nenhum muitos empréstimos pode renovar nenhum muitos empréstimos ou pode devolver nenhum ou muitos empréstimos também eh o empréstimo ele vai conter no mínimo um no máximo muitos exemplares e um exemplar poderá estar contido em nenhum ou muitos empréstimos is aqui uma associação de agregação Isso significa que ao consultar empréstimo eu quero saber todos os exemplares que fazem parte desse empréstimo também a classe empréstimo possui uma associação com a classe renovação porque o impresto não pode
ser renovado nenhuma muitas vezes então eu preciso guardar a data de renovação de cada vez que o imprestimo foi renovado Ah também como isso aqui é uma composição significa que eh também quando eu consultar o empréstimo eu quero saber todas as renovações que ele teve Mas diferente da agregação uma renovação se refere a um empréstimo único enquanto que exemplar pode estar associado a mais de empréstimo Finalmente um sócio ele pertence a um determinado tipo de sócio mas um tipo de sócio pode ser possuído por nenhum ou muitos sócios então ess aqui é mais um exemplo
diagrama de classe e nós encerramos a nossa aula de hoje eu espero que vocês tenham gostado desse conteúdo se ele for útil eu peço que vocês curtam e compartilham eu agradeço a atenção de vocês e nós vemos em outras em outros vídeos nesse canal obrigado