Recursos especiais neste artigo:
Conteúdo sobre boas práticas.
Os padrões GRASP englobam uma série de princípios baseados em conceitos de Orientação a Objetos. Partindo de análises que procuram definir quais as obrigações dos diferentes tipos de objetos em uma aplicação, estes patterns disponibilizam uma série de recomendações que procuram favorecer a obtenção de sistemas melhor estruturados.
Em
que situação o tema é útil
Partindo de práticas consagradas no
desenvolvimento de sistemas orientados a objetos, os padrões GRASP procuram
fornecer diretrizes para a construção de aplicações bem estruturadas e que
possam ser facilmente adaptáveis diante da necessidade de mudanças. A
consequência direta das recomendações propostas por estes patterns é um código
melhor organizado, de fácil manutenção e ainda, capaz de ser compreendido por
diferentes desenvolvedores sem grandes dificuldades.
Ao se considerar o desenvolvimento de softwares nos primórdios da computação, verifica-se que os primeiros programas se resumiam a um agrupamento de comandos organizados em uma sequência lógica. Era relativamente comum a repetição de trechos de código ao longo de uma aplicação, além da presença de instruções desviando o fluxo de execução em resposta a condições específicas (GOTOs). Este tipo de prática ficou popularmente conhecido como “código spaghetti”, revelando-se como um modelo bastante trabalhoso para a implementação de soluções, principalmente a partir do aumento progressivo na complexidade dos sistemas informatizados.
O advento da programação estruturada foi uma resposta às dificuldades encontradas nessa fase inicial do desenvolvimento de sistemas. A fim de sanar as deficiências até então existentes, foram introduzidos mecanismos como estruturas de decisão e repetição, além de se incentivar o uso de técnicas como a separação de grupos de instruções com alguma relação em sub-rotinas. Tudo isso possibilitou uma melhor organização do código-fonte, facilitando a construção de aplicações robustas e voltadas aos mais variados objetivos.
Logo após a programação estruturada, a próxima transformação de grande impacto na área de software foi o surgimento do conjunto de princípios conhecidos como Orientação a Objetos (OO). Nesse estágio de evolução foi dada uma grande ênfase à representação de elementos do mundo real como objetos, com tais estruturas sendo formadas por um agrupamento de características (atributos/propriedades) e comportamentos (operações/métodos). C++, .NET, PHP, Delphi e Java constituem bons exemplos de linguagens/plataformas que incorporam o conceito de objeto na implementação de aplicações.
Dentre os fatores que contribuíram para popularizar as linguagens baseadas em OO, merece destaque o trabalho efetuado por diversos especialistas de software documentando soluções que ficaram conhecidas como padrões de projeto/design patterns. Uma das mais famosas iniciativas neste sentido foi a publicação no ano de 1994 de 23 patterns, aos quais se convencionou chamar de GoF (BOX 1).
A utilização de patterns em projetos de software tem como grande benefício privilegiar a adoção de boas práticas de programação, contribuindo dessa maneira para uma melhor estruturação das aplicações resultantes. Um pattern nada mais é do que um conjunto de recomendações voltadas à resolução de uma necessidade específica e, por vezes, recorrente na área de desenvolvimento. Isso significa que um padrão não está ligado a uma determinada tecnologia, mas sim que procura fornecer um modelo já testado anteriormente (e com êxito) para um cenário bem definido.
Além dos padrões GoF, vários outros patterns foram catalogados com o decorrer do tempo. Um exemplo disto são os padrões GRASP, os quais contemplam um conjunto de princípios baseados na noção de responsabilidade e que podem servir de guia no desenvolvimento de soluções OO. O objetivo deste artigo é descrever estes patterns e ainda, de que forma os mesmos podem ser úteis durante a construção de aplicações na plataforma .NET.
GoF é a sigla em inglês para o termo “Gang of Four”, um apelido dado ao esforço conjunto de 4 autores (Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides), os quais documentaram 23 padrões de projeto no famoso livro “Design Patterns: Elements of Reusable Object-Oriented Software”. Na época de lançamento desta obra, foram elaborados exemplos de implementação destes patterns nas linguagens C++ e Smalltalk; contudo, a ampla abrangência destes padrões permite que os mesmos sejam empregados ainda hoje, auxiliando desenvolvedores das mais variadas plataformas na tarefa de resolver situações que se repetem com alguma frequência.
Padrões GRASP e o conceito de responsabilidade: uma visão geral
Conforme mencionado anteriormente, os padrões GRASP (abreviatura do inglês “General Responsibility Assignment Software Patterns”) são formados por princípios/padrões que servem de base para a atribuição de responsabilidades em um projeto orientado a objetos. Estes patterns foram publicados originalmente pelo especialista Craig Larman no livro “Applying UML and Patterns – An Introduction to Object-Oriented Analysis and Design and the Unified Process” (obra traduzida em português com o título “Utilizando UML e Padrões – Uma introdução à análise e ao projeto orientados a objetos e ao desenvolvimento iterativo”).
O conceito de responsabilidade deve ser compreendido, basicamente, como as obrigações que um objeto possui quando se leva em conta o seu papel dentro de um determinado contexto. Além disso, é preciso considerar ainda as prováveis colaborações (interações) entre diferentes objetos. A implementação de soluções OO considerando os conceitos de responsabilidade, papéis e colaborações fazem parte de uma abordagem conhecida como Responsibility-Driven Design ou, simplesmente, RDD (BOX 2).
Para se definirem as responsabilidades de um objeto, leva-se em conta o que este elemento irá “fazer” e/ou “saber”.
Responsabilidades relativas ao que um objeto faz incluem:
· A execução de ações que condizem com o papel desempenhado por tal objeto. Geralmente, tais ações serão implementadas sob a forma de métodos em classes implementadas através do .NET Framework;
· A criação de outros objetos dos quais a instância (objeto) inicial depende;
· A coordenação de atividades envolvendo vários outros objetos.
Quanto ao que um objeto sabe, é possível citar:
· O conhecimento a respeito de outros objetos relacionados;
· O conhecimento dos dados privados que o objeto em questão encapsula (expostos no caso da plataforma .NET através das propriedades que compõem uma classe);
· O conhecimento a respeito de coisas que serão calculadas ou, mesmo, derivadas a partir de um elemento principal (uma superclasse, por exemplo).
Os diferentes padrões GRASP não devem ser encarados como soluções pré-definidas para problemas específicos. Na verdade, estes patterns devem ser compreendidos como princípios que auxiliam os desenvolvedores na árdua tarefa de projetar de uma forma bem estrutura aplicações orientadas a objetos.
Ao todo são nove os padrões GRASP, os quais serão discutidos em maiores detalhes nas próximas seções (o nome em português desses patterns está seguido entre parênteses pela identificação equivalente em inglês):
· Criador (Creator);
· Especialista na Informação (Information Expert);
· Baixo Acoplamento (Low Coupling);
· Alta Coesão (High Cohesion);
· Controlador (Controller);
· Polimorfismo (Polymorphism);
· Fabricação/Invenção Pura (Pure Fabrication);
· Indireção (Indirection);
· Variações Protegidas (Protected Variations).
Responsibility-Driven Design é uma técnica de desenvolvimento OO proposta no início dos anos 1990, como resultado do trabalho dos pesquisadores Rebecca Wirfs-Brock e Brian Wilkerson. Este paradigma está fundamentado nas ideias de responsabilidade, papéis e colaborações.
...Confira outros conteúdos:
Teste unitário com NUnit
Como migrar projetos do ASP.NET MVC...
Crie relatórios com o Stimulsoft...
Black November
Desconto exclusivo para as primeiras 200 matrículas!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 54,90
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 54,90 /mês
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.