質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Q&A

解決済

3回答

1193閲覧

ソースコードの読み方

guijiu

総合スコア35

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

0グッド

0クリップ

投稿2021/11/28 01:56

編集2021/11/28 02:48

次のクラスを見たときに、プログラマーならこのソースコードを見ただけ(“・・・”で省略した部分を見ずして、またサブクラスなどを見ずして、たったこれだけの情報量)で「工場とは、『createメソッドでProductのインスタンスを生成するもの』と規定している」と読み取るのでしょうか?

Java

1public abstract class Factory { 2 public final Product create(String owner){ 3 ・・・ 4 } 5 ・・・ 6}

結城本、「増補改訂版 Java言語で学ぶデザインパターン入門」p48 第4章Factory Methodパターンからの抜粋です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2021/11/28 02:06

Product final Product create(...) ではなくて、 public final Product create(...) ではありませんか?
guijiu

2021/11/28 02:26

ご指摘のとおり。 修正します。
guest

回答3

0

ベストアンサー

読み取るというよりは、読み取りたいという期待ですね。
なので、ネーミングと処理の実態が違うと、(自主規制)って、なります。

本の目次やタイトルを見て”こうゆうことが書いてあるんだろうな”と思うのと同じ

何が書いてあるかは、実際に読まないとわかりません(本も、ソースコードも)

追記
ちょっと、読み飛ばしてました。

規定している

というのであれば、そうですね。
いわゆるインターフェースやシグニチャと呼ばれるものなので、内容には関係なく
規定しているとはいえます。

購入とは、お金を受け取って商品を渡します。
お金が足りない場合は例外が発生します。

みたいのが

public Shohin buy(int money) throws NotEnoughException

という一文だけで、中身はともかく、そのように規定していると読みます。

投稿2021/11/28 02:08

編集2021/11/28 02:14
momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guijiu

2021/11/28 02:25

買い物クラスBuyの説明は、大変わかりやすいですね。理解できました。 ありがとうございます。
guest

0

コードとして「Factory (を継承した)クラスの create メソッド は Product を返す」と書いてあります。

投稿2021/11/28 05:37

jimbe

総合スコア12648

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guijiu

2022/10/03 13:33 編集

(返信が遅くなり申し訳ありません。恐らく見落としていたかもしれません。ごめんなさい。) 確かに「 create メソッド は Product を返す」と書いてありますね。私の理解度の低さが恥ずかしいです。 ``` public abstract class Factory { public final Product create(String owner){ ・・・ } ・・・ } ```
guest

0

必ずしもそうだとは限りませんが、その本の中ではそうだと思います。
(ちなみに私はその本を読んだことがない(はず)です)

本のタイトルから考えると、デザインパターンの説明のようです。

デザインパターンのFactoryパターンはそのためのものです。つまり、他のオブジェクトを生成するための生成器ってところですね。単に new して生成するだけなら要りません。でもたとえば日付系のオブジェクトで、「現在の時間で」やるとかみたいな、生成方法を隠したいことがあります。その場合に使うようです。

Product final Product create(String owner)public final Product create(String owner)のことだとします。
そうすると、メソッドの基本構造は、

アクセス修飾子 [final] メソッドの型 メソッド名(引数){ // なんらかの処理 return 戻り値; }

となります。ただし、メソッドの型 = 戻り値の型です。なので、public final Product create(String owner)では、publicでfinalな、String型を引き受けてProductを返すcreateメソッドということになります。

ただし、常にこの考えが適用できるわけではありません。

Java

1class Test{ 2 public void print(){ 3 // スレッドを止める 4 } 5}

みたいなめちゃくちゃなコードだと意味が変わってきます。メソッド名からは「表示せよ」と読めますが、中身は「スレッドを止めているだけ」…いや、まったく違うやん。みたいな。

この手合いでないなら、つまりちゃんと名前が付けられているのなら推測はしやすいです。

投稿2021/11/28 02:24

BeatStar

総合スコア4958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guijiu

2021/11/28 02:41

理解に自身が持てました。ありがとうござます。
guijiu

2021/11/28 02:55

追伸:  確かに世の中には、print()と書いてスレッドを止める奴もいますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問