Desmistificando as Classes
A Linguagem C# é totalmente baseada no modelo de programação orientada à objetos, sendo assim, profundos conhecimentos em alguns de seus elementos principais são de fundamental importância para que possamos extrair o máximo do modelo/linguagem, sobretudo aqueles desenvolvedores acostumados com outros modelos tais quais, programação estruturada e orientada à eventos.
Dentre esses elementos temos as Classes que podemos classificar como o objeto fundamental da OOP [Object-Oriented Programming], uma vez que é impossível obtermos um programa em C# (ou em qualquer outra linguagem OO) sem que tenhamos pelo menos uma classe.
Como tantos outros conceitos na informática, as classes foram inspiradas no “mundo real” e podemos associá-las ao ato de denominar uma entidade que compartilha alguns comportamentos e que possuem um conjunto de propriedades comuns. Fazendo um paralelo com nossa gramática, seria como os substantivos em seu conceito mais primitivo [a palavra que designa seres em geral], onde, por exemplo, usamos o substantivo COMPUTADOR, quando queremos referenciar um objeto formado por monitor, teclado, processador [propriedades], capaz de ligar, desligar, instalar softwares, compilar programas, acessar a internet, manipular documentos [comportamento], e aqui está a grande sacada dos substantivos, sua capacidade de facilitar a comunicação entres as pessoas, ao resumir numa única palavra um conjunto de características e ações que constituem o ser ou objeto.
Bom, mas parodiando um amigo meu, fã da série MATRIX, “voltando ao mundo virtual”, as linguagens orientadas a objetos baseiam-se no mesmo princípio dos substantivos, utilizando as classes como seu elemento fundamental, afinal, são nelas que estão contidos dados e funcionalidades que compõem qualquer programa de computador, independentes de linguagem, modelo de programação e plataforma. Vale ressaltar que as classes não estão restritas a objetos concretos [computador, carro, pessoa], podemos utilizá-las para implementar conceitos abstratos tais como o Tempo.
Finalmente definiríamos uma classe, como a entidade capaz de encapsular dados, sob a forma de campos, e funcionalidades, os métodos, que manipulam esses dados, disponibilizando sua estrutura para outras entidades que a utilizam para realizar uma ou mais tarefas que um assembly C# se propõe.
A estrutura de uma Classe
Pois bem, e como codificar essa maravilha do mundo da OOP. A figura abaixo apresenta a estrutura de uma classe com os elementos possíveis que a mesma suporta, que quando bem utilizados, tornam suas aplicações seguras, performáticas, estáveis e legíveis, enfim, os adjetivos essenciais para uma solução de boa qualidade, capaz de tornar seu time de desenvolvimento competente. O objetivo, nesse e em próximos artigos é detalhar cada um desses elementos, com dicas e sugestões de utilização dos mesmos.
Pseudocódigo 1 – Estrutura de uma classe.
No pseudocódigo acima iniciamos com uma referencia ao namespace System, bem como a declaração do nosso namespace imasters [maiores detalhes ver artigo, Usando Namespaces Profissionalmente]. Sem dúvida uma instrução que deve chamar atenção aqui, é a ultima linha após o terminador de escopo da classe, onde temos a presença de um ponto e virgula [;], trata-se de uma herança do C++ e é facultativa no C#, particularmente acredito que pouca gente utilize essa sintaxe, salvo os herdeiros do C++, movidos ainda pela força do hábito.
Em nossa “classe” temos um conjunto de elementos que definem seu comportamento, e que são conhecidos como Class Members, e segundo a terminologia oficial da Microsoft teríamos dois grupos principais, os Data Members e os Functions Members.
Classificamos como data members, aqueles que armazenam os dados para a classe, e ai teríamos, os fields, consts e events.
Entendemos por Field [Campo], qualquer variável associada à classe cuja função é armazenar valores utilizados em suas funcionalidades. Os Fields apresentam pequenas mudanças em seu escopo e comportamento, representados em tipos específicos – Local Variables e Read-Only Fields.
As Consts [Constantes], não deixam de ser um Field, mas pela particularidade de manter seu valor invariável, merece essa denominação.
Events [Eventos], sinceramente, não entendi esse elemento classificado como data member, mas enfim, eles são responsáveis por notificar uma entidade na ocorrência de alguma ação, como por exemplo a alteração do valor de um field ou propriedade da classe – esses elementos são parecidos, mas implementados diferentemente dos eventos do Visual Basic 6.0.
Por outro lado, os function members são aqueles que provem as funcionalidades da classe, e manipulação dos dados que a constituem, para tal temos os métodos, propriedades, construtores, indexers, etc.
Os métodos são como as funções/sub do velho VB, estando no corpo de sua implementação boa parte da inteligência de nossa classe, em C# não temos construções do tipo Function e Sub, temos sim, métodos que retornam ou não valores para os clientes. Quanto à utilização podemos ter métodos instanciáveis ou estáticos.
Propriedades, aqui temos uma construção interessante, acredito que muita gente ache que as propriedades deveriam ser tratadas como Data Members, no entanto apesar de na utilização serem bem parecidas com os Fields Públicos, as properties, são uma evolução dos mesmos, inclusive sendo conhecidos como Smart Fields, e sua implementação é feita com pelo menos um dos métodos GET/SET, que como qualquer método suporta alguma inteligência no código.
Construtores e Destrutores, também são métodos, só que com uma particularidade, eles são inacessíveis [diretamente] aos clientes da classe, e são executados no momento de sua inicialização e destruição, são muito úteis e recomendados para inicializar valores de campos, bem como liberar recursos alocados [um arquivo texto, uma conexão com BD, etc], importante ressaltar que os destrutores tem sua execução associada ao Garbage Collection o que torna sua execução não deterministica.
Agora temos os Indexers, que juntamente com as properties, não fazem parte da essência da OOP, no entanto sua implementação permite que um objeto seja acessado como se fosse um Array, assim, se as propriedades são consideradas Fields inteligentes, os Indexers seriam as classes inteligentes.
Finalmente, gostaria de esclarecer o conceito daquilo que geralmente é confundido com uma classe, que são os objetos. Na verdade trata-se de elementos totalmente distintos, e ainda que relacionados, a classe é a estrutura, um esqueleto, um modelo, enquanto que um objeto representa uma classe em um dado momento de sua utilização, ou seja, o objeto é uma instancia da classe, como uma variável qualquer, aliás, costumamos dizer que em C# tudo é objeto, seja uma simples variável do tipo Int, seja um objeto mais complexo utilizado na manipulação de sockets. Por exemplo, quando nos referimos a classe programador, estamos denominando um elemento genérico [um substantivo], mas quando tratamos do objeto programador, estamos direcionando nosso foco para um elemento especifico [o substantivo precedido de um artigo o ou a], que possui três características fundamentais, Identidade [ Que distingue um objeto de todos os demais, ID = 2516484], Comportamento [ O que torna um objeto realmente útil, Codifica C#] e Estado [ Representa a situação instantânea de suas características, Está de Férias].
É isso ai pessoal, não restam dúvidas que esse assunto é muito amplo, tentarei ser o mais claro e objetivo possível, com artigos curtos e focados, onde, com exemplos e comparações tentaremos esclarecer os principais conceitos e funcionalidades de Programação Orientada à Objetos e sua implementação com o C#, que tem, é claro, suas particularidades.
Aparentemente esses conceitos podem parecer enfadonhos, mas garanto que seu entendimento representa ganhos significativos quando na implementação de seus programas tornando-o um desenvolvedor diferenciado. Como sempre estou aberto à críticas e sugestões para que a cada coluna possamos apresentar um conteúdo interessante e acima de tudo funcional para nossos leitores.
Até a próxima!
(Artigonal SC #333197)
PROGRAMAÇÃO EM DELPHI, O MAIS FAMOSO COMPILADOR E MODELADOR DE OBJETOS DA ATUALIDADE
A revolução somente poderá ser feita pelos professores na educação em nosso país se a classe se unir, trabalhar coesa e agir com coerência e bom senso.
Mais uma palestra realizada cumprindo calendário estabelecido pela ADESG (Associação dos Diplomados da Escola Superior de Guerra). A Palestrante foi à senhora Magui Guimarães Consultora Organizacional. O tema da palestra foi “Programação Neurolinguística”. Para as pessoas que não conhecem a Neurolinguistica é o ramo da lingüística que estuda a estrutura do cérebro humano no que diz respeito à aquisição da linguagem, às desordens da fala e ao uso de uma língua, dentro dos estudos da Neurolinguis
A AGIT INFORMÁTICA iniciou inscrições para a primeira turma de LINGUAGEM C++ do ano de 2010. Veja todas as informações do curso em nossos site: www.agit.com.br - desde horários e dias ministrados, valores, formas de pagamento, descontos, localização e muito mais.
O que a princípio aparenta ser mais um dos novos conceitos do .net, veremos que o mesmo tem muito a ser explorado, e assim faremos, tentando extrair todo o potencial dessa funcionalidade do Framework, além de aproveitarmos a oportunidade para analisar a diretiva using[Imports, seu correspondente no VB.NET].
Minha proposta nesse espaço inicialmente seria de analisarmos a linguagem C#, sua sintaxe, implementações dos conceitos de orientação a objetos, etc. Para tal ,acredito que a implementação de programas console [aqueles que rodam no DOS], seja a melhor alternativa nesse primeiro momento.
faz tempo que a TV vem perdendo audiência no Brasil.Muito antes da internet ela já havia começado o processo de desencanto entre o telespectador e a a telinha.aqui nesse artigo uma analise profunda desse histórico.
PROGRAMAÇÃO EM DELPHI, O MAIS FAMOSO COMPILADOR E MODELADOR DE OBJETOS DA ATUALIDADE
Saiba como surgiu a linguagem .NET, por que ela é diferente das demais linguagens e as vantagens que isso proporciona.
Este artigo tem por objetivo mostrar como utilizar a API CGLIB para interceptar chamadas de métodos em objetos no Java. Se você estiver se perguntando “mas por que eu deveria interceptar a chamada de um método?”, pretendo fazer com que você entenda como isso pode aumentar a sua produtividade e reduzir os erros no código.
Entenda como funciona o uso de memória pelo Java e como se prevenir de memory leaks
Aprenda a utilizar a Commons E-mail API para enviar e-mails utilizando Java
Conheça essa poderosa linguagem que é a ASP. Por ser extremamente fácil de se lidar, ela é hoje, umas das linguagens mais usadas em sites na internet.
A AGIT INFORMÁTICA iniciou inscrições para turma de Qt 4.6.
A AGIT INFORMÁTICA iniciou inscrições para a primeira turma de LINGUAGEM C++ do ano de 2010. Veja todas as informações do curso em nossos site: www.agit.com.br - desde horários e dias ministrados, valores, formas de pagamento, descontos, localização e muito mais.
Estamos a beira de uma revolução, a plataforma .Net é um fato, boa parte dos desenvolvedores seguirá esse caminho. Enquanto isso na “vida real” nos deparamos todo dia com a boa e velha formula: ASP, VB 6.0/COM+, JavaScript, SQL Server. E é nesse ambiente que tenho dedicado meu tempo nos últimos seis meses, e o que pretendo nesse espaço é compartilhar o que aprendemos nesse período.
Partiremos dos fundamentos teóricos da tecnologia, e através de exemplos tentaremos prover soluções para as situações do nosso dia a dia. Seria interessante contar com a interatividade de vocês leitores com críticas e sugestões sobre os assuntos abordados.
Minha proposta nesse espaço inicialmente seria de analisarmos a linguagem C#, sua sintaxe, implementações dos conceitos de orientação a objetos, etc. Para tal ,acredito que a implementação de programas console [aqueles que rodam no DOS], seja a melhor alternativa nesse primeiro momento.
O que a princípio aparenta ser mais um dos novos conceitos do .net, veremos que o mesmo tem muito a ser explorado, e assim faremos, tentando extrair todo o potencial dessa funcionalidade do Framework, além de aproveitarmos a oportunidade para analisar a diretiva using[Imports, seu correspondente no VB.NET].
A Linguagem C# é totalmente baseada no modelo de programação orientada à objetos, sendo assim, profundos conhecimentos em alguns de seus elementos principais são de fundamental importância para que possamos extrair o máximo do modelo/linguagem, sobretudo aqueles desenvolvedores acostumados com outros modelos tais quais, programação estruturada e orientada à eventos.
Em minhas recentes atividades como arquiteto de soluções .net, deparei em alguns clientes com uma situação no mínimo inusitada...
Esse artigo tem como objetivo propor a solução de um problema no qual deparamos com razoável freqüência, e se você ainda não o teve pela frente, provavelmente ainda o terá especialmente se você desenvolve aplicações comerciais.

