Olá sejam bem-vindos ao canal engenharia de software com ênfase uml Eu sou professor julan gedes 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 iniciar o tema referente ao diagrama de classes esse tema é bastante extenso o diagrama de de classe possui muitos recursos então eu vou dividir ele em diversas aulas na verdade eu já comecei a tratar sobre o diagrama de
classes na aula denominada introdução ao diagrama de classes mas essa aula era essencialmente uma revisão sobre orientação objetos a partir de agora eu vou tratar sobre o diagrama de classes propriamente dito Então vamos dar início à nossa aula eu gosto sempre de fazer uma pequena propaganda eu já ministrei aliás eu já publiquei quatro livros sobre o assunto o meu primeiro livro foi o m uma abordagem prática que tratava sobre a ml P5 mas já abordava o ml2 no final do do do livro depois eu lancei o meu livro O MR2 guia de consulta rápida Poucos
Anos depois eu lancei o MR2 guia prático e finalmente eu lancei o meu livro mais completo que é o m2 uma abordagem prática que se encontra atualmente na terceira Edição mas vamos ao conteúdo Aqui nós temos um exemplo de classe uml uma classe uml Como já foi visto no vídeo anterior ela possui na verdade ela possui cinco divisões mas é mais comums nós ã vermos ã classes com três divisões as duas últimas são bastante raras Mas elas vão ser ensinadas em vídeos mais avançados nesse canal bom mas então a primeira divisão contém o nome da
classe no caso é a classe conta comum a terceira divisão contém os atributos da classe ou seja as características dos objetos dessa classe e a terceira divisão contém os as operações como são chamados os métodos na oml Ah então como eu falei em geral é mais comum enxergar classes com essas três divisões as outras duas são bastante raras bom então ah o nome da classe é a única é a única informação realmente obrigatória uma vez que podem haver classes abstratas a partir das quais eh outras classes podem ser especializadas Mas normalmente ah classes umr possuem
atributos e ou métodos bom vamos tratar então da primeira divisão ah na verdade a primeira informação que existe tanto para atributos ou métodos é a visibilidade que é essa informação que fica bem à esquerda antes antes do nome do atributo ah os atributos eles podem ter visibilidade privada protegida pública ou de pacote eh essencialmente a visibilidade determina que tipo de objeto pode ver o conteúdo de um atributo ou solicitar a execução de um método em geral a atributos eles são privados ou protegidos enquanto que os métodos ou operações costumam ser públicas mas basicamente h quando
um atributo ele é privado isso significa que o atributo só pode ser visto por objetos da classe se ele for protegido como é esse caso o atributo só poderá ser visto por objetos da classe ou objetos de classes derivadas a partir dela e se ele for público qualquer objeto de qualquer classe consegue H enxergar o método ou atributo em geral atributos não são públicos porque isso sacrifica a a capsular hum o encapsulamento da classe eh e também tem a visibilidade pacote que permite que somente objetos do pacote tenham acesso ao atributo ao método bom então
esses os atributos da classe conta comum eles são todos protegidos vocês vão entender por disso ao longo desses vídeos ah a a segunda informação é o nome do atributo propriamente dito no caso o primeiro é número da conta o segundo abertura da conta o terceiro fechamento da conta o quarto a situação da conta o quinto assen da conta e o sexto o saldo da conta depois vem o símbolo de dois pontos e o tipo do atributo no caso o número da conta é do tipo long abertura e fechamento da conta são do tipo date situação
da conta é do tipo inteiro senha da conta também é do tipo inteiro salo da conta é do tipo Double então quando o atributo eh quando o tipo do atributo está escrito em minúsculo ele é um tipo primitivo ele vem definido com a linguagem quando ele inicia com maiúsculo significa que na verdade o atributo ã se refere a um tipo de uma classe o valor que ele armazena na verdade está definido em uma classe contida no próprio modelo ou então em um pacote a partir do qual ele foi exportado bom a terceira divisão contém o
as operações ou métodos Como já foi falado então a o primeiro símbolo e demonstra a visibilidade da operação Normalmente eles são públicos que é representado pelo símbolo de mais eh depois vem o nome da operação propriamente dito em seguida vem o retorno daquela operação o tipo de valor que é retornado Após a execução daquela operação então Aqui nós temos diversos operações Abrir conta consultar conta validar 100 emitir saldo emitir estrato sacar valor depositar valor e encerrar conta bom eh eu vou falar um pouquinho sobre assinaturas das operações na verdade eh as assinaturas das operações elas
não são obrigatórias Mas elas são bastante úteis úteis elas basicamente elas representam a lista de argumentos a lista de parâmetros que uma operação ou seja o método eh recebe para poder executar e o valor de retorno que ela apresenta quando ela é concluída ã Isso é opcional certo eh não é obrigatório Mas como eu disse eu costumo representar eu acho útil útil eh Em algumas situações eh o método pode receber muitos parâmetros isso pode deixar a classe se larga em diagramas que T muitas classes isso pode prejudicar a visibilidade do Diagrama como um todo se
bem que métodos com muitos parâmetros muitas vezes caracterizam um tipo de ma cheiro Mas de qualquer forma Esse é um dos argumentos para que a lista de argumento a lista assinatura das operações seja suprimida eu pessoalmente prefiro sempre declarar a assinatura das operações sempre que possível mas ela não é obrigatória então Aqui nós temos um exemplo de métodos com assinatura das operações então eu consigo ver aqui que o método Abrir conta recebe com parâmetro inteiro e retorna um long que é o número da conta criada o método consultar conta recebe um l que é o
número da conta ser consultada retorno inteiro e identificando se o método foi executado com sucesso ou não poderia ser um tipo boolean ao invés do inteiro o método vai dar senha recebe o inteiro que é a senha propriamente dita e retorno o inteiro dizendo se informando se a senha é válida ou não ã o o método emitir saldo não recebe parâmetros mas retorna um double que é o saldo propriamente dito o método emitir emitir extrato recebe dois valores do tipo date retorna um string o método sacar valor recebe um double e retorna O inteiro o
método depositar valor recebe um long e um double o long é o número da conta e o Double é o valor a depositar e retorno inteiro informando se foi possível ou não eh concluir o depósito e o método encerrar conta recebe um long o número da conta encerrar e retorna O inteiro demonstrando se a conta foi encerrada com sucesso bom ah os atributos também podem receber alguns detalhamentos algumas informações extras essas informações podem ser do tipo valores iniciais multiplicidade E se o atributo é derivado um atributo derivado é um atributo que eh recebe a o
resultado de algum cálculo ou H ele recebe algum tipo de atribuição ao longo da execução de um método Então vamos ver alguns exemplos disso então vocês podem notar aqui que a classe conta comum passou a aos atributos dessa classe passaram a representar a algumas informações extras então por exemplo o saldo da conta ele tem o valor inicial zero quando a conta é criada o valor inicial da conta vai ser do saldo da conta vai ser zero a mesma coisa vale com o atributo de situação da conta ele tem o valor inicial um Isso significa que
quando a conta for criada a situação da conta vai ser igual a um ou seja ela está ativa ã o saldo da conta ele também tem uma barra na frente uma barra transversal Isso significa que eh esse atributo ele é ele recebe o resultado de cálculos ao longo do do processamento dessa classe ao longo dos métodos dessa que são executados pelos objetos dessa classe então o sal da conta ele precisa ser recalculado sempre que for feito um depósito ou um saque também os atributos abertura da conta e fechamento da conta possuem uma barra na frente
do seu nome Isso significa que que eles também vão vão receber um algum valor vai ser atribuído a eles Ou eles vão ser calculados no caso h a data de abertura da conta e a data de fechamento da conta serão tomadas do sistema ainda o atributo fechamento da conta possui este valor aqui entre colchetes 0.1 Isto é a multiplicidade do atributo Isso significa que esse atributo pode ter nenhum ou um valor Por que nenhum porque quando a conta é criada ela não foi fechada ainda ela não foi encerrada então por isso que tem esse valor
zero que ela pode ter ela pode não ter nenhum valor Ou no máximo um que vai conter Vai representar a data do encerramento da conta então isso aqui são alguns exemplos de detalhamento dos atributos vamos falar sobre associações existem diversos tipos de associações no dia diagrama de classe nós vamos ver algumas delas então ah associações basicamente representam relacionamentos que ocorre entre os objetos das classes então uma associação ela estabelece que existe um vínculo entre objetos de uma ou mais classes e esses vínculos permitem que informações sejam compartilhadas Que métodos sejam disparados Entre esses objetos e
que eles colaborem ah durante a execução dos processos do sistema Então vamos iniciar a falar sobre os tipos de associações existe a associação unária também chamada de associação reflexiva ela ocorre quando um objeto de uma classe está associado a um ou mais objetos da mesma classe então Aqui nós temos um exemplo de uma associação unária Aqui nós temos a classe funcionária funcionário que tem o atributo nome do tipo string e vocês vão notar que existe uma linha que parte da classe funcionário e atinge a própria classe funcionário essa linha representa a associação ela determina que
um objeto da classe funcionário está ligado a nenhum ou muitos objetos da classe funcionário da própria classe bom Ah aqui você vocês percebem que existe esse número 0 p ponto asterisco Isto é a multiplicidade da associação que não é a mesma coisa que é multiplicidade do atributo a multiplicidade da associação ela determina a quantidade de objetos que estão envolvidos em uma extremidade da associação então aqui eu sei que podem haver nenhum ou muitos objetos envolvidos nessa extremidade da associação quando não existe a multiplicidade como quando ocorre nessa extremidade da associação se sabe que ela é
no mínimo um no máximo um que somente um objeto está envolvido nessa extremidade da associação dessa da associação e esse texto aqui chefia é o rótulo da associação ele serve para facilitar a compreensão da função daquela Associação Então esta Associação nária poderia se ler da seguinte maneira um funcionário chefia nenhum ou muitos funcionários e um funcionário é chefiado por um e somente um funcionário ISO signica que um funcionário pode chefar nenhum ou muitos funcionários mas um funcionário só pode ter um chefe imediato certo então isso aqui é um exemplo de associação unária bom falar um
pouquinho mais sobre multiplicidade como eu falei a multiplicidade determina a quantidade de objetos envolvidos em uma extremidade de uma associação E como eu já tinha dito quando a multiplicidade não está explícita ela é no mínimo um no máximo um então isso significa que somente um objeto de um lado da sucessão se relaciona com os objetos da outra serenidade Ah aqui essa tabela ela representa alguns tipos de multiplicidade ela não é exaustiva podem ter vários outros tipos de multiplicidade então Aqui nós temos a multiplicidade alguns exemplos O primeiro exemplo 0.1 significa que no mínimo Zero no
máximo um objeto está envolvido na extremidade da associação um somente um objeto está envolvido naquela extremidade da associação zero p ponto ponto asterisco ou seja no mínimo Zero no máximo muitos objetos estão envolvidos naquela extremidade da associação asterisco representa muitos objetos Então muitos objetos estão envolvidos naquela extremidade da associação no mínimo um no máximo muitos significa que no mínimo um no máximo muitos objetos podem estar envolvidos na extremidade da sução e no mínimo três no máximo cinco no mínimo três do máximo cinco objetos estão envolvidos naquela extremidade da associação Mas pode haver outros exemplos além
desses vou falar um pouquinho sobre papéis papéis é uma informação Extra que pode ser representada numa Associação Em algumas situações ela pode ser bastante útil basicamente papéis representam a função que um objeto desempenha em uma das extremidades da associação então Aqui nós temos um exemplo nós pegamos o mesmo exemplo da associação Lun Ária anterior e acrescentamos papéis aos objetos envolvidos na associação então eu consigo perceber que tem o texto chefe nessa extremidade da associação e o texto subordinado nessa outra é nessa outra extremidade então ISO significa que o objeto que estiver localizado nessa extremidade da
associação irá desempenhar o papel de chefe enquanto que o o objeto que estiver na outra extremidade desempenhará o papel de subordinado então papéis servem para deixar mais claro qual é a função de um objeto em uma determinada Associação não são obrigatórios Mas podem ser úteis em determinadas situações e nós temos também a associação binária Essa é a Associação mais comum do diagrama de classes basicamente ela ocorre quando um ã um objeto de uma classe está associado a um ou mais objetos de outra classe então uma linha irá ligar as duas classes que estão associadas então
aqui eu tenho uma classe chamada sócio e eu tenho uma classe chamada dependente então aqui eu estou dizendo que um sócio ele possui nenhum ou muitos dependentes e que um dependente é possuído por um e somente um sócio eu sei que é somente um sócio porque a multiplicidade não está explícita eu poderia colocar explícito também mas não é necessário e eu sei então que um sócio tem no mínimo nenhum e no máximo muitos dependentes Porque isto é representado pela multiplicidade da associação vou falar um pouquinho sobre navegabilidade que é uma uma informação Extra que pode
ser útil Em algumas situações nas associações elas basicamente elas determinam quando um objeto em uma das extremidades tem conhecimento e pode ou não acessar os objetos da outra da outra extremidade e também determina o sentido em que os métodos podem ser disparados então H basicamente é por meio da navegabilidade eu sei se um objeto pode ou não solicitar a execução de métodos Ah para objetos da outra da outra extremidade da associação então se a navegabilidade ela for unilateral então um objeto de uma das extremidades da da associação terá conhecimento poderá acessar e poderá solicitar a
execução de métodos para os objetos da outra extremidade mas a recíproca não será verdadeira os objetos da outra extremidade não saberão da existência dos objetos da extremidade anterior e nem poderão solicitar a execução dos métodos por parte desses objetos se a navegabilidade ela for bidirecional Então os objetos têm conhecimento mútuo entre si e podem solicitar o disparo de métodos entre si ã a navegabilidade ela é bidirecional se não houver seta apontando para uma direção da associação aqui no caso eu tenho exemplo de navegabilidade unilateral aqui eu estou dizendo que um sócio ele possui nenhum ou
muitos dependentes e vocês vão notar que existe uma seta apontando do sócio para o dependente Isso significa que o sócio ele tem conhecimento de seus dependentes mas o dependente não tem conhecimento de seus sócios de seu sócio no caso então um sócio ele pode solicitar Que objetos da classe dependente executem ados métodos mas o dependente não pode solicitar o mesmo para o sócio e nós temos também uma outra informação que é o fim da associação possuído eh Isso significa que eh é necessário existir um um atributo que sirva de referência aos objetos da outra extremidade
da associação então Aqui nós temos um fim de associação possuído que é esse círculo preenchido encostado à classe sócio então isso determina que sócio precisa de um atributo que referencie os dependentes que ele possui então eu criei eu criei um atributo que eu chamei de dependente sócio que é do tipo dependente e aqui eu coloquei a multiplicidade desse atributo no mínimo Zero no máximo muitos identificando que um sócio pode ter nenhum ou muitos dependentes então basicamente isto aqui é um vetor de ã que serve para identificar cada um um dos objetos que dependem de um
sócio eh específico e nós temos a associação ternária que é uma associação que eu pessoalmente não gosto mas que ela serve para identificar situações em que existem objetos de três ou mais classes envolvidos relacionados entre si Aqui nós temos um exemplo de associação ternária onde de eu tenho uma situação comum nas universidades em que um professor pode lecionar para muitas turmas e lecionando Para uma determinada turma pode utilizar diversas salas de aula então a associação ternária é representada por um losangulo eh que fica no centro da associação ternária e todas as classes envolvidas se ligam
a esse nos ângulo por meio de linhas então aqui eu posso ler que um professor leciona para no mínimo uma no máximo muitas turmas uma turma pode ter no mínimo no máximo muitos professores lecionando para ela e um professor lecionando para uma turma pode utilizar no mínimo uma no máximo muitas salas de aula eu pessoalmente não gosto da associação ternária porque é uma associação difícil de ler mas em algumas situações é necessário utilizá-la então por isso eu estou ensinando então nós terminamos essa primeira parte do diagrama de classes eu espero que essa aula tenha sido
útil eu agradeço a atenção de vocês e se vocês gostaram da aula eu gostaria de solicitar que vocês deem like nesse vídeo compartilhem com pessoas interessadas no assunto e se não forem inscritos ainda eu gostaria de solicitar de pedir que você se inscreva obrigado pela atenção nós nos vemos nos próximos vídeos