Design de Software – Introdução

Após a série de posts sobre Padrões de Projeto, vamos seguir um pouco na mesma linha e falar sobre Design de Software. O Design de Software pode ser definido de uma maneira clássica como um processo para projetar o sistema, utilizando o levantamento de requisitos e avaliando as restrições [3]. Assim, o objetivo é montar um modelo, com base no conhecimento atual do sistema e no que os stakeholders do projeto esperam.

Design de Software Ágil

No entanto, nas metodologias ágeis, existe um esforço enorme para evitar “adivinhar”  informações, principalmente com relação aos requisitos. Por isso utilizam-se técnicas, como o TDD que é a mais conhecida, para que o design do software seja emergente [4]. Design emergente quer dizer que, no decorrer do desenvolvimento a equipe irá definir o design baseado nas necessidades reais, e não em hipóteses ou estudos. O que não quer dizer que não é feito planejamento! O planejamento é feito logo no início do projeto, conhecido como iteração 0, a diferença é que esse planejamento não é feito de forma exaustiva, até que todos os membros estejam cansados e aceitem qualquer coisa.

Em [4],  Scott Ambler apresenta a seguinte figura:

Nela são listadas algumas práticas que vão desde o alto nível, na definição da arquitetura, passando pelo design e pela programação em si. Ambler fala que todas elas são igualmente importantes para que o time tenha um design efetivo. Ainda em [4] são apresentadas várias filosofias utilizadas por desenvolvedores ágeis para alcanças um design emergente e que funcione.

Princípios de Design Orientado a Objetos

Após essa breve introdução sobre Design de Software Ágil, vamos ver um pouco sobre os princípios de Design Orientado a Objetos SOLID. SOLID é um acrônimo para os cinco princípios básicos de Design OO introduzidos por Robert C. Martin (o mesmo autor do livro Clean Code) [2]. Em [1] Martin fala sobre um dos principais problemas no desenvolvimento de software, o gerenciamento de dependências. Para resolver, ou ao menos diminuir, os problemas de dependências, Martin apresenta uma série de princípios, que são classificados como princípios de classes e princípios de pacotes. O conjunto de princípios de classes são os tão conhecidos princípios SOLID.

SOLID é a sigla formada pela primeira letra dos cinco princípios:

Estes princípios permitem identificar certos problemas no design do sistema. E é neste ponto que surge a ligação com os Padrões de Projeto, pois os padrões de software buscam um design que acaba por seguir os princípios, evitando assim problemas futuros. Nos próximos posts, quando analisarmos os princípios, ficará bem clara a ligação com os padrões.

Se gostou do post compartilhe com seus amigos e colegas, senão, comente o que pode ser melhorado. Possui alguma outra opinião ou alguma informação adicional? Comenta ai! 😀

Referências:

[1] http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod

[2] http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)

[3]  http://cnx.org/content/m17494/latest/

[4] http://www.agilemodeling.com/essays/agileDesign.htm

Deixe um comentário