Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Marcelo Siqueira (C) 2003 * Marcelo José Siqueira Coutinho de Almeida marcelo@ifpb.edu.br Objetos Classes e Marcelo Siqueira (C) 2003 * Conteúdo Introdução Objetos Classes Construtores Projetando e Usando Classes Encapsulamento Variáveis * Marcelo Siqueira (C) 2003 * Objetivos Ao final desse módulo você deverá ser capaz de... Compreender e descrever o que são classes e objetos Utilizar classes existentes Projetar suas próprias classes Desenvolver programas utilizando várias classes Compreender e descrever o conceito de encapsulamento Compreender os diferentes tipos de escopos de variáveis * Marcelo Siqueira (C) 2003 * Introdução O que é a Orientação a Objetos? Paradigma de programação atualmente dominante Tem substituído gradativamente a programação estruturada Uma das grandes promessas é a reusabilidade foco da solução está nas entidades (objetos - o que) e não nos processos (operações - como) Identificar o que cada entidade faz e como elas estão ligadas no domínio de problema em questão * Marcelo Siqueira (C) 2003 * Introdução Exemplo Agência bancária Visão Estruturada : sacar, transferir, depositar, pagar, etc. Visão OO : conta corrente, conta poupança, cliente, funcionário, agência, cheque, etc. Partida de Futebol Visão Estruturada : chutar, correr, parar, driblar, etc. Visão OO : jogador, juíz, bandeirinha, torcedor, bola, etc. Vídeo Locadora Visão Estruturada : cadastrar, registrar locação, pesquisar filme, etc. Visão OO : filme,cliente, ator, diretor,etc. * Marcelo Siqueira (C) 2003 * Introdução Em Java quase tudo é objeto... Botões, Janelas, Strings, etc. A exceção está nos tipos primitivos: integer, byte, boolean, long, float, etc. não tem comportamento mas apenas identidade e estado Falarei sobre as classes encapsuladoras (wrapper classes) depois... * Marcelo Siqueira (C) 2003 * Objetos Cada objeto é formado pelos seguintes elementos: Atributos definido pelas variáveis da classe Comportamento definido pelo conjunto dos métodos Identidade definido pelo nome do objeto * Marcelo Siqueira (C) 2003 * Objetos Exemplos: * Atributos: tipo, tamanho,cor Comportamento: escreve,apaga Identidade: meulápis Atributos: tipo, marca,cor Comportamento: anda,pára Identidade: minhabicleta Atributos: tipo, marca,largura, altura Comportamento: toca, pára, pausa, volta, adianta Identidade: cdplayer1 Marcelo Siqueira (C) 2003 * Classes Especificam de forma genérica um conjunto de objetos com as mesmas características e comportamento: * Classe espécie habitat som Objetos animal2 animal1 Animal espécie: gato habitat: cidade som: "miau" espécie:elefante habitat:savana som:"fueeeeen" Marcelo Siqueira (C) 2003 * Classes Fornecem uma especificação para os objetos definem o que é o objeto em termos estruturais e comportamentais A fôrma ou gabarito dos objetos Definem um novo tipo Animal animal1; Animal animal2; * Marcelo Siqueira (C) 2003 * Objetos e Classes… * OBJETOS SÃO, PORTANTO, INSTÂNCIAS OU VARIÁVEIS ESPECIAIS ASSOCIADAS AO TIPO DA CLASSE! Marcelo Siqueira (C) 2003 * * Main main() class Animal { String especie; String habitat; String som; public void anda( ) { System.out.println(“andando na(o) ” + habitat); } public void emiteSom( ) { System.out.println(som); } } Atributos da classe Cada objeto recebe uma cópia Inicialização com valores default Cada método executa uma única operação Marcelo Siqueira (C) 2003 * Classes * public class Main { public static void main (String[ ] args) { Animal animal1 = new Animal(“gato”,“cidade”,“miau”); Animal animal2 = new Animal(“elefante”,“savana”,“fuen”); animal1.anda( ); animal2.anda( ); animal1.emiteSom(); animal2.emiteSom(); } } Criação de objetos do tipo Animal Uso dos objetos animal1 e animal2 Marcelo Siqueira (C) 2003 * Classes X Objetos Classes são criadas em tempo de edição e os objetos em tempo de execução Objetos só existem enquanto o programa está executando ou enquanto são utilizados Objetos assumem valores quando são criados e posteriormente podem altera-los * Marcelo Siqueira (C) 2003 * Observações sobre Objetos Todos os objetos que pertencem a uma mesma classe compartilham o mesmo comportamento * Animal animal1 = new Animal(...); Animal animal2 = new Animal(...); Animal animal3 = new Animal(...); animal1.anda(); animal2.anda(); animal3.anda(); Marcelo Siqueira (C) 2003 * Estado Representa o conjunto de valores associado aos seus respectivos atributos em dado instante * t1 t2 idade = 1.0 temp = 38 qPulgas = 10 idade = 1.5 temp = 39 qPulgas = 40 t Marcelo Siqueira (C) 2003 * Estado Objetos de uma mesma classe podem ter estados diferentes e estes variarem ao longo do tempo * animal1.setTemp(30); animal2.setTemp(10); animal3.setTemp(15); animal1.setTemp(20); Marcelo Siqueira (C) 2003 * Estado Mudanças de estado em um objeto não ocorrem espontaneamente algum método deve ser acionado para que a mudança ocorra * AlgumaClasse setTemp(-10) animal4.setTemp(0); animal4.setTemp(-10); Animal:animal4 setTemp( ) Marcelo Siqueira (C) 2003 * Identidade * Objetos têm identidades únicas mesmo que pertençam a uma mesma classe e tenham o mesmo estado no mesmo instante. animal1,animal2 e animal3 pertencem à classe Animal, mas são automóveis distintos e cada um tem sua própria identidade ≠ ≠ animal1 animal2 animal3 Marcelo Siqueira (C) 2003 * Construtores Para criarmos um objeto devemos acionar o método new( ) Esse método aciona o construtor da classe para que seja criada uma instância da mesma Quando um objeto é criado seu estado inicial é definido pelo conjunto de valores passado como argumento em new( ) * Marcelo Siqueira (C) 2003 * Construtores * Computador comp = new Computador(“Desktop”); Computador comp = new Computador(“Portátil”); Marcelo Siqueira (C) 2003 * Construtores * public class Funcionario { String nome; double salario; String depto; public Funcionario(String n,double s,String d){ nome = n; salario = s; depto = d; } ... } Marcelo Siqueira (C) 2003 * Construtores * public class Funcionario { String nome; double salario; String depto; public Funcionario(String n,double s,String d){ n = n; s = s; d = d; } ... } Marcelo Siqueira (C) 2003 * Construtores * public class Funcionario { String n; double s; String d; public Funcionario(String n,double s,String d){ this.n = n; this.s = s; this.d = d; } ... } Marcelo Siqueira (C) 2003 * Construtores Toda classe tem, pelo menos, um construtor (explicita ou implicitamente) Não têm um tipo de retorno Têm o mesmo nome da classe São chamados uma única vez (para um mesmo objeto) Podem inicializar valores e acionar outros métodos Podem ter zero ou mais argumentos * Marcelo Siqueira (C) 2003 * Sobrecarga de Métodos Ocorre quando a classe dispõe de mais de um método com a mesma assinatura, porém com parâmetros diferentes * public void escreveMensagem( ) { System.out.println(“Mensagem Vazia”); } public void escreveMensagem(String s) { System.out.println(“Mensagem Atual:” + s); } Marcelo Siqueira (C) 2003 * Sobrecarga de Métodos Sobrecarga de Construtor É comum haver mais de uma forma de se construir instâncias de uma determinada classe * public Circulo( ) { this.raio = 1.0; } public Circulo(double raio, String cor) { this.raio = raio; this.cor = cor; } public Circulo(double raio) { this.raio = raio; } Marcelo Siqueira (C) 2003 * this A palavra reservada this é usada para definir que uma propriedade (membro da classe) pertence ao objeto corrente (“este”) Bastante útil quando queremos impedir determinadas ambigüidades Usado junto a objetos (não em contextos estáticos) * Marcelo Siqueira (C) 2003 * this * public Funcionario(String mat,String nome, float sal){ this.mat = mat; this.nome = nome; this.sal = sal; } public class Funcionario { private String mat; private String nome; private float sal; 100 Manoel 500 } Funcionario func1 = new Funcionario(“100”,“Manoel”,500); Marcelo Siqueira (C) 2003 * this Usado quando um construtor necessita chamar um outro construtor específico Deve haver sobrecarga de método em relação ao construtor * public Funcionario(String matricula,String nome, float salario){ this.matricula = matricula; this.nome = nome; this.salario = salario; } public Funcionario() { this(null,null,0.0); } Marcelo Siqueira (C) 2003 * Comunicação entre Objetos Durante a execução de um programa, objetos se comunicam entre si através da troca de mensagens: * getNome() getMatricula() daAula() tiraDuvida() orientaProjeto() Professor getNome() getMatricula() prestaAtencao() fazerProva() fazerProjeto() Aluno getNome() tiraDuvida() fazerProjeto() orientaEstagio() Marcelo Siqueira (C) 2003 * Comunicação entre Objetos * classe : Pessoa atributos: nome, idade, cpf, peso, altura operações: estuda, trabalha, dorme, assiste classe : Tv atributos: marca, sistema, origem, preço... operações: liga, desliga, sintoniza,ajustacor... minhaTV liga( ) sintoniza( ) desliga( ) pessoa Marcelo Siqueira (C) 2003 * Encapsulamento O conjunto das assinaturas dos métodos (públicos) de uma classe forma uma interface entre o seu núcleo e o mundo externo * canal brilho cor contraste ligar() desligar() sintonizar() ajustar() X Marcelo Siqueira (C) 2003 * Encapsulamento Vantagens Não é preciso conhecer a implementação interna do objeto para utiliza-lo data hiding complexity hiding Diminui as dependências se um determinado objeto for alterado os outros não precisam ser alterados. Maximiza reusabilidade Minimiza tempo de debbuging é mais fácil identificar as origens dos problemas * Marcelo Siqueira (C) 2003 * Encapsulamento Métodos Acessadores retorna o estado corrente de um determinado campo útil quando um objeto deseja conhecer o estado de um outro objeto * class Professor { public void calcula(Aluno a){ double media = a.getMedia( ); if (media >= 7.0) ++quant } ... } class Professor { public void calcula(Aluno a){ double media = a.media; if (media >= 7.0) ++quant } ... } Ok! Não! Marcelo Siqueira (C) 2003 * Encapsulamento Métodos Acessadores São métodos públicos que permitem o acesso a atributos privados Por convençaõ, usa-se como nome getAtributo Sua implementação é bastante simples * class Aluno { private double media; public double getMedia( ){ return media; } } Marcelo Siqueira (C) 2003 * Encapsulamento Métodos Modificadores São métodos públicos que modificam o estado corrente de um determinado campo Significa que apenas a própria classe é que pode modificar seu estado Por convenção, usa-se como nome setAtributo * Marcelo Siqueira (C) 2003 * Encapsulamento * class Aluno { private String nome; private String matricula; private double media; public void setNome(String novoNome){ nome = novoNome; } public void setMatricula(String novaMat){ matricula = novaMat; } public void setMedia(double novaMedia ){ media = novaMedia; } } Marcelo Siqueira (C) 2003 * Variáveis Variáveis em Java podem ser de um dos três tipos: Variáveis Locais ou Automáticas Variáveis de Instância Variáveis de Classe * Marcelo Siqueira (C) 2003 * Variáveis Variáveis Locais ou Automáticas são declaradas dentro de métodos têm escopo de método “variáveis locais” têm tempo de vida muito curto não são inicializadas por default * Marcelo Siqueira (C) 2003 * public float getMedia(){ double soma = 0.0; for(int i=0; i < notas.length; i++){ soma += notas[i]; } return soma / notas.length; } Variáveis Variáveis Locais ou Automáticas * 0.0 soma i 0 i X Marcelo Siqueira (C) 2003 * Variáveis Variáveis de Instância são declaradas fora dos métodos Seriam como “variáveis globais” para a classe têm escopo de objeto (acessível por todos os métodos do próprio objeto) cada objeto tem uma cópia de cada uma delas são inicializadas com os valores default * Marcelo Siqueira (C) 2003 * Variáveis * class Aluno { private String nome; public Aluno(String nome){ this.nome = nome; } } aluno1 aluno2 aluno3 Aluno aluno1 = new Aluno(“João”); Aluno aluno2 = new Aluno(“Maria”); Aluno aluno3 = new Aluno(“José”); nome=“João” nome=“Maria” nome=“José” Aluno new new new Marcelo Siqueira (C) 2003 * Variáveis Variáveis de Classe são declaradas fora dos métodos “variáveis globais” têm escopo de classe (acessível por todos os métodos de todos os objetos criados da classe) existe apenas uma cópia dela deve-se utilizar a palavra static na declaração * Marcelo Siqueira (C) 2003 * Variáveis * class Aluno { private static int quant = 0; public Aluno(){ quant++; } } aluno1 aluno2 aluno3 nome=“João” nome=“Maria” nome=“José” quant=0 Aluno quant=1 quant=2 quant=3 Aluno aluno1 = new Aluno(“João”); Aluno aluno2 = new Aluno(“Maria”); Aluno aluno3 = new Aluno(“José”); Marcelo Siqueira (C) 2003 * Granularidade de Métodos Como definir o tamanho de um método? * main() main() fazB() fazA() Responsabilidade é um critério fundamental Marcelo Siqueira (C) 2003 * Escopo de Métodos A idéia é semelhante ao escopo de variáveis Métodos Não estáticos Operam sobre um objeto específico (o método é do objeto!) É preciso criar um objeto e acioná-lo Comportamento padrão Métodos Estáticos Operam sobre a classe (O método é da classe!) Deve-se usar a palavra reservada static na assinatura do método Métodos chamados diretamente de um contexto estático devem ser estáticos * Marcelo Siqueira (C) 2003 * Escopo de Métodos * class Aluno { private String nome; public Aluno(String nome){ this.nome = nome; } public String getNome(){ return nome; } } class TesteAluno { public static void main(String[] args){ Aluno aluno1 = new Aluno(“Dom Pedro I”); Aluno aluno2 = new Aluno(“Tiradentes”); System.out.println(aluno1.getNome()); System.out.println(aluno2.getNome()); } } Marcelo Siqueira (C) 2003 * Escopo de Métodos * class Aluno { private String nome; private static int cont = 0; public Aluno(String nome){ this.nome = nome; cont++; } public static int getQuant(){ return cont; } } class TesteAluno { public static void main(String[] args){ Aluno aluno1 = new Aluno(“Dom Pedro I”); Aluno aluno2 = new Aluno(“Tiradentes”); System.out.println(Aluno.getQuant()); } } Marcelo Siqueira (C) 2003 * Escopo de Métodos * class TesteAluno { public static void main(String[] args){ int[] conj = new int[5]; conj = leDados(); System.out.println(maior(conj)); } private static int[] leDados(){ // corpo do método } private static int maior(int[] c){ // corpo do método } } Marcelo Siqueira (C) 2003 * Escopo de Métodos * class TesteAluno { public static void main(String[] args){ TesteAluno ta = new TesteAluno(); int[] conj = new int[5]; conj = ta.leDados(); System.out.println(ta.maior(conj)); } private int[] leDados(){ //corpo do método } private int maior(int[] c){ //corpo do método } } Marcelo Siqueira (C) 2003 * Escopo de Métodos Na API Java existem várias classes que disponibilizam métodos estáticos: java.lang.Math java.lang.Integer java.lang.Double java.lang.Boolean * Marcelo Siqueira (C) 2003 * Escopo de Métodos * import javax.swing.JOptionPane; public static void main(String[] args) { String r; int area; r = JOptionPane.showInputDialog(“Raio"); a = Integer.parseInt(r); area = Math.PI*a*a; JOptionPane.showMessageDialog(null,area,“”, JOptionPane.PLAINMESSAGE); } Marcelo Siqueira (C) 2003 * Contatos marcelo@ifpb.edu.br marcelojose.siqueira@gmail.com * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Compartilhar