fisica), Strategy (descreve como implementar familias de algoritmos intercambiaveis) e State (representa cada estado de uma entidade como um objeto) sao bastante uteis, como exemplo.A granulidade de objetos:Objetos podem variar tremendamente em tamanho e numero. Podem representar qualquer abstracao. Os padroes de projeto auxiliam no tratamento da granularidade. Tem-se como exemplo:Facade: Descreve como representar subsistemas completos como objetos;Flyweight: Descreve como suportar enormes quantidades de objetos nos niveis de granularidade mais finos;Abstract Factory: Fornecem objetos cujas unicas responsabilidades sao criar outros objetos;Command: Fornecem objetos cujas unicas responsabilidades sao implementar uma solicitacao em outro objeto ou grupo de objetos.Especificacao de Interfaces: Um bom conceito O.O para se programar utilizando padroes de projeto e: "Programa para interfaces, nunca para uma implementacao".Uma interface e o conjunto de assinaturas declaradas por um objeto, sendo que cada operacao declarada (Assinatura) especifica o nome da operacao, os objetos que ela aceita como parametros e o valor retornado por ela.Um tipo e um nome usado para denotar uma interface especifica. Quando um objeto tem um tipo Janela, significa que ele aceita todas as solicitacoes para as operacoes definidas na interface chamada Janela.As interfaces sao fundamentais para a programacao orientada a objetos. Objetos devem ser conhecidos somente por suas interfaces e, quando uma mensagem e enviada a um objeto, a operacao especifica que sera executada depende da mensagem e do objeto receptor. Na pratica, significa que diferentes objetos que suportam solicitacoes identicas, podem possuir diferentes implementacoes para atender estas solicitacoes, e o chamado Polimorfismo entrando em cena!A associacao em tempo de execucao de uma solicitacao a um objeto e a uma das suas operacoes e conhecida como ligacao dinamica (dynamic binding). Essa ligacao auxilia o polimorfismo que por sua vez, simplifica as definicoes dos clientes, desacopla objetos entre si e permite a eles variarem seus inter-relacionamentos em tempo de execucao. Os padroes de projeto auxiliam o uso do polimorfismo bem como o uso de interfaces, alem de ajudarem a definir as interfaces pela identificacao de seus elementos-chave e pelos tipos de dados que sao enviados atraves das assinaturas das operaoes contidas nas mesmas.Classe do objeto (implementacao) x Tipo do objeto (interface): um objeto pode ter muitos tipos, e objetos de diferentes classes podem ter o mesmo tipo;Heranca de classe x Heranca de interface: a heranca de classe define a implementacao de um objeto em termos da implementacao de outro objeto (e um mecanismo para compartilhamento de codigo e de representacao), ja a heranca de interface descreve quando um objeto pode ser usado no lugar de outro.Dado todo este contexto, uma outra dica O.O importante e: nao declarar variaveis como instancias de classes concretas especificas. Isso da maior flexibilidade ao codigo e ajudara no polimorfismo.Heranca e Composicao:As vantagens de se utilizar heranca nos seus projetos O.O. basicamente sao: simplicidade e rapidez na execucao (definida em tempo de compilacao) e que a mesma permite alterar com facilidade a implementacao herdada (reuso). Ja entre as desvantagens, podemos citar: a heranca nao permite alterar a implementacao herdada em tempo de execucao e expoe para as classes descendentes, os detalhes da implementacao, ferindo assim, o principio