Você está na página 1de 7

Faculdade Anhanguera de Anpolis

Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Linguagem de Programao Comercial


Aula 04 Reviso de Fundamentos de Anlise Orientada a Objetos: Conceitos de objetos, classes, atributos e mtodos. Referncia: http://msdn.microsoft.com

1. A importncia dos objetos


No mundo do .NET, objetos so fundamentais e o desenvolvedor deve entend-los, por um simples motivo: tudo, isto mesmo, tudo, objeto em .NET. Mesmo strings ou inteiros (integer) so objetos. Tente por exemplo, compilar o cdigo a seguir. Apesar de no obter auxlio do IntelliSense ao digitar . (ponto) aps o inteiro 3, e portanto no ser possvel ver uma lista de mtodos disponveis, o cdigo perfeitamente aceitvel em .NET, e ir compilar e executar sem problemas. // Em C#: string teste = 3.ToString(); Baseando-se nestes fatos, pode-se ento dizer que objetos so realmente importantes, e o desenvolvedor precisa realmente entend-los para ter fluncia na leitura e escrita de cdigo em .NET.

2. Qual a vantagem?
Outra pergunta frequente sobre a vantagem em se programar utilizando objetos. Qualquer pessoa ou empresa que vive da criao de software sem dvidas no fica contente ao ver-se escrevendo cdigo similar infinitamente, gastando tempo e recursos na programao de rotinas que j foram criadas anteriormente, mas que pela falta de uma metodologia apropriada, no podem ser reutilizadas ou customizadas para suprirem necessidades especficas de cada cenrio. Resumindo, as principais vantages da POO so o reuso de cdigo e a capacidade de expanso do mesmo. Neste momento ainda no comeamos a dissecar os conceitos da POO, e por isso natural que as vantagens da POO no sejam to aparentes.

3. Os alicerces da POO
Qualquer linguagem orientada a objetos deve oferecer suporte aos seguintes conceitos da POO: Abstrao Encapsulamento Herana Polimorfismo

A incapacidade de uma linguagem em suportar qualquer um destes conceitos a desqualifica como uma linguagem orientada a objetos. Sendo estes os alicerces da POO, vamos dissecar cada um deles a seguir

4. Abstrao
Abstrao pode ser definida como a capacidade de representar cenrios complexos usando termos simples. Pode-se tomar um exemplo da vida real para ilustrar o conceito: um carro uma abstrao de um veculo que um indivduo pode utilizar com o objetivo de mover-se de um ponto a outro. No dia-a-dia, ningum dir: Vou abrir a porta daquele veculo movido a combustvel, entrarei, me sentarei, darei a partida no motor, pisarei na embreagem, engatarei a primeira marcha, acelerarei, controlarei a direo em que o carro ir se mover utilizando o volante. Tamanha explicao no se faz necessria pois todo o conceito daquilo foi abstrado para algo que conhecemos como carro. Apesar de um carro ser algo bastante complexo, basta dizer vou usar o meu carro para ir ao trabalho amanh, e qualquer pessoa entender o recado. Da mesma forma, imagine a confuso para qualquer pessoa entender a seguinte frase: Quando abro aquele programa em meu computador, surge uma tela que tem vrias caixas retangulares, normalmente brancas, nas quais eu posso clicar dentro e comear a digitar. Algumas dessas caixas j trazem algo escrito, e outras aparecem completamente vazias. Seria muito mais fcil substituir toda esta explicao apenas dizendo O programa tem uma tela com diversos TextBox. Mais uma vez, o complexo objeto que se parece com uma caixa retangular, e permite ao usurio digitar dentro dela (alm de possuir outros atributos e aes), foi sabidamente abstrado para a palavra TextBox. O mesmo ocorre com botes de comando, caixas de seleo, grupos de opo, etc. Todos eles so objetos complexos abstrados para simples termos que todo desenvolvedor utiliza quando precisa referenciar a tais objetos. Alm de objetos como aqueles que possuem representao visual (TextBox, Button, Form, etc.), existem tambm objetos que so criados em muitas aplicaes com o intuito de abstrairem objetos complexos da vida real, como por exemplo Pedido, Cliente, Produto, e muitos outros. Mas veremos exemplos destes objetos mais adiante. Neste ponto importante compreender a diferena entre classe e objeto. Quando mencionado que algo complexo foi abstrado para algo conhecido como TextBox, este algo uma classe. Uma classe um modelo para algo que deve ser criado. Por exemplo, quando algum vai fazer um bolo de chocolate, pega-se uma Receita para Bolo de Chocolate, que ser usada como um modelo para o bolo que ser criado. De forma anloga, a receita uma classe, e o bolo um objeto. Uma classe no utilizada diretamente. Ningum come a receita de bolo. A classe utilizada somente para criar objetos baseados nela, e so os objetos que sero realmente utilizados. Deste modo, no utiliza-se a classe TextBox diretamente, e sim os objetos criados a partir daquele classe (caso membros estticos ou compartilhados venham mente do leitor, no ltimo pargrafo desta seo procuro esclarecer uma confuso que pode surgir com o conceito). A Figura 1 ilustra este conceito. No lado esquerdo da figura v-se um modelo da classe TextBox, listando alguns de seus membros, como as propriedades Text, Location, Size, e alguns mtodos como Focus e Copy. Ao lado direito, v-se um Form que faz uso de objetos baseados na classe TextBox.

Por definio, afirma-se que um objeto a instncia de uma classe. Deste modo, na Figura 1 pode-se ver que o Form possui trs instncias da classe TextBox. TextBox um exemplo de classe disponvel nativamente no .NET Framework. Em muitos casos necessrio criar classes que no existem no framework, como por exemplo uma classe Produto. Criar classes algo muito simples tanto em VB.NET como em C#. O cdigo a seguir mostra a sintaxe necessria em ambas as linguagens. // Em C#: public class Produto { } Em VB.NET: Public Class Produto End Class Neste ponto estou omitindo propositalmente a criao de membros para as classes, como propriedades ou mtodos, apenas para manter a clareza do exemplo. Neste artigo existem sees dedicadas a membros de classes. Instanciar classes (ou criar objetos) tambm bastante simples, como pode-se ver no seguinte cdigo: // Em C#: Produto meuProduto = new Produto(); Em VB.NET: Dim meuProduto as Produto = New Produto() O leitor familiarizado com membros compartilhados ou estticos (shared em VB.NET, static em C#, respectivamente) pode questionar minha afirmao de que classes no so utilizadas diretamente, visto que tais membros (compartilhados ou estticos) so utilizados sem a necessidade de instanciar a classe. Isto parte verdade, uma vez que o programador no precisa instanciar a classe manualmente. Entretanto, o runtime do .NET ir instanciar a classe e controlar aquela instncia nos bastidores, ento vale a tese de que uma classe utilizada atravs de algum objeto instanciado a partir da mesma.

5. Encapsulamento
Encapsulamento pode ser definido como a tarefa de tornar um objeto o mais auto-suficiente possvel. Na seo anterior, quando o exemplo do carro foi mencionado, de maneira intuitiva deixou-se de abordar os detalhes tcnicos de como o motor de um carro funciona. Existem tantos detalhes a serem explicados sobre o funcionamento do motor de um carro que a maioria das pessoas provavelmente desistiriam de utilizar um carro caso precisassem entender como funciona cada parte daquilo. Basicamente, uma pessoa no precisa daquele entendimento. Apenas saber que o motor o dispositivo que propulciona o carro j o suficiente. A maior parte dos detalhes do motor est encapsulada dentro do mesmo, e pessoas utilizando o carro no precisam lidar diretamente com o motor. Alm disso, importante frisar que o motor de um carro tem um funcionamento indepentende das outras partes (tais como direes, pneus, bancos, etc.). Ou seja, mesmo que um carro no tenha as quatro rodas, isto no impede de o motor funcionar, pois ele funciona como uma unidade independente, uma caixa-preta. Tomando agora o exemplo da caixa de texto em uma tela de um programa, pode-se refletir sobre os diversos detalhes que esto encapsulados dentro daquele objeto. Por exemplo, o desenvolvedor no sabe examente (ou no precisa saber) como que o sistema operacional ir desenhar a representao visual daquele objeto na tela, mandando sinais da CPU para a placa de vdeo, e ento para o monitor, e ento criando o objeto na posio que foi especificada previamente. Felizmente o desenvolvedor no precisa se preocupar com este tipo de detalhe. Tudo o que preciso colocar a caixa de texto na tela e configurar as propriedades Top e Left, para determinar onde o controle dever aparecer. A mgica do como o controle ir aparecer na tela algo que o objeto auto-suficiente o bastante para fazer aquilo sozinho. Os conceitos de Abstrao e Encapsulamento andam de mos dadas, visto que com a abstrao definimos a entidade que representa um objeto complexo, e o encapsulamento esconde detalhes daquele objeto, e com isto esconde detalhes de seu funcionamento que poderiam assustar a qualquer pessoa tentando utiliz-lo. Imagine se o motorista tivesse que saber a quantidade exata de combustvel a ser inserida no carburador quando o acelerador do carro acionado? Acho que eu s andaria de nibus, ou de carona.

6. Herana
Herana pode ser definida como a capacidade de uma classe herdar atributos e comportamento de uma outra classe. Basta um passeio ao redor da cidade para descobrir-se que existem vrios tipos e modelos de carros l fora. Carros de passeio, carros de corrida, carros conversveis, carros com volante do lado esquerdo e outros do lado direito, carros de diferentes cores, fabricantes, etc. Cada vez que um novo carro criado, no necessrio reinventar a roda, e comear todo um projeto novamente. Diversos conceitos abstrados e encapsulados no objeto carro j foram planejados, testados e aprovados, e por isso no faz sentido gastar-se tempo e recursos para fazer tudo aquilo de novo. Todo carro ter um meio de propulso, direo, acelerador e freio, rodas e pneus, e deste modo, todo novo carro pode herdar estas caractersticas e funcionamento de um projeto j existente. Caso seja necessrio criar um novo carro que seja quase igual a todos os

outros, mas que possua algumas coisas diferentes (por exemplo, utilizando um cmbio automtico ao invs de manual), o projetista pode herdar o novo carro a partir do projeto bsico, e ento adicionar as caractersticas especficas do novo carro ao novo projeto. Voltando ao exemplo da caixa de texto: a classe-base da caixa de texto retangular e geralmente tem um fundo branco e os caracteres mostrados em preto. Isto suficiente para diversos cenrios, mas imaginando-se o cenrio onde faz-se necessria a incluso de uma caixa de texto que dever receber somente a entrada de nmeros (proibindo a digitao de letras), e dever mostrar o nmero em azul caso seja positivo e vermelho caso seja negativo, logo percebe-se a necessidade em se criar uma nova classe. Esta nova classe ser bastante semelhante caixa de texto padro. De fato, semelhante o suficiente para que a mesma seja derivada da caixa de texto padro, e ento as necessidades especficas sero definidas nesta subclasse. A Listagem 1 mostra uma possvel implementao em C# para tal classe. A principal diferena para o cdigo em VB.NET seria apenas sintaxe, mas os conceitos so os mesmos. Listagem 1. Exemplo de herana public class ValorTextBox : System.Windows.Forms.TextBox { protected override void OnTextChanged(EventArgs e) { base.OnTextChanged (e); string valor = this.Text.Trim(); if (valor.Length == 1 && valor == "-") { // apenas o sinal de negativo foi digitado this.ForeColor = Color.Red; } else { try { // Tenta-se converter a string em um valor decimal decimal val = Convert.ToDecimal(valor); // Se tiver sucesso, formatar o TextBox para nmeros // positivos e negativos. if (val >= 0) this.ForeColor = Color.Blue; else this.ForeColor = Color.Red; } catch { // Se no foi possvel converter a string em decimal, // cancela o ltimo caracter digitado pelo usurio if (valor.Length > 0) this.Text = valor.Substring(0, valor.Length-1); this.SelectionStart = this.Text.Trim().Length; } } } }

A primeira linha de cdigo determina que a nova classe chama-se ValorTextBox, e deriva da classe System.Windows.Forms.TextBox. Em VB.NET, troca-se os dois-pontos (:) pela palavrachave Inherits. Todas as caractersticas da classe-base so herdadas ao definir-se que a nova classe herda da mesma. O restante do cdigo apenas implementa o comportamento de validar a entrada de dados do usurio e a formatao diferenciada para valores positivos e negativos. Com esta nova classe criada, o prximo passo apenas utiliz-la. O cdigo a seguir mostra trechos de cdigo em um Form que utiliza tanto esta nova classe como a classe bsica disponvel no Framework. Os principais pontos a enfatizar no cdigo a seguir so a declarao dos campos que mantm as instncias dos TextBox e a criao dos objetos baseados nas classes especficas. Pode-se ver que criado um TextBox baseado na classe padro, e dois outros TextBox baseados na classe especializada ValorTextBox criada neste exemplo. public class Heranca : System.Windows.Forms.Form { private System.Windows.Forms.TextBox textBox1; private MSDNBrasil.ValorTextBox txtValor1; private MSDNBrasil.ValorTextBox txtValor2; // cdigo omitido para clareza do exemplo } private void InitializeComponent() { this.textBox1 = new System.Windows.Forms.TextBox(); this.txtValor1 = new MSDNBrasil.ValorTextBox(); this.txtValor2 = new MSDNBrasil.ValorTextBox(); // cdigo omitido para clareza do exemplo } O Form em execuo pode ser visto na Figura 2. Os dois primeiros TextBox mostram nossa classe especializada em ao, enquanto que o terceiro um TextBox bsico. O importante ponto a frisar na utilizao da herana que a classe criada uma vez, e ento utilizada em quantos Forms forem necessrios. Supondo que em algum momento seja necessrio alterar a aparncia e/ou comportamento de todos os TextBox que utilizam esta classe, basta alterar diretamente na classe e todos os objetos refletiro a alterao. Por exemplo, ao invs de mostrar os nmeros negativos em cor vermelha, agora o usurio deseja ver os nmeros em letras amarelas, e a cor-de-fundo do TextBox deve passar a ser vermelha.

7. Polimorfismo
Literalmente, polimorfismo significa muitas formas ou o estado de existir em muitas formas. No mundo da programao, polimorfismo muitas vezes definido como a capacidade de objetos diferentes possuirem mtodos de mesmo nome e mesma lista de parmetros que quando chamados executam tarefas de maneiras diferentes. Estas definies em nada ajudam ao desenvolvedor que est tentando desmistificar o paradigma da poo_ E sinceramente no conheo nenhuma forma para se explicar polimorfismo usando poucas palavras, por isso sempre procuro usar bastante analogias e exemplos diversos para ilustrar a explanao. Seguindo com o exemplo do carro, pode-se dizer que carro -um veculo. Pode-se tambm dizer que moto -um veculo, e o mesmo vale para bicicleta. Todo veculo possui algum meio

para acelerar, no importa qual mecanismo usado para isso, e o mecanismo geralmente diferente, principalmente se comparado um carro (que usa um motor) uma bicicleta (que usa pedais, corrente e coroa). Colocado em outras palavras, temos objetos diferentes (carro, moto, bicicleta), que derivam de uma mesma classe (veculo). Esta classe possui um mtodo Acelerar, e deste modo, podemos utilizar os diferentes objetos de modo polimrfico, invocando um mtodo de mesmo nome, mas que possui implementao e comportamento diferente em cada um dos objetos.

Exerccios
De acordo com o texto acima e o que foi exposto nesta aula, responda as questes abaixo. 1. Quais as vantagens da Programao Orientada a Objetos (POO)? Cite algumas destas vantagens e comente cada uma delas. 2. Qual o benefcio da UML na POO? Comente sobre o diagrama de classes da UML. 3. A plataforma .NET e a linguagem C# totalmente Orientada a Objetos. Qual a diferena entre uma classe C# que esta vinculada a uma pgina ASP.NET e uma classe C# pura. 4. Comente sobre a Coeso e Acoplamento de classes. 5. Comente sobre herana em C#. Em seguida, informe qual a diferena conceitual da herana em C# com a herana em Java.

Proposta de Projeto
Para praticarmos o assunto desta aula, vamos iniciar a desenvolvimento em C# criando um projeto Web C#. Em seguida, vamos desenvolver as classes descritas no diagrama abaixo. Ateno! No necessrio desenvolver os mtodos das classes. Apenas desenvolva as assinaturas. Proponha um prottipo de tela para esta funcionalidade