Você está na página 1de 25

WebAula 1 Conceitos de classes abstratas e interfaces O que uma classe abstrata?

? (Abstract Class) A classe abstrata um tipo de classe que somente pode ser herdada e no instanciada. De certa forma podemos dizer que este tipo de classe conceitual, que pode definir funcionalidades para que as suas subclasses possam implement-las de forma no obrigatria, ou seja ao se definir um conjunto de mtodos na classe abstrata no de total obrigatoriedade a implementao de todos os mtodos em suas subclasses.

Em uma classe abstrata os mtodos declarados podem ser abstratos ou no e suas implementaes devem ser obrigatrias na subclasse. Quando criamos um mtodo em uma classe abstrata sua implementao obrigatria pelas classes herdadas. Caso voc no implemente o mesmo, o compilador criar um erro em tempo de compilao. Exemplo de implementao retirado do books online em C#.

abstract class formaClasse { abstract public int Area(); } class quadrado : formaClasse { int x, y; // Se no for implementado o mtodo Area()

// ser gerado um compile-time error. public override int Area() { return x * y; } } Interface As interfaces so fundamentais em um sistema orientado a objetos. Quando dizemos que um objeto a instancia de uma classe, na verdade queremos dizer que este objeto implementa a interface definida pela classe, ou seja, uma interface define as operaes que um objeto ser obrigado a implementar. Para cada operao declarada por um objeto deve ser especificado o nome da operao, os objetos que esta operao aceita como parmetro e o tipo de valor retornado pela operao. Este conjunto de informaes sobre uma determinada operao tem o nome de assinatura da operao e a um conjunto de assinaturas de operaes d-se o nome de interface. importante lembrar que uma interface nunca contm implementao, ou seja, numa interface no se pode definir campos, pois o mesmo uma implementao de um atributo objeto. A interface tambm no permite construtores, pois num construtor temos as instrues usadas para inicializar campos. Para podermos usar uma interface devemos criar uma classe ou estrutura e herdar da interface, com isso obrigatrio implementar todos os mtodos da interface. Exemplo de implementao. interface IExemploInterface {

void ExemploMetodo(); } class Implementacaoclasse : IExemploInterface { // Implementao explicita da interface void IExemploInterface.ExemploMetodo() { // Implementao do mtodo } static void Main() { // Declarando uma instancia de uma interface IExemploInterface obj = new Implementacaoclasse(); // chame o mtodo. obj.SampleMethod(); } } Classes Abstratas X Interfaces Uma classe abstrata pode conter mtodos completos ou incompletos. UmaInterface pode conter apenas a assinatura de um mtodo, mas nenhum corpo ou implementao.

Portanto, em uma classe abstrata, pode-se implementar mtodos, mas em uma Interface no. Uma classe abstrata pode conter campos, construtores, ou destrutores e aplicar propriedades. Uma interface no pode conter campos, construtores, ou destrutores; pode possuir apenas a propriedade da assinatura, mas no a implementao. Uma classe abstrata no suporta mltiplas heranas, mas uma interfacepode suportar mltiplas heranas, assim uma classe pode herdar vriasinterfaces, mas apenas uma classe abstrata e uma classe que implementa uma interface tem de obrigatoriamente implementar todos os mtodos dainterface, mas o mesmo no exigido no caso de uma classe abstrata, que so mais rpidas que as interfaces. Ento, quando devo utilizar o qu? Classes Abstratas podem adicionar mais funcionalidades sem destruir as funcionalidades das classes filhos que poderiam estar usando uma verso mais antiga. Classes abstratas fornecem uma maneira simples e fcil paraversionar nossos componentes e atravs da atualizao da classe base, todas as classes que herdam so atualizadas automaticamente com a mudana. Em uma interface a criao de funes adicionais ter um efeito sobre suas classes filhos, devido necessidade de implementao dos Mtodos criados na interface. Ento, classes abstratas deveriam ser usadas principalmente para objetos que esto estritamente relacionados, enquanto o uso de interfaces mais adequado para fornecer funcionalidade comum a classes independentes. Digamos que existem duas classes, de pssaros e de avies, e nas duas existam os mtodos chamados voar(). Seria estranho para uma classe avio herdar a classe pssaro apenas porque necessita do mtodo voar(). Em vez disso, o mtodo voar() deve ser definido em uma interface e em ambas as classes pssaro e avio devem implementar a interface. Se quisermos

proporcionar uma funcionalidade em comum para os componentes, devemos utilizar uma classe abstrata. Classes abstratas nos permitem implementar parcialmente uma classe, enquanto a interface no contem a implementao de qualquer membro, por isso a seleo de interface ou classes abstratas depende das necessidades e design do nosso projeto. Podemos fazer uma classe abstrata, interface, ou at uma combinao de ambas, dependendo de nossas necessidades. Concluso Devemos utilizar classes abstratas quando queremos compartilhar funcionalidades em comum entre classes e utilizar interfaces quando desejamos que uma classe possua as mesmas assinaturas porm a implementao de cada mtodo no precisa ser a mesma. Agora que j temos a interface e a classe que a implementa, para fazer uso da interface o que o cliente precisa fazer instanciar um objeto que implemente essa interface e assinalar esse objeto uma varivel do tipointerface. Ento vejamos uma construo de cdigo usando interface: IminhaInterface obj:obj = new MinhaClasse():obj.Metodo2(): Apesar do uso de interface prover certa indireo relativa classe que a implementa, o cliente ainda precisa instanciar a classe, como pode ser visto no exemplo anterior. Deste modo, no h uma completa separao entre a interface e a sua implementao.

Como os mtodos de MinhaClasse so pblicos, pode-se tambm utilizar o seguinte cdigo para acessar os mtodos: MinhaClasse obj;obj = new MinhaClasse();obj.Metodo2(); Como essa construo correta e, como j foi visto, mesmo quando fazemos uso de interface o cliente ainda precisa instanciar a classe que a implementa.

Acredito que seja essa uma das razes pelas quais os desenvolvedores no dem muita ateno ao uso de interfaces, principalmente aqueles que vm do mundo no OOP e tem uma maior dificuldade em abstrair conceitos, ou seja, para que utilizar interfaces se podemos fazer acesso direto aos mtodos utilizando apenas a classe?

Bem, existe a o principio das "boas prticas". Se voc quiser levar a srio o conceito de projeto de software baseado em componentes, ento h a necessidade de aderir a algumas regras prticas e uma delas , sempre que possvel, procurar separar a interface de sua implementao e, fazendo o uso de interfaces, prover um mximo de desacoplamento entre cliente e o provedor de servios.

Uma maneira de evitar o acesso direto aos mtodo a utilizao da implementao explicita dainterface no servidor, em que cada membro da interface implementado utilizando o nome dainterface. public class MinhaClasse() : IMinhaInterface{ void

IminhaInterface.Metodo1(){....}

void IminhaInterface.Medoto2(){....}}

Note que nesse caso, as implementaes dos mtodos no mais utilizam a palavra public. Desse modo, o cliente s poder fazer o acesso aos mtodos, via interface: IminhaInterface obj;obj = new MinhaClasse();obj.Metodo2(); Se no cliente o desenvolvedor tentar instanciar a classe e assinalar o objeto uma varivel que no seja do tipo da interface, o compilador mostrar um erro, dizendo que a classe no contm o mtodo em questo. Web Aula 2 Criando Classes - Interface O que interface?

Para quem no domina OOP, quando se fala em interface a primeira coisa que vem a mente ainterface com o usurio, ou seja, telas, botes, caixas de texto, etc. Bem, isso no deixa de ser umainterface mas, em OOP, o conceito de interface bem diferente. No MSDN voc vai verificar que interfaces, da mesma maneira que classes, definem um conjunto de propriedades, mtodos e eventos, porm, diferentemente das classes, interfaces no provem implementaes. Pode-se dizer que uma interface semelhante a uma classe abstrata. Ento, poderamos ter: public interface IminhaInterface{ void Metodo1(); void Metodo2();} que seria semelhante a public abstract class MinhaInterface{ abstract public void Metodo1(); abstract public void Metodo2();} Note que tanto a interface como a classe abstrata no implementam os dois mtodos. Surge ento a pergunta: ento qual a diferena? Podemos citar algumas pequenas diferenas: Classe abstrata - Pode ter ou no alguma implementao. Pode tambm ter variveis membros, mtodos no abstratos ou propriedades. - Pode derivar de apenas uma classe base, mesmo que essa classe base seja abstrata, mas pode derivar de quantas interfaces for necessrio. - Pode ter mtodos e propriedades no pblicos, ou seja, private ou protected. - Pode ter mtodos e membros estticos (static) e definir constantes. Interface

- No tem implementaes ou variveis membros. - S pode derivar de interfaces. - Todos os membros so pblicos. - No pode ter nenhum desses itens. Por que essas pequenas diferenas? Uma comparao bastante utilizada para a definio de interfaces que elas atuam como um contrato entre o cliente e o provedor do servio (a classe que implementa a interface) no qual o cliente est interessado. Num contrato, todas as regras tm que estar muito bem definidas, ou seja, tudo tem que ser mostrado publicamente e nada pode ser escondido. Imagine s um contrato em que algumas informaes estivessem escondidas ou mesmo escritas com as famosas "letras midas". Desse modo, quando se fala em uma interface, ou contrato, o cliente pode seguramente se basear no que est escrito no contrato (interface) porque tudo o que est l escrito ser cumprido pelo provedor dos servios. Pensando dessa maneira, agora fica claro porque todos os membros de umainterface so pblicos e muito bem definidos e porque na interface no consta nenhum detalhe da implentao. Mesmo que haja alteraes na implementao no afeta o cliente que se baseia numa interface que, por definio, imutvel. Isso tambm permite um alto grau de desacoplamento entre o cliente e o provedor, uma vez que a interface no tem nenhum conhecimento das implementaes que ficam encapsuladas atrs da interface, ou seja, no provedor (classes). O provedor fica livre para levar a efeito as implementaes, contanto que o contedo do contrato (interface) seja respeitado. Obviamente que o provedor pode fornecer muito mais do que consta no contrato, o que no faz diferena para o cliente, pois no afeta a interface, mas nunca menos para que no haja quebra de contrato. Surge ento a pergunta: caso seja necessrio, como estender as facilidades da interface? Uma vez que a interface pode estar sendo utilizada por outros

clientes, a sada seria a utilizao de outrasinterfaces ou, em outras palavras, o cliente fazer uso de mltiplos contratos. Implementando uma interface Para implementar uma interface, o que a classe tem que fazer derivar da interface e implementar todos os mtodos definidos na interface. Ento teremos: public interface IMinhaInterface{ void Metodo1(); void Metodo2();} Note que o nome de interface deve iniciar com um I maisculo. Ento, ao implementar a interface na classe, teremos: public class MinhaClasse : IMinhaInterface{ public void Metodo1(){......} public void Metodo2(){.....} // outras implementacoes int Medoto3(){.......}}

Perceba que os mtodos implementados na classe devem ser explicitamente declarados como pblicos, uma vez que, por definio, todos os mtodos da interface tambm o so. Agora que j temos a interface e a classe que a implementa, para fazer uso da interface o que o cliente precisa fazer instanciar um objeto que implemente essa interface e assinalar esse objeto uma varivel do tipo interface. Ento vejamos uma construo de cdigo usando interface: IminhaInterface obj:obj = new MinhaClasse():obj.Metodo2(): Apesar do uso de interface prover certa indireo relativa classe que a implementa, o cliente ainda precisa instanciar a classe, como pode ser visto no exemplo anterior. Deste modo, no h uma completa separao entre a interface e a sua implementao. Como os mtodos de MinhaClasse so pblicos, pode-se tambm utilizar o seguinte cdigo para acessar os mtodos: MinhaClasse obj;obj = new MinhaClasse();obj.Metodo2();

Como essa construo correta e, como j foi visto, mesmo quando fazemos uso de interface o cliente ainda precisa instanciar a classe que a implementa. Acredito que seja essa uma das razes pelas quais os desenvolvedores no dem muita ateno ao uso de interfaces, principalmente aqueles que vm do mundo no OOP e tem uma maior dificuldade em abstrair conceitos, ou seja, para que utilizar interfaces se podemos fazer acesso direto aos mtodos utilizando apenas a classe? Bem, existe a o principio das "boas prticas". Se voc quiser levar a srio o conceito de projeto desoftware baseado em componentes, ento h a necessidade de aderir a algumas regras prticas e uma delas , sempre que possvel, procurar separar a interface de sua implementao e, fazendo o uso de interfaces, prover um mximo de desacoplamento entre cliente e o provedor de servios. Uma maneira de evitar o acesso direto aos mtodo a utilizao da implementao explicita dainterface no servidor, em que cada membro da interface implementado utilizando o nome dainterface. public class MinhaClasse() : IMinhaInterface{ IminhaInterface.Metodo1(){....} void

void IminhaInterface.Medoto2(){....}}

Note que nesse caso, as implementaes dos mtodos no mais utilizam a palavra public. Desse modo, o cliente s poder fazer o acesso aos mtodos, via interface: IminhaInterface obj;obj = new MinhaClasse();obj.Metodo2(); Se no cliente o desenvolvedor tentar instanciar a classe e assinalar o objeto uma varivel que no seja do tipo da interface, o compilador mostrar um erro, dizendo que a classe no contm o mtodo em questo. WebAula 1 Implementao de classes abstratas e interfaces Classes Abstratas

Existem ocasies nas quais as classes seguem um padro para que no futuro outras classes herdem desta classe base. Neste caso j se tem a herana em mente. Imagine que ao criar uma classe voc perceba que, ao invs dela servir a um nico propsito, possa ser generalizada e usada para outros objetivos. Imagine que voc esta criando uma classe e que pretende us-la para efetuar processos, por exemplo, clculos para retngulos, quadrados, paralelogramos e tringulos. O primeiro pensamento que vem que todos estes objetos tm algo em comum, portanto pode-se criar uma classe que atenda a todos, mesmo que os processos (no caso algum clculo) sejam diferentes em cada um. Esta classe seria uma Classe Base para eles. Como so objetos geomtricos e cada um tem uma forma diferente, pode-se criar uma classe que tenha atributos e mtodos que sirvam para todos, porm podem existir mtodos que sejam comuns a todos, mas que o trabalho realizado seja diferente para cada objeto. Para atender a este problema, existem as classes abstratas e mtodos abstratos, alm de propriedades, eventos e indexadores abstratos. A implementao deste tipo de classe diferente das chamadas Classes Concretas. Se cada objeto geomtrico uma classe, pode-se criar uma que seja a classe base para elas, por exemplo, Classe Forma. Neste caso, no se faz necessria a implementao de mtodos particulares, apenas especificaes, permitindo que a criao de apenas o prottipo de mtodos, isto , mtodos que no tm bloco de comando, somente seu escopo. Estes mtodos recebem o nome de mtodos abstratos. O cdigo de cada um destes mtodos feito somente nas classes derivadas da classe abstrata. Entretanto, existem duas implicaes: a) no possvel instanciar objetos da classe, uma vez que os mtodos so incompletos;

b) h a obrigatoriedade da implementao de todos os mtodos abstratos para que se possa instanciar a classe derivada. Esta segunda exigncia cria um tipo de contrato futuro, isto , faz com que todas as classes que derivarem desta classe base implementem, obrigatoriamente, os mtodos abstratos. A definio de uma classe abstrata e mtodo abstrato ficam da seguinte forma: abstract class Forma{ } Qualquer classe derivada da classe forma, seja ela a classe crculo, retngulo, tringulo ou qualquer outra do gnero ter que implementar o mtodo area( ), obviamente elas faro o seu prprio cdigo de clculo de uma rea. Interfaces Interfaces so modelos para a construo de outras classes. Diferentemente das classes abstratas, as interfaces no carregam cdigo algum dentro de sua estrutura, elas apenas definem mtodos, propriedades e permitem a declarao de constantes. Implicitamente os mtodos das interfaces tm seus acessos declarados como public e abstract. Ento, como se pode ver, uma interface no tem aplicao sozinha. Ela contm apenas as definies de eventos, indexadores, mtodos e/ou propriedades. A razo pela qual as interfacesfornecem apenas as definies porque elas so implementadas por classes e estruturas, as quais devem proporcionar uma aplicao para cada membro definido dentro desta interface. Para exemplificar a construo de uma interface e classe derivada, utilizou-se a idia de impresso e edio, isto , sero construdas duas interfaces. Veja o exemplo a seguir: interface Interf1{ public void mostrar(); public void mostrarnoConsole(); } abstract double area()

Veja que os mtodos no tm codificao, apenas definies. Logo, qualquer classe que implementar a interface ter o compromisso de criar o corpo dos mtodos definidos na interface. O escopo de uma classe que herda da interface Interf1 fica da seguinte forma: class Pessoa: Interf1 Como j citado, em CSharp no existe herana mltipla, contudo possvel implementar as operaes de mltiplas interfaces. No contraditrio dizer que no existe herana mltipla, mas pode implementar mltiplas interfaces? Quando se diz que no h herana mltipla, devido impossibilidade de uma classe herdar caractersticas de duas ou mais classes ou classes abstratas. Todas as classes e classes abstratas contm implementaes, isto , seus mtodos so criados dentro da sua classe, com exceo, claro, dos mtodos abstratos em classes abstratas. Nas interfaces no existem corpos para os mtodos, apenas seus escopos (assinaturas), e no existem atributos com valores variveis, apenas as chamadas constantes, nas quais o valor nunca muda durante a execuo do programa. Qualquer classe derivada da classe forma, seja ela a classe crculo, retngulo, tringulo ou qualquer outra do gnero ter que implementar o mtodo area( ), obviamente elas faro o seu prprio cdigo de clculo de uma rea. Interfaces Interfaces so modelos para a construo de outras classes. Diferentemente das classes abstratas, as interfaces no carregam cdigo algum dentro de sua estrutura, elas apenas definem mtodos, propriedades e permitem a declarao de constantes. Implicitamente os mtodos das interfaces tm seus acessos declarados como public e abstract. Ento, como se pode ver, uma interface no tem aplicao sozinha. Ela contm apenas as definies de eventos, indexadores, mtodos e/ou propriedades. A razo pela qual as interfacesfornecem apenas as definies porque elas so

implementadas por classes e estruturas, as quais devem proporcionar uma aplicao para cada membro definido dentro desta interface. Para exemplificar a construo de uma interface e classe derivada, utilizou-se a idia de impresso e edio, isto , sero construdas duas interfaces. Veja o exemplo a seguir: interface Interf1{ public void mostrar(); public void mostrarnoConsole(); } Veja que os mtodos no tm codificao, apenas definies. Logo, qualquer classe que implementar a interface ter o compromisso de criar o corpo dos mtodos definidos na interface. O escopo de uma classe que herda da interface Interf1 fica da seguinte forma: class Pessoa: Interf1 Como j citado, em CSharp no existe herana mltipla, contudo possvel implementar as operaes de mltiplas interfaces. No contraditrio dizer que no existe herana mltipla, mas pode implementar mltiplas interfaces? Quando se diz que no h herana mltipla, devido impossibilidade de uma classe herdar caractersticas de duas ou mais classes ou classes abstratas. Todas as classes e classes abstratas contm implementaes, isto , seus mtodos so criados dentro da sua classe, com exceo, claro, dos mtodos abstratos em classes abstratas. Nas interfaces no existem corpos para os mtodos, apenas seus escopos (assinaturas), e no existem atributos com valores variveis, apenas as chamadas constantes, nas quais o valor nunca muda durante a execuo do programa. Em resumo, quando uma classe herda outra, pode reaproveitar ou especificar comportamentos de objetos em uma hierarquia. Quando uma classe implementa uma interface, ela no reaproveita cdigo, uma vez que no

existem tais cdigos, todavia ela se v obrigada a seguir os comportamentos ditados pela interface. Veja como fica a declarao de uma classe que implementa duas interfaces: interface Idemonstra { void Mostrar(); } interface Idemonstra1 { void Mostrar(); } class Implementa:Idemonstra,Idemonstra1 { void Idemonstra.Mostrar() { Console.WriteLine("Show() method Implemented"); } void Idemonstra1.Mostrar() { Console.WriteLine("Display() method Implemented"); }

public static void Main(string[] args) { Implementa InstClasse = new Implementa(); IsntClasse.Idemonstra.Mostrar(); IsntClasse.Idemonstra1.Mostrar(); } } Concluso Nesta unidade foi abordado o conceito de herana, classes abstrata e interfaces. Portanto, importante que voc compreenda bem e passe a utilizar tal conceito de forma coerente. Resumo Em algumas ocasies as classes seguem um padro para que no futuro outras classes herdem desta classe, que ser chamada de Classe Base. Uma classe base pode ter mais de uma classe derivada, porm uma classe que derivar de uma base s poder herdar dela, isto , uma classe derivada tem apenas uma classe base. Nas classes chamadas abstratas existem mtodos que no contm corpo, so os chamados mtodos abstratos. O cdigo destes mtodos abstratos feito somente nas classes derivadas da classe abstrata. Foram apresentadas duas regras para estas classes abstratas: a) no possvel instanciar objetos da classe, uma vez que os mtodos so incompletos;

b) h a obrigatoriedade da implementao de todos os mtodos abstratos para que se possa instanciar a classe derivada. Existem ainda as interfaces, que tem similaridades com o escopo de uma classe, porm no so classes. As interfaces so um tipo de modelo para a construo de outras classes e diferenciam-se das classes abstratas por no carregarem cdigo algum dentro de sua estrutura. Apenas definem mtodos, propriedades e permitem a declarao de constantes. Implicitamente os mtodos dasinterfaces tm seus acessos declarados como public e abstract. Implementando com interfaces A sintaxe do uso de interfaces pode parecer muito estranha, primeira vista. Vamos comear com um exerccio para praticar a sintaxe: 1. Crie um projeto novo no C# com o nome UsandoInterfaces 2. Adicione uma classe ao seu projeto clicando com o boto direito sobre o nome do projeto (UsandoInterfaces) e de o nome de IFigurasGeometricas. 3. No arquivo troque a palavra Class por interface Ficando ento o nosso arquivo desta forma: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace UsandoInterfaces { interface IFormasGeometricas { double CalcularArea()

} } Agora vamos criar uma classe herdando da interface IFormasGeometricas Novamente clique com o boto direito no projeto e adicione mais uma classe e de o nome de FormasGeometricas. Agora vamos criar as classes que herdaram da interface IFormasGeometricas. Renomeie a classe FormasGeometricas para _Quadrado e faa a herana da interface da seguinte forma: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace UsandoInterfaces { class _Quadrado: IFormasGeometricas { public int Base { get; set; }

public double CalcularArea() { return Base * Base;

} } } Web Aula 2 Classes Abstratas Vamos testar a nossa classe, monte o form da aplicao da seguinte forma: Agora crie um atributo no seu form deste maneira: public partial class Form1 : Form { private _Quadrado Quadrado; Agora no form_Load (duplo clique no formulrio) do seu formulrio codifique da seguinte forma: private void Form1_Load(object sender, EventArgs e) { Quadrado = new _Quadrado(); } De um duplo clique no boto que voc inseriu no form e codifique desta forma: private void button1_Click(object sender, EventArgs e) { Quadrado.Base = int.Parse(textBox1.Text); textBox2.Text = Quadrado.CalcularArea().ToString();

} Execute a aplicao e teste o clculo, digitando o valor da base do quadrado a ser calculado. Vamos criar mais uma classe usando esta interface. Crie ento a classe Circulo, veja a codificao abaixo: class _Circulo : IFormasGeometricas { public double Diametro { get; set; } public double CalcularArea() { // Formula da area de um circulo: // pi * raio ao quadrado (O raio e a metade do dimetro ou seja // dimetro dividido por 2) // Math.Pow o mtodo que calcula potencia ex: 102 // em c# se escreve assim: Math.Pow(10,2) double RaioAoQuadrado = Math.Pow(Diametro / 2, 2); return (Math.PI * RaioAoQuadrado); } } Agora acrescente mais alguns componentes no seu form desta forma: No clique do boto Calcular rea do Circulo codifique desta forma:

{ Circulo.Diametro = double.Parse(textBox3.Text); textBox4.Text } Agora teste a classe circulo. Repare que se voc tivesse usado herana, no ia ganhar muita coisa, j que cada implementao totalmente diferente da outra: um Quadrado, um Retangulo e um Circulo tm atributos e mtodos bem diferentes. Mas, mesmo que eles tivessem atributos em comum, utilizar interfaces uma maneira muito mais elegante de modelar suas classes. Todas as classes que herdarem da InterfaceIFormasGeometricas possuiro o mesmo mtodo chamado CalcularArea porm cada classes efetua uma calculo diferente acontecendo neste momento uma caracterstica chamada polimorfismo. Como trabalhar com classes abstratas Para criar uma classe abstrata precisamos usar a declarao abstract cuja sintaxe segue abaixo: abstract class Util { } Para entendermos as classes abstract, vamos criar os mesmos exerccios acima com classes abstratas. Vamos l: 1. Crie um projeto novo no C# com o nome UsandoClassesAbstratas 2. Adicione uma classe ao seu projeto clicando com o boto direito sobre o nome do projeto (UsandoClassesAbstratas) e de o nome de AFigurasGeometricas. 3. No arquivo adicione a clausula abstract antes da palavra Class = Circulo.CalcularArea().ToString();

Ficando ento o nosso arquivo desta forma: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace UsandoClassesAbstrata { abstract class AFormasGeometricas { public abstract double CalcularArea(); } } Agora vamos criar uma classe herdando das classes abstrata AFormasGeometricas. Novamente clique com o boto direito no projeto e adicione mais uma classe e de o nome de FormasGeometricas. Agora vamos criar as classes que herdaram da classe abstrata AFormasGeometricas. Renomeie a classe FormasGeometricas para _Quadrado e faa a herana da classes abstrata da seguinte forma: using System; using System.Collections.Generic;

using System.Linq; using System.Text; namespace UsandoClassesAbstrata { class _Quadrado: AFormasGeometricas { public int Base { get; set; } public override double CalcularArea() { return Base * Base; } } Veja que para implementar uma classe com classe abstrata, os mtodos precisam ser definidos com a clusula override. Essa foi a nica diferena com relao a implementao com interfaces. Vamos testar a nossa classe, monte o form da aplicao da seguinte forma: Agora crie um atributo no seu form deste maneira: public partial class Form1 : Form { private _Quadrado Quadrado;

Agora no form_Load (duplo clique no formulario) do seu formulrio codifique da seguinte forma: private void Form1_Load(object sender, EventArgs e) { Quadrado = new _Quadrado(); } De um duplo clique no boto que voc inseriu no form e codifique desta forma: private void button1_Click(object sender, EventArgs e) { Quadrado.Base = int.Parse(textBox1.Text); textBox2.Text = Quadrado.CalcularArea().ToString(); } Execute a aplicao e teste o clculo, digitando o valor da base do quadrado a ser calculado. Vamos criar mais uma classe usando esta classes abstrata. Crie ento a classe Crculo. Veja a codificao abaixo: class _Circulo : AFormasGeometricas { public double Diametro { get; set; } public override double CalcularArea() {

// Formula da area de um circulo: // pi * raio ao quadrado (O raio e a metade do dimetro ou seja // dimetro dividido por 2) // Math.Pow o mtodo que calcula potencia ex: 102 // em c# se escreve assim: Math.Pow(10,2) double RaioAoQuadrado = Math.Pow(Diametro / 2, 2); return (Math.PI * RaioAoQuadrado); } } Agora acrescente mais alguns componentes no seu form desta forma: No clique do boto Calcular rea do Circulo codifique desta forma: { _Circulo Circulo = new _Circulo(); Circulo.Diametro = double.Parse(textBox3.Text); textBox4.Text } Agora teste a classe circulo. = Circulo.CalcularArea().ToString();