Diagrama de Classes e Diagrama de Objetos Abstração e Classificação • Uma abstração denota as características essenciais de um objeto que o distingue de todos os outros tipos de objetos e, portanto, fornece limites conceituais definidos claramente, relativos à perspectiva do observador. • Enfoca a visão externa do objeto e, assim, serve para separar um comportamento essencial do objeto de sua implementação (a interface de um objeto fornece seu comportamento essencial ou métodos públicos e nada mais). A orientação a objetos estimula os programadores e usuários a pensarem sobre aplicações em termos abstratos. Começam com um conjunto de objetos para os quais criam um comportamento comum e encaixam em superclasses abstratas. As bibliotecas de classe detêm um depósito de elementos comuns e reutilizáveis e a herança mantém automaticamente as relações entre classes organizadas hierarquicamente na biblioteca. Além disso, cada nível de abstração faz com que o trabalho fique mais fácil, pela maior disponibilidade de codificação reutilizável. Herança Na Herança Simples, os métodos e atributos definidos na superclasse são refletidos em todas as subclasses da hierarquia. Forma origem mover() exibir() Retângulo ponto : Ponto Círculo raio : float Polígono pontos : ListaDePontos exibir() Quadrado Herança Na Herança Múltipla, há mais de uma superclasse para uma mesma subclasse, das quais ela herda os métodos e atributos. Veículo Veículo Terrestre Veículo Aquático Veículo Anfíbio Tipos de Classes • Há três tipos de classes numa hierarquia: – Classe base é a raiz da hierarquia, a superclasse de todas as classes. Os métodos e atributos definidos nesta classe são refletidos em todas as classes da hierarquia. Define o comportamento do objeto. – Classes abstratas são superclasses que contém a definição de comportamento de todo um ramo da hierarquia, porém sem implementá-lo (somente a declaração dos métodos). Nunca são instanciadas. – Classes concretas são localizadas geralmente nas extremidades da hierarquia. Em um programa OO, os objetos são instanciados a partir dessas classes. Telefone A classe Telefone não pode ser instanciada. Telefone Convencional e Telefone Celular são concretas, implementam os métodos e podem ser instanciadas. Telefone Convencional Telefone Celular Classes • Em UML as classes são representadas por um retângulo dividido em três compartimentos: – o compartimento de nome, que conterá apenas o nome da classe modelada – o de atributos, que possuirá a relação de atributos que a classe possui em sua estrutura interna – o compartimento de operações, que serão os métodos de manipulação de dados e de comunicação de uma classe com outras do sistema. Cliente Nome : String Idade : Num Criar () Destruir () Variações de Representação Indivíduo Indivíduo código: int sexo: char nome: String Indivíduo inluir() atualizar() Indivíduo código: int sexo: char nome: String inluir() atualizar() Atributos • Um atributo representa alguma propriedade do que está sendo modelado, que é compartilhada por todos os objetos da classe. • Os atributos descrevem os dados contidos nas instâncias de uma classe. • Em um momento dado, um objeto de uma classe conterá valores para todos os atributos descritos na sua classe. Cliente nome endereço telefone Atributos de uma classe podem ser identificados apenas com seus nomes ou podem ter seus tipos (ou classes) especificados e ter valores padrão definidos Parede altura : real largura : real espessura : real viga : boolean = false Operações • Uma operação é uma abstração de alguma coisa que se pode fazer com um objeto e que é compartilhada por todos os objetos da classe. • Um classe pode ter qualquer número de operações, inclusive nenhuma. Como para os atributos, pode-se especificar uma operação apenas com seu nome ou pode-se também especificar a assinatura da operação: seus parâmetros, o tipo desses parâmetros e o tipo de retorno Retângulo mover() aumentar() diminuir() Visibilidade • Pode-se usar marcações de acesso para especificar o tipo de acesso permitido aos atributos e operações. Classificador: classes, interfaces, componentes, nós, use cases, subsistemas. + público: todos os classificadores podem usar. - privado: somente o próprio classificador poderá usar. # protegido: qualquer descendente do classificador poderá usar. Relacionamentos • Poucas classes vivem sozinhas. A maioria das classes colabora com outras classes de várias maneiras. • Os relacionamentos ligam as classes/objetos entre si, criando relações lógicas entre essas entidades. • Os relacionamentos podem ser dos seguintes tipos: - Associação - Agregação - Composição - Generalização - Dependência - Refinamento Interfaces • Uma interface é um conjunto de operações usado para especificar um serviço de uma classe ou componente. • Diferentemente das classes, as interfaces não especificam nenhuma estrutura e não podem conter atributos (especificam o contrato para uma classe ou componente, sem definir como ele será implementado). • O uso de interfaces é uma maneira elegante e poderosa de isolar a especificação da implementação, um relacionamento entre uma especificação e sua implementação. Interfaces (notação) <<interface>> Empregado verificarFicha() calcularSalário() | Empregado Realização (notação) <<interface>> Empregado Empregado_Impl verificarFicha() calcularSalário() Empregado_Impl Empregado Diagrama de classes Conteúdo: Classes Interfaces Colaborações Relacionamentos de dependência, generalização e associação • Os diagramas de classes são os principais diagramas estruturais da UML. • Diagramas de classe mostram classes, interfaces e os relacionamentos entre esses elementos. • As classes especificam a estrutura e o comportamento dos objetos. • Objetos são instâncias de classes. Diagrama de classes Cliente Pedido -nome: String -endereco: String -dataPrimeiraCompra: Date -dataUltimaCompra: Date -totalComprado: Currency -codigo: Integer -dataRecebido -total: Currency +confirmar() +cancelar() -calcularTotal():Currency gerarNovoCodigo: String itens #creditoPermitido: Currency #nivelCredibilidade() * Item de Pedido -quantidade: Integer -preco: Currency -emEstoque: Boolean Cliente pessoa-jurídica nomeContato: String telefones[1..10]: String CNPJ: String FAX[1..3]: String Cliente pessoa-física nome: String CPF: String numCartaoCredito colocarListaNegra() * Produto representante de vendas * Empregado IPessoa Objetos • Um objeto é um elemento que podemos manipular, acompanhar seu comportamento, criar, destruir etc. Um objeto existe no mundo real, podendo ser uma parte de qualquer tipo de sistema, por exemplo, uma máquina, uma organização ou negócio. Existem objetos que não encontramos no mundo real, mas que podem ser vistos de derivações de estudos da estrutura e comportamento de outros objetos do mundo real. • Em UML um objeto é mostrado como uma classe, só que seu nome é sublinhado e pode ser mostrado opcionalmente com o nome da classe. • Os diagramas de objetos mostram uma “fotografia” de um sistema OO em execução. São mostrados os objetos, com os valores de seus atributos e as ligações entre eles. São úteis para a modelagem de estruturas de dados complexas, depuração etc. Objetos Representação de um objeto Marcia Moita:Cliente Nome do Objeto Nome : “Marcia Moita” Idade : 20 Atributos Criar () Destruir () Operações Objetos simples : Curso codCurso: "IF291" descrição: "MPS" codTurma: I7 George Bush Jaelson: Professor : Aluno Monica: Aluno Fulano : Multiobjetos • Multiobjetos são conjuntos de objetos, com um número indeterminado de elementos. • São usados, por exemplo, em diagramas de colaboração para modelar uma mensagem enviada para vários objetos ao mesmo tempo. p2: Profe s s or 1: cadeira := encontrar(número) c3: Curs o c1: Curs o Agente de Reservas : Cadeira c2: Curs o : Aluno : Aluno 2: reservar(nomeCliente) : Cadeira Multiobjetos Diagrama de objetos • É comum haver centenas ou milhares de objetos em um sistema em execução, a maioria deles anônimos, por isso o diagrama de objetos mostra apenas uma parte dos objetos no sistema. • Diagramas de objetos são estáticos e não mostram a evolução do sistema com o tempo. • Para mostrar o comportamento de um objeto, deve-se usar diagramas de comunicação, diagramas de seqüência ou diagramas de estados. • É comum colocar um diagrama de classes junto com um diagrama de objetos, para facilitar a identificação dos objetos. Diagrama de objetos Curso Professor ministra -matrícula: String -nome: String [1..3] [1..5] -codDisciplina: String -descrição: String -codTurma: String Aluno * -matrícula: String -nome: String -período: Integer [0..10] p1: Prof essor p2: Prof essor matricula: "205-6712-09" nome: "Jaelson Castro" c1: Curso : Curso c2: Curso : Curso codCurso: "IF291" descrição: "MPS" codTurma: I7 codCurso: "IF185" descrição: "AER" codTurma: I6 c3: Curso : Aluno : Aluno : Aluno : Aluno : Aluno :aluno Bill matricula: "219846534" nome: "Nelson Mandella" :aluno matricula: "562746134" nome: "John Major" : Aluno Lew insky