MAC 441/5714 - Tópicos de Programação
Orientada a Objetos
Aula 8 - 1/04/2004
"C++ é uma linguagem linda e
elegante na qual dá gosto de programar. Melhor que ela,
só Fortran!" Fabio Kon.
Coleções
- A biblioteca de classes de Smalltalk vem com toda uma hierarquia
de classes para manipulações de coleções
que é extremamente interessante.
- As coleções são muitíssimo utilizadas
por qualquer programa Smalltalk de médio ou grande porte.
- Vale a pena estudar não só a interface das
coleções mas também estudar um pouco a sua
implementação.
Tipos de Coleções
- Collection: é
uma classe abstrata básica que é mãe de todas as
coleções
- Bag: é um
saco de objetos onde não interessa a sua ordem e pode haver
repetição de elementos
- Set: igual a Bag mas
não há repetição de elementos (qq.
semelhança com o conceito matemático de conjuntos
não é mera coincidência :-)
- SequenceableCollection:
classe abstrata para representar coleções que podem ser
indexadas
- ArrayedCollection:
classe abstrata para representar coleções
seqüenciáveis de tamanho fixo
- Principais tipos concretos de ArrayedCollection: ByteArray (vetor de SmallIntegers), String (vetor de caracteres), Text (vetor de caracteres com
formatação), Array
(vetor de Objects)
e RunArray (vetor de Objects com
representação específica para vetores com muita
repetição contígua).
- OrderedCollection:
elementos são guardados na ordem em que foram adicionados
à coleção; podem ser acessados por um
índice; seu comprimento pode ser variável.
- SortedCollection:
similar a OrderedCollection
mas seus elementos são ordenados por um algoritmo de
ordenação.
- Interval: representa
números em um intervalo.
- Dictionary: é
um conjunto (Set) de
associações (Associations).
Uma associação é um par de objetos do tipo <chave,valor>
Protocolos Comuns a todas as subclasses de Collection
- adding
- add: newObject
- addAll: aCollection
- removing
- remove: oldObject
- remove: oldObject ifAbsent: anExceptionBlock
- removeAll: aCollection
- testing
- includes: anObject
- isEmpty
- occurrencesOf: anObject
- enumerating
- do: aBlock
- select: aBlock
- reject: aBlock
- collect: aBlock
- detect: aBlock
- detect: aBlock ifNone: exceptionBlock
- inject: thisValue into: BinaryBlock
- instance creation
- with: anObject
- with: anObject with: anObject
- with: anObject with: anObject with: anObject
- with: anObject with: anObject with: anObject with: anObject
- conversion
- asSet
- asBag
- asOrderedCollection
- asSortedCollection
- asSortedCollection: aBlock
- Exemplos:
- s := Set with: $s with:
$e with: t
- cont := 0.
meuTexto do: [ :letra |
letra asLowercase == $a
ifTrue [ cont := cont + 1]]
- (meuTexto select: [:letra
| letra asLowercase ==
$a]) size
- (meuTexto reject: [:letra
| letra asLowercase ~=
$a]) size
- meuTexto inject: 0
into: [:cont :proxElem
|
cont + (proxElem asLowerCase == $a
ifTrue: [1]
ifFalse: [0])]
SequenceableCollection
- possui protocolos específicos:
OrderedCollection
- possui protocolos específicos:
- accessing
- adding
- removing
SortedCollection
- possui protocolos específicos:
- instance creation
- 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:
- 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
Bibliografia
- Smalltalk-80 - The Language and its Implementation. Goldberg
& Robson.
Próxima Aula
Aula Anterior
Página de MAC 441/5714
Página do Fabio
Página do DCC