VinBR

Reuso de Software 12/03/2012

Mar 14th, 2012
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.39 KB | None | 0 0
  1.  
  2. # # # # # # # # # # # # #
  3. # Reuso de Software #
  4. # Prof Eduardo Figueiredo #
  5. # notasdogarcia.blog.com #
  6. # # # # # # # # # # # # #
  7.  
  8. POO e Padrões de Projetos:
  9.  
  10. Programação Orientada a Objetos:
  11. - Reuso de classes
  12. - Bibliotecas
  13. - Frameworks
  14.  
  15. // O professor mostrou como uma mesma classe pessoa, pode ser reutilizada
  16. // em vários casos diferentes: aluno/professor, funcionário/cliente, etc.
  17.  
  18. Bibliotecas possuem serviços frequentemente necessários, como estruturas de dados e etc.
  19.  
  20. Qual a vantagem dessas coisas?
  21. - Produtividade, voce não precisa re-inventar a roda.
  22. - Confiabilidade, essas idéias já foram testadas por muitos usuários e por isso deve ser mais seguro.
  23.  
  24. Desvantagens:
  25. - Dificil fazer adaptações para atender detalhes específicos do sistema, ex: uma otimização para um caso especifico.
  26. - Gasta-se tempo e esforço para aprender e/ou encontrar uma funcionalidade desejada.
  27.  
  28. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  29.  
  30. Frameworks:
  31. Frameworks são um conjunto de classes e interfaces que formam uma estrutura genérica de um programa.
  32.  
  33. Framworks normalmente não estão completos faltam os "acabamentos" por assim dizer.
  34.  
  35. Assim partes mais especificas do sistema precisam ser implementadas à mão.
  36.  
  37. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  38.  
  39. Características:
  40. - Frameworks são estensíveis, ou seja voce pode e deve criar classes para estender as do framework.
  41. - O fluxo de controle normalmente é pre-definido pelo framework e não pode ser alterado.
  42. - O código do framework não deve ser editado, deve apenas ser extendido.
  43.  
  44. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  45.  
  46. Frozen Spot / Hot Spot:
  47.  
  48. Os Frozen Spots são as partes do framework que não devem ser mechidas,
  49. ou seja as partes que já estão prontas.
  50.  
  51. Os Hot Spots indicam os pontos que devem ser estendidos.
  52.  
  53. // Um exemplo de analogia usada para frameworks é a de uma tomada conectada à uma classe maior.
  54. // Cada nova tomada traz consigo uma nova utilidade ao framework, ou uma nova função especifica.
  55.  
  56. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  57.  
  58. Principais problemas:
  59.  
  60. Frameworks são geralmente grandes e complexos levando um tempo grande para ser compreendido.
  61.  
  62. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  63.  
  64. Padrões de Projeto:
  65.  
  66. Um padrão é uma descrição do problema e a essência de sua solução.
  67. Ou seja é uma dica de uma solução comum e eficiente
  68. que é útil por ser uma linguagem comum com outros programadores.
  69.  
  70. Existe um livro sobre o assunto com o nome "padrões de projeto"
  71. o livro fala sobre os padrões mais conhecidos que são chamados de padrões da gangue dos 4 (gang-of-four (GoF) (os 4 autores).
  72.  
  73. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  74.  
  75. No livro GoF existem 23 padrões de projetos.
  76.  
  77. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  78.  
  79. Classificações:
  80. - De criação
  81. - Estruturais
  82. - Comportamentais
  83.  
  84. ou
  85. - outras classificações.
  86.  
  87. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  88.  
  89. Documentação de um Padrão:
  90. - Nome e clasificação
  91. - Qual o problema em questão
  92. - Como solucionar
  93. - Consequências dessa solução
  94.  
  95. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  96.  
  97. No livro existem 5 tipos de padrões de criação falaremos de 2:
  98. - Factory Method
  99. - Singleton
  100.  
  101. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  102.  
  103. Nome:
  104. Factory Method:
  105.  
  106. Descrição do Problema:
  107. É quando voce deseja criar uma classe mas não sabe qual o tipo dos dados que serão usados,
  108. assim voce cria a classe de forma abstrada, e deixa o tipo especifico para as subclasses.
  109.  
  110. Descrição da solução:
  111. Existe um produto abstrato, e uma classe que cria esse produto que também é abstrata.
  112. Na implementação a classe concreta que estende a classe abstrata deve retornar um tipo concreto que estende o tipo abstrado.
  113.  
  114. Consequencias:
  115. Permite que o programa fique mais genérico.
  116. Voce pode usar os objetos nas superclasses sem fixar qual o tipo especifico.
  117.  
  118. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  119.  
  120. Nome:
  121. Padrão singleton
  122.  
  123. Descrição do Problema:
  124. É quando precisa-se por qualquer motivo ter apenas uma instancia de uma classe.
  125.  
  126. Descrição da solução:
  127. O método de criação é publico e estatico, e só cria um objeto se o antigo não existir.
  128. Ele garante que esse objeto só existe uma vez porque ele guarda um ponteiro para esse objeto.
  129. Não podem haver outros locais onde o objeto é criado, apenas atraves desse método estatico.
  130. O construtor da classe deve ser privado, e ele só pode ser chamado por essa função estatica.
  131.  
  132. Consequencias:
  133. Fácil acesso e gerência de recursos compartilhados como variáveis globais.
  134.  
  135. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  136.  
  137. Nome:
  138. Padrão Adapter
  139.  
  140. Problema:
  141. As vezes voce quer re-usar uma biblioteca que utiliza uma aplicação.
  142. Porém a biblioteca não aceita o tipo da aplicação.
  143. E voce não quer refazer nem um dos dois do 0.
  144.  
  145. Solução:
  146. Crie uma classe Adapter que é do tipo aceito pela biblioteca.
  147. Essa classe deve usar os métodos da aplicação para criar métodos no formato da biblioteca.
  148. Assim a biblioteca pode usar a classe Adapter que possuí as funcionalidades desejadas
  149. sem precisar re-implentar nada, só re-utilizando o que já existia.
  150.  
  151. Consequencias:
  152. Tempo de implementação é poupado e voce pode re-usar coisas que a principio não seriam compativeis.
  153.  
  154. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  155.  
  156. Nome:
  157. Padrão composite
  158.  
  159. Problema:
  160. Voce tem várias estruturas simples e deseja criar estruturas complexas a partir disso.
  161. Exemplo voce tem celulas e deseja criar uma tabela de celulas.
  162.  
  163. Solução:
  164. Crie uma classe Composite que extenda uma classe Component
  165. A classe composite deve aceitar vários objetos e guardar dados sobre eles, de forma que criem um novo objeto.
  166. Ex: seja um composite que forma objetos, e ele aceita elementos linha e elementos circulo.
  167. Para descrever uma casa ele precisa de saber que ele tem um certo numero de linhas em certas posições etc.
  168.  
  169. Consequências:
  170. Objetos primitivos podem ser usados
  171.  
  172. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  173.  
  174. Nome:
  175. Decorator:
  176.  
  177. Problema:
  178. Adicionar novas responsabilidades/funcionalidades à uma classe já instanciada.
  179.  
  180. Solução:
  181. O decorator é mais complexo, voce tem vários objetos que tem como base uma interface com uma função "operação()".
  182. Cada classe que extende esse objeto tem uma função "operação()" e guarda um ponteiro para a próxima classe.
  183. Cada classe tem uma operação() diferente e faz uma coisinha a mais (coisas que não se atrapalhem)
  184. A cada chamada da operação da primeira classe ela chama a operação da segunda, e vai assim ate chegar em uma última.
  185. Na função operação() da última classe o ponteiro dela é nulo e assim ela não chama mais ninguém e retorna.
  186.  
  187. Para quem não percebeu isso parece uma linha de montagem de uma fábrica, onde voce coloca o produto no inicio da linha,
  188. e ele vai caminhando de classe em classe onde cada classe adiciona um item ao produto final.
  189.  
  190. // Cada decorador concreto extende o decorador abstrato que possui a função "operação()"
  191.  
  192. Consequencia:
  193. Ganha maior flexibilidade.
  194.  
  195. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  196.  
  197. Padrões comportamentais: Strategy, observer, existem vários outros.
  198.  
  199. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  200.  
  201. Nome:
  202. Strategy
  203.  
  204. Problema:
  205. Voce tem vários métodos de solução para um mesmo problema, mas em alguns programa pode ser melhor usar um metodo a outro.
  206. Então é interessante manter a flexibilidade, já que voce não quer re-implementar a classe a cada vez.
  207.  
  208. Solução:
  209. Voce coloca uma interface base de mesmo nome, com vários filhos onde cada filho tem uma implementação diferente.
  210. A aplicação usa a interface sem saber bem qual a implementação especifica, mas o produto final é o mesmo.
  211. Isso permite voce usar a implementação mais eficiente em cada caso com pouca modificação.
  212.  
  213. Consequencias:
  214. Permite utilizar diferentes algoritimos sem usar condicionais.
  215.  
  216. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  217.  
  218. // Fim da aula.
Advertisement
Add Comment
Please, Sign In to add comment