mostrar como objetos estão
interligados e mensagens trocadas
sem preocupação de tempo
Diagrama Máquina de Estado
Informar mudança de Estado
a partir de uma instancia
Diagrama de Atividades
Comportamento de objetos
entre vários casos de uso
Diagrama de Interação
Comportamentos de objetos
entr eum uníco caso de uso
Diagrama de Componentes
Demonstrar componentes que
fazer parte do sistema e seus
relacionamentos
Diagrama de Implantação
Necessidades físicas do sistema
Diagrama de Pacotes
Decompõe o sistema geral em
subsistemas que o compõe
Diagrama de Tempo
Indica mudança de estado do objeto e
o tempo de resposta da mudança
Remodelagem
Reengenharia
Recriar um
sistema já
projetado
Engenharia Reversa
Entender um código
já construido e
decompor o mesmo
Linguagens
C++
Java
Problemas no desenvolvimento
7 Pecados capitais
Pressa
Qualidade em segundo plano
Apatia
não se importar em
resolver problemas
conhecidos
Mente estreita
recusa em usar
soluções
reconhecidamente
efetivas
Preguiça
caminho mais
"facil" em vez de
refletir sobre a
decisão
Avareza
Detalhes excessivos,
maior complexidade
Ignorância
falha em buscar
compreensão
Orgulho
investimento em
desenvolver soluções que
poderiam ser aproveitadas
de outras fontes
Coesão
Alta coesão
Classes se
relacionam,
sistema unico
Baixa coesão
Classes se relacionam,
mas há divisões em
subsistemas
Acoplamento
Alto acoplamento
Relacionamentos demais entre as classes
Baixo acoplamento
Muito pouco relacionamento entre as classes
Problema durante o desenvolvimento
Contexto e forças
Solução Padrão
Padrões de Projeto
Interface
Adapter
Ajustar a interface de uma
classe à interface que o
cliente espera
Façade
Oferecer uma interface única
para uma coleção de classes
Composite
Definir uma interface que se
aplica a objetos individuais ou a
grupos de objetos
Bridge
Desacoplar uma abstração de sua
implementação de forma que as duas
possam variar independentemente
Responsabilidade
Singleton
Centralizar responsabilidade em
uma única instância da classe
Observer
Desacoplar um objeto do conhecimento de
quais outros objetos dependem dele
Mediator
Centralizar responsabilidade
em uma classe que
supervisiona como um
conjunto de outros objetos
interagem
Proxy
Deixar um objeto atuar
em nome de outro objeto
Chain of responsibility
Permitir que uma requisição passe
por uma sequência de objetos até
encontrar um que possa atendê-la
Flyweight
Centralizar responsabilidade em
pequenos objetos compartilhados
Construção
Builder
Obter gradualmente a
informação necessária para
construir um objeto
Factory Method
Adiar a decisão sobre qual
classe instanciar
Abstract Factory
Construir uma família de objetos
Prototype
Construir um objeto a partir
de exemplo existente
Memento
Reconstruir um objeto a partir de
informação de estado anteriormente salva
Comportamento
Command
Ecapsular a invocação
de um método em um
objeto
Template Method
Implementar um algoritmo em um
método, deixando a definição de
alguns passos do algoritmo para
subclasses que podem refiná-lo
State
Distribuir uma operação de modo
que cada classe represente um
estado diferente
Interpreter
Distribuir uma operação de modo que
cada implementação seja aplicável a um
tipo diferente de composição
Strategy
Encapsular uma operação,
tornando as implementações
intercabiáveis
Extensão
Decorator
Acrescentar responsabilidades
adicionais a um objeto dinamicamente
Iterator
Oferecer um modo de acessar uma
coleção de instâncias de uma classe
Visitor
Acrescentar novas operações a
uma classe sem alterar a classe
Solução anti padrão
Anti padrões de Projeto
Arquitetura
Stovepipe Enterprise
Sistemas múltiplos em uma
empresa são desenvolvidos
independentemente em cada nível
Jumble
Elementos de design horizontal (comum em
todas aplicações) e vertical (dependen de
implementações específicas são misturados
Vendor Lock-In
custo de mudar de fornecedor do
produto ao qual o usuário é
dependente para outro é muito alto
Architecture By Implication
falta de especificação (documentação) na arquitetura de
um software em desenvolvimento, devido a experiências
anteriores em construçãod e sistemas parecidos
Design by Committee
Swiss army knife
tentativa de prover uma classe para diversas necessidades, o
designer adiciona um grande numero de assinaturas de interface
e, a classe de interface acaba ficando extremamente complexa
Reinventing the wheel
necessidade de contornar restrições técnicas, incompatibilidades e
licenciamento de softwares presentes em partes ou módulos de terceiros.
ao invés de pegar uma solução existente e adequada, adota-se uma solução
customizada com desempenho pior que a existente
Desenvolvimento
Functional Decomposition
Possui uma classe que funciona como uma rotina Main, a partir
dela várias outras sub-rotinas são chamadas e, para cada
sub-rotina, uma classe é implementada, cuja classe serve apenas
para efetuar a ação
Poltergeist
Boat Anchor
parte do código de um sistema ou uma
peça de hardware que não tem nenhuma
utilidade no projeto atual
Golden Hammer
Ferramenta específica que é dominada pela equipe
e é utilizada de forma generalista (bom pra tudo)
Dead End
Quando tenta incorporar um módulo já pronto
porém com incompatibilidade de suporte
Spaghetti Code
programa ou sistema que contém muito pouca estrutura de software. Codificação
compromete a estrutura de suporte lógico (resultado do código antigo que está sendo
modificado ao longo dos anos)
Walking through a minefield
prática de lançar um sistema sem que seus erros sejam
avaliados corretamente para ganhar tempo
Copy and Paste Programming
É a cópia e modificação de um código existente ao
invés de criar solução genéricas (identificado pela
presença de vários segmentos de código
semelhantes intercalados ao longo do projeto)
Gerencial
Analysis Paralysis
Caracterizado por revisões constantes e construção
de modelos excessivamente detalhados. Torna o
sistema difícil de desenvolver, documentar e testar
Death By Planning
Falta de uma abordagem pragmática (objetiva) para o
planejamento, cronogramas e captura do processo
Corncob
pessoa difícil que causa problemas através de um
comportamento destrutivo em relação a equipe ou
projeto (alguém discorda dos objetivos ou
processos-chave)