プログラミングにおいて

Java言語などのオブジェクト指向とは

「クラス(設計図)からインスタンス(実体)を量産できる。」がオブジェクト指向ではないプログラミング言語との決定的な違いなのでしょうか?

またオブジェクト指向とオブジェクト指向ではない言語の決定的な違いや
実際に実務において経験した感覚的な違いなどがあれば教えてください。

インターネットに乗っていない些細なことでも構いません。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

数学の世界では、関数(写像) の引数には定義域というものがあって、範囲外の値を入力することは許されません。



しかし、定義域を変えて新しい関数を定義することはできます。

例えば対数関数 log x の場合、定義域は x>0 ですが、x=0 の時、log 0=-∞ と定義することもできます。

高校数学では、x<0 を可能にするために log|x| とすることが多いのですが、多値関数の概念を学ぶと

cosπ+i sinπ=e^(iπ)
log(-1)=i(2n-1)π

のように負の対数も定義可能になります。

オブジェクト指向の概念はこれと似ており、入力側の型や範囲を拡げて定義することで既存のプログラムの書き換えをする手間を減らそうというものです。
    • good
    • 0

>「クラス(設計図)からインスタンス(実体)を量産できる。

」が
>オブジェクト指向ではないプログラミング言語との決定的な違いなのでしょうか?

見当違いですね。これだけなら少々面倒ですがCでも出来ます。

オブジェクト指向は考え方であり設計手法です。それを表現しやすいように
設計されている言語がオブジェクト指向言語です。

一般にオブジェクト指向言語は

⚪フィールドやメソッドを纏めてカプセル化した「クラス」と呼ばれる
モジュール単位を持つ。
⚪クラスの継承をサポートする。

が最低限かな。通常はこれに加えて、総称性とかインターフェースとか
様々な機能を満載してます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Qオブジェクト指向で設計・プログラミングできるようになるために…

どう勉強すればいいのでしょうか?

一応javaを少しずつ勉強していて、簡単なアプレットやウィンドウアプリケーションは作れるようになったと思うのですが、オブジェクト指向で設計?モデリング?となると、手が出ません…。

また、デザインパターンというもの(よくは知りません)を勉強するのとオブジェクト指向を勉強するのとは関係がありますか?

よろしくお願いします。

Aベストアンサー

オブジェクト指向プログラミングにデザインパターンはとても重要ですが、中級者以上向けの内容ですので、質問者さんにはまだ時期尚早かもしれません。まずはもっとプログラミングに慣れることが必要だと思います。オブジェクト指向は自分で試行錯誤を経験しないと、なかなか身につかないものなので。こうゆうソフトを作りたい、という目標があれば、勉強する道筋や方向性も見つかるのですが。

Q昔のプログラミングと比較して書いてあるオブジェクト指向の本を探しています。

JAVAもしくはC++でも良いのですが、たとえば以前はC言語だとこう作っていたものは、JAVAではこう作る。といった比較で書いてある書籍はありませんでしょうか?初心者向けでなくてかまいませんよろしくお願いします。

Aベストアンサー

一応、あることはあるんですが、目次の所を見ても分かる通り、「オブジェクト指向」の本ではなく、「アルゴリズム」の本、といったような位置付けかと。

「同時に覚えるC++,Java,C言語 3つの言語を例題形式で習得」
http://www.7andy.jp/books/detail?accd=30899164

出版社の方も今ではなくなっているらしいですし(なので、仕方なくセブンアンドワイを借用。)、何せ今から5年以上も前に出版された代物ですから、JDKも1.3系だったと思われます。新品はよっぽど探さないと無理なんじゃないかな。(ちなみに、ユーズドでしたら、今だとAmazon.co.jpの方にはまだあるらしいです。)

それ以外では、各都道府県ごとの中央図書館とか、大学の図書館とかになってきますかね。

Qオブジェクト指向の言語

シスアド受験者です。テキストにジャバはオブジェクト指向の言語だと書いてあります。オブジェクト志向とは具体的にどのようなことなのか教えていただけないでしょうか。よろしくお願いいたします。

Aベストアンサー

文章で理解しようとすると、どんどん深みにはまるかも。
クラスからインスタンスをつくったり、他のクラスを継承したりJavaでやっているうちに理屈じゃなくて体で理解するもんだと思いますが・・・

参考URL:http://e-words.jp/w/E382AAE38396E382B8E382A7E382AFE38388E68C87E59091.html

QJavascriptのオブジェクト指向プログラミングとイベント、thisの扱い

Javascriptを勉強中です。
オブジェクト指向プログラミングを習得しようと努力しております。

あるHTML要素(例ではelm)にクリックイベントを付加する際、オブジェクト内のmyFuncを呼ぶのに以下のようにthis.myFuncとすると、thisがHTML要素となるためにエラーが出ます。
elm.addEventListener("click", this.myFunc, false);
これを回避する目的で
elm.addEventListener("click", (function(that) { return function() { that.myFunc(); } } )(this), false);
とオブジェクト内からクロージャを使って定義することで解決することは分かったのですが、このイベントを削除するのに、
elm.removeEventListener("click", (function(that) { return function() { that.myFunc(); } } )(this), false);

elm.removeEventListener("click", function() { that.myFunc(); }, false);
としても除去することが出来ません。この場合はどのようにイベントを削除することが出来るのでしょうか?
そもそもクロージャを使った定義部分に問題があるのでしょうか?
どうぞ教えていただきますようお願いいたします。

Javascriptを勉強中です。
オブジェクト指向プログラミングを習得しようと努力しております。

あるHTML要素(例ではelm)にクリックイベントを付加する際、オブジェクト内のmyFuncを呼ぶのに以下のようにthis.myFuncとすると、thisがHTML要素となるためにエラーが出ます。
elm.addEventListener("click", this.myFunc, false);
これを回避する目的で
elm.addEventListener("click", (function(that) { return function() { that.myFunc(); } } )(this), false);
とオブジェクト内からクロージャを使って定義...続きを読む

Aベストアンサー

#2,9です。#9の補足を読みました。

> 今回1つのオブジェクトで全てを定義しようとしたのは、別の方の回答にも書いたのですが、そのような例を見かけたからです。
差し支えなければ、その例を掲示してもらえないでしょうか?
highslide.js を読んでみましたが、

document.onmousedown = hs.mouseDownHandler;

のように宣言しており、thisは見あたりませんでした。

> Javascriptは複数プログラムの共存が頻繁で、関数名の衝突が起きやすく、それを避ける保険として1つのオブジェクトにするという発想もあるかと思います。
関数名の衝突を避けるために一つのオブジェクトに、という発想にはちょっと違和感を感じますね…。
この発想だと一つのスクリプトにまとめるために、別々の機能を一つのオブジェクトにまとめてしまうこともあるように思います。
例えば、匿名関数で括ってみてはどうでしょうか?(#9 のコードも匿名関数で括られています)

----
(function(){
var hoge = {
start:function(){ ; },
stop:function(){ ; },
end:function(){ ; }
};
var foo = {
start:function(){ ; },
stop:function(){ ; },
end:function(){ ; }
};
hoge.start();
foo.start();
})();
----

とか、外部スクリプトにすることも踏まえて

---
window./*@cc_on @if(@_jscript) attachEvent('on' + @else @*/addEventListener(/*@end @*/ 'load', function (evt) {
// 処理
},false);
---

とか。
任意のスクリプトで呼び出せるようにするならば、ローカルなオブジェクトでは問題がありますが、最終的にグローバルオブジェクトとなっていればいいはずです。

---
(function(){
function a(){ ; }
function b(){ ; }
function d(){ ; }
window.drag = { start:a, stop:b, end:c }// グローバルなオブジェクト初期化
})();
---

google-code-prettify も同じような組み方をしているので、参考になるかもしれません。
http://code.google.com/p/google-code-prettify/

# 蛇足ですが、メモリリークに関しては「循環参照 javascript」「javascript クロージャ メモリリーク」などで検索すれば関連情報がHITします。

#2,9です。#9の補足を読みました。

> 今回1つのオブジェクトで全てを定義しようとしたのは、別の方の回答にも書いたのですが、そのような例を見かけたからです。
差し支えなければ、その例を掲示してもらえないでしょうか?
highslide.js を読んでみましたが、

document.onmousedown = hs.mouseDownHandler;

のように宣言しており、thisは見あたりませんでした。

> Javascriptは複数プログラムの共存が頻繁で、関数名の衝突が起きやすく、それを避ける保険として1つのオブジェクトにするという発想...続きを読む

Qnewしないインスタンス?実体化しなくてもいいの?

JAVAについて教えて下さい。


ServletContext application = getServletContext();

の成り立ちの意味なのですが、newがなぜないのか教えて下さい。

~自身の考え~
(1)サーブレットコンテキストというクラスをインスタンス化して
(サーブレットコンテキスト 変数A = new サーブレットコンテキスト();)
    ↑                         ↑
  クラス                       クラス

(2)変数Aドットメソッド()によって、代入変数Bを作り上げる
(サーブレットコンテキスト 代入変数B = 変数A . メソッド();)

(3)のはずが、上記の式にはnewがありません。

なんで??
~~


~疑問点~
もしかしたらHttpServletでimportしているからそこでnewインスタンス化宣言している?
だとするならどのような式になっているのでしょうか。



もしくはメソッドのF3キーとして上位をたどったときに出てきた
public abstract class GenericServlet
implements Servlet, ServletConfig, Serializable
{
public ServletContext getServletContext()
{
return getServletConfig().getServletContext();
}


として抽象クラスが出てきましたが、どこにもnew実体化していません。
よろしくお願いいたします。

JAVAについて教えて下さい。


ServletContext application = getServletContext();

の成り立ちの意味なのですが、newがなぜないのか教えて下さい。

~自身の考え~
(1)サーブレットコンテキストというクラスをインスタンス化して
(サーブレットコンテキスト 変数A = new サーブレットコンテキスト();)
    ↑                         ↑
  クラス                       クラス

(2)変数Aドットメソッド()によって、代入変数Bを作り上...続きを読む

Aベストアンサー

どこかで作られたインスタンスを受け取っています。

getServletContext() の呼び出し先をたどったみたいですが、
さらにそこで別の呼び出しをしているので、そのもっと先です。
そもそも、呼び出し関係をたどっているだけでは見つかりません。
newしているところは簡単には見つからないでしょう。

こういうときは、インスタンスを受け取れることだけ理解すれば十分です。
それより、「インスタンスを受け取れることだけ理解すれば十分」を実現している仕掛けのような、
基本的なところを勉強する方が重要です。

自分でnewせず、他のどこかで作られたインスタンスを受け取ることもあります。
プログラムの書き方には、ずっと多様なパターンがあります。

なお、import とインスタンス化は関係ありません。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報