1. 單向關連

以下是一個單向關聯的例子,在下方的類別圖中,1個學生「擁有」0張或多張證照。撰寫學生類別時,記得在建構元中增加一個可以「關連」到自己的證照之屬性,藉以建立起兩個類別之間的關係。

(1) 以下是「Student」類別:

class Student:
    '''
    學生類別
    
    屬性:
    (1)學號, id
    (2)姓名, name
    (3)擁有的證照, certificates
    '''
    def __init__(self, id, name):
        self.__id = id
        self.__name = name
        self.__certificates = []  #「關連」到自己的證照
    
    @property
    def id(self): return self.__id

    @id.setter
    def id(self, id): self.__id = id

    @property
    def name(self): return self.__name

    @name.setter
    def name(self, name): self.__name = name

    def add_certificate(self, certificate):
        '''
        傳入: 一個證照物件
        處理: 將傳入證照加入自己擁有的證照
        '''
        if certificate not in self.__certificates:
            self.__certificates.append(certificate)            
            return True
        else:
            return False
    
    def list_certificate(self):
        '''
        處理: 回傳自己擁有的所有證照
        '''    
        t = ''
        for c in self.__certificates:
            t+=c.title + ' '

        return f'{self.id} {self.name} 共有{len(self.__certificates)}張證照, 包括:{t}'

(2) 以下是「Certificate」類別

class Certificate:
    '''
    證照類別
    
    屬性:
    (1)證照名稱, title
    '''
    def __init__(self, title):
        self.__title = title

    @property
    def title(self): return self.__title

    @title.setter
    def title(self, title): self.__title = title

(3) 測試

#----------------------
# 建立學生物件
#----------------------
s1 = Student('1001', '王小明')
s2 = Student('1002', '陳小華')

#----------------------
# 建立證照物件
#----------------------
c1 = Certificate('全民英檢')
c2 = Certificate('日文N1')
c3 = Certificate('ITS Python')

#----------------------
# 建立學生和證照之間的關聯
#----------------------
s1.add_certificate(c1)
s1.add_certificate(c2)

s2.add_certificate(c1)
s2.add_certificate(c2)
s2.add_certificate(c3)

#----------------------
# 印出學生的證照
#----------------------
print(s1.list_certificate())
print(s2.list_certificate())

(4) 執行結果

1001 王小明 共有2張證照, 包括:全民英檢 日文N1 
1002 陳小華 共有3張證照, 包括:全民英檢 日文N1 ITS Python