
【Asciidoc】ダイアグラム ー クラスとコードと ー
今日は要求定義をプログラムに落とし込む概略を紹介しようと思います。
お題は「吾輩は・・・」。
吾輩は猫である。名前はまだない。
早速ユースケースにします。
@startuml
actor 夏目漱石
夏目漱石 -> (猫 初期化) : 作成
夏目漱石 -> (猫 名前) : 付ける
夏目漱石 -> (猫 描写) : 表示する
@enduml
同じことをダニエル・デフォーが書けば
(確か、違う書き出しのはずだけれど・・・二次創作と思ってください。)
吾輩は人間である。名をロビンソン・クルーソーと言う
ユースケースにします。
@startuml
actor ダニエル・デフォー
ダニエル・デフォー -> (人間 初期化) : 作成
ダニエル・デフォー -> (ロビンソン・クルーソー 名前) : 付ける
ダニエル・デフォー -> (人間 描写) : 表示する
@enduml
こんな感じです。
さて、架空の作家に登場してもらいましょう。
吾輩は「種族名」である。名前は「某」である。
ユースケースを拡張して
@startuml
actor 作家
作家 -> (動物 初期化) : 作成
作家 -> (種族 種族名) : 決める
作家 -> (某 名前) : 付ける
作家 -> (動物 描写) : 表示する
@enduml
取り敢えず描画します。

だいぶ抽象化されました。
これを元にクラス図を書きます。
@startuml
class 動物 {
-種族: String
-名前: String
+Set種族(種族: String): void
+Set名前(名前: String): void
+Show描写(): void
}
作家 -> 動物 : 作成(初期化)
作家 -> 動物 : Set種族(種族名)
作家 -> 動物 : Set名前(氏名)
作家 -> 動物 : Show描写()
@enduml
描画すると

ついでに「なんちゃってJAVA」コードにしてみます。
(コーディング規則無視なのでなんちゃってです。きっと動かないよ。)
public class 動物 {
private String 種族;
private String 名前;
public void set種族(String 種族名) {
this.種族 = 種族名;
}
public void set名前(String 名前値) {
this.名前 = 名前値;
}
public void show描画() {
System.out.println("吾輩は" + 種族名 + "である。名前は" + 名前 );
}
public static void main(String[] args) {
動物 my動物 = new 動物();
my動物.set種族("主人公");
my動物.set名前("ない");
}
}
さて、利用側のコードは
public class Main {
public static void main(String[] args) {
動物 漱石動物 = new 動物();
漱石動物.set種族("猫");
漱石動物.show描画();
}
}
又は
public class Main {
public static void main(String[] args) {
動物 デフォー動物 = new 動物();
デフォー動物.set種族("人間");
デフォー動物.set名前("ロビンソン・クルーソー");
デフォー動物.show描画();
}
}
まともにコンパイル出来るよう書き直せば期待通りの結果になるはず。
。。キット、ダイジョウブダヨネ。。
ユースケースからクラス図への変化とコードの対応を確認してほしい。
見て理解る通りプログラミング作業は
分析(品詞分解 ⇒ 分類作業)
設計(分析結果 ⇒ クラス化若しくは構造化)
コーディング(クラス若しくは構造の翻訳)
ですね。
(個人的見解ですが)いろいろな道具は在るけどプログラミング作業は型に当てはめる単純作業、論理的思考とかは殆どしていません。
故に・・・
プログラミング能力を身に付けようと考えるなら
翻訳力や汎用化能力が養われるもの
「英語」や「漢文」そして「日本語」の文法をしっかりと学習したほうが良いと思う。
コンピューター言語も自然言語もコミュニケーション手段である「言語」に相違ないし、考えようによっては「プログラミング」も「ChatGPT」もコンピュータとのコミュニケーションなのだから。。。
急がば廻れ!!
自分は学生時代、手抜きしていたので乱文です。反省。
さて、今回はこのあたりまで・・・・・・
…ではまた。
当Noteは下記の「AsciiDoc Language Documentation」の文法に従っています。