図からソースコードを自動生成するソフトがいっぱいありますが、これは内部でいったいどのような仕組みになっているのでしょうか?
内部の詳細を詳しく知りたく投稿させていただきました。
試しに、C++とjavaのクラスの定義(1クラスのみ)を図から行えるようなプログラムの作成を試みております。
以下2点で悩んでおります。
(1)2つの言語に対応するため中間言語を作る必要はあるのか?
(2)図からコードを作る部分の開発が全く進みません。
似たプログラムの解説をしているサイトや本や公開されているソースコード、アドバイスありましたらご教授くださいませ。
No.1ベストアンサー
- 回答日時:
まず、どんな形式でも構いませんが、図を保存するためのデータ構造を決める必要があります。
そのデータ構造を中間言語と呼べなくもありません。そして、そのデータ構造は、実際の出力コードに変換しやすいものに設計しておくべきです。C++とJavaでは、一口にクラスといっても仕様が大幅に異なります。C++のクラステンプレートやメンバテンプレートはJavaではほとんどが使えませんし、逆にJavaのfinalをC++で表現するのは、なかなか骨が折れます。ライブラリの違いをどうするかの問題もあります。
こうした部分をどうするのか、予め方針を決めておく必要があります。考えられる選択肢としては、
1. C++とJavaの両方に共通の仕様のみ記述可能にする。
2. 両方の言語の仕様を記述できるようにしておき、コード生成時に対応できない場合はエラーにする。
3. 予めユーザーに使用言語を選択させ、その言語の範囲で記述可能にする。
といったところでしょうか。
早速のレスありがとうございます。
アドバイス通り、言語に共通な部分と言語オリジナル部分をきちんと分けて生成したいと思います。
1クラスの自動生成だけでも思っていたより難しそうですね。がんばってみます。^^;
No.4
- 回答日時:
「図からソースコードを生成する」のではなく、「ソースコードから図を作成する」ことも考えて見ましょう。
図はあくまでもデータを可視化したもの。データ構造をまず決めない事にはスタートできません。今回の場合そこが一番難しいところだと思います。言語仕様のうち可視化できる部分を抜き出す作業をしなくてはなりません。それが結果的にUML図で表現できれば正解です。
Java なら先ず「リフレクション」を調べてみてください。リフレクションでUML表現できる情報をソースコードから取得して可視化してみてください。そしたら何をすべきかが見えてくると思います。
リフレクションで取得した情報をデータ構造として表現すればあとは難しくはないと思います。
No.3
- 回答日時:
クラスの生成だけなら「原理的には」簡単です。
というのも、普通は、クラス図から C++ なり、Java なりのクラスのテンプレートを生成することだけを目的としているからです。
だから、この点では、「ソースコードの生成」ではなくて、「クラステンプレートの生成」だと考えた方が良いと思います。
※さらに、シーケンス図からソースコード生成したりするともっと大変ですけど。
さて、この場合、「図」を出発点にするのではなく、
・クラスがある
・そのクラスの中には、属性と操作がある
操作には……
名前・返却値の型・引数(の型) etc. がある。
属性には……
名前・型 etc. がある。
というのを、例えば、XML で表します。
これをスタートにした方が良いと思います。
これをスタートにして、「図」である UML に展開する
これをスタートにして、「ソースコード」に展開する
ですから、既にある図を読み込んで、そこからソースコードにするのは、非常に大変です。
逆に、図を書く際に、普通のお絵かきソフトとは違って、内部的に、XML かなにかの、構造を保ちながら、図を書くようにします。
例えば、「属性と操作の間にある線を引く」ではなくて、「属性を追加する」→「他の属性や、操作があるかどうかを確認して、必要に応じて区切り線を表示する」
というアプローチになると思います。
いずれにしても、正味「図からソースコードを生成する」のは、大変です。
No.2
- 回答日時:
UML からソースコードを生成するようなソフトをイメージしていらっしゃるのかなと思いますが。
この場合、「図」とは言っても、UML 自体が構造的に定義されています。なので、UML からのコードジェネレータだったら、とりあえず、原理は簡単です。
(実際に作るのが簡単とは言いませんが)
ですから、この図形の構造自体を、中間言語として(最近は、XML で記述するのがはやり)持っておくようです。
このようなものをイメージされているのでしたら、UML の仕組みの方に当たってみてください。「原理的」には簡単です。
レスありがとうございます。
ずばり、大目的はUMLからソースコードを自動生成できるようなプログラムの組み方を学ぶことです。
ですが、技術力不足で1クラスのソースコードを自動生成することさえできません。ネットには、ソフト自体はフリーであるので、動きを確認することはできるのですが・・・。
もしよろしければ、1クラスのソースコード自動生成プログラムのヒント頂ければ、幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ArduinoでMouse関数を使用して...
-
プログラミング言語でアプリや...
-
c++の勉強方法を教えてくださ...
-
c言語
-
mallocについて
-
VisualStudioで、コードを印刷...
-
QT(C++)の学習方法について
-
C言語 1から20までの逆数の和を...
-
C言語について。
-
Notepad++の関数リスト表示でC...
-
gccを行ってもexeファイルが生...
-
VisualStudioでのプログラミン...
-
ディスプレイの解像度とマウス...
-
Windows Formアプリからコンソ...
-
PC画面を録画するプログラムでd...
-
パソコン
-
今ってプログラミング言語は何...
-
2つほどお聞きしたいことがあり...
-
どうして+3
-
プログラミング言語についてc++...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
ダイアログ表示時にチェックボ...
-
(UWSC) 「#32770」の意味わかり...
-
クラスのアドレスを引数として...
-
C++ protectedにアクセス不可
-
エディットコントロールでEnter...
-
このコンパイルエラーの意味に...
-
イベントにAddHandlerされてい...
-
DataGridViewのセルに斜線を引...
-
ダイアログクラスのコントロー...
-
【ASP.NET】 独自で作成したク...
-
OnInitDialog()の関数の組み込み方
-
MFCアプリのコマンドラインでパ...
-
C#で通常のbuttonコントロール...
-
MFCのCListCtrlでスクロールを検出
-
MFCのドラッグ&ドロップについて
-
正規表現 [^/]+ の意味を教えて
-
エディットコントロールのイベ...
-
関数の呼び出し元の検索
おすすめ情報