<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3137452058985608812</id><updated>2011-04-21T21:06:41.649-03:00</updated><category term='arquitetura'/><category term='guidelines'/><category term='Naming Guidelines'/><category term='livros'/><category term='C_Sharp 2008 keybindings'/><category term='metodologia ágil'/><title type='text'>denisyomur@.blogspot.com</title><subtitle type='html'>Conteúdo sobre Arquitetura e desenvolvimento de Software, Melhores Práticas, testes, entre outras informações para auxiliar no desenvolvimento de aplicações .Net</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://denisyomura.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://denisyomura.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Denis Hideo Yomura</name><uri>http://www.blogger.com/profile/03780142911841441689</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3137452058985608812.post-4753028959993541825</id><published>2008-10-14T16:21:00.002-03:00</published><updated>2008-10-14T16:29:26.439-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C_Sharp 2008 keybindings'/><title type='text'>Poster C#</title><content type='html'>Segue no link abaixo um pdf que contém todos os keybindings do C# do Visual Studio 2008.&lt;br /&gt;&lt;br /&gt;Muito bom! Vale a pena dar uma lida!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=E5F902A8-5BB5-4CC6-907E-472809749973&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=E5F902A8-5BB5-4CC6-907E-472809749973&amp;amp;displaylang=en&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3137452058985608812-4753028959993541825?l=denisyomura.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://denisyomura.blogspot.com/feeds/4753028959993541825/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3137452058985608812&amp;postID=4753028959993541825' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/4753028959993541825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/4753028959993541825'/><link rel='alternate' type='text/html' href='http://denisyomura.blogspot.com/2008/10/poster-c.html' title='Poster C#'/><author><name>Denis Hideo Yomura</name><uri>http://www.blogger.com/profile/03780142911841441689</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3137452058985608812.post-2153804669596058968</id><published>2008-10-04T18:06:00.003-03:00</published><updated>2008-10-04T18:09:24.452-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arquitetura'/><category scheme='http://www.blogger.com/atom/ns#' term='metodologia ágil'/><title type='text'>Princípio da Segregação de Interface</title><content type='html'>&lt;div&gt;&lt;div&gt;O princípio da segregação de interfaces ajuda a resolver o problema das interfaces “gordas”, que são classes cuja interface não possui coesão com o modelo tornado as interfaces poluídas e disponibilizando métodos desnecessariamente ao cliente.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Os clientes não devem ser forçados a depender de métodos que eles não utilizam, ou seja, quando um cliente 1 depende de uma classe que contém métodos que o mesmo não utiliza, porém o cliente 2 os utiliza, o cliente 1 será afetado pelas mudanças que o cliente 2 necessite fazer na classe. Para evitar este tipo de acoplamento é que devemos separar as interfaces.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Como exemplo, considere as interfaces de um terminal de auto atendimento bancário. A interface do usuário deve ser bem flexível, possibilitando que a saída seja feita de diversas formas como na tela do equipamento ou falada por um sintetizador de voz. Para esta parte, a flexibilidade pode ser obtida através de um classe abstrata que possui todos os métodos necessários para que os dados sejam apresentados pela interface.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Consideremos também que cada transação efetuada no terminal é derivada de uma classe chamada “Transação”, logo possuímos as classes “Deposito”, “Saque” e “Transferencia”. Cada classe deve utilizar os métodos da interface com o usuário. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A princípio possuímos um modelo como demonstra a ilustração 1.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_uQX8ja_3TcI/SOfbAGBTwAI/AAAAAAAAAP0/iw1PM3ab560/s1600-h/segint1.GIF"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_uQX8ja_3TcI/SOfbAGBTwAI/AAAAAAAAAP0/iw1PM3ab560/s320/segint1.GIF" border="0" alt="" id="BLOGGER_PHOTO_ID_5253408285013557250" /&gt;&lt;/a&gt;&lt;div&gt;Ilustração 1 – Hierarquia da Transação&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Ao analisar melhor o modelo da ilustração 1 observamos que cada transação está sendo forçada a depender de métodos não interessantes às mesmas. Nesta situação, se alguma transação for modificada, todas as outras transações serão afetadas além das classes que dependem da interface IU. O pior acontecerá ao tentar reutilizar estas classes, pois é necessário levar junto muita coisa que não interessa. Tudo isto exala odores como rigidez, fragilidade e viscosidade.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Esses problemas observados podem ser evitados segregando a interface IU em partes individuais como “IUDeposito”, “IUSaque” e “IUTransferencia” como demonstra a ilustração 2.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_uQX8ja_3TcI/SOfbAbXogNI/AAAAAAAAAP8/B-nRXL-viHc/s1600-h/segint2.GIF"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_uQX8ja_3TcI/SOfbAbXogNI/AAAAAAAAAP8/B-nRXL-viHc/s320/segint2.GIF" border="0" alt="" id="BLOGGER_PHOTO_ID_5253408290744336594" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ilustração 2 – Interface IU segregada&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Portanto os clientes devem depender apenas dos métodos que eles irão utilizar. Este objetivo pode ser alcançado quebrando a interface da classe poluída em interfaces específicas. Com isso é quebrado a dependência dos clientes de métodos que eles não utilizam criando uma independência mútua entre os clientes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3137452058985608812-2153804669596058968?l=denisyomura.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://denisyomura.blogspot.com/feeds/2153804669596058968/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3137452058985608812&amp;postID=2153804669596058968' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/2153804669596058968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/2153804669596058968'/><link rel='alternate' type='text/html' href='http://denisyomura.blogspot.com/2008/10/princpio-da-segregao-de-interface.html' title='Princípio da Segregação de Interface'/><author><name>Denis Hideo Yomura</name><uri>http://www.blogger.com/profile/03780142911841441689</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_uQX8ja_3TcI/SOfbAGBTwAI/AAAAAAAAAP0/iw1PM3ab560/s72-c/segint1.GIF' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3137452058985608812.post-5671008345379276527</id><published>2008-10-04T17:30:00.003-03:00</published><updated>2008-10-04T17:42:12.164-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arquitetura'/><category scheme='http://www.blogger.com/atom/ns#' term='metodologia ágil'/><title type='text'>Princípio da inversão de dependências</title><content type='html'>&lt;div&gt;&lt;div&gt;Os métodos de desenvolvimento de software mais tradicionais tendem a criar estruturas onde módulos de alto nível dependem de módulos de baixo nível e onde política de negócios depende de detalhes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Este tipo de dependência é prejudicial pois geralmente módulos de alto nível contém o modelo de negócios da aplicação. Se módulos como estes dependerem de módulos de baixo nível, mudanças efetuadas nos módulos de baixo nível podem afetar diretamente os módulos de alto nível forçando estes a mudar.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Os módulos de alto nível devem ser isolados de módulos com menor importância no modelo de negócios. Sem o isolamento, torna-se impossível o reuso dos modelos de negócios implementados nos módulos de alto nível.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Segundo Booch, “todas as arquiteturas orientadas a objetos bem estruturadas possuem camadas claramente definidas, sendo que cada camada disponibiliza um pacote coerente de serviços através de uma interface definida.”. Podemos utilizar como exemplo a estrutura representada na ilustração 1:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_uQX8ja_3TcI/SOfULrzyCmI/AAAAAAAAAPk/wIGAcxCf0gA/s1600-h/invDep1.GIF"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_uQX8ja_3TcI/SOfULrzyCmI/AAAAAAAAAPk/wIGAcxCf0gA/s320/invDep1.GIF" border="0" alt="" id="BLOGGER_PHOTO_ID_5253400787554536034" /&gt;&lt;/a&gt;&lt;div&gt;Ilustração 1 – Exemplo de um modelo em camadas&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Apesar de aparentar correto, o modelo demonstra que a camada de política é sensível a mudanças em todas as camadas inferiores uma vez que dependência é transitiva, ou seja, a camada de política depende da camada de controle e também da camada de utilidades.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Para aplicar o principio da inversão de dependências, devemos ter como base as seguintes teorias:&lt;/div&gt;&lt;div&gt;• Módulos de alto nível não devem depender em módulos de baixo nível. Ambos devem depender de abstrações.&lt;/div&gt;&lt;div&gt;• Abstrações não devem depender de detalhes. Detalhes devem depender de abstrações. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A ilustração 2 demonstra um modelo mais apropriado. Cada camada superior declara uma interface abstrata para o serviço que ela necessita. Cada classe de alto nível utilizam as classes de baixo nível através de uma interface abstrata.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_uQX8ja_3TcI/SOfUL_jofZI/AAAAAAAAAPs/mTVpWJlBGtY/s1600-h/invdep2.GIF"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_uQX8ja_3TcI/SOfUL_jofZI/AAAAAAAAAPs/mTVpWJlBGtY/s320/invdep2.GIF" border="0" alt="" id="BLOGGER_PHOTO_ID_5253400792855510418" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ilustração 2 – Camadas invertidas&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Na ilustração 2 pode-se observar que as camadas superiores não dependem das camadas inferiores. Ao invés disso, as camadas inferiores dependem das interfaces de serviços abstratos declarados nas camadas superiores. Com a aplicação do principio podemos observar que não a dependência transitiva entre as camadas foi quebrada, resolvendo os problemas citados anteriormente. &lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3137452058985608812-5671008345379276527?l=denisyomura.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://denisyomura.blogspot.com/feeds/5671008345379276527/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3137452058985608812&amp;postID=5671008345379276527' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/5671008345379276527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/5671008345379276527'/><link rel='alternate' type='text/html' href='http://denisyomura.blogspot.com/2008/10/princpio-da-inverso-de-dependncias.html' title='Princípio da inversão de dependências'/><author><name>Denis Hideo Yomura</name><uri>http://www.blogger.com/profile/03780142911841441689</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_uQX8ja_3TcI/SOfULrzyCmI/AAAAAAAAAPk/wIGAcxCf0gA/s72-c/invDep1.GIF' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3137452058985608812.post-8516053983546541632</id><published>2008-10-04T17:15:00.003-03:00</published><updated>2008-10-04T17:23:48.047-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arquitetura'/><category scheme='http://www.blogger.com/atom/ns#' term='metodologia ágil'/><title type='text'>Princípios da Substituição de Liskov</title><content type='html'>&lt;div&gt;&lt;div&gt;O princípio de substituição de Liskov, criado por Bárbara Liskov, determina que funções que utilizam referências a classes base devem estar aptas a utilizar objetos de classes derivadas sem nem ao menos conhecê-los.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A importância deste princípio é obvia quando são consideradas as conseqüências de violá-lo. Por exemplo, seja “F” uma função que recebe como parâmetro uma classe base “B”. Presumindo que ao passar um objeto “D”, de uma classe derivada de “B”, cause um comportamento errado em “F”. Logo, “D” viola o princípio de substituição de Liskov e o mesmo é considerado frágil quando utilizado por “F”. Para testar esta função, deverá ser criado um teste particular para “F” ao receber “D” como parâmetro. Este teste viola o princípio aberto/fechado porque “F” não é fechado a extensões de “B”.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Como exemplo de violação do princípio, considere a aplicação que utiliza um retângulo. A princípio essa aplicação funciona corretamente, porém o cliente decide que a aplicação deve também trabalhar com um quadrado. Um quadrado não é nada mais que um retângulo com lados iguais, logo a classe quadrado deve derivar de retângulo. Costuma-se interpretar esse tipo de relacionamento de herança entre duas classes como “é um” ou “é um tipo de”, neste caso, quadrado é um tipo de retângulo como mostra a ilustração 1.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_uQX8ja_3TcI/SOfQS_dcUOI/AAAAAAAAAPc/bELGM0opkzk/s1600-h/liskov.GIF"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_uQX8ja_3TcI/SOfQS_dcUOI/AAAAAAAAAPc/bELGM0opkzk/s320/liskov.GIF" border="0" alt="" id="BLOGGER_PHOTO_ID_5253396515042119906" /&gt;&lt;/a&gt;&lt;div&gt;Ilustração 1 – Quadrado herda de Retângulo&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Este tipo de análise de relacionamento é visto algumas vezes como uma das técnicas fundamentais da análise da orientação a objetos. Porém este tipo de análise pode induzir a erros significantes que apenas serão notados na implementação.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Uma falha que pode ser apontada no exemplo é o fato de que um quadrado não necessita ter as propriedades Base e Altura, uma vez que todos os lados do quadrado são iguais. Estas propriedades herdadas não são apropriadas quando o objeto em questão é um quadrado, porém é possível contornar a situação sobrescrevendo os métodos “get” e “set” da Base e da Altura para que quando alguém atribuir um valor à base, o método atribui o mesmo valor à altura e vice-versa.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Agora considere uma função onde é passado como parâmetro um retângulo:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Função fx(Retângulo r)&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;    r.base = 5;&lt;/div&gt;&lt;div&gt;    r.altura = 4;&lt;/div&gt;&lt;div&gt;    se (r.Area() != 20)&lt;/div&gt;&lt;div&gt;        //Exibe Erro: Área incorreta;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A função utiliza os atributos base e altura de um suposto retângulo. A função funciona corretamente quando lhe é passado um retângulo mas dá errada se um quadrado for passado. A função “fx” é frágil se levarmos em consideração a hierarquia quadrado/retângulo. A função citada viola o principio de substituição de Liskov já que é possível existir uma função que receba um retângulo como parâmetro e não funcione corretamente se for passado um quadrado, por este motivo o quadrado não é substituível por um retângulo, ou seja, sua classe base.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3137452058985608812-8516053983546541632?l=denisyomura.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://denisyomura.blogspot.com/feeds/8516053983546541632/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3137452058985608812&amp;postID=8516053983546541632' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/8516053983546541632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/8516053983546541632'/><link rel='alternate' type='text/html' href='http://denisyomura.blogspot.com/2008/10/princpios-da-substituio-de-liskov.html' title='Princípios da Substituição de Liskov'/><author><name>Denis Hideo Yomura</name><uri>http://www.blogger.com/profile/03780142911841441689</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_uQX8ja_3TcI/SOfQS_dcUOI/AAAAAAAAAPc/bELGM0opkzk/s72-c/liskov.GIF' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3137452058985608812.post-2218575770048392503</id><published>2008-10-01T22:22:00.004-03:00</published><updated>2008-10-02T14:20:25.970-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arquitetura'/><category scheme='http://www.blogger.com/atom/ns#' term='metodologia ágil'/><title type='text'>Princípio Aberto / Fechado (Open/Closed Principle - OCP)</title><content type='html'>&lt;div&gt;&lt;div&gt;Ao desenvolver um sistema, deve-se ter em mente que o sistema sofrerá várias mudanças no decorrer do seu ciclo de vida. Para ter um design suscetível a novas funcionalidades, podemos aplicar o princípio aberto/fechado definido por Bertrand Meyer que diz que as entidades do sistema (classes, módulos, funções, etc.) devem ser abertas a extensões, mas fechadas a modificações.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Aberto a extensões, pois o módulo deve estar preparado para suportar novos comportamentos e atender novos requisitos. Fechado a modificações, pois mesmo estendendo o módulo com novos comportamentos, o mesmo deve permanecer intacto, sem mudanças no código fonte. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Este princípio atende diretamente o odor de rigidez de um software devido ao fato de que o mesmo torna-se maleável para que sejam implementadas novas funcionalidades apenas adicionando novas linhas de código sem ter que modificar as linhas de código já testadas.             &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Para aplicar este princípio no design de um sistema, é necessário o uso de abstrações. As abstrações são classes-base que representam possíveis comportamentos cujas classes derivadas deverão possuir. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Se um módulo é capaz de manipular uma abstração, o mesmo pode então ser fechado a modificações, desde que ele dependa apenas da abstração, e aberto a extensões criadas a partir de novas derivações da abstração. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;O exemplo a seguir ilustra o princípio aberto/fechado a partir de uma aplicação simples que tem por objetivo apenas desenhar formas geométricas na tela do usuário.   &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_uQX8ja_3TcI/SOQkgySaxJI/AAAAAAAAAPM/e4oCIrBfq1c/s1600-h/ocp1.GIF"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_uQX8ja_3TcI/SOQkgySaxJI/AAAAAAAAAPM/e4oCIrBfq1c/s400/ocp1.GIF" border="0" alt="" id="BLOGGER_PHOTO_ID_5252363211094279314" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Ilustração 1 – Sistema rígido  &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A ilustração 1 mostra o design do sistema citado sem se importar com o princípio aberto/fechado. Observe que é um design rígido uma vez que o módulo de desenhar as formas está dependendo diretamente do tipo da forma que deve ser desenhada. Se futuramente tiver que ser adicionado outra forma, será necessário alterar o módulo para o mesmo atender esse novo requisito.   &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_uQX8ja_3TcI/SOQkaVc7WnI/AAAAAAAAAPE/dRzd4RYlDds/s1600-h/ocp2.GIF"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_uQX8ja_3TcI/SOQkaVc7WnI/AAAAAAAAAPE/dRzd4RYlDds/s400/ocp2.GIF" border="0" alt="" id="BLOGGER_PHOTO_ID_5252363100274514546" /&gt;&lt;/a&gt;&lt;div&gt;Ilustração 2 – Sistema conforme o princípio aberto/fechado&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;A ilustração 2 mostra o mesmo sistema, porém aplicando o principio aberto/fechado. Note que se for necessário estender o comportamento da função “DesenharTodasFormas”, da classe “DesenharFormas”, para atender um novo tipo de forma, será necessário apenas criar uma nova classe derivada da classe “Forma”. Desse modo a classe “DesenharFormas” não sofrerá nenhuma mudança, logo o comportamento do módulo pode ser estendido sem sofrer mudanças.             &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;No novo design modelado, podemos identificar algumas características. O sistema não é frágil, pois mesmo depois de adicionar um novo comportamento a ele, é desnecessária a revisão do código para achar partes que foram afetadas pela alteração.             &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;O sistema também não é rígido já que para adicionar uma nova forma para ser desenhada é bem simples, sendo necessário apenas criar uma nova derivação e implementar suas funções.             &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Por último, o sistema não é imóvel. A classe “DesenharFormas” pode ser reusada por qualquer outra aplicação sem a necessidade de levar as classes “Quadrado” e “Circulo” com ela. Portanto o novo design não é caracterizado por nenhuma das características de um mau design mencionadas.             &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Concluindo, o principio aberto/fechado é um dos principais princípios do design orientado a objetos porque com ele atingimos os melhores benefícios da orientação a objetos: flexibilidade, reusabilidade e manutenibilidade.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3137452058985608812-2218575770048392503?l=denisyomura.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://denisyomura.blogspot.com/feeds/2218575770048392503/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3137452058985608812&amp;postID=2218575770048392503' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/2218575770048392503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/2218575770048392503'/><link rel='alternate' type='text/html' href='http://denisyomura.blogspot.com/2008/10/princpio-aberto-fechado.html' title='Princípio Aberto / Fechado (Open/Closed Principle - OCP)'/><author><name>Denis Hideo Yomura</name><uri>http://www.blogger.com/profile/03780142911841441689</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_uQX8ja_3TcI/SOQkgySaxJI/AAAAAAAAAPM/e4oCIrBfq1c/s72-c/ocp1.GIF' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3137452058985608812.post-781793708847564343</id><published>2008-10-01T19:33:00.003-03:00</published><updated>2008-10-03T15:49:45.950-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Naming Guidelines'/><title type='text'>Nomeando Classes, Estruturas, Interfaces, Métodos e Membros.</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;span&gt;&lt;span&gt;- Uma regra geral válida para esses identificadores é utilizar nomes de substantivos. Se não for possível utilizar esta regra, tem algo de errado e que precisa ser reformulado.  &lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;- Utilize nomes simples e fáceis de serem compreendidos em tipos que serão utilizados com mais freqüência.     &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;- Se for possível, termine o nome do identificador com o nome de sua classe pai. Ex. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;ArgumentOutOfRangeException&lt;/span&gt;, é um tipo de &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Exception&lt;/span&gt;.     &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;- Interfaces devem possuir a letra “I” como prefixo. Ex. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;IComponent&lt;/span&gt;.     &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;- Para uma classe que é uma implementação padrão de uma interface, diferencie o nome da classe apenas retirando o prefixo “I”. Ex. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;class &lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Component &lt;/span&gt;: &lt;span class="Apple-style-span" style="font-style: italic;"&gt;IComponent&lt;/span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;- Para enumerações (Enums) não utilize o sufixo “Enum”. Ex. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;enum &lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;ColorEnum &lt;/span&gt;{...}     &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;- Para métodos, utilize nomes de verbos ou frases com verbos.     &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;- Uma propriedade deve ser nomeada com um substantivo ou um adjetivo.     &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;- Não utilize “&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Get&lt;/span&gt;” para propriedades.     &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;- Para propriedades cujo retorno é booleano, utilize afirmações no nome. Ex. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;EstáAtivo &lt;/span&gt;ao invés de &lt;span class="Apple-style-span" style="font-style: italic;"&gt;NãoEstáAtivo&lt;/span&gt;.        &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;Aqui termina esta parte de “Naming Guidelines”. Como já foi dito, o nome dado aos seus identificadores pode fazer muita diferença e ajuda a evitar muitas dores de cabeça, além de deixar o código mais limpo e legível.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Obrigado!&lt;/div&gt;&lt;div&gt;Denis Yomura&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="color: rgb(51, 51, 51);   line-height: 19px; font-family:Verdana;font-size:13px;"&gt;&lt;div&gt;Referencias:&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756" style="color: rgb(102, 102, 153); "&gt;CWALINA, Krzysztof; ABRAMS, Brad. &lt;/a&gt;&lt;span class="Apple-style-span"  style=" ;font-family:Arial;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold; "&gt;&lt;a href="http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756" style="color: rgb(102, 102, 153); "&gt;Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries (Microsoft .NET Development Series)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3137452058985608812-781793708847564343?l=denisyomura.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://denisyomura.blogspot.com/feeds/781793708847564343/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3137452058985608812&amp;postID=781793708847564343' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/781793708847564343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/781793708847564343'/><link rel='alternate' type='text/html' href='http://denisyomura.blogspot.com/2008/10/nomeando-classes-estruturas-interfaces.html' title='Nomeando Classes, Estruturas, Interfaces, Métodos e Membros.'/><author><name>Denis Hideo Yomura</name><uri>http://www.blogger.com/profile/03780142911841441689</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3137452058985608812.post-527987708827471231</id><published>2008-09-30T14:50:00.004-03:00</published><updated>2008-10-03T15:50:08.988-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Naming Guidelines'/><title type='text'>Regras de nomeação de Namespaces</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;span&gt;&lt;span&gt;Namespaces são principalmente utilizadas para organizar suas implementações em uma hierarquia lógica e fácil de ser utilizada. Abaixo algumas diretrizes para dar nome às Namespaces:     &lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;- Como os nomes dos identificadores, o nome da Namespace deve ser facilmente interpretado, ou seja, deve ser possível saber suas funcionalidades através do seu nome.     &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;- Se precisar de algum padrão, considere o seguinte:               {&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Empresa&lt;span class="Apple-style-span" style="font-style: normal;"&gt;}&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;({&lt;/span&gt;Produto&lt;/span&gt;&lt;span class="Apple-style-span" style=""&gt;}&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;|&lt;/span&gt;&lt;span class="Apple-style-span" style=""&gt;{&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Tecnologia&lt;/span&gt;&lt;span class="Apple-style-span" style=""&gt;}&lt;/span&gt;&lt;span class="Apple-style-span" style=""&gt;) [.{&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Características&lt;/span&gt;&lt;span class="Apple-style-span" style=""&gt;}] [&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;.&lt;/span&gt;&lt;span class="Apple-style-span" style=""&gt;{&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Subnamespace&lt;span class="Apple-style-span" style="font-style: normal; "&gt;}]&lt;/span&gt; – Ex. Microsoft.VisualStudio.Design     &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;- É uma boa prática sempre colocar o nome da empresa como prefixo para evitar confusões caso haja uma Namespace com o mesmo nome de outra empresa, por exemplo.     &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;- No segundo nível da Namespace, escolha algo imutável, ou seja, que não irá mudar a cada versão lançada. Lembre-se que a Namespace será algo que ficará fixo no código, sendo algo muito trabalhoso para ficar mudando a cada release do seu produto.     &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;- Não utilize nomes “virtuais” em suas Namespaces, por exemplo, o nome dado para a equipe que você está trabalhando em um determinado projeto. Esses nomes tendem a mudar dependendo da estrutura organizacional da empresa.     &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;- Sempre utilize o &lt;span class="Apple-style-span" style="font-style: italic;"&gt;PascalCasing &lt;/span&gt;e separe os componente das namespaces utilizando o ponto ”.”.     &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;- Se for necessário e fizer sentido, pluralize. Essa regra não deve ser utilizada no caso de siglas. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Ex. System.Collections e System.IO.&lt;/span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;- Não utilize nomes genéricos demais como &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Element, Node, Log e Message. &lt;/span&gt;A probabilidade de haver nomes iguais é muito grande. Utilize então &lt;span class="Apple-style-span" style="font-style: italic;"&gt;FormElement, XmlNode, EventLog e SoapMessage.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;quot;Times New Roman&amp;quot;;mso-fareast-Times New Roman&amp;quot;;mso-ansi-language:PT-BR;mso-fareast-language:PT-BR; mso-bidi-language:AR-SAfont-family:&amp;quot;;font-size:12.0pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"   style="color: rgb(51, 51, 51);   font-style: normal; line-height: 19px; font-family:Verdana;font-size:13px;"&gt;&lt;div&gt;Referencias:&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756" style="color: rgb(102, 102, 153); "&gt;CWALINA, Krzysztof; ABRAMS, Brad. &lt;/a&gt;&lt;span class="Apple-style-span"  style=" ;font-family:Arial;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold; "&gt;&lt;a href="http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756" style="color: rgb(102, 102, 153); "&gt;Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries (Microsoft .NET Development Series)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3137452058985608812-527987708827471231?l=denisyomura.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://denisyomura.blogspot.com/feeds/527987708827471231/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3137452058985608812&amp;postID=527987708827471231' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/527987708827471231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/527987708827471231'/><link rel='alternate' type='text/html' href='http://denisyomura.blogspot.com/2008/09/regras-de-nomeao-de-namespaces.html' title='Regras de nomeação de Namespaces'/><author><name>Denis Hideo Yomura</name><uri>http://www.blogger.com/profile/03780142911841441689</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3137452058985608812.post-4429349651349841394</id><published>2008-09-30T14:44:00.003-03:00</published><updated>2008-10-03T15:51:03.624-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Naming Guidelines'/><title type='text'>Regras de nomeação de Assemblies / Dlls</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;span style="mso-spacerun:yes"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;- Na escolha do nome físico de seus arquivos “.dll”, tente escolher algo bem abrangente, que descreva o propósito de suas funcionalidades. Ex. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;System.Data &lt;/span&gt;     &lt;/p&gt;&lt;p class="MsoNormal"&gt;- Se precisar de algum padrão, considere o seguinte:&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;[Empresa].[Componente].dll &lt;/span&gt;– onde &lt;span class="Apple-style-span" style="font-style: italic;"&gt;[componente] &lt;/span&gt; pode ser conter mais de um nome. Ex. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Microsoft.VisualBasic.Vsa.dll &lt;/span&gt;   &lt;/p&gt;&lt;p class="MsoNormal"&gt;- Também faz sentido nomear o arquivo seguindo o nome da Namespace nele implementada.&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"   style="color: rgb(51, 51, 51);   line-height: 19px; font-family:Verdana;font-size:13px;"&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="text-decoration: underline; color: rgb(102, 102, 153); font-family: georgia; font-size: 13px; -webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: Verdana; "&gt;&lt;div style="display: inline !important; "&gt;Referencias:&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 102, 153); font-family: georgia; font-size: 13px; text-decoration: underline;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: Verdana; "&gt;&lt;div&gt;&lt;a href="http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756" style="color: rgb(102, 102, 153); "&gt;CWALINA, Krzysztof; ABRAMS, Brad. &lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: Arial; "&gt;&lt;span class="Apple-style-span" style="font-weight: bold; "&gt;&lt;a href="http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756" style="color: rgb(102, 102, 153); "&gt;Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries (Microsoft .NET Development Series)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="color: rgb(51, 51, 51);   line-height: 19px; font-family:Verdana;font-size:13px;"&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-family:Arial;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold; "&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3137452058985608812-4429349651349841394?l=denisyomura.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://denisyomura.blogspot.com/feeds/4429349651349841394/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3137452058985608812&amp;postID=4429349651349841394' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/4429349651349841394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/4429349651349841394'/><link rel='alternate' type='text/html' href='http://denisyomura.blogspot.com/2008/09/regras-de-nomeao-de-assemblies-dlls_30.html' title='Regras de nomeação de Assemblies / Dlls'/><author><name>Denis Hideo Yomura</name><uri>http://www.blogger.com/profile/03780142911841441689</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3137452058985608812.post-3006015140541364995</id><published>2008-09-29T22:19:00.011-03:00</published><updated>2008-09-30T10:34:15.708-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arquitetura'/><category scheme='http://www.blogger.com/atom/ns#' term='metodologia ágil'/><title type='text'>Princípio da Divisão de Responsabilidades (Single-Responsibility Principle)</title><content type='html'>&lt;div align="justify"&gt;&lt;span style="font-size:85%;"&gt;O princípio da divisão de responsabilidades, também conhecido como coesão, defende que uma classe deve possuir apenas um, e apenas um, motivo para ser modificada. Se a classe possuir mais de um motivo para ser modificada então ela está mal definida.&lt;br /&gt;&lt;br /&gt;A classe somente terá mais de um motivo para ser modificada se a mesma for responsável pelas ações às quais ela foi definida e por outras fora de seu escopo. No contexto do princípio da divisão de responsabilidades, responsabilidade é definida como razão para mudanças. Se for possível imaginar mais de um motivo para modificar a classe, logo esta classe possui mais de uma responsabilidade.&lt;br /&gt;&lt;br /&gt;No exemplo a seguir foi definida uma interface “Modem” onde as funções declaradas parecem corretas dentro do contexto das funcionalidades que um modem deve exercer.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://4.bp.blogspot.com/_uQX8ja_3TcI/SOGIZnNyKoI/AAAAAAAAAOs/mfKZ1Kh4EP4/s1600-h/clip_image002.gif"&gt;&lt;span style="font-size:85%;"&gt;&lt;img id="BLOGGER_PHOTO_ID_5251628614095612546" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_uQX8ja_3TcI/SOGIZnNyKoI/AAAAAAAAAOs/mfKZ1Kh4EP4/s320/clip_image002.gif" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Ilustração 1 - Interface Modem&lt;br /&gt;&lt;br /&gt;Porém, analisando detalhadamente a iliustração 1 é possível identificar que a classe possui duas responsabilidades: conexão e comunicação. As funções “Dial” e “Hangup” controlam a conexão e as funções “Send” e “Recv” controlam a comunicação.&lt;br /&gt;&lt;br /&gt;Se os requisitos da aplicação mudassem de modo a afetar mais frequentemente as funções de conexão, o design demonstraria rigidez, um dos odores de decomposição do software. A aplicação seria rígida porque ao alterar algo na conexão seria necessário compilar e distribuir novamente toda a parte de comunicação sem necessidade alguma.&lt;br /&gt;A ilustração 2 demonstra como ficaria o design ao separar as responsabilidades.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_uQX8ja_3TcI/SOGIt1Lt_5I/AAAAAAAAAO0/-Nh0CjwOpDQ/s1600-h/clip_image003.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5251628961442430866" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_uQX8ja_3TcI/SOGIt1Lt_5I/AAAAAAAAAO0/-Nh0CjwOpDQ/s320/clip_image003.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Ilustração 2 - Interface modem separada&lt;br /&gt;&lt;br /&gt;Para separar as responsabilidades da interface modem de modo que a aplicação não sofra de rigidez, foi necessário aumentar a complexidade do sistema. Todavia deve-se tomar muito cuidado ao aplicar o princípio, pois se os requisitos da aplicação fossem tais que sempre alterariam ambas as responsabilidades, conexão e comunicação, o novo design seria incorreto devido ao fato de ter gerado complexidade desnecessária à aplicação, outro odor da decomposição do software. Portanto a aplicação do princípio de divisão de responsabilidades, ou outro qualquer, deve ser feito de modo cuidadoso e inteligente. Só se deve utilizá-los se o design estiver exalando algum dos odores de decomposição do software.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3137452058985608812-3006015140541364995?l=denisyomura.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://denisyomura.blogspot.com/feeds/3006015140541364995/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3137452058985608812&amp;postID=3006015140541364995' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/3006015140541364995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/3006015140541364995'/><link rel='alternate' type='text/html' href='http://denisyomura.blogspot.com/2008/09/princpio-da-diviso-de-responsabilidades.html' title='Princípio da Divisão de Responsabilidades (Single-Responsibility Principle)'/><author><name>Denis Hideo Yomura</name><uri>http://www.blogger.com/profile/03780142911841441689</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_uQX8ja_3TcI/SOGIZnNyKoI/AAAAAAAAAOs/mfKZ1Kh4EP4/s72-c/clip_image002.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3137452058985608812.post-1378673952286550675</id><published>2008-09-29T22:06:00.006-03:00</published><updated>2008-09-29T23:09:05.472-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arquitetura'/><category scheme='http://www.blogger.com/atom/ns#' term='metodologia ágil'/><title type='text'>Design Ágil</title><content type='html'>&lt;div align="justify"&gt;Design ágil é um processo continuo de princípios, modelos, e praticas visando a melhoria da arquitetura do software.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;Design de uma aplicação não são apenas diagramas UML. Os diagramas UML podem representar partes do design, mas ainda não é o design propriamente dito. O design de um software é um conceito abstrato que representa de uma forma macro a estrutura do sistema como um todo e ao mesmo tempo de forma detalhada cada módulo, classe e método.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;O design pode ser representado por diversas maneiras, mas no fim das contas, o código fonte é a principal fonte de design. Um design mal feito, consequentemente um código mal desenvolvido, pode acelerar o processo de decomposição do software, sendo que a velocidade de decomposição de um software está diretamente ligada à sua qualidade, ou seja, quanto maior a velocidade de decomposição do software, menor é a qualidade. Para evitar tal decomposição, deve-se ficar atento aos sintomas ou odores que o software exala.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Desenvolvedores ágeis se dedicam para manter o design coeso, limpo, e livre de sintomas ou odores sempre que possível. Eles sabem como fazer isso porque sempre seguem alguns passos antes de escrever qualquer linha de código: &lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;1. Eles acham o problema seguindo praticas ágeis;&lt;br /&gt;2. Eles analisam o problema aplicando princípios de design;&lt;br /&gt;3. Eles resolvem o problema aplicando o modelo de design apropriado ao caso.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;Dificilmente um software perfeito livre de defeitos é produzido por alguém. O que pode ser feito para minimizar os defeitos no fim do processo e em sua manutenção, é ter conhecimento dos motivos que levam um software a decompor. Um software suscetível à decomposição exala os seguintes odores:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Rigidez&lt;/strong&gt;: Rigidez ocorre quando é necessário um grande esforço para alterá-lo, mesmo quando a alteração é pequena.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Fragilidade&lt;/strong&gt;: Fragilidade é a tendência que o programa tem para dar problema em diversos pontos quando uma única alteração é feita.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Imobilidade&lt;/strong&gt;: Imobilidade ocorre quando o software contém muitas partes que podem ser reaproveitadas em outros softwares, mas para reutilizar essas partes é necessário um grande esforço junto com um alto risco, pois não foram planejadas para ser reutilizadas. Logo, uma grande parte do sistema terá que ser levada junto sem necessidade nenhuma.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Viscosidade&lt;/strong&gt;: Um projeto viscoso é aquele que quando uma alteração é necessária, devido ao seu design não planejado para trabalhar de forma componentizada, fica difícil fazer a alteração do modo correto, gerando desvios para que a alteração seja mais fácil e mais rápida de programar.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Complexidade desnecessária&lt;/strong&gt;: Acontece quando o design do sistema é superdimensionado e implementado para prever situações que nem sequer foram especificadas. Isso torna o software complexo demais e difícil de entender.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Redundância desnecessária&lt;/strong&gt;: Acontece muito quando o programador necessita do mesmo código utilizado em outra função para resolver um problema, porém com algumas alterações. Acontece que isso acaba gerando redundância de código tornando a manutenção difícil e trabalhosa já que o erro deve ser corrigido em todas as repetições de código.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Opacidade&lt;/strong&gt;: Opacidade é a falta de clareza na hora de escrever o código fonte. Muitas vezes o código é legível apenas para quem o programou. Isso pode ser evitado utilizando padrões na hora de escrever o código e fazendo com que outras pessoas revisem o código.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Todos esses odores são pontos extremamente importantes que devem ser considerados ao desenvolver um software. Em ambientes não ágeis, o design de um sistema degrada pois os requisitos mudam de uma forma que o design inicial não previa causando a mudança do design original, tornando-o desorganizado e ineficaz.&lt;br /&gt;&lt;br /&gt;Um time ágil investe um pouco a mais no design inicial para tornar o sistema resistente a mudanças evitando que ele apodreça.&lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;Nos próximos posts vou falar sobre os princípios de design ágil que podem ser utilizados para evitar o apodrecimento do software. Esses princípios são: Divisão de responsabilidades, Aberto / Fechado, Substituição de Liskov, Inversão de dependências e Segregação de interfaces.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3137452058985608812-1378673952286550675?l=denisyomura.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://denisyomura.blogspot.com/feeds/1378673952286550675/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3137452058985608812&amp;postID=1378673952286550675' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/1378673952286550675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/1378673952286550675'/><link rel='alternate' type='text/html' href='http://denisyomura.blogspot.com/2008/09/design-gil.html' title='Design Ágil'/><author><name>Denis Hideo Yomura</name><uri>http://www.blogger.com/profile/03780142911841441689</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3137452058985608812.post-3246148523205030278</id><published>2008-09-29T17:35:00.004-03:00</published><updated>2008-10-03T15:51:14.015-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Naming Guidelines'/><title type='text'>Regras gerais de nomeação de identificadores</title><content type='html'>&lt;div&gt;Segue algumas convenções gerais de como escolher a palavra que será o nome de um identificador.&lt;/div&gt;&lt;br /&gt;&lt;div&gt; - O nome escolhido deve estar sempre ligado ao propósito do identificador. Deve ficar claro o que o identificador faz ou representa logo na primeira leitura do seu nome.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; - Esqueça as abreviações e dê preferência para a clareza do nome. Abreviações não irão tornar seu código mais rápido. Ex. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;NomeDoFuncionário&lt;/span&gt; é mais fácil de entender que &lt;span class="Apple-style-span" style="font-style: italic;"&gt;nmFunc&lt;/span&gt;.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; - Não utilize hífens ou outros separadores de palavras nos nomes. Utilize PascalCase ou camelCase dependendo da situação.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; - Esqueça a Notação Húngara.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; - Tente evitar nomes que conflitem com palavras chave ou reservadas de outras linguagens de programação. Isso ajudará a evitar muitas dores de cabeça case seja necessário migrar o código para outras linguagens.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; - Se for utilizar uma sigla, não invente, utilize apenas se a mesma for largamente conhecida. Ex. Html, Xml.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; - Dê preferência para a utilização de nomes genéricos da CLR ao invés de nomes específicos da linguagem. Ex. Uma método que converte algo para boleano deve se chamar &lt;span class="Apple-style-span" style="font-style: italic;"&gt;ConvertToBoolean &lt;/span&gt;e não &lt;span class="Apple-style-span" style="font-style: italic;"&gt;ConvertToBool, &lt;/span&gt;pois &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Boolean &lt;/span&gt;é o nome base na CLR que é representado por &lt;span class="Apple-style-span" style="font-style: italic;"&gt;bool&lt;/span&gt; em C#.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; - Use um nome comum como &lt;span class="Apple-style-span" style="font-style: italic;"&gt;value&lt;/span&gt; ou &lt;span class="Apple-style-span" style="font-style: italic;"&gt;item &lt;/span&gt;quando um identificador é algo que não possui um propósito tão específico. Ex. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;void Gravar(double value) ; void Gravar(int value) ; void Gravar(short value) ; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt; - Quando for criar uma nova versão de uma API, crie um nome similar ao original. No novo nome, opte por utilizar sufixos ao invés de prefixos, assim ficará mais fácil de achar a nova função através do Intellisense. Se o nome antigo é o único que faz sentido para aquele propósito, utilize um sufixo numérico. Ex. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;public class Carro {...}  -&gt;  public class Carro2 ou public class Automóvel.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; - Nos casos dos métodos obsoletos, utilize o atributo&lt;span class="Apple-style-span" style="font-style: italic;"&gt; [Obsolete(...)].&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Referencias:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;a href="http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756"&gt;CWALINA, Krzysztof; ABRAMS, Brad. &lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style=" ;font-family:Arial;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;a href="http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756"&gt;Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries (Microsoft .NET Development Series)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3137452058985608812-3246148523205030278?l=denisyomura.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://denisyomura.blogspot.com/feeds/3246148523205030278/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3137452058985608812&amp;postID=3246148523205030278' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/3246148523205030278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/3246148523205030278'/><link rel='alternate' type='text/html' href='http://denisyomura.blogspot.com/2008/09/regras-gerais-de-nomeao-de.html' title='Regras gerais de nomeação de identificadores'/><author><name>Denis Hideo Yomura</name><uri>http://www.blogger.com/profile/03780142911841441689</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3137452058985608812.post-5399126008549061131</id><published>2008-09-29T16:52:00.001-03:00</published><updated>2008-10-03T15:51:25.662-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Naming Guidelines'/><title type='text'>PascalCasing e camelCasing</title><content type='html'>&lt;span class="Apple-style-span"  style=" ;font-family:'Times New Roman';"&gt;&lt;div style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 3px; padding-right: 3px; padding-bottom: 3px; padding-left: 3px; width: auto; font: normal normal normal 100%/normal Georgia, serif; text-align: left; "&gt;&lt;span class="Apple-style-span"   style="color: rgb(126, 124, 124); font-family:'Times New Roman';font-size:13px;"&gt;&lt;p class="pCTitle pCTitleMod" style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 15px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font: normal normal normal small/normal Arial, Verdana, sans-serif; "&gt;&lt;span class="Apple-style-span" style="color: rgb(90, 112, 131); "&gt;Para a nomeação de identificadores, existem duas formas mais apropriadas: &lt;span class="Apple-style-span" style="font-weight: bold; "&gt;PascalCasing &lt;/span&gt;e &lt;span class="Apple-style-span" style="font-weight: bold; "&gt;camelCasing&lt;/span&gt;. &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="pCText pCTextMod" style="font-size: 11px; color: rgb(90, 112, 131); font-weight: bold; text-decoration: none; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 15px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font: normal normal normal small/normal Arial, Verdana, sans-serif; "&gt;&lt;br /&gt;&lt;b&gt;- PascalCasing:&lt;/b&gt; É utilizado para em Namespaces, tipos, e variáveis que possuem mais de uma palavra. Consiste em capitalizar a primeira letra de cada palavra. &lt;/p&gt;&lt;p class="pCText pCTextMod" style="font-size: 11px; color: rgb(90, 112, 131); font-weight: bold; text-decoration: none; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 15px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font: normal normal normal small/normal Arial, Verdana, sans-serif; "&gt;Ex: &lt;b&gt;N&lt;/b&gt;ome&lt;b&gt;D&lt;/b&gt;o&lt;b&gt;F&lt;/b&gt;uncionário&lt;br /&gt;&lt;/p&gt;&lt;p class="pCText pCTextMod" style="font-size: 11px; color: rgb(90, 112, 131); font-weight: bold; text-decoration: none; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 15px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font: normal normal normal small/normal Arial, Verdana, sans-serif; "&gt;No caso de siglas composta por 2 letras, ambas as letras devem ser capitalizadas. &lt;/p&gt;&lt;p class="pCText pCTextMod" style="font-size: 11px; color: rgb(90, 112, 131); font-weight: bold; text-decoration: none; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 15px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font: normal normal normal small/normal Arial, Verdana, sans-serif; "&gt;Ex: &lt;span class="Apple-style-span" style="font-weight: bold; "&gt;IOS&lt;/span&gt;tream onde &lt;span class="Apple-style-span" style="font-weight: bold; "&gt;IO&lt;/span&gt; é uma sigla para input/output.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;- camelCasing:&lt;/b&gt; É utilizado apenas para parâmetros. Consiste em capitalizar a primeira letra de cada palavra com exceção da primeira palavra. &lt;/p&gt;&lt;p class="pCText pCTextMod" style="font-size: 11px; color: rgb(90, 112, 131); font-weight: bold; text-decoration: none; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 15px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font: normal normal normal small/normal Arial, Verdana, sans-serif; "&gt;Ex: &lt;b&gt;n&lt;/b&gt;ome&lt;b&gt;D&lt;/b&gt;o&lt;b&gt;F&lt;/b&gt;uncionário &lt;br /&gt;&lt;/p&gt;&lt;p class="pCText pCTextMod" style="font-size: 11px; color: rgb(90, 112, 131); font-weight: bold; text-decoration: none; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 15px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font: normal normal normal small/normal Arial, Verdana, sans-serif; "&gt;No caso de siglas composta por 2 letras, ambas as letras devem ser minúsculas. &lt;/p&gt;&lt;p class="pCText pCTextMod" style="font-size: 11px; color: rgb(90, 112, 131); font-weight: bold; text-decoration: none; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 15px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font: normal normal normal small/normal Arial, Verdana, sans-serif; "&gt;Ex: &lt;span class="Apple-style-span" style="font-weight: bold; "&gt;ioS&lt;/span&gt;tream onde &lt;span class="Apple-style-span" style="font-weight: bold; "&gt;IO&lt;/span&gt; é uma sigla para input/output. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="pCText pCTextMod" style="font-size: 11px; color: rgb(90, 112, 131); font-weight: bold; text-decoration: none; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 15px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font: normal normal normal small/normal Arial, Verdana, sans-serif; "&gt;&lt;br /&gt;Maiores informações em:&lt;a href="http://msdn.microsoft.com/pt-br/library/ms229043.aspx#MtViewDropDownText" style="text-decoration: none; "&gt;.NET Framework Developer's Guide - Capitalization Conventions&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3137452058985608812-5399126008549061131?l=denisyomura.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://denisyomura.blogspot.com/feeds/5399126008549061131/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3137452058985608812&amp;postID=5399126008549061131' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/5399126008549061131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/5399126008549061131'/><link rel='alternate' type='text/html' href='http://denisyomura.blogspot.com/2008/09/pascalcasing-e-camelcasing_29.html' title='PascalCasing e camelCasing'/><author><name>Denis Hideo Yomura</name><uri>http://www.blogger.com/profile/03780142911841441689</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3137452058985608812.post-3149941730293199161</id><published>2008-09-29T16:46:00.002-03:00</published><updated>2008-10-03T15:51:41.487-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Naming Guidelines'/><category scheme='http://www.blogger.com/atom/ns#' term='guidelines'/><title type='text'>Naming Guidelines</title><content type='html'>&lt;span class="Apple-style-span"  style="  ;font-family:Arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;O que são &lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;"Naming Guidelines"&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;? &lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="  ;font-family:Arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;Bom, são diretrizes para nomear as coisas... hum, essa não foi muito boa. Vamos mergulhar mais fundo então. &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="  ;font-family:Arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Quando codificamos, nos deparamos com um universo de coisas que precisam de um nome. Estas 'coisas' são chamadas de Identificadores. Um identificador é tudo que &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;não&lt;/span&gt; se enquadra como palavra reservada, símbolos ou números. Por exemplo, nomes de Assemblies, DLLs, Namespaces, Clases, Estruturas, Interfaces, Variáveis, etc.&lt;br /&gt;&lt;br /&gt;Um ex-professor sempre me dizia: "O que custa reservar um tempo para inventar um bom nome? Lembre-se que sua mãe demorou 9 meses para te dar um!" &lt;br /&gt;&lt;br /&gt;Para entender a importância dos nomes, imagine um sistema com 26 variáveis cujo padrão de nomenclatura utilizado foi o de "A" a "Z", ou seja, a primeira variável tem o nome de "A" e a última de "Z" &lt;br /&gt;&lt;br /&gt;Agora imagine se der algum problema na variável "K", quanto tempo demoraria para lembrar que a variável "K" armazena o nome do funcionário? &lt;br /&gt;&lt;br /&gt;Agora um pesadelo, imagine que o sistema foi feito por um colega de trabalho que já saiu da empresa e que o escolhido para dar manutenção neste sistema foi você! &lt;br /&gt;&lt;br /&gt;Acho que já deu pra ter uma idéia da importância de se adotar um conjunto consistente de diretrizes de nomenclatura no desenvolvimento de um software. Essas diretrizes possuem um propósito muito importante quando falamos de usabilidade e manutenibilidade do software. &lt;br /&gt;&lt;br /&gt;Tentarei passar nos próximos posts algumas técnicas de nomenclatura de identificadores e como utilizá-las. &lt;br /&gt;&lt;br /&gt;Abraços,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3137452058985608812-3149941730293199161?l=denisyomura.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://denisyomura.blogspot.com/feeds/3149941730293199161/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3137452058985608812&amp;postID=3149941730293199161' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/3149941730293199161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/3149941730293199161'/><link rel='alternate' type='text/html' href='http://denisyomura.blogspot.com/2008/09/naming-guidelines.html' title='Naming Guidelines'/><author><name>Denis Hideo Yomura</name><uri>http://www.blogger.com/profile/03780142911841441689</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3137452058985608812.post-8485270039381038351</id><published>2008-09-29T16:19:00.002-03:00</published><updated>2008-09-29T16:23:16.923-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='livros'/><title type='text'>Livro: Agile Principles, Patterns, and Practices in C# (Robert C. Martin Series)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ecx.images-amazon.com/images/I/51Y57BH27TL._SL500_AA240_.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px;" src="http://ecx.images-amazon.com/images/I/51Y57BH27TL._SL500_AA240_.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ecx.images-amazon.com/images/I/51Y57BH27TL._SL500_AA240_.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 13px; white-space: pre; "&gt;&lt;a href="http://www.amazon.com/Principles-Patterns-Practices-Robert-Martin/dp/0131857258/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1222697749&amp;amp;sr=8-1"&gt;Agile Principles, Patterns, and Practices in C# (Robert C. Martin Series)&lt;/a&gt; &lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 13px; white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 13px; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="white-space: normal; "&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Este é um ótimo livro pra que quer aprender mais a respeito de como desenvolver uma boa arquitetura utilizando metodologia ágil. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 13px; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="white-space: normal; "&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 13px; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="white-space: normal; "&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Creio que irei postar aqui muitas coisas interessantes que estão neste livro, principalmente na parte de arquitetura.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3137452058985608812-8485270039381038351?l=denisyomura.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://denisyomura.blogspot.com/feeds/8485270039381038351/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3137452058985608812&amp;postID=8485270039381038351' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/8485270039381038351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/8485270039381038351'/><link rel='alternate' type='text/html' href='http://denisyomura.blogspot.com/2008/09/livro-agile-principles-patterns-and.html' title='Livro: Agile Principles, Patterns, and Practices in C# (Robert C. Martin Series)'/><author><name>Denis Hideo Yomura</name><uri>http://www.blogger.com/profile/03780142911841441689</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3137452058985608812.post-1720613252638308935</id><published>2008-09-29T16:18:00.000-03:00</published><updated>2008-09-29T16:19:19.967-03:00</updated><title type='text'>Hello World!</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Verdana; font-size: 12px; "&gt;Olá a todos!&lt;br /&gt;&lt;br /&gt;Seja bem vindo ao meu novo blog!&lt;br /&gt;&lt;br /&gt;Decidi criar este blog para compartilhar os meus conhecimentos com todos, já que grande parte do que conheço aprendi em blogs como este. &lt;br /&gt;&lt;br /&gt;Meu objetivo aqui neste blog é expor informações sobre Arquitetura de Software, Melhores Práticas, testes, desenvolvimento entre outras informações que utilizam a tecnologia Microsoft.Net.&lt;br /&gt;&lt;br /&gt;Espero que gostem!&lt;br /&gt;&lt;br /&gt;Denis Yomura&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3137452058985608812-1720613252638308935?l=denisyomura.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://denisyomura.blogspot.com/feeds/1720613252638308935/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3137452058985608812&amp;postID=1720613252638308935' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/1720613252638308935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3137452058985608812/posts/default/1720613252638308935'/><link rel='alternate' type='text/html' href='http://denisyomura.blogspot.com/2008/09/hello-world.html' title='Hello World!'/><author><name>Denis Hideo Yomura</name><uri>http://www.blogger.com/profile/03780142911841441689</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
