NUNCA MAIS PASSE RAIVA POR NÃO CONSEGUIR RESOLVER UM PROBLEMA COM O EXCEL - GARANTIDO!

UNIVERSIDADE DO VBA - Domine o VBA no Excel Criando Sistemas Completos - Passo a Passo - CLIQUE AQUI

Você está em: PrincipalArtigosASP.NET › Capítulo 02 : 07
Quer receber novidades e e-books gratuitos?
  « Lição anterior Δ Página principal ¤ Capítulos Próxima lição »
ASP.NET - CURSO COMPLETO
Autor: Júlio Battisti

Lição 023 - Capítulo 02 - Conceitos básicos de orientação a objetos

Vamos fazer uma revisão dos principais conceitos de orientação a objetos. A orientação a objetos, quer seja como metodologia de análise, projeto ou programação, foi criada com o objetivo de resolver problemas que a programação estruturada não foi capaz. A orientação a objetos possui os seguintes objetivos básicos:

  • Produtividade.
  • Incentivo a boas práticas de programação.
  • Uma modelagem mais próxima do entendimento do usuário final.
  • Reutilização de código.
  • Facilidade de manutenção do código.

Embora a proposta de orientação a objetos seja bastante consistente, a mesma não teve o nível de implementação esperado. Não cabe aqui discutir os motivos que fizeram com que a velocidade de adoção ficasse abaixo da esperada. Esta fato é ainda mais interessante uma vez que a grande maioria das empresas admite que a orientação a objetos oferece uma série de vantagens em relação ao modelo de programação estruturada. Porém a mudança para um novo modelo envolve uma nova maneira de pensar, uma necessidade de treinamento e, principalmente, uma mudança cultural. Esta última sem sombra de dúvidas a mudança mais difícil.

Vamos revisar os seguintes conceitos básicos:

  • O que é um objeto?
  • Mensagens.
  • Classes.
  • Herança.
  • Instâncias.
  • Reutilização de código.

O que é um objeto?

Na programação estruturada nos temos uma separação entre procedimentos e os dados sobre os quais os mesmos atuam. Um procedimento pode ser uma função que retorna um valor ou uma procedure que realiza uma série de operações, podendo ou não retornar um valor. Porém este modelo apresenta sérias dificuldades do ponto de vista do usuário. Ao fazer a análise e projeto de um programa, o analista precisa traduzir as necessidades dos usuários em termos de procedimentos, funções, módulos, etc. Existe uma diferença muito grande entre a linguagem dos usuários e a linguagem dos analistas/programadores.

Um objeto é uma entidade que contém, além dos dados, todos os funções que atuam sobre estes dados. Ou seja, um objeto é composto dos dados que descrevem o objeto (propriedades) e das operações que podem ser realizadas sobre estes dados (métodos). Esta abordagem já é um pouco mais próxima da abordagem entendida pelos usuário finais do sistema. Vamos imaginar um sistema para o departamento de recursos humanos. Os usuários falam em termos de empregados, cargos, etc. Poderíamos ter um objeto chamado Funcionário. Este objeto poderia conter diversas propriedades, tais como:

  • Matrícula
  • Nome
  • Endereço
  • Fone
  • Data de Admissão
  • Data de Aniversário
  • Nome do Pai
  • Nome da Mãe
  • Número da Identidade
  • Número do CPF
  • Cargo
  • Salário

Com isso podemos observar que as propriedades descrevem as características de um determinado objeto. O conjunto de valores contidos nas propriedades de um determinado objeto, definem o seu estado atual.

Além das propriedades o objeto pode conter métodos. Os métodos descrevem ações que podem ser realizadas pelo objeto ou no objeto. Por exemplo, o nosso objeto funcionário poderia ter um método chamado pagamento, outro chamado transferência, mais um chamado promoção e assim por diante. Um método, na prática é uma função ou procedimento que realiza uma série de ações. Os métodos de um objeto podem receber parâmetros e ter o seu comportamento alterado, dependendo do valor dos parâmetros. Por exemplo, o método Promoção de um objeto funcionário pode receber, como parâmetros, o Matrícula do funcionário, a data da promoção e o código do novo cargo. Dentro do método Promoção pode ser chamado um método AtualizaSalário, o qual atualiza o valor do salário do funcionário, de acordo com o novo cargo que o mesmo irá ocupar.

Na Figura 2.7 temos uma representação do objeto Funcionário.

Curso Completo de ASP.NET - Júlio Battisti
Figura 2.7 Objeto Funcionário – métodos e propriedades.

Mensagens

Os objetos se comunicam através de um mecanismo de troca de mensagens. Mensagens são mecanismos de comunicação entre objetos através do qual se desencadeia a execução de um método específico. Através do mecanismos de troca de mensagens um objeto pode invocar métodos de outros objetos e receber os resultados da execução do método invocado.

No desenvolvimento baseado em padrões como COM/COM+ existem métodos proprietários para troca de mensagens. Além disso, cada linguagem de programação possui um conjunto distinto de tipos. Desta maneira a troca de mensagens entre objetos criados em diferentes linguagens não é uma tarefa simples. Já no .NET existe um sistema de tipos comuns a todas as linguagens: CTS – Common Type System. A existência do CTS facilita, enormemente, a interação entre objetos criados em diferentes linguagens. Outra vantagem do Framework .NET é que o mesmo utiliza um sistema para troca de mensagens, baseado no padrão XML e no protocolo SOAP, ambos adotados como um padrão de fato pela industria de TI.

Outro termo relacionado com orientações a objetos é instância. Quando um programa carrega um determinado objeto na memória, dizemos que foi feita uma instância do objeto. Ao carregar na memória estamos reservando recursos para armazenar as características do objeto – através da definição dos valores de suas propriedades e também recursos para que os métodos do objeto possam ser executados.

Classes

Se pesquisarmos a bibliografia sobre orientação a objetos encontraremos um sem fim de definições para classes. Vamos inicialmente apresentar algumas das definições formais encontradas na bibliografia. Depois vamos a uma, digamos, explicação mais lite:

  • Classes constituem modelos que são utilizados para a criação de objetos. Nas classes são descritas a estrutura de dados (através das propriedades) e o comportamento (através de seus métodos) de um ou mais objetos similares que possuem seus dados estruturados da mesma forma e são manipulados pelos mesmos métodos.
  • Um objeto é uma instância de uma classe que é criada em tempo de execução. Classes são puramente uma descrição estática de um conjunto de possíveis objetos.

Na prática o que significa, por exemplo, termos uma classe chamada Funcionários? Esta classe serve como modelo para a criação de objetos do tipo Funcionário. Na classe Funcionários estão as definições das propriedades e dos métodos para um objeto Funcionário.  Ou seja, sempre que criarmos um objeto do tipo funcionário o mesmo será criado com todas as propriedades e métodos da classe Funcionários.

Como eu sou apaixonado por definições simples e sem meias-palavras, adorei esta definição que encontrei na Internet: “Classe é uma forma para fazer objetos”. Acho que essa frase resume tudo.

Grande parte da funcionalidade do Framework .NET é fornecida por um grande número de classes, as quais fazem parta de “.NET Framework Class Library”, já descrita anteriormente. O Framework .NET agrupa as classes de acordo com suas funcionalidades. Um agrupamento de classes criadas para um determinado fim é também conhecido como um namespace (espaço de nomes). Por exemplo, temos o namespace System.Data. Dentro deste namespace existem várias classes que fornecem os métodos necessários para a conexão e manipulação de fontes variadas de dados. Existem classes para a conexão com o SQL Server 2000, outras para a conexão com fontes ODBC e assim por diante. A biblioteca de classes do Framework .NET é organizada de uma forma hierárquica, onde as classes de níveis inferiores herdam todas as características da classe mãe. Falaremos mais sobre herança no próximo item.

Nos Capítulos 3, 4 e 5 vamos estudar os fundamentos da linguagem C#. Veremos que tudo (ou quase tudo como preferem alguns) no C# são classes. Até para criar um simples programa como o Hello Word apresentado no Capítulo 1 e exibido novamente na Listagem 2.1, estamos criando uma classe. Observe a palavra “class” na segunda linha do exemplo.

Listagem 2.1 – Hello Word !

using System;
class primeiroprograma
{
            // Meu primeiro programa em C#
            // O  tradicional Hello Word !!
 
            public  static void Main()
            {
                        string  umamensagem = "Hello Word !!!";
                        Console.WriteLine(umamensagem);
            }
}

Herança

“É o mecanismo que permite definir uma nova classe a partir de uma classe já existente. A classe que está sendo criada é dita subclasse ou classe filha da classe já existente. Em contrapartida a classe já existente é chamada de superclasse da classe que está sendo criada. A subclasse herda a estrutura de dados e os métodos da superclasse, podendo adicionar variáveis na estrutura de dados herdada, bem como adicionar novos métodos e reescrever métodos herdados.

Uma classe pode possuir uma única superclasse – herança simples, ou pode conter mais do que uma superclasse – herança múltipla. A herança múltipla tem sido alvo de muitas discussões e controvérsias. A única linguagem, do Framework .NET, que implementa diretamente a herança múltipla é o C++. A grande discussão em torno da herança múltipla tem a ver com a relação custo x benefício, uma vez que a mesma é de difícil implementação e concepção, embora os benefícios nem sempre sejam os esperados.

Herança é um conceito fundamental para a orientação a objetos. Através do mecanismo de herança podemos criar uma classe baseada em outra já existente. A nova classe que está sendo criada “herda” todas as propriedades e métodos da classe base, também chamada de classe mãe ou superclasse conforme descrito anteriormente. A herança evita que as propriedades e métodos da classe mãe tenham que ser redefinidos na classe filho, embora a classe filho ou subclasse possa redefinir os métodos da classe mão, através de um mecanismo conhecido como Overwrite.

Para ilustrar o mecanismo de herança vamos a um exemplo prático. Vamos imaginar que você esteja projetando um programa – baseado na orientação a objetos, evidentemente, para um banco. Uma das prováveis classes seria a classe Clientes. Nesta classe poderíamos definir as características e métodos básicos para um cliente típico.

Para a classe Clientes poderíamos definir as seguintes propriedades:

  • Nome
  • CPF
  • RG
  • Identidade
  • Endereço
  • Cidade
  • CEP
  • Fone
  • E-mail

Para a classe Clientes poderíamos definir os seguintes métodos:

  • Cadastrar
  • Excluir
  • Atualizar

Observe que a nossa classe Clientes possui apenas as propriedades e métodos comuns a qualquer cliente, quer seja um grande cliente ou um pequeno correntista. Este é um dos princípios da utilização de classes: Nas classes de primeiro nível definimos apenas as propriedades e métodos comuns, os quais deverão ser utilizados pelas classes dos demais níveis.

Na Figura 2.8 temos uma visão geral da classe Clientes.

Curso Completo de ASP.NET - Júlio Battisti
Figura 2.8 A classe Clientes.

Continuando o nosso exemplo, o banco tem clientes com características diferenciadas. Por exemplo:

  • Correntistas
  • Contas de poupança
  • Empréstimos pessoais
  • Financiamentos habitacionais

Cada um destes tipos de clientes possui propriedades e relações diferenciadas com o banco. Por isso precisamos de objetos que representem estas diferenças. A primeira sugestão seria criar uma classe para cada tipo de cliente. A título de exemplo poderíamos criar as seguintes classes:

  • ClienteCorrentista
  • ClientePoupança
  • ClienteEmpréstimo
  • ClienteHabitacional

Ao criar a classe ClienteCorrentista podemos criá-la como uma subclasse da classe Clientes. Com isso a classe ClienteCorrentista herda todas as propriedades e métodos da classe pai – Clientes. Somente precisaremos implementar as propriedades e métodos que são específicas da subclasse ClienteCorrentista.

A título de exemplo poderíamos vamos definir algumas propriedades e métodos da classe ClienteCorrentista.

Para a classe ClienteCorrentista poderíamos definir as seguintes propriedades:

  • NumConta
  • NumAgência
  • Limite
  • Categoria

Para a classe ClienteCorrentista poderíamos definir os seguintes métodos:

  • DefinirLimite
  • AumentarLimite
  • BloquearConta
  • LiberarConta

Juntando as propriedades e classes que foram herdadas da classe pai – Clientes, a classe ClienteCorrentista teria as seguintes propriedades:

  • Nome (herdada da classe pai)
  • CPF (herdada da classe pai)
  • RG (herdada da classe pai)
  • Identidade (herdada da classe pai)
  • Endereço (herdada da classe pai)
  • Cidade (herdada da classe pai)
  • CEP (herdada da classe pai)
  • Fone (herdada da classe pai)
  • E-mail (herdada da classe pai)
  • NumConta
  • NumAgência
  • Limite
  • Categoria

Juntando as propriedades e classes que foram herdadas da classe pai – Clientes, a classe ClienteCorrentista teria as seguintes propriedades:

  • Cadastrar (herdada da classe pai)
  • Excluir (herdada da classe pai)
  • Atualizar (herdada da classe pai)
  • DefinirLimite
  • AumentarLimite
  • BloquearConta
  • LiberarConta

Na Figura 2.9 temos uma visão geral da classe ClienteCorrentista, já incluindo as propriedades e métodos herdados da classe pai – Clientes..

Curso Completo de ASP.NET - Júlio Battisti
Figura 2.9 A classe Clientes.

O mesmo raciocínio também é válido para a criação das classes ClientePoupança, ClienteEmpréstimo e ClienteHabitacional, como subclasses da classe pai Clientes.

Caso haja necessidade, uma subclasse pode sobrescrever um método herdado da classe pai. Por exemplo, a subclasse ClienteCorrentista poderia sobrescrever o método Cadastrar da classe pai – Clientes. Isso pode ser feito para que sejam atendidas necessidades específicas do cadastramento de um cliente correntista. As linguagens do Framework .NET suportam esta técnica, a qual também é conhecida como Overwrite.

Após termos criado as demais classes do nosso exemplo, estaremos com a hierarquia de classes ilustrada na Figura 2.10.

Curso Completo de ASP.NET - Júlio Battisti
Figura 2.10 Uma hierarquia de classes.

Conforme descrevemos anteriormente uma hierarquia de classes também pode ser chamada de namespace ou “espaço de nomes”. Também já descrevemos antes que “.NET Framework Class Library” é, na verdade, um grande número de namespaces, cada um com funcionalidades específicas, funcionalidades estas disponibilizadas por um grande número de classes dentro de cada um dos namespaces. Também gostaria de reforçar que este é um dos grandes atrativos do .NET, ou seja, oferecer uma infinidade de classes, as quais facilitam muito o desenvolvimento das aplicações e, ainda por cima, classes estas que podem ser acessadas a partir de qualquer linguagem do Framework .NET.

Reutilização de código.

Ao utilizar uma das classes do Framework .NET qual o princípio de orientação a objetos que estamos utilizando? Herança. Certo. Mas não hera bem deste princípio que eu gostaria de tratar. Então vamos colocar as coisas de uma maneira um pouco diferente: “Ao utilizarmos a herança, qual o princípio de orientação a objetos que estamos utilizando? Reutilização ou reaproveitamento de código ou, de uma maneira mais “chique”: Reusabilidade.

Ao invés de termos que implementar a funcionalidade de determinada classe, em cada programa onde a funcionalidade for necessária, simplesmente criamos uma classe que herda estas funcionalidades, já prontas, de uma classe do Framework .NET. Com isso estamos reutilizando o código já desenvolvido. Isso poupa trabalho e facilita o desenvolvimento das aplicações. Melhor ainda. Vamos imaginar que tenha sido descoberto um pequeno “bug” em um método de uma classe. Ao corrigirmos este “bug” na classe em questão, todos os programas que utilizam a classe passarão a ter acesso às modificações, ou seja, irão herdar as alterações. Isso facilita, enormemente, a manutenção e alteração das aplicações. Mas era de esperarmos tal comportamento, uma vez que reutilização de código, herança e facilidade de manutenção dos programas, são alguns dos princípios básicos da orientação a objetos.

Em uma empresa, a equipe de desenvolvimento pode criar classes básicas, as quais podem ser utilizadas em diversos programas da empresa. Sempre que forem feitas alterações nas classes básicas, as alterações serão herdadas por todos os programas que utilizam as classes básicas. Vejam que este cenário é muito diferente do que acontece, na prática, hoje. Muitas vezes cada projeto de desenvolvimento parte do zero, sem que nada seja reaproveitado de projetos anteriores. Com isso uma série de funcionalidades básicas precisam ser reescritas a cada novo programa. Desta forma temos projetos mais longos, com maior custo e que muito raramente são concluídos no prazo.

  « Lição anterior Δ Página principal ¤ Capítulos Próxima lição »
Quer receber novidades e e-books gratuitos?

 
 

Contato: Telefone: (51) 3717-3796 | E-mail: webmaster@juliobattisti.com.br | Whatsapp: (51) 99627-3434

Júlio Battisti Livros e Cursos Ltda | CNPJ: 08.916.484/0001-25 | Rua Vereador Ivo Cláudio Weigel, 537 - Universitário, Santa Cruz do Sul/RS, CEP: 96816-208

Todos os direitos reservados, Júlio Battisti 2001-2024 ®

LIVRO: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2016 - CURSO COMPLETO E PRÁTICO

DOMINE A PROGRAMAÇÃO VBA NO EXCEL - 878 PÁGINAS - CLIQUE AQUI