(B)のコーディング
1 -- ****** クラス定義
2
3 class 従業員 ()
4 名前 : string
5 職種 : string
6 年齢 : number
7 住所 : string
8 end
9
10 class SE (従業員)
11 担当機種 : string
12 end
13
14 class 営業 (従業員)
15 売上 : number := 0
16 end
17
18 class 事務 (従業員) end
19
20 class 会社 ()
21 従業員リスト : sequence of 従業員
22 end
23
24 -- ********* メソッド
25
26 method 開始 会社 ()
27 variable fd : file
28 キー : string
29
30 open fd "人事マスタ" input
31 while not eof(fd) do
32 read fd キー
33 switch キー
34 case "SE" insert new_SE() after 従業員リスト
35 case "営業" insert new_営業() after 従業員リスト
36 case "事務" insert new_事務() after 従業員リスト
37 end
38 send @従業員リスト ファイル入力 (fd, キー)
39 end
40 expose self using ポリモフィズム
41 end
42
43 method ファイル入力 従業員 (fd : file, キー : string)
44 set 職種 := キー
45 read fd 名前, 年齢, 住所
46 end
47
48 method ファイル入力 SE (fd : file, キー : string)
49 set 職種 := キー
50 read fd 名前, 年齢, 住所, 担当機種
51 end
52
53 method ファイル入力 営業 (fd : file, キー : string)
54 set 職種 := キー
55 read fd 名前, 年齢, 住所, 売上
56 end
57
58 method 書式 会社 ( x : 従業員, i : index )
59 format "~A" ( x.名前 )
60 end
61
62 method 選択 会社 ( x : 従業員, i : index )
63 expose x using 表示
64 end
65
66 -- ****** プレゼンテーション
67
68 frame ポリモフィズム 会社 { pushpin : true }
69 scrollinglist : 従業員リスト
70 { formatmethod : 書式,
71 selectmethod : 選択 }
72 end
73
74 frame 共通 従業員
75 textfield : 名前
76 abbrevfield : 職種
77 numericfield : 年齢
78 textfield : 住所
79 end
80
81 frame 表示 従業員 { pushpin : true }
82 panel : 共通
83 end
84
85 frame 表示 SE { pushpin : true }
86 panel : 共通
87 textfield : 担当機種
88 end
89
90 frame 表示 営業 { pushpin : true }
91 panel : 共通
92 numericfield : 売上
93 end
94
95 start 会社 with 開始