Ir para o conteúdo

Programação Orientada pelos Objectos

Programação Orientada pelos Objectos1 é dos pontos tidos como mais complicados na aprendizagem de Java, não sendo uma questão exclusiva de Java, é mesmo assim um ponto fundamental na sua aprendizagem e correcta utilização.

Java é uma linguagem orientada pelos objectos e que depende extensivamente desse paradigma, é fundamental a correcta compreensão do paradigma para que se possa programar e usar com sucesso a linguagem2.

É comum Java ser ensinado sem grande preocupação com o paradigma, o resultado é que o programador que está a aprender sabe usar a sintaxe, os seus programas funcionam, conhece as bibliotecas e classes mais comuns da plataforma, mas faz uma utilização errada da tecnologia. As consequências podem ir desde programas que são mais lentos do que seria de esperar, até a sistemas difíceis de implementar e gerir. Se Java é uma linguagem que segue o paradigma de POO3, então ao programarmos em Java devemos seguir esse paradigma, caso contrário, existem muitas outras linguagens que poderão ser usadas e que até se poderão adequar melhor.

O Que é Programação Orientada pelos Objectos

A Programação Orientada pelos Objectos pretende modelar os problemas aproximando-os da vida real e dos objectos que vemos no dia a dia. Consiste assim, em ver um programa como um conjunto de entidades, que interagem entre si através do uso de mensagens.

Olhando em volta, podemos ver todo um conjunto de objectos reais com que interagimos, sejam eles o computador onde trabalhamos, composto por vários outros pequenos objectos, seja a cadeira, secretária, ou qualquer outro material que se encontra à nossa volta. Estes objectos possuem várias características ou atributos como a cor, o volume, a forma, alguns o som que emitem, etc. E nós interagimos com estes objectos fazendo uso dos seus vários comportamentos. Por exemplo, usando a teclas do teclado enviamos mensagens para o computador de modo a escrever texto. Usando a maçaneta da porta abrimos ou fechamos a porta. Todos os objectos que nos rodeiam possuem um comportamento.

Os objectos que desenvolvemos em POO são similares no sentido em que também eles possuem atributos e comportamentos. Estes são os elementos que nós, como programadores, temos de criar.

A definição dos objectos é criada através de classes, os atributos são guardados usando variáveis, e os comportamentos é definido com a criação de métodos.

Uma Classe não é um Objecto

Apesar de falarmos sempre em objectos, e de pensarmos em objectos, ao programarmos e desenharmos o nosso sistema, usamos classes. Estas classes, embora intimamente ligadas aos objectos, não significam a mesma coisa. Esta distinção pode ser algo estranha de perceber.

Chamamos a uma classe a representação, o esquema, a planta ou até, o molde do objecto. A classe define o comportamento do objecto, os seus atributos, a relações que estabelece com outros objectos, mas é apenas uma representação. A classe é apenas o ficheiro de código e o código que escrevemos nele4.

Ao programarmos definimos um objecto através da construção da classe, essa construção é feita através de código, onde dizemos quais os atributos que o objecto irá ter e que comportamentos irá expor aos outros objectos do programa.

Um objecto, em contrapartida, existe em memória, contém valores no seus atributos, exprime um estado no nosso sistema. Por exemplo, se definirmos a classe Roda, com os atributo raio e o método calcularDiametro, estamos a definir como será um objecto do tipo Roda. Enquanto o nosso programa não estiver em execução, a classe só por si não faz nada, mas ao iniciarmos o programa, podemos instanciar o nosso objecto e dessa forma termos um objecto roda a partir da nossa classe.

Objecto ou Instância?

Objecto ou instância é o mesmo, nós obtemos um objecto através do processo de instanciação, daí podermos dizer que o que temos é um objecto ou uma instância de determinada classe.

Durante o restante tutorial tentaremos referir-nos sempre do mesmo modo, para não causar confusão, usaremos sempre "objecto" para nos referimos a um elemento com estado, que existe em memória no nosso computador durante a execução da aplicação. Evitaremos usar a palavra instância5.

Conclusão

Esta primeira abordagem a POO oferece apenas uma visão teórica da programação, mas essa visão teórica é importante reter para que a parte prática possa ser aplicada correctamente.

Nem sempre nos será possível ou útil seguir à risca o conceito de objectos, mas é importante perceber quando se pode ignorar a criação de um objecto ou quando é útil exagerar no número de objectos que o sistema tem. No fundo, tudo no nosso programa poderá ser transformado em objectos e também é possível desenvolver todo um programa em Java, perfeitamente funcional, usando apenas um ficheiro com o método main, mas tanto uma situação como a outra serão extremos para os quais a linguagem Java não é uma boa escolha.

Nas secções seguintes iremos abordar alguns pontos fundamentais da POO, que são importantes para que consigamos aplicar a teoria no nosso desenvolvimento prático:

E ver como os conceitos teóricos se aplicam à linguagem Java:


  1. Object Oriented Programming é normalmente traduzida para Programação Orientada a Objectos mas a tradução correcta será Programação Orientada pelos Objectos. 

  2. Java não é uma linguagem orientada pelos objectos pura uma vez que possui tipos de dados primitivos, estes tipos de dados, embora possam ser encapsulados dentro de objectos, não o são nativamente. 

  3. Programação Orientada pelos Objectos 

  4. Em Java, um ficheiro tem tipicamente apenas uma classe 

  5. A escolha de uma palavra por outra é meramente arbitrária, ambas designam a mesma entidade, ambas se referem ao mesmo.