SISTEMA DE ENSINO PRESENCIAL CONECTADO ANÁLISE DE DESENVOLVIMENTO DE SISTEMAS ADSON JOSÉ HONORI DE MELO
PORTFÓLIO INDIVIDUAL 3º SEMESTRE Listas lineares, alocações encadeadas, ACID, ORM, banco de dados relacionais com programação orientada a objetos, herança e poliformismo.
Palmas 2012
ADSON JOSÉ HONORI DE MELO
PORTFÓLIO INDIVIDUAL 3º SEMESTRE Listas lineares, alocações encadeadas, ACID, ORM, banco de dados relacionais com programação orientada a objetos, herança e poliformismo.
Trabalho apresentado às disciplinas Algoritmos e Estruturas de Dados, Análise de Sistemas, Seminário III, Desenvolvimento Orientado a Objetos I e Banco de Dados II da Universidade Norte do Paraná - UNOPAR Prof(s). :
Palmas 2012
Marcio Roberto Roberto Y. Nishimura Polyanna Gomes Merris Mozer
SUMÁRIO 1
INTRODUÇÃO .....................................................................................................3
2
DESENVOLVIMENTO .........................................................................................4
2.1
LISTAS LINEARES...........................................................................................4
2.1.1
FIFO (“FIRST IN FIRST OUT”) .....................................................................4
2.1.2
FILO (“FIRST IN LAST OUT”) .......................................................................5
2.1.3
TIPOS DE ALOCAÇÃO ................................................................................6
2.2
TRANSAÇÕES EM BANCO DE DADOS – ACID.............................................7
2.3
BANCO
DE
DADOS
RELACIONAIS
VERSUS
PROGRAMAÇÃO
ORIENTADA A OBJETOS ..........................................................................................8 2.3.1
ORM (OBJECT RELATIONAL MAPPER) .....................................................8
2.3.2
HIBERNATE..................................................................................................9
2.4 3
HERANÇA E POLIFORMISMO ........................................................................9 CONCLUSÃO ....................................................................................................12
REFERÊNCIAS .........................................................................................................13
3
1 INTRODUÇÃO Esta produção textual interdisciplinar do 3º semestre do curso de Análise e Desenvolvimento de Sistemas, tem como objetivo aplicar e exercitar os conteúdos assimilados no período abordando os diversos conceitos, técnicas e práticas das listas lineares (FIFO e FILO), alocações simplesmente encadeadas e duplamente encadeadas, conceitos de ACID de uma transação, ORM, herança e poliformismo, bem como a utilização de banco de dados relacional com a programação orientada a objetos.
4
2 DESENVOLVIMENTO
2.1 LISTAS LINEARES Lista linear é a estrutura que permite representar um conjunto de dados afins de forma a preservar a relação de ordem linear de seus elementos. É o conjunto de n ≥ 0 nós X1, X2, ... Xn, organizados estruturalmente de forma a refletir as posições relativas dos mesmos; se n > 0, então X1 é o primeiro nó; para 1 < k < n, o nó Xk é precedido pelo nó Xk-1 e seguido do Xk+1; temos também Xn como último nó e quando n = 0, diz-se que a lista é vazia.
Exemplos de listas lineares no cotidiano: -
Pessoas na fila de um banco;
-
Letras em uma palavra;
-
Relação de notas dos alunos de uma turma;
-
Itens em estoque em uma empresa;
-
Dias da semana;
-
Vagões de um trem;
-
Pilha de pratos;
-
Cartas de baralho.
Exemplos de listas lineares em sistemas informatizados: -
Controle de documentos para impressão;
-
Troca de mensagem entre computadores numa rede;
-
Funções recursivas em compiladores;
-
Mecanismo de desfazer/refazer dos editores de texto;
-
Navegação entre páginas Web;
2.1.1 FIFO (“FIRST IN FIRST OUT”) O primeiro elemento que entrou é o primeiro a sair. Cada elemento armazena um ou vários dados (estrutura homogênea ou heterogênea) e um ponteiro para o próximo elemento, permitindo o encadeamento e a linearidade. Temos as
5
seguintes operações nesta estrutura: inserir na fila, consultar toda a fila, remover e esvaziá-la. Nas filas as remoções acontecem no ponteiro INICIO e as inserções no ponteiro FIM. Analogicamente, imaginemos uma fila de espera de um banco qualquer, todo cliente que chega é posicionado ao final da fila, e o primeiro a ser atendido sempre será o primeiro desta fila de espera.
Figura 1 – esquema de funcionamento de uma fila FIFO Fonte: ASCENSIO, Estrutura de Dados, pág. 191 e 192
2.1.2 FILO (“FIRST IN LAST OUT”) O último elemento que entrou é o primeiro a sair. Cada elemento armazena um ou vários dados (estrutura homogênea ou heterogênea) e um ponteiro para o próximo elemento, permitindo o encadeamento e a forma linear. Temos as seguintes operações nesta estrutura: inserir na pilha, consultar toda a pilha, remover e esvaziá-la. Nas pilhas as remoções e inserções acontecem num único ponto, o TOPO. Analogicamente, pensemos numa pilha de pratos, onde um novo prato será sempre colocado no topo da pilha; para retirarmos um prato, escolhemos o do topo, ou seja, o último prato inserido.
6
Figura 2 – esquema de funcionamento de uma pilha FILO Fonte: ASCENSIO, Estrutura de Dados, pág. 185
2.1.3 TIPOS DE ALOCAÇÃO SIMPLESMENTE ENCADEADAS Uma lista simplesmente encadeada é uma sucessão de nós onde cada nó aponta para o próximo nó da lista. O nó que possuir o valor NULL no ponteiro para próximo é o último nó da lista. É de extrema importância que seja mantida uma referência para o primeiro nó da lista, caso esta referência for NULL, significa que a lista esta vazia.
Figura 3 – alocação simplesmente encadeada
7
DUPLAMENTE ENCADEADAS São listas que, além de cada elemento indicar o elemento seguinte, também indicam aquele que o antecede, ou melhor, cada elemento é ligado ao seu sucessor e ao seu predecessor.
Figura 4 – alocação duplamente encadeada
Há uma questão que envolve performance, flexibilidade e requisitos de alocação de memória, relacionados com a opção que fazemos por uma ou outra estrutura de dados. No caso da lista simplesmente encadeada, os nós são menores (1 ponteiro por dado armazenado), mas a flexibilidade de deslocamento entre os nós é menor (só em um sentido) e mesmo a performance pode ser menor em operações como a inserção no final da lista. Já as listas duplamente encadeadas irão ocupar mais memória (2 ponteiros para cada dado), mas são muito mais flexíveis e podem ser mais eficientes na em certas operações (por exemplo, na inserção/remoção do final da lista). Portanto, como atualmente a abundância de recursos computacionais de hardware (memória) não é um gargalo para desenvolvedores, considero a alocação duplamente encadeada a mais recomendada. 2.2 TRANSAÇÕES EM BANCO DE DADOS – ACID Todo sistema gerenciador de banco de dados (SGBD) aplica em seu funcionamento o conceito denominado ACID, um acrônimo que representa as quatro propriedades fundamentais. Todas as propriedades devem ser aplicadas em sua plenitude, senão o SGBD não poderá ser considerado um sistema de verdade.
ATOMICIDADE: dizemos que uma transação é atômica porque não é divisível em partes, ou seja, deve ser realizada por inteiro ou então abortada. Por exemplo, numa transação com operações de alteração de dados, devemos cumprir todas ou não realizamos nenhuma delas.
8
CONSISTÊNCIA:
no
início
de
uma
transação,
os
dados
armazenados estão todos consistentes; ao concluir a transação, os dados devem permanecer consistentes, ou seja, as regras de negócio devem continuar a sendo executadas e cumpridas.
ISOLAMENTO:
é
também
conhecido
como
integridade
de
transações, estas devem ser isoladas/íntegras, ou seja, duas ou mais transações concorrentes devem seguir de maneira isolada uma com as outras e as regras de negócio devem ser cumpridas durante a realização das operações na transação independentemente de existirem mais transações de maneira simultânea e, ao final delas, esta integridade deve permanecer.
DURABILIDADE: depois de realizada e confirmada, uma transação deve ser durável, ou seja, não pode desaparecer do banco sem que uma outra transação realize esta operação. 2.3 BANCO DE DADOS RELACIONAIS VERSUS PROGRAMAÇÃO ORIENTADA A OBJETOS Os sistemas de banco de dados relacionais e as linguagens orientadas a objetos consolidaram-se no mercado há muito tempo. Dois paradigmas diferentes, mas que têm que conviver juntos, criando assim esta incompatibilidade semântica entre os paradigmas objeto/relacional. Esta incompatibilidade pode ser solucionada usando banco de dados orientado a objetos, já disponíveis atualmente, no entanto, estes ainda não são tão eficientes e difundidos quanto os bancos de dados
relacionais.
Portanto,
para
que
coexistam
em
um
ambiente
de
desenvolvimento foi elaborada a ORM. 2.3.1 ORM (OBJECT RELATIONAL MAPPER) Técnica de desenvolvimento utilizada para reduzir a impedância da programação orientada a objetos utilizando bancos de dados relacionais. As tabelas do banco de dados são representadas através de classes e os registros de cada tabela são representados como instâncias das classes correspondentes.
9
Com esta técnica, o programador não precisa se preocupar com os comandos em linguagem SQL; ele irá usar uma interface de programação simples que faz todo o trabalho de persistência. Não é necessária uma correspondência direta entre as tabelas de dados e as classes do programa. A relação entre as tabelas onde originam os dados e o objeto que os disponibiliza é configurada pelo programador, isolando o código do programa das alterações à organização dos dados nas tabelas do banco de dados. 2.3.2 HIBERNATE O Hibernate foi criado por desenvolvedores Java espalhados ao redor do mundo, e liderado por Gavin King. É um software livre de código aberto distribuído com a licença LGPL. Consiste em um framework para o mapeamento objeto-relacional escrito na linguagem Java. Este programa facilita o mapeamento dos atributos entre uma base tradicional de dados relacionais e o modelo objeto de uma aplicação, mediante o uso de arquivos (XML) para estabelecer esta relação.
Seu objetivo é diminuir a complexidade entre os programas Java, baseado no modelo orientado a objeto, que precisam trabalhar com um banco de dados do modelo relacional (presente na maioria dos SGBDs). Em especial, no desenvolvimento de consultas e atualizações dos dados.
Sua principal característica é a transformação das classes em Java para tabelas de dados (e dos tipos de dados Java para os da SQL). O framework gera as chamadas SQL e libera o desenvolvedor do trabalho manual da conversão dos dados resultante, mantendo o programa portável para quaisquer bancos de dados SQL, porém causando um pequeno aumento no tempo de execução. 2.4 HERANÇA E POLIFORMISMO HERANÇA: é um princípio de orientação a objetos, que permite que classes compartilhem atributos e métodos, através de "heranças". Ela é usada na intenção de reaproveitar código ou comportamento generalizado ou especializar
10
operações ou atributos. O conceito de herança de várias classes é conhecido como herança múltipla.
POLIFORMISMO: também oriunda da orientação a obejetos, permite que referências de tipos de classes mais abstratas representem o comportamento das classes concretas que referenciam. Assim, é possível tratar vários tipos de maneira homogênea (através da interface do tipo mais abstrato). Caracteriza-se por duas ou mais classes distintas e tem métodos de mesmo nome, de forma que uma função possa utilizar um objeto de qualquer uma das classes polimórficas, sem necessidade de tratar de forma diferenciada conforme a classe do objeto.
Uma das formas de implementar o polimorfismo é através de uma classe abstrata, cujos métodos são declarados mas não são definidos, e através de classes que herdam os métodos desta classe abstrata.
Figura 5 – diagrama de classes herança e poliformismo
Analisando o diagrama acima, temos uma superclasse "Mamífero", e as subclasses "Cachorro", "Macaco", "Homem", que "herdam" de "Mamífero". Podemos dizer que Cachorro "é um" Mamífero, Macaco "é um" Mamífero, Homem "é um" Mamífero. As características definidas na classe Mamífero, estarão presentes nas classes que herdam dela. Todos os Mamíferos terão Mamas e Pelos. Isto é Herança.
11
Além disto, cada classe que herda de Mamífero poderá ter seus próprios atributos que se somarão aos da superclasse. E note que a classe Homem contém uma definição do atributo Pelos. Dando uma razão lógica para nosso exemplo, isto é porque o Homem tem pelos diferentes dos outros mamíferos.
Podemos portanto re-definir na subclasse um atributo que já estava presente na superclasse, dando a ele características diferentes. Isto é Polimorfismo: o mesmo método ou atributo pode ter funcionamento diferente em classes diferentes, mesmo que uma herde da outra.
12
3 CONCLUSÃO Vimos neste trabalho o quão são importantes as estruturas de dados lineares e as principais diferenças entre suas diversas formas conceituais.
Discorremos sobre as propriedades ACID e sua importância para os SGBDs. Abordamos a técnica ORM que viabiliza o casamento entre banco de dados relacionais e programação orientada a objetos, dois consagrados paradigmas da computação e apresentamos uma das várias ferramentas de mercado, Hibernate.
Por último, tratamos dois conceitos vitais em orientação a objetos, herança e poliformismo com a ajuda dos diagramas de classes.
Foi bastante prazeroso e gratificante poder transformar em um documento prático e objetivo todos os conceitos ministrados no 3º período do curso de Análise de Sistemas da UNOPAR e ter a certeza de que os mesmo nos ajudarão em nossas carreiras futuramente.
13
REFERÊNCIAS ASCENSIO, Ana Fernanda Gomes. Estrutura de Dados: algoritmos, análise da complexidade e implementações em Java e C/C++. São Paulo: Pearson Prentice Hall, 2010. NISHIMURA, Roberto Yukio. Banco de Dados II: sistemas. São Paulo: Pearson Prentice Hall, 2009. WIKIPEDIA: http://pt.wikipedia.org/wiki/Mapeamento_objeto-relacional Orientador Pedro Pedreira: https://sites.google.com/site/orientadorpedropereira/Home/fundamentos-deorientacao-a-objetos-e-uml/diagramas-de-classes