Usando Mais Objetos e Classes Simples Classe Rinoceronte public class Rinoceronte { double Peso; int idade; boolean velho; Rinoceronte(double p, int i) { Peso = p; idade = I; if (idade > 40) velho = true; } void andar() { System.out.println("Rino andando: " + 1/Peso + "km/h"); } void comer() { System.out.println("Rino comendo"); } void dormir() { Classe Antilope public class Antilope { Antilope() { } void andar() { System.out.println("Anti correndo"); } void comer() { System.out.println("Anti comendo"); } void dormir() { System.out.println("Anti dormindo"); } } Classe Hipopotamo public class Hipopotamo { Hipopotamo() { } void andar() { System.out.println("Hipo andando"); } void comer() { System.out.println("Hipo comendo"); } void dormir() { System.out.println("Hipo dormindo"); } } Classe Coordenador class Coordenador { public static void main(String[] arg) { Rinoceronte rino1 = new Rinoceronte(10, 1); Rinoceronte rino2 = new Rinoceronte(12, 50); Antilope anti = new Antilope(); Hipopotamo hipo1 = new Hipopotamo(); Hipopotamo hipo2 = new Hipopotamo(); Hipopotamo hipo3 = new Hipopotamo(); rino1.dormir(); anti.comer(); hipo1.dormir(); hipo1.andar(); hipo2.andar(); hipo3.comer(); if (! rino2.velho ) rino2.andar(); } } Não sabemos quem é que está fazendo uma ação, falta um identificador para cada objeto O tipo String Em JAVA o tipo String não é primitivo Foi construida uma classe especial para lidar com ela. String nome; nome = “Meu nome”; O tipo String s.substring(x): fornece a cadeia de caracteres iniciando no caractere de número x de s e indo até o final de s. s.substring(x, y): fornece a cadeia de caracteres iniciando no caractere de número x de s e indo até o caractere de número y-1. s.length(): fornece um valor inteiro que corresponde à quantidade de caracteres de s. s.toUpperCase(): fornece a cadeia de caracteres similar à cadeia s, porém convertendo todas as letras para caixa alta. s.toLowerCase(): fornece a cadeia de caracteres similar à cadeia s, porém convertendo todas as letras para caixa baixa. O tipo String s.compareTo(t): compara as cadeias de caracteres s e t. Se elas forem idênticas, retorna o valor zero; se s vier alfabeticamente antes de t, retorna um inteiro menor que zero; se s vier alfabeticamente depois de t, retorna um inteiro maior que zero. s.indexOf(‘c’): fornece o número da primeira ocorrência do caractere ‘c’ na cadeia s. s.indexOf(‘c’,n): fornece o número da primeira ocorrência do caractere ‘c’ na cadeia s, que seja maior que ou igual a n. s = s1 + s2: coloca na cadeia s o resultado da concatenação das cadeias s1 e s2. Por exemplo, se s1 = “abc” e s2 = “def”, então s = “abcdef”. Classe Rinoceronte com nome public class Rinoceronte { double Peso; String nome; Rinoceronte(double p, String n) { Peso = p; nome = n.substring(5); } void andar() { System.out.println(nome+" vai a " + 1/Peso + "km/h"); } void comer() { System.out.println(nome + " comendo"); } void dormir() { System.out.println(nome + " dormindo"); } } Classe Coordenador class Coordenador { public static void main(String[] arg) { Rinoceronte rino1 = new Rinoceronte(10,"Rino rino1"); Rinoceronte rino2 = new Rinoceronte(12, "Rino rino2"); Antilope anti = new Antilope("Anti anti"); Hipopotamo hipo1 = new Hipopotamo("Hipo hipo1"); Hipopotamo hipo2 = new Hipopotamo("Hipo hipo2"); Hipopotamo hipo3 = new Hipopotamo("Hipo hipo3"); rino1.dormir(); anti.comer(); hipo1.dormir(); hipo1.andar(); hipo2.andar(); hipo3.comer(); rino2.andar(); } } O que vai acontecer? Exercício Faça um programa que leia o nome de um arquivo completo, incluindo sua extensão. Logo em seguida, deverá imprimir qual é o tipo de arquivo que se está escolhendo, seguindo esta tabela: .txt -> Arquivo texto .exe -> arquivo executavel .jpg -> arquivo imagem .mp3 -> arquivo de áudio Exemplo: Entre com o nome do arquivo: > minhasFerias.jpg O arquivo escolhido é uma imagem Caso o formato não seja reconhecido, o programa deverá dizer: “Formato desconhecido...” Leitura de Arquivos import java.io.*; 3 etapas: -definir a fonte de dados, com um objeto de FileInputStream -definir um repositório de leitura, parametrizado pela fonte de dados, como um objeto de InputStreamReader -definir um leitor desse repositório, como um objeto de BufferedReader Leitura de Arquivos import java.io.*; InputStream is = new FileInputStream("entrada.txt"); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String linha = br.readLine(); Escrita de Arquivos import java.io.*; 3 etapas: -definir um destino para os dados, como um objeto de FileOutputStream -definir um repositório de gravação, parametrizado pelo destino de dados, como um objeto de OutputStreamWriter -definir um gravador desse repositório, como um objeto de BufferedWriter Escrita de Arquivos import java.io.*; OutputStream os = new FileOutputStream("saida.txt"); OutputStreamWriter osw = new OutputStreamWriter(os); BufferedWriter bw = new BufferedWriter(osw); String linha = br.readLine(); bw.write("Ola " + linha); bw.newLine(); bw.write("Ate mais tarde " + linha); bw.close(); Classes Abstratas public abstract class Mamifero { Mamifero() { } void andar() { System.out.println("Mamifero andando"); } void comer() { System.out.println("Mamifero comendo"); } void dormir() { System.out.println("Mamifero dormindo"); } } Classes Abstratas public class Rinoceronte extends Mamifero { double Peso; Rinoceronte(double p) { Peso = p; } @Override void andar() { System.out.println("Rino andando: " + 1/Peso + "km/h"); } @Override void comer() { System.out.println("Rino comendo"); } @Override void dormir() { System.out.println("Rino dormindo"); } } Classes, Heranças e Objetos Classe Uma classe é um molde (template) que define, de maneira genérica, como serão os objetos. Uma classe é como uma receita para construir objetos. Objetos são criados como sendo instâncias de uma classe. Classe – Diagrama UML Classe Classe Construtores Variáveis de referencia Operador ponto Classe Classe package testeretangulo; public class Main { public static void main(String[] args) { Retangulo r1 = new Retangulo(); // Cria retangulo r1 Retangulo r2 = new Retangulo(0,15,5,10); // Cria retangulo r2 r1.x = 15; // altera origem de r1 r1.altura = 5; // altera altura de r1 System.out.println("Area r1= " + r1.getArea()); // imprime nova area de r1 r2.transladar(5, 0); // translada origem de 5 pixels na horizontal r2.transladar(5, 0); // translada origem de mais 5 pixels System.out.println("origem r2: (" + r2.x + "," + r2.y + ")"); } } Classes em arquivos separados package testeretangulo; public class Main { public static void main(String[] args) { Retangulo r1 = new Retangulo(); // Cria retangulo r1 Retangulo r2 = new Retangulo(0,15,5,10); // Cria retangulo r2 r1.x = 15; // altera origem de r1 r1.altura = 5; // altera altura de r1 System.out.println("Area r1= " + r1.getArea()); // imprime nova area de r1 r2.transladar(5, 0); // translada origem de 5 pixels na horizontal r2.transladar(5, 0); // translada origem de mais 5 pixels System.out.println("origem r2: (" + r2.x + "," + r2.y + ")"); } } Classes em arquivos separados package testeretangulo; public class Main { public static void main(String[] args) {