- ベストアンサー
C++ 図からソースコード自動生成
図からソースコードを自動生成するソフトがいっぱいありますが、これは内部でいったいどのような仕組みになっているのでしょうか? 内部の詳細を詳しく知りたく投稿させていただきました。 試しに、C++とjavaのクラスの定義(1クラスのみ)を図から行えるようなプログラムの作成を試みております。 以下2点で悩んでおります。 (1)2つの言語に対応するため中間言語を作る必要はあるのか? (2)図からコードを作る部分の開発が全く進みません。 似たプログラムの解説をしているサイトや本や公開されているソースコード、アドバイスありましたらご教授くださいませ。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
まず、どんな形式でも構いませんが、図を保存するためのデータ構造を決める必要があります。そのデータ構造を中間言語と呼べなくもありません。そして、そのデータ構造は、実際の出力コードに変換しやすいものに設計しておくべきです。 C++とJavaでは、一口にクラスといっても仕様が大幅に異なります。C++のクラステンプレートやメンバテンプレートはJavaではほとんどが使えませんし、逆にJavaのfinalをC++で表現するのは、なかなか骨が折れます。ライブラリの違いをどうするかの問題もあります。 こうした部分をどうするのか、予め方針を決めておく必要があります。考えられる選択肢としては、 1. C++とJavaの両方に共通の仕様のみ記述可能にする。 2. 両方の言語の仕様を記述できるようにしておき、コード生成時に対応できない場合はエラーにする。 3. 予めユーザーに使用言語を選択させ、その言語の範囲で記述可能にする。 といったところでしょうか。
その他の回答 (3)
- tikisukeman2
- ベストアンサー率32% (32/99)
「図からソースコードを生成する」のではなく、「ソースコードから図を作成する」ことも考えて見ましょう。 図はあくまでもデータを可視化したもの。データ構造をまず決めない事にはスタートできません。今回の場合そこが一番難しいところだと思います。言語仕様のうち可視化できる部分を抜き出す作業をしなくてはなりません。それが結果的にUML図で表現できれば正解です。 Java なら先ず「リフレクション」を調べてみてください。リフレクションでUML表現できる情報をソースコードから取得して可視化してみてください。そしたら何をすべきかが見えてくると思います。 リフレクションで取得した情報をデータ構造として表現すればあとは難しくはないと思います。
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
クラスの生成だけなら「原理的には」簡単です。 というのも、普通は、クラス図から C++ なり、Java なりのクラスのテンプレートを生成することだけを目的としているからです。 だから、この点では、「ソースコードの生成」ではなくて、「クラステンプレートの生成」だと考えた方が良いと思います。 ※さらに、シーケンス図からソースコード生成したりするともっと大変ですけど。 さて、この場合、「図」を出発点にするのではなく、 ・クラスがある ・そのクラスの中には、属性と操作がある 操作には…… 名前・返却値の型・引数(の型) etc. がある。 属性には…… 名前・型 etc. がある。 というのを、例えば、XML で表します。 これをスタートにした方が良いと思います。 これをスタートにして、「図」である UML に展開する これをスタートにして、「ソースコード」に展開する ですから、既にある図を読み込んで、そこからソースコードにするのは、非常に大変です。 逆に、図を書く際に、普通のお絵かきソフトとは違って、内部的に、XML かなにかの、構造を保ちながら、図を書くようにします。 例えば、「属性と操作の間にある線を引く」ではなくて、「属性を追加する」→「他の属性や、操作があるかどうかを確認して、必要に応じて区切り線を表示する」 というアプローチになると思います。 いずれにしても、正味「図からソースコードを生成する」のは、大変です。
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
UML からソースコードを生成するようなソフトをイメージしていらっしゃるのかなと思いますが。 この場合、「図」とは言っても、UML 自体が構造的に定義されています。なので、UML からのコードジェネレータだったら、とりあえず、原理は簡単です。 (実際に作るのが簡単とは言いませんが) ですから、この図形の構造自体を、中間言語として(最近は、XML で記述するのがはやり)持っておくようです。 このようなものをイメージされているのでしたら、UML の仕組みの方に当たってみてください。「原理的」には簡単です。
お礼
レスありがとうございます。 ずばり、大目的はUMLからソースコードを自動生成できるようなプログラムの組み方を学ぶことです。 ですが、技術力不足で1クラスのソースコードを自動生成することさえできません。ネットには、ソフト自体はフリーであるので、動きを確認することはできるのですが・・・。 もしよろしければ、1クラスのソースコード自動生成プログラムのヒント頂ければ、幸いです。
お礼
早速のレスありがとうございます。 アドバイス通り、言語に共通な部分と言語オリジナル部分をきちんと分けて生成したいと思います。 1クラスの自動生成だけでも思っていたより難しそうですね。がんばってみます。^^;