Sobrecarga e Encapsulamento Paradigmas de Programação Marco Antonio Montebello Júnior [email protected] Encapsulamento Prática de esconder como um objetos executa suas operações, quando solicitado por um cliente. Traz muitos benefícios, pois o cliente não precisa saber como o objeto funciona internamente. Isso realmente não é relevante para ele. Paradigmas de Programação 2 Encapsulamento É o agrupamento dos dados e funções relacionados a uma classe. Permite determinar a forma como os membros da classe serão expostos. Possibilita baixo acoplamento, tornando as classes independentes. Em C#, pode-se utilizar propriedades para acessar os atributos de uma classe, garantindo a integridade. Paradigmas de Programação 3 Encapsulamento Modificadores de acesso de Classe Os modificadores de acesso que podem ser utilizados na construção das classes são Modificador Significado none ou internal A classe é acessível apenas dentro do projeto atual. public A classe é acessível de qualquer lugar abstract ou internal abstract A classe é acessível apenas dentro do projeto atual, não podendo ser instanciada, apenas derivada public abstract A classe é acessível de qualquer lugar, não podendo ser instanciada, apenas derivada (herdada) sealed ou internal sealed A classe é acessível apenas do projeto atual, não podendo ser derivada, apenas instanciada public sealed A classe é acessível de qualquer local, não podendo ser derivada, apenas instanciada Paradigmas de Programação 4 Encapsulamento Modificadores de acesso de Atributos Normalmente é utilizado internamente na classe (A exposição das características da classe é tarefa das propriedades ou do métodos) Modificador Significado public Atributo acessível a partir de qualquer código private Atributo acessível apenas para o código que faz parte da classe (o padrão se nenhuma palavra-chave for usada) Internal Atributo acessível apenas para o código dentro do projeto em que ele é definido protected Atributo acessível apenas para o código que faz parte da classe, ou uma classe derivada (filhos) Paradigmas de Programação 5 Encapsulamento Modificadores de acesso de Métodos Os modificadores dos métodos são: private public protected Modificador Significado virtual O métodos pode ser sobrescrito abstract O método deve ser sobrescrito (permitido apenas em classes abstratas) override O método se sobrepõe a um método da classe-pai / classe base (deve ser usado se um método estiver sendo sobrescrito) extern A definição do método se encontra em outro lugar Paradigmas de Programação 6 Encapsulamento Exemplo Ao pressionar o pedal de um carro (objeto), nós (clientes) não precisamos saber que ele irá aumentar a quantidade de combustível e ar enviada ao motor, que irá gerar uma maior combustão, movendo os pistões com mais força e rapidez, com isso aumentando a velocidade do carro. Para o cliente basta saber que, ao pressionar o pedal do acelerador, o carro irá adquirir velocidade. Paradigmas de Programação 7 Sobrecarga de métodos Sobrecarregar um método traz a possibilidade de termos diferentes versões do mesmo método ou propriedade que, mesmo possuindo o mesmo nome, aceitam um número diferente de parâmetros ou parâmetros de tipos diferentes O compilador diferencia o método que deve ser executado pelo número, tipo ou/e ordem dos parâmetros. Sobrecarga de construtores Paradigmas de Programação 8 Sobrecarga de métodos (overload) A sobrecarga permite que você crie métodos com o mesmo nome, mas com assinaturas diferentes. Assinatura é a lista de parâmetros que o métodos recebe. A palavra “sobrecarga” pode trazer uma idéia de estresse ou excesso de trabalho, mas em OO é um elemento que nos ajuda muito. Paradigmas de Programação 9 Sobrecarga de métodos (overload) Um exemplo de sobrecaraga é o método Show do MessageBox. Podemos observar que existem 21 alternativas diferentes para o método. O que diferencia um do outro é a combinação do número de parâmetros, seus nomes e tipos. Paradigmas de Programação 10 Sobrecarga Construtores //Construtor... public Pessoa() : this(String.Empty) { } public Pessoa(string Nome) { nome = Nome; } Paradigmas de Programação 11 Sobrecarga Métodos //Métodos... public Imprime() { //Código do método... } public Imprime(string Nome, int Idade) { //Código do método... } Paradigmas de Programação 12 Sobrecarga Construtores Temos 2 (dois) construtores: Um recebe o parâmetro para o nome da pessoa, inicializando assim o nome da mesma. Outro que não recebe nenhum parâmetro, mas utiliza o outro construtor para iniciar a variável nome como String.Empty(representa uma string vazia “”) Essa é uma técnica comum que visa a correta inicialização da classe reutilizando código. Paradigmas de Programação 13 Sobrecarga por sobreposição É o mecanismo que um SubClasse (classe filha) possui de literalmente “passar por cima” de métodos ou propriedades definidos em sua SuperClasse / ClasseBase (classe pai) Para que a SubClasse consiga sobrepor o elemento, a SuperClasse precisa declará-lo com a keyword virtual (C#) Paradigmas de Programação 14 Sobrecarga por sobreposição Mantendo a mesma identificação e assinatura do método Imprimir Um classe adicionando a keyword override (C#) descarta (ignora) a definição do método Imprimir da SuperClasse / ClasseBase e cria a sua própria. Paradigmas de Programação 15 Sobrecarga por sobreposição Exemplo //Métodos – SuperClasse (Pai)... public virtual string Imprime() { //Código do método... } //Métodos – SubClasse (Filha)... public override string Imprime() { //Código do método... } Paradigmas de Programação 16