26
Programação Orientada a Objeto POO FRANK COELHO ENGENHEIRO DE SOFTWARE ESPECIALISTA NA PLATAFORMA .NET Programação orientada a objeto (C# e Visual Basic)

3- POO

Embed Size (px)

Citation preview

Programação Orientada a ObjetoPOO

FRANK COELHOENGENHEIRO DE SOFTWARE

ESPECIALISTA NA PLATAFORMA .NET

Programação orientada a objeto (C# e Visual Basic)

Todas as linguagens gerenciadas no .NET Framework, como por exemplo Visual Basic e C# oferecem suporte completo para programação orientada a objeto, incluindo encapsulamento, herança e polimorfismo.

Encapsulamento significa que um grupo de propriedades, métodos e outros membros relacionados são tratados como uma unidade ou um objeto único.

Herança descreve a habilidade de se criarem novas classes baseadas em uma classe existente.

Polimorfismo significa que você pode ter múltiplas classes que podem ser usadas intercambiavelmente, mesmo que cada classe implemente as mesmas propriedades e métodos de modos diferentes.

Classes e ObjetosOs termos classe e objeto são às vezes usados representando a mesma coisa, mas na verdade, classes descrevem o tipo de objetos, enquanto objetos são instâncias úteis de classes. Dessa forma, o ato de criar um objeto é chamado de instanciação. Usando a analogia da planta, a classe é a planta, e o objeto é a construção feita daquela planta.

class SampleClass { }

Definindo uma classe:

O Visual Basic e o C# também fornecem uma versão light de classes chamadas estruturas que são úteis quando você precisa criar uma grande matriz de objetos e não deseja consumir muita memória para isso.

Definindo uma estrutura:struct SampleStruct { }

Membros de ClasseCada classe pode ter membros de classe diferentes que incluem propriedades que descrevem dados de classe, métodos que definem o comportamento da classe e eventos que fornecem comunicação entre classes e objetos diferentes.

Propriedades e camposCampos e propriedades representam informações que um objeto contém. Campos são como variáveis, porque eles podem ser lidos ou definidos diretamente.

Para definir um campo:Class SampleClass { public string sampleField; }

As propriedades têm procedimentos get e set, o que oferece mais controle sobre como os valores são definidos e retornados.

C# e Visual Basic permitem que você crie um campo particular para armazenar o valor da propriedade ou use as propriedades auto implementadas para chamadas que criam este campo automaticamente em segundo plano e fornecem lógica básica para os procedimentos de propriedade.

Para definir uma propriedade implementada automaticamente:class SampleClass { public int SampleProperty { get; set; } }

Se você precisar realizar algumas operações adicionais para leitura e gravação do valor da propriedade, defina um campo para armazenar o valor da propriedade e forneça a lógica básica para armazenar e recuperá-lo:

class SampleClass {

private int _sample; public int Sample {

// Return the value stored in a field. get { return _sample; } // Store the value in the field. set { _sample = value; }

} }

A maioria das propriedades possuem métodos ou procedimentos para definir e obter o valor da propriedade. No entanto, você pode criar propriedades somente leitura ou somente gravação para impedir que elas sejam modificadas ou lidas. No Visual Basic você pode usar as palavras-chave ReadOnly e WriteOnly . Em C#, é possível omitir o método de propriedade get ou set . No entanto, no Visual Basic e no C#, as propriedades implementadas automaticamente não podem ser somente leitura ou somente gravação.

Métodos

Método é uma ação que um objeto pode executar.Para definir um método de uma classe:

class SampleClass {

public int sampleMethod(string sampleParam) {

// Insert code here }

}

Uma classe pode ter várias implementações ou sobrecargas do mesmo método que diferem no número de parâmetros ou tipos de parâmetro.

public int sampleMethod(string sampleParam) {}; public int sampleMethod(int sampleParam) {}

Na maioria dos casos, você declara um método em uma definição de classe. No entanto, o Visual Basic e o C# também suportam os métodos de extensão que permitem que você adicione métodos a uma classe existente fora da definição real da classe.

Construtores

Construtores são os métodos da classe que são executados automaticamente quando um objeto de um determinado tipo é criado. Os construtores geralmente inicializam os membros de dados do novo objeto. Um construtor pode executar apenas uma vez quando uma classe é criada. Além disso, o código no construtor é sempre executado antes de qualquer outro código em uma classe. No entanto, você pode criar várias sobrecargas de construtor da mesma maneira que cria para qualquer outro método.

Para definir um construtor para uma classe:

public class SampleClass {

public SampleClass() {

// Add code here }

}

Destruidores

Os destruidores são usados para destruir instâncias de classes. No .NET Framework, o coletor de lixo gerencia automaticamente a alocação e a liberação de memória para os objetos gerenciados em seu aplicativo. No entanto, você ainda pode precisar de destruidores para limpar os recursos não gerenciados que seu aplicativo criar. Pode haver apenas um destrutor para uma classe.

Eventos

Os eventos permitem que uma classe ou um objeto notifiquem outros objetos ou classes quando algo interessante ocorre. A classe que envia (ou gera) o evento é chamada de editor e as classes que recebem (ou manipula) o evento são chamadas de assinantes. Para obter mais informações sobre eventos, como são gerados e manipulados.

C#• Para declarar um evento em uma classe, use a palavra-chave event (Referência de

C#).• Para disparar um evento, chame o representante de evento.• Para assinar um evento, use o operador +=; para cancelar de um evento, use o

operador -=.

Classes Aninhadas

Uma classe definida dentro de outra classe é chamada aninhada. Por padrão, a classe aninhada é privada.

class Container{

class Nested {

// Add code here. }

}

Para criar uma instância da classe aninhada, use o nome da classe contêiner seguido pelo ponto e seguida pelo nome da classe aninhada:

Container.Nested nestedInstance = new Container.Nested()

Modificadores de acesso e níveis de acesso

Todas as classes e membros de classe podem especificar o nível de acesso que eles fornecem a outras classes usando modificadores de acesso.

Os modificadores de acesso a seguir estão disponíveis:Modificador do Visual Basic Modificador C# Definição

Público (Visual Basic) public O tipo ou membro pode ser acessado por qualquer outro código no mesmo assembly ou em outro assembly que faça referência a ele.

Particular (Visual Basic) private O tipo ou membro só pode ser acessado por código na mesma classe.

Protegido (Visual Basic) protected O tipo ou membro só pode ser acessado por código na mesma classe ou em uma classe derivada.

Friend (Visual Basic) internal O tipo ou membro pode ser acessado por qualquer código no mesmo assembly, mas não de outro assembly.

Protected Friend protected internal O tipo ou membro pode ser acessado por qualquer código no mesmo assembly ou por qualquer classe derivada em outro assembly.

Instanciar Classes

Para criar um objeto, você precisa instanciar uma classe ou criar uma instância de uma classe.

Depois de instanciar uma classe, você pode atribuir valores para as propriedades e os campos de instância e chamar métodos da classe.

SampleClass sampleObject = new SampleClass();

// Set a property value. sampleObject.sampleProperty = "Sample String"; // Call a method. sampleObject.sampleMethod();

Para atribuir valores a propriedades durante o processo de instanciação de classe, usa inicializadores de objeto:

// Set a property value. SampleClass sampleObject = new SampleClass { FirstProperty = "A", SecondProperty = "B" };

Classes e membros estáticos (compartilhados)

Um membro estático (compartilhado no Visual Basic) da classe é uma propriedade, um procedimento ou um campo compartilhado por todas as instâncias de uma classe.

Para definir um membro estático (compartilhado):static class SampleClass {

public static string SampleString = "Sample String"; }

Para acessar o membro estático (compartilhado), use o nome da classe sem criar um objeto dessa classe:

Console.WriteLine(SampleClass.SampleString);

As classes estáticas (compartilhadas) no C# e os módulos no Visual Basic só têm membros estáticos (compartilhados) e não podem ser instanciados. Os membros estáticos (compartilhados) também não podem acessar propriedades, campos ou métodos não estáticos (não compartilhados)

Tipos anônimos

Tipos anônimos permitem que você crie objetos sem escrever uma definição de classe para o tipo de dados. Em vez disso, o compilador gera uma classe para você. A classe não tem nenhum nome utilizável e contém as propriedades que você que você especificar na declaração do objeto.

Para criar uma instância de um tipo anônimo:// sampleObject is an instance of a simple anonymous type. var sampleObject = new { FirstProperty = "A", SecondProperty = "B" };

Herança

A herança permite que você crie uma nova classe que reutiliza, estende e altera o comportamento que é definido em outra classe. As classe cujos membros são herdados é chamada de classe base, e a classe que herda a esses membros é chamado de classe a derivada. No entanto, todas as classes no C# e no Visual Basic são implicitamente herdadas da classe Object que oferece suporte à hierarquia de classe .NET e fornece serviços de baixo nível a todas as classes.

Observação

Idiomas gerenciados no .NET Framework não oferecem suporte a várias heranças, ou seja, você pode especificar somente uma classe base para uma classe derivada.

Herdando de uma classe base:

class DerivedClass:BaseClass{}

Por padrão, todas as classes podem ser herdadas. No entanto, você pode especificar se uma classe não deve ser usada como uma classe base ou criar uma classe que pode ser usada somente como uma classe base.

Para especificar que uma classe não pode ser usada como classe base:

public sealed class A { }

Para especificar que uma classe pode ser usada apenas como uma classe base e não pode ser instanciada:

public abstract class B { }

Substituindo membros

Por padrão, uma classe derivada herda todos os membros da classe base. Se quiser alterar o comportamento do membro herdado, você precisará substituí-lo. Ou seja, você pode definir uma nova implementação do método, propriedade ou evento na classe derivada.

Os modificadores a seguir são usados para controlar como as propriedades e métodos são substituídos:Modificador do Visual Basic Modificador C# Definição

Substituível (Visual Basic) virtual (Referência de C#) Permite que um membro da classe seja substituído em uma classe derivada.

Substituições (Visual Basic) override (Referência de C#) Substitui um membro virtual (substituível) definido na classe base.

NotOverridable (Visual Basic) Sem suporte Impede que um membro seja substituído em uma classe herdeira.

MustOverride (Visual Basic) abstract (Referência de C#) Exige que um membro da classe seja substituído na classe derivada.

Sombras (Visual Basic) Modificador new (Referência de C#) Oculta um membro herdado de uma classe base

Interfaces

Interfaces, como classes, definem um conjunto de propriedades, métodos e eventos. Mas, ao contrário das classes, as interfaces não fornecem implementação. São implementados por classes e definidos como entidades separadas de classes. Uma interface representa um contrato, em que uma classe que implementa uma interface deve implementar cada aparência da interface exatamente como é definida.

Definindo uma interface:interface ISampleInterface {

void doSomething(); }

Para implementar uma interface em uma classe:class SampleClass : ISampleInterface {

void ISampleInterface.doSomething() {

// Method implementation. }

}

Genéricos

Classes, estruturas, interfaces e métodos no .NET Framework podem incluir parâmetros de tipo que definem tipos de objetos que podem armazenar ou usar. O exemplo mais comum de genéricos é uma coleção, onde você pode especificar o tipo de objetos a serem armazenados em uma coleção.

Definindo uma classe genérica:Public class SampleGeneric<T> {

public T Field; }

Para criar uma instância de uma classe genérica:

SampleGeneric<string> sampleObject = new SampleGeneric<string>(); sampleObject.Field = "Sample string";

Delegados

Um delegate é um tipo que define uma assinatura de método e pode fornecer uma referência a qualquer método com uma assinatura compatível. É possível chamar o método através do delegate. Representantes são usados para passar métodos como argumentos para outros métodos.

Observação

Os manipuladores de eventos nada mais são do que métodos chamados por meio dos representantes. Para obter mais informações sobre o uso de delegados na manipulação de eventos, consulte Manipulando e acionando eventos.

Para criar um delegate:public delegate void SampleDelegate(string str);

Para criar uma referência a um método que corresponda à assinatura especificado pelo delegate:

class SampleClass {

// Method that matches the SampleDelegate signature. public static void sampleMethod(string message) {

// Add code here. } // Method that instantiates the delegate. void SampleDelegate() {

SampleDelegate sd = sampleMethod; sd("Sample string");

} }

MVAMicrosoft Virtual Academy

http://msdn.microsoft.com/pt-BR/library/vstudio/dd460654

Perguntas?

Acredite você é capaz...

Obrigado...