[Pesquisar este blog]

terça-feira, 16 de janeiro de 2018

POO::Fundamentos-03-Criação de Objetos

POO-F-02-Objetos, Tipos e Classes POO-F-04-Atributos
No mundo real, a existência de qualquer tipo de objeto exige que ele seja previamente criado ou fabricado, possibilitando que possa ser usado. A POO, como um modelo de programação que procura representar a realidade, também exige que os objetos sejam previamente criados para que possam ser utilizados.


Quando um livro é publicado, geralmente são impressos muitos exemplares, ou seja, objetos do mesmo tipo e também iguais em termos de suas características e conteúdo, mas fisicamente distintos. Cada exemplar de um livro específico é um objeto que tem "vida" própria, ou seja, passa a existir assim que sua produção é finalizada; pode ser armazenado, transportado, exibido e comercializado separadamente dos demais exemplares; pode ser usado e consultado; até mesmo descartado e destruído, quando este "ciclo de vida" se encerra, sem que o se passa com um exemplar, ocorra com outro.

Cada livro é um objeto que tem existência independente dos demais objetos, incluindo aqueles iguais (do mesmo tipo, com as mesmas características). Cada livro que existe é uma instância, um objeto distinto de um tipo específico.

Neste sentido, as classes são como modelos para a criação de objetos, pois definem as características (ou atributos) associadas a tais objetos, assim como seus comportamentos (ou operações). Assim, os objetos são sempre criados a partir de uma classe específica que serve como ponto de partida.

A criação de um objeto é, portanto, uma operação importante e especial, tanto que possui um operador próprio na maioria das linguagens de programação OO. No Java e no C# existe o operador new, responsável pela criação de novos objetos, uma operação denominada instanciação.

Além do operador new, é necessária a indicação da classe que originará o novo objeto, como na sintaxe abaixo:

<Classe> objeto = new <construtor>([lista_argumentos]);

Aqui:
  • Classe indica o nome da classe que determina o tipo do objeto;
  • objeto é a variável que "contém" o objeto;
  • new é o operador especial de instanciação;
  • construtor é uma operação especial de cada classe que determina como novos objetos serão criados; e
  • lista_argumentos opcionalmente fornece dados para a criação do novo objeto.
A classe Livro simples que segue, embora vazia, é sintaticamente válida:

class Livro {
}

Como a classe Livro existe, é possível criar novos objetos deste tipo com:

Livro livro1 = new Livro();
Livro livro2 = new Livro();

As variáveis podem ter qualquer nome válido, embora livro1 e livro2 são algo adequadas, pois ao mesmo tempo que dão uma pista sobre o tipo do objeto que contém, permitem diferenciá-los.

Os construtores, em Java e C#, como na maioria das linguagens OO, têm o mesmo nome que as respectivas classes, no caso a classe Livro. Também é comum que, quando nenhum construtor é fornecido pelo programador (nosso caso), o compilador adicione automaticamente um construtor para permitir a criação de objetos, o que se denomina construtor default, que não recebe argumentos. Assim, qualquer classe válida criada permite criar objetos.

Os construtores providenciam a alocação de espaço na memória para armazenamento do objeto, assim como sua inicialização adequada, conforme determinado pelo programador.

Após sua criação, os objetos podem ser utilizados, até que sejam destruídos, ou seja, removidos da memória. A destruição dos objetos ocorre em três situações: (i) por determinação do programador; (ii) porque o objeto sai fora do escopo onde foi criado; (iii) por conta do encerramento do programa.

Assim, as etapas de criação, de utilização e, por fim, de destruição, compõem o ciclo de vida dos objetos pode ser ilustrado como na figura que segue.


Outro aspecto importante é que nos sistemas de programação orientada a objeto, cada instância tem um identificador que permite diferenciar um objeto de outro, mesmo quando são iguais. Como um número de série de um produto qualquer, o número do chassi de um veículo ou o número MAC de uma placa de rede: identificadores únicos no universo das instâncias de um tipo de objeto específico. Aqui temos uma terceira característica importante da POO que é a identidade: cada objeto é único e deve ser univocamente identificado em sistema de programação orientada a objetos.

Com a criação de objetos, acabamos por discutir algumas questões fundamentais da OO:

  • Todo objeto é de um tipo específico/classe específica.
  • Os objetos da mesma classe, ou seja, do mesmo tipo, possuem as mesmas características (atributos) e comportamento (operações).
  • Todo objeto é criado é distinto dos demais, independente de seus tipos.
  • Todo objeto tem um ciclo de vida.
  • Todo objeto é único e pode ser distinguido dos demais.
Precisamos agora dotar nossas classes de características e comportamentos que permitam representar elementos da realidade e, com isso, tornar a técnica da OO útil na resolução de problemas. Atributos e operações são nossas próximas lições.

POO-F-02-Objetos, Tipos e Classes POO-F-04-Atributos


Referências Bibliográficas

[1] JAMSA, K.; KLANDER, L.. Programando em C/C++: a bíblia. São Paulo: Makron Books, 1999.
[2] PAGE_JONES, M.. Fundamentos do Desenho Orientado a Objeto com UML. São Paulo: Makron Books, 2001.
[3] SOMMERVILLE, I.. Software Engineering. 6th. Ed. Harlow: Pearson, 2001.
[4] DEITEL, H.M.; DEITEL, P.J.. Java: como programar. 6a. Ed. São Paulo: Pearson Prentice-Hall, 2005.
[5] SAVITCH, W.. C++ Absoluto. São Paulo: Pearson Addison-Wesley, 2004.
[6] JANDL JR., P. Introdução ao C++. São Paulo: Futura, 2003.
[7] JANDL JR., P.. Java - guia do programador. 3a. ed. São Paulo: Novatec, 2015.
[8] RUMBAUGH, J.; BLAHA, M.; PREMERLANI, W.; EDDY, F.; LORENSEN, W.. Object-oriented modeling and design. Englewoods Cliffs: Prentice-Hall, 1991.

Nenhum comentário: