Persistência em Software Orientado a Objetos: Soluções de Mapeamento Orientador: Marco Antônio Pereira Araújo Co-Orientadora: Alessandreia Marta de Oliveira Julio Marcelo Santos Daibert Agenda • • • • • • • • • Motivação Contextualização Mapeamento Objeto-Relacional Camada de Persistência Framework de Persistência Resultados Próximos Passos Conclusão Referências 2 Motivação • Crescente utilização do paradigma orientado a objetos no desenvolvimento de software • Necessidade de persistência dos objetos em alguma estratégia de armazenamento • Atualmente os banco de dados orientado a objetos não são maduros o suficiente 3 Contextualização • Persistência de Objetos • Estratégias de Persistência em Banco de Dados: – Orientado a objetos, objeto relacional e relacional • No contexto deste trabalho é apresentado uma abordagem de persistência de objetos em banco de dados relacional 4 Mapeamento Objeto-Relacional • O modelo relacional de dados difere substancialmente do modelo orientado a objetos • Modelo Relacional: – Tabelas – Linhas (tuplas) – Colunas • Modelo Orientado a Objetos: – Classes – Atributos – Objetos 5 Mapeamento Objeto-Relacional • Consiste em mapear as classes, seus atributos e seus relacionamentos para o modelo relacional • Escolhendo um OID (Object Identification) • Mapeando atributos para colunas • Mapeando classes para tabelas 6 Mapeamento Objeto-Relacional • Mapeando Herança – Três estratégias para o mapeamento de heranças 7 Mapeamento Objeto-Relacional • Mapeando Relacionamentos – Do Tipo Um (1:n e 1:1) – Do Tipo Muitos (n:n) 8 Camada de Persistência • Estrutura agregada ao sistema responsável pela persistência e manipulação dos objetos • Três estratégias para persistência de objetos em um banco de dados relacional: – Camada SQL 9 Camada de Persistência – Camada de Classes de Dados – Camada de Persistência (Enfoque deste trabalho) 10 Framework de Persistência • Conceito: Solução completa e genérica para camada de persistência de objetos: – – – – Conexão ao banco de dados relacional Mapeamento Persistência de Objetos Manipulação de Objetos • • • • Create - Criar Retrieve - Recuperar Update - Atualizar Delete - Excluir 11 Framework de Persistência - DePO • DePO (Delphi Persistent Objects) – Ambiente de Desenvolvimento • Linguagem Delphi / Kylix – Plataforma Suportada • Windows / Linux – Compatibilidade com SGBD Relacional • Todos – Estratégia de Mapeamento • XML ou .pas agregado ao sistema – Valor • Freeware e OpenSource 12 Framework de Persistência - DePO – Estratégia para Persistência • Classe que será persistida herda da classe persistente do DePO – Estratégia para Relacionamento Herança • Uma tabela para cada classe – Estratégia para Relacionamento do Tipo Um • Chave estrangeira na tabela referenciada e/ou que referencia – Estratégia para Relacionamento do Tipo Muitos • Cria-se outra tabela para o manter o relacionamento • Suporte ao Tipo Coleção de Objetos • Transparente ao programador 13 Framework de Persistência - DePO • Estudo de Caso 14 Framework de Persistência - DePO – Configurando os Componentes DePO 15 Framework de Persistência - DePO – Configurando os Componentes DePO 16 Framework de Persistência - DePO – Mapeamento TPessoa = class(TdpoPersistentObject) private FCodigo: Integer; FNome: String; published property Codigo: Integer read FCodigo write FCodigo; property Nome: String read FNome write FNome; end; TProfessor = class(TPessoa) private FCPF: Integer; published property CPF: Integer read FCPF write FCPF; end; 17 Framework de Persistência - DePO – Mapeamento with dpoDBMappingManager.Classes.Add do begin ClassObject := TProfessor; InheritsMappingFrom := TPessoa; StorageName := 'Professor'; with AttributesMapping.add do begin AttributeName := 'Codigo'; IsOid := True; ColumnName := 'Codigo'; IndexType := idxUnique; Required := True; end; with AttributesMapping.add do begin AttributeName := 'CPF'; IsOid := False; ColumnName := 'CPF'; Required := True; end; end; 18 Framework de Persistência - DePO – Manipulação dos Objetos • Instanciação e Persistência var Aluno: TAluno; begin Aluno:= TAluno.Create(dpoDBXMechanism); Aluno.Codigo:= '1'; Aluno.Nome:= 'José da Silva'; Aluno.Matricula:= '2002102013'; Aluno.Save; end; 19 Framework de Persistência - DePO – Manipulação dos Objetos • Recuperação var Aluno: TAluno; begin Aluno:= TAluno.Create(dpoDBXMechanism); Aluno.Codigo:= '1'; if not Aluno.Retrieve then begin MessageDlg('Aluno não existe', mtWarning, [mbOK], 0); end; end; 20 Framework de Persistência - DePO – Manipulação dos Objetos • Atualização var Aluno: TAluno; begin Aluno:= TAluno.Create(dpoDBXMechanism); Aluno.Codigo:= '1'; if Aluno.Retrieve then begin Aluno.Nome:= 'Joaquim Souza'; Aluno.Save; end; end; 21 Framework de Persistência - DePO – Manipulação dos Objetos • Exclusão var Aluno: TAluno; begin Aluno:= TAluno.Create(dpoDBXMechanism); Aluno.Codigo:= '1'; if Aluno.Retrieve then begin Aluno.Delete; Aluno.Save; end; end; 22 Resultados • Submissão de artigo à revista ClubeDelphi: “Persistência de Objetos no Delphi: Introdução ao framework DePO (Delphi Persistent Objects)” 23 Próximos Passos • Estudo dos frameworks: – – – – – IO (Instant Objects) TiOPF (TechInside Object Persistence Framework) ECO (Enterprise Core Objects) Miolo Hibernate • Reestruturação do relatório monográfico para buscar maior didática • Estudo comparativo entre os frameworks • Divulgação e disponibilização dos resultados para 24 a comunidade acadêmica Conclusão • Os frameworks buscam suprir as necessidades do desenvolvimento orientado a objetos, unindo: – A Maturidade, – A Confiança, – E a Rapidez dos bancos de dados relacionais 25 Referências • AMBLER, S. W. Mapping Objects To Relational Databases. Disponível em: <http://www.ambysoft.com/mappingObjects.html>. Acesso em: 10 jun. 2005. • AMBLER, S. W. Análise e Projeto Orientado a Objeto. Rio de Janeiro: Infobook, 1997. • AMBLER, S. W. The Design of a Robust Persistence Layer for Relational Databases. Disponível em: <http://www.ambysoft.com/persistenceLayer.html>. Acesso em: 10 jun. 2005. • SATZINGER, J.; ORVIK, T. Object-Oriented Approach. USA: Course Technology, 1996. • TAFNET, M. A.; CORREIA, C. H. Análise Orientada a Objetos. Florianópolis: Visual Books, 2001. 26