MAC 441/5714 - Tópicos de Programação
Orientada a Objetos
Aula 7
Protocolos específicos de alguns subtipos de Collection
SequenceableCollection
possui protocolos específicos:
accessing
copying
OrderedCollection
possui protocolos específicos:
accessing
after:
before:
adding
removing
SortedCollection
possui protocolos específicos:
instance creation
sortBlock: aBlock
accessing
para acessar e
modificar o bloco de ordenação
Se não se determina nenhum bloco de
ordenação, adota-se o seguinte bloco de
ordenação padrão:
[:a :b | a <= b]
Exemplo:
experimente avaliar as seguintes expressões:
filhos := SortedCollection new
filhos add: #João
filhos add: #Maria
filhos add: #Luís
filhos add: #Cláudio
filhos
filhos sortBlock: [:a :b |
a> b]
filhos
uma boa bibliografia sobre coleções é o
livro Smalltalk-80 - The Language
and its Implementation. Goldberg
& Robson.
Cartões CRC
Histórico
Ward Cunningham e Kent Beck foram contratados para
participar de um projeto de pesquisa na Tektronix.
Eles eram pagos para terem idéias, não produtos
comerciais.
Passaram meses escrevendo, em conjunto, um montão de
código Smalltalk e conversando sobre objetos e design.
No final do projeto eles ficaram um pouco frustrados pois
não encontraram uma forma de ensinar para outras pessoas a forma
deles de "pensar orientados a objetos".
Algum tempo depois, Ward teve um insight e criou os cartões
CRC.
Naquela época, havia muita ênfase na parte de
classificação de objetos (hierarquias de classes, etc.)
Ward queria enfatizar exatamente o oposto: as
colaborações e responsabilidades dos objetos.
Classe - Responsabilidade - Colaboração
Cartões CRC (Class, Responsibility, Collaborator)
Possível modelo (há variações de
estilo):
Classe
Nome da classe
Responsabilidade
Conhecer x
Conhecer y
Calcular z
Coordenar w
Realizar j
Colaboradores
colaborador 1
colaborador 2
...
no campo Classe, pode-se
colocar opcionalmente, sob o nome da classe, o nome da sua superclasse
e de suas subclasses
Responsabilidades podem
ser
conhecimento (saber algo, guardar algum valor)
comportamental (fazer algo)
Colaboradores são
outras classes com as quais essa classe interage diretamente para
atingir o objetivo maior do sistema como um todo
Funcionamento
Cartões CRC são utilizados na etapa inicial de
projeto de um sistema orientado a objetos
O projeto é feito em conjunto por uma equipe de cerca de 5
ou 6 pessoas (2 é só companhia, 10 é uma
multidão)
Participam da atividade:
usuário: a pessoa, ou representante, que vai realmente
utilizar o sistema na prática
analista: um especialista em análise de sistemas,
análise de problemas, análise de requisitos
projetista: um especialista em projeto de arquiteturas de
software
programador: um especialista em programação
(linguagens e tecnologias)
facilitador: um especialista na metodologia de cartões
CRC que coordena a reunião e anota as idéias
O grande desafio é achar as classes certas para o sistema
Pessoas com pouca experiência em OO tendem a construir
arquiteturas que funcionam como uma orquestra: um regente e dezenas de
músicos que estão ligados primordialmente ao gerente.
Uma boa arquitetura OO funciona mais como um grupo de Jazz: cada
elemento interage com outros elementos diretamente através de
colaborações criadas especificamente para aquela
música [para aquele sistema]
Numa banda de Jazz cada músico sabe o seu papel, o
desempenha muito bem e reage a estímulos recebidos dos outros
músicos mudando o seu comportamento e enviando estímulos
para os outros músicos.
Sociologia
O aspecto sociológico é fundamental num projeto de
desenvolvimento de software
A experiência de colocar o time junto para garimpar uma
arquitetura preliminar tem um grande potencial para ajudar em muito o
relacionamento posterior do grupo
A habilidade mais importante de um profissional de software
é a capacidade de comunicação oral (precisamos
lembrar de trabalhar e valorizar isso!)
Dinâmica
A metodologia é baseada em duas atividades básicas:
brainstorming (uma
tempestade de idéias) e role
playing (dramatização)
4 princípios de Brainstorming
Todas idéias são boas idéias em potencial
Pense rápido e furiosamente primeiro, pondere depois
Dê uma chance a todos do grupo para expressar suas
idéias (round robin,
ágil)
Um pouco de humor é uma força poderosa
Garimpando Classes
cada sessão é feita em 4 etapas
relembre os princípios de brainstorming
escreva no papel os objetivos da sessão (e se atenha a
eles no decorrer dela; cuidado com os divagadores)
use round-robin,
todos devem ser incentivados a falar, mas se
alguém emudece, esse alguém pode dizer "passo"
discuta as idéias apresentadas e selecione as melhores
não percorra todas as sugestões uma por uma
perguntando a opinião de todos
vá direto às melhores e que são
consenso
descarte então as idéias que são
claramente ruins para a grande maioria
discuta então aquelas que estão na zona
intermediária
ao longo de várias sessões (ou mesmo dentro de
uma mesma sessão longa) queremos fazer o seguinte:
criar uma lista de candidatas a classes
escolher quais classes fazem parte do núcleo da
arquitetura e são realmente importantes
identificar classes que são irrelevantes (p.ex. que
vão ter que existir mas não são importantes para a
arquitetura)
identificar classes sobre as quais ainda não se fez um
julgamento final
escrever os detalhes das classes do núcleo (nos
cartões CRC)
escrever os detalhes das classes sem julgamento final (talvez
ajude a fazer um julgamento)
Responsabilidades
devem indicar O QUE a classe deve fazer e não COMO ela
deve fazer
exemplo: "ordena vetor" é uma boa resposabilidade;
"implementa quicksort para ordenar vetor" é uma má
responsabilidade
lembre-se que responsabilidades incluem conhecimento e
comportamento
Exercício
Em grupos de 5 ou 6, elaborar uma arquitetura OO para um sistema
lembretes sobre tarefas a serem desempenhadas por grupos de indivíduos.
Bibliografia
The CRC Card Book. David
Bellin e Susan Suchman. (temos na biblioteca)