C++におけるオブジェクト指向の理解

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
trump

C++におけるオブジェクト指向の理解

#1

投稿記事 by trump » 6年前

お世話になります。
私はC言語を10年前に3-4年ほどアルゴリズムを中心に学習していたものです。
今は事務の仕事をしており、みなさんのようなプログラマやエンジニアではありません。

お聞きしたいことは、
「CやC++などでのオブジェクト指向の理解の確認」です。

オブジェクト指向について理解ができなかったため、CからC++に移行できず、
プログラマへの道をあきらめた経緯があります。

本題ですが、オブジェクト指向とは具体的に言えば、
コンパイル実行可能なソースをincludeなどで呼び集めて大きな作品を作る?
ということでしょうか。

目的は、また空いている時間に趣味としてC++をやってみたいためです。
誤字脱字などはあると思いますが、ご勘弁下さい。

宜しくお願い致します。取り急ぎ失礼いたします。

maru
記事: 150
登録日時: 13年前

Re: C++におけるオブジェクト指向の理解

#2

投稿記事 by maru » 6年前

trump さんが書きました:本題ですが、オブジェクト指向とは具体的に言えば、
コンパイル実行可能なソースをincludeなどで呼び集めて大きな作品を作る?
ということでしょうか。
違います。上記はライブラリが充実しているかどうかであり、オブジェクト指向とは全く別の要素です。

「オブジェクト指向」を google 君に聞いてみたら Wiki がヒットします。
この中で、「オブジェクト指向プログラミングの構成要件」として「カプセル化 (情報隠蔽)」と「ポリモーフィズム (多態性)」が挙げられています。
オブジェクト指向では、オブジェクトの動作はオブジェクト自身が知っていればよく、外部ではその動作がどのように実装されているかを知る必要がないし、知るべきではありません。これがカプセル化です。カプセル化することで、オブジェクトの実装とオブジェクトの利用者を分離することができるようになり、プログラム変更の影響を局所化できるようになります。
ポリモーフィズムは私にはうまく説明できませんが、c++ ではこれをクラスの継承と仮想関数によって実現します。

あと、オブジェクト指向で重要なのは解決すべき問題のモデリングで、これがうまくいかないとどんな言語を習得していても意味がありません。
trump さんが書きました:趣味としてC++をやってみたい
とのことですが、少し漠然としているように思われます。何か課題を設けたらいかがでしょうか?

trump

Re: C++におけるオブジェクト指向の理解

#3

投稿記事 by trump » 6年前

平日仕事のため、返信遅くなり申し訳ございません。

本を読むよりも理解できました。
カプセル化は当時理解できない概念でした。

C++はどちらかというと研究職や企業向けの言語でしょうか。
趣味としてやるには敷居が高いと感じました。

とはいっても”何をやりたいのか”の方が重要ですね。
課題は過去に行ってきたCファイルのC++化を検討しています。

具体的なものとしては最短経路問題や簡単なパズルなどです。
今回お忙しいなか誠にありがとうございました。

質問してよかったです。感謝致します。

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 13年前
住所: 北海道札幌市
連絡を取る:

Re: C++におけるオブジェクト指向の理解

#4

投稿記事 by Dixq (管理人) » 6年前

私もオブジェクト指向を理解するまでに時間がかかった経験があるのでよくわかります。
結局プログラミングならではの考え方なので、実際にその考え方で設計が成功してみないことにはそれがどういうものなのかはっきり理解できないんですよね。
そして、「完全に理解できる」レベルに到達するにはプロになってから〇年後という場合もザラなほど奥が深いです。
(むしろ現場では完全に理解せずにコーディングしている人が多くて困るレベル・・・)

> C++はどちらかというと研究職や企業向けの言語でしょうか。
> 趣味としてやるには敷居が高いと感じました。

そういうわけではないですが、C++がとても難しいのは事実です。
最近モダンな言語ばかり使っている私から見るとC++は欠陥言語のように思えてきます。
それにもうこれだけ便利な言語がたくさんある今や、C/C++はレガシーな言語と化してきていると思います。

オブジェクト指向は理解してみたいが、C++は難しいということであれば、
モダンなオブジェクト指向言語を勉強してみるといいです。
世界一広く使われている言語はJAVAです。
クラス単位でしかコンパイルできないので無理やりにでもクラスを理解させられます。
Windowsアプリを作りたいのであればC#を学んでみるといいでしょう。
JAVAよりさらに最近の言語です。
iOSアプリを作りたいならSwiftを学んでみるといいでしょう。
C#よりさらにモダンな言語です。
Androidアプリを作りたいならKotlinを学んでみるといいでしょう。
今一番モダンな言語です。(が、Kotlinはつい先月正式にGoogleがサポートしたばかりなのでまだ参考になる情報が少ないです)

一番情報が多く、クラス単位でしかコンパイルできないため、オブジェクト指向の勉強になる言語であればまずJAVAでしょうか。
C++だと、Cの書き方でコンパイルできてしまうので、なかなか脱Cができません。
一度オブジェクト指向言語を勉強してみることをお勧めします。

Androidアプリを作るのが専門なので、JAVAでAndroidアプリを作るのであれば少しお手伝いできます。

trump

Re: C++におけるオブジェクト指向の理解

#5

投稿記事 by trump » 6年前

管理人 様

質問者のtrumpです。アドバイスありがとうございます。
また、本当に貴重なご意見ありがとうございます。

前々からこちらの掲示板をお気に入りに入れていたのですが、なかなか足を踏み入れませんでした。
こうして第一線のプロフェッショナルな方々とお話しできて光栄です。

Cに固執していたあまり、C++が次にやる言語という認識が強かったのだと思います。
最近の定番、JAVAから始めてみたいと思います。

私は現場に行ったことはないのですが、相当な修羅場なんですね。
正直、”C++がとても難しいのは事実”と教えて頂いたことで脱Cへ決意できそうです。

あと、私の夢は実用的なandroidアプリを作成することです。
そこだけ強くマッチングしていたのでご報告までに^^;

ありがとうございました。

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 13年前
住所: 北海道札幌市
連絡を取る:

Re: C++におけるオブジェクト指向の理解

#6

投稿記事 by Dixq (管理人) » 6年前

お、Androidアプリ制作が目標ですか。
最近Androidアプリ開発系の本は山ほどあります。大きな書店に行って気に入るのを見つけてみるといいと思います。
また、専門書のような難しい本が嫌いであれば、JAVAを学ぶ時に最初に読む本としては「JAVAの絵本」がお勧めです。
https://www.amazon.co.jp/s/?ie=UTF8&key ... 5%E6%9C%AC
最新版でなくても初版でも大丈夫です。中古で1円で売ってます。
絵が中心でサクサク読めます。最後まで難なく読めて分かった気になれます。
もちろんこれでJAVA完全理解!とはいきませんが、最後まで読めたらAndroidStudioをインストールしてアプリを作りながら徐々にJavaを学んでいけば良いです。
まずはお決まりのHelloWorldをAndroidアプリでやり、そこから徐々にJavaの絵本やAndroidアプリの参考書を読みながら制作を進めていけば
みるみるスキルがつくと思いますよ。


追記:
私の専門はJAVA+Androidですが、趣味ではC++でゲーム制作です。
しかしC++はJAVAほど便利ではないので、ことごとくJAVAライクに動作するラッパーライブラリを作ってみたり、
DXライブラリがJAVAで動くようにJNIのdllを作ってみたりしました。
最近Kotlinにも手を出し始めています。

これからはプログラマーは上位層プログラマーと下位層プログラマーにはっきり2分しそうに思います。
モダン言語を使うとメモリ管理だとかCPUのアーキテクチャだとか理解する必要がありませんので簡単にプログラミングできます。
アプリを開発する人はある程度それでよいのです。

しかしドライバやファーウェアの開発も必要です。その人たちはメモリ管理やCPUのアーキテクチャや各SoCの仕組みを詳細に理解する必要があります。
その人たちはC言語あるいはもっと機械語に近いものを触ることが多いでしょう。
(私はこっちの専門でもあるので、結局両方必要なんですが・・。正直しばらくモダン言語で開発した後ドライバ開発すると発狂しそうです)

ゲーム開発でも今はそうです。
ゲームを作る人は、もっぱらUnityやUE4などのゲームエンジンでゲームを作ります。
上記ソフトでないとしても、なんらかの社内ツールを利用して制作をします。
一方で、ゲーム制作者がゲームを作りやすいようにUnityやUE4のゲームエンジン自体の制作をする、または社内ツールを作る人がいる。
このように2分しています。

返信

“C言語何でも質問掲示板” へ戻る