1: (:.;゚;Д;゚;.:) 2018/10/24(水) 15:58:19.083 ID2zBz2hGJp.rom
クラスとインスタンスとコンストラクタについてらわかりやすくせつめいしてくれ
わけわからんわ
b4657ad8.jpg








75: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:13:49.875 ID:4bbwmKpX0.rom
>>1は「newがわからない」と言ったのではなく「コンストラクタがわからない」と言っているので、
newとは分離してコンストラクタだけを考えなくてはならないのだ

77: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:16:42.660 ID:HkPelrVZ0.rom
>>75
公式資料まで探してやってお前の間違いを指摘してやったんだからいい加減感謝して間違いを素直に認めろよ

A class contains constructors that are invoked to create objects from the class blueprint.
と明確に書かれているのに無理な反論するな
素直に間違いを認められないのはむしろ恥ずかしいと自覚しよう

78: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:18:45.441 ID:4bbwmKpX0.rom
>>77
>>76

107: (:.;゚;Д;゚;.:) 2018/10/24(水) 21:15:41.147 ID:4bbwmKpX0.rom
>>77
あとはフィールド定義時に代入してるやつも、デフォルトコンストラクタでもデータ初期化されるパターンではあるな
ただ、俺は「super呼び出しとか定義時代入とかはコンストラクタの前で行なわれるけど、それはコンストラクタ以前の初期化処理では?」と思っている

110: (:.;゚;Д;゚;.:) 2018/10/24(水) 21:25:15.582 ID:HkPelrVZ0.rom
>>107
superを明示的に記述して引数を渡せばsuper()は呼び出されないんだからそれは違う

メモリ確保をコンストラクタが行うかどうかは実装依存だな

8: (:.;゚;Д;゚;.:) 2018/10/24(水) 16:00:40.026 ID:f8AVINQCa.rom
アンサイクロペディアのオブジェクト指向読んでこい

9: (:.;゚;Д;゚;.:) 2018/10/24(水) 16:00:41.648 ID2zBz2hGJp.rom
いや、平気ちゃうやろ
何かに例えるとかしてわかりやすく教えて
教科書みてもいまいちイメージつかんわ

10: (:.;゚;Д;゚;.:) 2018/10/24(水) 16:01:28.117 ID:IY+1mS3O0.rom
道具の便利さって使って初めて分かると思うのよ

12: (:.;゚;Д;゚;.:) 2018/10/24(水) 16:03:37.959 ID2zBz2hGJp.rom
フィールドってんなんだよ

13: (:.;゚;Д;゚;.:) 2018/10/24(水) 16:04:57.489 ID:lMebwjBC0.rom
クラスの例え話って分かった気になるけど、実装には何の役にも立たん

23: (:.;゚;Д;゚;.:) 2018/10/24(水) 17:36:41.148 ID:7ja1ByIlM.rom
>>13
例え話はわからない奴をわかった気にさせるためのものでしかないから
クラスはクラスでしかないしインスタンスはインスタンスでしかない

14: (:.;゚;Д;゚;.:) 2018/10/24(水) 16:13:58.992 ID:yySKItoXd.rom
教科書読めよ

15: (:.;゚;Д;゚;.:) 2018/10/24(水) 16:15:06.726 ID:8uQnitIcd.rom
クラス ある概念の定義
インスタンス クラスに従って生成されるデータ
コンストラクタ インスタンスが生成される時に呼び出される処理

17: (:.;゚;Д;゚;.:) 2018/10/24(水) 16:21:47.723 ID2zBz2hGJp.rom
>>15
コンストラクタについてもっと噛み砕いてくれ

18: (:.;゚;Д;゚;.:) 2018/10/24(水) 16:23:39.981 ID:4bbwmKpX0.rom
>>17
そのまんまだぞ
newの際に自動的に呼び出されるだけの関数

21: (:.;゚;Д;゚;.:) 2018/10/24(水) 16:35:17.693 ID:LFMOlef7p.rom
>>17
クラス : 人間という種
インスタンス : お前という人間の一個人
コンストラクタ : 中出しSex

22: (:.;゚;Д;゚;.:) 2018/10/24(水) 16:41:52.621 ID2zBz2hGJp.rom
>>21
やっぱコンストラクタだけわからんわ、

16: (:.;゚;Д;゚;.:) 2018/10/24(水) 16:21:00.751 ID:4bbwmKpX0.rom
クラスの存在はまず忘れて、インターフェースの存在だけ知れ

19: (:.;゚;Д;゚;.:) 2018/10/24(水) 16:26:29.355 ID:k4PZp7c5d.rom
というか自分でプログラム作らないで分かるわけないじゃん
プログラムは勉強じゃなくて経験だぞ
勉強してるようじゃ一生プログラムなんて作れるようにならない

サッカーの教本を読んでるだけでは
サッカーが上手くなるわけないし
教本に書いてある事を本質的に理解できないのと同じこと

20: (:.;゚;Д;゚;.:) 2018/10/24(水) 16:33:15.106 ID:98xoEA2D0.rom
サッカーボールに例えると
クラスはサッカーボールの概念
インスタンスでサッカーボールの皮を作成
そのままだとサッカーボールに空気が入っていないのでコンストラクタで空気を注入
サッカーボールを使いたいときは空気がはいったぱんぱんのボールを使いたいから皮を作ったときに空気も入れてしまおうみたいな

まぁjavaやったことないから適当に言ってるけど

24: (:.;゚;Д;゚;.:) 2018/10/24(水) 17:40:49.331 ID:HkPelrVZ0.rom
来ましたよ
せっかく分かりやすく説明してやろうと思ったけど1がいない

25: (:.;゚;Д;゚;.:) 2018/10/24(水) 17:42:29.635 ID:olNZD8O1M.rom
じゃあお前今から犬なって命令がコンストラクタ

26: (:.;゚;Д;゚;.:) 2018/10/24(水) 17:42:47.569 ID:SHwhJDsEr.rom
案の定、ろくに説明できない奴らがお説教してるだけでワロタ

27: (:.;゚;Д;゚;.:) 2018/10/24(水) 17:46:30.134 ID:Pv/81n2Jd.rom
コンストラクタはインスタンスの内部パラメータを初期化したりするのに使う
関数呼び出したりするときにthis.なんたらってメンバー変数を呼び出したりするけどそれが定まってないとエラーになる

28: (:.;゚;Д;゚;.:) 2018/10/24(水) 17:48:16.292 ID:HkPelrVZ0.rom
>>27
はい間違ってる

29: (:.;゚;Д;゚;.:) 2018/10/24(水) 17:49:09.415 ID:Pv/81n2Jd.rom
>>28
後学のためにどこがどう違うか説明して

30: (:.;゚;Д;゚;.:) 2018/10/24(水) 17:50:42.288 ID:HkPelrVZ0.rom
>>29
オブジェクトが存在していない状況で関数がthisを参照する状況なんてないから

35: (:.;゚;Д;゚;.:) 2018/10/24(水) 17:54:23.652 ID:Pv/81n2Jd.rom
>>30
コンストラクタのなかでthisを使ってメンバー変数を設定することはありえないってこと?

37: (:.;゚;Д;゚;.:) 2018/10/24(水) 17:56:50.105 ID:HkPelrVZ0.rom
>>35
違う

38: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:00:14.503 ID:Pv/81n2Jd.rom
>>37
勘違いしてるかもしれない
状況としては「インスタンス生成したもののコンストラクタによるメンバー変数の初期化に不備があって、そのメンバー変数を参照する関数を呼び出したときにエラーを出す」という話

40: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:09:53.539 ID:HkPelrVZ0.rom
>>38
thisそのものについてじゃなくて
this.attributeのattributeについて語っているのか
だったら2つ目の文章は合ってるか

ただ、そうするとthisで参照されるオブジェクトが生成されるということについては何も触れていないから
コンストラクタの説明としては不適切

41: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:26:57.900 ID:Pv/81n2Jd.rom
>>40
二つ目の段落の内容は「インスタンスの内部パラメータを初期化したり」と何か違うの?

42: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:28:41.924 ID:HkPelrVZ0.rom
>>41はオブジェクトがいつ生成されるのかまったく説明してない

43: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:29:53.139 ID:4bbwmKpX0.rom
>>42
オブジェクト生成はコンストラクタの仕事じゃないんだからこの際全く関係ないだろ

45: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:34:15.027 ID:HkPelrVZ0.rom
>>43
はいダウト
a constructor (abbreviation: ctor) is a special type of subroutine called to create an object
https://en.wikipedia.org/wiki/Constructor_(object-oriented_programming)

クラスとインスタンスとコンストラクタについてらわかりやすくせつめいしてくれ
と聞かれているんだからオブジェクトが生成されるタイミングについて記述するのは当たり前

48: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:39:23.290 ID:4bbwmKpX0.rom
>>45
「コンストラクタについて」であって「newについて」ではないのだから、メモリ確保は終わった後の話をするのが正解

50: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:41:20.210 ID:HkPelrVZ0.rom
>>48
英語苦手か?
a constructor (abbreviation: ctor) is a special type of subroutine called to create an object

それと日本語も苦手か?
クラスとインスタンスとコンストラクタについてらわかりやすくせつめいしてくれ
と聞かれているんだからオブジェクトが生成されるタイミングについて記述するのは必須

52: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:46:26.551 ID:4bbwmKpX0.rom
>>50
それは「コンストラクタが呼ばれないとメモリ領域が有効なオブジェクトになることはない」ということを示してるだけの文章だぞ
国語苦手か?

56: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:48:08.205 ID:HkPelrVZ0.rom
>>52
「それ」は「コンストラクタが呼ばれないとメモリ領域が有効なオブジェクトになることはない」ということを示してるだけの文章だぞ
の「それ」はどれだよ

73: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:12:14.505 ID:4bbwmKpX0.rom
まずひとつ言えることは、俺は>>43で間違ったことを言ってた、ってことだ
「オブジェクト生成はコンストラクタ『だけ』の仕事じゃない」が正しかった

74: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:13:49.093 ID:HkPelrVZ0.rom
>>73
まずそこは間違っているな
そんでnewがコンストラクタ呼び出し以外の役割をしていると言い張っているのが第二の間違い

76: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:15:29.334 ID:4bbwmKpX0.rom
>>74
>The new operator instantiates a class by allocating memory for a new object and returning a reference to that memory. The new operator also invokes the object constructor.
new演算子は「メモリを確保し」かつ「コンストラクタの呼び出しもする」とある
newは「メモリの確保」という「コンストラクタ呼び出し以外の役割」をしている

81: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:26:34.000 ID:HkPelrVZ0.rom
>>76
newでメモリが割り当てられるというのは確かにそうか
しかし、クラスとインスタンスとコンストラクタという質問に対して
オブジェクト生成のタイミングについて記述しないのは不適切だし
コンストラクタを呼び出したタイミングでオブジェクトが生成されると回答するのが正しいと思うがな
コンストラクタの役割はオブジェクトの生成だよ

82: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:30:21.202 ID:4bbwmKpX0.rom
>>81
確かに、初心者に「コンストラクタ」と言われたら、
本当にコンストラクタの話だけするよりは、関係しそうなあたり全体を全部説明するほうが親切ではあるか

84: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:33:45.182 ID:HkPelrVZ0.rom
>>82
言語実装まで問われていないなら
コンストラクタがオブジェクトを生成する
というのが正解だろ

Javaも
コンストラクタがオブジェクトを生成する
というイメージに沿って実装している
詳細まで見ると微妙なずれがあったとして
コンストラクタとは?という質問に詳細な実装を回答するべきではなく
本来的な姿を回答し、可能ならばその上で特定の実装についても補足するというのが望ましい回答であろう

87: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:41:06.688 ID:4bbwmKpX0.rom
>>84
論理的な意味で言うのなら、メモリ確保なんて低級な処理を我々は考える必要はないため「コンストラクタが」でいいが、
それでは何故コンストラクタが呼ばれた時点では未生成のはずのオブジェクトに対してthisが使えるのかの説明は難しい
そういう点で、「コンストラクタが生成する」と言うのには違和感があるんだよな

93: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:53:26.139 ID:HkPelrVZ0.rom
>>87
メモリ割り当てだけを実行してデータ初期化を行わないパターンがあり得るなら
コンストラクタとメモリ割り当てを概念的に区別する必要が生じるけど
現実にはメモリ割り当てとデータ初期化は一緒に行われている

オブジェクト指向が提唱された時点でのコンストラクタの定義を調べているけどなかなか見つからない
オブジェクト指向が提唱された時点ではコンストラクタがオブジェクトを生成すると定義されていると思うんだがなあ

96: (:.;゚;Д;゚;.:) 2018/10/24(水) 20:00:42.977 ID:4bbwmKpX0.rom
>>93
デフォルトコンストラクタ任せにする時は、「データ初期化を行なわないパターン」と言えるのでは?
あるいはメンバーを伴わず副作用もない、関数型インターフェースを実装したクラス

あと実装の話にはなってしまうが、実際にはコンストラクタの前に仮装関数テーブルの初期化やスーパークラスのコンストラクタ呼び出し等が行なわれている
コンストラクタだけがデータ初期化をするわけではないので、
コンストラクタは「オブジェクトの構築のうち、ユーザーが定義した部分に関わること」でしかないのではなかろうか

99: (:.;゚;Д;゚;.:) 2018/10/24(水) 20:08:01.931 ID:HkPelrVZ0.rom
>>96
デフォルトコンストラクタ任せにするときはnullに初期化されると認識すべきだろ

SmallTalkは全然知らないんだがこれとか見ると
http://swing.fit.cvut.cz/projects/stx/doc/online/english/getstart/tut_2.html
初期のオブジェクト指向ではコンストラクタ内で変数を割り当てていたみたいだな

つまり

constructor(int i) {
int attribute;
attribute = i;
}

だったものが

class Class {
int attribute;

constructor(int i) {
attribute = i;
}
}

に進化したようだ

本来的にはコンストラクタがメモリ割り当ても行っていたんだと思うぞ

102: (:.;゚;Д;゚;.:) 2018/10/24(水) 20:55:54.022 ID:4bbwmKpX0.rom
>>99
コンストラクタを呼び出した時点で既にnull初期化されてるわけだから、
nullに初期化されるのはコンストラクタの仕事じゃなくて、コンストラクタを呼び出す側の仕事だと思うわけよ
ユーザー定義関数としてのコンストラクタでないというだけで、広義のコンストラクタの仕事ではあると思うが

それが真実であれば、つまりコンストラクタは本来的には現代におけるnewを含む処理で、
現代ではメモリ確保関連が自動化されているというだけだ、ってことか
だが「メモリ割り当ても行なっている」んだとすれば、コードは

constructor(int i) {
 this = malloc(sizeof(int));
 this.i = i;
}

とかになるんじゃね?

104: (:.;゚;Д;゚;.:) 2018/10/24(水) 21:06:15.137 ID:HkPelrVZ0.rom
>>102
デフォルトコンストラクタの役割はsuper()を呼び出すことだった
そこは勘違い
ただ、デフォルトコンストラクタ任せにする時は、「データ初期化を行なわないパターン」というのも間違い
super()の処理は実行される

107: (:.;゚;Д;゚;.:) 2018/10/24(水) 21:15:41.147 ID:4bbwmKpX0.rom
>>104
あとはフィールド定義時に代入してるやつも、デフォルトコンストラクタでもデータ初期化されるパターンではあるな
ただ、俺は「super呼び出しとか定義時代入とかはコンストラクタの前で行なわれるけど、それはコンストラクタ以前の初期化処理では?」と思っている

105: (:.;゚;Д;゚;.:) 2018/10/24(水) 21:10:09.310 ID:HkPelrVZ0.rom
>>102
後半についてはSmalltalkがどうなっているかは自信なくなってきたが

constructor(int i) {
int attribute;
attribute = i;
}

的に記述する言語もあるようだからメモリの割り当てをコンストラクタが行ってはならないという理由はない
int i;
だって明らかにメモリが割り当てられているんだからmallocじゃないとメモリが割り当てられないことはない

107: (:.;゚;Д;゚;.:) 2018/10/24(水) 21:15:41.147 ID:4bbwmKpX0.rom
>>105
別のアプローチで、
Cfrontではthisに代入できるから、Cfrontでは(別途デフォルトのメモリ確保はあれ)メモリ確保もコンストラクタの役割の一つではあった、
とは言えそうだ

107: (:.;゚;Д;゚;.:) 2018/10/24(水) 21:15:41.147 ID:4bbwmKpX0.rom
>>76
あとはフィールド定義時に代入してるやつも、デフォルトコンストラクタでもデータ初期化されるパターンではあるな
ただ、俺は「super呼び出しとか定義時代入とかはコンストラクタの前で行なわれるけど、それはコンストラクタ以前の初期化処理では?」と思っている

44: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:34:02.495 ID:Pv/81n2Jd.rom
>>42
たしかに意識したことはなかったけどコンストラクタの中身の1行目より前だってことはなんとなくわかる

46: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:38:10.756 ID:HkPelrVZ0.rom
>>44
コンストラクタを呼び出したときにオブジェクトが生成されるという認識が普通

construct
【他動】
1. 〔部品を使って~を〕組み立てる、建設する、建造する

constructor
【名】

1. 建設者、建設会社

製造するという意味なんだから

49: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:40:52.305 ID:4bbwmKpX0.rom
>>46
new演算子を呼び出した際にオブジェクトが生成され、
オブジェクト生成には「メモリ領域の確保」と「メモリ領域の初期化」の2つの段階がある
コンストラクタはメモリの初期化しか行なわないので、その認識が普通だとしたらお前が間違っている証拠

51: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:41:55.205 ID:HkPelrVZ0.rom
>>49
英語苦手か?
a constructor (abbreviation: ctor) is a special type of subroutine called to create an object

53: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:46:31.441 ID:HkPelrVZ0.rom
>>49
公式
A class contains constructors that are invoked to create objects from the class blueprint.
To create a new Bicycle object called myBike, a constructor is called by the new operator:
https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

55: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:48:05.648 ID:4bbwmKpX0.rom
>>53
>a constructor is called by the new operator
って書いてあるじゃん

58: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:49:11.093 ID:HkPelrVZ0.rom
>>55
英語苦手でワロタw
A class contains constructors that are invoked to create objects from the class blueprint.

to create objectsと明確に書かれているから

59: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:50:33.077 ID:4bbwmKpX0.rom
>>58
「to create objects」と書いてあるからといって、コンストラクタだけが「to create objects」とはどこにも書いてないんだが?

60: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:52:30.216 ID:HkPelrVZ0.rom
>>59
日本語で頼む
何を言いたいのか謎

62: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:54:02.981 ID:4bbwmKpX0.rom
>>60
コンストラクタはオブジェクト構築のために呼ばれるが、
コンストラクタだけがオブジェクト構築のために呼ばれるわけではない

おk?

63: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:55:03.739 ID:HkPelrVZ0.rom
>>62の意味を理解できてないなあ…
日本語に訳してごらん

65: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:58:54.174 ID:4bbwmKpX0.rom
>>63
お前こそ2行目の最後読めてる?
operator newが呼び出すって書いてあるだろ

66: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:00:04.596 ID:HkPelrVZ0.rom
>>65
バカだなあ

68: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:05:33.723 ID:4bbwmKpX0.rom
>>66
『クラスは、オブジェクトを青写真から生成するためのコンストラクタ(という特殊関数)を持つ
新しいBicycleオブジェクトmyBikeを生成するために、コンストラクタはnew演算子から呼び出される』

どこにも「コンストラクタだけ呼べばオブジェクトが生成できる」とは書いてないね

70: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:08:32.506 ID:HkPelrVZ0.rom
>>68
お前の訳でも
new→コンストラクタ呼び出し→オブジェクト生成
となってるじゃんwww

自己解決してよw

56: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:48:08.205 ID:HkPelrVZ0.rom
それと>>53の公式が言ってるのに反論しちゃうのは恥ずかしいぞ

63: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:55:03.739 ID:HkPelrVZ0.rom
>>53の意味を理解できてないなあ…
日本語に訳してごらん

66: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:00:04.596 ID:HkPelrVZ0.rom
話が成立しないからまずは>>53を日本語に訳せ

42: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:28:41.924 ID:HkPelrVZ0.rom
>>27はオブジェクトがいつ生成されるのかまったく説明してない

31: (:.;゚;Д;゚;.:) 2018/10/24(水) 17:52:13.473 ID:NFHYYzNLd.rom
それは単にぬるぽでは

32: (:.;゚;Д;゚;.:) 2018/10/24(水) 17:52:33.516 ID:HkPelrVZ0.rom
>>31
そもそもオブジェクトが存在していない状況で関数がthisを参照する状況なんてない

39: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:05:46.544 ID:3pF+aiId0.rom
>>31
がっ

33: (:.;゚;Д;゚;.:) 2018/10/24(水) 17:53:15.745 ID:NFHYYzNLd.rom
いや定まってないとエラーになるって話が

36: (:.;゚;Д;゚;.:) 2018/10/24(水) 17:55:04.844 ID:HkPelrVZ0.rom
>>33
お前も全然分かってねえなあ
オブジェクトが存在していない状況で関数がthisを参照する状況を具体的にどうぞ

42: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:28:41.924 ID:HkPelrVZ0.rom
>>36はオブジェクトがいつ生成されるのかまったく説明してない

34: (:.;゚;Д;゚;.:) 2018/10/24(水) 17:54:06.244 ID:PwcWc64Y0.rom
なんでこういう奴って
調べたり動かしたりすればわかるのにやんないんだろうな

47: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:39:08.828 ID:GNjmbiNJ0.rom
クラスをインスタンスではさんでコンストラクタで10分焼く
実際使うのはそれだけだからそれだけ覚えとけ

57: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:48:58.280 ID:PwcWc64Y0.rom
そして置いてかれる1

61: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:52:58.419 ID:HkPelrVZ0.rom
>>57
2時間前にいなくなってるだろ

64: (:.;゚;Д;゚;.:) 2018/10/24(水) 18:55:07.643 ID:PwcWc64Y0.rom
>>61
ホントだ(; ・`ω・´)
別のやつと勘違いしてたわ

67: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:01:55.621 .rom
コンストラクタはクラスに含まれるべきじゃないんだ
クラスを設計図と呼ぶならコンストラクタはクラスに含まれているから、設計図の一部で製造をしてるということになる
設計図の一部とは、取りも直さず図である。図に製造ができるか? 頭大丈夫か?

コンストラクタはクラスから分離されるべきだ
便宜上クラスの中に一緒に書いちゃった方がいいというだけで
コンストラクタはクラスの一部であろうものか

71: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:09:02.680 ID:MjUahBEcd.rom
>>67
コンストラクタは製造手順書

79: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:20:53.112 ID:okHcm06Aa.rom
クラス→設計図
インスタンス→フィギュア
コンストラクタ→3Dプリンタ

83: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:30:32.479 ID:okHcm06Aa.rom
まぁコンストラクタは生成時に初期化の為に必ず呼び出されるメソッドだって認識しとけばいいと思うけどな

85: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:36:49.451 ID:vgNQiESEa.rom
アローの利点がよく分からない
そんなにみんなfunction書きたくないの?

88: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:42:20.620 ID:4bbwmKpX0.rom
>>85
JavaScriptのことなら、functionを使うとthisが変わるから嫌、というのがある
もちろんthisを変えたい場合はfunctionを使わなくてはならない

86: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:40:06.091 ID:okHcm06Aa.rom
アローっていうと昔は->の事だったけど
最近は=>の事指すんだよな

89: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:46:55.113 ID:tLTp/fMH0.rom
クラス:商品名
インスタンス(オブジェクト):製造番号が異なる個々の商品
コンストラクタ:出荷時の状態にする処理

90: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:48:46.049 ID:MjUahBEcd.rom
関数のインスタンス

91: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:49:27.094 ID:tLTp/fMH0.rom
コンストラクタ:出荷時の状態にする商品付属ツール

92: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:52:30.406 ID:tLTp/fMH0.rom
継承:ある商品をグレードアップして新商品を作る

94: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:54:20.420 ID:vMobcbVCM.rom
わりと言語使えるんだけどJavaだけはなぜか覚えられない
Androidのアプリ作ろうと思ってもさながら第一ゲートすらくぐれないゲートボールのような状態

95: (:.;゚;Д;゚;.:) 2018/10/24(水) 19:56:35.105 ID:CLKJ83ab0.rom
Javaってそんな変な言語なの
僕はjavaしか知らないけどこんなもんなのかなって思っちゃってたよ
このあとpythonとかやると痛い目みるのかな

97: (:.;゚;Д;゚;.:) 2018/10/24(水) 20:02:58.381 ID:SmrNAsbBM.rom
プログラマってなんで人に教えるの下手なの?

98: (:.;゚;Д;゚;.:) 2018/10/24(水) 20:03:28.642 ID:CLKJ83ab0.rom
>>97
正しく理解できてないからなんじゃないのかな

103: (:.;゚;Д;゚;.:) 2018/10/24(水) 21:06:13.203 ID:O2RqSKEu0.rom
>>97
これ。プログラマって本当に使えない。

100: (:.;゚;Д;゚;.:) 2018/10/24(水) 20:31:40.388 ID:QZ5L95340.rom
コンストラクタなんて初期化関数って認識でいいだろ
newしたときってトリガーで呼ばれる関数で別に何もしなくてもいいけど

特定のクラス変数に初期値を与えたいって場合には初期値を設定するってだけ

101: (:.;゚;Д;゚;.:) 2018/10/24(水) 20:41:31.041 ID:HkPelrVZ0.rom
>>100
本来的にはコンストラクタがオブジェクトを生成する
という話をしているんだが

108: (:.;゚;Д;゚;.:) 2018/10/24(水) 21:18:51.796 ID:QZ5L95340.rom
もう別に>>101も居ないしいいんだけど
それクラスとインスタンスが分からないって人にする説明ではないよなぁ…

106: (:.;゚;Д;゚;.:) 2018/10/24(水) 21:10:16.763 ID:H6kD0Ifep.rom
クラス→データとそのデータを処理するメソッドを定める
インスタンス→クラスを実体化したもの
コンストラクタ→インスタンス作るときにデータをセットするもの

109: (:.;゚;Д;゚;.:) 2018/10/24(水) 21:23:01.821 ID:KioGB4CK0.rom
クラスは設計図で、インスタンスが実際動くモノで、コンストラクタはマジックメソッドって言って、
インスタンス化される際に必ず呼ばれる関数だな。
てかオブジェクト指向って中々芯掴みづらいからそういうの書きまくれGithub利用しよう

112: (:.;゚;Д;゚;.:) 2018/10/24(水) 21:28:17.627 ID:4bbwmKpX0.rom
つーかCfrontに言及するならC++なんだから、
operator newせずにコンストラクタだけ呼ぶケースがあるに決まってんじゃねーか俺w
普通にグローバル領域なりスタック領域なりにメモリ構築してコンストラクタだけ呼べるわw

113: (:.;゚;Д;゚;.:) 2018/10/24(水) 21:32:23.891 ID:mKUcmbv80.rom
クラスを使うのは、処理をまとめたいから
クラスをインスタンス化して使うのは、フィールドの値をインスタンスごとに使い分けたいから
コンストラクタを使うのは、インスタンス化する際に初期値を設定したいから

だと僕は思うのだ(´・ω・`)

114: (:.;゚;Д;゚;.:) 2018/10/24(水) 21:45:32.037 ID:HkPelrVZ0.rom
結論としては少なくとも
メモリ確保をコンストラクタが担当してはいけないということはない
だからコンストラクタとは?と聞かれたとき
メモリを確保するのがコンストラクタ以外にあるということを前提にすることはできない

123: (:.;゚;Д;゚;.:) 2018/10/24(水) 23:01:58.640 ID:M2GGSeGz0.rom
だいたい本に
クラスはフィールドとメソッド出てきてるみたいなこと書いてあるけど、フィールドないやつもあるやろなんやねん
全部のクラスにはあてはまらんやろ
あとなthis.ってなんやねん
だいたいthis.うんたら~のこの書き方なんやねん
わかりづらいわ

128: (:.;゚;Д;゚;.:) 2018/10/24(水) 23:10:47.447 ID:H6kD0Ifep.rom
>>123
クラスはデータを集めておく箱なんや
データだけを定義したクラスもあるからメソッドがなくても不思議ではない
クラス設計についてはsolid原則を参考にするとええ
ただ、今は物を作りまくるのがいい時やな

124: (:.;゚;Д;゚;.:) 2018/10/24(水) 23:07:23.736 ID:4bbwmKpX0.rom
まず、Javaにおいては何もかもが「オブジェクト」である
ここでいう「オブジェクト」は「(何かはよく知らんけど)ブツ」程度の意
この世には、様々なブツが大量に存在し、互いに相互作用をしながら世界を形作っている
同じようにコンピューターの中に抽象的なブツを大量に作り、互いに相互作用をさせながらシステムを作ろう、
というのがオブジェクト指向プログラミングであるわけだ

この時点ではまだクラスもインスタンスも説明してないが、ここまではよろしいか

126: (:.;゚;Д;゚;.:) 2018/10/24(水) 23:08:49.517 ID:QZ5L95340.rom
>>124
C#なら何もかもオブジェクトで合ってるけど
Javaの基本型は違ったはず

127: (:.;゚;Д;゚;.:) 2018/10/24(水) 23:10:11.534 ID:4bbwmKpX0.rom
>>126
そんな細かいことは後回しでいいんだよ!

135: (:.;゚;Д;゚;.:) 2018/10/24(水) 23:21:34.530 ID:4bbwmKpX0.rom
>>124続き

さて、この世の中にあるブツには、さまざまな挙動がある
川は流れ、風は吹き、鳥はさえずり求愛のダンスを踊る
同様にオブジェクトも、さまざまな挙動をする……これをJavaプログラマーは『メソッド』と呼ぶ

ところで世の中のブツには、似たようなものがたくさんある
お前の足元にある小石も、どこかの山奥にある小石も、本質的には同種の『小石』というものだ
Javaでも同じであり、いくつかのオブジェクトは同種のものとして分類(classify)できる
その分類(classify)したもの、つまり種族的なものが『クラス』である
その個体にあたるものを『インスタンス』と呼ぶ

144: (:.;゚;Д;゚;.:) 2018/10/24(水) 23:37:01.404 ID:4bbwmKpX0.rom
>>135続き

ところで、現実において「ブツ」というものは、同種だからといって全く同じであるわけではない
たとえば俺とお前は外見も能力も違う
だが俺もお前も人間だ

この差は当然ながら生まれた親の違いであったり育った環境の違いだったりするわけだが、
プログラマーは偉大なので、そんなに何十年・何百万円もかけることなく、最初から違いを与えた状態でブツを作ることができる
だがそのためには、「違いを与える」という処理が必要になる

ブツに違いを与えるには、2つのアプローチがある
ひとつは、最初にブツを作り、後から違いを与える方法
もうひとつは、最初から違うように作る方法
どちらも同じものが出来上がるという点では同じだが、前者は二度手間になるのでめんどくさい
なので、『最初から違うように作る』という行為のための専用メソッドとして『コンストラクタ』という仕組みが用意されている
別に二度手間でいいと思うなら使う必要はないのだが、まあ、あるにこしたことはないよね

149: (:.;゚;Д;゚;.:) 2018/10/25(木) 00:29:01.457 ID:ulcNaHs1p.rom
>>144
いやこの説明では何回読んでもピンとこない

125: (:.;゚;Д;゚;.:) 2018/10/24(水) 23:07:51.312 ID:QZ5L95340.rom
フィールドはクラスに所属する変数
メソッドはクラスに所属する関数
ってだけ

129: (:.;゚;Д;゚;.:) 2018/10/24(水) 23:12:26.852 ID:HkPelrVZ0.rom
1みたいな奴に一般論を説明してもだめだと思うぞ
こういう奴には具体例だ
1はまだいるのか?

130: (:.;゚;Д;゚;.:) 2018/10/24(水) 23:13:48.560 ID:QZ5L95340.rom
まぁクラスが設計図でインスタンスは設計図を元に作った物体でいいんじゃない?

132: (:.;゚;Д;゚;.:) 2018/10/24(水) 23:16:19.958 ID:M2GGSeGz0.rom
関数っていわれても関数すらピンとこない
低学歴なんだからもっとバカにでもわかるように教えてくれ

133: (:.;゚;Д;゚;.:) 2018/10/24(水) 23:17:09.739 ID:Et37SyRg0.rom
>>132
処理の集約

137: (:.;゚;Д;゚;.:) 2018/10/24(水) 23:23:53.678 ID:QZ5L95340.rom
>>132
int funcName(int x, int y){
return x*y;
}
みたいなの見た事あるだろ
main()もだけど

それが関数

140: (:.;゚;Д;゚;.:) 2018/10/24(水) 23:28:03.766 ID:M2GGSeGz0.rom
>>137
みたことあるぞ

143: (:.;゚;Д;゚;.:) 2018/10/24(水) 23:31:59.279 ID:QZ5L95340.rom
>>140
これがC言語などでは関数っていうから定着してるけど
Javaではメソッドって言われてて意味は大体同じ

134: (:.;゚;Д;゚;.:) 2018/10/24(水) 23:17:22.768 ID:HkPelrVZ0.rom
オンラインのショッピングサイトのカートを管理する場合で考えよう

商品クラスとカートクラスがある
商品の情報としてどういうものが必要?
カートの情報としては?
カートと商品の操作としては?

136: (:.;゚;Д;゚;.:) 2018/10/24(水) 23:23:09.964 ID:HkPelrVZ0.rom
>>134
おいこら1はスルーかよ
お前に聞いてるんだぞ
考えて回答しやがれ

138: (:.;゚;Д;゚;.:) 2018/10/24(水) 23:26:36.091 ID:M2GGSeGz0.rom
>>134
おちつけよ
そんなせかすな
こちとらお前みたいに理解しとらんねん

商品は チョコレートとかうまい棒とかそういう商品名の情報とか金額とか必要やろ
カートの情報ってなんや
個数とかか?

142: (:.;゚;Д;゚;.:) 2018/10/24(水) 23:31:19.172 ID:HkPelrVZ0.rom
>>138
お、いい感じ

商品クラス
 商品名
 価格

商品クラスは商品にはどんな情報があるかなーとかの情報を持ってる
んで、商品名とか価格は属性とかフィールドとか呼ぶ
商品クラスが持っている情報

んで、うまい棒とかの具体的な商品はインスタンスとかオブジェクトと呼ぶ

カートについては商品を選んで注文する過程でどんな使い方をするか考えろ

148: (:.;゚;Д;゚;.:) 2018/10/24(水) 23:47:46.659 ID:HkPelrVZ0.rom
>>142
×うまい棒とかの具体的な商品はインスタンスとかオブジェクトと呼ぶ
○うまい棒とかの具体的な商品に対応するデータ構造をインスタンスとかオブジェクトと呼ぶ

商品クラス
 商品名
 価格

うまい棒を表すデータ
 商品名=うまい棒
 価格=10円

チョコレートを表すデータ
 商品名=チョコレート
 価格=100円

139: (:.;゚;Д;゚;.:) 2018/10/24(水) 23:27:01.161 ID:QZ5L95340.rom
>>134
そういうのって距離と速さと時間の関係が分かってない小0生にいきなり文章問題解かせようとするようなもんだよ
思考の基盤が出来上がる前に考えさせようなんて無駄な事