こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Javaの理論的な専門書

Javaの理論的な専門書を探しています

おすすめあれば教えてください

オブジェクトとは?
など哲学的な内容です

投稿日時 - 2018-08-07 15:59:17

QNo.9525491

すぐに回答ほしいです

質問者が選んだベストアンサー

クラスの継承はザックリと言うと系統樹のような感じです(添付画像の名前が付いてる所がクラスに対応すると言う感じです)。
添付画像は下記ページから引用。

哺乳類
https://ja.wikipedia.org/wiki/%E5%93%BA%E4%B9%B3%E9%A1%9E

投稿日時 - 2018-08-07 19:53:02

お礼

ありがとうございます

投稿日時 - 2018-08-08 01:05:05

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(8)

ANo.8

ちなみに知らない間にサーバー・サイドJavaも大きく様変わりしてしまったようです。
現状では特に必要ないかもしれませんが、(どのように様変わりしたか)大まかにでも知っておいた方が良いでしょう。

(昔々)サーバー・サイドJavaには、「JSP(JavaServer Page)」、Servletについては「Java Servlet」、サーバー・サイドJava Beanについては「EJB(Enterprise JavaBeans)」の3系統が有りました。

サーバー・サイドJavaの進化形としてJSF(JavaServer Faces)フレームワークが登場しました。
「JSP(JavaServer Page)」の代替として「Facelets(XHTML)」が、「Java Servlet」の代替として「Faces Servlet」(+「faces-config.xml」)が、サーバー・サイドJava Beanについては(「Managed Bean」が追加され)「EJB(Enterprise JavaBeans)」、「Managed Bean」となりました。
ちなみに「Facelets(XHTML)」は「JSP(JavaServer Page)」とは違いJava言語系ではなく、XHTML系になります。
「Faces Servlet」は完成されたコントローラであり、ザックリと言うと「faces-config.xml」に「ページ遷移ルール」言語を記述することにより、「Faces Servlet」は それを解釈してページを遷移するようです(プログラマーはFacesServletを記述する必要は無いようです、と言うかプログラマーはFacesServletを記述してはならないようです)。
ただし、「ManagedBeanは次のJSFバージョンで無くなる予定」だそうで、代替として(ManagedBeanが統合された?)「CDI(Contexts and Dependency Injection)/EJB(Enterprise Java Beans)」になるようです(意味合いとしては「EJB(Enterprise JavaBeans)」と「CDI(Contexts and Dependency Injection)/EJB(Enterprise Java Beans)」は同じものですので、代替として(ManagedBeanが統合された?)「EJB(Enterprise Java Beans)」になると思われます)。

投稿日時 - 2018-08-19 03:32:44

ANo.7

ちなみに知らない間に「Thread」は非推奨になっているようです。

Java EE 7で並列処理がケタ違いに速くなる! 使いこなしのポイントは?──Java Day Tokyo 2013レポート
https://blogs.oracle.com/wlc/java-ee-7-java-day-tokyo-2013

>Java EE 7では、「Concurrency Utilities for Java EE」の導入により、マルチコア・プロセッサの能力を余すことなく引き出し、並列処理を格段に速く行えるようになる。

↑このJava EE(Enterprise Edition)はサーバー側の開発環境の話です。

>2004年にJava SE 5でConcurrency Utilitiesを導入。

↑このJava SE(Standard Edition)はクライアント(一般の個人のPC)側の開発環境の話です。

>2011年にリリースされたJava SE 7ではFork/Joinに対応。さらに、2014年にリリース予定のJava SE 8ではラムダ式をサポートし、これまで以上に並列処理が簡単に記述できるようになるという。

>「スレッド処理に関して、いまだにJavaの登場当初からのnew Thread(r).start(); などと書いているプログラムを多く見かけるが、もうこのような実装はやめたほうがよい」とアドバイスした。

>そこで現在、スレッドを直接生成する方法に代わって推奨されているのが、Java SE 5 から導入されたConcurrency Utilitiesである。Concurrency Utilitiesは並列処理の実装を簡素化するために導入されたAPIで、これを利用することによってスレッドのライフサイクル管理が簡単になるほか、スケーラビリティやパフォーマンスが大幅に向上するのだという。
>このデモでは、シングルスレッドやマルチスレッドのプログラムが256個のうち一部のプロセッサしか利用できないのに対して、Concurrency Utilitiesを使った場合は256個のプロセッサの負荷がほぼ同時に限界まで達し、瞬時に処理を終えることが確認できた。
>「Javaはパフォーマンスが悪いという声を聞くことがあるが、それは間違い。パフォーマンスが悪いのは、いまだに古いやり方でプログラムを書いているからにすぎない。Concurrency Utilitiesでマルチコア・プロセッサの能力をフルに使い切れば、Javaは驚異的なパフォーマンスを発揮する」

投稿日時 - 2018-08-15 22:07:23

ANo.6

Java 5(jdk 1.5)以降では(「プリミティブ型、オブジェクト型」の自動変換)「オートボクシング、アンボクシング」が導入されました。
「オートボクシング、アンボクシング」以外はオブジェクト指向プログラミングとは関係ありませんが、知っておいて損はないでしょう。

投稿日時 - 2018-08-12 20:27:15

お礼

ありがとうございます

投稿日時 - 2018-08-13 00:49:05

ANo.5

「オブジェクト指向」とか簡単にできちゃう人は自分基準でモノを話すので参考にならないでしょう、そう言う人は「難しい事を考えずに普通にプログラム組めば良いんだよ」とか言っちゃたりします。

オブジェクト指向プログラミング言語は、ざっくりと言うと再利用によってプログラマーのヒューマン・エラー(バグ)を低減させるのがセールス・ポイント(再利用とはソースの一元化も含まれる、ソースの一元化を徹底させる事でデバッグを低減させる事ができるが、大きなプロジェクトだと難しいかもしれない)。
昔のJavaなどではObject型に何でもかんでもブチ込んでしまうような場面も多々ありましたが、Java 5(jdk 1.5)以降ではGenerics(ジェネリクス)「総称型」がサーポートされ、安全性と再利用性が両立しました。
Generics(ジェネリクス)「総称型」のサーポートにより本当の意味での「ヒューマン・エラー(によるバグ)を低減させる」と言う理念が実現できたと言って良いでしょう(つまり、それ以前では その理念が実現できていなかった)。

★(1).クラス(設計図)からインスタンス(実体)を量産できる。
例えば、自動車の設計図(クラス)が有れば、実物(インスタンス)の自動車を (10台でも、20台でも)いくらで製造できると言う感じ。

★(2).クラスを継承し機能を拡張できる。
この場合、当然ゼロから作るのではなく継承元のクラスを活用する事ができるので、その分 労力の削減でき、手間が少なくなるので その分 プログラマーのヒューマン・エラー(バグ)も多少 低減できます。

★(3).ラップ(分かりやすく例えるとプラグイン)によるオブジェクトの再利用。
様々なオブジェクトを乗せ変えて活用させる事ができます(実際の PC で分かりやすく例えるなら、NVIDIAのグラフィック・ボードがさせるとか、AMDのグラフィック・ボードがさせるとか、その他のメーカのグラフィック・ボードがさせるとか、そんな感じで機能を拡張できる)。

★(4).オブジェクト志向プログラミングのデメリットは肥大化です。
つまり、上記のように再利用できないモノはオブジェクト化のメリットがなく、デメリットだけだと言って良い程です。


※注意点としては、オブジェクト指向プログラミングではクラスの継承ばかりがクロズアップされますが、クラスの継承では対応できない場合もあると言う認識が必要です。
その場合は、ラップ(分かりやすく例えるとプラグイン)を考慮してみて下さい。

投稿日時 - 2018-08-11 17:47:45

お礼

ありがとうございます

投稿日時 - 2018-08-12 10:43:46

ANo.4

質問者さんはJavaのオブジェクト指向について、というよりもオブジェクト指向とは何ぞや、という所に疑問を持たれていると思います。
そういった視点で、おすすめの書籍をご紹介します。

・いちばんやさしいオブジェクト指向の本[第二版]
・わかりやすいJava オブジェクト指向編

投稿日時 - 2018-08-08 18:49:36

お礼

ありがとうございます

投稿日時 - 2018-08-09 05:26:33

ANo.3

>回答No.2 amanojaku1

クラスは設計図です、クラスからインスタンス(実体)を いくらでも生成できます。
例えば、自動車の設計図(クラス)が有れば、実物(インスタンス)の自動車を (10台でも、20台でも)いくらで製造できると言う感じです。

投稿日時 - 2018-08-07 20:03:30

お礼

ありがとうございます
本でおすすめあれば教えてください

投稿日時 - 2018-08-08 01:06:10

ANo.1

オブジェクト志向が知りたければ
「オブジェクト入門」なる本があります。

javaもオブジェクト思考ではあるけれど
言語の考え方も入っていますから。

投稿日時 - 2018-08-07 17:29:32

お礼

ありがとうございます

投稿日時 - 2018-08-07 19:12:23

あなたにオススメの質問