PROGRAMA?ÃO OO NA PR?TICA - DICA (PEDINDO UMA)
Não é a primeira vez que posto algo sobre POO, mas agora a coisa apertou.
Vou dividir em três pequenas partes:
1) O
Eu ainda programo muito em VB6. Mas tenho sentido um certo desânimo em programar; uma coisa que eu gosto tanto. Toda vez que crio um sistema novo, preciso ir nos meus velhor programas e copiar e colar o código porque não consigo aplicar a POO, não por falta de conhecimento da teoria, mas por falta de exemplos em casos reais, no meu dia a dia.
Já fiz treinamento de POO mais de uma vez (o pior foi na Impacta de VB.NET. O melhor foi na TreinaWeb em PHP), acessei blogs e sites para complementar o assunto, tirei dúvidas, entendi todos os conceitos, fiz exemplos, vários programinhas: farmácia, petshop, cadastro de clientes e um monte de outros exemplinhos bobos. Mas quando sento na frente do computador para atender à s minhas demandas, tudo parece ser tão vazio. O conceito de classe, como criá-las, herdá-las, e tudo mais ficou bem claro, mas na prática... Então recorro mais uma vez aos colegas do VBM.
2) A Dificuldade
Estou aqui no VB6, mas uma vez com um sistema de cadastro de clientes de um novo sitema que estou entregando. Assim como outros sistemas, tenho campos código, nome, endereço, e vários outros bem comuns em cadastros. Alguns campos possuem validação diferentes entre os meus sistemas. Por exemplo:
- Em alguns sistemas é necessária a validação do CPF, em outros não.
- Em agluns sistemas, não tenho o campo idade. Em outros sim.
Em resumo, quero dizer que pelo menos 80% do código fonte do cadastro de clientes é o mesmo nos meus sistemas. Dos outros 20% que sobram, metade tem validação diferente e a outra metade em alguns sistemas tem aqueles campos e em outros não.
3) As perguntas
- Sabe o que eu não entendo? Já sei que um dos vários benefÃcios da POO é o reaproveitamento de código. Dá para fazer isso neste meu caso? Mas como é isso no VB.NET? Uma biblioteca? Um componente? Um trecho de código salvo em algum lugar próprio para isso?
- Falando em termos práticos, no meu dia-a-dia o que é mais comum são cadastros. Sejam de clientes, materiais, regiões, lugares, peças, etc. Como é que eu construo algo que me permita reaproveitar o código fonte?
Abs.
Estava lendo seu post e tenho dúvidas muito parecidas.
Quando eu programo, consigo levar poucas classes inteiras, principalmente na camada DAL (Data Access Layer) onde tenho subs que retornam DataSet, Command, Abrem e fecham Conexões, etc.
Mas acredito que uma perda considerável do código é normal, pois cada empresa, mesmo que atue no mesmo ramo tem regras de negócio diferentes. Culturas diferentes de ver como um sistema deve fazer.
Bom ... estava procurando um curso na internet, mas para fazer presencial, que colocasse mais a mão na massa com exemplos mais parrudos. Achei este:
- .NET 4.5.1 INCUBADORA
http://www.lgroup.com.br/dotnet.html
Achei bem interessante.
[][ô]s,
Tunusat.
Muitas funções ainda são preciso.
Uma vez fiz um treinamento de VB.NET 2008 na Impacta. Não gostei do material nem dos instrutures. Mas um deles deu um bom treinamento. Ele não seguiu a apostila e fez um projeto em camadas. Fez tudo OO, com banco de dados e tudo mais. Na época entendi tudo. Mas por falta de experiência e visão, acabei por não questionar certos pontos. Um deles é que o projeto era completo. Era um cadastro de clientes com pedidos e umas frescuras. Mas eu deveria pedir para mostrar o reaproveitamento do código em outros projetos, que era um dos objetivos daquele projeto. Ah se eu pudesse voltar no tempo...
O que eu queria mesmo é sentar do lado de um desenvolvedor e ver um programa útil ser construÃdo. Isso sim seria aprendizado. .
Eu sou autônomo. Não consigo vaga em empresas porque não tenho experiência. Até conseguiria para ganhar menos, mas meus gastos hoje pedem um salário de pelo menos R$ 3.500,00.
-------
Essas empresas não sabem o programador que estão perdendo .
-------
Tudo na minha vida fiz na raça. Um dia um cliente precisou de um sistema em PHP e banco MySQL. Eu não sabia, mas estudei e em 6 meses desenvolvi o tal sistema. Em outro momento, precisava implementar redes e servidores Linux. Fui lá, estudei e no espaço de 1 ano, além de implementar redes e servidors Linux, já estava ensinando LInux. Outro cliente precisou de suporte em no site em Joomla porque a empresa que ele contratou o deixou na mão. Fui lá, estudei e em 2 meses já entendia quase tudo de Joomla (tudo bem que Joomla é fácil :)
Claro que não me tornei um profissional especializado eu uma coisa. Talvez essa é minha dificuldade de encontrar um bom emprego. Mas essas várias coisas que aprendi que me sustentam hoje.
é como eu sempre digo. O importante é ter objetivo e os passos para chegar nele assim como fiz com PHP, Linux e Joomla. O desafio estava na minha frente. As etapas para chegar neles eram totalmente desconhecidas, mas visÃveis. Eu via onde eu precisava chegar. Foi como desenhar um carro por fora e por dentro. O desenho não saiu bem feito, mas com o tempo o desenho vai ficando cada vez melhor conforme você pratica.
Como POO eu não consigo enxergar este caminho. é como cortar o próprio cabelo com tesoura. Até onde você consegue ver no espelho, até que sai márômêno. Mas atrás da cabeça vai ficar estranho, confuso, falhado.
Mas estou estudando PHP, JavaScript e Java, além, claro, do CSS e XHTML. Meu objetivo é abandonar o Windows Forms e programar para Web. Tenho umas idéias aqui baseadas nas dificuldades e anseios de alguns clientes.... quem sabe dá certo.
Logo logo acho que vou conseguir ensinar POO de uma maneira que possa ser entendido na vida real. Este é um dos meus objetivos
OBS: Não coloquei todos os campos necessários.
Public Class Pessoa
Property ID As integer
Property Nome As String
Property Idade As Integer
End Class
Public Class PessoaFisica
Inherits Pessoa
Property CPF As String
End Class
Public Class PessoaJuridica
Inherits Pessoa
Property CNPJ As String
End Class
Public Class Cliente
Inherits PessoaFisica
Property Desconto As Integer
End Class
Como todo tipo de pessoa possue essas caracterÃsticas, então na maioria dos casos, não será necessário fazer mudanças no código. O que pode mudar aà seria o campo de [Ô]Desconto[Ô] da classe Cliente, pois é uma regra de negócio que nem todo cliente possui, daà é só tirar ou adaptar conforme a regra de negócio. Agora, em relação ao campo [Ô]idade[Ô], não haveria tanta necessidade de retirá-lo mesmo guando existir alguma classe que não possua tal regra, pois ela se aplica a todo tipo de pessoa. Isso também vale para o CPF quando estamos tratando do Cliente. Já que nem todo cliente possue CPF, então deixe o campo em branco.
Não sei se fui claro, mas acho que dá pra ter uma ideia do que a POO nos proporciona. Qualquer dúvida, poste aÃ.
Vlw
Entendi seu exemplo. No entanto, ele faz parte dos tÃpicos exemplos que vemos por aÃ. Sei que é apenas um exemplo simples de implementação de POO. Fiz um monte destes nos cursos. Mas estão aqui sem uso a não ser para servir de exemplo. Na vida real vem a pergunta: De que forma usar isso para ter algum ganho no meu projeto? Onde, em que parte, em qual momento vou ter o benefÃcio da POO?
Hoje, com minha visão limitada de POO, não consigo entender como ela pode me ajudar a reduzir o tempo nos meus projetos. Parece até que vou gastar mais tempo. Podemos até corrigir falando em investir tempo. Mas quanto? Qual o tamanho deste benefÃcio a longo prazo? Por hora, o que mais me chama a atenção é o reaproveitamento do código (sei que a POO tem outros benefÃcios como: organização, reaproveitamento do código, facilidade na manutenção, etc). Por exemplo: Como seria reaproveitar o código em vários projetos dentro do Visual Studio? Uma DLL? Uma referência a alguma coisa?
Veja, não sou contra a POO, longe disso. Só gostaria de um caso real onde eu possa ver as [Ô]maravilhas[Ô] desse paradigma ou o que ele pode fazer por mim. Hoje sou um cego. Não consigo ver. Talvez pelo tamanho dos meus projetos, talvez por falta de implementá-la, talvez por burrice mesmo :) Eu não tenho preguiça, mas fazer uma coisa que eu não consiga ver o benefÃcio lá na frente me deixa um pouco desanimado.
Às vezes penso que, por hora, a POO é um canhão para matar formigas. Meus projetos são pequenos. Mas neste contexto existe isso de projeto grande ou pequeno?
O fato é que toda vez que inicio um projeto em VB6, ao criar um cadastro de clientes, vou lá em um programa pronto, copio e colo o código fonte para o cadastro de clientes do novo programa e vou alterando. Altero o nome das tabelas, string de conexão com o banco, uma ou outra regra de validação, etc.
Na minha cabeça a POO seria: Estou criando um projeto que tenha o famoso cadastro de clientes assim como, teoricamente, fiz em outro projeto com POO. Aà vou lá no meu projeto novo e [Ô]reaproveito o código[Ô] e voilá! O cliente foi cadastrado no banco sem muito esforço. é isso?
Hoje meu tempo é bastante limitado. Eu não consigo criar um projeto útil em VB.NET com um monte de projetos para fazer. Por isso continuo no VB6. Se até no VB6 à s vezes me deparo com códigos monstruosos e strings SQL gigantescas e fico horas para desenvolver uma lógica, imagine fazer isso com um novo paradigma. Com VB6 eu sei que dificilmente cometo erros de codificação ou sintaxe. A maioria é de lógica. Com a POO, seria uma coisa a mais para revisar.
Entendo que a POO não faz milagres. Por hora, meu objetivo seria evitar retrabalho ou copiar+colar. Imagino que algumas coisas, mesmo em POO o copiar+colar continuará existindo, mas em coisas mais simples. Hoje praticamente tudo que é comum em meus projetos é copiar+colar.
Quem por aà mora perto de Taboão da Serra - SP e quer começar a desenvolver um projeto para entender essa bagaça?
Abs.
Citação:Na vida real vem a pergunta: De que forma usar isso para ter algum ganho no meu projeto? Onde, em que parte, em qual momento vou ter o benefÃcio da POO?
A POO possui um conjunto de fatores que traz qualidade a nossos projetos. A ideia principal é abstrair o mundo real de uma forma que possamos entendê-la de uma maneira mais coerente e organizada. Essa diferença é facilmente percebida quando se trabalha em equipe.
Citação:Na minha cabeça a POO seria: Estou criando um projeto que tenha o famoso cadastro de clientes assim como, teoricamente, fiz em outro projeto com POO. Aà vou lá no meu projeto novo e [Ô]reaproveito o código[Ô] e voilá! O cliente foi cadastrado no banco sem muito esforço. é isso?
O reaproveitamento do código é apenas um dos fatores que a POO nos proporciona, e isso não se aplica somente ao fato de pegarmos códigos de outros projetos para implantá-los nos novos projetos. O reaproveitamenteo serve também como uma maneira de extendemos a nossa aplicação. No exemplo que citei para o cadastro de Cliente, imagine que você tenha que criar uma regra de negócio para Funcionário. Com POO, você só precisaria criar uma classe e herdá-lá da Classe Pessoa e implementar as novas funcionalidades. Ou seja, você não precisaria ficar criando todo o código novamente, basta herdar do que já está pronto e usar.
Citação:Às vezes penso que, por hora, a POO é um canhão para matar formigas. Meus projetos são pequenos. Mas neste contexto existe isso de projeto grande ou pequeno?
A POO é mais indicada para projetos médios e grandes. Se você não tem muita perspectiva de que o seu projeto cresça, então não precisa se preocupar muito com POO.
Citação:Entendo que a POO não faz milagres. Por hora, meu objetivo seria evitar retrabalho ou copiar+colar. Imagino que algumas coisas, mesmo em POO o copiar+colar continuará existindo, mas em coisas mais simples. Hoje praticamente tudo que é comum em meus projetos é copiar+colar.
A grande diferença do copiar e colar da programação estruturada para o copiar e colar da POO é que, na estruturada, ficamos com codigo muito repetitivo e de baixa qualidade. Na POO, podemos reaproveitar o código extendendo as suas funcionalidades, como já citado acima.
Citação:
imagine que você tenha que criar uma regra de negócio para Funcionário. Com POO, você só precisaria criar uma classe e herdá-lá da Classe Pessoa e implementar as novas funcionalidades.
Vc percebe amigo? é isso que eu digo como abstrato. Mas o que seria [Ô]implementar com novas funcionalidades[Ô]? Que exemplos de funcionalidades? Vou explicar:
Meus sistemas trabalham com dados. Tudo o que precise ficar armazendado em banco de dados. Eu, no meu sistema, tenho um cadastro de clientes e também de funcionários. Aà estou lá cadastrando meu cliente: Nome, CPF, RG, Endereço. São os mesmos dados usados pelo cadastro de funcionários. Então eu vou lá e crio uma classe que irá classe que gravar no banco de dados estas informações. Então posso aproveitar essa classe para gravar meu funcionário. é isso?
Fora isso não consigo ver outra implementação.
Abs.
Se tiver um tempo, dê uma lida nesse tópico.
Abs.