Você está na página 1de 6

Classes Abstratas

So classes que NO PODEM SER INSTANCIADAS e que apenas servem de base para o desenvolvimento de outras classes. Uma classe abstrata comumente utilizada quando temos situao de herana. Da mesma forma, tambm temos Mtodos Abstratos, que so aqueles que no podem ser acessados sem que sejam reescritos pela classe que os herdam. Vejamos o exemplo:

abstract class Forma { private double _area; private string _cor; private double _perimetro; public string Cor { get { return _cor; } set { _cor = value; } } public double Area { get {return _area;} set {_area = value;} } public double Perimetro { get {return _perimetro;} set

{ _perimetro = value; } } public abstract void CalcularArea(); public abstract void CalcularPerimetro(); public string Descricao() { return "Sou a classe abstrata Forma."; } }

class Quadrado : Forma { private double lado; public double Lado { get {return lado;} set {lado = value;} } public override void CalcularArea() { this.Area = lado * lado; } public override void CalcularPerimetro() { this.Perimetro = 4 * lado; } }

class Program { static void Main(string[] args) { Quadrado q = new Quadrado();

Console.WriteLine(q.Descricao()); Console.WriteLine("Informe o valor do lado do quadrado em metros."); q.Lado = Convert.ToInt32(Console.ReadLine()); q.CalcularArea(); q.CalcularPerimetro(); Console.WriteLine("A rea do quadrado : " + q.Area + " m2 "); Console.WriteLine("O permetro do quadrado : " + q.Perimetro + " m "); Console.ReadKey(); } }

Acima, temos a classe Forma que abstrata e que por sua vez no pode ser instanciada. No entanto, um quadrado, tringulo ou um losango so formas e herdam caractersticas desta classe. Ela por si s no tem sentido funcional nenhum no projeto e por isso deve ser declarada como abstrata, pois apenas serve de modelo para a construo das subclasses que constroem as formas geomtricas.

Polimorfismo Polimorfismo o princpio pelo qual duas ou mais classes derivadas de uma mesma superclasse podem invocar mtodos que tm a mesma identificao (assinatura) mas comportamentos distintos, especializados para cada classe derivada, usando para tanto uma referncia a um objeto do tipo da superclasse" Usando polimorfismo podemos: 1. Invocar mtodos da classe derivada atravs da classe base em tempo de execuo; 2. Permitir que classes forneam diferentes implementaes de mtodos que so chamados com o mesmo nome; Polimorfismo por sobrescrita e por sobrecarga Polimorfismo por sobrescrita ocorre quando temos um mtodo abstrato ou virtual que podem ser reescritos com comportamentos diferentes em cada subclasse que ele est presente. Mtodo Virtual -> parecido com o mtodo abstrato, porm, alm de permitir a sobrescrita ele tambm pode ser invocado. Ex.:

public class Veiculo { private string tipo;

public string Tipo { get { return tipo; } set { tipo = value; } } public Veiculo(string tipoVeiculo) { this.tipo = tipoVeiculo; } public virtual void Mover() {} public virtual void Parar() {} } public class Automovel : Veiculo { public Automovel(string tipoVeiculo) : base(tipoVeiculo) {} public override void Mover() { Console.WriteLine("Acelerando o veculo"); } public override void Parar() { Console.WriteLine("Estou brecando o veculo."); } } public class Aeronave : Veiculo { public Aeronave(string tipoVeiculo) : base(tipoVeiculo) {} public override void Mover() { Console.WriteLine("Decolando a aeronave"); } public override void Parar() { Console.WriteLine("Estou aterrisando a aeronave."); } }

class Program { static void Main(string[] args) { Veiculo[] veiculo = new Veiculo[2]; veiculo[0] = new Automovel("Ferrari"); veiculo[1] = new Aeronave("Tucano"); MovimentarVeiculo(veiculo[0]); MovimentarVeiculo(veiculo[1]); Console.ReadKey(); } public static void MovimentarVeiculo(Veiculo veiculo) { Console.WriteLine(veiculo.Tipo); veiculo.Mover(); } }

Polimorfismo por sobrecarga ocorre quando temos mtodos com a mesma assinatura, porm, com parametrizao diferente. Vejamos o exemplo abaixo:

class Calcular { public int Soma(int num1, int num2) { return (num1 + num2); } public int Soma(int num1, int num2, int num3) { return (num1 + num2 + num3); } }

class Program {

static void Main(string[] args) { Calcular calc = new Calcular(); Console.WriteLine("\nPolimorfismo com sobrecarga\n"); Console.WriteLine("Somando 2 nmeros..."); Console.WriteLine(calc.Soma(45,43)); Console.WriteLine("Somando 3 nmeros..."); Console.WriteLine(calc.Soma(45, 43, 100 )); Console.ReadKey(); } }

O mtodo soma utilizado 2 vezes na classe Calcular, porm, cada um desses mtodos tem um nmero diferentes de parmetros de entrada. Desta forma, ele trabalha com polimorfismo por sobrecarga.

Você também pode gostar