Classes, instâncias e métodos de acesso
Revisão e Prática
Objetos, Métodos e Variáveis
n OBJETO é um pacote de software contendo dados e procedimentos (código) relacionados
n Os procedimentos são chamados MÉTODOSn Os dados dos objetos são chamados VARIÁVEIS
ou COMPONENTES DO ESTADO
POO - Bacalá 2
Classe
n Descrições de objetos com propriedades e comportamento comuns
n Abstração que n enfatiza o que é relevanten suprime o que não interessa
n Classes são fábricas de objetos
n Objetos são agrupados em classes
POO - Bacalá 3
Classes e Instâncias
n Classes - modelos que definem os métodos e as variáveis a serem incluídas em um tipo particular de objeto.
n Objetos que pertencem a uma classe são chamados de INSTÂNCIAS desta classe e contêm valores particulares para as suas variáveis.
n Variáveis de um objeto são chamadas de VARIÁVEIS DE INSTÂNCIA
POO - Bacalá 4
Representação de Classes
POO - Bacalá 5
Atributo
n Armazenam estado dos objetos n são coisas que um objeto “sabe”
n Propriedades de um objeton Variáveis de instância
POO - Bacalá 6
Operação
n Modela comportamento das classes
n São coisas que uma classe “faz”
n Serviços que os objetos oferecem a outros objetos
Cliente
criar()salvar()remover()alterar()
POO - Bacalá 7
Herança
n Criação de hierarquias de abstraçãon Permite ordenar hierarquias
relacionadas
POO - Bacalá 8
Herança
Permite a uma classe herdar o estado (atributos) e o comportamento (métodos) de outra classe.SuperclasseSubclasseAncestralDescendente
9
Pessoa------------------------------------------------
nome
idade
Professor------------------------------------------------------------------------------------
formação
área de interesse
Aluno-------------------------------------------------------------------
curso
cr
Herança
10
Herança
11
Herança
12
13
João25Gestão da Informação
Instâncias de Aluno
Maria20Gestão da Informação
14
// SuperClass.javapublic class SuperClass {
// Atributos e métodos}
// SubClass.javapublic class SubClass EXTENDS SuperClass {
// Atributos e métodos}
class Aluno extends Pessoa {...}
15
class Pessoa {String nome;int idade;
void definirNome(String valor) {
nome = valor; }
String retornarNome() { return nome;
}
void definirIdade(int valor) { idade = valor; }
int retornarIdade() { return idade; }}
class Aluno extends Pessoa {String curso;
void definirCurso(String valor) { curso = valor; }
String retornarCurso() { return curso; }
}
16
Aluno joao = new Aluno();joao.definirNome(“João”);joao.definirIdade(25);joao.definirCurso(“Sistemas deInformação”);
Aluno maria = new Aluno();maria.definirNome(“Maria”);maria.definirIdade(20);maria.definirCurso(“Sistemas deInformação”);
João
25
Sistemas de Informação
Maria
20
Sistemas de Informação
Herança e Polimorfismo
n Permitem que objetos sejam tratados de forma homogênea e segura um conjunto consistente de abstrações
POO - Bacalá 17
Saida de dados na console
n Use System.out.println(dados)
public class Teste { public static void main(String a[]){ float total = 5.5F;
System.out.print("O valor de total é "); System.out.println(total);
// mesmo que System.out.println("O valor de total é "+total);
}}
Literais de caracteres são expressos por meio de um único carater delimitado por apóstrofos. Alguns literais de caracteres úteis são apresentados abaixo:
\n nova linha
\t tabulação
\b retrocesso
\\ barra
\' apóstrofo
\" aspaspublic class Teste { public static void main(String a[]){ System.out.println("Clube de Futebol Mineiro: \n\"forte e vingador!\""); }}
Uso do println
Saída de dados com printf
Um novo recurso, introduzido em J2SE 5.0, é o método System.out. printf, capaz de formatar mais adequadamente uma saída em Java, em uma forma semelhante à função printf da linguagem C.
public class Teste { public static void main(String[] a) { String s = “Uberlândia Esporte"; System.out.printf(" Grandioso %s\n",s); }}
Grandioso Uberlândia Esporte
O primeiro argumento de printf é a string de formatação, composta de constantes string e caracteres de formatação. No exemplo acima, o delimitador % seguido de s indica que o método deve ter um outro argumento do tipo String.
Os caracteres de formatação podem também ser usados para compor uma String, usando o método String.format, conforme no exemplo a seguir:public class Main { public static void main(String[] args) { int a = 65; String s = String.format("char: %c integer: %d hexa: %h octal: %o",a,a,a,a); System.out.println(s); } }
Para o exemplo acima, onde é usado o mesmo argumento para a formatação, existem alternativas para a codificação:
String s = String.format("char: %c integer: %<d hexa: %<h octal: %<o",a);
String s = String.format("char: %1$c integer: %1$d hexa: %1$h octal: %1$o",a);
Entrada de dados com ScannerA leitura de dados de entrada em aplicativos através da janela de comando do sistema operacional era surpreendentemente complexa até a versão 1.4.2 do J2SE. Isto não era problema para aplicativos com recursos GUI, mas tornava-se desconfortável para estudantes interessados em escrever programas simples com o propósito de aprender Java.
J2SE 5.0 introduz a classe java.util.Scanner para a entrada de dados, inclusive através da entrada padrão, System.in.
O exemplo a seguir apresenta uma aplicação Java para a entrada de dois números pelo teclado e a saída da soma na janela de comando do sistema operacional.
É necessário criar uma instância da classe Scanner, passando como argumento o objeto padrão de entrada, System.in, que irá capturar as entradas de dados via o teclado. O método nextInt(), da instância da classe Scanner, lê o valor digitado e o armazena em uma variável do tipo int.
import java.util.Scanner;public class Teste { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); int num1; int num2; int soma; System.out.print("Entre com o primeiro número: "); num1 = entrada.nextInt(); System.out.print("Entre com o segundo número: "); num2 = entrada.nextInt(); soma = num1 + num2; System.out.printf("A soma é: %d", soma); } }
Um exemplo de saída do aplicativo acima:
Entre com o primeiro número: 34Entre com o segundo número: 23A soma é: 57
O exemplo seguinte calcula o seno de um valor fornecido em tempo de execução:import java.util.Scanner;public class Teste { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); double angulo; double seno; System.out.print("Entre com o ângulo em graus: "); angulo = entrada.nextDouble(); seno = Math.sin(Math.toRadians(ângulo)); System.out.println("Seno: " + seno); } }
O método nextDouble(), da classe Scanner, captura um double da entrada padrão System.in e o armazerna em uma variável do tipo double.
A classe Math do pacote java.lang define a constante PI através de uma variável de classe. O método estático Math.sin(double)retorna o seno de um ângulo em radianos passado como argumento.
import staticA versão J2SE 5.0 incorporou o recurso import static, que permite importar os métodos e atributos estáticos, permitindo utilizá-los sem o prefixo de classe.
O código anterior pode ser reescrito, a partir da versão 5.0, conforme abaixo:
import java.util.Scanner;import static java.lang.Math.*;public class Teste { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); double angulo; double seno; System.out.print("Entre com o ângulo em graus: "); angulo = entrada.nextDouble(); seno = sin(toRadians(ângulo)); System.out.println("Seno: " + seno); } }
Exercício 01
n Crie a classe Ponto que possui duas dimensões (int x, int y). n Crie os métodos get e set. n Faça o main para instanciar e testar a
classe.n Adicione o método distancia (int x, int y)
que calcula a distância do ponto às coordenadas (x,y). Teste!
n Sobrecarregue o com o método distancia(Ponto p). Teste!
Exercício 02
n Crie a classe Circulo.n Crie um construtor para inicializar a instância que
recebe como parâmetros o raio e o valor do centro, que é um ponto em duas dimensões. Utilize a classe Ponto.
n Adicione como atributos, também, um nome.
n Adicione como métodos:n Calcular diâmetron Calcular árean Calcular circunferêncian Acessar e modificar nome (não pode ser vazio)n Exibir os dados, utilizando o seguinte layout:
Ex03: Cadastro de nomesn Fazer uma classe Cadastro que contem
n um atributo array de Strings• Lembre-se de criar as variáveis de controle (cont e MAX)
n Métodos para manipular os Strings no array• void inserir (nome)• String buscar (posicao)• boolean existe (nome)• int posicao (nome)• void excluir (posicao)• void excluir (nome)
n Fazer o main para testar
Ex04: Cadastro de Empregadosn Fazer as classes da Hierarquia abaixo, com os
respectivos métodos de acesso:
n Fazer uma classe Cadastro para armazenar Empregados independente do tipo
– Operações para inclusão, atualização e exclusão de empregados do cadastro