ここから本文です

C言語と親和性の高いオブジェクト指向の言語を知りたい 私はC言語と一部CPUのア...

ser********さん

2018/11/1103:46:55

C言語と親和性の高いオブジェクト指向の言語を知りたい

私はC言語と一部CPUのアセンブラが使える組み込みソフトウェア技術者です。
オブジェクト指向の言語については、恥ずかしながら一つも習得していません。

目的は

以下の2つです。
・社内の内部仕様書のわけのわからなさを何とかしたいと思っているので、UMLを勉強、展開したい。UML自体を知っているわけではないが、オブジェクト指向な記述が必須らしいので、まずオブジェクト指向の言語を学びたい。
・自社のC言語の資産をもとに、Windows上で動くデバッグ用ツールを開発したい。ずっと閉じた会社だったのですが、最近C#でそのようなことができる技術者が同僚になり、ちょっと感動しました。

候補としてはC#が一番良いのかなと思っていたのですが、pythonはC#以上にかなり効率よく、ソフトの開発が可能と聞いています。
この2つ以外の言語も含めて、これが便利だという言語、またツールがありましたら、ご教示いただけませんでしょうか。

閲覧数:
102
回答数:
4

違反報告

ベストアンサーに選ばれた回答

abi********さん

2018/11/1107:02:06

UMLの勉強と言う意味では、Javaがおすすめです。
Windowsの活用、及び、C言語との連携と言う意味では、統合開発環境Visual Studioでのオブジェクト指向の各種プログラミング言語をおすすめします。
すなわち、C++、C#、C++/CLI、C++/CXです。
最近でのVisual Studioでは、Pythonも加わったようなので、対象になりますが、まだ資料(Visual StudioとしてのPythonの資料)が少ないので、おすすめから除外しました。
C言語との関連と言う意味でも、除外しました。
また、Visual Basic.NET は、Visual Studio.NET(2002)からオブジェクト指向言語に改良されたので、対象になります。
ただし、C言語との関連と言う意味で、除外しました。




[Java]
オブジェクト指向言語で広く普及しているプログラミング言語の中では、C++が一番古く、次に、Javaです。
ただし、C++は、C言語との互換性を重視したため、オブジェクト指向言語としては、完成度が低いです。
よって、UML等のオブジェクト指向の設計では、Javaが一番おすすめです。
ただし、C言語との関連性や、Windowsでの有効活用と言う意味では、おすすめしません。





[C#]
Microsoftは、Javaを作ったSun社に裁判で訴えられました。
そこで、Javaの代替えとして、C#が作られました。
よって、Microsoft系のオブジェクト指向言語の代表は、C#となります。
ただし、単純にJavaの代替えではなく、様々なプログラミング言語の長所を参考にして作られました。
C#の特長は、Javaのように、オブジェクト指向の完成度が高い。
また、Javaのように、インターネット関係が強い。
C#は、C++の影響を受けていて、システム系(ミドルウェアやサーバシステムの作成)が得意です。
C#は、動的言語Pythonの影響を受けていて、動的処理が得意です。
C#は、Visual Basic と Delphi の影響を受けていて、ユーザーインターフェイス(ユーザーが直接操作する部分)を簡単に作れます。
ちなみに、C#は、普段は、ポインターを使いませんが、一応、使うこともできます。
よって、C言語やC++と連携するためのインターフェイス(仲介仕様)が作れます。
ただし、C言語系(C言語やC++)との連携は、後に説明しますC++/CLIのほうが作り易いです。





[C++/CLI]
C#やVisual Basic等の.NET系側のコードをマネージコードと言います。
C言語系(C言語やC++)のコードをアンマネージコードと言います。
C++/CLIは、マネージコードとアンマネージコードの両方が記述可能です。
C++/CLI自体は、マネージ系(C#等の.NET系)ですが、アンマネージコードも共存させることが可能です。
よって、マネージ系とアンマネージ系のインターフェイスを作り易いです。
ただし、単純に、マネージコードとアンマネージコードをそのまま混合するのは無理です。
マネージコードとアンマネージコードとのインターフェイス用技術を学ぶ必要があります。
資料が少ないので、かなり大変です。
よって、最初に学ぶ言語としては、すすめられません。
先にC#を学んで、.NET技術を身に着けた後に、C++/CLIをチャレンジして下さい。





[C++]
Visual Studio系でC言語を活用するには、Win32 を使います。
Visual Studio系でC++を活用するには、MFC やCOM を使います。
詳しくは、以下を参照して下さい。


「win32 apiは
windowsプラグラミングとは別ですか?」
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q131987738...

「Win32 API
を勉強できる教材を探しています。
おすすめの教材を教えてください」
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q101987277...

なお、Win32、MFC、COM は、古くからの技術です。
C++系の新技術は、以下に説明しますC++/CXになります。





[C++/CX]
文法的には、C++/CLIです。
ただし、C++/CLIやC#のベース側にあるプログラムは、.NET Frameworkです。
これに対して、C++/CXのベース側にあるプログラムは、Windowsランタイム(略称: WinRT)です。
このWinRTは、.NET系ではなく、C++でのMicrosoftテクノロジーであるCOMが使われています。
.NETではないと言っても、Microsoft系が.NETを中心とした時代となった現代において、.NETではないC++を活かせるようにしたものです。
すなわち、.NETへの対応ではなく、.NET時代への対応となります。

「今大学1年生です
今独学でHTML言語を勉強しています」
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q111982264...





[組み込み系での.NET]
組み込み用のフレームワークとして、.NET Micro Frameworkがあります(.NET Framework ではなく、真ん中に Micro があるのに注意)。
私は、詳しくはないので、検索して調べて下さい。
.NET Micro Framework を使えるプログラミング言語は、C#です。





[インターフェイスの作成は、組み込み系経験者が有利であることについて]
アンマネージ系とマネージ系のインターフェイスを学ぶのは大変だと前述しました。
しかし、組み込み系の経験者ならば、データーがバイト型配列の場合のみ学べばよいので、負担が軽いと思います。
組み込み系経験者ならば、やり取りしたいデータをバイト型配列に置き替えるのは、得意分野ですので。





[おすすめの結論(まとめ)]
UMLの入門書では、プログラミング言語を指定していないものが多いので、オブジェクト指向言語ならば、どれでも構わないと思います。
そこで、一番おすすめしたいのは、C++/CX と C# です。
しかし、C++/CX は、資料が少ないです。
また、Microsoftは、世間の様子を見ながらC++/CX 系技術を出しているようなので、まだ先が見えません。
よって、C# がおすすめです。

  • abi********さん

    2018/11/1111:51:41

    [自社のC言語の資産をWindowsで活かすことについて]
    C言語に関わるオブジェクト指向言語が、C++であることは、質問者さんが十分過ぎるほど知っているはずです。
    それであるのに、質問者さんが本質問を出したのは、「自社のC言語の資産をWindowsで活かす」と言う条件があるからだと思います。
    それならば、.NET系(C#か、その他の.NET系言語)は必須です。
    もしくは、.NET系時代に関わるC++/CXを選ぶことになります。
    C#で、オブジェクト指向自体を習得すれば、その後にC++も簡単に学べます。
    もちろん、C++自体は難しく、新しく改定された機能も学ぶと、かなり大変です。
    しかし、C言語を経験して来た人達は、C++で便利そうな機能だけ取り入ればよいのです。
    C++は、C言語との互換性を重視したオブジェクト指向言語だからです。
    C#でも、C++でも、必ず学んでほしいのが、ポリモーフィズムです。
    ポリモーフィズムと言う機能があるのではなく、ポ ---

    (続く)

  • その他の返信(1件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2018/11/12 01:36:24

こんなに懇切丁寧が回答がいただけるとは思ってもおらず、感謝感激です。
まずはC#について理解を深めて、それから他の知識、分野に手を付けていこうと思います。
いただいた回答の内容を自分の血肉にするには時間がかかると思いますが、地道に研鑽を積んでいこうと思います。
ほかに回答をいただいた皆さんも、貴重なアドバイスをどうもありがとうございました。

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

プロフィール画像

カテゴリマスター

qui********さん

2018/11/1110:51:04

当面のターゲットは「Windows上で動くデバッグ用ツール」ということですか。であれば、直接的には"C言語との親和性"は関係ないように思いますが。どうせ書き換えるのなら、参考になるのは制御手順だけ、なんてことになりそう。

これは、他人にも使わせるのでしょうか。電気屋メカ屋、あるいは設計補助的な立場のキーボードを叩くのが苦痛な人に使わせることになるようなら、現実的にはGUIバリバリでC#ということになると思います。

pythonは、スクリプト言語という素性もあって、自分用のデータ処理なんかには便利に使えますが、ソフト屋でない他人に使わせるのはちょっと説明が必要で面倒...という気がします。

UMLについては、最近どうなのでしょう。少なくとも「組み込みUML」でググってみてもなんだか古いページばかりがヒットするような。ただ、本屋で眺めていると数冊は'UML'とついている本が置いてあることが多いようなので、まぁ定着したということなのかしら。

オブジェクト指向対応の言語は、オブジェクト指向のソフトウェアの作成がやりやすい機能を備えているということであって、それを使いさえすればオブジェクト指向的ソフトウェアになるとかそういうことではないのでそのへんは心してかかってくださいね。

プロフィール画像

カテゴリマスター

nob********さん

2018/11/1110:31:01

C言語と親和性の高いオブジェクト指向の言語はC言語を拡張したC++です。

mar********さん

2018/11/1103:52:30

C#がいいと思う。その同僚のコードを全部理解できるまで読み込んだらどうだろう。今のところC#は他のどの言語よりも時代の先端を行ってる。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる