Prática de Introdução à Programação Orientada a Objetos em Java (3)
Conceitos I (I/O)
Estude a biblioteca de Entrada e Saída em Java, chamada Swing
, a qual introduz
a entrada e saída de dados em janelas, campos de texto e botões.
Exercícios
Conceitos II (Subclasses e Herança)
Subclasses e Herança são conceitos peculiares à programação orientada
por objetos, introduzidas como mecanismos para facilitar o aproveitamento de classes
já desenvolvidas na construção de novos programas (classes).
Uma classe D pode ser definida como subclasse
de outra classe C.
Nesse caso, C é chamada de superclasse
de D.
O mecanismo de definição de subclasses introduz, portanto, uma hierarquia
entre as classes definidas em um programa.
Uma classe que não é definida explicitamente como subclasse de nenhuma outra classe
é subclasse da classe Object
- a classe de nível mais alto na hierarquia
de classes do Java.
As relações de subclasse
e superclasse
são transitivas. Quando necessário,
pode-se distinguir entre uma subclasse (superclasse) direta
e as demais
subclasses (superclasses).
Todas as classes são direta ou indiretamente, subclasses da classe Object
.
Uma subclasse herda
de suas superclasses os métodos e as variáveis definidas
nessas superclasses. Um subclasse pode, no entanto, redefinir métodos existentes
nas superclasses.
Considerando o exemplo, que representa pontos em um
espaço tridimensional, é uma subclasse da classe Ponto
vista anteriormente em aula.
Isto é indicado pelo uso de extends Ponto
.
A classe Ponto3D
herda as variáveis as variáveis de Ponto
(x e y) e
define uma terceira variável (z). Os métodos move
e distancia
de Ponto
são redefinidos na classe Ponto3D
.
A palavra super
permite o uso de nomes definidos na superclasse direta,
que foram redefinidos na subclasse. Neste exemplo, super.move
refere-se
ao método move
da classe Ponto
.
A palavra reservada super
pode ser usada também para fazer com que o corpo
do construtor de uma superclasse seja executado. Veja o uso de super(a,b)
no construtor de objetos da classe Ponto3D
. Esse comando faz com que o
corpo do construtor da classe Ponto
seja executado.
Uma característica importante das linguagens orientadas a objetos é que um
objeto de uma subclasse pode ser usado em qualquer lugar em que um objeto
de uma superclasse pode ser usado. Por exemplo, um objeto da classe
Ponto3D
pode ser atribuído a uma variável declarada com o tipo Ponto
,
ou pode ser usado como argumento de um método que tem um parâmetro do tipo
Ponto
.
Outra característica importante das linguagens orientadas a objetos é referente
a métodos definidos em uma classe A que são redefinidos em uma subclasse C de A.
Em uma chamada e.m
a um método m
definido em A e redefinido em C,
o método a ser efetivamente chamado depende da classe do objeto alvo da chamada
(obtido como resultado da avaliação da expressão e).
Em geral esse objetos alvo da chamada apenas pode ser determinado dinamicamente - uma vez que uma variável de um determinado tipo que é uma classe A pode também armazenar referências a objetos de uma subclasse A.
Exercícios
- O seguinte exemplo define uma classe de objetos que representam
uma data. Modifique a classe
MyData
de maneira a incluir também os seguintes métodos: um métodoanterior
, que retornatrue
se a data representada pelo objeto alvo da chamada é anterior à data passada como argumento para o método, e retornafalse
, caso contrário. Um métodoposterior
, que retornatrue
se a data representada pelo objeto alvo da chamada é posterior à data passada como argumento para o método, e retornafalse
, caso contrário. - Defina uma classe
Hora
, semelhante à classeData
do exercício anterior , cujos objetos representam uma determinada hora (em horas, minutos e segundos). - Defina uma classe
Conta
, cujos objetos representam contas bancárias, contendo cada qual as informações: número da conta, nome e cpf do correntista, data de abertura da conta, senha e saldo corrente. Defina um construtor de objetos dessa classe que tenha como parâmetros essas informações (exceto o saldo da conta) e retorne um objeto da classeConta
com saldo corrente igual a zero. Defina também dois métodos para implementação das operações de saque e depósito em conta. Esses métodos devem retorna o saldo da conta corrente, após efetuada a operação correspondente. - Defina uma classe
ChequeEspecial
, subclasse da classeConta
, que contenha como informação adicional, o valor limite (negativo) para o saldo da conta. Redefina o construtor da classe e o métodos de saque de maneira apropriada.
Material de Apoio
- The Java Tutorial
Tutorial da Sun sobre Java. - Thinking in Java
E-book de Bruce Eckel sobre programação em Java, originalmente em inglês. Neste endereço encontra-se a versão oficial do livro para download (formato HTML compactado). Há uma tradução colaborativa deste livro para a língua portuguesa. - Tutorial "A Linguagem de Programação Java"
Tutorial sobre Java em português (Unicamp). Está um pouco desatualizado, mas grande parte do conteúdo ainda é útil, principalmente para quem tem dificuldades de leitura dos tutoriais em inglês.