Vous êtes sur la page 1sur 23

UNIDADE 1 – PROGRAMAÇÃO ORIENTADA A OBJETOS

OBJETIVOS

a) Trabalhar a quebra de paradigma de programação, migrando da estruturada para a


programação orientada a objetos, afim de que se possa ter um embasamento para as novas
tendências de programação;

b) Estimular o aprendizado de conceitos da programação orientada a objetos em Java para que


se tenha nas próximas etapas do curso, pleno êxito de entendimento das situações propostas.

1.1 - CONCEITOS

Para quem está acostumado a realizar a programação de forma estruturada,


provavelmente deve seguir uma das metodologias a seguir (SANTOS, 2004, p.144):

1. Quebrar a tarefa principal em sub-tarefas e estas em sub-tarefas menores, até


que se consiga implementá-las;
2. Implementar procedimentos para resolver tarefas simples e depois agrupá-los em
procedimentos mais complexos, até se chegar à solução principal.

Ambas estão voltadas para uma análise de verbos e ações da descrição do


problema, gerando assim sub-rotinas na forma de procedimentos e funções A
programação orientada a objetos inclui também essas metodologias para que se
possa ser encontrados os métodos que deverão compor o sistema, todavia, o seu
alvo principal é a identificação dos elementos do mundo real envolvidos no
problema. Santos (2004, p.144) reuniu as metodologias da programação orientada a
objetos em:

1. Identificação dos objetos envolvidos com o sistema a ser desenvolvido e sua


representação em forma de classes;
2. Identificação de suas características relevantes e sua representação em
forma de atributos;
3. Identificação de ações realizadas e serviços prestados por esses objetos e
sua representação em forma de métodos.
Portanto, a compreensão da programação orientada a objetos deve ser iniciada
com o entendimento dos conceitos relacionados a ela, o que será visto, então, ao
longo dessa unidade.

1.2 – OBJETOS E CLASSES

Fazendo uma rápida verificação ao redor do que compõe o mundo real, percebe-
se várias entidades que se relacionam entre si, como por exemplo, em uma sala de
aula, um aluno interage com uma caneta, que interage com o caderno, que por sua
vez, interage com uma carteira. Para a programação orientada a objetos, cada uma
dessas entidades corresponde a Objetos.

DICA
Representando algum significado a entidade já é considerada um objeto, mesmo
que não se constitua em algo concreto ou palpável.

Porém, existem vários objetos que possuem características e ações


semelhantes, estes podem ser agrupadas em estruturas chamadas classes, de
acordo com a seguinte representação (Figura 1):

Fig 1 – Representação de Classes

REFLEXÃO
É importante notar bem a diferença entre Classe e Objeto, a classes representam
um molde para os objetos e que a partir delas, podem ser construídos vários objetos
que terão com diferenças os valores de seus atributos.

As partes que compõe uma classe:


a) Nome da Classe: Deverá ser definido um nome para a classe que,
usualmente, possui a escrita com a primeira letra maiúscula e as restantes
minúsculas de todas as palavras que o compõe.
Ex: Aluno, CarroUsado, MeioDeTransporte, etc.

b) Lista de Atributos: Os atributos representam as características dos objetos


que podem ter diferentes valores, como por exemplo, uma classe Aluno pode
possuir os atributos nome, dataNascimento, endereço, fone, entre outros. Um
primeiro objeto poderá ter um valor para nome igual a “João” e um outro
“José”, porém, não deixaram de ter este atributo, diferenciando então objetos.
Outro ponto importante é a notação de atributo, usualmente, os atributos são
escritos com todas as letras minúscula a primeira palavra formadora e as
outras palavras com a primeira letra maiúscula e as restantes minúsculas.
Exemplo: telefoneCelular, placa, dataDeNascimento.

c) Lista de Operações: As operações manifestam o comportamento dos objetos,


informando quais são as ações que eles podem realizar. A notação de um
método é semelhante a de um atributo diferenciando que deverá ser
informados os parâmetros que deverão ser passados para esse método.
Ex: ajustarTelefoneCelular(String fone), capturarDataDenascimento( ), etc..

NECESSIDADE DE MATERIAL EXTRA


Para dúvidas com relação à passagem de parâmetros, rever no material de
programação I no item de sub-rotinas.

De forma prática, primeiramente é feita a construção da classe, definindo os


atributos e métodos que irão pertencer a ela. Para exemplificar, será utilizada uma
classe Aluno (Figura 2).
Fig 2 - Classe Aluno

Esta classe Aluno será codificada seguindo a ordem de primeiro declarar os


atributos para depois serem declarados os métodos, como mostra o código abaixo:

1 public class Aluno


2 {
3 public String nome;
4 public String endereco;
5 public String telefone;
6 public String telefoneCelular;
7 public String email;
8
9 public void realizarAvaliacao()
10 {
11
12 }
13
14 public void efetuarMatricula()
15 {
16
17 }
18 }
Nas linhas de 3 a 7 estão as declarações dos atributos definidos para a classe e
entre as linhas 9 e 17 tem-se a declaração dos métodos.

1.3 - ENCAPSULAMENTO

Na classe anterior, todos os atributos e método possuem na sua declaração a


palavra reservada da linguagem chamada public, porém, o que significa isso?
A palavra encapsulamento deriva de cápsula, ou seja, proteção. Encapsular
um atributo ou um método é proteger a sua visibilidade para outros objetos em
diferentes níveis (Quadro 1).

Quadro 1 - Níveis de Encapsulamento


Nível Descrição Simbologia
public O atributo ou o método tem total visibilidade. +
protected A visibilidade do atributo ou método será somente em #
nível de herança.
private O atributo ou o método tem visibilidade restrita somente a -
mesma classe.

Usualmente a utilização dos atributos é feita com a visibilidade private, não


permitindo que tenham acesso direto a eles. Todavia, existem métodos que terão a
função de ajustar e capturar estes atributos, respectivamente, get e set. Exemplo da
classe aluno com atributos privados:

1 public class Aluno


2 {
3 private String nome;
4 private String endereco;
5 private String telefone;
6 private String telefoneCelular;
7 private String email;
8
9 public void realizarAvaliacao()
10 {
11
12 }
13
14 public void efetuarMatricula()
15 {
16
17 }
18
19 public String getNome()
20 {
21 return nome;
22 }
23
24 public void setNome(String nome)
25 {
26 this.nome = nome;
27 }
28
29 public String getEndereco()
30 {
31 return endereco;
32 }
33
34 public void setEndereco(String endereco)
35 {
36 this.endereco = endereco;
37 }
38
39 public String getTelefone()
40 {
41 return telefone;
42 }
43
44 public void setTelefone(String telefone)
45 {
46 this.telefone = telefone;
47 }
48
49 public String getTelefoneCelular()
50 {
51 return telefoneCelular;
52 }
53
54 public void setTelefoneCelular(String telefoneCelular)
55 {
56 this.telefoneCelular = telefoneCelular;
57 }
58
59 public String getEmail()
60 {
61 return email;
62 }
63
64 public void setEmail(String email)
65 {
66 this.email = email;
67 }
68 }
69
Para cada atributo privado, existirá um par de métodos para suprir a
necessidade do ajuste e da captura da informação do atributo, como no exemplo
anterior, o atributo nome declarado na linha 3 do código, por ser privado, deverá
possuir os métodos getNome() (linhas 19 a 22) e setNome(String nome) (linhas 24 a
27).

DICA
A palavra reservada this faz uma referência ao objeto corrente de uma classe
dentro de quaisquer métodos da mesma (SANTOS,2004, pág. 201), assim, ela foi
utilizada no exemplo para diferenciar o atributo da classe para o parâmetro que foi
passado na assinatura do método.

1.3.1 – Informações sobre o ambiente (Parte I)

Na IDE NetBeans versão 5.0 é possível gera os método de forma automática,


sem precisar codificá-los, necessitando apenas definir quais atributos serão
privados, Vejamos como fazer isso em quatro passos:

a) Primeiramente, a classe será declarada com os atributos privados no Java Editor


(figura 3).
Fig 3 - Classe Aluno Declarada no NetBeans

b) No próprio editor, clica-se com o botão direito do mouse (se a configuração for
para destro) e é feita a seleção do item Refector → Encapsulates Field (Figura 4).

Fig 4 - Escolha do Encapsulate Fields


c) Aparecerá a ferramenta Encapsulate Fields, onde poderão ser escolhidos, dentre
os atributos com visibilidade private, os métodos que são desejados adicionar na
codificação da classe. Como padrão, todos os métodos set e get vêem selecionados
(Figura 5).

Fig 5 - Ferramenta Encapsulte Fields

d) Após ser acionado o botão Next no Encapsulate Fields, e realizado o retorno


para o ambiente principal onde se encontra o Java Editor e então é
aguardada a realização do Refactoring na classe (Figura 6).
Fig 6 - Realização do Do Refactoring

Pronto! O Código será completado com os método get e set que são necessários
para a construção da classe.

1.4 – INSTÂNCIA DE OBJETOS

Segundo Santos (2004, pg 150), instanciar é criar um objeto a partir de uma


classe pré-existente, logo, já ocorreu uma classificação dos atributos e métodos que
ela possui. Para se instanciar um objeto, deve-se utilizar a palavra reservada new da
seguinte forma:

Aluno aluno = new Aluno()

Leia-se: “O objeto aluno tem como molde a classe Aluno e será instanciado a partir
do método construtor Aluno ()”.

DICA
Na orientação a objetos, para se construir um objeto, é necessária a
existência de um método construtor, o qual possui o mesmo nome da classse. Se
esse não existir, a linguagem Java irá atribuir um método construtor com nenhum
parâmetro, como ocorreu com a classe Aluno.

Para o exemplo anterior, será considerada a existência da classe Aluno


construída anteriormente:

1 public class AlunoTeste


2 {
3 public static void main (String[] args)
4 {
5 Aluno aluno = new Aluno();
6 aluno.setNome("Márcio Góes do Nascimento");
7 aluno.setEndereco("Av Assis de Vasconcelos 869");
8 System.out.println(aluno.getNome());
9 System.out.println(aluno.getEndereco());
10 }
11 }

Na linha 5 o objeto aluno é instanciado e então nas linhas subseqüentes é


possível acessar os seus métodos setNome(String nome) e setEndereco(String
endereco) para poder fazer os ajustes de seus atributos e também é possível
acessar os métodos getNome() e setNome() e capturar as informações de seus
atributos.

1.5 – POLIMORFISMO

O polimorfismo permite tratar objetos semelhantes de uma maneira uniforme de tal


forma que é possível que se envie uma mesma mensagem para um conjunto de
objetos e que cada objeto responda de maneira diferente em função da mensagem
recebida.

1 public class Aluno


2 {
3 public String nome;
4 public String endereco;
5 public String telefone;
6
7 Aluno()
8 {
9
10 }
11
12 Aluno (String nome)
13 {
14 this.nome = nome;
15 }
16
17 Aluno (String nome,String fone)
18 {
19 this.nome = nome;
20 this.fone = fone;
21 }
22
23 }

No Código acima, a classe Aluno possui três versões de seu método


construtor (linhas 7 a 21), diferenciadas somente pelas suas assinaturas. Isso só é
possível por que Java consegue é uma linguagem Orientada a Objetos e que
consegue implementar o polimorfismo.

1.6 – HERANÇA

A Herança é uma forma de reutilização de software na qual uma nova classe


é criada, absorvendo membros de uma classe existente e aprimorada com
capacidades novas ou modificadas (DEITEL, 2005, pág.301). Na figura 7, tem-se a
notação deste conceito:
Fig 7 – Uma notação de herança

Neste exemplo, as classes Aluno, Professor e TecnicoAdministrativo fazem


reuso da classe usuário, que, nesta hierarquia, será chamada de superclasse. As
outras classes são chamadas de subclasses.

Analisando a codificação destas classes:

Classe Usuário

1 public class Usuario


2 {
3 public String login;
4 public String senha;
5
6 public void autenticarUsuario()
7 {
8
9 }
10 }

Esta classe é declarada da mesma forma que as anteriores, pois, para a


hierarquia, ela é a superclasse. A diferença será encontrada nas próximas classes:

Classe Aluno
1 public class Aluno extends Usuario
2 {
3 public int matricula;
4 public String nome;
5 public String dataNascimento;
6 public String endereco;
7 public String fone;
8
9 Aluno()
10 {
11 super();
12 }
13 }

Nesta classe e realizada uma extensão a classe Usuário, tornando-a uma


subclasse da classe Usuário. Outra alteração substancial é na declaração do método
construtor (linhas 9 a 12), onde faz-se necessário informar que será construída a
superclasse juntamente com a subclasse.

DICA
A palavra reservada extends em JAVA significa que a classe que possui esta
declaração é uma subclasse da classe que ela estende os atributos e métodos.

DICA
A palavra reservada super representa a referência a superclasse, e o método
super(), o construtor.

As outras duas classes seguem o mesmo principio da classe Aluno:

Classe Professor

1 public class Professor extends Usuário


2 {
3 public String nome;
4 public String endereco;
5 public int qtdTurmas;
6
7 Professor()
8 {
9 super();
10 }
11 }

Classe TecnicoAdministrativo

1 public class TecnicoAdministrativo extends Usuário


2 {
3 public String nome;
4 public String setor;
5
6 TecnicoAdministrativo()
7 {
8 super();
9 }
10 }

1.7 – POLIMORFISMO

Este mecanismo da Orientação a Objetos permite que métodos possam


possuir duas ou mais versões manifestando comportamentos distintos. A distinção
destas versões se dará pelo conjunto de parâmetros que compõe a assinatura deste
método.

1 public class Carro


2 {
3 public String placa;
4 public String chassi;
5 public int qtdPassageiro;
6 public String cor;
7
8 Carro(String placa, String chassi)
9 {
10 this.placa = placa;
11 this.chassi = chassi;
12 }
13
14 Carro(String placa)
15 {
16 this.placa = placa;
17 }
18
19 Carro(String chassi, String placa, int qtdPassageiro, String cor)
20 {
21 this.chassi = chassi;
22 this.placa = placa;
23 this.qtdPassageiro = qtdPassageiro;
24 this.cor = cor;
25 }
26
27 Carro ()
28 {
29
30 }
31 }

Nesta codificação, tem-se quatro versões do método construtor: A primeira


versão (linhas 8 a 12) possui a sua assinatura com dois prâmetros, a segunda
(linhas 14 a 17) possui assinatura com apenas um método, a próxima (linhas 19 a
25) vem com quatro parâmetros, cada um deles representando um atributo da classe
e a última não possui nenhum parâmetro na assinatura.

1.8 - INTERFACE

A tendência natural quando se constrói objetos no mundo real é realizar a


padronização, informar quais são as ações que esses deverão realizar para serem
classificados de acordo com o seu comportamento. Por Exemplo, em uma linha de
produção de aparelhos em geral, para se definir o que é um eletro-eletrônico é
instituído que ações ele deverá fazer, como por ex. ligar, desligar e ajustar a
voltagem, entre outras.

Fig 8 - Interface de um Eletro-eletrônico


Como se verifica na Fig. 8, esta classe que possui a definição da padronização dos
outras é chamada de Interface.

A codificação da estrutura acima:

Interface IEletroEletronico

1 public interface IEletroEletronico


2 {
3 public void ligar();
4 public void desligar();
5 public void ajustarVoltagem();
6 }

A declaração da interface tem algumas diferenças com relação à declaração


de uma classe, como pode ser verificado na linha 1 do código acima. Além disso, ela
possui somente a assinatura dos métodos que a compõe.As outras classes seguem
declaradas abaixo:

Classe Televisão

1 public class Televisao implements IEletroEletronico


2 {
3 public void ligar()
4 {
5
6 }
7
8 public void desligar()
9 {
10
11 }
12
13 public void ajustarVoltagem()
14 {
15
16 }
17
18 }
Para informar que a classe utiliza uma interface, em sua declaração (linha1) é
realizada a implementação dela, através do implements.

DICA
A declaração implements será sempre utilizada para fazer referência a uma
interface.

As outras classes também irão possuir a implementação da interface:

Classe DVD

1 public class Dvd implements IEletroEletronico


2 {
3
4 public void ligar()
5 {
6
7 }
8
9 public void desligar()
10 {
11
12 }
13
14 public void ajustarVoltagem()
15 {
16
17 }
18
19 }

Classe VideoCassete

1 public class VideoCassete implements IEletroEletronico


2 {
3 public void ligar()
4 {
5
6 }
7
8 public void desligar()
9 {
10
11 }
12
13 public void ajustarVoltagem()
14 {
15
16 }
17
18 }
Todas as classes que implementaram a interface IEletroEletronico
implementaram os métodos ligar(), desligar() e ajustarVoltagem().

1.8.1 - Informações sobre o ambiente (Parte II)

No NetBeans, para se trabalhar com uma interface, deve ser utilizada a


opção Java Interface… para a sua criação, como mostra a figura 9:

Fig 9- Opção Java Interface no NetBeans

Depois de construída a Interface, quando se realiza a implementação


dela em outra classe, o NetBeans informará que alguma coisa está faltando
acrescentar a ela (Figura 10).
Fig 10 - Informação de erro na classe

Então, para otimizar o trabalho do desenvolvedor, ele possui um recurso


de completar o código com os métodos que estão faltando a serem
implementados na interface. Ela fica no canto da declaração da classe (Figura
11).

Fig 11 - Ferrammenta que permite adicionar os métodos que falatam ser implmentados
Pressionando Alt + Enter, irá aparecer a opção de Implement all abstract
methods, que irá adicionar todos os métodos que necessitam de
implementação nesta classe.

1.9 – DIRETIVAS ESPECIAIS

1.9.1 - static
Quando somente uma cópia de uma classe em particular deverá ser
compartilhada com todos os objetos desta classe, será necessário utilizar um
campo static nos atributos e métodos. O uso poderá ser parcial ou total,
dependendo de quais elementos da classe possui essa diretiva.
Desta forma, não é necessário ter uma instancia direta do objeto para ter
acesso ao elemento que contem a diretiva, ele poderá ser acionado
diretamente da classe.

1.9.2 - final
A palavra-chave final é utilizada para representar que uma variável não
poderá ser modificada no decorrer da programação, representando assim uma
constante.

SÍNTESE DA UNIDADE

A Programação Orientada a Objetos difere-se da estuturada por focar


principalmente nos objetos e não somente ns sub-rotinas que fazem parte de
um certo domínio, e, nestes objetos, são estudados as suas características
(atributos) e suas ações (classes).Os objetos podem ser agrupados em
classes, que a partir delas, como uns moldes, objetos podem ser criados.
Dentre os conceitos de orientação a objetos destacam-se três conceitos:
Encapsulamento, polimorfismo e Herança. O primeiro diz respeito a visibilidade
de classes, atributos e métodos, o segundo a diferentes comportamentos de
um mesmo método e o terceiro a capacidade de se realizado o reuso de
classes através da utilização de hierarquia dos componentes das classes.
As Interfaces servem padronizar a implementações de métodos em
diferentes classes e sempre que o encapsulamento de um atributo for privado,
deverão ser gerados os métodos públicos do tipo set e get para permitir
respectivamente, o ajuste e a captura do seu valor.

Vous aimerez peut-être aussi