Você está na página 1de 15

TEXTO DE APOIO DA

DISCIPLINA DE
PROGRAMAÇÃO
AVANÇADA EM JAVA
TEMA I: INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETOS

UNIDADE TEMÁTICA 1.1: CLASSE E OBJETO


Introdução
Nas disciplinas de programação que precedem a disciplina de Programação avançada
(nomeadamente P1 e P2) foram introduzidos os conceitos básicos da programação orientada a
objetos. Sem dúvida ficou claro que este paradigma de programação facilita, em muito, a vida
do programador.

Usando a Programação orientada a objetos (POO), os programas tornam-se legíveis e fáceis de


manter devido à flexibilidade que se tem em introduzir modificações no código.

Nesta disciplina serão introduzidos conceitos avançados relacionados com a técnica de


programação orientada a objetos, estes, são conceitos que quando bem aplicados trazem ganhos
significativos ao processo de desenvolvimento e manutenção de aplicações; estes são os
chamados, pilares da orientação a objetos! São eles: (1) Encapsulamento; (2) Abstração e (3)
Polimorfismo.

Porém, antes de avançar e aprofundar nestes conceitos, vamos fazer uma breve revisão dos
conceitos básicos de programação orientada a objetos. Começaremos por contextualizar o
conceito “objeto” em programação bem como o conceito de classe de objetos. Mais tarde será
apresentada a abordagem aplicada em programação orientada a objetos para depois debruçar-
se um pouco mais nos elementos que compõe uma classe de objetos. Para terminar apresenta-
se os mecanismos de aplicação de classe de objetos bem como a manipulação dos elementos
do objeto.

Objetivos
Ao completar esta unidade temática 1.1, você deverá ser capaz de:
• Compreender os conceitos “classe” e “objeto” na programação orientada a objeto;
• Definir os conceitos “classe” e “objeto”;
• Diferenciar os conceitos “classe” e “objeto”;
• Descrever objetos do mundo real em remos de caraterísticas e habilidades.

Sumário
A programação orientada a objetos é uma técnica de programação que procura aproximar o
código à realidade que nos rodeia. Quando olhamos ao nosso redor vemos objetos, esses
objetos têm suas características, sua forma de estar e propósitos específicos. No mundo real,
os objetos encontram-se agrupados em classes ou famílias de objetos; por exemplo:
eletrodomésticos, automóveis, telemóveis, etc. Uma classe de objetos descreve as
características comuns bem como as habilidades (ou propósito) de cada objeto por ela
representada.

Em programação orientada a objetos os dados são agrupados em estruturas chamadas objetos.


Um objeto é uma coleção de dados relacionados, os quais descrevem uma entidade específica.
Estes dados são manipulados de forma controlada a nível do “objeto”. A manipulação de dados
do objeto é feita por meio de rotinas específicas definidas para esse propósito.

Cada objeto pertence a uma classe (família) a qual descreve as características e habilidades dos
objetos daquela família. Uma classe de objetos é representada em forma textual em ficheiro do
tipo “.java” onde são descritas as características dos objetos por ela representada; estas
características são descritas em forma de variáveis, as chamadas variáveis de instância ou
atributos da classe.
Além das características, uma classe de objetos define as “habilidades” dos objetos, isto é,
aquilo que os objetos [daquela classe] “podem fazer” (o propósito para o qual existem).

Classe e Objeto
A programação orientada a objetos procura aproximar o código à realidade que nos rodeia.
Quando olhamos ao nosso redor vemos objetos, esses objetos têm suas características, sua
forma de estar e propósitos específicos. No mundo real, os objetos encontram-se agrupados em
classes ou famílias de objetos; por exemplo: eletrodomésticos, automóveis, telemóveis, etc.

Uma classe de objetos descreve as características comuns bem como as habilidades (ou
propósito) de cada objeto por ela representada. Na figura 1 temos um exemplo de representação
de classe de objetos. Note que aqui lista-se algumas possíveis características que podem
interessar para descrever a classe de objetos em causa, o automóvel.

Figura 1: Exemplo de uma classe objecto e Listagem de suas características

Em programação orientada a objetos os dados são agrupados em estruturas chamadas objetos.


Um objeto é uma coleção de dados relacionados, os quais descrevem uma entidade específica.
Estes dados são manipulados de forma controlada a nível do “objeto”. A manipulação de dados
do objeto é feita por meio de rotinas específicas definidas para esse propósito.

Cada objeto pertence a uma classe (família) a qual descreve as características e habilidades dos
objetos daquela família. Uma classe de objetos é representada em forma textual em ficheiro do
tipo “.java” onde são descritas as características dos objetos por ela representada; estas
características são descritas em forma de variáveis, as chamadas variáveis de instância ou
atributos da classe. No exemplo apresentado na figura 1, algumas características comuns a
todos os automóveis seriam: marca, modelo, ano fabrico, número de registo, etc.

Além das características, uma classe de objetos define as “habilidades” dos objetos, isto é,
aquilo que os objetos [daquela classe] “podem fazer” (o propósito para o qual existem). No
exemplo do automóvel, algumas habilidades seriam por exemplo: mover-se de um ponto para
outro, travar, transportar, iluminar, etc.

Em POO as “habilidades” dos objetos são representadas em forma de métodos (funções); trata-
se de rotinas que manipulam os dados do objeto, isto é, modificam o estado do objeto!

Considere por exemplo o objeto abstrato “Conta Bancária”. Uma Conta Bancária pode ser
descrita pelo número, titular e saldo; estas são algumas características da Conta Bancária. As
habilidades da Conta Bancária seriam, por exemplo: depositar, transferir e levantar dinheiro.
Neste caso, as habilidades correspondem às operações sobre a Conta. Cada uma das operações
mencionadas, modifica o estado da conta, neste caso em concreto o saldo da Conta.

A abordagem de modificar os dados a partir de rotinas próprias do objeto, garante segurança e


consistência de dados visto que os dados são manipulados de forma controlada pelo próprio
objeto visto que cada objeto “sabe melhor mexer com os seus próprios dados”.

Diferença entre classe e Objeto


Enquanto a classe descreve as características e habilidades de objetos pertencentes a um grupo
ou família, o objeto é uma ocorrência específica de uma classe! Por exemplo, quando pensamos
em automóvel no geral imaginamos a marca, o modelo, o ano de fabrico, o número de registo
e talvez outros atributos que sejam relevantes para descrever o automóvel. Mas quando
pensamos em um automóvel específico (concreto), como por exemplo o automóvel pertencente
a um certo individuo, ou um automóvel que se envolveu em algum acidente ou talvez um
automóvel que foi roubado em uma residência, aí temos respostas às questões do carro no geral.
Por exemplo, sabemos qual é marca do automóvel (exemplo: Toyota), sabemos qual é o modelo
do automóvel (exemplo: Corolla), sabelos qual é o ano de fabrico (exemplo: 2003) e também
sabemos qual é o número de registo (exemplo: CZW 985MC). Trata-se, portanto, de uma
ocorrência específica da classe “Automóvel”.
A classe pode ser considerada um “molde” ou “esboço” de objetos. Um molde é apenas uma
representação, uma ideia ao posso que o objeto tem uma existência, ele ocupa espaço!

Em POO, a classe é considerada “descritor” do objeto e o objeto instância dessa classe. Uma
instância de objeto tem representação na memória do computador.

A figura 2, ilustra uma ocorrência específica de um Automóvel.

Figura 2: Ilustração de uma ocorrência da classe "Carro"


Uma única classe pode ter múltiplas ocorrências, isto é, múltiplas instâncias. Em
princípio um objeto pertence a uma e única classe, embora, graças ao conceito de
polimorfismo, ele possa ser considerado pertencente a múltiplas classes.

Bibliografia
https://www.caelum.com.br/apostila-java-orientacao-objetos
https://docs.oracle.com/javase/tutorial/java/concepts/index.html

UNIDADE TEMÁTICA 1.2: PROCESSO DE


DESENVOLVIMENTO DE APLICAÇÕES COM
ORIENTAÇÃO A OBJETOS
Introdução
Quando se programa baseado no conceito de programação orientada a objetos (POO) deve-se
obedecer a um conjunto de princípios. Conforme referido na Unidade temática anterior, a
programação orientada a objetos assenta em dois conceitos fundamentais, a classe e o objeto.
Nesta unidade será explicado de forma breve o processo de desenvolvimento com orientação a
objetos.

Objetivos
Ao completar esta unidade, você deverá ser capaz de listar explicar os passos envolvidos no
processo de programação orientada a objetos.

Sumário
Quando se programa orientado a objetos, o primeiro passo é a identificação das entidades
envolvidas; de seguida converte-se as entidades em classes de objetos para finalmente
instanciar-se as classes e manipular-se tais instâncias com recurso aos métodos
disponibilizados pelos objetos. É importante que o programador identifique claramente estes
momentos quando estiver a compor a sua solução, pois caso contrário incorre-se ao risco de se
conceber uma solução que não segue corretamente os princípios de orientação a objetos.

Passos para programar orientado a objetos


A programação orientada a objetos começa com a identificação das entidades que farão parte
da aplicação; uma entidade é tudo aquilo sobre o qual se pretende captar, armazenar, processar
e difundir dados. Para cada entidade deve-se identificar quais os dados se pretende agrupar,
estes dados e as respetivas operações que os manipulam ficarão descritos na classe (descritor);
portanto, o segundo passo após a identificação das entidades é a criação das classes de objetos
que serão tratados no sistema.

Após a criação das classes de objeto, o passo seguinte é a composição da solução o que passa
pela criação e manipulação dos objetos das classes [inicialmente criadas]. A manipulação de
objetos equivale ao processamento de dados e é feito recorrendo às “habilidades” do objeto,
que são rotinas que manipulam os dados estas rotinas ficam representadas em forma de
métodos nas classes de objetos.

Para melhor compreensão dos passos anunciados anteriormente vamos considerar o exemplo
seguinte:
“Suponha que que se pretenda criar uma aplicação que auxilie no cálculo da área de um
retângulo. Detalhe os passos necessários para criar a aplicação em causa recorrendo a
técnica de programação orientada a objetos.”

Para este problema, seguindo os passos para programar orientado a objetos, procedemos da
seguinte maneira:

1. Identificar as entidades envolvidas: neste caso, tratando-se do calculo da área de um


retângulo, a entidade associada seria o Retângulo. Para o cálculo da área do retângulo
interessa saber a comprimento e a largura; portanto, estes seriam os dados a agrupar. A
operação sobre estes dados seria o cálculo da área que é o produto entre a comprimento
e a largura.
2. Criar o descritor: trata-se da criação da classe de objetos com seus elementos;
3. Criar a aplicação: que no caso iria criar um objeto de tipo Retângulo e de seguida
calcular a área usando a operação disponibilizada para tal através deste objeto.

Bibliografia
https://www.caelum.com.br/apostila-java-orientacao-objetos
https://docs.oracle.com/javase/tutorial/java/concepts/index.html

UNIDADE TEMÁTICA 1.3: ELEMENTOS DE UMA CLASSE


DE OBJETOS
Introdução
A unidade temática anterior apresenta os passos para a concepção de soluções recorrendo a
técnica de programação orientada a objetos. Nesta Unidade temática 1.3 serão apresentados em
detalhe os elementos que compõe uma classe de objeto.

Objectivos
Ao completar esta unidade temática 1.3, você deverá ser capaz de:
• Listar e descrever os elementos básicos de uma classe de objetos;
• Diferenciar atributos de instância e atributos de classe bem como métodos de instância
e métodos de classe;
Sumario
Uma classe de objetos é a base para o processo de programação com orientação a objetos.
Normalmente em projetos de desenvolvimento, primeiro cria-se as classes de objeto para
depois compor a aplicação. Uma classe de objetos é criada em um ficheiro plano com extensão
“.java”. Dentro de uma classe java podemos encontrar os seguintes elementos fundamentais:
(1) atributos (2) construtores e (3) métodos.

Os atributos descrevem as caraterísticas dos objetos, exemplo: marca, ano fabrico, modelo, no
caso de Automóvel. Os atributos podem ser de dois tipos de atributos: os atributos de instância
e os atributos de classe; o primeiro representa as características intrínsecas dos objetos, o
segundo trata-se de variáveis auxiliares que podem ser usadas a partir da classe. Os atributos
de classes são definidos com recurso à palavra reservada “static”.

O construtor é um método especial que serve para construir as instâncias da classe. Dentro de
uma classe de objetos pode-se definir múltiplos construtores e cada construtor define uma
forma de criação de instância daquela classe. Todo e qualquer objeto (instância de classe) é
criada recorrendo a um dos construtores da classe.

Os métodos representam as habilidades dos objetos, isto é, aquilo que os objetos são capazes
de fazer. Normalmente, eles manipulam os dados do objeto (valores dos atributos)
modificando-os ou processando-os ou ainda difundindo-os. Os métodos dentro de uma classe
de objetos podem ser, métodos de instância ou métodos de classe. Os de instância são aqueles
que manipulam os atributos do objeto ao passo que os métodos de classe são apenas métodos
auxiliares que realizam operações extra. Estes métodos são definidos recorrendo a palavra
reservada “static”.

A cada elemento da classe pode-se associar um modificador de visibilidade. Um modificador


de visibilidade é uma palavra reservada que define as regras de acesso ao elemento da classe.
Existe três modificadores de acesso, a saber: public, private e protected. O modificador
“public” garante que o elemento da classe poderá ser acedido quer dentro da classe onde foi
definido quer fora da mesma. Já o modificador “private” permite acesso apenas a partir do
interior da classe onde o elemento foi definido. O modificador “protected” é usado em contexto
de herança e o mesmo permite acesso do elemento da classe somente dentro da classe onde foi
definido bem como nas subclasses desta.

Elementos essenciais da classe de objetos


Considere o problema apresentado na Unidade temática 1.2. Nele o propósito era calcular a
área do Retângulo. No primeiro passo identificamos os dados e as operações necessários para
o cálculo da área. Em uma classe de objetos, os dados são representados por variáveis de
instância ou atributos; as operações são representadas por métodos. Vamos então esboçar a
classe Retângulo com as caraterísticas mencionadas. A figura 3 ilustra a classe Retângulo e
seus elementos.

Figura 3: A classe e seus elementos


Na figura 3 podem ser observados os 3 elementos fundamentais de uma classe de objetos, a
saber: Atributos; Construtor e Métodos. No ponto em destaque no retângulo 1 temos os
atributos ou variáveis de instância; no ponto 2 temos uma variável de classe; o construtor está
em destaque no ponto 3 e no ponto 4 e 5 temos os métodos da classe. Os métodos definidos no
ponto 4 representam as habilidades dos objetos da classe enquanto que o método definido no 5
é um método da classe. A seguir são apresentados em detalhe os elementos apresentados na
figura 3.
Atributos
Conforme referido antes, os atributos descrevem as características de todos os objetos
representados pela classe de objetos. No caso da classe Retângulo, os seus objetos são
descritos por “comprimento” e “largura”, isso significa que qualquer que seja o retângulo é
descrito por “comprimento” e “largura”; ou por outras: “todo e qualquer retângulo tem
comprimento e largura”. O atributo é definido por um par “tipo de dados, identificador”. A este
par pode se juntar o modificador de visibilidade. No caso dos atributos do Retângulo, aplicou-
se o modificador “public” para o comprimento e “private” para a largura. Um modificador de
visibilidade define as regras de acesso ao atributo, o modificador “public” permite acesso ao
atributo quer dentro da classe onde foi definido quer fora da mesma. Já o modificador “private”
permite acesso apenas a partir do interior da classe onde o atributo foi definido. Para além
destes dois modificadores, existe também o modificador “protected” que será tratado mais
adiante.
Note o atributo “objetosCriados”! Este é ligeiramente diferente dos outros dois devido a
presença da palavra reservada “static”. Trata-se de um atributo de classe em oposição de
atributo de instância. Isso significa que este atributo não faz parte das caraterísticas do
Retângulo e as instâncias do Retângulo não possuirão esta caraterística. Ao passo que as
variáveis de instância só existem em uma instância, as variáveis da classe existem sem
instância.

O construtor
O construtor é um método especial cuja função é a geração de objetos (instâncias) da classe. O
construtor diferencia-se dos restantes métodos da classe (1) por usar o mesmo identificador que
o da classe e (2) por não apresentar o tipo de retorno na sua estrutura.
Todo e qualquer objeto (instância) é criado recorrendo a um construtor, este pode ter sido
definido explicitamente pelo criador da classe ou ser implícito no caso de o criador da classe
não incluir nenhum construtor, neste último caso há possibilidade de se usar o construtor
implícito, este é um construtor que não recebe parâmetros.
Note que dentro da mesma classe de objetos pode se incluir vários construtores desde que
tenham parâmetros diferentes, quer em quantidade quer em tipos de dados.
No exemplo do retângulo foi definido apenas um construtor o qual está delimitado pelo número
três na figura 1.
Os métodos
Os métodos representam as habilidades dos objetos, isto é, aquilo que os objetos são capazes
de fazer. Normalmente, eles manipulam os dados do objeto (valores dos atributos)
modificando-os ou processando-os ou ainda difundindo-os. No caso da classe Retângulo,
foram definidos dois métodos, representando as habilidades dos objetos do tipo Retângulo, são
eles: calcularArea e visualiza. Estes métodos nos dizem respetivamente que (1) “qualquer que
seja o retângulo é capaz de calcular a sua própria área” e (2) “qualquer que seja o retângulo é
capaz de visualizar os seus próprios dados”. Note a presença do método
“imprimirQtdObjetosCriados”, este método à semelhança da variável “objectosCriados” é um
método de classe e não de instância, portanto não representa nenhuma habilidade dos objetos
do tipo Retângulo. Para a sua invocação não há necessidade de existência de instância de classe.
Quanto aos métodos de instância, os mesmos só podem ser invocados sobre uma instância ou
a partir de um ponto no interior da classe.
À semelha dos atributos, os métodos possuem um modificador de visibilidade que define as
regras de acesso aos mesmos.

O uso da palavra reservada “this” em classes de objetos


A palavra reservada “this” é usada para fazer referência aos elementos intrínseco da classe,
nomeadamente, variáveis e métodos de instância. No exemplo da classe Retângulo esta
palavra reservada é usada nas linhas 9 e 10 para fazer referência às variáveis de instância da
classe e na linha 24 para fazer referência ao método “calcularArea” o qual representa uma
habilidade da classe. O uso desta palavra reservada é proibido para atributos e métodos que
não sejam de instância, isto é, métodos e atributos de classe.

Outros elementos da Classe


Além dos elementos apresentados anteriormente, dentro de uma classe podemos encontrar outros
elementos, a saber: (1) definição do pacote (2) importação de casses externas e (3) comentários.

O pacote define o local onde a classed eve ser armazenada no projeto. O uso de pacotes permite melhor
organização do elementos do projeto. Normalmente dentro de um pacote são colocadas as classes e
interfaces relacionados. A definição do pacote dentro de uma classe de objetos aparece na primeira linha
da classe.

A importação permite que classes externas (ao pacote em que a classe está) sejam usadas na classe
corrente.

Os cometários são textos que permite descrever os elementos da classe. É uma boa prática comentar
trecho de código não explícitos que poderiam causar confusão de entendimento do código no futuro.
A figura seguinte apresenta a classe Retângulo com os elementos descritos acima incluidos.

Figura 4: Outros elementos da classe

Neste pedaço de código podemos ver os elementos descritos anteriormente.

No ponto 1 e 5 temos exemplos de comentários internos a classe. Os comentários internos são aqueles
que ficam disponíveis apenas no interior da classe. Este tipo de comentários pode ser em uma linha
(ponto 5) ou em múltiplas linhas (ponto 1). Os comentários de uma linha são iniciados por “//” e os
comentários em múltiplas linhas são iniciados por “/*” e terminados por “*/”.

No ponto 2 temos a definição do pacote. Neste caso a nossa classe ficará armazenada na pasta
“pooa/unidade/_01” do projeto.

No ponto 3, temos exemplo de importação da classe System. A importação é feita indicando o pacote + o
nome da classe. No caso deste exemplo, a classe System fica armazenada no pacote “java.lang”. Note
que neste caso específico, a importação desta classe é meramente ilustrativa pois as classes do pacote
java.lang ficam disponíveis dentro de qualquer classe mesmo sem serem importadas.

No ponto 4 temos exemplo de um comentário de documentação. Um comentário de documentação é


um comentário que fica disponível na documentação da classe. Caso queira-se documentar a API do
projeto, este tipo de comentários fica disponíveis na documentação. Os comentários de documentação
são iniciados por “/**” e terminados por “**/”. Este tipo de comentários fica associados a Classe,
atributos e métodos e ficam sempre por cima destes elementos. No nosso exemplo, o comentário no
ponto 4 está associado ao método construtor.
Bibliografia
https://www.caelum.com.br/apostila-java-orientacao-objetos
https://docs.oracle.com/javase/tutorial/java/concepts/index.html

UNIDADE TEMÁTICA 1.4: INSTANCIAÇÃO E


MANIPULAÇÃO DE OBJETOS
Introdução
A instanciação é o mecanismo pelo qual são criados os objetos de uma determinada classe. A
instanciação vem antes da manipulação dos dados do objeto. Nesta unidade temática vamos
discutir estes dois mecanismos, a instanciação e a manipulação do objeto.

Objectivos
Ao completar esta unidade temática 1.4, você deverá ser capaz de:
• Compreender o processo de instanciação e invocação de métodos sobre instância de
classe.
• Ser capaz de instanciar classes e invocar métodos sobre instancias;
• Diferenciar o uso de métodos e atributos de classe dos métodos e atributos de instância;
• Diferenciar instância e referência a instância.

Sumario
Instanciação é o mecanismo pelo qual são geradas instâncias de classe, isto é, os objetos da
classe. Conforme referido na unidade temática 1.1, um objeto agrega dados e esses dados
podem ser manipulados a partir do próprio objeto recorrendo às habilidades deste. As
instâncias são criadas recorrendo a um dos construtores da classe.

Instanciação e Manipulação de instância


O princípio da programação orientada a objetos é o agrupamento de dados e manipulação dos
mesmos a partir de pontos isolados em relação ao resto do código, isto é, dentro do próprio
objeto. A manipulação dos dados passa primeiro pela instanciação da classe de objetos.
Voltemos ao enunciado do exemplo 1 apresentado na unidade temática 1. O objetivo é calcular
a área de retângulo. Para tal é necessário aplicar a fórmula de cálculo da área sobre o
“comprimento” e a “largura” do retângulo, estes são os dados do cálculo, portanto precisam
estar agrupados e a classe Retângulo tem esse propósito: criar estruturas de dados que agrupem
o “comprimento” e a “largura” do retângulo. Usando a habilidade “calcularArea” será depois
possível calcular a área em causa.
A figura abaixo ilustra o programa completo para o cálculo da área de um retângulo de
dimensões 6X3.

Figura 5: Instanciacao e Acesso aos elementos de Instancia e da classe


Na figura 4, estão destacadas 5 instruções de código (1) os elementos da criação da instância
do Retângulo (2 e 3) a invocação de habilidades do retângulo, respetivamente “calcularArea”
e “visualizar” e (4 e 5) acesso ao atributo e método de classe.
Uma instância de classe fica sempre associada a uma variável, esta variável é chamada
“referência ao objeto”; no nosso exemplo a referência ao objeto é a variável “r”. Qualquer
operação que quisermos fazer sobre o nosso objeto será invocada sobre a referência. Atenção
que, referência não é o mesmo que objeto! Um objeto tem existência física na memória e o
mesmo objeto pode ter várias referências. A referência é apenas um meio para nos referirmos
ao objeto. O mesmo objeto pode ter várias referências!
A invocação dos métodos do objeto é feita sobre a referência. No nosso exemplo, o método
“calcularArea” tem retorno, daí que a sua invocação é feita numa instrução de atribuição com
o seu retorno a ser guardado na variável “área”.
Note a diferença entre métodos de instância e métodos e atributos de classe. Nos pontos 4 e 5
invocamos elementos de classe! Note que eles são invocados diretamente sobre a classe e não
sobre a instância. O mesmo não se verifica na invocação dos métodos e variáveis de instância.

Bibliografia
https://www.caelum.com.br/apostila-java-orientacao-objetos
https://docs.oracle.com/javase/tutorial/java/concepts/index.html

Beira, abril, 2021


O tutor
Jorge Paulino Boane

Você também pode gostar