Olá sejam bem-vindos ao canal engenheiria de software com ênfase uml eu sou o professor gilian esges 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 enfocando a algumas associações mais avançadas Então vamos dar início à nossa aula Então essa é a segunda parte sobre o diagrama de classes nós iniciamos a falar
sobre o diagrama de classes nos dois vídeos anteriores no vídeo sobre ah introdução ao diagrama de classes sobre a primeira parte do diagrama de classe propriamente dito onde eu apresentei alguns conceitos básicos sobre esse diagrama alguns mecanismos básicos alguns recursos básicos e eu introduzi iniciei a falar sobre associações eu falei de associações unários associações binárias e associações ternárias hoje então nós vamos abordar algumas associações alguns tipos de associações mais avançados da uml eu gosto sempre de fazer uma pequena propaganda como eu disse eu já publiquei quatro livros sobre o assunto o meu primeiro livro foi
o omr uma abordagem prática que na época tratava da umr 1.5 mas já abordava o MR2 no final do livro depois eu lancei o livro MR2 guia de consulta rápida há alguns anos depois eu escrevi o livro umr 2 guia prático e finalmente eu lancei o meu livro mais importante mais completo que foi o m2 uma abordagem prática que se encontra na terceira Edição Mas vamos ao conteúdo eu vou começar falando sobre a associação de agregação eh essa Associação ela demonstra que as informações dos objetos de uma classe precisam ser complementadas pelas informações de objetos
de na verdade não necessariamente de outra classe pode ser numa associação unária eh pode ocorrer uma uma associação de agregação Então essa Associação determina que os que as informações de um objeto podem ser complementadas pelas informações de outros objetos a qual ele está associado então o objeto cujas informações precisa ser complementadas precisam ser complementadas é chamado de objeto todo e os objetos que complementam essas informações são chamados de objetos parte então Eh esse tipo de associação demonstra uma relação todo parte entre os objetos Associados e os objetos parte eles não podem ser destruídos por um
objeto diferente do objeto todo então Aqui nós temos um exemplo de associação de agregação a associação de agregação ela é representada por um losângulo que se enc que fica encostado na classe que contém os objetos todo então aqui eu estou dizendo que uma pessoa ela pode possuir no mínimo uma no máximo muitas contas e uma conta pode ser possuída por no mínimo uma no máximo muitas pessoas mas diferente de uma solação binária simples isto aqui é uma agregação eu percebo isso por causa deste losângulo Isso significa que os objetos da classe pessoa são os objetos
todo e os objetos da classe conta comum nessa situação são objetos parte então quando eu consultar uma pessoa além das informações relacionadas à pessoa eu tenho que apresentar as informações relacionadas até a todas as contas que essa ah pessoa possui por isso esse símbolo de agregação indica ele identifica essa complementaridade bom e nós temos a associação de composição que é uma variação da agregação Eu costumo dizer que é a agregação egoísta porque ela apresenta um vínculo mais forte entre os objetos todo e os objetos parte e um objeto parte Ele só pode estar associado a
um objeto todo não pode estar associado a mais de um objeto todo diferente da agregação que permite isso na composição isso não é possível um objeto parte só pode estar associado a um objeto todo específico então Aqui nós temos o exemplo de associação de composição onde eu enfoco um trecho de um modelo de classe para uma revista científica então uma revista científica ela pode publicar no mínimo no máximo muitas edições e uma e uma edição poderá conter no mínimo seis do máximo 10 artigos ah em revistas científicas os artigos precisam ser inéditos ou seja eles
não podem ter sido publicados em outras revistas e em outras edições então por isso que existe essa Associação de composi ção quando eu consultar uma edição além das informações da edição eu quero que sejam listados todos os artigos que ela contém então por isso esse símbolo de composição Além disso o símbolo de composição determina que um artigo deve estar associado a uma única edição daquela revista ele não poderá estar associado a outra edição e nós temos a a associação de generalização especialização que já foi ah falada ah na aula sobre introdução a diagrama de classes
basicamente ele demonstra quando uma classe é especializada a partir de outra classe mais geral Ah então as classes Gerais elas são chamadas como nome Como já disse classes Gerais ou mães ou superclasses enquanto que as classes especializadas também são chamadas de classes filhas ou subclasses além disso a generalização especialização ela me permite representar A Hierarquia de classes em termos de Quais são as classes superiores ã e quais as classes inferiores em termos de camadas então nas classes superiores estarão as classes mais Gerais e nas inferiores as classes mais especializadas uma hierarquia de classe pode conter
muitas camadas de classes ã bom Acabei de falar F nisso né uma hierarquia de classe pode conter muitas camadas de classe pode ter muitos níveis Ah então uma classe pode em um determinado momento ser uma classe especializada e em outro ser uma classe geral ah mas ela própria pode também ser especializada em novas subclasses tornando-se então uma classe geral em relação às classes especializadas a partir dela ã na generalização especialização existe a ocorrência de herança Isso significa que as classes especializadas herdarão todas as características das classes Gerais a partir das quais elas foram especializadas ou
seja elas herdarão todos os atributos todos os métodos e todas as associações que as classes Gerais possuírem as classes especializadas elas podem receber novos atributos ou métodos e podem inclusive Red ar métodos já existentes nas classes Gerais Ah no caso esses métodos ah são conhecidos como métodos polimórficos Ah então o uso de generalização especialização uso de herança eh permite uma maior rapidez no desenvolvimento eh aproveita código já desenvolvido diminui a possibilidade de riscos facilita a manutenção Ah isso tudo porque eu consigo aproveitar os atributos e métodos já H desenvolvidos eu só tenho que trabalhar os
novos atributos e o ou métodos eh novos Ah então isso impede que outro que erros sejam cometidos desnecessariamente Aqui nós temos o exemplo de diagrama de classes utilizando a associação de especialização generalização é representada por essa seta mais grossa então aqui eu tenho uma classe conta comum com diversos atributos diversos métodos ou operações e eu tenho duas classes especializadas a partir dela a classe conta especial e a classe conta poupança Então conta especial er da todos os atributos de conta comum e ainda acrescenta mais o atributo limite e conta poupança também er da todos os
atributos de conta comum e acrescenta o atributo de aniversário além disso a conta especial e a conta poupança erdam todos os métodos da classe conta comum porém conta poupança ainda tem o método da conta que é para calcular o quanto vai render a o valor daquela conta poupança no em um determinado aniversário e a classe conta conta especial Além de herdar todos os métodos de conta comum redlar o método Abrir conta e o método sacar valor uma vez que é necessário incluir o limite e da conta quando for aberta a conta e quando for sacado
algum valor então A Hierarquia determina Qual dos métodos vai ser executado se for por exemplo se o método sacar valor for ser executado no objeto da classe conta poupança vai se verificar o método existe na conta poupança Não essa classe é uma classe especializada sim o método existe na classe conta geral na classe geral sim então se executa esse método o método sacar valor no caso da classe conta comum na classe conta especial se for executado o método sacar valor ou método Abrir conta vai se verificar que ele já está declarado na própria classe conta
especial então será executado o método definido nessa classe eh eu vou falar um pouco sobre classes associativas elas eh são produzidas quando ocorre quando existem associações em que exista a multiplicidade muitos asterisco né em todas as extremidades eh elas são necessárias em situações específicas em que dois objetos eh que estão relacionados na associação eh precisem conter eh um determinado atributo que não possa ser a armazenado em nenhuma das classes envolvidas então Aqui nós temos um exemplo Ah nós temos aqui uma classe ator e uma classe filme que serve para identificar todos os atores que atuaram
em determinado filme e todos os e todos o os filmes em que um ator atuou então um ator ele pode atuar em muitos filmes e um filme pode atuar em muitos pode ter muitos atores atuando nele como não é possível armazenar todas as atuações de um determinado ator na classe ator ou todos os atores em em uma classe filme se criou uma classe associativa então aqui eu posso dizer que um determinado ator atuando em determinado filme interpretou um determinado papel aqui nós temos um outro exemplo de classe associativa para um sistema de controle de submissões
científicas onde cada submissão precisa ser avaliada por três avaliadores e cada avaliação tem que obedecer vários quisitos como originalidade qualidade clareza aderência ausência de Marketing e a situação da avaliação se ela foi aprovada reprovada esse tipo de coisa bom então que eu estou dizendo que um avaliador ele pode avaliar no mínimo uma no máximo muitas submissões como demonstra a multiplicidade e uma submissão precisa ser avaliada por no mínimo três no máximo três avaliadores então é uma associação muitos para muitos acontece que eu não tenho como dentro do avaliador ah armazenar atributos para cada uma de
suas avaliações e eu não tenho dentro da classe submissão Como armazenar cada uma das avaliações que ela ã conter que ela recebeu então se criou uma classe associativa então a classe foi chamada essa classe de avaliação Isso significa que ela conterá os atributos relacionadas a avaliação de uma submissão por um avaliador específico então por isso a justificativa para uma classe associativa falar um pouquinho sobre classes intermediárias as classes associativas elas só são válidas quando Existe um único objeto relacionado a duas instâncias então no exemplo do ator e do filme Se um se um autor por
exemplo interpretasse dois papéis em o mesmo filme Como às vezes é comum Por exemplo quando se tem um ator que interpreta o g Dois Gêmeos gêmeo bom e gêmeo mau então o uso da classe associativa ela não seria adequada Então nesse caso seria necessário inserir uma classe normal que atuaria uma classe intermediária da associação então Aqui nós temos o exemplo de classe intermediária que foi chamado de classe atua Então ela está Ela serve de intermediação entre o ator e o filme no momento que um objeto da classe ator pode se relacionar a muitos objetos da
classe atua Mas cada objeto da classe atua estará relacionada somente um ator e o objeto da classe filme poderá se relacionar a muitos objetos da classe atua mas um objeto da classe atua estará relacionado somente a um filme dessa forma por meio da classe intermediária atua eu consigo descobrir todos os atores relacionados a um filme específico e todos os filmes relacionados a um ator específico vou falar um pouquinho sobre associação qualificada agora então esse tipo de associação ela permite identificar de forma individual um objeto dentro de uma coleção uma coleção de objetos Então essa identificação
é feita por meio de um qualificador que basicamente ele é formado por o um ou mais atributos cujos valores não se repetem em nenhum objeto então ah esse qualificador ele permite identificar um objeto específico então ele é representado como um retângulo ligado à classe que deseja identificar um objeto específico ã na outra extremidade da associação então aqui a classe pessoa ela precisaria armazenar o número da conta para identificar uma conta específica então este aqui seria esse é um exemplo de associação qualificada e este retângulo é exemplo de qualificador Ahã falar um pouquinho sobre dependência como
o nome já diz esse relacionamento essa Associação ela identifica um grau de dependência de um elemento em relação ao outro existem vários tipos de dependências na uml eh então uma dependência ela determina que existe um relacionamento fornecedor cliente eh em que a modificação de um fornecedor irá impactar de alguma maneira os elementos clientes ah como eu falei existem muitas especializações de dependência na uml que são utilizadas como estereótipos e podem ser por exemplo no diagrama de classes o usar no diagrama de caso de uso include o extend que já foram explicados nos vídeos sobre o
diagrama de caso de uso instance of no diagrama de objetos merge no diagrama de pacotes entre outros Aqui nós temos exemplo de dependência com estereótipo usage aqui ele vai ser representado por um texto entre sinais de maior e menor chamado use isso significa então que o a classe pedido ela tem uma dependência com a classe item pedido no momento que ela usa as informações desse dos objetos dessa classe eh e nós temos a associação de realização uma associação de realização ela também é uma dependência especializada que mescla característica dos dos relacionamentos de generalização e dependência
Então ela basicamente identifica classes que são responsáveis por Executar a métodos que estão definidos em outras classes Então esse tipo de relacionamento ele herda o comportamento de uma classe mas não a estrutura dessa classe ele apenas implementa esses comportamentos então Aqui nós temos um exemplo de realização onde eu tenho uma classe placa mãe uma classe Face uma chamada imonitor e uma classe monitor então a classe imonitor ela representa basicamente uma Inter interface física entre a placa mãe e o monitor e a placa mãe utiliza tem uma dependência com essa Interface para solicitar que informações sejam
apresentadas no vídeo mas a interface ela não realiza eh realmente essas essas operações n na verdade elas são realizadas elas são desenvolvidas elas são implementadas pela classe monitor por isso a classe monitor tem uma associação de realização com a classe imonitor A classe imonitor ela oferece a interface com a placa mo Mas quem eh realmente eh realiza os serviços oferecidos é a classe monitor Aqui nós temos um outro exemplo de realização onde eu tenho uma classe pedido que ela possui uma interface uma classe de interface chamada pagamento que oferece a operação que tá pedido Mas
ela é só uma classe interface ela não eh implementa realmente o método esse método ele é realizado por outras classes no caso ele é realizado pelas classes pagamento boleto pagamento cartão de crédito e pagamento cartão de débito eles essas classes sim realmente implementam o método que tá pedido oferecido pela classe de interface pagamento e a classe pedido ela pode escolher no tipo o tipo de pagamento que ela considerar mais adequado Ahã falar um pouquinho sobre portas basicamente uma porta é uma é um ponto de comunicação uma espécie de interface entre o o ambiente externo e
as partes internas de uma classe às vezes é necessário que uma classe tenha partes internas Ah então ela especifica uma forma de interação entre a classe e seu ambiente e entre a classe e as suas partes internas Então ela pode ah especificar o serviço que uma classe fornece para o seu ambiente e os serviços que a classe solicita desse ambiente então uma porta era representado por um quadrado pode ter um nome aqui no caso a placa mãe tem duas portas a porta um e a porta dois mas em geral o nome é suprimido não é
muitas vezes obrigatório agora eu vou falar um pouquinho sobre interfaces eh que basicamente elas descrevem os serviços que são oferecidos por uma classe ou os serviços que são solicitados por uma classe então basicamente Eh esses eh serviços eles são H representados por meio de interfaces fornecidas interfaces requeridas ã Então as interfaces fornecidas elas descrevem serviços que a classe ou componente H suporta então o conjunto de interfaces que são implementadas por uma classe elas representam o conjunto de interfaces fornecidas ou seja o conjunto de serviços que a classe oferece aos seus clientes serviços que podem ser
solicitados a ela ah então no momento que uma interface que uma classe implementa uma interface essa classe ela passa a suportar as características contidas H por essa interface e também deve obedecer as suas restrições então uma interface fornecida ela é representada por um círculo ã vazio não preenchido e é ligada a classe eh que a suporta por meio de uma porta então aqui eu tenho exemplo de interface fornecida chamado e teclado já as interfaces requeridas elas fornecem h o conjunto de serviços que são solicitados por uma classe ou componente ã também elas precisam ter uma
porta de comunicação para eh ligar a interface a classe Ah e a interface requerida ela costuma corresponder a uma associação de dependência do tipo usage ah ou seja identifica que a a classe ela tem uma dependência com outra classe e utiliza de alguma maneira os objetos dessa outra classe então aqui Ah eu tenho uma um exemplo de interface requerida ela é representada por um círculo H meio aberto e é ligada à classe que a suporta a classe que a solicita no caso por meio de uma porta então aqui eu tenho uma interface requerida chamada imonitor
e Aqui nós temos um exemplo de interfaces requeridas E interfaces fornecidas então a placa mãe ela tem uma interface chamada it teclado que ela é uma interface fornecida pela placa mãe mas é uma interface aqui querida para a classe teclado da mesma forma a placa mãe ela tem uma interface chamada em monitor que é uma Interface requerida para a placa mãe mas é uma Interface fornecida para a classe monitor em geral uma interface fornecida em uma classe vai ter o seu correspondente e uma interface requerida em outra classe e vice-versa e nós terminamos essa segunda
parte sobre o diagrama de classes eu espero que vocês tenham gostado da aula Espero que o conteúdo tenha sido útil se vocês gostaram desse conteúdo eu Solicito que vocês ã curtam e compartilh esse conteúdo e se vocês ainda não são membros do canal eu peço que você se inscreva obrigado pela atenção nós nos vemos em outras aulas