Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
* Profª Msc Josyane Lannes Florenzano de Souza josyane@terra.com.br Mestre em Ciência da Computação – PUCRS Estácio FIC * Expressão básica para classes, atributos e operações Classe Atributos Operações Visibilidade de Atributos e Operações Diagramas de classe * Três slots slot1 Nome da Classe Inicia com letra maiúscula slot2 Atributos slot3 Operações * Essas diferenças tipográficas capacitam o seu olho a diferenciar rapidamente entre classes e objetos; Um objeto na realidade não tem um nome próprio, somente um identificador * Representa informações sobre um objeto; O termo atributo não é sinônimo de variável. O atributo representa uma propriedade definida de forma abstrata, independentemente de como essa propriedade é implementada no seu interior. A variável, em contrapartida, é um mecanismo de implementação interno. Sintaxe para Atributos: [visibilidade] nome [multiplicidade] [:tipo] [= valor inicial] [{propriedades}] Exemplos: CPF : Inteiro Nome: String Endereço [0..2] : String * Uma operação é a implementação de um serviço que pode ser requisitado a qualquer objeto da classe, afetando o seu comportamento. A execução de uma operação por um objeto pode resultar na alteração do valor de seus atributos. Sintaxe para Operações: [visibilidade] nome [(lista-de-parâmetros)] [:tipo-retorno] {[propriedades]} Exemplos: LerTemperatura() : Numérico CalcArea(Lado:Inteiro, Altura:Inteiro) : Inteiro * Visibilidade público (+) protegido (#) Privado ou particular (-) * Linguagem C++ Um membro público é visível em qualquer lugar no programa e pode ser acessado por qualquer objeto no sistema (+); Um membro particular pode ser usado somente pela classe que o define (-); Um membro protegido pode ser usado somente por (a) uma classe que o define ou (b) uma subclasse daquela classe (#). * Considere uma classe Cliente e uma subclasse Cliente Pessoa-Física. Martin pode usar qualquer membro público de qualquer objeto no sistema. Martin também pode usar qualquer membro particular da classe Cliente Pessoa-Física. Martin não pode usar membros particulares definidos dentro de clientes; pode entretanto, usar membros protegidos de Clientes e membros protegidos de Cliente Pessoa-Física. * Linguagem Smalltalk Dentro desta linguagem, todas as variáveis de instância são particulares, e todas as operações são públicas. Entretanto, particular não significa a mesma coisa em Smalltalk que em C++. Em um sistema Smalltalk, Martin pode acessar qualquer variável de instância dentro do seu próprio objeto se aquela variável de instância estiver definida dentro de Cliente Pessoa-Física. Então, de certa forma, particular em Smalltalk é semelhante a protegido em C++. * Digamos que se tenha outra instância de cliente Pessoa-Física chamada Kendall. Kendall pode acessar qualquer membro de Martin que tenha sido definido como parte da classe Cliente Pessoa-Física, seja público, particular ou protegido. Kendall também pode acessar qualquer membro público ou protegido de Martin que tenha sido definido em cliente. Entretanto, em Smalltalk, Kendall não pode acessar as variáveis de instância particulares de Martin – somente as operações públicas de Martin. Em C++ você pode acessar membros de outros objetos de sua própria classe da mesma forma que acessa s seus próprios membros. Smalltalk, não faz diferença se um outro objeto é da mesma classe ou não; você pode somente acessar as partes públicas de um outro objeto. * É semelhante a C++; Ela oferece acesso livre a membros de outros objetos de uma mesma classe; Ela também acrescenta um novo nível de visibilidade, chamado pacote; Um membro com visibilidade de package (pacote) pode ser acessado somente por instâncias de outras classes dentro do mesmo pacote; Em Java, um membro protegido pode ser acessado por subclasses, mas também por qualquer outra classe do mesmo pacote da classe proprietária. Isso significa que, em Java, protegido é mais público que pacote; Java também permite que classes sejam marcadas: como públicas ou de pacote. Os membros públicos de uma classe pública podem ser usados por qualquer classe que importa o pacote em que a classe permanece. Uma classe de pacote pode ser usada somente por outra classe do mesmo pacote. * Um método ou classe de C++ pode se tornar um amigo (“friend”) de uma classe; Um amigo tem acesso completo a todos os membros de uma classe – portanto, a frase (de mau gosto) “em C++, amigos tocam as partes particulares dos outros” * Quando você estiver usando visibilidade, use as regras da linguagem na qual está trabalhando; Quando você está examinando um modelo UML de qualquer outra origem, seja cuidadoso com o significado dos marcadores de visibilidade, e esteja ciente de como estes significados podem mudar de linguagem para linguagem; As visibilidades geralmente mudam quando você começa a trabalhar com código; Então, não fique amarrado a elas no início do projeto. * Construção da Generalização Herança Simples Herança Múltipla Construção de Associação Notação básica da UML para associações Navegabilidade de associações Associações Todo-Parte Composição Agregação * Herança Simples * Herança Múltipla * Notação Básica da UML para associações * Três possíveis navegabilidade para uma associação entre duas classes 1 1 * * * Composição Estrutura comum em sistemas de software, orientados ou não a objeto, devido ao fato de que muitos objetos compostos aparecem no dia-a-dia. Ex: Um cachorro é uma composição contendo uma cabeça, um corpo, um rabo e quatro patas. Agregação Construção familiar por meio da qual os sistemas de software representam estruturas da vida real. Ex: Uma cidade é um agregado de casas, uma floresta é um agregado de árvores, e um rebanho é um agregado de ovelhas. * * Objeto agregado e seus contribuintes * Original: PAGE-JONES, Meilir. Fundamentals of Objetct-Oriented Design in UML. Addison Wesley Longman, 2000. Tradução: PAGE-JONES, Meilir. Fundamentos do Desenho Orientado a Objeto com UML. São Paulo : Makron Books, 2001. FOWLER, Martin; SCOTT, Kendall. UML Essencial: Um breve guia para a linguagem-padrão de modelagem de objetos. Porto Alegre : Bookman, 2000. * * Um modelo de objetos incorpora a estrutura estática de um sistema mostrando: os objetos pertencentes ao sistema; os relacionamentos entre esses objetos; os atributos, e as operações que caracterizam cada objeto. * Existem dois tipos de diagramas para o modelo de objetos: Diagrama de Classes: é um esquema, um padrão ou um modelo que descreve muitas instâncias de objetos. Diagrama de Objetos: descreve como os objetos de um determinado grupo se relacionam entre si. Serve para documentar casos de teste (cenários) e exemplos para discussão. Ambos os diagramas oferecem uma notação gráfica formal para a modelagem de objetos e seus relacionamentos. * Responsabilidade de uma classe diz respeito as suas obrigações dentro do contexto do sistema. Ao refinar o modelo, as responsabilidades de uma classe são traduzidas em um conjunto de atributos e operações que melhor atendam as suas obrigações. Sensor de Temperatura reset() setAlarm avaliarTemperatura - Monitorar temperatura - Disparar alarme quando a temperatura atingir valores inadequados * As relações determinam conexões entre os objetos. Fornecem um caminho para a comunicação entre os objetos. * Funcionário Empresa 1 0..* trabalha-para 0..* 1 Uma associação é uma relação estrutural que descreve um conjunto de ligações, onde uma ligação é uma conexão entre objetos. * Multiplicidade (1-1): cliente tem sempre 1 (e somente 1) conta (0-1): cliente pode ter 1 (e no máximo 1) conta (1-N): cliente tem sempre 1 conta, podendo ter mais (0-N): cliente pode ter 1 conta, podendo ter mais * Papel (opcional) Casamento * Navegação por definição, a navegação entre classes associadas é bidirecional por conveniência, a navegação pode ser restringida a uma única direção não confundir com sentido para leitura de nome de associação * Abstrai classes genéricas, a partir de classes com propriedades (atributos e operações) semelhantes. Generalização e herança são abstrações que permitem modelar aspectos semelhantes entre classes, preservando suas diferenças. Numa hierarquia de generalização, as subclasses herdam todas as propriedades de sua superclasse. * Eleitor numTitulo Pessoa nome endereço sexo dataNascim idade Candidato numCandidato * Processo de Generalização: Identificar classes com propriedades semelhantes. Definir uma nova classe com as propriedades comuns. As classes originais tornam-se subclasses da nova classe e herdam as propriedades desta. As associações em comum passam para a superclasse e as outras continuam nas subclasses. * Processo de Especialização: Definir uma ou mais subclasses a partir de uma classe existente. Adicionar propriedades e associações específicas de cada nova subclasse. Associações comuns ficam ligadas à superclasse. Pode existir mais de um tipo de especialização com base em diferentes características. Cada hierarquia de gen/esp deve abranger uma única característica. * * Tipo especial de associação Representa relacionamentos “todo-parte”, onde objetos compostos por outros objetos são modelados como estando associados com suas partes. Agregação é transitiva Se A faz parte de B e B faz parte de C então A faz parte de C. Agregação é não-simétrica Se A faz parte de B então B não faz parte de A. * Monitor Teclado Mouse 0..1 0..1 Processador DriveCD Memória Fonte Gabinete 0..1 1..* Drive Disquete 0..1 1..* Exemplo: * Agregação Simples A existência de um objeto componente não depende da existência do objeto agregado; Um objeto componente pode ser compartilhado com outro objeto agregado. EquipeProjeto AnalistaSistemas 1..* 1..* 1..* 1..* Multiplicidade da extremidade do composto pode ser maior que 1 * Agregação de Composição Quando o todo é criado, as suas partes com multiplicidade não fixa podem ser criadas posteriormente; Quando uma parte é criada, a sua existência deve ser coincidente com a existência do todo, a não ser que seja explicitamente removida antes da eliminação do todo; Quando o todo é eliminado, as suas partes também devem ser eliminadas. Exemplo: Multiplicidade da extremidade do composto deve ser igual a 1 * Formulário Entrada de Pedido GerarPedido(id, quant) Ordem Compra Produto numero data fornecedor Pedido numero data localEntrega nomeCliente incluirProduto(espec, quant) Produto id descrição quantidade unidade preço verificarEstoque(quant) atualizarEstoq(quant) verificarReposição() obterEspecificação(id) 0..* 1..* 0..* 1..* Linha de Pedido numeroLinha quant preçoVenda criar(espec, quant) 1..* 1..* 1 0..* 1 0..* Pereciveis lote dataEntrada Não-Precíveis dataValidade Associação com navegabilidade generalização agregação * Características: tem como foco a representação dos requisitos funcionais do sistema: representação de conceitos do domínio de problema raramente define sua interface em termos de suas operações e assinaturas define atributos, porém sem o compromisso com detalhamento estabelece suas relações com outras classes podem ser enquadradas em três estereótipos básicos: entidade fronteira controle * Classe Entidade utilizada para modelar informações que tem longa vida no sistema e que freqüentemente são persistentes; modelam informações e comportamentos associados a conceitos do sistema. * Classe Fronteira usada para modelar a interação entre o sistema e seus atores; a interação envolve o recebimento, apresentação e requisição de informações entre o sistema e seus usuários ou sistemas externos; uma mudança em uma interface de usuário ou em uma interface de comunicação é usualmente isolada em uma ou mais classes de fronteira; cada classe de fronteira deve estar relacionada a pelo menos um ator e vice-versa. * Classe de Controle representam coordenação, sequenciamento, transações e controle de outros objetos; freqüentemente utilizadas para encapsular controle relacionado e a um caso de uso específico; utilizadas para representar processamento complexo (tal como cálculos envolvidos na lógica de um processo de negócio) que não seja apropriado a uma classe entidade em particular; * Correntista Interface Caixa <<Fronteira>> Conta <<Entidade>> Retirada <<Controle>> requisição retirada atualização saldo * * Diagramas de Classes são utilizados para modelagem estática. A modelagem estática deve dar suporte as necessidades funcionais do sistema, isto é, os serviços que o sistema deve providenciar aos seus usuário finais. Os Diagramas de Classes são utilizados para modelar: o vocabulário do sistema: especificação das abstrações que estão contidos dentro do domínio do sistema, identificando suas responsabilidades. colaboração: colaboração envolve trabalho conjunto entre objetos do sistema visando um comportamento cooperativo. Esta cooperação traduz-se no diagrama de classes através das relações existente entre as classes identificadas. esquema lógico do banco de dados do sistema. * Faça o diagrama de classes para o cenário “Sistema de Emergência 911” * FOWLER, M; SCOTT, K. UML essencial: um breve guia para a linguagem-padrão de modelagem de objetos. 2. ed. Porto Alegre : Bookman, 2000. 169 p. * * * * * *