Padrões de projeto

222
1 Padrões de projeto M.Sc. Sílvio Bacalá Jr.

description

Padrões de projeto. M.Sc. Sílvio Bacalá Jr. Design Orientado Objeto. Encapsulamento Herança Polimorfismo Design Patterns. Responsabilidades. Booch e Rumbaugh “Responsabilidade é um contrato ou obrigação de um tipo ou classe.” Dois tipos de responsabilidades dos objetos: - PowerPoint PPT Presentation

Transcript of Padrões de projeto

Page 1: Padrões de projeto

1

Padrões de projeto

M.Sc. Sílvio Bacalá Jr.

Page 2: Padrões de projeto

2

Design Orientado Objeto EncapsulamentoHerançaPolimorfismoDesign Patterns

Page 3: Padrões de projeto

3

Responsabilidades

Booch e Rumbaugh “Responsabilidade é um contrato ou obrigação de um tipo ou classe.”

Dois tipos de responsabilidades dos objetos: De conhecimento (knowing): sobre dados privativos e

encapsulados; sobre objetos relacionados; sobre coisas que pode calcular ou derivar.

De realização (doing): fazer alguma coisa em si mesmo; iniciar uma ação em outro objeto; controlar e coordenar atividades em outros objetos.

Responsabilidades são atribuídas aos objetos durante o design

Page 4: Padrões de projeto

4

Responsabilidades e Métodos

A tradução de responsabilidades em classes e métodos depende da granularidade da responsabilidade

Métodos são implementados para cumprir responsabilidades Uma responsabilidade pode ser cumprida por um único

método ou uma coleção de métodos trabalhando em conjunto

Responsabilidades do tipo knowing geralmente são inferidas a partir do modelo conceitual (são os atributos e relacionamentos)

Page 5: Padrões de projeto

5

Responsabilidades eDiagramas de Interação

Diagramas de interação mostram escolhas ao atribuir responsabilidades a objetos

No diagrama de colaboração ao lado objetos Order têm a responsabilidade de se prepararem: método prepare()

O cumprimento dessa responsabilidade requer colaboração com objetos Order Line e Stock Item

Page 6: Padrões de projeto

6

O que é um padrão?

Maneira testada ou documentada de alcançar um objetivo qualquer Padrões são comuns em várias áreas da engenharia

Design Patterns, ou Padrões de Projeto Padrões para alcançar objetivos na engenharia de

software usando classes e métodos em linguagens orientadas a objeto

Inspirado em "A Pattern Language" de Christopher Alexander, sobre padrões de arquitetura de cidades, casas e prédios

Page 7: Padrões de projeto

7

O que é um padrão?

Padrões são um repertório de soluções e princípios que ajudam os desenvolvedores a criar software e que são codificados em um formato estruturado consistindo de Nome Problema que soluciona Solução do problema

O objetivo dos padrões é codificar conhecimento (knowing) existente de uma forma que possa ser reaplicado em contextos diferentes

Page 8: Padrões de projeto

8

Page 9: Padrões de projeto

9

Page 10: Padrões de projeto

10

Design Patterns• Cada padrão descreve

• um problema que ocorre repetidamente no nosso dia-a-dia, • uma solução para este problema, de forma que se pode usar a solução um milhão de vezes sem

faze-la igual uma única vez

• Design patterns suportam reuso orientado a objeto em alto nível de abstração

• Design patterns provêem um “framework” que guia as restrições de projetos orientados a objetos.

Por que usar Design Patterns?

Page 11: Padrões de projeto

11

Por que aprender padrões?

Aprender com a experiência dos outros Identificar problemas comuns em engenharia de software e

utilizar soluções testadas e bem documentadas Utilizar soluções que têm um nome: facilita a

comunicação, compreensão e documentação Aprender a programar bem com orientação a objetos

Os 23 padrões de projeto "clássicos" utilizam as melhores práticas em OO para atingir os resultados desejados

Desenvolver software de melhor qualidade Os padrões utilizam eficientemente polimorfismo, herança,

modularidade, composição, abstração para construir código reutilizável, eficiente, de alta coesão e baixo acoplamento

Page 12: Padrões de projeto

12

Por que aprender padrões?

Vocabulário comum Faz o sistema ficar menos complexo ao permitir que se fale

em um nível mais alto de abstração Ajuda na documentação e na aprendizagem

Conhecendo os padrões de projeto torna mais fácil a compreensão de sistemas existentes

"As pessoas que estão aprendendo POO freqüentemente reclamam que os sistemas com os quais trabalham usam herança de forma complexa e que é difícil de seguir o fluxo de controle. Geralmente a causa disto é que eles não entendem os padrões do sistema" [GoF]

Aprender os padrões ajudam um novato a agir mais como um especialista

Page 13: Padrões de projeto

13

Arquitetura vs. Design Patterns

Framework de alto nível para estrutura uma aplicação. Ex: “client-servidor usando RPC” “organização em 3 camadas” “arquitetura distribuída baseada em SOA”

Define o sistema em termos de componentes computacionais e suas iterações.

Arquitetura

Design Patterns

Mais baixo nível que arquitetura Objetos/Interfaces Reusáveis que resolvem problemas internos da

aplicação. Exs: Como posso tornar o sub-sistema X desacoplado do subsistema Y?

Page 14: Padrões de projeto

14

Elementos de um padrão

Nome Problema

Quando aplicar o padrão, em que condições?

Solução Descrição abstrata de um problema e como usar os

elementos disponíveis (classes e objetos) para solucioná-lo

Conseqüências Custos e benefícios de se aplicar o padrão Impacto na flexibilidade, extensibilidade, portabilidade e

eficiência do sistema

Page 15: Padrões de projeto

15

Padrões GoF: Formas de classificação

Há várias formas de classificar os padrões. Gamma et al [2] os classifica de duas formas Por propósito:

1. criação de classes e objetos, 2. alteração da estrutura de um programa, 3. controle do seu comportamento

Por escopo: classe ou objeto Metsker [1] os classifica em 5 grupos, por intenção (problema a

ser solucionado): 1. (1) oferecer uma interface, 2. (2) atribuir uma responsabilidade, 3. (3) realizar a construção de classes ou objetos4. (4) controlar formas de operação5. (5) implementar uma extensão para a aplicação Padrões

Page 16: Padrões de projeto

16

Introdução: interfaces

Interface: coleção de métodos e dados que uma classe permite que objetos de outras classes acessem

Implementação: código dentro dos métodos Interface Java: componente da linguagem que

representa apenas a interface de um objeto Exigem que classe que implementa a interface ofereça

implementação para seus métodos Não garante que métodos terão implementação que faça

efetivamente alguma coisa (chaves vazias): stubs.

Page 17: Padrões de projeto

17

Design Patterns SpaceClassificação dos 23 padrões segundo GoF

Criação de objetos

Relacionamento entre objetos

Comunicação entre objetos

Page 18: Padrões de projeto

18

Classificação dos padrões GoFsegundo Metsker

Page 19: Padrões de projeto

19

Page 20: Padrões de projeto

20

Page 21: Padrões de projeto

21

Page 22: Padrões de projeto

22

Page 23: Padrões de projeto

23

Page 24: Padrões de projeto

24

Page 25: Padrões de projeto

25

Page 26: Padrões de projeto

26

Page 27: Padrões de projeto

27

Page 28: Padrões de projeto

28

Page 29: Padrões de projeto

29

Page 30: Padrões de projeto

30

Page 31: Padrões de projeto

31

Page 32: Padrões de projeto

32

Page 33: Padrões de projeto

33

Page 34: Padrões de projeto

34

Page 35: Padrões de projeto

35

Page 36: Padrões de projeto

36

Page 37: Padrões de projeto

37

Page 38: Padrões de projeto

38

Page 39: Padrões de projeto

39

Page 40: Padrões de projeto

40

Page 41: Padrões de projeto

41

Page 42: Padrões de projeto

42

Page 43: Padrões de projeto

43

Page 44: Padrões de projeto

44

Page 45: Padrões de projeto

45

Page 46: Padrões de projeto

46

Page 47: Padrões de projeto

47

Page 48: Padrões de projeto

48

Page 49: Padrões de projeto

49

Page 50: Padrões de projeto

50

Page 51: Padrões de projeto

51

Page 52: Padrões de projeto

52

Page 53: Padrões de projeto

53

Page 54: Padrões de projeto

54

Page 55: Padrões de projeto

55

Page 56: Padrões de projeto

56

Page 57: Padrões de projeto

57

Page 58: Padrões de projeto

58

Page 59: Padrões de projeto

59

Page 60: Padrões de projeto

60

Page 61: Padrões de projeto

61

Page 62: Padrões de projeto

62

Page 63: Padrões de projeto

63

Page 64: Padrões de projeto

64

Page 65: Padrões de projeto

65

Page 66: Padrões de projeto

66

Page 67: Padrões de projeto

67

Page 68: Padrões de projeto

68

Page 69: Padrões de projeto

69

Page 70: Padrões de projeto

70

Page 71: Padrões de projeto

71

Page 72: Padrões de projeto

72

Page 73: Padrões de projeto

73

Page 74: Padrões de projeto

74

Page 75: Padrões de projeto

75

Page 76: Padrões de projeto

76

Page 77: Padrões de projeto

77

Page 78: Padrões de projeto

78

Page 79: Padrões de projeto

79

Page 80: Padrões de projeto

80

Page 81: Padrões de projeto

81

Page 82: Padrões de projeto

82

Page 83: Padrões de projeto

83

Page 84: Padrões de projeto

84

Page 85: Padrões de projeto

85

Page 86: Padrões de projeto

86

Page 87: Padrões de projeto

87

Page 88: Padrões de projeto

88

Page 89: Padrões de projeto

89

Page 90: Padrões de projeto

90

Page 91: Padrões de projeto

91

Page 92: Padrões de projeto

92

Page 93: Padrões de projeto

93

Page 94: Padrões de projeto

94

Page 95: Padrões de projeto

95

Page 96: Padrões de projeto

96

Page 97: Padrões de projeto

97

Page 98: Padrões de projeto

98

Page 99: Padrões de projeto

99

Page 100: Padrões de projeto

100

Page 101: Padrões de projeto

101

Page 102: Padrões de projeto

102

Page 103: Padrões de projeto

103

Page 104: Padrões de projeto

104

Page 105: Padrões de projeto

105

Page 106: Padrões de projeto

106

Page 107: Padrões de projeto

107

Page 108: Padrões de projeto

108

Page 109: Padrões de projeto

109

Page 110: Padrões de projeto

110

Page 111: Padrões de projeto

111

Page 112: Padrões de projeto

112

Page 113: Padrões de projeto

113

Page 114: Padrões de projeto

114

Page 115: Padrões de projeto

115

Page 116: Padrões de projeto

116

Page 117: Padrões de projeto

117

Page 118: Padrões de projeto

118

Page 119: Padrões de projeto

119

Page 120: Padrões de projeto

120

Page 121: Padrões de projeto

121

Page 122: Padrões de projeto

122

Page 123: Padrões de projeto

123

Page 124: Padrões de projeto

124

Page 125: Padrões de projeto

125

Page 126: Padrões de projeto

126

Page 127: Padrões de projeto

127

Page 128: Padrões de projeto

128

Page 129: Padrões de projeto

129

Page 130: Padrões de projeto

130

Page 131: Padrões de projeto

131

Page 132: Padrões de projeto

132

Page 133: Padrões de projeto

133

Page 134: Padrões de projeto

134

Page 135: Padrões de projeto

135

Page 136: Padrões de projeto

136

Page 137: Padrões de projeto

137

Page 138: Padrões de projeto

138

Page 139: Padrões de projeto

139

Page 140: Padrões de projeto

140

Page 141: Padrões de projeto

141

Page 142: Padrões de projeto

142

Page 143: Padrões de projeto

143

Page 144: Padrões de projeto

144

Page 145: Padrões de projeto

145

Page 146: Padrões de projeto

146

Page 147: Padrões de projeto

147

Page 148: Padrões de projeto

148

Page 149: Padrões de projeto

149

Page 150: Padrões de projeto

150

Page 151: Padrões de projeto

151

Page 152: Padrões de projeto

152

Page 153: Padrões de projeto

153

Page 154: Padrões de projeto

154

Page 155: Padrões de projeto

155

Page 156: Padrões de projeto

156

Page 157: Padrões de projeto

157

Page 158: Padrões de projeto

158

Page 159: Padrões de projeto

159

Page 160: Padrões de projeto

160

Page 161: Padrões de projeto

161

Page 162: Padrões de projeto

162

Page 163: Padrões de projeto

163

Page 164: Padrões de projeto

164

Page 165: Padrões de projeto

165

Page 166: Padrões de projeto

166

Page 167: Padrões de projeto

167

Page 168: Padrões de projeto

168

Page 169: Padrões de projeto

169

Page 170: Padrões de projeto

170

Page 171: Padrões de projeto

171

Page 172: Padrões de projeto

172

Page 173: Padrões de projeto

173

Page 174: Padrões de projeto

174

Page 175: Padrões de projeto

175

Page 176: Padrões de projeto

176

Page 177: Padrões de projeto

177

Page 178: Padrões de projeto

178

Page 179: Padrões de projeto

179

Page 180: Padrões de projeto

180

Page 181: Padrões de projeto

181

Page 182: Padrões de projeto

182

Page 183: Padrões de projeto

183

Page 184: Padrões de projeto

184

Page 185: Padrões de projeto

185

Page 186: Padrões de projeto

186

Page 187: Padrões de projeto

187

Page 188: Padrões de projeto

188

Page 189: Padrões de projeto

189

Page 190: Padrões de projeto

190

Page 191: Padrões de projeto

191

Page 192: Padrões de projeto

192

Page 193: Padrões de projeto

193

Page 194: Padrões de projeto

194

Page 195: Padrões de projeto

195

Page 196: Padrões de projeto

196

Page 197: Padrões de projeto

197

Page 198: Padrões de projeto

198

Page 199: Padrões de projeto

199

Page 200: Padrões de projeto

200

Page 201: Padrões de projeto

201

Page 202: Padrões de projeto

202

Page 203: Padrões de projeto

203

Page 204: Padrões de projeto

204

Page 205: Padrões de projeto

205

Page 206: Padrões de projeto

206

Page 207: Padrões de projeto

207

Page 208: Padrões de projeto

208

Page 209: Padrões de projeto

209

Page 210: Padrões de projeto

210

Page 211: Padrões de projeto

211

Page 212: Padrões de projeto

212

Page 213: Padrões de projeto

213

Page 214: Padrões de projeto

214

Page 215: Padrões de projeto

215

Page 216: Padrões de projeto

216

Page 217: Padrões de projeto

217

Page 218: Padrões de projeto

218

Page 219: Padrões de projeto

219

Page 220: Padrões de projeto

220

Page 221: Padrões de projeto

221

Conclusões Vimos diversos padrões usados em aplicações OO:

Padrões clássicos GoF, que descrevem soluções para problemas comuns, elaborados

Padrões GRASP, que descrevem aplicação de princípios OO Padrões e práticas emergentes como injeção de dependências

(aplicação de uma prática GRASP) e aspectos (extensão do OO)

Aprenda a usar os padrões clássicos e encurte o tempo para ganhar tornar-se um programador experiente!

Vários outros padrões existem e serão inventados Alguns sobreviverão por muito tempo, outros não Catalogue suas soluções e crie seus próprios padrões!

Page 222: Padrões de projeto

222