Por David Carlos Pomarico
dcpomarico@uol.com.br
Analista de Sistemas, atualmente trabalhando em uma multinacional, graduado em Tecnologia em Desenvolvimento de Softwares na Faculdade Informática e Administração Paulista (FIAP), palestrante acadêmico Microsoft em plataforma .NET, Co-Líder do Grupo de Usuários Codificando.Net SP ( www.codificando.net ), experiência de 2 anos em .NET, conhecimentos e práticas em Framework .NET, ASP.NET, WinForms, VB.NET, C#.NET, Crystal Reports.NET, Active Reports for .NET, MS SQL 2000, Oracle 9i, UML, XML.
Visite o meu The spoke:
http://br.thespoke.net/MyBlog/dpomarico/MyBlog.aspx

POO - Programação Orientada a Objetos - Parte 1

 

O conceito

O termo orientação a objetos significa organizar o mundo real como uma coleção de objetos que incorporam estrutura de dados e um conjunto de operações que manipulam estes dados.

Classes

Em programação uma Classe representa uma entidade e como tal define o seu comportamento (Métodos) e as suas características (Propriedades).

Aos acontecimentos que podem ocorrer para uma dada entidade em determinada altura, chama-se Eventos.

 

Ex:

Entidade (Classe): Pessoa

Características (Propriedades): Altura, peso, etc

Comportamento (Métodos): Andar, Correr, Comer, etc

Eventos: AoAcordar, AoDeitar, etc

 

Comparação entre Classes e Objetos

Uma Classe consiste na definição de uma entidade, (com as suas propriedades, métodos e eventos) enquanto um objeto representa um "exemplar" de uma entidade.

 

Ex: Classe à Pessoa

      Objecto à João

 

Requisitos numa linguagem OOP

Além do conceito de classes e objetos, existem vários outros conceitos que devem ser observados numa linguagem de programação, para que esta possa ser considerada OOP:

 

-         Abstracção

-         Encapsulamento

-         Herança

-         Interfaces

-         Polimorfismo

 

Abstração

Este é um dos conceitos básicos quando se fala de OOP. Antes de definir uma classe é importante consumir algum tempo e pensar como fazê-la.

Por exemplo, quando se vai à caixa Eletrônico existem várias opções à disposição. Se quiser sacar dinheiro basta escolher a opção "Saque", e embora "por trás" isso desencadeie vários processos, estes não são visíveis para quem usa o caixa.

 

O que se ganha com isto? Uma Classe é definida uma vez, mas é susceptível de ser utilizada N vezes por nós ou por terceiros. Com a abstração vem uma maior facilidade de utilização da classe, diminuição da probabilidade de enganos, aumento de rapidez do desenvolvimento e melhoria da legibilidade do código.

 

Encapsulamento

É o processo pelo qual se escondem os detalhes de implementação nas Classes. Ou seja consiste na aplicação do conceito de abstracção descrito atrás.

 

Herança

Trata-se de um conceito muito mencionado no meio da programação e consiste no estabelecimento de uma relação entre duas classes, na seguinte perspectiva: "A Classe Y é do género da Classe X". Por exemplo um Cliente é uma pessoa e um empregado também.

A ideia da herança é permitir que neste tipo de situações se possa definir uma classe Base a partir da qual derivam outras classes. Cada Classe derivada possui (ou pode possuir) tudo o que está definido na sua classe Base e depois ser-lhe-ão acrescentadas mais coisas conforme for necessário.

O ponto forte da herança é a reutilização!!

 

Interfaces

Os interfaces servem para definir apenas as assinaturas dos métodos, propriedades ou eventos a implementar nas classes.

Isto permite separar a definição de uma classe da sua implementação. Exemplo:

Interface Mensagem

    Sub MensagemCompleta(ByVal Titulo As String, ByVal corpo As String)

    Sub Mensagem(ByVal corpo As String)

End Interface

Public Class Classe1

    Implements Mensagem

 

    Public Overloads Sub Mensagem(ByVal corpo As String) Implements Mensagem.Mensagem

        MessageBox.Show(corpo)

    End Sub

 

    Public Sub MensagemCompleta(ByVal Titulo As String, ByVal corpo As String) Implements Mensagem.MensagemCompleta

        MessageBox.Show(corpo, Titulo, MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly)

    End Sub

End Class

Public Class Classe2

    Implements Mensagem

    Public Sub Mensagem(ByVal corpo As String) Implements Mensagem.Mensagem

        MessageBox.Show(corpo, "", MessageBoxButtons.OK, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly)

    End Sub

 

    Public Sub MensagemCompleta(ByVal Titulo As String, ByVal corpo As String) Implements Mensagem.MensagemCompleta

        MessageBox.Show(corpo, Titulo, MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly)

    End Sub

End Class

 

Pode notar-se que as duas classes tem os mesmos métodos, porém cada um com um comportamento diferente.

 

Polimorfismo

As vezes a mesma operação se comporta de modo diferente quando aplicada a objetos baseados em classes diferentes. Por exemplo imagine o método Caminhar. O objetivo é o mesmo ou seja deslocar-se do ponto A para o ponto B, mas um adulto caminha de uma maneira e um bebê de outra...

O polimorfismo vem permitir que estas situações possam ser implementadas.

 

Construtores

Um construtor é um método que permite criar um objeto à custa de uma determinada classe. E é o objeto que ocupa recursos em memória e é utilizado em Run-time.

Em VB .NET o construtor de uma classe apresenta-se na forma de um Sub com um nome específico: New.

Assim quando se faz:

        Dim frm As New Form1()

Isto indica  que ao declarar uma variável frm ela será uma instância do tipo Form. E isto acontece com a invocação do New que consiste num Sub (definido na classe Form neste caso) dentro do qual deve constar todas as instruções necessárias para a inicialização do objeto.

 

Overloading do Construtor

É possível fazer overloading do Sub New tal como se faz para os outros, porém Não pode usar a palavra-chave Overloads junto a nenhum construtor. De resto as regras são as mesmas.

 

Access Modifiers

Private: Membros private em uma classe são visíveis apenas no escopo da classe. (variáveis locais)

Públic: Membros declarados como public são visíveis em todo o aplicativo, porém não são acessados em herença, somente por instância do objeto. (são variáveis globais)

Protected: Um membro Protected só pode ser acessado por classes derivadas ou pelos métodos da classe.

Shared: indica que um determinado membro da classe é compartilhado e pode ser acessado por todas as instâncias da classe. Não necessita de instância da classe para chamar o método. (também conhecidos como membros estáticos)

Friend: Torna um membro da classe visível por todo o projeto , mas não a um controlador de uma instância do objeto.

 

Métodos

Quando um procedimento ou função é declarado no âmbito de uma classe é considerado um método dessa classe.

 

Propriedades

Uma propriedade é um membro que representa uma característica de uma classe (ou estrutura). Por default, a propriedade é alvo de leituras e escritas, ou seja o programador pode averiguar o seu conteúdo e alterá-lo. No entanto é possível criar propriedades só de leitura ou só de escrita.

Em VB .NET existe uma sintaxe específica para a declaração de propriedades:

 

[Access Modifier] [Default | ReadOnly | WriteOnly] Property <Nome da propriedade> ([Lista de parâmetros]) As [Tipo de dados retornado pela propriedade]

 

                Get

                                [Bloco de código processado aquando da leitura da propriedade]

                End Get

 

                Set (valor As [Tipo de Dados da propriedade])

                                [Bloco de código processado aquando da escrita na propriedade]

                End Set

End Property

Exemplo:

    Private sngAltura As Single

    Public Property Altura() As Single

        Get

            Return sngAltura

        End Get

        Set(ByVal Value As Single)

            sngAltura = Value

        End Set

    End Property

 

Nota:

 

Inherits

Esta palavra chave deve ser utilizada na classe derivada (filha), logo na linha abaixo da sua definição. À frente dela coloca-se o nome da classe base (mãe). A partir desse momento tudo o que não tenha sido declarado como Private na mãe está disponível na filha!

É portanto através desta palavra chave que se cria a relação de "parentesco" entre as várias classes.

Atenção: Em VB .NET é implementada herança simples, ou seja cada classe pode apenas derivar de uma outra classe e não mais.

 

MustInherit e NotInheritable

O MustInherit faz com que sua classe sirva apenas como base para a criação de outras classes (classe abstrata). O NotInheritable significa que outras classes não poderão herdá-la.

 

Palavras-Chaves

Overloads: Utilizado para métodos com o mesmo nome, porém com comportamentos diferentes. Exemplo:

 

Public Overloads Function RetornaPessoa(ByVal Nome As String) As String

        Return Nome

End Function

Public Overloads Function RetornaPessoa(ByVal Nome As String, ByVal Sobrenome As String) As Integer

        Return Nome & " " & Sobrenome

End Function

 

Overridable: Significa que o método da classe filha poderá sobrepor o método da classe Pai.

Overrides: Significa que a classe filha está implementando o método da classe pai. No exemplo abaixo repare que cada uma das funções, apesar de ter a mesma assinatura, tem comportamento diferente.

 

Public Class Pai

    Public Overridable Function RetornaNome(ByVal Nome As String) As String

        Return Nome

    End Function

End Class

Public Class Filha

    Inherits Pai

    Public Overrides Function RetornaNome(ByVal Nome As String) As String

        Return "Seu nome é: " & Nome

    End Function

End Class

 

NotOverridable: Significa que o método não poderá ser sobreposto.

MustOverride: Significa a obrigatoriedade de implementar o método da classe pai na classe filha.

Shadows: Se o membro da classe filha tiver o mesmo nome do membro da classe pai, o método da classe filha irá sobrepor inteiramente o método da classe pai em todas as variações.

Exemplo:

Public Class Pai

    Public Function RetornaNome(ByVal Nome As String) As String

        Return Nome

    End Function

End Class

Public Class Filha

    Inherits Pai

    Public Shadows Function RetornaNome(ByVal Nome As String, ByVal Sobrenome As String) As String

        Return "Seu nome completo é: " & Nome & " " & Sobrenome

    End Function

End Class

 

Dicas

 

- Crie os métodos de uma classe sempre de acordo com a sua necessidade. Utilize Public, Private, Shared, Friend, Function, Sub com coerência.

- Lembre-se de que um objeto é uma instância de uma classe. Imagine a planta de uma casa e uma casa. A planta seria a classe e a casa é a classe instanciada.

- Não crie variáveis públicas dentro de sua classe. Crie propriedades que irão acessá-las. Se você criar variáveis públicas você estará fugindo do conceito de encapsulamento.

- O VB.NET não cria um construtor visível na classe. O que ele faz é criar esse construtor em runtime automaticamente, por isso, toda a classe que você criar, adicione a linha:

 

    Public Sub New()

 

    End Sub

 

- Utilize as palavras-chaves MustInherit e NotInheritable SEMPRE.

 

Dicas para quem está começando:
Veja os próximos eventos
que você não pode perder :

10/1/2009 Bufalo Cast: Windows Azure - Visao Geral
on-line - RJ
Por : devASPNet


17/1/2009 Bufalo Cast: SQL Server Data Services - Storage no Azure
on-line - RJ
Por : devASPNet


24/1/2009 BufaloCast: Visual Studio 2010: As novidades para o desenvolvimento de softwares
on-line - RJ
Por : devASPNet


31/1/2009 BufaloCast: Dublin: O novo host do Workflow Foundation
on-line - RJ
Por : devASPNet


13/12/2009 BufaloCast : SQL Server 2008 Energy Community Launch
on-line - RJ
Por : devASPNet

Leituras imperdíveis para quem está começando:

º Otimizando a performance no ASP.NET::..
º Criando objetos de paginação personalizados na grid::..
º Uma cesta de compras em ASP.NET::..
º Utilizando o Refresh de parâmetros no .NET::..
º ASP.NET FORMS Authentication::..
º Utilizando propriedades dinâmicas no .NET::..
º Corrigindo problemas de deleção em grid com paginação::..
º Cuidado com os componentes de validação::..
º Otimizando o InitializeComponent::..
º Movendo fonte de aplicações entre máquinas::..
º Agilizando a performance da IDE do VS.NET::..
º Utilizando Short Circuit no VB.NET::..


























  Parceiros:
20% de desconto para os membros do grupo na aquisição de livros e inscrição para eventos

Receba dicas de programação e programação .NET:
E-mail:
Incluir Excluir