Serialização de Objectos
Tags: serialization, oop, php, programming
Published: 2022-09-05 07:12:36


A serialização é o processo de converter um objeto em um fluxo de bytes para armazenar o objeto ou transmiti-lo para a memória, um banco de dados ou um arquivo. Sua finalidade principal é salvar o estado de um objeto para recriá-lo quando necessário. O processo inverso é chamado **desserialização**.

O objeto é serializado para um fluxo que carrega os dados. O fluxo também pode ter informações sobre o tipo do objeto, os atributos e os valores dos atributos. Em seguida, o objeto pode ser armazenado em um banco de dados, um arquivo ou uma memória.
 

## Onde usar a Serialização?
- Transmissão de um objeto pela rede;
- Armazenamento de um objeto no disco;
- Armazenamento de dados em bancos de dados;
- Envio de um objeto para um aplicativo remoto usando um serviço Web;
- Passar um objeto de um domínio para outro;
- Passar um objeto por um firewall como uma cadeia de caracteres JSON ou XML;
- Chamadas de procedimento remoto (RPC) , por exemplo, como no SOAP ;
- Distribuição de objetos, especialmente em engenharia de software baseada em componentes , como COM , CORBA , etc.
 

## Algumas Bibliotecas e/ou funções de Serialização nas Linguagens populares
- PHP: serialize, unserialize, json_encode, json_decode,;
- Javascript: Json - Parse e Stringify;
- C#: System.Text.Json e System.Xml.Serialization;
- Java: ObjectInputStream, ObjectOutputStream
- Python: Pickle;
- Elixir: JsonSerializer;
- Kotlin: serialization.Serializable
- Rust: Serde;
- Go: Marshal.


## Precauções com a Serialização
A serialização não deve ser usada com objetos muito grandes, pois oferece uma sobrecarga significativa.
Objetos grandes podem demandar significativamente os requisitos de memória de seu aplicativo, pois os fluxos de entrada/saída do objeto armazenam em cache referências ao vivo para todos os objetos gravados ou lidos no fluxo até  que seja fechado ou redefinido.

## Sugestão:
A maioria das linguagens fornecem recursos para serialização de objectos. A serialização é um conceito independente das linguagens de programação.
É possível implementar sua serialização para o formato que desejar. O recomendando é usar componentes prontos e oferecidos pela linguagem de form a evitar retrabalho.
Sempre que possível, usar a serialização JSON ou XML devido a facilidade de manipulação.
 

## Exemplo
Serialização e Desserialização de um objecto cliente. Um cliente possui nome, sexo, peso e altura. Mostrar os dados do cliente e Calcular o Índice de Massa Corporal (IMC).
**Linguagem**: PHP
**Tipo ou Abordagem**: Serialização no arquivo.


Serialização
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0lw9b79h0l27cnjh46r5.jpg)

Etapas da Serialização
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w52ows42mhcslizfdl54.jpg)

Código fonte da Classe cliente
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qfd3mtij3vei9odxxwz3.jpg)

Código fonte da Serialização
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/irnur2v14v9058sdws50.jpg)

Objecto serualizado no ficheiro .dat
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fcj86ej4g50fcy8qcm1o.jpg)

Código fonte da desserialização
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mglxopcxgf1f0xf4a630.jpg)

Serialização do Objecto
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kls858y5ev8gtbm9eucr.jpg)

Recuperação do objecto
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n50rfag4i05qr0aals1j.jpg)