Baixe o app para aproveitar ainda mais
Prévia do material em texto
Construtores e Destrutores Programação Orientada por Objetos Baseado no material: - Dos professors João Caram , Hugo Bastos e Anna Tostes - Da Apostila de C# e Orientação a Objetos da K19 Treinamentos Classes e Objetos em C# Declarar uma classe: Declarar um objeto: class Conta { // atributos public int numero ; public double saldo ; public int agencia ; } Conta C = new Conta(); Classes e Diagramas UML • O diagrama UML de uma classe é composto pelo nome da mesma e pelos atributos e métodos que ela define. • Todos os objetos criados a partir da classe Conta terão os atributos e métodos mostrados no diagrama UML. • Os valores dos atributos de dois objetos criados a partir da classe Conta podem ser diferentes. Classes e Diagramas UML Métodos C# Método:representa uma ação class Conta { // atributos public int numero ; public double saldo = 0 ; public int agencia ; // metodos public void Deposita ( double valor ) { saldo += valor ; } public void ImprimeExtrato ( ) { .... static void Main( string[ ] args) { double x; ..... Conta C = new Conta (); C.Deposita (x) ; 6 Cláusula this • Se refere ao objeto corrente • usado normalmente para resolução de problemas de escopo class Data { private int mes, dia, ano; public Data(int mes, int dia, int ano) { this.mes = mes; this.dia = dia; this.ano = ano; } } Métodos em C# • Método é um membro de uma classe que permite implementar uma ação. • Consiste de um cabeçalho (contém um atributo, um modificador, um tipo de retorno, um nome do membro e uma lista formal de parâmetros) e um corpo (bloco de declarações). • O C# inclui 8 modificadores. Modificadores de visibilidade • private: somente a classe incluída pode acessar o objeto, método ou variável. • public: todos têm acesso. • protected: São apenas visíveis para as classes derivadas por meio de herança. • internal: acesso livre somente dentro de um assembly (DLL ou EXE) correspondente ao JAR do Java. Fora do assembly da classe é inacessível. Atributos de Classe Atributo compartilhado entre todos os objetos criados: armazenado na classe. Em geral, são identificados pela palavra-chave static É único para todos os objetos instanciados Exemplos: Contadores nomes de arquivos compartilhados Acumuladores ... Métodos de classe • Métodos que não acessam dados particulares de objetos • Podem acessar recursos da classe • Análogos aos atributos estáticos: “funcionam” para a classe ao invés de estarem em cada objeto. •Ex: manipulação de tipos → Int.Parse •classes “biblioteca” → Math Modificadores em C# new O modificador new em um método indica que o método derivado é planejado para esconder o método base public É usado para garantir que um método ou atributo é acessado por todas as classes sem qualquer restrição static indica que o método pertence somente a classe em questão e não aos objetos, ou seja, atributos ou métodos terão apenas uma cópia para n objetos que o gerarem. virtual É usado quando a implementação de um método pode ser mudada por classes derivadas sealed Em um método, previne uma classe derivada sobrescrever um método override É usado para modificar um método de uma classe base na classe derivada abstract Em um método, indica que o método não contém implementação extern Indica que o método é implementado externamente Sobrecarga (Overloading) Ocorre quando métodos são definidos na mesma classe com o mesmo nome, mas a lista de parâmetros dos métodos são diferentes. Exemplo: class Conta { public double saldo ; public double limite ; public void ImprimeExtrato (int dias ){ } public void ImprimeExtrato () { this . ImprimeExtrato (15) ; } } Valores padrão em C# • Pode-se instanciar um objeto e utilizar seus atributos sem inicializá-los explicitamente, pois os atributos são inicializados com valores padrão. • Atributos de tipos numéricos são inicializados com 0. • Atributos do tipo boolean são inicializados com false • Demais atributos com null (referência vazia). • A inicialização dos atributos com os valores padrão ocorre na instanciação, ou seja, quando o comando new é utilizado. Construtores São métodos especiais responsáveis pela implementação de ações necessárias para criar um objeto. Construtor padrão (default): Geralmente inicializa todos os atributos com null, false ou zero Construtor próprio Permitem que um determinado trecho de código seja executado toda vez que um objeto é criado, ou seja, toda vez que o operador new é chamado. Podem receber parâmetros (entrada), mas não devolvem (retornam) resposta (saída). Classes e Objetos public class Cliente { public int produtosAdquiridos; public readonly bool clienteEspecial; //Construtor default public Cliente() { if (this.produtosAdquiridos > 250) this.clienteEspecial = true; else this.clienteEspecial = false; } } Inicializado com false Construtores Construtor padrão • Toda vez que um objeto é criado, um construtor da classe correspondente deve ser chamado. • Mesmo quando nenhum construtor for definido explicitamente, há um construtor padrão que será inserido pelo próprio compilador. • O construtor padrão não recebe parâmetros e será inserido sempre • que o desenvolvedor não definir pelo menos um construtor explicitamente. • Para instanciar uma classe que não possui construtores definidos no código fonte, é utilizado o construtor padrão, já que este é inserido automaticamente pelo compilador. Construtores Construtores-padrão podem ser inapropriados e/ou inseguros Procure criar seus próprios Classes e Objetos Construtores ● Cuidado!!! Ao criar um construtor para a classe, o compilador não cria um construtor padrão. Classes e Objetos Construtores Construtores padrão: cuidado! Classes e Objetos Construtores ●Ok! Classes e Objetos Construtores Classes e Objetos Construtor Estático • Usado para: • inicializar qualquer dado estático • Executar uma ação específica necessária apenas uma vez. • Chamado automaticamente antes da primeira instância ser criada ou quaisquer membros estáticos serem referenciados. Classes e Objetos Destrutores (Destructors) • Métodos especiais invocados quando um objeto é finalizado. • Só há um destrutor por classe. • Destrutor não tem parâmetros. • Não deve ser chamado diretamente Destrutores (Destructors) • Objetivo principal: liberação de recursos usados pelo objeto • Exemplos: • Memória. • Arquivos. • conexões de rede, bancos de dados, etc. Destrutores • Algumas linguagens OO possuem um “coletor de lixo” (garbage collector) • Garbage collector: retira automaticamente da memória objetos não referenciados: • “Limpa a memória sozinho” Destrutores C++ ~nomeDaClasse(){ //seu código aqui } Java: não implementa destrutores Destrutores C# - Existem, mas são chamados automaticamente - Na verdade, executam um método finalizador da classe base. Destrutores C# Chamados pelo coletor de lixo: nunca sabemos quando isso acontece. Pode-se chamar o coletor ? –Sim, mas cuidado: desempenho
Compartilhar