Olá sejam bem-vindos ao canal engenharia de software com ênfase uml Eu sou professor Denis 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 esta vai ser a terceira aula sobre o diagrama de classes dessa vez eu vou enfocar o assunto sobre restrições restrições é uma característica muito poderosa da uml e bastante utilizada no diagrama de classes e basicamente ela permite estabelecer consistências validações regras de negócio que
precisam ser seguidas no momento da implementação das classes das associações dos métodos Então vamos iniciar a nossa aula então eu gosto sempre de fazer uma na propaganda eu já publiquei quatro livros sobre o ML o meu primeiro livro foi o ML uma abordagem prática que na época tratava da ml 1.5 mas já abordava o MR2 no final do livro depois lancei o MR2 guia de consulta rápida Poucos Anos depois eu lancei o MR2 guia prático e finalmente eu lancei meu último meu último livro mais completo Na minha opinião que é o MR2 uma abordagem prática
que se encontra na terceira Edição Mas vamos ao conteúdo então como eu falei lei nós vamos falar sobre restrições nessa aula basicamente restrições elas fornecem um conjunto de informações extras que estabelecem consistências condições regras de negócio que precisam ser validadas no momento em que o modelo de classes for implementado então eu posso aplicar eh restrições nas associações entre as classes nos atributos de uma determinada classe nos métodos de uma classe nós vamos ver vários exemplos disso nessa aula então Aqui nós temos o exemplo simples de de restrição Esse é uma restrição um pouco informal daqui
a pouco nós vamos ver restrições mais formais utilizando a linguagem OC Mas essa é um tipo de restrição um pouco mais livre então aqui é uma restrição que foi aplicada a uma associação Aqui nós temos uma associação binária entre a classe sócio e a classe empréstimo onde eu digo que um sócio realiza nenhum ou muitos empréstimos e o empréstimo é realizado por um e somente um sócio Lembrando que esta informação se chama se chama multiplicidade e ela determina a quantidade de objetos que está envolvido em cada extremidade da associação quando ela não está especificada Ela
é no mínimo um no máximo um a essa Associação eu criei eu associei uma restrição informal no caso ela está contida numa nota explicativa e o texto dela vem entre entre colchetes a abertos e fechados ela é ligada à associação por Marinha tracejada que é chamada de âncora Então essa Associação binária é parte de um modelo de classes de um sistema de biblioteca onde um sócio pode eh pegar emprestado fazer vários empréstimos de livros então aqui eu estou estabelecendo uma regra de negócio um sócio só poderá realizar um novo empréstimo se o seu limite máximo
de exemplares para locação não for excedido então ISO aqui é um exemplo simples de restrição Aqui nós temos alguns exemplos de restrições em atributos aqui nós estamos pegando a classe conta comum que já tinha sido utilizada como exemplo nos vídeos anteriores e eu estou aplicando algumas algumas restrições e seus atributos Então estou dizendo por exemplo que a os atributos abertura conta e fechamento conta a as datas de abertura e fechamento devem ser tomad do sistema quando ocorrer o a abertura de uma conta ou uma conta for encerrada também eu estabeleci que ah a senha de
uma conta deve possuir seis dígitos eu estou ligando essa restrição ao atributo sem a conta e aá outra restrição associada ao atributo saldo do conta que ela estabelece que o saldo deve ser recalculado sempre que ocorrer um depósito ou saque então mais alguns exemplos de restrições simples dessa vez aplicadas a atributos agora eu vou falar um pouco sobre a linguagem ocl ocl é abreviatura de Object constraint language ou linguagem de restrição de objetos essa é uma linguagem que foi desenvolvida com o propósito de formalizar restrições ah então essa linguagem ela procura evitar que ocorram ambiguidades
quando forem criadas as restrições vamos ver alguns exemplos de aplicação dessa linguagem aqui então eu tenho uma restrição aplicada ao atributo idade pessoa essa restrição ela tem um estereótipo invariante Isso significa que essa restrição é válida para todos os objetos da classe pessoa física em qualquer situação ela não muda e aqui eu consigo ler o objeto da classe pessoa física em questão que é representado por esse self eh aliás melhor ler o atributo idade pessoa do objeto da classe pessoa física em questão precisa ser maior ou igual a 18 esse self eh representa o objeto
que se está trabalhando no momento então aqui um exemplo de restrição de atributo utilizando a linguagem ocl Vamos ver outros exemplos aqui eu tenho algumas restrições aplicadas a métodos então aqui são restrições do tipo pré e pós condição então elas não são invariantes elas têm que ser atendidas antes ou depois que o método for eh executado então Ah aqui foi aplicado uma precondição para o método sacar valor eu estabeleci que o atributo saldo da conta tem que ser maior ou igual ao valor sacado para o objeto ã que representa a conta e questão então eu
vou consultar uma conta e o saldo dessa conta não pode ser maior ã ou igual ao valor que se deseja sacar essa é uma pré-condição para executar o método sacar valor e Aqui nós temos uma pós condição Após a execução do método sacar valor o o atributo saldo da conta do objeto da conta comum que se está trabalhando tem que ser igual ao valor do saldo da conta do objeto menos o valor que foi sacado Aqui nós temos uma pós condição semelhante para o método depositar valor onde eu digo que o atributo saldo da conta
do objeto conta comum em questão tem que ser igual ao saldo da conta desse objeto mais o valor a ser depositado e aqui eu tenho uma outra pós condição que foi atribuída ao método encerrar conta onde eu digo que a situação da conta do objeto da conta comum do objeto da da classe conta comum que está sendo encerrado tem que ser igual a zero se encerrou a conta a o atributo situação da conta do objeto encerrado tem que ser igual a zero significando que aquela conta está encerrada a conta não pode ser excluída somente marcada
como encerrada e Aqui nós temos uma restrição e Associação aqui eu tenho uma classe pessoa e ela tem uma associação unária consigo mesma uma associação unária ocorre quando objeto de uma classe está associado com um ou mais objetos da mesma classe então aqui eu tenho uma associação que eu chamei de cônjuge eu dei o rótulo de cônjuge para ela e ela está envolvido está envolvendo dois dois objetos somente um objeto numa extremidade se relacionando com somente um objeto na outra extremidade Então eu estou dizendo que uma pessoa é cônjuge de outra pessoa e aqui eu
estabeleci dois papéis de objeto e eu disse que o objeto que está nessa extremidade desempenha o papel de marido e o objeto que está na outra extremidade desempenha o papel de esposa aqui foi aplicado uma restrição invariante ou seja ela vale para todas associações ã do tipo cônjuge entre objetos da classe pessoa onde eu estabeleço o que o objeto que desempenha o papel de marido tem que ser diferente do objeto que desempenha o papel de esposa Ok então isso aqui é um exemplo de restrição aplicada a associações utilizando a linguagem AC eu também posso estabelecer
que um atributo é somente leitura então para isso eu coloco uma uma restrição do tipo read only ao lado do atributo então eu posso ver que os atributos número da conta e abertura da conta da classe conta comum são somente leitura porque eles têm uma restrição read only ao seu lado um atributo também pode receber a o a restrição estática isso vale para m métodos também ã uma um atributo estático é um atributo que pertence somente à classe Então significa que todos os objetos da classe ligação no caso representa uma classe ah relacionada às ligações
que um que um telefone celular recebe H todos os objetos da classe ligação terão o mesmo tom eh de música A ser tocado por isso esse atributo ele foi representado sublinhado Isso significa que esse atributo é estático é a restrição para estabelecer que ele é estático Ahã eu também posso ter uma restrição do tipo ou exclusivo uma restrição do tipo ou exclusivo ela estabelece que pode ser um objeto ou outro objeto mas não os dois ao mesmo tempo então aqui eu tenho uma classe pessoa física que está que está associada a uma classe contra comum
e eu tenho uma classe pessoa jurídica que está associada à mesma classe conta comum e eu digo que uma pessoa física possui no mínimo um no máximo muitas contas comum e uma pessoa jurídica possui no mínimo uma no máximo muitas contas comum também mas aqui eu apliquei uma restrição do tipo ou exclusivo uma restrição do tipo xor isso significa que se o se o objeto vamos supor Z da classe pessoa física possuir a conta 1000 Isso significa que o objeto Zé da Silva Corporation não pode possuir a mesma conta porque o ou exclusivo estabelece a
exclusividade se um objeto está associado se um objeto da classe pessoa física está associado ao objeto da classe conta comum vamos supor número da conta Bill o objeto da classe pessoa outro outro objeto da classe pessoa jurídica não pode estar associado a esse mesmo objeto é isso que a restrição xor estabelece e nós temos a restrição de ordenação chamada ordered Isso significa que os atributos de uma classe de uma coleção de objetos eles precisam ser apresentados de forma ordenada então aqui eu tenho uma associação de agregação entre as classes usuário e comunidade então usuário pode
possuir Muitas comunidades de uma determinada rede social eu estou dizendo que o usuário participa de nenhuma ou Muitas comunidades e uma comunidade pode ter muitos usuários participando nela no mínimo um no máximo muitos ah porém isto aqui é uma associação de agregação Isso significa que as informações do objeto usuário precisam ser complementadas pelas pelas informações dos objetos da classe comunidade que estão Associados a ele então quando eu consultar o usuário eu quero que apareçam também todas das comunidades que ele possui ele participa e eu quero que essas comunidades venham ordenadas no caso aqui Elas serão
ordenadas pelo atributo de descrição que é o único atributo que a classe possui existe a restrição Unic ou Unic que estabelece que podem haver muitos objetos numa coleção mas esses objetos não podem se repetir Então o que eu estou dizendo que uma pessoa ela possui no mínimo uma no máximo muitas contas comum e uma conta comum é possuída por no mínimo uma no máximo muitas pessoas porém eh dentro dessa associação os objetos da classe conta comum não podem se não pode se repetir na Coleção de Objetos possuídas pelo objeto pessoa associadas ao objeto pessoa eh
eu também posso eh combinar as restrições unque com Order então aqui por exemplo eu estou dizendo que o número da conta ele é somente leitura e ordenado Então significa que quando eu for consultar uma pessoa eu quero que apareçam todas as contas que ela possui também além de suas informações isso é representado pela agregação por esta Associação de agregação e eu quero que essas contas venham ordenadas pelo número da conta E além disso estabeleci que uma pessoa não po pode possuir a mesma conta mais de uma vez Então aqui nessa Coleção de Objetos da classe
conta comum associadas a um objeto da classe pessoa a as contas não se repetirão bom Ah ainda com relação à ordenação de coleções de objetos se uma coleção não é ordenada Mas ela é única os seus objetos não se repetem Então ela é uma coleção do tipo set se ela for ordenada e única como era o caso anterior ela é uma coleção do tipo Order set conjunto ordenado basicamente Ah se não for ordenada nem única Então ela é uma b b quer dizer literalmente sacola tá então é uma coleção em que os objetos não estão
ordenados e podem se repetir E se ela for ordenada mas não for única Então ela será uma Sequence a Aqui nós temos o exemplo de ah coleção do tipo Sequence Ah eu estou estabelecendo então que eh uma conta uma pessoa pode possuir muitas contas comum e uma conta comum pode ser possuía por muitas pessoas Ah mas pode acontecer de eh no caso nome nome pessoa ser uma coleção de objetos Mas eles são pode acontecer dele se repetirem o nome da pessoa se repetir por exemplo pode ter duas pessoas com o nome José da Silva e
serem pessoas diferentes eu também posso aplicar restrições em especializações uma especialização é quando eu derivo uma nova Classe A partir de uma classe anterior dessa forma a classe A nova classe gerada ela herda todos os seus atributos e métodos então então eu posso aplicar restrições também nesse tipo de associação aqui eu tenho uma classe pessoa que foi especializada em pessoa física e pessoa jurídica eu eu coloquei a restrição de Joint e complete nessa generalização Isso significa que uma pessoa tem que ser ou física ou jurídica não pode ser as as duas e ela é complete
ela é completa porque não é possível derivar mais uma classe A partir de pessoa até onde eu saiba só existem pessoas físicas e pessoas jurídicas e aqui eu tenho uma outra restrição hum aplicada numa especialização numa Associação de especialização onde eu defini uma classe geral chamada veículo e foi especializado em aéreo e Aquático e eu estabeleci a restrição overlapping e incomplete overlapping quer dizer que eh pode ser traduzido como sobreposta isso significa por exemplo que um veículo pode ser tanto aéreo como Aquático como é no caso o como é na situação dos hidroaviões e incomplete
significa que eu posso derivar mais classes a partir da classe veículo então eu posso criar uma classe terrestre H posso criar uma classe ã subterrâneo uma classe de veículos subterrâneos uma classe de veículos espaciais e assim vai e Eles continuam sendo sobrepostos eu posso ter uma classe tanto aquática como terrestre por exemplo e eu tenho a restrição Union E subsets então aqui eu tenho um trecho de um diagrama de classes onde eu tenho uma classe funcionário que está que está associada à classe empresa aqui eu estou dizendo que uma empresa ela possui no mínimo um
no máximo muitos funcionários e que os objetos da classe funcionário nessa extremidade da Ass desempenha o papel empregado notem que tem uma barra do lado do papel do empregado ã agora vocês vão notar que funcionário que é classe funcionário foi especializado nas classes gerente e trabalhador A empresa ela possui muitos gerentes no mínimo um no máximo muitos e possui muitos trabalhadores no mínimo um no máximo muitos os gerentes os objetos da classe gerente desempenh o papel de de chefe nessa extremidade da sucessão e os objetos da classe trabalhador desempenha o papel de subordinados agora notem
que os objetos eh da classe gerente Eles são um subconjunto de empregado e os objetos da classe trabalhador também são subconjunto de empregado empregado é o papel desempenhado pelos objetos da classe funcionário a Associados a empresa notem que empregado possui essa Barrinha aqui do lado isso significa que esse papel ele precisa ser calculado notem que existe uma restrição Union H ao lado nessa extremidade da associação Isso significa que Como funcionário é especializado em gerente trabalhador e que gerente trabalhador são subconjuntos de empregado significa que para eu saber o total de Empregados para eu ter a
totalidade de Empregados que a empresa possui eu tenho que ã unir o subconjunto de chefes e o subconjunto de subordinados para ter o total de empregados da empresa Então esse exemplo de restrição Union e subsets e nós terminamos mais essa aula Ah eu espero que vocês tenham gostado desse vídeo Se vocês gostaram eu peço que vocês ã curtam compartilhem com quem possa ter interesse e se ainda não se inscreveram eu peço que se inscrevam no canal obrigado pela atenção nós nos vemos nos próximos vídeos [Música]