Programação Orientada a Objetos em Java Conceitos: Classe, Variável de Instância ou Atributos, Métodos, Objeto, Variáveis Estáticas ou de Classe, Construtores, Construtores Sobrecarregados, Herança, Polimorfismo, Sobreposição, referências this e super. Classe com variáveis de instância de acesso público: public class Exercicio01 { public String descricao = null; public double valor = 0; Classe (programa) que usa (instancia) objeto da classe Exercicio01: public class Exercicio02 { public static void main(string[] a) { * Instancia objeto da classe Exercicio01 usando * construtor padrão (sem argumentos) Exercicio01 x = new Exercicio01(); * do objeto instanciado System.out.println(x.descricao); System.out.println(x.valor); * do objeto instanciado x.descricao = "teste"; x.valor = 45.8; * do objeto instanciado System.out.println(x.descricao); System.out.println(x.valor); Reaproveitamento de código por meio do uso de um método para impressão: public class Exercicio02 { public static void main(string[] a) { Exercicio01 x = new Exercicio01(); exibe(x); x.descricao = "teste"; x.valor = 45.8;
exibe(x); private static void exibe(exercicio01 c){ System.out.println(c.descricao); System.out.println(c.valor); Classe com construtor para inicialização das variáveis de instância: public class Exercicio03 { public String descricao; public double valor; public Exercicio03() { descricao = null; valor = 0; Classe com construtores sobrecarregados: public class Exercicio04 { public String descricao; public double valor; * Construtor sem argumentos public Exercicio04() { descricao = null; valor = 0; * Construtor sobrecarregado com 2 argumentos public Exercicio04(String x, double y) { descricao = x; valor = y; Classe (programa) que usa (instancia) objetos da classe Exercicio04 com construtores diferentes: public class Exercicio05 { public static void main(string[] a) { * Instancia objeto da classe Exercicio04, usando * construtor padrão (sem argumentos) Exercicio04 x = new Exercicio04();
* Instancia objeto da classe Exercicio04, usando * o construtor sobrecarregado, com dois argumentos Exercicio04 y = new Exercicio04("teste", 4.6); System.out.println(x.descricao); System.out.println(x.valor); System.out.println(y.descricao); System.out.println(y.valor); x.descricao = "xyz"; x.valor = 32.3; y.descricao = "xpto"; y.valor = 69.5; System.out.println(x.descricao); System.out.println(x.valor); System.out.println(y.descricao); System.out.println(y.valor); Transformação das variáveis de instância em membros privados e a introdução de métodos modificadores e acessores. public class Exercicio06 { private String descricao; private double valor;
* Construtor sem argumentos public Exercicio06() { setdescricao(null); setvalor(0); * Construtor sobrecarregado com 2 argumentos public Exercicio06(String x, double y) { setdescricao(x); setvalor(y); * Método acessor (get) para variável de instância descricao public String getdescricao() { return descricao; * Método modificador (set) para variável de instância descricao public void setdescricao(string d) { descricao = d; * Método acessor (get) para variável de instância valor public double getvalor() { return valor; * Método modificador (set) para variável de instância valor public void setvalor(double v) { valor = v; Classe (programa) que usa (instancia) objetos da classe Exercicio06 e acessa e modifica suas variáveis de instância por meio de seus métodos acessores e modificadores. public class Exercicio07 { public static void main(string[] a) { * Instancia objeto da classe Exercicio04, usando * construtor padrão (sem argumentos) Exercicio06 x = new Exercicio06(); * Instancia objeto da classe Exercicio04, usando
* o construtor sobrecarregado, com dois argumentos Exercicio06 y = new Exercicio06("teste", 4.6); System.out.println(x.getDescricao()); System.out.println(x.getValor()); System.out.println(y.getDescricao()); System.out.println(y.getValor()); x.setdescricao("xyz"); x.setvalor(32.3); y.setdescricao("xpto"); y.setvalor(69.5); System.out.println(x.getDescricao()); System.out.println(x.getValor()); System.out.println(y.getDescricao()); System.out.println(y.getValor()); Classe que estende (herda) a classe Exercicio06: public class Exercicio08 extends Exercicio06 { private int quantidade; * Construtor sem argumentos public Exercicio08() {
super(); setquantidade(0); * Construtor sobrecarregado com 3 argumentos public Exercicio08(String x, double y, int q) { super(x, y); setquantidade(q); * Método acessor (get) para variável de instância quantidade public int getquantidade() { return quantidade; * Método modificador (set) para variável de instância quantidade public void setquantidade(int q) { quantidade = q; Classe (programa) que usa (instancia) objetos da classe Exercício08: public class Exercicio09 { public static void main(string[] a) { * Instancia objeto da classe Exercicio04, usando * construtor padrão (sem argumentos) Exercicio08 x = new Exercicio08(); * Instancia objeto da classe Exercicio04, usando * o construtor sobrecarregado, com três argumentos Exercicio08 y = new Exercicio08("teste", 4.6, 10); System.out.println(x.getDescricao()); System.out.println(x.getValor()); System.out.println(x.getQuantidade()); System.out.println(y.getDescricao()); System.out.println(y.getValor());
System.out.println(y.getQuantidade()); x.setdescricao("xyz"); x.setvalor(32.3); x.setquantidade(30); y.setdescricao("xpto"); y.setvalor(69.5); y.setquantidade(50); System.out.println(x.getDescricao()); System.out.println(x.getValor()); System.out.println(x.getQuantidade()); System.out.println(y.getDescricao()); System.out.println(y.getValor()); System.out.println(y.getQuantidade()); Questionário que pode ser resolvido com os exemplos acima (questões para avaliação): 1. Crie uma classe qualquer com as variáveis de instancia descrição e valor, ambas de acesso público. Determine a atribuição de valores iniciais para essas variáveis nas próprias instruções de declaração. 2. Crie uma classe que possa ser executada pela linha de comando (prompt) para instanciar (criar) um objeto da classe definida no item anterior. Exiba os valores das variáveis de instância desse objeto, modifique-os e torne a exibi-los. 3. Crie uma nova classe, similar a do exercício 1, que use um método construtor para atribuir os mesmos valores iniciais às variáveis de instância. 4. Na classe criada no item anterior, crie outro construtor, sobrecarregado, que receba os valores para as variáveis de instância, e os atribua às variáveis de instância da classe. Note que o construtor definido no item anterior (sem argumentos) deve ser mantido também na classe. 5. Crie uma classe que possa ser executada pela linha de comando (prompt) para instanciar (criar) dois objetos da classe definida nos dois últimos exercícios. Para cada um dos objetos, use um construtor diferente. Exiba os valores das variáveis de instância desses objetos, modifique-os e torne a exibi-los. 6. Tomando como base a classe criada nos exercícios 3 e 4, modifique os acesso às variáveis de instância, tornando-os privados da própria classe. Crie, com acesso público, os métodos modificadores (set) e os métodos acessores (get) para cada uma das variáveis de instância.
7. Crie uma classe que possa ser executada pela linha de comando (prompt) para instanciar (criar) dois objetos da classe definida no último exercício. Para cada um dos objetos, use um construtor diferente. Exiba os valores das variáveis de instância desses objetos, usando os métodos acessores; modifique-os, usando os métodos modificadores; e torne a exibi-los, usando os métodos acessores. 8. Crie uma classe que herde todas as características da classe criada no exercício 6 e acrescente a variável de instância quantidade, com acesso privado. Crie os métodos acessor (get) e modificador (set) para a variável de instância quantidade. 9. Crie uma classe que possa ser executada pela linha de comando (prompt) para instanciar (criar) dois objetos da classe definida no último exercício. Para cada um dos objetos, use um construtor diferente. Exiba os valores das variáveis de instância desses objetos, usando os métodos acessores; modifique-os, usando os métodos modificadores; e torne a exibi-los, usando os métodos acessores. Forma e Derivadas. Exemplo com Herança, variáveis de classe (estáticas, com modificador static) e referências this e super: public class Forma { private double medida[]; private static int conta; public Forma(int nummedidas) { medida = new double[nummedidas]; conta++; public double getmedida(int i) { return medida[i]; public void setmedida(int i, double m) { this.medida[i] = m; public int getnummedidas() { return medida.length; public static int getconta() { return conta; public class Circunferencia extends Forma { final double pi = 3.14159; private static int conta; public Circunferencia(double raio) { super(1); setmedida(0, raio); conta++; public double getperimetro() { return getmedida(0) * pi * 2;
public double getarea() { double raio = getmedida(0); return Math.pow(raio,2) * pi * 2; public static int getconta() { return conta; public class Retangulo extends Forma { private static int conta; public Retangulo(double base, double altura) { super(2); setmedida(0, base); setmedida(1, altura); conta++; public double getperimetro() { return (getmedida(0) + getmedida(1)) * 2; public double getarea() { return getmedida(0) * getmedida(1); public static int getconta() { return conta; import javax.swing.joptionpane; public class TestaForma { public static void main(string[] args) { String r1 = JOptionPane.showInputDialog("Entre com o raio:"); double raio1 = Double.parseDouble(r1); Circunferencia c = new Circunferencia(raio1); JOptionPane.showMessageDialog(null, "Perímetro: " + c.getperimetro()); JOptionPane.showMessageDialog(null, "Área: " + c.getarea()); JOptionPane.showMessageDialog(null, "Total de Formas: " + Forma.getConta()); JOptionPane.showMessageDialog(null, "Total de Circunferências: " + Circunferencia.getConta()); String r2 = JOptionPane.showInputDialog("Entre com o raio:"); double raio2 = Double.parseDouble(r1); Circunferencia d = new Circunferencia(raio2); JOptionPane.showMessageDialog(null, "Perímetro: " + d.getperimetro()); JOptionPane.showMessageDialog(null, "Área: " + d.getarea()); JOptionPane.showMessageDialog(null, "Total de Formas: " + Forma.getConta()); JOptionPane.showMessageDialog(null, "Total de Circunferências: " + Circunferencia.getConta());
String b1 = JOptionPane.showInputDialog("Entre com a base:"); String a1 = JOptionPane.showInputDialog("Entre com a altura:"); double base1 = Double.parseDouble(b1); double altura1 = Double.parseDouble(a1); Retangulo e = new Retangulo(base1, altura1); JOptionPane.showMessageDialog(null, "Perímetro: " + e.getperimetro()); JOptionPane.showMessageDialog(null, "Área: " + e.getarea()); JOptionPane.showMessageDialog(null, "Total de Formas: " + Forma.getConta()); JOptionPane.showMessageDialog(null, "Total de Retângulos: " + Retangulo.getConta()); Conta e Conta Especial. Mais um exemplo sobre o uso de classes. import java.text.decimalformat; public class Conta { private double saldo; private static int qtd; private String cliente; * Creates a new instance of Conta public Conta(String c, double s) { cliente = c; saldo = s; qtd++; void deposito(double d) { saldo+=d; void saque(double s) { saldo-=s; public void mostra() { DecimalFormat numerocomduascasasdecimais = new DecimalFormat("#0.00"); System.out.println("---------------------------------------------"); System.out.println("Total de contas abertas: " + qtd); System.out.println("---------------------------------------------"); System.out.println("Cliente: " + cliente); System.out.println("O Saldo Atual e: " + numerocomduascasasdecimais.format(saldo)); import java.text.decimalformat; public class ContaEspecial extends Conta { private double limite; public ContaEspecial(String c, double a, double b) { super(c, a); limite = b;
public ContaEspecial(String c, double b) { super(c, 0); limite = b; public void mostra() { System.out.println("---------------------------------------------"); System.out.println("Conta Especial com Limite de: " + limite); super.mostra(); public class ContaEspecialTesta { public static void main(string[] args) { if (args.length < 10) System.out.println("Quantidade de parametros inválida!"); else { Lista Parametros for (int i=0; i<args.length; i++) System.out.println("Parametro " + (i + 1) + " = " + args[i]); Testa o uso da classe Conta e ContaEspecial Conta a = new Conta(args[0], Double.parseDouble(args[1])); Conta b = new ContaEspecial(args[2], Double.parseDouble(args[3]), Double.parseDouble(args[4])); ContaEspecial c = new ContaEspecial(args[5], Double.parseDouble(args[6]),Double.parseDouble(args[7])); ContaEspecial d = new ContaEspecial(args[8], Double.parseDouble(args[9])); a.mostra(); b.mostra(); c.mostra(); d.mostra(); a.saque(20); b.saque(30); c.saque(10); d.saque(15); a.mostra(); b.mostra(); c.mostra(); d.mostra(); Exercício Propostos: 1. Crie uma classe para simular o funcionamento de um motor. A classe motor deve possuir os atributos: velocidade em RPM, fabricante, voltagem, status do motor, (ligado ou desligado), e os métodos: liga motor, desliga motor, verifica velocidade do motor.
2. Crie uma classe que utilize três objetos da classe motor e imprima na tela os valores dos atributos. 3. Usando uma classe chamada Dados para armazenar os dados da pesquisa, resolva a questão 6 da lista de exercícios V, Usando Métodos em Java. Defina as variáveis de instância como privadas e crie os métodos acessores e modificadores para cada uma. 4. Crie uma classe que estenda a classe Motor, acrescentando dois métodos: um para aumentar a velocidade e outro para reduzir a velocidade. A velocidade não pode passar de 5000 rpm e não pode ser menor que zero. 5. Crie uma classe que instancie a classe do exercício anterior e faça a velocidade do motor aumentar de 50 em 50 até atingir 5000. Ao atingir a velocidade máxima, o motor começa a reduzir a velocidade de 50 em 50 até chegar a zero. A cada mudança de velocidade, imprima uma mensagem com a atual velocidade do motor. 6. Identifique algo do seu cotidiano que possa ser representado na forma de classes e objetos. Procure um caso onde a generalização e a especialização, por meio do uso de herança, possam ser usadas. Implemente o contexto identificado em Java, criando as classes referentes ao negócio escolhido e um programa principal para testá-las.