Engenharia de Software – Modelagem de dados – Meta modelagem do modelo conceitual
Como conduzir o processo de modelagem
Quando se inicia um processo de modelagem conceitual deve-se ter em mente que se está fazendo a representação do mundo real em um mundo simbólico que interesse para a empresa controlar os seus recursos e tomar decisões. Deve-se sempre lembrar o objetivo do trabalho. Não se está modelando por modelar, por isso deve-se seguir algumas regras que, neste trabalho, se chama de Meta modelagem.
Neste trabalho vai se usar a notação proposta pelo UML, pois está se tornando um padrão, mas é preciso que fique claro que qualquer das notações apresentadas (CHEN, MARTIN…) podem ser usadas, pois a ênfase que se está dando é a fundamentação matemática de teoria dos conjuntos.
Primeiro passo
Deve-se procurar entender para que a empresa precisa desse trabalho. Não é uma tarefa fácil, mas o modelador deve iniciar o trabalho pelo conjunto “foco” de interesse da empresa e partir daí toda a modelagem.
Em um estacionamento, por exemplo, deve-se perguntar: Para que se deve modelar o estacionamento? Qual o interesse da empresa? A resposta é o controle da ocupação de vagas que vai gerar receita e todas as informações de fluxo a atividade do estacionamento, então neste caso a modelagem deve iniciar pela ocupação de vaga.
Em uma escola o interesse está nas matrículas que são a fonte de receita e estas são ocupadas por alunos. Em um sistema de vendas o conjunto central é o evento venda. Toda modelagem têm um objeto central é ele que deve ser representado no centro do diagrama, pois tudo gira em torno dele. Normalmente é um objeto ou fato concreto.
O início do sistema de controle de vagas
No sistema de controle de vagas iniciamos da seguinte forma:
Pode-se criar um código e já supor as informações necessárias para uma ocupação
Veja que para definir a ocupação precisa-se saber qual a vaga, qual carro e o momento que iniciou e terminou a ocupação, isso já dos dá a direção do próximo passo que é modelar os conjuntos que precisam ser controlados para que haja a ocupação. E passa-se a modelar esses conjuntos, normalmente de fatos e coisas “concretas”. Observe que esse primeiro conjunto é associativo, pois precisa da vaga e do veículo para sua existência ou identificação.
No processo de modelagem vão surgindo outros conjuntos ligados aos que são identificados, assim todo o veículo precisa ter um responsável, ou dono que aparece na documentação. Se o objetivo é identificar o veículo, no mundo real, a cor é uma propriedade muito importante. O número do chassi para esse feito não interessa, pois o funcionário não irá conferir o chassi de cada veiculo, por motivos práticos. Esses fatos devem ser considerados na modelagem. De forma que o modelo evolui para:
No caso de uma escola o elemento central, para esse mundo real, é a matrícula. Uma matrícula de um aluno em uma disciplina, além disso, deseja-se saber o dia, a hora e o período escolar desse fato. Vai-se colocar um identificador na matrícula, embora ela também seja uma entidade associativa:
Após essa identificação aparecem no mínimo dois novos objetos que precisam ser tratados, pois participam da associação: aluno e disciplina.
E assim vai se desenrolando o modelo conceitual nessa primeira fase da meta modelagem.
Segundo passo da meta modelagem
Nesta fase se introduz elementos necessários à classificação dos objetos até aqui identificados. Essa identificação pode ser por tipificação ou por faixas definidas pelo usuário. Então o importante e identificar quais são as formas de classificação feitas pelo usuário.
No caso do estacionamento pode-se classificar as vagas como cobertas e não cobertas. Pode-se também classificar os veículos conforme o número de pneus. Veículos com dois pneus (motos), veículos com quatro pneus (carros), e com mais pneus (caminhões) etc. Já no caso da escola a classificação pode ser de alunos de primeiro grau, segundo grau ou ainda dos bolsistas por tipo de bolsas.
Assim, na segunda fase do modelo são acrescentados todos os objetos que servem para a classificação dos objetos existentes:
Para o estacionamento tem-se:
Podem-se classificar os proprietários por faixa de renda, por exemplo, assim tem-se:
Terceira etapa
Nesta etapa deve-se verificar se as necessidades de informação para o cliente estão atendidas. Também se cria as associações necessárias às pesquisas mais complexas. Chama-se de pesquisas mais complexas quando há necessidade de se navegar por vários relacionamentos no modelo.
Deve-se lembrar de que o modelo conceitual é um modelo chamado de transitivo (se a aponta para b, e b aponta para c então a também aponta para c através de b), mas este encadeamento pode ficar muito longo. Para evitar isso deve-se colocar entidades associativas entre as entidades de início e fim do encadeamento.
Suponha nesta fase que é de interesse do usuário do estacionamento a informação da preferência de proprietário por tipo de vagas. Isso pode ser obtido por transitividade. Para conhecer essa forma:
De cada proprietário verifica-se cada veiculo, de cada veiculo encontrado verifica-se a alocação, e de cada alocação encontrada verifica-se a vaga e dai identifica-se o tipo de vaga. Claro que esta se falando de um exemplo, mas é isto que é feito na pratica. Esta navegação é longa e provavelmente demorada, dependendo do tamanho dos conjuntos e da tecnologia usada. Para eliminar este risco, basta colocar uma entidade associativa que vá atualizando esta informação. Assim na terceira fase o modelo fica:
Na terceira fase também se incluem conjuntos necessários a segurança e auditoria, tipo, usuário que faz a inclusão ou alteração, datas de inclusão, etc…
Assim a modelagem deve ser organizada no seu desenvolvimento nestes três passos.
Regras para dicionarizar o modelo
É importante fazer um dicionário para apoiar o modelo. Neste dicionário deve-se descrever cada entidade e os seus respectivos atributos, bem como informações que serão úteis para quem vai utilizar o modelo.
Assim deve-se documentar a entidade:
Exemplo.
DISCENTE: qualquer estudante regularmente matriculado em qualquer dos cursos da universidade.
Atributos:
Identificador: é um número que serve para identificar o discente na universidade. Este número será de seis digitos sendo que os dois primeiros dígitos indica o curso que o aluno está matriculado. É da forma: CCNNNN (onde cc é o código do curso e nnnn é um sequencial numérico iniciando em 0000).
Nome: É o nome do aluno constante na sua certidão de casamento ou na certidão de nascimento.
Endereço: É o endereço postal do aluno, deve ser comprovado com uma correspondências de conta pública, na falta desta poderá fazer uma declaração de punho na presença de duas testemunhas que deverão assinar a declaração.
CPF: É o número dado pela receita federal do Brasil e deverá ser comprovado pelo documento constando o nome do discente.
Entidade ALUNO:
É o discente regularmente matriculado com matricula ativa em um dos cursos de graduação da universidade.
(…. deve-se descrever cada entidade)
Observe que o dicionário é obrigatório, e não se deve imaginar que existem descrições evidentes, pois são nestes casos que ocorrem os erros. Por exemplo, endereço. Apesar de parecer óbvio, uma pessoa tem vários endereços: endereço postal, endereço residencial, endereço bancário, endereço eletrônico….. Isto só para exemplificar com um dado aparentemente simples.
Coloca-se ainda no dicionário algumas informações úteis para a administração de dados. Informações de sua representação em sistemas, de sua utilização, e de sua segurança.
Assim podemos definir para a entidade Discente, além de sua descrição, como visto, informações de sua utilização. O Supervisor de ensino pode modificar os atributos. O periodo de inserção de discentes é no inicio do ano. O volume médio é de 12000 elementos no conjunto. Aproximadamente 5% dos elementos são alterados por ano. Para os atributos da entidade discente pode-se ter informações de sua representação e utilização. Exemplos:
Identificador: é um número que serve para identificar o discente na universidade. ….. tipo inteiro com seis digitos. Chave do conjunto. Proibido atualizações.
Nome: é o nome do aluno constante na sua certidão …. Tipo string com 30 posições. Permitida alterações apresentando nova certidão de casamento.
Endereço: É o endereço postal do aluno, deve ser comprovado com uma …… Tipo alfanumerico com 40 posições. Permitido alterações apresentando documento de correspondencias.
CPF: É o número dado pela receita federal do Brasil e ….. Tipo alfanumérico com 11 posições. Não são permitidas alterações.
E assim por diante.
Todas as informações apresentadas sobre os dados são chamados de META DADOS da empresa, pois servem para definir como os dados são representados e utilizados. A responsabilidade de manter os Meta dados é de um profissional chamado Administrador de Dados.
META DICIONÁRIO
Imagine que um analista definiu em uma entidade o endereço com 30 posições alfanuméricos e em outra entidade um endereço com 25 posições do tipo string. É preciso ter uma uniformidade até para facilitar o manuseio destes dados. De forma que o ideal é definir um conjunto de regras que possibilitem se gerar o dicionário de forma organizada. Estas regras constituem o meta dicionário.
Regras do meta dicionário; O ideal é dar-se o nome dos atributos identificando a entidade e o tipo de dados que será usado na construção e utilização em sistemas.
Iniciaremos pelos tipos de dados a serem usados e isto pode mudar de acordo com a especificação do administrador de dados. No exemplo vamos definir:
Curtointeiro: é um número inteiro com 4 dígitos.
Longointeiro: é um número inteiro com 6 dígitos.
Curtastring: é uma string com 20 caracteres.
Longastring: é uma string com 40 caracteres.
Descrevestring: é uma string com 200 caracteres.
Você pode definir estes tipos que serão usados para toda a empresa, isto facilita futuras migrações e “merges” de arquivos. Tem-se ganho nas buscas dentro do dicionário e nas manutenções nos futuros sistemas.
Definido os tipos podemos começar a dar os nomes de forma organizada. Vamos pegar a entidade discente para exemplificar:
Pode-se ter a regra de formação de nome para os atributos na forma:
<entidade>_<tipo_dado>_<nome>
O nome de identificador deve ser: discente_longointeiro_identificador.
O nome do atributo nome deve ser: discente_longastring_nome.
O nome do atributo endereço deve ser: discente_longastring_endereço
O nome do cpf deve ser: discente_curtastring_cpf
Assim com as regras do meta dicionario o conjunto ficará da forma abaixo:
Estas regras irão facilitar a utilzação e manutenções futuras.
Tratamento de subconjuntos e identificação de abstrações
Vejamos agora como é feito o tratamento de subconjuntos e a identificação de abstração através de um exemplo prático. Acompanhe:
Suponha que você coordena um trabalho de modelagem para uma universidade, com três analistas diferentes, e que cada um foi para um setor diferente. O primeiro foi modelar a graduação e trouxe o seguinte conjunto:
O segundo foi trabalhar na área de pós-graduação e trouxe como conjunto principal o seguinte:
O terceiro foi trabalhar no departamento de cursos livres e trouxe o conjunto abaixo como central da modelagem:
Ao receber os três modelos que vimos anteriormente, você pode perceber que os analistas estavam tratando seus modelos como se eles fossem abstrações para o fenômeno que encontraram. Mas, ao analisar os três modelos você verifica que todos tem muitas propriedades em comum, portanto, cada um deles é uma generalização e não uma abstração.
Verifica-se pelas propriedades que existe uma entidade comum embutida nos três modelos, esta sim é a generalização e desta forma podemos construir uma estrutura que seja mais prática, arrumada e mais “poderosa” em termos de representação do conhecimento.
Nesta estrutura pode-se imaginar um conjunto que caracteriza abstração e deve-se procurar um nome generalista para substituir os ????? (por, exemplo, discente) e reunir as propriedades comuns de todas as generalizações. O novo identificador deve substituir os identificadores específicos dados por cada analista. Se estes forem importantes podem ser mantidos como um atributo. E cada subconjunto ficará com os seus atributos específicos. A estrutura de abstração então ficará da seguinte forma:
O Objetivo da modelagem é buscar abstrações, ou seja, estruturas como a que foi apresentada, pois assim pode-se fazer sistemas com maior aplicabilidade, além de manter organizado o conhecimento.
Um conjunto pode ter mais de uma abstração, ou seja ele pode ser particionado de quantas formas forem necessárias para a analise. Para cada categorização ou destaque de sub conjunto deve-se usar o simbolo do triangulo. Assim a abstração discente poderia ter outras generalizações como mostrado abaixo
Observe que nada é informado sobre a interseção dos subconjuntos entre categorizações. Um discente pode ser aluno, formado aprovado e feminino, por exemplo. No tratamento de subconjuntos a UML também propõem se guardar informações de conjuntos com outras estruturas, normalmente não precisaremos delas, mas se vai apresenta-las para completar o conhecimento sobre UML.
Ordenação
Considere a modelagem abaixo, observe que os relacionamentos estão nomeados e no caso do relacionamento de multiplicidade (0..N) deseja-se informar que os veículos devem ser ordenados de forma crescente por ano. Neste caso indicamos junto ao conjunto.
Indica que o conjunto de veículos é ordenado, a representação não indica a forma de ordenação.
Dica: Associação ordenada
As associações entre objetos podem ter uma ordem implícita. O padrão para uma associação é desordenado (ou sem nenhuma ordem específica). Mas uma ordem pode ser especificada através da associação ordenada. Esse tipo de associação pode ser muito útil em casos como este: janelas de um sistema têm que ser ordenadas na tela (uma está no topo, uma está no fundo e assim por diante). A associação ordenada pode ser escrita apenas colocando “{ordenada}” junto à linha de associação entre as duas classes.
Observação
O UML define uma representação que pode ser usada em qualquer diagrama para se especificar comentários (ou observações). É a representação de nota, como mostrado abaixo:
Este desenho é ligado ao elemento que se deseja fazer a observação por uma linha pontilhada. Assim vamos comentar a forma de ordenação do conjunto de veículos:
Qualificado
Quando necessitamos qualificar uma associação com objetivo de reduzir a multiplicidade, é representado no relacionamento com um retângulo menor, onde se faz a qualificação. O Retângulo do qualificador é parte do cominho e não faz parte da classe.
No desenho acima o qualificador indica que cada item de NF na Nota fiscal refere-se a um produto. Esta representação evita de se representar a classe de produto. A qualificação é uma informação para a implementação – é um conceito voltado para a programação – Indica que na implementação da Nota fiscal deve haver um objeto do tipo produto para cada objeto de item de nota fiscal. Isto indica que não devem existir dois itens de Nota fiscal para um mesmo produto.
Navegabilidade
Quando for implementado (código de programação) um objeto, podem-se chamar operações de outros objetos. Diz-se que de uma classe instanciada pode-se acessar instancias de outras classes que têm relacionamentos com a primeira classe.
Para indicar o sentido da Navegação, ou seja, como podemos percorrer (chamando funções – veremos na próxima aula) usou uma flecha no final do relacionamento. Assim:
A navegação é de aluno, que é chamada de classe fonte, para veiculo, chamada de classe-alvo. Isso indica que da classe aluno podem-se identificar os veículos de um aluno. Mas, não é possível identificar o aluno dono de um veículo.
As classes normalmente se relacionam de forma bidirecional por definição, a navegação pode ocorrer nos dois sentidos do relacionamento, exceto quando dito ao contrário.
Agregação
Quando se deseja que um conjunto seja tratado de forma incorporada com outro conjunto. Uma agregação é uma representação que indica que o objeto é composto com outros objetos, por exemplo, uma nota fiscal é composta por seus itens de nota fiscal. A nota fiscal, neste caso, é chamada de objeto TODO e o item de nota fiscal é chamado de objeto PARTE. A estrutura constituída dessa forma é chamada de TODO-PARTE. E a agregação tem como característica própria: os objetos-parte são criados pelo objeto todo, ao qual estão agregados, portanto, o objeto todo já deve ter sido criado. Também é chamada de agregação por referência. Representa-se por um losango vazado no relacionamento:
A agregação indica que uma das classes do relacionamento é uma parte, ou está contida em outra classe. As palavras-chave usadas para identificar uma agregação são: “consiste em”, “contém”, “é parte de”.
A composição é outra forma de tratarmos a estrutura “todo-parte”. Uma composição é uma representação que indica que o objeto é composto com outros objetos, tal qual na agregação. Em uma agregação, após serem estabelecidos às relações elas são inalteráveis, estes não poderão ser modificados. Na composição o objeto todo contém os objetos parte. Assim, ao se instanciar o objeto todas as partes também são instanciadas, também é chamada de agregação por valor. Representa-se o losango de forma cheia. Pode ser usada para complementar uma classe que se identificou um atributo com uma estrutura que pode ser uma nova classe.
Agregação de composição: é uma agregação onde uma classe que está contida na outra “vive” e constitui a outra. Se o objeto da classe que contém for destruído, as classes da agregação de composição serão destruídas juntamente, já que as mesmas fazem parte da outra.
Atividade proposta
Considere o minimundo (descrição do mundo real) para fazer uma modelagem conceitual.
“Deve-se fazer um sistema de informações para uma loja de material de construção”. Existe um estoque de mercadorias. Ao fazer uma negociação, o vendedor pode reservar parte do estoque, e se a venda for concluída o estoque é baixado. Existem produtos que são vendidos por unidade, outros por KG, por litros e outros por metro cúbico.
A venda é registrada em um pedido que deve conter os dados do cliente, os itens pedidos pelo cliente com suas respectivas quantidades e preços unitários. Para um pedido define-se a forma de pagamento que poderá ser á vista em dinheiro, cartão ou cheque. Poderá ser parcelada, neste caso a empresa emite faturas que são endossadas pelo cliente na hora da compra. “As entregas são programadas e controladas através do retorno do canhoto da nota fiscal assinado por quem recebe a mercadoria”.
Questão 1: Identifique o conjunto central da modelagem citando o tipo de conjunto.
Questão 2: Existe alguma estrutura do tipo generalização-especialização. Quais?
Questão 3: É possível criar uma estrutura de subconjuntos com a entidade pedida?
Questão 4: Como se pode classificar o conjunto de produto para facilitar a busca por parte dos vendedores?
Questão 5: É possível substituir algumas categorizações de conjuntos, em um segundo momento por classificações?
Chave de resposta:
Questão 1: O conjunto central é pedido, que é a forma de materializar a venda. O pedido deve ser um conjunto primário (não depende de ninguém). Também pode-se iniciar por um conjunto associativo chamado venda.
Justificativa: Por que o interesse principal da loja é vender, então tudo deve ser relacionado a v.
Questão 2: Produto pode ser estruturado na forma de subconjuntos. Formas de pagamento também devem ser estruturadas em subconjuntos.
Justificativa: O texto sugere que se estruture o conjunto produtos em subconjuntos da mesma forma para tipos de pagamentos.
Questão 3: Sim, pode-se classificá-lo em entregue e não entregue.
Justificativa: Isto evita repetição de informações.
Questão 4: pode-se classificar por tipo de produto (se é cerâmica, ferragens, etc. ).
Justificativa: Isto é feito no segundo momento. Permite buscar produtos a partir da classificação.
Questão 5: Sim, pode-se substituir as categorizações, pois elas são uma forma de classificação.
Justificativa: Muitas vezes é vantajoso e se organiza melhor o modelo.
Referências
SETZER, W. Valdemar. Banco de dados. Editora Edgar Blucher Ltda.
SILBEERSCHATZ. Abraham et al. Sistema de banco de dados. Makron Books.
RIBEIRO, Horacio da Cunha e Sousa. Análise por objetos: da teoria à prática. Editora Europa. Introdução aos sistemas especialistas. LTC.
Engenharia de Software – Modelagem de dados – Meta modelagem do modelo conceitual