Você está na página 1de 5

03/06/13

.NET - Principios de Programao

.NET - Princpios de Programao e Padres de Projetos - I


Uma das melhores maneiras de aprender a escrever um bom cdigo aprender a reconhecer um cdigo ruim. Um cdigo que no funciona obviamente um cdigo ruim, mas existem outras caractersticas em um cdigo para que ele seja declarado como 'ruim'. Na rea de desenvolvimento de software o termo code smell (cdigo que cheira) aplicado quando o cdigo fonte de qualquer programa indica algum problema. No pense que um cdigo que cheira um cdigo com bugs, no, o cdigo aparenta estar tecnicamente correto e no impede o programa de funcionar. Na verdade o code smell indica que o projeto de software no foi bem feito e que vai apresentar uma alta taxa de manuteno com riscos de apresentar bugs catastrficos no futuro.

A seguir temos algumas das caractersticas que um cdigo ruim possui para ser classificado dessa forma: 1. Rigidez Se mudar um trecho de cdigo vai exigir mudanas em outras partes do cdigo, que por sua vez vai exigir mudanas em um outras partes, que...etc. O cdigo pode ser considerado rgido e malcheiroso. 2. Fragilidade Programadores cnicos costumam dizer que existem sempre trs erros em qualquer aplicao: o que voc sabe que existe, o que voc no conhece, e o que voc vai criar quando for corrigir o que voc conhece. Um cdigo frgil quebra o cdigo de maneiras inesperadas, em reas que no parecem estar relacionadas ao que voc est trabalhando. 3. Imobilidade Uma situao comum: voc est modificando uma aplicao, e, voc quer reutilizar o que se supunha ser um cdigo de propsito geral. Mas o trecho de cdigo que voc precisa est to arraigado que a nica maneira de reutiliz-lo vai te obrigar a cortar e colar. Voc est se deparando com um cdigo que imvel.
www.macoratti.net/12/10/net_ppg1.htm 1/5

03/06/13

.NET - Principios de Programao

Isso um desperdcio de tempo e um mau cheiro. 4. Redundncia Um cdigo imvel a causa primria de um cdigo mal cheiroso; a redundncia outro fator que contribui para isso. Se houver qualquer trecho de cdigo que aparece em mais de um lugar, voc tem um problema de mau cheiro, porque se o trecho precisar ser alterado (e vai), voc precisar alter-lo em todos os lugares. 5. Opacidade Se voc j se deparou com uma situao onde precisa dizer : "No sei como isso funciona, mas funciona..." Voc tem um problema, e eu no preciso de lhe dizer que isto inaceitvel, certo ? Se voc no compreende o cdigo como voc vai saber alter-lo ? Se voc precisa de comentrios no cdigo para entender o que ele faz ento o seu cdigo opaco e cheira mal. Obs: Acrescente aos sintomas acima as seguintes caractersticas de um cdigo que cheira: Cdigo duplicado, mtodos e classes gigantescas, a utilizao de muitos parmetros, classes que usam mtodos de outras classes em demasia, classes que possuem dependncia em detalhes de implementao de outras classes. Ento o que um bom programador pode fazer para escapar de ter o seu cdigo/projeto classificado como mal cheiroso ? Quando voc estiver avaliando seu projeto/cdigo faa duas perguntas:

1- Este projeto realmente necessrio ? 2- O cdigo usado viola de qualquer forma os princpios bsicos de projeto relacionados com as boas prticas ?
Se voc suspeitar que uma dessas perguntas obteve um sim como resposta, ento voc deve revisar o seu projeto ou o seu cdigo luz dos princpios bsicos das boas prticas de projetos. Se um cdigo violar quaisquer um destes princpios considere o custo de corrigir o seu cdigo agora. Se a mudana for simples ento voc pode implement-lo caso contrrio considere reescrever tudo novamente adotando as boas prticas. Se para tornar o seu cdigo ou o seu projeto aderente s boas prticas de projeto voc tiver que adicionar um complexidade maior ainda considere reescrever tudo novamente luz das boas prticas. Mas de quais princpios estamos falando ? Quais so eles ? Na verdade existem muitos princpios que podem ser adotados, e, voc vai encontrar muitos princpios distintos mencionados por diversos autores mas neste artigo eu vou me ater a 4 princpios bsicos. Estes quatro princpios so geralmente considerados os mais importantes, e muitos dos outros princpios so variaes ou aperfeioamentos desses princpios. Vejamos um resumo sobre cada um deles:

1 - O Princpio da Responsabilidade nica (SRP) - The Single Responsibility Principle


Uma classe deve ter um, e somente um, motivo para mudar.
www.macoratti.net/12/10/net_ppg1.htm 2/5

03/06/13

.NET - Principios de Programao

2- O princpio Aberto-Fechado (OCP) - The Open Closed Principle


Voc deve ser capaz de estender um comportamento de uma entidade de software (classe), sem modificla. Este princpio estabelece que os objetos devem estar abertos para extenso, mas fechados para modificao. Basicamente, isso significa que voc deve ser capaz de adicionar um novo comportamento sem mudar as coisas velhas.

3- Princpio da Substituio de Liskov - (LSP) - The Liskov Substitution Principle


As classes derivadas devem ser substituveis por suas classes base. O LSP um refinamento de polimorfismo bsico. Dizendo em outras palavras: voc no criar uma classe filha que seja menos capaz que sua classe pai.

4- A Lei de Demter
A Lei de Demter, tambm conhecido como o Princpio do Conhecimento Mnimo, afirma que qualquer objeto dado s deve referenciar diretamente seus prprios membros e os membros dos objetos que ele instncia. Alm desse princpios voc deve considerar tambm os padres de arquitetura e os padres de projeto de software de forma ter o seu projeto classificado como um projeto aderente s boas prticas e um cdigo que no cheira mal. Um padro de arquitetura de software bsico que prega a separao das responsabilidades geralmente divide um projeto de software em camadas: Camada Camada Camada Camada Camada de de de de de Apresentao Servio Negcio Dados Persistncia

Alm deste padro podemos citar o padro MVC (usado pelo ASP .NET MVC): Model View Controller

Padres de Projeto
E os padres de projeto que so solues j encontradas, testadas e certificadas e que podemos aplicar aos nossos projetos e no ter que reinventar a roda... Os padres de projeto foram catalogados e compem o que podemos chamar de uma espcie de manual de boas prticas a serem seguidas e utilizadas em projetos de software orientados a objetos. Dos catlogos mais conhecidos e usados destaca-se o primeiro e considerado mais importante, escrito em 1995 pela Gang of Four ou GoF. O catlogo original apresentou algo em torno de 23 padres de projetos descritos e implementados na linguagem C++ ou SmallTalk. Veremos neste artigo os principais padres, um resumo bsico e sua implementao na linguagem C#.
www.macoratti.net/12/10/net_ppg1.htm 3/5

03/06/13

.NET - Principios de Programao

Vamos iniciar com uma classificao dos padres quanto a sua finalidade. Nesse quesito podemos ter os padres classificados como: 1. Criacionais - criao de objetos 2. Estruturais - composio de classes e objetos 3. Comportamentais - interao entre classes e objetos O catlogo Gof tambm classifica os padres de projeto quanto ao propsito e ao escopo da seguinte forma:

Na continuao deste artigo irei abordar o padro Factory dando um breve resumo sobre o padro e sua implementao na linguagem C#.

Slm 130:1 Das profundezas clamo a ti, Senhor. Slm 130:2 Senhor, escuta a minha voz; estejam os teus ouvidos atentos voz das minhas splicas. Slm 130:3 Se tu, Senhor, observares as iniqidades, Senhor, quem subsistir? Slm 130:4 Mas contigo est o perdo, para que sejas temido. Slm 130:5 Aguardo ao Senhor; a minha alma o aguarda, e espero na sua palavra. Slm 130:6 A minha alma anseia pelo Senhor, mais do que os guardas pelo romper da manh, sim, mais do que os guardas pela manh. Slm 130:7 Espera, Israel, no Senhor! pois com o Senhor h benignidade, e com ele h copiosa redeno; Slm 130:8 e ele remir a Israel de todas as suas iniqidades.
Seo VB .NET do Site Macoratti.net Super DVD .NET - A sua porta de entrada na plataforma .NET Super DVD Vdeo Aulas - Vdeo Aula sobre VB .NET, ASP .NET e C# Seo C# do site Macoratti.net Seo Padres de Projetos do site - Macoratti.net Padres de Projeto - Macoratti.net Padres de Projeto - O modelo MVC - Model View ... - Macoratti.net VB .NET - Usando Padres de Projetos na prtica - Macoratti.net Os 7 Principios do desenvolvimento de software - Macoratti.net
www.macoratti.net/12/10/net_ppg1.htm 4/5

03/06/13

.NET - Principios de Programao

.NET - AntiPatterns - Macoratti.net Code Smells Padres de Projeto - O modelo MVC - Model View Controller
Jos Carlos Macoratti

www.macoratti.net/12/10/net_ppg1.htm

5/5