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
« 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:
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? 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:
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.
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:
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:
Para a classe Clientes poderíamos definir os seguintes métodos:
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.
Continuando o nosso exemplo, o banco tem clientes com características diferenciadas. Por exemplo:
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:
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:
Para a classe ClienteCorrentista poderíamos definir os seguintes métodos:
Juntando as propriedades e classes que foram herdadas da classe pai – Clientes, a classe ClienteCorrentista teria as seguintes propriedades:
Juntando as propriedades e classes que foram herdadas da classe pai – Clientes, a classe ClienteCorrentista teria as seguintes propriedades:
Na Figura 2.9 temos uma visão geral da classe ClienteCorrentista, já incluindo as propriedades e métodos herdados da classe pai – 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.
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 » |
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