[解決済み] オブジェクト指向言語と非オブジェクト指向言語の違いは何ですか?
質問内容
Cは非オブジェクト指向言語、javaはオブジェクト指向言語という話を聞いたことがあります。どう違うのでしょうか?
どのように解決するのですか?
うわー、この人には大きなOOP用語がたくさん飛び交ってる。手続き型プログラミングから始めて、今はほとんどOOPをやっている者としては、この違いを概念的にどう考えるかです(大きな用語は抜きにして)。
C言語では、状態を保持することができる構造体というものがあります。例えば、Carという構造体を用意して、Carsのインスタンスを作成し、make、model、colorのフィールドを設定することができます。しかし、Car構造体のインスタンスに何かをするように指示することはできません。その代わり、洗車をしたければ、このように外部関数にCarインスタンスを渡す必要があります。
WashMyCar(myCar);
OOP言語では、構造体とは異なるクラスという概念が使われており、オブジェクトはそのクラスのインスタンスです。継承とかポリモーフィズムとかいう大げさな言葉は今は忘れてください(これらはクラスがなんとなくわかるようになると、もっと高度な話になります)。車の例で考えてみましょう。例えばJavaでは、Carというクラスをこのように定義することができます。
public class Car {
String make;
String model;
String color;
}
そして、こんな風に車のインスタンスを作ります。
Car myCar = new Car();
myCar.make = "Honda";
myCar.model = "Accord";
myCar.color = "Black";
これは構造体と同じようなものです。さて、OOPが異なるのは、クラスの定義を拡張してクラスメソッドを定義できることです。クラスメソッドは、常にオブジェクトに対して操作することを除けば、手続き型の関数に似ています。では、washメソッドを追加してみましょう。
public class Car {
String make;
String model;
String color;
String condition;
void washMe() {
this.condition = "clean";
}
void goOffroad() {
this.condition = "dirty";
}
}
これで、こんなことができるようになりました。
Car myCar = new Car();
myCar.make = "Honda";
myCar.model = "Accord";
myCar.color = "Black";
myCar.goOffroad();
System.out.println(myCar.condition); // dirty
myCar.washMe();
System.out.println(myCar.condition); // clean
この例がお役に立てば幸いです。もちろん、OOP(および手続き型)には、この単純な例よりもはるかに多くのことがあります。しかし、核となる違いは、自分自身のメソッドを持つオブジェクトのクラスを持つことです。
関連
-
[解決済み】非閉鎖文字リテラルエラー
-
[解決済み】予期しない型エラー
-
[解決済み] この2回(1927年)を引き算すると、なぜおかしな結果になるのでしょうか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】リンクリストの負の値の数でnegativeCntrを代入する
-
[解決済み] if / for / while 内で "Missing return statement" が発生する。
-
[解決済み】popBackStack()とreplace()の操作はどう違うのですか?
-
[解決済み】Doubleはdereferencedできない?
-
[解決済み】不正な反射的アクセスとは?
-
[解決済み】Javaを使用するSelenium - ドライバの実行ファイルのパスは、webdriver.gecko.driverシステムプロパティで設定する必要があります。
-
[解決済み】スレッド "main "での例外 java.util.NoSuchElementException
-
[解決済み】Java Error "Exception in thread "main" java.util.InputMismatchException" Array プログラムで発生。
-
[解決済み】接続Java - MySQL : 公開鍵の取得は許可されていません。
-
[解決済み】 executeQuery()でデータ操作文が発行できない。)