15. 2. 例: 翻訳による言語学習2. 例: 翻訳による言語学習
(Translation-based Lang. Learning)
15
Juhua Li, Kazunori Sakamoto, Hironori Washizaki, Yoshiaki Fukazawa, “Promotion of Educational Effectiveness by Translation-based
Programming Language Learning Using Java and Swift,” 50th Annual Hawaii International Conference on System Sciences (HICSS-
50), Waikoloa, Hawaii, Jan 4-7, 2017.
20. Command + Composite = Macroパターン
if( a == b ) { ... }if( a == b ) { ... }
20Kazunori Sakamoto, Hironori Washizaki, Yoshiaki Fukazawa, “Reporting the Implementation of a Framework for Measuring Test
Coverage based on Design Patterns”, Proc. 3rd International Workshop on Software Patterns and Quality (SPAQu’09)
21. 21何を実現しているでしょう?[Joshua05]改変
interface MessageStrategy { public class Main {interface MessageStrategy { public class Main {
public void sendMessage(); public static void main(String[] args) {
} MessageBody mb =
new MessageBody();
abstract class AbstractStrategyFactory { mb.configure(“Hello World!”);
public abstract MessageStrategy AbstractStrategyFactory asf =public abstract MessageStrategy AbstractStrategyFactory asf =
createStrategy(MessageBody mb); DefaultFactory.getInstance();
} MessageStrategy strategy
class MessageBody { = asf.createStrategy(mb);
object payload; mb.send(strategy);
public Object getPayload() { }
object payload; mb.send(strategy);
public Object getPayload() { }
return payload; }
}
public void configure(Object obj) {
payload obj;
}
payload obj;
}
public void send(MessageStrategy ms) {
ms.sendMessage();
}
}
class DefaultFactory extends AbstractStrategyFactory {
}
class DefaultFactory extends AbstractStrategyFactory {
private DefaultFactory() {}
static DefaultFactory instance;
public static AbstractStrategyFactory getInstance() {
if(instance == null) instance = new DefaultFactory();if(instance == null) instance = new DefaultFactory();
return instance;
}
public MessageStrategy createStrategy(final MessageBody mb) {
return new MessageStrategy() {
MessageBody body = mb;MessageBody body = mb;
public void sendMessage() {
Object obj = body.getPayload();
System.out.println(obj);
} }; } }
[Joshua05] Joshua Kerievsky著,小黒直樹 他訳: パターン指向リファクタリ
ング入門~ソフトウエア設計を改善する27の作法, 日経BP社, 2005.
22. 22デザインパターンの落とし穴
• 「解決を知っておけばよい」• 「解決を知っておけばよい」
– 解決はパターンの一部にすぎない。
「問題」の本質
を捉えよう–
• 「とにかく使えばOK」
を捉えよう
品質との関係を• 「とにかく使えばOK」
– 複雑なパターンは欠陥率 増大 [Vokac]
– 知識不足で作業時間 増大 [Prechelt]
品質との関係を
抑えよう
– 知識不足で作業時間 増大 [Prechelt]
• 「そのまま使わなければならない」
設計原則を抑え
る(例: 開放閉鎖、置換)• 「そのまま使わなければならない」
– 書かれた構造は一例に過ぎない。
リファクタリング
る(例: 開放閉鎖、置換)
[鷲崎07]
• 「最初から使わなければならない」
–
リファクタリング
していこう [Kerievsky]
– 未来は誰にもわからない
していこう [Kerievsky]
Marek Vokac, Defect Frequency and Design Patterns: An Empirical Study of Industrial Code, TSE 30(12), 2004
Lutz Prechelt, et al. Two Controlled Experiments Assessing the Usefulness of Design Pattern Documentation inLutz Prechelt, et al. Two Controlled Experiments Assessing the Usefulness of Design Pattern Documentation in
Program Maintenancem, TSE 28(6), 2002
鷲崎、丸山、山本、久保: ソフトウェアパターン- パターン指向の実践ソフトウェア開発. 近代科学社, 2007.
Joshua Kerievsky著: パターン指向リファクタリング入門~ソフトウエア設計を改善する27の作法, 日経BP社, 2005.