Modelos de design para iniciantes
Se você já escreveu programas para produtos ou aplicativos de software, grandes/pequenos, é mais provável que você tenha usado muitos Design Patterns… embora seja possível que eles não sejam um dos padrões de design mais usados/padrão.
Mas sim, há uma diferença óbvia entre implementar um padrão de projeto e “usar” um padrão de projeto… de qualquer forma, a pessoa que trabalha com padrões de projeto entende ou entenderá facilmente.
A questão é que os padrões de projeto não são novidade para os programadores.
Neste artigo abaixo, estou tentando explicar os padrões de projeto, em seus fundamentos, e estudaremos detalhes de vários padrões, exemplos, etc. em outro artigo.
O que é um padrão de projeto?
Começar…
Acho que a melhor maneira de começar a entender os padrões de design é entender os padrões não técnicos que seguimos consciente / inconscientemente em nossas vidas cotidianas.
Por exemplo, vamos pegar muitos currículos enviados para uma vaga de emprego. O currículo de todos não parece o mesmo… embora todos tendam a fazer a mesma coisa, ou seja, dizer ao leitor no que eles são habilidosos ou como ele pode se adequar ao trabalho.
A maioria dos que enviam currículos para empregos sabe que precisam enviar um currículo com um determinado conjunto de informações em um documento do Word formatado.
Isso… é um padrão, que todo mundo envia um currículo com um determinado conjunto de informações expressas nele.
Se você quiser… chame-o de Modelos em vez de Padrões. Modelos de Projeto.
Existem muitas dessas coisas na vida real que são padrões. Algumas pessoas gostam dos exemplos abaixo:
Todos os chefs do mundo cozinham pizza ou batatas fritas da mesma maneira. Embora eles possam cobri-lo / saboreá-lo de maneira diferente. Isso é um padrão.
O design de cada carro segue um padrão de design básico, quatro rodas, volante, o sistema central de acionamento como acelerador-quebra-embreagem, etc.
Todas as coisas construídas / produzidas repetidamente, inevitavelmente seguirão um padrão em seu design… sejam carros, pizzas, caixas eletrônicos, o que quer que seja… até escova de dentes.
Projetos que quase se tornaram uma maneira padrão de codificar alguma lógica/mecanismo/técnica em software, portanto, são conhecidos como – e, portanto – estudados como Padrões de Projeto de Software.
Por que um padrão de projeto é importante?
Basicamente por dois motivos:
- Para seguir um padrão
- Para acelerar o desenvolvimento
Vou explicar em detalhes.
Em primeiro lugar, vemos por que é interessante aderir a um padrão padrão.
Vamos pegar a lista de exemplos de currículos que discutimos antes.
Pode haver um ou dois candidatos que enviam seus pedidos de emprego por e-mail sem formatação adequada, sem anexos ao e-mail etc., esses um ou dois candidatos não estão seguindo o padrão e provavelmente NÃO acabarão com o trabalho…. porque? Porque eles estão se desviando de um padrão bem estabelecido, que pode não ser apreciado pelas pessoas que selecionam currículos para o trabalho.
Não há ninguém que se desvie do padrão e se torne “legal”? Isso não é Inovação?
Sim, há momentos em que um currículo apresentado de forma muito diferente consegue a vaga por ser diferente dos demais. Normalmente, ouço falar de web designers que conseguiram empregos importantes porque compilaram e apresentaram um filme em CD de seu trabalho, ou criaram um personagem de animação explicando seu trabalho, colocaram em seu blog e coisas assim.
Mas.. isso é experimentação (A inovação vem de experimentos bem-sucedidos).
Na maioria das vezes, no desenvolvimento de software, você não pode se dar ao luxo de experimentar, devido à pressão do cronograma, expectativas, etc., mas sim, às vezes, alguns projetos interessantes permitem alguma experimentação.
Em software, não podemos fazer coisas básicas como um Depósito Bancário… de 101 maneiras… haverá apenas algumas maneiras de processar um Depósito Bancário… portanto, faz sentido seguir um Padrão estabelecido e testado.
Além disso, a maioria dos padrões de design tem variações… algumas das variações são tão populares que as variações também serão um novo tipo padrão do padrão.
Atualmente, espera-se que os projetos de software (pelo menos implicitamente) sigam um design já estabelecido de um produto / software similar no mercado.
É aqui que aderir a um estilo padrão de codificação ou padrão de design ajuda o desenvolvimento de software… desenvolvimento de fixação, removendo a sobrecarga de se preocupar com uma nova implementação não testada, etc.,
Tempo de desenvolvimento de fixação
Seguir um padrão de design padrão também tem a vantagem de se comunicar facilmente através da árvore/hierarquia de arquitetos de software, líderes de módulo, líderes de equipe, desenvolvedores etc., sobre “como” algo precisa ser desenvolvido, e não apenas “o que” deve ser desenvolvido.
Às vezes, até ajuda as equipes de teste, porque os testadores sabem por experiência que o código que segue um determinado padrão de design provavelmente pode ser testado de uma maneira específica com um conjunto de ferramentas de teste em um determinado período de tempo, e esses designs conhecidos podem não ter algumas falhas ou ter algumas falhas ‘conhecidas’.
O uso de Design Patterns não tira um toque pessoal?
Não. Em primeiro lugar, porque não estamos dizendo que você segue um padrão de design e nada mais acontece. A maioria das implementações de projeto compartilha apenas requisitos básicos com outros projetos e provavelmente terá desvios. Construir esses desvios exigirá flexibilizar e estender os padrões padrão usados em uma implementação.
É como fazer a pizza da maneira padrão, depois aromatizá-la / apresentá-la a diferentes requisitos, como uma pizza inteira, uma torta cortada ou qualquer outra coisa.
Ao entender a importância dos padrões de projeto, uma coisa é muito importante.importante :
Design Patterns não são qualquer tecnologia ou estrutura que uma determinada empresa ou linguagem de programação nos impõe. Isso significa que é como um conceito aberto.
Todos os padrões de design padrão ou populares, na verdade, são amplamente extensíveis.
Ou como você acha que um padrão de design padrão se encaixaria em um projeto em Nova Jersey para uma empresa e também em Bangalore para uma empresa diferente e um tipo diferente de projeto.
Isso nos leva a ” A maioria dos padrões de projeto são genéricos “… o que significa que eles nem sempre são usados para construir o mesmo tipo de software. Você pode não ouvir coisas como “padrão de design de software bancário” ou “padrão de design de software de rede social” usado em discussões comuns… mas apenas “Padrões de design”.
Quem deve se preocupar com os padrões de projeto?
- Assim como um bom arquiteto de edifícios desenvolve suas habilidades de projetar edifícios, estudando a arquitetura e o design de vários edifícios e formas ao longo de sua vida, um arquiteto de software deve estudar e visualizar como diferentes sistemas de software / tecnologia em todo o mundo são projetados ou arquitetado.
- E assim como os construtores de um edifício devem conhecer as diferentes formas de concretizar um projeto de edificação, seja por sua própria experiência ou pelo entendimento do Arquiteto do Edifício.
Os desenvolvedores/programadores de software devem entender os padrões básicos de design de software e seu código de implementação… por conta própria ou do arquiteto de software que instrui a equipe a desenvolvê-lo seguindo um padrão específico.
Padrões básicos de código
Nas linhas de abertura deste artigo, eu disse que qualquer programador teria usado padrões de projeto. Aqui estão alguns exemplos muito básicos de código seguindo um padrão.
-
A seguir está um padrão básico de projeto de filtro de interceptação.
-
Esconder Copiar Código
-
switch (condition){ case Value1: case Value2: default: }
-
Gatilhos de eventos, manipuladores de eventos… vêm sob o padrão de design Subject-Observer básico. Discutiremos os padrões de cada padrão, variações populares, com exemplos… em breve.
-
Se você usou algum tipo de coleção, como Arraylist em C#, e iterou pela matriz, então você usou um padrão de design Iterator básico .
-
O código abaixo é um exemplo de um padrão básico de tratamento de exceções/ cadeia de responsabilidade .
-
Esconder Copiar Código
-
try{ }catch(Exception ex){ } finally{ }
Diferentes áreas de padrões de design
Existem diferentes terminologias em software além de Design Patterns.. algumas delas frequentemente relacionadas aos Design patterns que discutimos até agora.. e algumas delas totalmente não relacionadas.
O que discutimos até agora é às vezes chamado de ” Padrões de Projeto de Implementação “.
Existem outros, como padrões de arquitetura, padrões de estrutura, padrões de linguagem (principalmente chamados de construtores de linguagem).
Eles são padrões colocados em diferentes níveis… como os padrões de linguagem são padrões implementados como parte de linguagens de programação como C# / Java, como os recursos / construções da linguagem.. alguns deles já vimos.
Todos os exemplos acima de sujeito-observador, filtro de interceptação, etc., são absorvidos como construções de linguagem em todas as linguagens de programação de alto nível populares que vieram depois de C.
Padrões de arquitetura são aqueles modelos padrão de arquitetura de software, geralmente referindo-se a diferentes métodos de colocação ou ligação de módulos ou camadas ou camadas, formando o aplicativo completo.
Isso não tem nenhuma relação com os padrões de design no sentido de codificar/programar isso… mas eles compartilham as mesmas respostas para Por quê/O que é discutido neste artigo.
Os padrões de estrutura também não estão relacionados à nossa discussão sobre padrões de projeto. Quando estruturas como .NET implementam meios especiais para registrar erros ou rastrear rotas de execução de código facilmente por meio de métodos ou objetos internos da estrutura, esses mecanismos são referidos como padrões de estrutura.
Alguns exemplos no .NET Framework incluem o recurso stackTrace, o recurso de atributo de classe com colchetes [] sobre as definições de classe/método etc. Ao usar esses recursos, estamos codificando com os padrões internos do Framework.
Espero que este artigo ajude a fornecer uma visão geral dos padrões de design e terminologias relacionadas.
Até agora, discutimos apenas o que são os padrões e o quanto eles são importantes… mas não discutimos o que são os padrões padrão em si.
Licença
Este artigo, juntamente com qualquer código-fonte e arquivos associados, está licenciado sob a licença The Code Project Open License (CPOL).