Ementário O Modelo de Objetos

Slides:



Advertisements
Apresentações semelhantes
Um pouco mais de cardinalidade e Relacionamentos
Advertisements

I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
MER – Modelo de Entidade Relacionamento
Modelagem de Classes do Domínio
UML Modelando um sistema.
Resumo 1.1) Introdução 1.2) Abordagem Convencional de Arquivos
O Modelo E-R Definição: Características
(Unified Modeling Language)
Diagrama de Classes.
Modelo Entidade-Relacionamento
UML – MODELAÇÃO DA ESTRUTURA Professor Sandro Carvalho.
UML: Diagrama de Classes
Sistema Gerenciador de Banco de Dados SGBD
Modelagem Orientada a Objetos
UML Diagrama de Classes elementos básicos. Contexto Os diagramas de classes fazem parte do da visão estática da UML. Os elemento desta visão são conceitos.
Introdução a Bancos de Dados
Introdução a diagrama de classes e UML
Diagrama de Classes.
Diagramas de Classes.
ANÁLISE E PROJETO ORIENTADAS A OBJETOS (parte 2) UFRJ/IM/DCC Lab PSI mai/1999.
ANÁLISE E PROJETO ORIENTADA A OBJETOS UFRJ/IM/DCC Lab PSI mai/1999.
Aspectos Avançados em Engenharia de Software Aula 3 Fernanda Campos
Geração de Código.
Análise e Projetos de Sistemas UML-Linguagem de Modelagem Unificada Modelo de Dados com UML Diagrama de Classes Professor: Armando Hage.
Banco de Dados Aplicado ao Desenvolvimento de Software
O.O.H.D.M. Modelagem Conceitual
TÉCNICAS DE PROGRAMAÇÃO II
Diagrama de Classes e Diagrama de Objetos
Análise de Sistemas Análise e Projeto Prof. Jeime Nunes Site:
Prof. Alfredo Parteli Gomes
SQL Server 2012 Introdução a Modelagem de Dados
I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
Introdução UML, Diagrama de Classes e Comunicação/Colabaração
DIAGRAMA DE CLASSE Modelagem de Software
UML – Diagrama de Classes
Profa Simone Sawasaki Tanaka
Capítulo 5: diagrama de classes: conceitos avançados Responsabilidade Agregação e composição Interfaces e classes abstratas Objeto de referencia e objeto.
Profª Daniela TLBD.
Referências: Booch, G. et al. The Unified Modeling Language User Guide
Programação Orientada à Objetos
Análise e Projeto de Sistemas
Análise de Sistemas de Informação
UML Diagrama de classes.
SISTEMAS DISTRIBUIDOS Aula 4
© Ricardo Pereira e Silva
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Objetivos Apresentar de forma breve a Metodologia de Modelagem Orientada a Objetos (OMT). A partir de um modelo de objetos de um sistema de informação.
Projeto Orientado aos Objetos Prof. Wolley W. Silva
Análise Orientado aos Objetos Prof. Wolley W. Silva
Banco de Dados Aplicado ao Desenvolvimento de Software
Programação Orientada à Objetos
Modelagem de Entidade/Objetos de Domínio com Diagrama de Classes
Unified Modeling Language Professor Mário Dantas A NÁLISE O RIENTADA A O BJETOS Nov/2010.
POO Aula 03 Projeto OO com UML Eduardo Figueiredo 11 de Março de 2010.
Campus de Caraguatatuba Aula 2: Introdução a Tecnologia de BD
Laboratório de Programação
Generalização e herança Agregação e composição
Orientação a Objetos com UML
Object Constraint Language Philip Stephen Medcraft.
Copyright © 2006 Qualiti. Todos os direitos reservados. Projetar Classes.
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ANÁLISE E PROJETO DE SISTEMAS Aula /08/2012 Professor Leomir J. Borba-
Orientação a Objetos com UML. Copyright © 2006 Qualiti. Todos os direitos reservados. Qualiti Software Processes Análise e Projeto OO com UML e Padrões|
20/04/2017 Orientação a Objetos 1 1.
Projeto de Banco de Dados
Módulo II Capítulo 1: Orientação a Objetos
UML (Unified Modeling Language) Linguagem Unificada de Modelagem
4 Projeto de Banco de Dados Carlos Alberto Heuser.
Diagrama de Classes Herança Dependências.
Análise e Design de Software Site:
Análise e Projeto de Sistemas Análise & modelagem conceitual Prof. Edjandir Corrêa Costa
Transcrição da apresentação:

Ementário O Modelo de Objetos Histórico da evolução das linguagens de programação, PE versus POO, fundamentos do modelo de objetos, a importância da modelagem, métodos OO Tecnologias para apoio a orientação a objetos UML- Unified Modeling Language A Linguagem Java introdução, a sintaxe e estruturas de controle Vocabulário da Orientação a Objetos (Abordagem com Java)

Diagrama de Classe é a essência da UML (OMT e Booch) coleção de elementos declarativos de modelo, como classes, tipos e seus respectivos conteúdos e relações estruturar atributos e operações em classes é fundamental para o trabalho de modelagem através do enfoque da orientação a objetos

Atributos Associação Agregação Classe associativa Classe Visibilidade Multiplicidade Superclasse Generalização (herança) Restrição Operações Subclasses

Relacionamentos (1/4) ligam as classes/objetos entre si criando relações lógicas entre estas entidades tipos de relacionamentos: generalização/ especificação (herança) associação agregação dependência

Relacionamentos (2/4) Generalização/ especificação indica relacionamento entre um elemento mais geral e um elemento mais específico (respectivamente, superclasse e subclasse) também conhecido como herança ou classificação (por exemplo, um enfermeira “é um tipo de” pessoa)

Relacionamentos (3/4) Agregação Associação usada para denotar relacionamentos todo/parte por exemplo, um Item de compra é parte de um Pedido Associação é um relacionamento que descreve um conjunto de vínculos, onde cada vínculo é definido como uma conexão semântica entre tuplas de objetos por exemplo, um Cliente possui Conta Corrente

Relacionamentos (4/4) Dependência é um relacionamento entre elementos, um independente e outro dependente uma modificação no elemento independente afetará diretamente os elementos dependentes do anterior é um relacionamento de utilização

Elementos Chaves 1. Objeto 2. Classe 3. Atributo 4. Operação 5. Associação 6. Restrição 7. Classe de associação 8. Dependência 9. Interface 10. Normalização do modelo de classes

1. Objeto é uma unidade real ou abstrata, individualizada e identificável características básicas: estado: características herdadas ou distintas identidade (id.): propriedade que o distingue de todos os demais comportamento: modo como age e reage a estímulos externos (passagem de mensagens)

2. Classe “um conjunto de objetos que compartilham estrutura e comportamento comuns” (Booch) se a classe possuir como instâncias classes em vez de objetos, ela será denominada de metaclasse abstração = seleção de alguns aspectos de domínio do problema para modelagem

Ao definir classes, é importante: Buscar equilíbrio entre funcionalidade e reutilização, resistindo-se ao desejo de criar classes grandes que abrangem tudo: Classes grandes são mais difíceis de entender e reutilizar, assim a criação de classes de objetos que possuam propósitos bem definidos contribui significativamente na reutilização por outras aplicações. Classes menos complicadas são mais fáceis de entender e manter, e se uma classe não puder ser explicada de forma simples ela é forte candidata a subdivisão em classes menores.

As classes são os blocos de construção mais importantes de qualquer sistema orientado a objetos.

Notação gráfica para declarar e usar Classes Nome da Classe atributo atributo: tipo do dado atributo: tipo do dado = valor inicial ... operação () operação (lista de parâmetros) operação (lista de parâmetros): tipo de resultado ...

Variações Classes 1) Indivíduo Nome da Classe Indivíduo atributos da classe (opcional) +códigoDoIndivíduo:long +sexo: M ou F +dataDoNascimento: data 2) operações da classe (opcional) Indivíduo 3) +incluirIndivíduo(códigoDoIndivíduo) +destruirIndivíduo(códigoDoIndivíduo) Variações Indivíduo +códigoDoIndivíduo:long +sexo: M ou F +dataDoNascimento: data 4) +incluirIndivíduo(códigoDoIndivíduo) +destruirIndivíduo(códigoDoIndivíduo)

Nome da Classe (1/2) cada classe deve ter um nome que a diferencie de outras classes o nome é uma seqüência de caracteres o nome de uma classe deve ser único no pacote que a contém somente o nome da classe é conhecido como nome simples nome de caminho é o nome da classe, tendo como prefixo o nome do pacote a que essa classe pertence

Nome da Classe (2/2) Nomes Simples Nomes de caminho HelloWorld Regras de Negócio::ValidaPedido Cliente Tabelas::Cliente TButton Quick Report::TQuickRep

3. Atributo menor unidade que em si possui significância própria e interrelacionada com o conceito lógico da classe à qual pertence (equivale aos campos de um registro) uma propriedade nomeada de um tipo em síntese, armazena valores em células sintaxe padrão: Visibilidade nomeDoAtributo: TipoDeExpressão = ValorInicial {Propriedade}

Sintaxe padrão p/ atributos (1/2) nomeDoAtributo é uma seqüência de caracteres de identificação começando tipicamente com letra minúscula primeira letra de cada palavra em maiúscula ex: nomeDoIndivíduo, limiteDeCréditoDoCliente TipoDeExpressão depende da linguagem de programação e do tipo de implementação de um atributo

Sintaxe padrão p/ atributos (1/2) ValorInicial é uma expressão que também depende da linguagem de programação Propriedade descrição do atributo tipo de dado tipo de atributo domínios de valores (valores mínimo e máximo)

Visibilidade de atributo (1/2) + visibilidade pública (valor default) todos têm acesso # visibilidade protegida é acessível dentro da mesma classe e por classes ao longo do pacote no qual a classe é definida - visibilidade privada é acessível apenas por operações declaradas dentro da mesma classe

Visibilidade de atributo (2/2) Nome da classe Visibilidade pública Cliente +códigoDoCliente #situação -limiteDeCrédito Visibilidade protegida Visibilidade privada Nome do atributo

4. Operação um serviço que é requisitado a um objeto como parte de seu comportamento em resposta a estímulos (procedimento algorítmico) operação é algo invocado por um objeto (procedimento de chamada) método é um corpo de procedimento sintaxe padrão: Visibilidade nomeDaOperação(Parâmetro): ExpressãoDeTipoDeRetorno {Propriedade}

Sintaxe padrão p/ operações (1/3) nomeDaOperação é uma seqüência de caracteres de identificação começando tipicamente com letra minúscula primeira letra de cada palavra em maiúscula exemplos: obterNomeDoIndivíduo obterLimiteDeCréditoDoCliente

Sintaxe padrão p/ operações (2/3) Parâmetro é uma lista de valores separados por vírgula nome tipo: tipo-expressão = valor-padrão nome é o nome de um parâmetro formal tipo é in, out, ou inout, com padrão in tipo-expressão é a especificação de um tipo de implementação dependente da linguagem valor-padrão é uma expressão de valor opcional para o parâmetro

Sintaxe padrão p/ operações (3/3) ExpressãoDeTipoDeRetorno é uma especificação dependente de linguagem de programação sobre o tipo de implementação do valor retornado pela operação Propriedade indica valores de propriedade que se aplicam ao elemento classificação, pré-condição, pós-condição, tipo de execução, concorrência, transformação e estereótipo

Visibilidade para operações (1/2) definida da mesma forma que se define para os atributos. + visibilidade pública (valor default) # visibilidade protegida - visibilidade privada

Visibilidade de operação (2/2) Nome da classe Cliente Visibilidade pública +obterLimiteDeCrédito #bloquearCliente -cancelarCliente Visibilidade protegida Visibilidade privada Nome da operação

Organização de atributos e operações (1/2) Ao representar uma classe, não é preciso exibir todos os atributos e operações ao mesmo tempo. Na verdade, na maioria dos casos, isso não é possível (haverá um número muito grande de itens) nem é adequado (somente um subconjunto desses atributos e operações será relevante para uma determinada visão). Um compartimento vazio não significará necessariamente que não existam atributos ou operações, mas apenas foi decidido não mostrá-los.

Organização de atributos e operações (2/2) Para especificar explicitamente a existência de mais atributos ou métodos do que os apresentados, terminar cada lista com reticências (...). Para melhor organização de listas extensas de atributos e operações cada grupo pode receber um prefixo com uma categoria descritiva, utilizando-se estereótipos. Por exemplo, organizando métodos construtores: <<constructor>> Create() Create(y, m, d: word)

5. Associação é uma relação que descreve um conjunto de vínculos entre elementos de modelo uma associação representa que duas classes possuem uma ligação (link) entre elas: conhecem uma a outra estão conectadas com para cada X existe um Y

Nomenclatura de associações quando duas classes, ou mesmo uma classe consigo própria, apresenta interdependência onde determinada instância de uma delas origina ou se associa a uma ou mais instâncias da outra a nomenclatura da associação depende do número de classes envolvidas: unária (recursiva), binária (normal), n-ária

Associação unária Pessoa associação reflexiva ou recursiva quando há um relacionamento de uma classe consigo própria conectando-se ambos os fins da associação a ela mesma (mas os dois fins são distintos) semanticamente representa a conexão entre dois objetos da mesma classe é casado com Esposa Marido Pessoa

Associação binária (normal) quando há duas classes envolvidas na associação de forma direta de uma para a outra 1 0..* Cliente Pedido

Associação n-ária é uma associação entre três ou mais classes Funcionário Quesito Projeto * * * Avaliação

Semântica da associação nome da associação Classe A Classe B papel-1 papel-2 onde: nome da associação: usado para definir, ou qualificar, a natureza da relação entre as classes associadas papel-1, papel-2: mostram como uma classe é vista pela outra, ou, o papel desempenhado pela classe no relacionamento

Papéis em associação (1/3) Multiplicidade Ordenação Qualificador Agregação/ composição Navegabilidade Especificador de interface Mutabilidade Visibilidade Generalização

Papéis em associação (2/3) Restrição ou propriedade Qualificador {ordenado} Agregação 1 0..* Classe A Classe B Possui Multiplicidade Nome do papel Navegabilidade Composição Generalização Classe C Classe D

Papéis em associação (3/3) Nome da associação a associação possui um nome que a representa, freqüentemente atribuído a um verbo podem existir dois nomes, um para cada direção do relacionamento “um cliente possui conta corrente” Possui  Cliente Conta corrente é Possuída por

Multiplicidade, ou cardinalidade (1/2) especifica a quantidade de correspondência de um objeto na classe [A] em objetos equivalentes na classe [B] 1 exatamente um * muitos (zero ou mais) 0..1 opcional (zero ou um) m..n seqüência especificada (5..11)

Multiplicidade, ou cardinalidade (2/2) Pessoas 1..* * Empresa funcionário empregador Uma “Pessoa” é funcionário de nenhuma ou mais (*) “Empresas”. Cada “Empresa” possui um ou vários (1..*) “Funcionários”.

Papéis em associação Ordenação {ordenado} Qualificador se a multiplicidade é maior que um, o conjunto de elementos relacionados é ordenado ou não ordenado (padrão) Qualificador é um atributo de associação ou uma estrutura de atributos cujos valores particionam um conjunto de objetos relacionados a um objeto por uma associação (reduz a multiplicidade)

Associação qualificada Pedido, item Pedido Produto 0..1 O qualificador ‘Produto’ diz que em conexão com um pedido pode haver um item de pedido para cada ocorrência de produto. Conceitualmente, esse exemplo indica que não é possível haver dois itens de pedido para um mesmo produto. Para acessar um item de pedido em particular, é necessário identificar o produto como argumento.

Agregação Uma agregação é uma forma especial de associação utilizada para mostrar que um tipo de objeto é composto, pelo menos em parte, de outro em uma relação de todo/ parte. 1 1..* Pedido, item Pedido Tem Todo Parte Agregação regular, relacionamento por-referência

Agregação de composição É uma forma de agregação com uma forte propriedade e vida coincidente da parte com o todo. Na composição, ou relacionamento por-valor, o objeto todo declara uma instância real do objeto parte dentro do seu próprio corpo tornando o objeto parte fisicamente nele contido. Indivíduo, complemento de endereço Indivíduo, endereço 1 0..1 Tem Todo Parte Agregação de composição, relacionamento por-valor

Navegabilidade Uma instância de uma classe pode navegar a instâncias de outra classe e vice-versa. Fonte Alvo Pedido Cliente * 1 {ordenado} sentido da navegação

Navegabilidade na agregação Todo 1 1 Navegabilidade unidirecional em agregação regular Navegabilidade bidirecional em agregação de composição 0..* 0..* Parte 1 Parte 2

Papéis em associação (1/2) Especificador de Interface define o comportamento exigido para habilitar a associação nome de um classificador com a sintaxe: “:”nome-do-classificador Mutabilidade se os vínculos são mutáveis podem ser somados, apagados e movidos outras propriedades: congelado, somarSomente

Papéis em associação (2/2) Visibilidade especificado por um indicador de visibilidade (“+”, “#”, “-” ou palavra-chave explícita tal como {público}) Generalização um relacionamento de taxinomia entre um elemento mais geral e um elemento mais específico que é completamente consistente com o primeiro elemento somando-o informação adicional especializada

Generalização Indica que uma classe mais geral, a superclasse, tem atributos, operações e associações comuns que são compartilhados por classes mais especializadas, as subclasses. Por sua vez, as subclasses herdam atributos, operações e associações da superclasse e agregam atributos e operações particulares ao elemento de especialização a que se referem.

Restrições para generalização/ especificação {completo}: N é conhecido {incompleto}: N não é conhecido {disjunção}: B, C, ..., N são mutuamente exclusivos {sobreposição}: B, C, ... N podem ocorrer simultaneamente Generalização Superclasse (classe pai ou classe base) A {Restrição} B C ... Subclasses (classes filha ou classes derivada) N

Exemplo de generalização/ especificação com restrição Animal {disjunção, incompleto} Mamífero Ave Peixe

Herança É o mecanismo de reutilização de atributos e operações definidos em classes gerais por classes mais específicas. Permite organizar tipos similares de classes de objetos em categorias hierárquicas, onde é permitida à classe de menor nível, que é uma especialização ou extensão de outra classe, compartilhar atributos e operações de classes superiores na hierarquia.

Redefinição de atributos e operações na herança Veículo terrestre Superclasse Operações redefinidas pela subclasse partida() parada() {disjunção} Automóvel Caminhão Subclasses partida() partida() parada() parada()

Herança múltipla Veículo {sobreposição, incompleto} Veículo terrestre aquático Veículo anfíbio

Agregação versus Generalização Pedido Árvore Agregação: Pedido, item é parte-de (ou atributo-de) Pedido Generalização: Pinus é um tipo-de Árvore Pedido, item Pinus

6. Restrição Uma restrição é um relacionamento semântico entre elementos de modelo que especifica condições e proposições que devem ser mantidas como verdadeiras, caso contrário o sistema descrito pelo método é nulo. Restrição Grupo de cidadãos idosos {pessoa.idade > 60} Pessoa 0..1 0..*

Restrições predefinidas na UML Associação Auto Completo Disjunção Global Implícito Incompleto Local Ou Parâmetro Radiodifusão Sobreposição Voto

Restrição {Ou} Qualquer instância da classe só pode participar uma vez no máximo de uma das associações. 0..1 Indivíduo Pertence 0..* Conta Corrente {Ou} 0..* Pertence Organização 0..1

Restrição em linguagem natural {Se nível de crédito for insuficiente então condição de pagamento deve ser à vista} 1 0..* Cliente Pedido Faz

Linguagem de restrição de objeto A UML inclui uma especificação da linguagem OCL- Object Constraint Language para ser utilizada em definição de restrições dentro do metamodelo. Na UML, cada restrição é escrita em uma linguagem específica, embora também possa ser escrita em linguagem natural, tal como um comentário.

Sintaxe básica da OCL (1/2) item “.” seletor O seletor é o nome de um atributo no item ou o nome de um papel de fim designado de um vínculo anexado ao item. item “.” seletor “[“ valor-de-qualificador “]” O seletor designa uma associação qualificada que qualifica o item. O valor-de-qualificador é um valor para atributo de qualificador.

Sintaxe básica da OCL (2/2) set “->” “select” “(“ expressão-booleana “)” A expressão-booleana é escrita em termos de objetos dentro do conjunto. O resultado é o subconjunto de objetos no conjunto para o qual a expressão booleana é verdadeira. Exemplos: flight.pilot.training_hours > flight.plane.minimum_hours company.employees -> select (title = “Manager” and self.reports -> size > 10)

Nome da classe de associação Uma classe de associação é um elemento de modelagem que tem associação e propriedades de classe, podendo ser vista tanto como uma associação que tem propriedades de classe como uma classe que tem propriedades de associação. Classe A Classe B Nome da classe de associação atributos da classe de associação operações da classe de associação

8. Dependência Dependência indica a ocorrência de um relacionamento semântico entre dois ou mais elementos de modelo onde uma classe cliente é dependente de alguns serviços da classe fornecedora. Indica uma situação na qual uma mudança em um elemento (elemento independente) pode afetar outro elemento da dependência (elemento dependente).

Dependência Classe A Classe B Fornecedor Cliente

Dependências predefinidas na UML (1/2) Rastro uma conexão histórica entre dois elementos que representam o mesmo conceito em níveis diferentes de significado Refinamento um histórico ou conexão de derivação entre dois elementos com um mapeamento entre eles

Dependências predefinidas na UML (2/2) Uso uma situação na qual um elemento requer a presença de outro para sua implementação correta ou funcionamento Ligação uma ligação de parâmetros de modelo para valores reais visando criar um elemento não parametrizado

9. Interface É um especificador para operações externamente visíveis de uma classe ou um componente sem especificação de sua estrutura interna. Fornece um modo para dividir e caracterizar grupos de operações. nome da interface Classe de implementação Classe cliente Interface dependência

Interface especifica uma parte limitada do comportamento de uma classe real e não tem implementação formalmente eqüivale a uma classe abstrata sem atributos, estados ou associações, mas com um conjunto de operações abstratas designa a face externa de uma classe ou um pacote descreve as interações entre dois objetos

«interface» Executável {abstrado} «interface» Armazenável {abstrado} Fornecedor Cliente Classe A Classe B executável Fornecedor executável Classe C Classe A implementa a interface executável e armazenável Classe C implementa a interface executável Classe B usa a interface executável e armazenável de A e executável de C «interface» Executável {abstrado} executar() {abstrato} processar() {abstrato} «interface» Armazenável {abstrado} carregar() {abstrato} salvar() {abstrato}

10. Normalização do modelo de classes Normalização é um processo formal que examina os atributos de classes com o intuito de minimizar redundância em objetos específicos. A normalização causa a simplificação de atributos dentro das respectivas classes colaborando para a integridade e a estabilidade do modelo. O segredo das formas normais está em perceber que alguns atributos determinam o valor de outros.

Normalização do modelo de classes São mais necessárias para os modelos relacionais. Primeira, Terceira e Quarta Forma Normal. A Segunda não ocorre em banco de objetos identificador único e universal ao objeto Uma estrutura de atributos não normalizada é dita estar na zerésima forma normal

1ª Forma Normal é verificada quando em determinadas estruturas de atributos, existem dados que se repetem várias vezes objetivo = remoção de grupos repetitivos

Exemplo para normalização de classes:

Classe pedido preliminar númeroDoPedido códigoDoCliente nomeDoCliente dataDoPedido códigoDoProduto[15] quantidadeDoProduto[15] descriçãoDoProduto[15]

Para atingir a 1ª forma normal verificar se há ocorrências repetitivas de atributos dentro da classe [A] analisada; destacar os atributos repetitivos e suas respectivas operações, criando uma nova classe [B] que absorverá esses itens; estabelecer a associação de agregação regular e multiplicidade ?..* ou ?..[número de ocorrências] entre as classes [A] e [B].

Resultado da 1ª forma normal Pedido, item Pedido númeroDoPedido códigoDoCliente nomeDoCliente dataDoPedido códigoDoProduto quantidadeDoProduto descriçãoDoProduto 1 1..*

3ª Forma Normal objetivo = remoção de dependências transitivas dependência transitiva é a dependência indireta que um determinado atributo tem com o identificador do objeto através de um outro atributo explícito ou implícito do qual é diretamente dependente

Para atingir a 3ª forma normal verificar se a classe [C] analisada possui atributos que são dependentes de outros atributos nela contidos; destacar os atributos com dependência transitiva e suas respectivas operações, incorporando-os na classe [D]; eliminar os atributos obtidos por cálculo a partir de outros atributos da classe [C].

Resultado da 3ª forma normal Pedido Pedido, item 1 1..* númeroDoPedido dataDoPedido quantidadeDoProduto * * 1 1 Cliente Produto códigoDoCliente nomeDoCliente códigoDoProduto descriçãoDoProduto

4ª Forma Normal Tendo como pré-requisito a terceira forma normal, a quarta forma normal busca remover dependências multivaloradas. Livro texto Curso Professor * * * classe de associação CPL

Resultado da 4ª forma normal Livro texto * * * * Professor Curso Professor Curso Livro texto Curso classe de associação

Referência Modelagem de Objetos através da UML - the Unified Modeling Language José Davi Furlan MAKRON Books, 1998 Capítulo 2- Modelando com a UML, item 3. pg. 91..167