1 Representação para Programação Orientada a Objetos Profª. Juliana Pinheiro Campos E-mail: jupcampos@gmail.com ENG10082 Programação II Créditos: Prof. Gustavo Willam Pereira e Prof. Clayton Vieira Fraga Filho
Modelagem Modelos são usados para representar uma realidade do ponto de vista de um observador; Podem ser um texto narrativo, uma figura, um gráfico, desde que definidas as convenções e notações, para permitir comunicação efetiva. Para implantação de um bom software, a modelagem é uma parte central. Construímos modelos para: Comunicar a estrutura e o comportamento desejados do sistema; Visualizar e controlar a arquitetura do sistema; Compreender melhor o sistema que estamos elaborando; Gerenciar os riscos. 2
Representação de Classes A Unified Modeling Language (UML) é uma linguagem de modelagem não proprietária, cujos objetivos UML são: especificação, documentação, estruturação para subvisualização e maior visualização lógica do desenvolvimento completo de um sistema de informação. A UML é independente do processo utilizado para desenvolvimento de software. A UML é um modo de padronizar as formas de modelagem. Conta com 21 tipos de diagramas, e neste momento introduziremos o diagrama de classes. 3
Representação de Classes Um diagrama de classes serve para modelar o vocabulário de um sistema, do ponto de vista do usuário/problema ou do desenvolvedor/solução; Em UML uma classe é representada por um retângulo com o nome da classe Escreve-se o nome da classe no singular (como se fosse o nome de uma instância), com a 1ª letra em maiúscula, por exemplo: ControleRemoto Aluno Professor 4
Representação de Classes Atributos são listados em um compartimento de atributos (opcional) abaixo do compartimento com o nome da classe Uma classe não pode ter dois atributos com o mesmo nome classe Compartimento dos atributos Pessoa nome datanascimento peso Nome do atributo 5
Representação de Classes Os tipos dos atributos podem ou não ser especificados e não estão pré-definidos em UML, podendo-se usar os da linguagem em que se pretende realizar a implementação. Classe Visibilidade do atributo: + público - privado # protegido ~ pacote Compartimento dos atributos Nome do atributo Pessoa +nome: String +datanascimento: Date +peso: real = 75.0 Tipo do atributo Valor inicial 6
Representação de Classes Compartimento de operações Pessoa -nome: String -datanascimento: Date -peso: real = 75.0 Compartimento de operações +setdatanascimento(data: Date) +calculaidade() +Pessoa() +Pessoa(nome: String) 7
Representação de Classes Atributo estático: tem um único valor para todas as instâncias da classe Operação estática: não é invocada para um objeto específico da classe Notação: nome sublinhado Cria um novo boleto Boleto -numero: Long -data: Date -valor: real +ultimonumero: Long = 0 +vencimento: Date +multa: real +Boleto(valor: real, data: Date) +calculavalortotal(): real... Calcula o valor total do boleto Tipo de retorno OBS: Em UML você especifica uma classe abstrata e operações abstratas escrevendo seu nome em itálico. 8
Representação de Classes Toolbar #currentselection: Tool #toolcount: int Método encapsulado: utilizado internamente por outros métodos. +gettool(i: real): real +addtool(t: Tool) +removetool(i: real) -compact() <<Constructor>>+Toolbar() Estereótipo amplia o vocabulário da UML, permitindo a criação de novos tipos de blocos de construção, derivados de outros já existentes, mas específico a determinado problema. Podem ser textuais ou visuais 9
Relacionamentos entre Classes Consideremos por um momento as semelhanças e diferenças entre as seguintes classes de objetos: flores, margaridas, rosas vermelhas, rosas amarelas, as pétalas e as joaninhas. Nós podemos fazer as seguintes observações: o A margarida é uma espécie de flor; o Uma rosa é uma espécie (diferente) de flor; o As rosas vermelhas e rosas amarelas são os dois tipos de rosas; o A pétala é uma parte de ambos os tipos de flores; o Joaninha comem certas pragas, como pulgões, que podem infestar certos tipos de flores; 10
Relacionamentos entre Classes Ao fazer a modelagem de um sistema, será necessário não somente identificar as classes, mas também modelar como essas classes relacionam-se entre si. Na modelagem orientada a objetos, existem três tipos de relacionamentos: Dependências - representam relacionamentos de utilização entre as classes Generalizações relacionam classes generalizadas a suas especializações Associações representam relacionamentos estruturais entre objetos Cada um desses relacionamentos fornece uma forma diferente de combinações de abstrações.
Relacionamentos entre Classes Estabelecemos relações entre duas classes por duas razões: 1.Uma relação de classe pode indicar algum tipo de compartilhamento. 2.Uma relação de classe pode indicar algum tipo de conexão semântica (significado). 12
Relacionamentos entre Classes Existem três tipos básicos de relações de classe: 1.Generalização / especialização relacionamento "é um". Por exemplo, uma rosa é uma espécie de flor, o que significa que uma rosa é uma subclasse especializada da classe de caráter mais geral, a flor. 2.Todo / parte relacionamento "parte de". Assim, uma pétala não é um tipo de flor, é uma parte de uma flor. 3.Dependência semântica entre classes independentes, tais como entre joaninhas e flores. Como outro exemplo, rosas e velas são classes bastante independentes, mas ambos representam coisas que podemos usar para decorar uma mesa de jantar. 13
Relacionamentos entre Classes J oaninha Dependência Associação por composição Generalização Flor Pétala Rosa Margarida 14
Relacionamentos entre Classes Generalização -x: int -y:int J anela +abrir() +fechar() +exibir() +mover() Dependência Evento J anelaconsole CaixadeDialogo Controle Associação 15
Relacionamentos entre Classes: Associação A partir de uma associação conectando duas classes, você é capaz de navegar do objeto de uma classe até o objeto de outra classe e vice-versa. Papel Nome da associação Direção do nome Pessoa +funcionario Trabalha para +empregador Empresa 1..* Associação * Papel (role): quando uma classe participa numa associação ela desempenha um papel específico Multiplicidade: especificação do nº de elementos que um conjunto pode assumir. Ex.: 1..*, *, 0..1, 3..9, 3..*, etc. Navegação: mostra como a partir de uma instância de uma classe se pode acessar a uma ou mais instâncias de outra classe 16
Nome da Associação A indicação do nome é opcional O nome é indicado no meio da linha que une as classes participantes Pode-se indicar o sentido em que se lê o nome da associação Empresa empregador Trabalha-para Emprega empregado Pessoa
Relacionamentos entre Classes: Associação Multiplicidade Muitos-para-Muitos Muitos-para-1 1-para-1 Professo r * * * 1 1 1 Curso Aluno Curso Curso Plano de Curso
Notação para a multiplicidade 1 - exatamente um 0..1 - zero ou um (zero a 1) * - zero ou mais 0..* - zero ou mais 1..* - um ou mais 1, 3..5 - um ou três a 5
Relacionamentos entre Classes: Associação Associação reflexiva Pode-se associar uma classe com ela própria (com papéis diferentes) +pai 0..1 Pessoa * +filho 20
Relacionamentos entre Classes: Associação Associação unidirecionais As associações são classificadas quanto à navegabilidade em: Bi-direcionais (padrão) Classe 1 Classe 2 Unidirecionais Classe 1 Classe 2 Um objeto da classe 1 tem apontador(es) para o(s) objeto(s) correspondente(s) da classe 2 (nível de implementação) 21
Relacionamentos entre Classes: Associação Associação unidirecionais Associação Papel desempenhado Considerando um usuário, você desejará ser capaz de encontrar os objetos Senha correspondentes; mas considerando uma Senha, não desejará identificar o Usuário correspondente. 22
Relacionamentos entre Classes: Associação Associação unidirecionais Associação Papel desempenhado Especificar que uma associação é navegável é uma declaração de que, considerando um objeto em uma extremidade, você poderá chegar direta e facilmente a objetos na outra extremidade, geralmente porque o objeto de origem armazena algumas referências aos objetos de destino. 23
Relacionamentos entre Classes: Associação Associação ou associações? Uma propriedade que designa um objeto de uma classe presente no modelo, deve ser modelada como uma associação e não como um atributo. Exemplo: Pais -nome: String -capital: String -capital: Cidade Pertence a 1 * 0..1 1 +capital Cidade -nome: String 24
Relacionamentos entre Classes: Associação Classes associativas É uma classe que está ligada a uma associação, ao invés de estar ligada a outras classes. É normalmente necessária quando duas ou mais classes estão associadas, e é necessário manter informações sobre esta associação. Uma classe associativa pode estar ligada a associações de qualquer tipo de conectividade. 25
Relacionamentos entre Classes: Associação Classes associativas Representada pela notação utilizada para uma classe. A diferença é que esta classe é ligada a uma associação. Exemplo: Pessoa +nome +telefone +endereco Organização +razaosocial +endereco Emprego +salario +datacontratacao 26
Relacionamentos entre Classes: Agregação Representa um relacionamento do tipo tem-um, o que significa que um objeto do todo contém os objetos das partes. Equipe 0..1 * J ogador Uma equipe contém 0 ou mais jogadores Um jogador faz parte de uma equipe (num dado momento), mas também pode estar desempregado. Informa que uma classe faz parte de outra classe, mas não de forma exclusiva: não vincula o tempo de vida do todo e suas partes. 27
Relacionamentos entre Classes: Composição É uma forma de agregação onde há uma relação mais forte. As partes não podem existir sem o todo. Informa que uma classe faz parte de outra classe de forma exclusiva Exemplo 1: Empresa e departamentos Empresa 1 * Departamento Se a empresa for excluída, então deve-se excluir os departamentos. 28
Relacionamentos entre Classes: Composição Exemplo 2: Elementos de uma Janela de um software Window 1 1 1 +scrollbar 1 1 2 +title +body Slider Header Panel 29
Relacionamentos entre Classes: Composição Exemplo 3: Nota fiscal e seus itens Na composição os elementos que estão contidos dentro de outro objeto dependem dele para existir. Não faz sentido existirem itens de nota fiscal sem existir uma nota fiscal onde tais itens estariam contidos. Na agregação isso não acontece: se uma equipe é destruída, seus jogadores continuam existindo, pois podem participar de outras equipes.
Relacionamentos entre Classes Composição/Agregação x Associações Binárias As associações de Composição/Agregação podem em muitos casos ser substituída por uma associação binária simples, dependendo da visão de quem faz a modelagem. A função principal de uma associação do tipo Agregação/Composição é identificar a obrigatoriedade de uma complementação das informações de um objetotodo por seus objetos-parte, quando este for consultado. Em uma associação binária esta obrigatoriedade não está explícita. 31
Relacionamentos entre Classes Composição/Agregação x Associações Binárias 32
Relacionamentos entre Classes: Dependência Relacionamento de utilização, determinando que um item usa informações e serviços de outro item, e não necessariamente o inverso. Uma alteração no item independente pode afetar a semântica do item dependente. Dependência -nome Clipe +reproduzir(c: Canal) +iniciar() +parar() Canal 33
Relacionamentos entre Classes: Dependência Pode-se observar dois tipos diferentes de dependência: quando uma classe só utiliza a outra como parâmetro para suas operações (mais comum). quando o relacionamento é unilateral, ou seja, a classe dependente interage com a classe independente, que por sua vez, não tem conhecimento da classe dependente.
Relacionamentos entre Classes: Generalização A herança é representada no diagrama de classes da seguinte forma: ItemBiblioteca é mais geral que ItemPublicado Filme é mais específico que ItemGravado Generalização ItemBiblioteca -numerocatalogacao -dataaquisicao -precocusto -status -numcopias +adquirir() +catalogar() +arquivar() ItemPublicado -titulo -editora ItemGravado -titulo -meio Livro -autor -edicao -datapublicacao -ISBN -ano -volume Revista Filme -diretor -datalancamento -distribuidor 35
Relacionamentos entre Classes: Realização Uma realização é um relacionamento no qual um item concretiza o comportamento de outro item. class Realização «interface» EntradaDados + leentrada() : void + validaentrada() : void EntradaDeDadosTexto + leentrada() : void + validaentrada() : void 36
Dependências, Generalizações e Associações Dependências, generalizações e associações, com nomes, multiplicidade e papéis são os recursos utilizados com maior freqüência para a criação das abstrações Na maioria dos modelos que você criar, a forma básica desses três relacionamentos será suficiente para definir a semântica mais importante dos seus relacionamentos.
Técnicas básicas de modelagem Modelagem de dependência simples O tipo mais comum de relacionamento de dependência é a conexão entre uma classe que somente utiliza outra classe como parâmetro para determinada operação. Para fazer a modelagem usando este relacionamento: Crie uma dependência apontando, a partir da classe que executa a operação, a classe utilizada como parâmetro nessa operação.
Técnicas básicas de modelagem Modelagem de herança simples Ao fazer a modelagem do seu sistema, você sempre encontrará classes com semelhanças estrutural e comportamental. Uma solução é extrair quaisquer características que sejam comuns e colocá-las em classes mais gerais a partir das quais serão herdadas por classes mais especializadas.
Técnicas básicas de modelagem Modelagem de herança simples
Técnicas básicas de modelagem Modelagem de relacionamentos estruturais Dependência: uma classe depende da outra, mas a outra classe não tem nenhum conhecimento sobre aquela dependente. Generalização: a classe-filha herda de sua classe-mãe, mas a classe-mãe não terá qualquer conhecimento específico sobre as classes-filha. Resumindo, as dependências e os relacionamentos de generalização são unilaterais.
Técnicas básicas de modelagem Modelagem de relacionamentos estruturais Ao fazer a modelagem com relacionamentos de associação, você está modelando classes que são pares umas das outras. Sempre que a dependência é um relacionamento de utilização e a generalização é um relacionamento é-um-tipo-de, uma associação especifica um caminho estrutural por meio do qual os objetos das classes interagem.
Técnicas básicas de modelagem Modelagem de relacionamentos estruturais Para fazer a modelagem de relacionamentos estruturais: Para cada par de classes, se for necessário navegar de um objeto para outro, especifique uma associação entre eles. Isso constitui uma visão de associações orientadas a dados. Para cada uma dessas associações, especifique uma multiplicidade, papéis e nomes de associações Se uma das classes de uma associação for, estrutural ou organizacionalmente, um todo quando comparada às classes encontradas na outra extremidade, que, por sua vez, parecem partes, marque esse caso como uma agregação/composição.
Técnicas básicas de modelagem Modelagem de relacionamentos estruturais Como identificar que objetos de uma determinada classe devem interagir com os objetos de outras classes? A análise de casos de uso será de grande ajuda, obrigando você a considerar cenários estruturais e comportamentais. Sempre que descobrir que duas ou mais classes interagem, especifique uma associação.
Diagrama estrutural da UML. Pode ser visto como uma instância de diagramas de classes. Representa uma fotografia do sistema em um certo momento. exibe as ligações formadas entre objetos conforme estes interagem e os valores dos seus atributos. Formato nomeclasse nomeobjeto: NomeClasse Exemplo Pedido umpedido: Pedido