Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Alloyでアナリシスパターンを表現「2章 責任関係」

Alloyでアナリシスパターンを表現する試み

2.1 パーティ

人あるいは組織を抽象化した概念として「パーティ」を導入する。

abstract sig パーティ {
    属性_電話番号: 電話番号,
    属性_住所: 住所,
    属性_Eメールアドレス: Eメールアドレス
}
fact {
    属性_電話番号 in パーティ some -> lone 電話番号
    属性_住所 in パーティ some -> lone 住所
    属性_Eメールアドレス in パーティ some -> lone Eメールアドレス
}
sig 人, 組織 extends パーティ {}
sig 電話番号 {}
sig 住所 {}
sig Eメールアドレス {}

pred show {}
run show

実行結果

2.1_party.png

2.2 階層構造

階層に関する制約はalloyで素直に記述できる。

abstract sig 組織 {
    親:  lone 組織
}
sig 営業所 extends 組織 {} { 親 in 部門 }
sig 部門 extends 組織 {} { 親 in 地域 }
sig 地域 extends 組織 {} { 親 in 事業部 }
sig 事業部 extends 組織 {} { no 親 }

pred show(a地域: 地域, a事業部: 事業部, a部門: 部門, a営業所: 営業所) {
}
run show for 4

実行結果

alloy2.2.png

二つの組織階層

abstract sig 組織 {
    親営業:  lone 組織,
    親製品サービス: lone 組織
}
sig 営業所, 製品サービス extends 組織 {}

fact {
    all a組織: 組織 | no a組織.^(親営業 + 親製品サービス) & a組織
    親製品サービス in 組織 -> lone 製品サービス
    親営業 in 組織 -> lone 営業所
}

pred show {}
run show

実行結果

alloy2.2.2.png

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away