Programação Estruturada e Orientada a Objetos Objetos e Métodos 2013
O que veremos hoje? Objetos e Métodos Transparências baseadas no material do Prof. Jailton Carlos
Objetivos Aprender a criar construtores; Aprender o conceito de instância e referência de objetos; Aprender a criar métodos estáticos; Saber aplicar a sobrecarga de métodos.
Plano de Aula Revisão Conceitos Classes e Objeto Construtor e Instanciação Construtor padrão; Instância e referência de objeto; Destruição de Objeto; Igualdade de Objeto Métodos Métodos: parâmetros e retorno Método que referencia o próprio objeto; Métodos acessadores e modificadores Sobrecarga de Método
Revisão Conceitos: Classes e Objeto Classes São especificações para objetos; Representam um conjunto de objetos que compartilham características e comportamentos comuns. Objeto É uma instância de uma classe. As três características-chave Estado: Define característica do objeto; Comportamento: Operações que o objeto pode realizar Identidade: instância do objeto.
Construtor e Instanciação São utilizados para criar novas instâncias de objetos; Não possui tipo de retorno; O nome deve coincidir exatamente com o nome da classe; Normalmente os construtores são utilizados para inicializar variáveis de instância; Se não definir o construtor da classe, será usado um construtor padrão sem argumentos; se você tiver inserido um construtor com argumentos, não terá um sem argumentos a menos que o insira por conta própria.
Construtor e Instanciação public class Contato { private string nome; public string Nome { get { return nome; } set { nome = value; } } private string telefone; } public string Telefone { get { return telefone; } set { telefone = value; } } public Contato(String nome, String telefone) { this.nome = nome; this.telefone = telefone; } Construtor da classe, mesmo nome da classe.
Construtor e Instanciação Operador new cria uma novo objeto (cria uma instância) a partir de uma classe especificada. Ao utilizar o operador new: Novo objeto é alocado dinamicamente na memória, e todas as suas variáveis de instancia são inicializadas com valores-padrão predefinidos. null para variáveis objeto 0 para todos os tipos básicos (exceto boolean) false para boolean O construtor do novo objeto é ativado; Após a execução do construtor, o operador new retorna uma referência (endereço de memória) para o objeto recém criado
Instanciando Objeto Declarar variável Associa variável a tipo (classe) Sintaxe NomeClasse nomevariável; Exemplo Carro carro1; Criar objeto (instanciar) e fazer variável referenciar o objeto carro1 = new Carro(); Ambos em um passo Carro carro1 = new Carro();
Instanciando Objeto
Referência
Exercício Represente a heap para o código a seguir Circulo c1,c2,c3; Carro carro1, carro2; c1 = new Circulo(); Quadrado q1 = new Quadrado(); c2 = c1; carro1 = new Carro(); Quadrado q2 = q1; q1 = new Quadrado(); c3 = c1; c1 = new Circulo(); carro2 = carro1;
Exercício - Resposta Representação no heap C#
Igualdade Entre variáveis Compara o valor das variáveis O valor de uma variável (referência) para um objeto é o endereço do objeto O operador == compara se as duas variaveis referenciam o mesmo objeto obj1 == obj2 Entre objetos Metodo equals verifica se dois objetos são iguais
Igualdade c1 == c2 true Referenciam o mesmo objeto q1 == q2 false Mesmo que os objetos sejam iguais
Métodos Um método pode retornar algum valor assim como podemos passar valores na sua execução, sintaxe: tiporetorno nomemetodo ( listaparamentros opcional ){ } // corpo do método Quando não desejamos que o método retorne algum velor usamos Void
Métodos Quando NÃO desejamos que o método retorne algum valor usamos void void semresultado(int tipo){ // corpo do método } Quando desejamos que o método retorne algum valor usamos um tipo basico ou objeto. Além disso é necessário o uso do comando return Int comresultado(int tipo){ // corpo do método return resultado; }
Métodos Especificando a sintaxe para se chamar um método nomedometodo (listadeargumentos opcional) Importante: Você precisa escrever os parênteses ao final de cada método, mesmo que o método não tenha nenhum parâmetro.
Métodos Usamos o operador. (ponto) Sintaxe: objeto.método(); Executa método em objeto Objeto deve existir A variável deve referenciar objeto válido Se referenciar null ocorre erro Exemplos: obj1.nomemetodo(); obj1.nomemetodo(arg1, arg2); (new NomeClasse()).nomeMetodo();
Métodos acessadores e modificadores Forma de manter o encapsulamento. Mantem os atributos protegidos (visibilidade private); Cria métodos de acesso public para acessar os atributos. Benefícios: fácil manutenção, flexibilidade e extensibilidade. Métodos set e get. set :utilizado para modificar uma variável de instância Sintaxe: public void setnomevariavelinstancia(tipo nome) {} get: utilizado para acessar uma variável de instância Sintaxe: public Tipo getnomevariavelinstancia() {}
Métodos acessadores e modificadores Forma clássica através de métodos public class Contato { private string nome; public void getnome(){ return nome;} public string setnome(string s){ nome=s;} }
Métodos acessadores e modificadores com propriedades Outra forma é o uso de propriedades. Cria-se atributos extras chamados de propriedades. public class Contato { private string nome; public string Nome { get { return nome; } set { nome = value; } }... }
Métodos Sobrecarregados A sobrecarga de método permite reutilizar o mesmo nome do método de uma classe, mas com argumentos diferentes. Regras básicas: a sobrecarga de método devem alterar a lista de argumentos; podem alterar o tipo de retorno; podem alterar o modificador de acesso.
Métodos Sobrecarregados Exemplo public void inserircontato(contato c) { listacontato[qtd++] = c; } public void inserircontato(string nome, String telefone){ listacontato[qtd++] = new Contato(nome, telefone); }
Construtores Sobrecarregados Exemplo public Contato(String nome, String telefone) { this.nome = nome; this.telefone = telefone; } public Contato(String nome) { this.nome = nome; }
This Todo objeto possui um atributo que é uma referência a ele mesmo Usado para acesso a membros do próprio objeto this.membro Evita conflito com parâmetros de métodos, por exemplo
Exercício Passo 1: Criar uma classe Aluno com os atributos nome, matricula, curso, email, disciplinas (array de string). Passo 2: Criar os métodos acessadores e modificadores (gets e sets) desses atributos, exceto o atributo disciplinas. Passo 3: Inicializar os atributos (nome, matricula, curso, email) em branco e o array disciplinas com 5 posições no construtor padrão. Passo 4: Criar um construtor que permita passar (nome, matricula,curso e email) e o tamanho do array como parâmetros. Usar os nomes das variáveis de parâmetros iguais às variáveis de instância. Utilize o atributo this para evitar conflitos de parâmetro. Passo 5: Criar um método para cadastrar disciplinas. O método recebe o nome da String e adiciona ao último item do array. Passo 6: Fazer a sobrecarga do método anterior para receber além do nome, a posição do array onde o nome deverá ser armazenado. Passo 7: Criar o método para remover uma disciplina, recebe como parâmetro o nome da disciplina. Passo 8:Criar um mecanismo para fornecer um identificador único (id) para cada objeto criado. Passo 9: Criar um método para exibir o estado de cada objeto, ou seja, o conteúdo de suas variáveis (id, nome, matricula, curso, email e lista de disciplinas);
Dúvidas