Professional Documents
Culture Documents
Diagrama conceitual
Como vimos em sala de aula, em um projeto orientado a objetos as classes de software representam conceitos do
domínio da aplicação. Ocorre que, muitas vezes, para recuperar informação espalhada pelas classes é preciso criar
associações em software entre conceitos relacionados. Vamos usar como exemplo um domínio conhecido por nós,
uma biblioteca, e vamos tentar criar um diagrama dos conceitos envolvidos na operação de emprestar um livro. Este
diagrama é chamado de um diagrama conceitual.
Figura 1
É fácil entender a necessidade das associações entre os conceitos, conforme mostrado na figura. Imagine que o
software tem de fornecer o nome do usuário que pegou emprestado um exemplar de um livro do qual se conhece
um título. Nesse caso, é preciso navegar pelas associações para, a partir do Livro, chegar ao Exemplar e deste ao
Empréstimo, e deste ao Usuário.
O passo seguinte é determinar a multiplicidade das associações.
Figura 2
Figura 3
Figura 4
Vamos escrever o código Python das classes Livro e Exemplar. Foram acrescentados alguns métodos úteis para o
teste das classes.
class Exemplar:
def __init__(self, codigo, livro):
self.__codigo = codigo
# associação obrigatória com livro
self.__livro = livro
# associação opcional com empréstimos
self.__emprestimos = []
# livro, me adiciona na sua coleção!
livro.addExemplar(self)
def getCodigo(self):
return self.__codigo
class Livro:
def __init__(self, titulo, ISBN):
self.__titulo = titulo
self.__ISBN = ISBN
# associação opcional com exemplares
self.__exemplares = []
def getCodigosExemplares(self):
lista = []
for exemplar in self.__exemplares:
lista.append(exemplar.getCodigo())
return lista
E agora um código de teste, que usa as classes Livro e Exemplar
# livros é um dicionário de ISBN em Livro
livros = {}
print livros['978-85-7780-013-1'].getCodigosExemplares()
Observe na classe Exemplar o padrão usado para garantir a integridade das associações bidirecionais, um dos lados
da associação é responsável pela inclusão das referências em ambos os lados da associação. Evita-se assim deixar a
responsabilidade da associação mútua para o programador usuário da classe.