UFRPE – Monitoria de Programação 2012.2 Noções (super) básicas de OO (PARTE 01) Criando e instanciando uma classe com um construtor vazio (utilizando JAVA) Professor: Leandro Marques (material produzido pelo monitor Marcelo Coelho) http://www.marcelocoelho.com.br/monitoria/poo/2012_2/criando-e-instanciando-uma-classe-com-construtor-vazio.ppt ATENÇÃO! Este material NÃO se propõe a ser um curso de programação orientada a objetos ou de JAVA! A minha intenção é de apenas TENTAR sanar algumas dúvidas trazidas pelos colegas nos nossos encontros de monitoria. Próximo Revisando... • Na nossa classe de exemplo (Veiculo¹), criaremos os seguintes atributos: String marca; String modelo; int qtdeRodas; String cor; //ex: “Fiat”, “Ford”, null //ex: “Uno”, “Ka”, null //ex: 4, 2, 0 //ex: “azul”, “verde”, null ¹ Evitaremos o uso de acentuação nos identificadores de classes e variáveis. Próximo A nossa classe “Veiculo”: public class Veiculo { //atributos String marca; String Modelo; int qtdeRodas; String cor; Isto não é necessário, mas vamos deixá-lo aqui por questões Didáticas, ok? //contrutores public Veiculo() { } } Próximo A nossa classe “Teste”: public class Teste { Veremos o que essas coisas significam DEPOIS, ok? //método main public static void main(String[] args) { //eleaqui poderia estar em qualquer //é que iremos “chamar” asclasse, //mas optei por do fazer uma exclusivamente //outras classes sistema //para ele (a classe “Teste”)... } Por hora, tenha em mente que você precisa de apenas um método “main” em todo o sistema para poder “dar a partida” no seu programa! } Próximo Ilustração do que acontece na “memória” ao criarmos variáveis de tipos primitivos (int, boolean, double, etc...) x 5 a 2 public class Veiculo { public class Teste { //método main public static void main(String[] args) { //atributos String marca; String Modelo; int qtdeRodas; String cor; int x; //declaramos uma variável do TIPO inteiro x = 5; //atribuimos o valor 5 a “x” //podemos fazer isso em um único “movimento”... //contrutores public Veiculo() { int a = 2; } } } } Próximo Ilustração do que acontece na “memória” ao criarmos variáveis de tipos NÃO primitivos (Veiculo, Animal, etc...) v2 marca: null modelo: null qtdeRodas: 0 cor: null v1 public class Veiculo { //atributos String marca; String Modelo; int qtdeRodas; String cor; marca: null Quando o “new”, foi modelo: null qtdeRodas: 0 utilizado, eu (o construtor cor: null da classe “Veiculo”) fui chamado para realizar a public class Teste { criação do objeto.//método Em main outras palavras: a classe public static void main(String[] args) { //declaramos uma variável de referência “Veiculo” foi instanciada! //do TIPO Veiculo Veiculo v1; //criamos um objeto do tipo Veiculo com “new” //e usamos “v1” como referência para esse objeto //contrutores public Veiculo() { v1 = new Veiculo(); //podemos fazer isso em um único “movimento”... Veiculo v2 = new Veiculo(); } } } } Próximo Ilustração do que acontece na “memória” ao criarmos variáveis de tipos NÃO primitivos (Veiculo, Animal, etc...) v2 marca: null modelo: null qtdeRodas: 0 cor: null v1 public class Veiculo { //atributos String marca; String Modelo; int qtdeRodas; String cor; marca: null modelo: null qtdeRodas: 0 cor: null v3 Perceba que eu (o construtor) não fui acionado pela última linha da classe public class Teste { “Teste” ( cláusula “new” inexistente), //método main portanto nenhum objeto foi criado. O static que ocorreu foi apenaspublic a criação devoid main(String[] args) { Veiculo v1; uma (outra) referência para um Veiculo(); v1 = new objeto já existente! Veiculo v2 = new Veiculo(); //podemos declarar outra referência do tipo “Veiculo” Veiculo v3; //contrutores public Veiculo() { //e usá-la também para referenciar o mesmo objeto // referenciado por “v2” v3 = v2; } } } } Próximo Praticando e explorando public class Veiculo { //atributos String marca; String Modelo; int qtdeRodas; String cor; //contrutores public Veiculo() { } } Experimente executar o O mesmo que você exemplo sem achaa que minha presença! aconteceu? Você percebeu alguma diferença ao executar o código?