Buscar

Recursos da Programação Orientada a Objetos em Java

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 29 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 29 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 29 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Continue navegando


Prévia do material em texto

59
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Unidade II
3 PROGRAMAÇÃO ORIENTADA A OBJETOS
Anteriormente, nós conhecemos a tecnologia Java e vimos, de maneira bastante superficial, que 
essa tecnologia é orientada a objetos. A partir de agora vamos abordar em mais detalhes como o 
Java implementa os recursos que tornam o paradigma orientado a objetos o principal paradigma de 
desenvolvimento de sistemas.
O aspecto mais importante da orientação a objetos é o polimorfismo. O termo polimorfismo origina-se 
do grego e significa muitas formas (poli = muitas; morphos = formas). As principais manifestações 
desse recurso são a sobrecarga, a sobrescrita e o polimorfismo de objetos.
 Lembrete
Toda linguagem orientada a objetos é, em primeiro lugar, uma 
linguagem estruturada. Uma linguagem estruturada é uma linguagem que 
não permite desvios incondicionais (o GOTO do Basic, por exemplo), ela 
permite apenas desvios condicionais (if, for, while e do-while).
3.1 Sobrecarga
A sobrecarga de métodos já foi vista anteriormente, quando abordamos os métodos construtores 
de uma classe. Naquela ocasião, apenas dissemos que uma classe pode apresentar mais de um método 
construtor, desde que estes tenham uma lista de parâmetros diferentes.
A sobrecarga pode ser feita com qualquer método, ou seja, podemos criar quantos métodos 
queiramos em uma classe com o mesmo nome, desde que eles tenham uma lista de parâmetros que 
seja diferente em quantidade, em tipo ou em quantidade e tipo. Quando sobrecarregamos um método, 
estamos dizendo que todos os métodos sobrecarregados realizam a mesma tarefa, mas de maneiras 
diferentes. Considere a seguinte classe:
60
Unidade II
Figura 49 – Sobrecarga de métodos
Note que a classe da figura anterior define quatro versões do método soma(), cada uma com uma 
lista de parâmetros diferentes. A primeira sobrecarga recebe dois int; a segunda três int; a terceira dois 
double; e a quarta três float. Note que os nomes dos parâmetros não fazem a menor diferença, apenas 
os seus tipos. Se na classe acima for criada uma nova sobrecarga, como mostrado na figura anterior, o 
código apresenta erros e não pode ser compilado.
Figura 50 – Exemplo de uma sobrecarga inválida
61
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
O próprio editor de código indica que há um erro na declaração dos métodos nas linhas 5 e 21. 
Ao flutuar o mouse por cima do erro – flutuar significa mover o cursor sobre o erro e não clicar –, 
o editor indica que o método soma(int, int) está duplicado, mesmo que os nomes dos parâmetros 
sejam diferentes.
 Observação
Ao flutuar o mouse sobre um erro no código, pode ser apresentada 
uma solução automática para o erro. Cuidado! Apenas execute a solução 
automática se você entende o que ela está fazendo. Caso não saiba o que 
o editor está fazendo, a situação pode até piorar. Isso ocorre porque a 
solução automática realiza alguma mudança no código para que ele possa 
ser compilado, mas a mudança pode não ser a que você espera. Nesse caso, 
encontrar o erro pode ser ainda mais difícil, pois você já não terá mais uma 
indicação visual.
3.2 Herança
Um dos recursos mais importantes da orientação a objetos é a herança. Ela é um mecanismo que 
permite que uma classe “herde” os atributos e métodos de uma outra classe. No jargão de programação, 
chamamos a classe que herda de classe filha, enquanto chamamos a classe da qual a filha herda de 
classe pai. Outros nomes para classe pai são superclasse e classe geral. A classe filha também pode ser 
chamada de subclasse e classe especializada.
Considere a classe Pessoa, vista anteriormente. Ela é útil para armazenar os dados de uma pessoa 
genérica. Agora considere que desejamos armazenar os dados de um aluno. Muitos dos elementos da 
classe Aluno serão os mesmos da classe Pessoa.
 Observação
Sempre que passar pela sua cabeça a sensação de que algo que você 
está programando é igual a algo que você já programou, tenha certeza de 
que há uma maneira melhor de realizar essa mesma tarefa. Em orientação 
a objetos não se repete código. Sempre que um programador repete um 
código, ele está errando.
Ao criar a classe Aluno, pode-se aproveitar o que já foi feito na classe Pessoa, herdando da classe 
Pessoa. A partir daí a classe Aluno já possui todos os atributos e métodos da classe Pessoa. Ela só precisa 
declarar atributos e métodos que são específicos de um aluno.
62
Unidade II
Figura 51 – Classe Aluno que especializa a classe Pessoa
Na linha 3, a classe Aluno é declarada com a palavra reservada extends, que indica que a classe herda 
da classe Pessoa. A partir daqui, a classe já possui todos os atributos e métodos da classe Pessoa. Note 
que só foram declarados os atributos e métodos que pertencem apenas a um aluno.
Na linha 12, o método setRa() agora faz consistência do seu parâmetro, para ter certeza de que 
ele não é um String vazio. Entretanto, não se pode escrever a comparação ra != “”, pois os operadores 
lógicos não funcionam como se espera quando os operandos são objetos, apenas quando eles são de 
tipos primitivos. Quando a comparação é feita com objetos, como é o caso de Strings, utilize o método 
equals(), que retorna verdadeiro se o objeto que executa o método tem o mesmo conteúdo que o 
objeto no parâmetro do método. Na linha 15, caso o parâmetro recebido pelo método não seja válido, o 
método irá lançar uma exceção do tipo IllegalArgumentException com a mensagem de erro RA inválido. 
Dessa forma, o método que tentou atribuir o RA inválido pode tratar a exceção e tentar obter um valor 
válido para o RA.
 Observação
É uma boa prática de programação lançar uma exceção quando alguma 
rotina de validação de dados não for bem-sucedida. Modifique a classe 
Pessoa para que ela se comporte dessa maneira.
A partir de agora, pode-se instanciar um objeto da classe Aluno, atribuir valores ao seu nome, 
telefone e RA e executar o método apresente().
63
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
3.3 Sobrescrita
Note que o método apresente() apenas informa o nome e o telefone do aluno. Dessa forma, ele deve 
ser modificado. Nós podemos sobrescrever, ou seja, modificar o método na classe filha para que ele se 
comporte da maneira desejada. Essa é mais uma modalidade de polimorfismo.
Figura 52 – Exemplo de sobrescrita
O método apresente() na linha 21 possui exatamente a mesma assinatura do método herdado da 
superclasse, ou seja, ele possui o mesmo nome, os mesmos parâmetros e o mesmo tipo de retorno. Isso 
caracteriza uma sobrescrita do método. Note também que, na linha 23, não podemos mais acessar 
diretamente os atributos nome e telefone, pois ambos são privados na classe Pessoa. Por isso, fazemos 
o acesso por meio de seus métodos acessores.
Nas linhas 27 a 30 é definido o construtor da classe que recebe três parâmetros: nome, telefone e Ra. 
Na linha 28 poderíamos ter feito a atribuição dos valores do nome e telefone diretamente usando os 
métodos acessores dos atributos. Mas a classe Pessoa já realiza essa tarefa em um de seus construtores. 
Nós podemos invocar diretamente tal construtor de dentro de nosso construtor, na primeira linha, 
usando a palavra reservada super, que referencia a superclasse. Essa referência funciona de maneira 
análoga à referência this, mas enquanto this referencia o próprio objeto, super referencia a superclasse.
64
Unidade II
O programa da figura a seguir ilustra a instanciação e o uso de um objeto da classe Aluno:
Figura 53 – Instanciando a classe Aluno
3.4 Polimorfismo
O polimorfismo de classes é o aspecto mais importante da orientação a objetos. Com esse recurso, 
quando bem utilizado, podemos criar soluções simples e eficientes para problemas que teriam soluções 
grandes, trabalhosas e ineficientes se fosse utilizado apenas o paradigma estruturado de programação. 
O polimorfismo de classes é um recurso que permite que um objeto de uma classe seja tratado como 
se fosse de outra classe. Para que isso seja possível, ambas as classesdevem estar na mesma estrutura 
hierárquica, e, além disso, uma delas deve ser um ancestral da outra.
Considere o seguinte exemplo: uma loja de rua permite a entrada de qualquer pessoa por sua porta 
principal. A loja não faz distinção se a pessoa que entra é um aluno, um professor, um funcionário, 
um motorista ou qualquer outra especialização de pessoa. Por outro lado, uma escola possui catracas 
que só permitem a entrada de alunos. Outros tipos de pessoas não têm a sua entrada permitida. 
Em termos de orientação a objetos, a catraca da escola pode ser considerada como um método 
que recebe apenas objetos da classe Aluno como parâmetro. Já a entrada da loja é um método que 
recebe como parâmetro objetos da classe Pessoa. Como Aluno é uma subclasse de Pessoa, é uma 
especialização, é um tipo de Pessoa, o Aluno também pode ser enviado como parâmetro para a loja 
por polimorfismo.
65
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Figura 54 – Exemplo de polimorfismo de classes
66
Unidade II
Nas linhas 7 a 10 é definido o método catracaDaEscola(), que recebe como parâmetro um objeto 
da classe Aluno.
Nas linhas 12 a 15 é definido o método entradaDaLoja(), que recebe como parâmetros um objeto da 
classe Pessoa. Por polimorfismo, como Aluno é um tipo de Pessoa, ele também pode ser passado como 
parâmetro para esse método.
Nas linhas 17 a 25 é feito o código de teste. Nas linhas 18 e 19 são instanciados objetos das classes 
Aluno e Pessoa, respectivamente. Na linha 21 o aluno é passado para o método catracaDaEscola(). 
Na linha 22 a pessoa é passada para o método entradaDaLoja(). Já na linha 24 ocorre o polimorfismo: 
o aluno é passado para o método entradaDaLoja(). Mesmo que esse método receba como parâmetro um 
objeto da classe Pessoa, ele aceita o objeto aluno, pois ele é um tipo de Pessoa. Repare que na terceira 
saída do programa o aluno Joaquim é tratado como uma pessoa, não como um aluno.
 Lembrete
O polimorfismo está presente na maioria das melhores práticas de 
programação orientada a objetos. Por exemplo, quase todos os padrões 
de Projeto são aplicações muito inteligentes do polimorfismo para resolver 
problemas frequentes em programação orientada a objetos. Quanto 
maior for seu domínio sobre esse conceito, melhor será seu desempenho 
como desenvolvedor.
3.5 Modificadores de acesso
Agora que já abordamos os principais aspectos da orientação a objetos, podemos dar mais atenção 
aos modificadores de acesso.
 Observação
Utilizamos os modificadores de acesso private e public para encapsular 
atributos, ou seja, protegemos os atributos tornando-os inacessíveis, 
permitindo o acesso a eles por métodos acessores públicos que fazem a 
consistência de dados.
A orientação a objetos define quatro modificadores de acesso para os membros (atributos e métodos) 
da classe, os quais são adotados pela linguagem Java. Eles são:
• Public (público): qualquer classe que tenha acesso à classe em que o membro está declarado terá 
acesso ao membro.
67
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
• Protected (protegido): apenas a própria classe e suas subclasses têm acesso ao membro. 
Em Java, o modificador protected também permite acesso ao membro por classes do mesmo 
pacote, mesmo que não sejam subclasses.
• Padrão (ou pacote): membros definidos sem nenhuma palavra reservada são de acesso padrão 
ou pacote, ou seja, a própria classe e qualquer classe do mesmo pacote têm acesso ao membro.
• Private (privado): apenas a própria classe na qual o membro é declarado tem acesso a ele.
É uma boa prática de programação definir todos os membros inicialmente com o modificador mais 
restritivo (privado). Conforme a necessidade de acesso ao membro vai surgindo, o modificador de acesso 
deve ser alterado gradativamente na direção do modificador público.
Figura 55 – Exemplo de modificadores de acesso
3.6 Escopo
Os membros de uma classe normalmente pertencem aos seus objetos. Por exemplo, o atributo nome 
da classe Pessoa pertence aos objetos da classe Pessoa. Cada um dos objetos pode ter um valor diferente 
para o atributo nome. Da mesma maneira, o método apresente() só pode ser chamado de um objeto. Isso 
é chamado de escopo de objeto.
68
Unidade II
Um membro pode, por outro lado, pertencer à classe, não aos seus objetos, caracterizando o escopo 
de classe. O escopo de classe é definido pela palavra reservada static. Um método de classe pode ser 
chamado diretamente da sua classe, não sendo necessário instanciar nenhum objeto da classe. Os métodos 
showMessageDialog(), showInputDialog() e showConfirmDialog() puderam ser chamados diretamente 
da classe JOptionPane, sem a necessidade de instanciar um objeto da classe para executar esses métodos.
Da mesma forma, o método main() também é de classe, porque para executar um programa, a 
máquina virtual não irá instanciar qualquer objeto, ela irá simplesmente executar o método da classe 
em que ele foi declarada.
Um atributo de escopo de classe terá o mesmo valor para a classe e para todos os seus objetos. Se o 
seu valor for modificado em qualquer um deles, o valor será modificado em todos.
 Observação
Um método de escopo de objeto é executado em um objeto. Por isso, 
ele terá acesso a qualquer método e qualquer atributo da classe, sejam eles 
de qualquer um dos dois escopos. Por outro lado, um método de escopo de 
classe, quando executado, não tem acesso a qualquer objeto, pois ele 
só “conhece” a sua classe. Por isso, ele não consegue acessar membros 
que sejam de escopo de objeto, ele só pode acessar membros de classe 
como ele próprio.
O exemplo a seguir utiliza um atributo de classe para contar quantas vezes ele foi instanciado.
Figura 56 – Exemplo de classe que conta as suas instâncias
Na linha 5 é declarado o atributo contador de escopo de classe, com o valor inicial 0.
69
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Nas linhas 7 a 9 é definido o construtor da classe. O construtor é executado toda vez que um objeto 
da classe é instanciado, e, quando isso acontece, o atributo contador é incrementado.
Nas linhas 11 a 13 é definido um método acessor para o atributo contador.
Figura 57 – Programa que testa a classe Contador
Nas linhas 9 a 11 a classe Contador é instanciada cem vezes. Nas linhas seguintes ela é instanciada 
mais duas vezes. O conteúdo do atributo contador é apresentado nas linhas 15 a 17.
3.7 Classes abstratas e interfaces
Considere que estamos desenvolvendo um programa de desenho por computador. Esse programa 
usa figuras geométricas, como o retângulo, o triângulo e o círculo. Uma das funcionalidades desse 
programa é calcular a área de todas as figuras no desenho. 
Para aproveitar o polimorfismo, vamos criar uma estrutura hierárquica de classes para modelar as 
figuras geométricas do sistema. Assim, as classes Retangulo, Triangulo e Circulo serão todas subclasses 
da classe FiguraGeometrica. A classe FiguraGeometrica irá definir o método calculaArea(), que será 
70
Unidade II
sobrescrito por todas as subclasses. As sobrescritas do método, então, irão realizar o cálculo correto da 
área de cada figura. Para que o código não fique muito extenso, não vamos encapsular os atributos.
Figura 58 – A superclasse FiguraGeometrica
Nas linhas 6 a 8 é definido o método calculaArea(), o qual existe apenas para permitir o polimorfismo. 
Como não é possível calcular a área de uma figura geométrica genérica, o método retorna um valor 
negativo para indicar que ele não deve ser usado. O mesmo ocorre com o método getNome(), entre as 
linhas 7 e 9, que irá retornar o nome da figura geométrica.
71
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Figura 59 – As subclasses Retangulo, Triangulo e Círculo
As três subclasses sobrescrevem o método calculaArea() entre as linhas 7 e 9, cada uma com a 
equação apropriada. Note que na classe Circulo, o cálculo é feito com a ajuda da classe Math, a qual 
define uma constante com o valor de π (pi) e o método pow(), o qual realiza a potência de raioelevado 
a 2. O método getNome(), entre as linhas 11 e 13, retorna o nome da figura geométrica apropriada. 
72
Unidade II
As subclasses também definem seus construtores, os quais já fazem a atribuição de valores aos seus 
atributos. A seguir, o programa de teste:
Figura 60 – Programa de teste das áreas das figuras geométricas
Entre as linhas 7 e 11 o método formataFigura() recebe como parâmetro um objeto da classe 
FiguraGeometrica e de qualquer uma de suas especializações. Na linha 9 é feita a formatação de um 
String, com o nome da figura e sua área.
No método main(), entre as linhas 13 e 27, é feita a rotina de teste. Na linha 14 é declarado e 
instanciado um vetor de três posições de FiguraGeometrica. Nas linhas 16 a 18, cada uma das posições 
recebe um objeto de uma de cada das classes de figuras geométricas especializadas. Nesse ponto já 
ocorre polimorfismo. Entre as linhas 22 e 24 é feito um laço for aprimorado para percorrer o vetor e 
73
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
obter a sua representação em texto. Cada representação é anexada à variável mensagem, com o caracter 
de escape \n, que representa uma quebra de linha. Na linha 26 é exibida a caixa de diálogo.
O programa acima realiza a sua tarefa, mas não muito bem. O problema está na classe FiguraGeometrica, 
a qual define métodos que não pode implementar e, por isso, faz uma implementação propositalmente 
errada. A orientação a objetos oferece uma alternativa: nós podemos declarar métodos abstratos, ou 
seja, métodos sem implementação. Quando se criam métodos abstratos em uma classe, essa classe 
também deve ser abstrata. Assim, podemos modificar a classe FiguraGeometrica da seguinte forma, e o 
restante do programa pode permanecer inalterado.
Figura 61 – Classe abstrata
Nas linhas 5 e 7 as declarações dos métodos são agora de métodos abstratos. Por isso, eles agora não 
possuem implementação e são terminados com ponto-e-vírgula. A classe agora também deve ser abstrata.
Uma classe abstrata pode definir métodos e atributos concretos (não abstratos). Mas por conter 
métodos sem implementação, uma classe abstrata não pode ser instanciada. Ela só pode ser usada com 
polimorfismo, como foi feito no exemplo. Além disso, as classes que herdam de uma classe abstrata 
devem implementar todos os seus métodos abstratos se quiserem ser classes concretas, caso contrário, 
elas também serão abstratas. Isso é útil para garantir que as subclasses implementaram todos os métodos 
que deveriam ser sobrescritos, caso eles fossem concretos, como na primeira versão deste exemplo.
Considere agora uma classe abstrata que só declara métodos abstratos, como no exemplo anterior. 
Uma classe desse tipo pode ser mais bem modelada como uma interface. Uma interface é uma classe 
abstrata que só define métodos abstratos. Uma classe que realize uma interface (não se usa o termo 
herdar de uma interface) deve implementar todos os seus métodos. Assim, poderíamos ter:
Figura 62 – A interface FiguraGeometrica
74
Unidade II
Na linha 3 estamos declarando uma interface, não mais uma classe.
Como não se pode herdar de uma interface, apenas realizá-la, as classes Retangulo, Triangulo e 
Circulo devem ser alteradas, trocando a palavra reservada extends por implements:
Figura 63 – Classe Retangulo, que realiza uma interface
4 INTERFACES GRÁFICAS
Há duas maneiras de criar interfaces gráficas usando Java. A primeira é escrevendo o código nós 
mesmos. A segunda é usando um editor de interfaces gráficas. A abordagem manual costuma dar ao 
programador muito mais controle sobre a interface que ele está criando, também costuma gerar código 
mais enxuto e eficiente. Já a abordagem com auxílio de um editor de interfaces costuma permitir um 
processo mais rápido de criação da interface.
Existem vários plug-ins que dão a funcionalidade de edição de interface gráfica ao Eclipse. Algumas 
versões do Eclipse já vêm com editor de interfaces gráficas WindowBuilder. Caso a sua versão não 
possua tal ferramenta, você pode instalá-la direto da loja de componentes do Eclipse.
 Observação
Outras IDEs também apresentam ferramentas para a criação de interfaces 
gráficas, como o NetBeans, que sempre contou com tal funcionalidade.
Para instalar o WindowBuilder, clique no menu [Help] -> [Eclipse Marketplace...]. Será apresentada 
uma janela semelhante à da figura a seguir:
75
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Figura 64– Loja de componentes do Eclipse
Para criar uma interface gráfica, vamos usar o Window Builder. Clique com o botão direito em um 
pacote, selecione new... e então other.
76
Unidade II
Figura 65 – Seleção do assistente de criação de janelas
Expanda o grupo WindowBuilder, Swing Designer e escolha JFrame. Clique em Next. Dê o nome 
TelaPessoa à sua classe e clique em Finish. Nesse ponto é apresentado o editor de código com a 
classe TelaPessoa, mas dessa vez há duas abas novas, Source e Design.
77
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Figura 66 – Editor de interfaces gráficas do WindowBuilder no modo código
Selecione a aba Design e maximize a janela de edição dando um duplo clique na aba TelaPessoa. 
A sua IDE deve se parecer com a figura a seguir:
78
Unidade II
Figura 67 – Editor de interfaces gráficas do WindowBuilder no modo desenho
Clique na área da janela para fazer com que suas propriedades sejam exibidas. A seguir, modifique 
seu gerenciador de layout para absolute layout.
79
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Figura 68 – Mudando o gerenciador de layout
 Observação
O uso de gerenciadores de layout é bastante recomendado para tornar 
suas interfaces gráficas mais profissionais e mais amigáveis para o usuário. 
Na palheta de componentes, selecione JLabel e coloque-o na janela. Selecione a propriedade text e 
digite o texto “Nome:”. Tecle enter para confirmar.
80
Unidade II
Figura 69 – Inserindo um rótulo na janela
Selecione agora um JTextiField e posicione-o na janela. Modifique seu tamanho para que fique 
semelhante ao da figura a seguir. Mude também seu nome para textFieldNome.
81
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Figura 70 – Inserindo um JTextField
Insira agora um JLabel com o texto “Telefone:” e um JTextField chamado textFieldTelefone, como 
mostra a próxima figura:
82
Unidade II
Figura 71 – Inserindo os componentes para o telefone
Agora insira um JButton. Mude seu nome para btnApresenta e seu texto para “Apresenta”.
83
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Figura 72 – Inserindo um JButton
Agora vamos associar uma ação ao botão btnApresente. Dê um duplo clique no botão. O editor irá 
criar o código associado à ação de clique e o levará ao código, como mostra a figura a seguir:
Figura 73 – O código de criação do JButton
84
Unidade II
Esse é o código que cria e configura o botão btnApresente. Nas linhas 65 a 68 é criada uma 
instância de uma classe anônima que realiza a interface ActionListener. Essa interface define o método 
actionPerformed(), que é o método que é executado quando o botão for clicado. É nesse método que 
vamos criar a nossa ação, como mostrado na figura a seguir:
Figura 74 – Código executado quando o botão é pressionado
Na linha 68 é chamado o método showMessageDialog(), dessa vez com a janela representada pelo 
objeto instanciado da classe TelaPessoa (TelaPessoa.this). Quando a caixa de mensagem for exibida, 
ela será centralizada na janela do aplicativo. Além disso, o usuário não será capaz de retornar à janela 
sem que tenha fechado antes a caixa de diálogo. A seguir a mensagem é formatada, buscando as 
informações digitadas pelo usuário nos objetos textFieldNome e textiFieldTelefone. O texto é recuperado 
com o método getText().
Figura 75 – Saída gerada pelo programa com interface gráfica
85
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
 Resumo
Iniciamos discutindo os aspectos mais importantes do paradigma de 
programação orientada a objetos. O primeiroé a sobrecarga de métodos. 
Com ela, criamos mais de um método com o mesmo nome, mas com uma 
lista de parâmetros diferentes. A sobrecarga significa que uma mesma ação 
pode ser realizada de maneiras diferentes.
Na sequência vimos o recurso da herança, com o qual podemos criar 
novas classes reaproveitando classes existentes. As classes filhas herdam os 
atributos e métodos da classe pai. Quando uma classe filha precisa modificar 
um método herdado de uma classe pai, ela pode sobrescrever tal método, 
criando um método em sua própria classe com a mesma assinatura do 
método da superclasse, mas com a nova implementação.
Com o polimorfismo podemos tratar um objeto de uma classe como se 
fosse de outra classe, desde que a segunda seja um ancestral da primeira.
Os modificadores de acesso controlam como os membros de uma classe são 
acessíveis de fora dela. Recomenda-se que os membros de uma classe 
sejam sempre declarados com os modificadores mais restritivos possíveis.
O escopo define se um membro pertence à classe ou aos seus objetos. 
Um membro de objeto é o escopo padrão e ele só existe nos objetos. Um membro 
de classe pode ser acessado diretamente da classe, não necessitando da 
existência de objetos da classe.
Finalmente, vimos brevemente como usar o WindowBuilder para criar 
interfaces gráficas no Eclipse.
 
86
Unidade II
 Exercícios
Questão 1. (TJ-PA 2020) Na programação orientada a objetos, a herança é uma técnica de abstração 
que permite categorizar as classes de objetos sob certos critérios, especificando-se as características 
dessas classes. As classes que são vinculadas por meio de relacionamentos de herança formam uma 
hierarquia de herança. Na linguagem de programação Java, o relacionamento de herança é definido 
pela palavra-chave:
A) static.
B) extends.
C) public.
D) new.
E) this.
Resposta correta: alternativa B.
Análise da questão
Um dos recursos mais importantes da orientação a objetos é a herança. Ela é um mecanismo que 
permite que uma classe herde os atributos e métodos de uma outra classe. No jargão de programação, 
chamamos a classe que herda de classe filha, enquanto chamamos a classe da qual a filha herda de 
classe pai. Outros nomes para classe pai são superclasse e classe geral. A classe filha também pode ser 
chamada de subclasse e classe especializada. Ao se criar uma classe filha, pode-se aproveitar o que já foi 
feito na classe pai herdando da classe pai todos os atributos. A partir daí, a classe filha já possui todos 
os atributos e métodos da classe pai. Ela só precisa declarar os atributos e métodos que são específicos 
da classe filha. Assim, a classe filha é declarada com a palavra reservada extends, que indica que a classe 
filha herda da classe pai todos os atributos e métodos da classe pai.
Questão 2. (Ibade 2019) Os modificadores de acesso são padrões de visibilidade de acessos às classes, 
atributos e métodos. Esses modificadores são palavras-chave reservadas pelo Java, ou seja, palavras 
reservadas não podem ser usadas como nome de métodos, classes ou atributos. Os modificadores de 
acesso são classificados conforme as descrições a seguir:
(1) Indica que método ou variável só podem ser acessados de dentro da classe que os criou. 
Uma classe que herde de uma superclasse com atributos declarados de acordo com esse modificador só 
poderá ter acesso a eles através dos métodos públicos da própria superclasse, caso contrário, não haverá 
acesso a estes atributos.
87
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
(2) Indica que o método ou a variável assim declarada possa ser acessada somente dentro do pacote 
em que está contida através de uma subclasse.
(3) Indica que a classe, método ou variável assim declarada possa ser acessada em qualquer lugar e 
a qualquer momento da execução do programa.
Os modificadores de acesso descritos como (1), (2) e (3) são denominados, respectivamente:
A) protected, public e static.
B) dynamic, private e protected.
C) public, static e dynamic.
D) private, protected e public.
E) static, dynamic e private.
Resposta correta: alternativa D.
Análise da questão
(1) Indica que método ou variável só podem ser acessados de dentro da classe que os criou. Uma 
classe que herde de uma superclasse com atributos declarados de acordo com esse modificador só 
poderá ter acesso a eles através dos métodos públicos da própria superclasse, caso contrário, não haverá 
acesso a estes atributos. Private: classe. 
(2) Indica que o método ou a variável assim declarada possa ser acessada somente dentro do pacote 
em que está contida através de uma subclasse. Protected: classe, subclasse e pacote.
(3) Indica que a classe, método ou variável assim declarada possa ser acessada em qualquer lugar e 
a qualquer momento da execução do programa. Public: acesso global.