Um problema muito comum enfrentado por quem precisa utilizar programas que exportam ou importam informações a partir de arquivos gerados por outrem, é a incompatibilidade entre versões. Às vezes, um documento de texto ou um arquivo de imagem criado com uma versão de um software não pode ser aberto ou utilizado corretamente por outra versão do mesmo software, ou ainda por outro software de função equivalente.
Atualmente é grande o número de programas, formatos de arquivo e plataformas que precisam ser interconectadas. Por exemplo, é bem provável que os dados que sejam inseridos em uma aplicação desktop, sejam vistos posteriormente em uma aplicação na web ou enviados para algum dispositivo móvel.
No início havia pouco problema, porque também o número de plataformas era reduzido. Basicamente havia um ou dois sistemas operacionais e o formato usado era o texto puro, seguido de um arquivo indicando o layout, indicando onde um campo terminava e outro começava, basicamente indicando a coluna de início e o comprimento esperado dos dados.
Também não era problema o idioma usado, pois no início da programação o inglês imperava e coisas como acentos e caracteres especiais – que complicam a interoperabilidade quando projetos rodam em idiomas diferentes – ainda não eram suportadas.
Com a evolução, surgiram questões que precisaram ser resolvidas e a troca de dados entre os programas foi o ponto primeiro a ser atacado. Ao ler isto, pode-se ter a impressão de que a interoperabilidade é uma questão menor, porque os arquivos de texto são suficientemente eficazes para armazenar dados e facilmente de serem manipulados. Mas vejamos alguns dados:
- Textos precisam ser representados de forma linear e contínua. Como fazer para representar objetos complexos que possuem objetos aninhados e listas de outros objetos?
- Cada idioma tem o seu conjunto de caracteres específico. Considere a simples tarefa de enviar um texto em português para um programa sendo executado no idioma inglês (que como sabemos, não tem acentos nem os mesmos símbolos do nosso idioma).
- Com o surgimento de linguagens orientadas a objeto, os dados passaram a ser estruturados de uma forma mais rica e complexa, para que pudesse se representar o mundo real através de analogias como modelos (classes) e objetos (instâncias).
Logo, para que uma aplicação possa usar os dados, é necessário saber como estão estruturados, conhecendo não só os nomes usados, mas também os tipos de dados.
Uma solução abrangente
Não demorou e começaram a surgir formas de se representar estes dados de uma forma eficaz e que pudesse ser adotada pelo maior número de aplicações: a serialização.
Em linhas gerais, ela consiste em descobrir a estrutura de um determinado objeto ou dado e prepará-lo para ser armazenado ou transmitido pela rede de uma maneira portável, que possa ser lida por outra aplicação que conheça o padrão. Neste processo são transmitidos:
- A estrutura dos dados – nomes de propriedades, seus tipos e hierarquia;
- Os dados propriamente dito;
- Como fazer para restaurar os dados.
Usando uma analogia, a serialização é o teletransporte do mundo do desenvolvimento de software. Você coleta todas as informações sobre o dado a ser serializado, ordena esses metadados (dados sobre dados) de alguma forma e transmite.
Na outra ponta, o programa que for ler, já conhecendo o protocolo e o funcionamento deste processo, materializa o objeto usando esses metadados.
Assim, o fluxo de serialização pode ser simplificado da seguinte forma;
- Descobrir a estrutura do objeto: quais os nomes dos seus elementos, objetos, propriedades e quais os seus tipos;
- Fazer o mesmo para cada objeto aninhado até que não haja mais nenhum a ser descoberto;
- Associar os valores aos objetos;
- Transformar os dados para envio usando um formato pré-estabelecido.
Embora a colocação destes passos possa parecer simples, considere como fazer para descobrir quais são as propriedades e elementos de um objeto, sendo que você não tem acesso ao código do mesmo, apenas uma amostra de uma instância deste objeto. Isto é ...
Desbloqueie toda a DevMedia
-
+2000 artigos e vídeos
-
+40 trilhas sobre Front-end, Back-end, IA e muito mais
-
+5000 exercícios práticos
-
Mentorias ao vivo individuais