Как смоделировать партнерство?

Используя сито Сундарама , я думаю, что я сломал запись чистого Python:

def sundaram3(max_n):
    numbers = range(3, max_n+1, 2)
    half = (max_n)//2
    initial = 4

    for step in xrange(3, max_n+1, 2):
        for i in xrange(initial, half, step):
            numbers[i-1] = 0
        initial += 2*(step+1)

        if initial > half:
            return [2] + filter(None, numbers)

Сравнение:

C:\USERS>python -m timeit -n10 -s "import get_primes" "get_primes.get_primes_erat(1000000)"
10 loops, best of 3: 710 msec per loop

C:\USERS>python -m timeit -n10 -s "import get_primes" "get_primes.daniel_sieve_2(1000000)"
10 loops, best of 3: 435 msec per loop

C:\USERS>python -m timeit -n10 -s "import get_primes" "get_primes.sundaram3(1000000)"
10 loops, best of 3: 327 msec per loop

2
задан Axel Scheithauer 4 March 2019 в 16:46
поделиться

3 ответа

Элегантное решение, упомянутое в вопросе, будет выглядеть следующим образом: Person with partner attribute Оно не сильно отличается от других решений, но на самом деле невозможно с текущим UML, поскольку Свойство end end имеет isUnique=true: Metamodel Я думаю, это ошибка спецификации. Это, безусловно, можно исправить (показано синим цветом). Тем не менее, кажется, что эта ошибка не была замечена очень часто. Будет ли это исправление достаточно полезным, чтобы стоить усилий?

Если за этот ответ проголосуют, я подам вопрос.

0
ответ дан Axel Scheithauer 4 March 2019 в 16:46
поделиться

Это пример симметричной частичной ассоциации. Такая связь может быть смоделирована только с помощью подходящего ограничения, как показано в следующей модели:

enter image description here

Прикрепленное явное ограничение / invariant можно избежать, только если бы было определено соответствующее ключевое слово ограничения, которое будет использоваться в стереотипе ассоциации, таком как «симметричный». К сожалению, в UML 2.5 такой стереотип отсутствует, но мы можем добавить его следующим образом:

enter image description here

[У меня есть Прочитайте комментарий "bruno" выше только после отправки моего ответа. «Бруно» правильно указал на необходимость основной части ограничения: self.partner.partner = self.]

0
ответ дан Gerd Wagner 4 March 2019 в 16:46
поделиться

Как насчет этой конструкции: enter image description here ?

Пара имеет ровно 2 связанных человека. У класса не должно быть никаких дополнительных свойств. Тем не менее, вы можете подумать о дате, когда он был создан. В случае брака может быть указано лицо, дающее фамилию, и т. Д. Возможно, в этом партнерстве есть и другие аспекты, поскольку вам, похоже, это необходимо.

Теперь, почему я использовал составную агрегацию? В основном композиция означает, что растворение составляющего элемента также устранит составные элементы. Так что это выглядит довольно католично, не так ли? Да и позор мне. Однако должно быть что-то, выражающее «человек может быть составлен только для одной пары». И это то, что комбинированная агрегация также говорит (на моей любимой странице 110):

Составная агрегация - это сильная форма агрегации, которая требует, чтобы объект части включался не более чем в один составной объект одновременно. Если составной объект удаляется, все его экземпляры детали, которые являются объектами, удаляются вместе с ним.

Итак, вместо этого следует использовать общую композицию

Указывает, что свойство имеет общую семантику агрегации. Точная семантика совместной агрегации зависит от области применения и модели.

с объяснением моделирования, объясняющим, что каждый элемент должен использоваться только один раз в общей композиции.

1111 Конечно, лучше всего было бы использовать простую ассоциацию с ограничением. Тем не менее, я оставлю диаграмму для развлечения читателей.

P.S. Прочтение различных комментариев заставляет меня думать, что семантика Partnership (и ее варианты братства) гораздо более чувствительна к социальным аспектам, чем тот, о котором интуитивно начинает думать. Таким образом, настоящий «ответ» должен быть следующим: сначала определить социальный контекст для Partnership.

0
ответ дан Thomas Kilian 4 March 2019 в 16:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: