オブジェクト指向を教えてくれ!★2

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2021/04/27(火) 15:02:28.94ID:mH9VXFld
オブジェクト指向について、調べれば調べるほど疑問が募ります。低レベルで粗末な疑問かも知れませんが、ご教授願いたいです。

・データと振る舞いをまとめる?
まとめると何か良いことあるの?
ファイルあるいはモジュールにはまとまってるよね?
丁度いい単位があるのに、何故わざわざオブジェクトという概念を導入するの?
(Javaには1ファイル1クラスという文化あるらしいけど)

・カプセル化?
モジュールのimport, exportでも実現出来るよね?
(構造体などへのアクセスを制限できれば)

・ポリモーフィズム?
別にデータと振る舞いをまとめなくても実現出来るよね?

・モノのように扱いたい?
モノとして扱いたいときに扱えば良くない? なんでわざわざ全てをオブジェクトにするの?

※前スレ
https://mevius.5ch.net/test/read.cgi/tech/1615881962/
129デフォルトの名無しさん
垢版 |
2021/06/25(金) 20:50:35.01ID:8d9Ppd4I
カプセル化についてどうしても分からないんだけど
オブジェクト指向やインスタンスについて
Wikipediaを調べると
「クラスの中で作ったデータ構造やアルゴリズムを修正したくなった時に、それらをクラスの外側に影響にせずにクラス内の範囲に
収めることができる」と書いてあるけど

それってクラスやインスタンスが出て来る前から
関数だって同じでしょ?

クラスやインスタンスというものを使う理由になってるのかな
関数と何がちがうの?

それに関数やインスタンスのメソッドだって
引数の構成を変えたくなったり追加の引数が欲しくなったら
外部に影響を与えざるを得ないのでは?
(続く)
130デフォルトの名無しさん
垢版 |
2021/06/25(金) 20:51:07.41ID:8d9Ppd4I
(続き)
確かにクラスやインスタンスはプロパティの変数を
内部に保持できるところは新しいが
しかしそれをドットで格納や参照しちゃうと
肝心のカプセル化が壊れてしまうっていうんだから
結局は関数のローカル変数と同じだ


インスタンス内で保持するプロパティは
そもそもコンストラクタの引数か
メソッドの引数を経由して流れてくるものなんだから
そういう意味では、クラスとインスタンスは
関数と根本的な意味で違いがないのでは?


わざわざクラスとインスタンスとメソッドのように
複雑にしたのなら、
関数にはない何か素晴らしいメリットがあるのだろうか?
そうじゃなきゃ単に構文が複雑になっただけのように思えるが。
(疑問終わり)
2021/06/25(金) 21:25:10.29ID:7fH3vpXY
ゼロリスクとかないし
上流の人が下流の変な行いを制限するための仕組み
132デフォルトの名無しさん
垢版 |
2021/06/25(金) 22:05:11.75ID:5F2XL1Xe
スコープがクラス内である変数(クラス変数)に相当するものが、
関数にあったっけ?

クラス変数がカプセル化のキーだと思う。
133デフォルトの名無しさん
垢版 |
2021/06/25(金) 22:24:11.75ID:5F2XL1Xe
以下でfileとfがカプセル化および、手続き化できてると思う。
マネージャーからは、Catalogが保持するfileとfは見えないのが正しい。

class Catalog
 atter_reader :file
 atter_accessor :f

 def initialize(file:)
  @file = file
 end
  
 def open
  @f = open(file, 'r')
 end

 def output(var:)
  f.puts(var)
 end
end

class Manager
 def makeCatalog
  c = Catalog.new(file: 'カタログ名.txt')
  c.open
  c.output(var: '書き込みたい内容')
 end
end
134デフォルトの名無しさん
垢版 |
2021/06/25(金) 22:40:21.64ID:5F2XL1Xe
外側に影響を出さずに修正する例

class Catalog
 atter_accessor :f

 def initialize(file:)
  @file = file
 end
  
 def open
  @f = open(file, 'r')
 end

 def output(var:)
  f.puts(var)
 end

 private

 def file
  "#{@file[0, 2]}\#{@file}"
 end
end

class Manager
 def makeCatalog
  c = Catalog.new(file: 'カタログ名.txt')
  c.open
  c.output(var: '書き込みたい内容')
 end
end
2021/06/25(金) 22:53:02.93ID:eNSUt1x8
クラス変数はいつになったら出てくるのん?
136デフォルトの名無しさん
垢版 |
2021/06/25(金) 23:10:24.13ID:YN5s3pHX
すまぬ。
インスタンス変数の間違いだった・・・。
2021/06/26(土) 01:49:46.90ID:WPp8qNv5
関数の場合はクロージャでキャプチャする変数がインスタンス変数みたいなもの
fileやfをキャプチャした一連のクロージャを連想配列や構造体に入れて返す関数を書けばいい

Catalog = Struct.new("Catalog", :open, :output)

def make_catalog(file:)
 f = nil
 Catalog.new(
  open: -> { f = open(file, 'a') },
  output: -> var: { f.puts(var) }
 )
end

c = make_catalog(file: 'カタログ名.txt')
c.open.()
c.output.(var: "Write Something")
138デフォルトの名無しさん
垢版 |
2021/06/26(土) 02:05:19.25ID:jug2ShuU
その書式でメソッド書くのはきつくない?
2021/06/26(土) 05:29:29.35ID:+EKqv5Ba
>>129
結局何が聞きたいのかさっぱり分からん。

カプセル化は「必要最小限の物だけを見せる」単純化の方法であって
オブジェクト指向とは直接関係がない。

インスタンスのメリットはごちゃごちゃ言ってないでコード書けば一発で分かる。
畳の上で水泳の練習をして泳げるようになるのは天才だけ。
凡人は実際に水に入って泳がないと上達しないよ
2021/06/26(土) 10:59:04.51ID:Rie4kKQj
まぁ OOで終わっている人が多いからな。 Cで仮想テーブルまで作ってやっている人が居たが、単にOOオタクというだけだった。
OOの上にコンポーネントやバウンタリー構造を構築する方が大事で、SOLID原則を実現するためにOOPを使うという事を知らない人だらけ。
企業のファイナンスや基幹経験も無しに、小規模ユーティリティーでビジターとかデザパタハイが歳食っても治らない。
ビジターで一回、全修正でひどい目に合わないとわからないのかも。
2021/06/27(日) 06:53:14.21ID:edyl0XAn
がん細胞の如くソース撒き散らされたマジックナンバー。
定数ラベルにしてあれば1行の修正。

難しいこと言ってるが原点は定数記号。
142デフォルトの名無しさん
垢版 |
2021/06/27(日) 08:14:48.33ID:sNBPWRnW
>>141
それまったく違うよ。
定数を直接参照させると変化を吸収できないから、
メソッドに包んでメッセージでオブジェクトを参照するんだよ。
2021/06/27(日) 11:40:01.24ID:N2ruTaG4
変化はポインタtoポインタ、ジャンプテーブルで解決。
144デフォルトの名無しさん
垢版 |
2021/06/27(日) 11:44:04.42ID:U1pSP8r9
π って
#include <math.h> で
M_PI
使うのと
#define myPI 3.14hogehoge
するのとどっちが良い?
2021/06/27(日) 12:16:41.98ID:FB9ZSvE6
オブジェクト嗜好って、C言語的には所詮構造体、共用体、ポインタの組み合わせなんだよなと思ってしまう。
2021/06/27(日) 12:37:46.84ID:2gHjXwTf
それと関数へのポインタな
2021/06/27(日) 12:41:11.83ID:G7M856dZ
大抵のオブジェクト指向ω言語は
c で構造体 (FILE *) の例が一番良く合うと思うが
self とか this とかを第一パラメータ省略出来るだけで
やってることは同じ
148デフォルトの名無しさん
垢版 |
2021/06/28(月) 21:49:59.55ID:hb08z3M6
「ループって結局gotoなんだよな」って謎のうわごと言ってる変な人が涌いたなぁ…
というこの感じ、わかりますかね?
149デフォルトの名無しさん
垢版 |
2021/06/29(火) 09:39:43.72ID:FQiEOJle
>>148
そのうわごとはある意味合っている
中間言語に変換して見てみれば
条件分岐による指定アドレスへの
ブランチ命令やジャンプ命令になるから
2021/06/29(火) 19:18:22.85ID:B7EiqjVa
>>148
まぁ形としてgotoを使わず書くのが構造化ってことやから
2021/06/29(火) 19:20:40.15ID:z+Vt20Ug
下らん。自明。
152デフォルトの名無しさん
垢版 |
2021/07/01(木) 15:09:55.43ID:i0Niwzqk
>>150
強盗退治のダイクストラ大先生の気持はわかるのだが、
goto を退治しようと思うと、変数スコープをどうするかとか、
受け皿としての構造化ステートメントをどうするかとかいった
問題もある。
LOOP - UNTIL - DO - REPEAT 構文なんかは、
変数スコープとか無限ループの中からの break とか、
けっこうややこしい話がある。
べつに批判というわけではなくて、
爺いの繰り言だと思ってくれ。
153デフォルトの名無しさん
垢版 |
2021/07/02(金) 06:08:53.71ID:1mPaPsjo
>>152
変数のスコープとgotoって何か関係するの?
154デフォルトの名無しさん
垢版 |
2021/07/02(金) 10:44:14.20ID:xu7tv1xS
>>150
javascript のオブジェクト指向がクラス指向じゃなくて
プロトタイプベースだってしきりに宣伝されていた時期があったが
あれこそ只の言い訳なんだよ
155デフォルトの名無しさん
垢版 |
2021/07/02(金) 10:46:12.72ID:xu7tv1xS
>>152 のじじいには是非とも longjump と exception の違いについて解説してもらいたい
2021/07/02(金) 21:54:55.09ID:QH8xfbBh
>>153
スコープを設けることで
スコープ内へ、あるいはスコープ外へのgotoはできないようにした。
157デフォルトの名無しさん
垢版 |
2021/07/06(火) 14:46:59.64ID:C2l77xOE
「仕事ができる社員には、入社した頃から優秀で何でもできちゃうというタイプもいますが、経験を積んで
段階的に良くなっていくということがあります。一方、仕事ができない社員は、せっかく経験を積んでも、
教育訓練を受けても、能力・スキルがなかなか上がりません。自分の能力やパフォーマンスが低いという自覚
がないから、そういう残念な状態がずっと続いてしまうんでしょうね」(サービス)
https://toyokeizai.net/articles/amp/437325?page=2
158デフォルトの名無しさん
垢版 |
2021/07/08(木) 09:45:26.96ID:55hhGJGn
>>155
> 是非とも longjump と exception の違いについて解説してもらいたい
階層のあるロジックで、途中の階層でファイル開けたりするじゃん。
まぁ、最近の実行環境とかだったら、自働的に閉じてくれるだろうけど、
ハックアタックとか喰らったりすると、処理がおっつかなくなって
システムが落ちたりするわけだよ。
例外を拾うと、戻ってくる途中で後始末してさらに上に例外を投げる、とか
できるから、なんぼか安全でユーザに親切なコードを書ける。
ただし、これは OO に限った話じゃなくて、昔の Lisp にも
キャッチ&スローはあった。
Lisp 的な使い方だと、「タイマーを仕掛けておいて、あるアルゴリズムを
実行中にタイムアウトしたら、例外で呼び元に戻って別のアルゴリズムを
試す」みたいなこともできる。
2021/07/08(木) 11:23:32.18ID:2xQyyxJV
ロングジャンプするとスタックはどうなるの?
2021/07/08(木) 11:37:56.66ID:qzQUzceM
そのままじゃないの?
ロングジャンプと関数呼び出しのちがいがわからない
2021/07/08(木) 11:40:31.56ID:qzQUzceM
アセンブラの話かと思った
162デフォルトの名無しさん
垢版 |
2021/07/09(金) 15:21:32.46ID:CPOxdqYe
>>159
>>160
ローカル変数を積んだヒープもリターンアドレスを積んだスタックも、
ぜーんぶチャラにされてしまうので、C 言語だったらそういった情報は
グローバル変数に積んでおくしかないと思う。
C 言語というのは、
C のソース ⇒ マクロ 展開の後のソース ⇒ マクロアセンブラのソース
⇒ 展開後のネイティブアセンブラのソース ⇒ ネイティブなマシンのコード
ということになっているので、「マクロアセンブラのソース」と
「逆アセンブルしたネイティブなコード」(でなければダンプしたバイナリ)を
比較すりゃあいいんじゃねぇ? つーてもそこからリンカが動くわけだから、
シンボルは解決されていないわけで、「あっちゃとこっちゃでラベルの
シンボルが同じなのに型が違う」とかいった話があったりするので
けっこう面倒臭いんだが。
つーても、こういう話は OO とはなんにも関係がなくて、
単に Java が間に仮想機械を挟んでいるだけの話だと思うが。
163デフォルトの名無しさん
垢版 |
2021/07/09(金) 15:28:01.63ID:CPOxdqYe
>>161
> アセンブラの話かと思った
うん、本当に その通りだ。
隠蔽体質が限界に来ちゃったんで、「いっぺん VM で切り分けようよ」と
いう話になって、IEEE の数値表現とかで「C の構造体の穴」とかの
話は別枠にしようというのが、もともとの話(OO と全然関係のない
話でスマソ)だ。
164デフォルトの名無しさん
垢版 |
2021/07/09(金) 15:34:42.87ID:CPOxdqYe
>>160
> ロングジャンプと関数呼び出しのちがいがわからない
正確にいうと「関数呼出しの戻り」だと思う。
一段上に戻るのが、普通の「関数呼出しの戻り」で、
途中の呼出しのためにスタックやヒープに積んどいた
情報をぜんぶすっ飛ばしてチャラにしちゃうのが longjump 。
そのときの情報が半端に残っているもんだから、
うっかり別プロセスから呼ばれたときにゴミを拾ってややこしいことになる。
Java でも「これ、スレッドフリーで実装してるから」というのを
宣言してないメソッドを使うと、ややこしいことが起きた時代があったげな。
どっとはらい。
2021/07/10(土) 13:45:47.10ID:keCdkflV
馬鹿だw
166デフォルトの名無しさん
垢版 |
2021/07/11(日) 13:38:07.40ID:AB3pchpm
>>165
> 馬鹿だw
誰が? www
「文句があるなら、四百字詰めの原稿用紙に、
テンとマルを数えて三枚以下にまとめて火曜日までに提出しやがれ!」
2021/07/11(日) 18:06:50.71ID:UkcAZW7O
自覚はあるようだ
2021/07/12(月) 14:49:21.34ID:LBA0QktL
自覚があれば許されるって問題じゃないがな
169デフォルトの名無しさん
垢版 |
2021/07/12(月) 15:07:01.79ID:aEttnyn+
アセンブラのジャンプ命令のロングのものは
当たり前だけどスタックエリアもスタティックエリアもヒープエリアも触ることはないよ・・・
何の言語?
170デフォルトの名無しさん
垢版 |
2021/07/15(木) 14:20:57.31ID:fe/M1r5r
オブジェクト同士は常に二人称で、「俺」←対話(メッセージング)→「チンポ」。
つまりチンポは独立し自ら考えて行動する別の生き物なのである。

この考え方に至ってからは、オブジェクト指向の理解もすんなり進みました。
上手くオブジェクトを定義して、上手く会話させてやるのがオブジェクト指向
での設計なんだなーと今でも思っています。
https://blog.mah-lab.com/2014/03/18/object-oriented/

チンコの随意筋と不随意筋
http://d.hatena.ne.jp/tottokotokoroten/20130516/1368716650

<俺>
「 部屋の英子がこちらを向いた気配に、彼は勃○した陰○を外から障子に突きたてた。障子は乾いた音をたてて破れ、
それを見た英子は読んでいた本を力一杯障子にぶつけたのだ。本は見事、的に当って畳に落ちた。 」
<チンポ>
「 その瞬間、竜哉は体中が引き締まるような快感を感じた。彼は今、リングで感じるあのギラギラした、
抵抗される人間の喜びを味わったのだ。 」

まさに独立した人格を有したチンポという、もう一人の俺がそこに現れるのである!

【藤子・F・不二雄】「みきおとミキオ」現在と未来、憧れの入れ替わり生活!
https://www.google.com/amp/s/middle-edge.jp/articles/0izbO.amp
171デフォルトの名無しさん
垢版 |
2021/07/15(木) 15:05:02.15ID:ygp86UHP
みんな教えてくれ
Chrome の右上に 「タブを検索」 ってバカ見たいなアイコンがまた出て来た
以前は chrome://flags から enable-tab-search を選んで disable にすれば非表示に出来たんだが
ある日を境にそれも出来なくなってまた現れたんだ
今度は消せない

css とか何かの hack で良いから消す方法を教えてくれ
緊急事態なんだ
172デフォルトの名無しさん
垢版 |
2021/07/19(月) 09:58:54.74ID:aT6h1Owq
(中学入学当時の思い出)
女子の着換えブルマ姿に欲情してチンポがシコシコしてたらケツの穴が緩んでおならブー、慌ててトイレに
駆け込んでセンズリとウンコを済ませて教室に帰ると、みんなが臭い臭い屁をコイタのは誰だと騒いでた。
2021/07/20(火) 15:25:50.08ID:8LncYo8+
授業中にオナニーした自慢してる同級生がいた母校
174デフォルトの名無しさん
垢版 |
2021/07/26(月) 16:14:40.27ID:h3NNUVW3
オブジェクト志向というのは、
かつて「算体志向言語」と呼ばれていて、
数学基礎論関係の人から支持されていたのだが、
「チンポチンポチンポチンポチンポチンポチンポチンポチンポチンポチンポ
チンポチンポチンポチンポチンポチンポチンポチンポチンポチンポチンポ!」
と叫び続ける人には、どんなトラウマがあるのだろう、と、
ソフトウェア技術とは別のカテゴリー(メンヘラ板とか)的に
興味が出てきた。
175デフォルトの名無しさん
垢版 |
2021/07/26(月) 16:28:41.26ID:h3NNUVW3
正直な話、C 言語みたいな「記憶空間上の位置」というイメージは、
「仮想メモリ」あたりが絡んでくると、非常に面倒臭い話に
なるわけだよ。
アセンブリ言語の時代は、プロテクト上のテクニックとして、
「ROM に書き込む命令を実行しておいて、あとでチェックする」
みたいなネタがあったわけだが、プログラムが巨大化してくると、
そういうチマチマした工夫というのは用済みになってしまって、
「それなりに大きいシステムを動かす」というのに重点が
置かれてきたわけだ。
そういう意味では、オブジェクト志向というのは
「順当」で「つまらん」コンセプトではある。
2021/07/26(月) 16:47:29.54ID:y8y7Lt86
支離滅裂
177デフォルトの名無しさん
垢版 |
2021/07/26(月) 18:44:37.57ID:Mq5VCN/i
>>174
「拡張された自我」というのはダメなのか?
2021/07/26(月) 20:05:01.57ID:0k++frUQ
志向じゃねえと何度行ったらわかるんだ
179デフォルトの名無しさん
垢版 |
2021/07/26(月) 21:03:06.65ID:Sy50UqPQ
>>176
いんや、支離滅裂とは限らんよ
実際、ファミコンソフトでもEP-ROMという
カセット内に書き込み可能なROMを内蔵しているものは稀にあった。
2021/07/26(月) 21:41:28.75ID:xfwXuIQ4
部分的には意味があるが話のつながりが全然わからん
181デフォルトの名無しさん
垢版 |
2021/07/26(月) 21:42:49.37ID:h3NNUVW3
>>178
OO はオブジェクト・オリエンテッドだと何度言ったらわかるんだ。
高校のときの世界史の教科書を引っ張り出してきて、
「光は東方より」とか「オリエント文化」とかいった
用語を確認しておいてほしい。
「オリエンテーション」とか「オリエンテーリング」とかいう
言葉もあるだろう。
「指さす(指向)」だけで動かないんだったら、
なんの役にも立たんだろうがよ。
182デフォルトの名無しさん
垢版 |
2021/07/26(月) 23:32:09.15ID:XZlTnvY0
アイミョン [KS108-054]
削除
2021/07/26 23:27
チンポがシコシコするぜ!

https://i.imgur.com/CICwpUU.jpg
183デフォルトの名無しさん
垢版 |
2021/07/27(火) 05:27:08.07ID:Q2Vxfcf1
>>181
それ、仕事場でも同じようなこと言って無理矢理通してるの?
2021/07/27(火) 06:09:15.19ID:LcJHa8Ez
正規表現も周りに合わせず自分だけ正則表現と言ってそう
2021/07/27(火) 11:08:22.21ID:/Iqls6o1
GoFのデザインパターン勉強したいんだけど
何からはじめればいい?なんか良書ない?そもそも現代においては最早学ぶ必要すらなし?
Javaの素養もなくJava言語で学ぶデザインパターン入門は20年前くらいに一度挫折した
2021/07/27(火) 11:32:43.58ID:v0U2tVBR
>>185
オブジェクト指向における再利用のためのデザインパターン
↑これ買っとけば間違いない
英語が出来るなら原書を買えばさらに間違いはない
GoFが主張したかったことがそのまま書いてあるのが大事

ほかのJavaでうんたら〜とかネットの素人記事とかは
すべて二次情報になっており危ない
独自解釈や拡大解釈で焦点をどんどんボカされてしまう恐れがある

あるいは、今は手を出さないほうがいい

糞設計、糞コードの山を既に作りまくってて
困り果てた挙句に手を出してみるのがデザパタ
少しでも設計の助けになるヒントを求める先がデザパタ
糞設計にまみれた人でないと必要性がまずわからんはず
187デフォルトの名無しさん
垢版 |
2021/07/27(火) 16:49:37.67ID:2/5jRvjl
デザパタは「批判的に継承する」ことが前提とされているので、
それを踏まえて気長につきあってくれ。なお、そもそもの語源は建築分野だ。
「GoF」の元ネタは「四人組」で、
> 四人組はプロレタリア独裁・文化革命を隠れ蓑にして極端な政策を実行、
> 反対派を徹底的に弾圧し、迫害して殺害したが、
> 中国共産党中央委員会主席である毛沢東の死後に失脚した。
だ。
188デフォルトの名無しさん
垢版 |
2021/07/27(火) 17:38:09.84ID:SIzlx99/
>>181
指向は、物事の基本として位置づけるって意味だよ
オブジェクト指向プログラミングはオブジェクトを基本としたプログラミングって意味だよ

オブジェクト志向プログラミングだと、俺はオブジェクトになるんだって思いながら行うプログラミングになっちゃうよ

オブジェクト志向は間違いなので今後はオブジェクト指向と書くように
189デフォルトの名無しさん
垢版 |
2021/07/27(火) 17:53:36.60ID:SIzlx99/
一番重要なデザインパターンはイテレータパターンとデコレータパターン
2つ覚えておけばあとはおまけみたいなもん
2021/07/27(火) 18:30:55.17ID:3rBo4v1y
>>185
「Head Firstデザインパターン」
GoF本のエッセンスを凝縮して平易に解説してる
これ以上にわかりやすいのは無いので
もしこれでも挫折したら素養がないと思って諦めてくれ
2021/07/28(水) 10:14:10.51ID:TIa2mcNA
>>185
>Java言語で学ぶデザインパターン入門
あの本だと何でデザパタにしないといけないのか
読んでてもぜんぜん分からないよな?
まああの時代はみんな分からなかったんだけど
2021/07/28(水) 10:17:20.31ID:TIa2mcNA
>>189
そんなわけない
むしろそのふたつの方がオマケ
まあイテレータは言語でサポートされるけど
193デフォルトの名無しさん
垢版 |
2021/07/28(水) 10:44:13.49ID:Zb5hS091
>>188
「指向」っつーと
point とか index とか direct とかを想像しちゃうんだが ……
194デフォルトの名無しさん
垢版 |
2021/07/28(水) 10:57:50.22ID:Zb5hS091
>>189
>>192
いわゆる「デザインパターン」の範疇に入っているかどうか
わからんけど、シングルトン実装を使わないと、
いわゆる大域変数が使いづらくて面倒臭いと思う
(「new するときに参照を渡せばいい」というのも
ひとつのスタイルだが)。
OO の持ち味は「システムが大型化したときにも
混乱するリスクが少ない」「だからアジャイル化
(インクリメンタル開発)に向いている」点だと
思う。
まぁ、ツールとかトイ・プログラム程度だったら、
自分の好きなスタイルで書けばいいと思うが。
「Java は、Pascal や C より面倒臭い」という意見は、
初心者の感想としてあると思われる。
195デフォルトの名無しさん
垢版 |
2021/07/28(水) 23:54:33.04ID:GRHddmr5
>>192
イテレータパターンは逐次処理の基本で
デコレータパターンは機能を拡張する基本

JavaのStreamとか.NETのLINQは知ってるっしょ

イテレータパターンとデコレータパターンを知ってるとLINQ作るのは楽勝

こんな感じに
https://paiza.io/projects/JRTGnHvxgXmixjgoOGANhA

ラムダ式使うから他のデザインパターンはおまけと言って良いですね
196デフォルトの名無しさん
垢版 |
2021/07/29(木) 00:09:43.58ID:ODUB6YGJ
自分でLINQのようなもの作ってみるとわかるんだけれども
JavaのIteratorクラスも.NETのEnumeratorクラスもデザイン的にはよろしくない

JavaのIteratorは
hasNext : 値があるかを返す
next : カーソルを進め、値を返す

.NETのEnumeratorは
MoveNext : カーソルを進め、値があるかを返す
Current : 値を返す

nextやMoveNextは一つのメソッドで2つの処理をやってるんだよね

hasValue
getValue
move
の3つに別れてるといろんな処理が書きやすい

Iteratorは一度自分で作ってみるのをおすすめする
結果的に使わなくてもやってみると楽しい
2021/07/29(木) 00:31:12.53ID:YKvIUGd6
>>193
orientedを想像してほしいの
2021/07/29(木) 00:37:09.24ID:YKvIUGd6
>>194
パスカルってローカル変数をメソッドの先頭にまとめて書かないといけないよね、あれって思考の妨げになりそうなものだけどすいすい書けるものなんかね、必要になったとき必要になったところに変数書けるJavaの方が読み書きしやすいように思えてしかたない
2021/07/29(木) 01:43:55.64ID:oVQ0Ruxr
>>191
あの著者は「デザパタにしろ」なんて言ってないw

そもそもデザパタに限らずアイデアというのは適合するものに適用するんであって、
馬鹿の一つ覚えで無理矢理使うものじゃないw

古い版持ってるけで悪くない本だと思うよ
マルチスレッド編は持ってるけど読んでないので知らん
2021/07/29(木) 01:47:27.80ID:oVQ0Ruxr
>>196
列挙のための仕組みなんだから「いろんな処理」
に対応する必要はないw

そんなことよりああいう汎用的な仕組みは効率の方がずっと大事だ
201191
垢版 |
2021/07/29(木) 02:10:42.11ID:+NG4dF8L
>>199
>「デザパタにしろ」なんて言ってない

いやでもメリットは明確に提示すべきでしょ?

もちろん無理やり使う必要はないんだけど
どういう時に使うのかの基準が分からないと

あと似ているパターンの使い分けとかも曖昧
もちろん今は分かるようになったけど
2021/07/29(木) 02:42:24.67ID:YKvIUGd6
>>200
効率って実行効率? 
実装の効率?
シンタックスシュガー用意するなら実装の効率は変わらないし実行の効率も差があるとは思えないけどなあ
2021/07/29(木) 02:45:10.28ID:YKvIUGd6
汎用的ではないよね
使い途が限定されるなら特化的
2021/07/29(木) 02:48:21.13ID:YKvIUGd6
>>199
マルチスレッドのデザインパターンではワーカースレッドパターンとフューチャーパターンが一番大事であとはおまけ
2021/07/29(木) 02:56:23.90ID:YKvIUGd6
>>201
これはなかなか難しいよね

僕はLINQを例にあげてイテレータパターンとデコレータパターンの素晴らしさを鮮やかに示したけどそれは僕の知識と経験と明敏なセンスがあったからできたことであって常人にはなかなかできないこと
2021/07/29(木) 03:00:39.17ID:sxXIkVXX
>>201
あの本はその辺しつこいぐらいしっかり書いてあるよw
だからあんな分厚いわけで

>>203
列挙に「特化」しているともいえるが、その列挙の使用頻度が高いという意味では
汎用的でもある。難しいね。
2021/07/29(木) 03:01:54.86ID:YKvIUGd6
なんだか空虚な人だな
208デフォルトの名無しさん
垢版 |
2021/07/29(木) 17:07:48.87ID:rnbNo3z7
>>174
チンポはオシッコを出したりオシッコを止めたりする機能が備わっている。
209デフォルトの名無しさん
垢版 |
2021/07/30(金) 00:25:47.68ID:T4chNKrF
>>198
Pascal は begin 〜 end だからめんどくさい。それがあるんで
変数スコープを明確にしようと思うとサブルーチンを使うことになって
プログラムが細切れになる。その意味では思考の邪魔ではあるな。
Java だと {} だから「そのループの中で遣う変数」だけを
示すのが(インデントも併用して)楽っちゃあ楽。
ただ、これに break が絡んでくると、けっこう面倒臭い話がある
(結果をどこに残すかとか)ので、ときどき珍妙なコードになったり
することがあって「これは private なメソッドにしよう」とかいって
悩んだりもする。
話は変わるが、C の struct みたいに、「複数の値を返すために、
ちょっとだけ使う」というのが Java だとめんどくさい。
まぁ、それは「どうせ他のところで使うだろうから外に出しとけ」
っちゅー話なんだろうが、OO が効くような大規模プロジェクトだと、
他人のコードを読まない奴がいるんだよなぁ … (-_-!)
210デフォルトの名無しさん
垢版 |
2021/07/30(金) 00:45:15.42ID:T4chNKrF
>>208
> チンポはオシッコを出したりオシッコを止めたりする機能が備わっている。
…… まぁ、放っといたほうがいいんだろうが、ひとこと。
「オシッコを出したりオシッコを止めたりする機能」は前立腺とか
外尿道括約筋の機能であって、チンポの機能ではないと思うが。
211デフォルトの名無しさん
垢版 |
2021/07/30(金) 11:26:48.31ID:2fVUhjUZ
ああ、オブジェクト分割に失敗してる訳ね。
下品なだけとはやれやれですな。
212デフォルトの名無しさん
垢版 |
2021/07/30(金) 11:37:32.74ID:bcOJfzQj
>>210
>「オシッコを出したりオシッコを止めたりする機能」は前立腺とか
>外尿道括約筋の機能であって、チンポの機能ではないと思うが。

合成
継承自体は悪くないので、誤解しないでほしいです。しかし、それをうまく利用するには、実装前に全部の条件を知る必要があります。
それはなかなかない贅沢なので、合成パターンを使います!
この場合の合成は何かというと、オブジェクトを、そのオブジェクトができる行動の組み合わせとして捉える考え方です。
https://qiita.com/jlkiri/items/2c07d3f0a32f5d3b62cb
213デフォルトの名無しさん
垢版 |
2021/07/30(金) 13:12:02.56ID:5Dvgi7qY
>>209
Javaではrecordが使えるようになったから
Cのstruct より簡単かも

record Person(String name, LocalDate birthDay) {}

public static void main(String[] args) {
  var p = new Person("ますお", LocalDate.of(1990, 3, 5));
}
214デフォルトの名無しさん
垢版 |
2021/07/30(金) 14:53:00.06ID:NHDNKqZ7
>>212
チンポの利尿機能は、前立腺とか外尿道括約筋とかの、オブジェクトの合成によるものだ。
215デフォルトの名無しさん
垢版 |
2021/07/30(金) 15:23:59.30ID:T4chNKrF
>>213
ありがとう。おれは 1.4 以下のコードをほじくり返しているので、
7 以降の機能を使いこなしていないんだわ。
そういう意味では旧世代のジジイではあるのだが、
いまの世代だったら「おれだったらこう書く」というスタイルが
あると思う。わしら旧世代でも、トレンドくらい追いかけているので、
「なるほど。こういうことをやりたいのね?」くらいは解る。
そういえば、とあるプロジェクトで「加齢臭漂う古臭いコード。
未来ある若者は真似してはいけない。コンテナ変数に押しこめて
隠蔽するのが吉」というコメントを書いたら、上司に「顧客さんだって、
コード見るですからねっ!」と涙ながらに叱責された orz。
216デフォルトの名無しさん
垢版 |
2021/07/30(金) 15:32:29.89ID:T4chNKrF
Java には明示的な多重継承がないので、大規模なプロジェクトだと、
(継承関係の整理とかで)いろいろとメンバー間で調整をしないといけない。
面倒臭いといえば面倒臭いんだが、プロジェクトのキーパースンと忌憚のない
交流ができるのが、自閉系のおれとしては嬉しかった。
217デフォルトの名無しさん
垢版 |
2021/07/30(金) 18:38:22.49ID:6DFltda+
>>216
>Java には明示的な多重継承がないので、

多重継承は曖昧だというが、自然言語処理はその曖昧さが大切になる。チンポは随意筋であり不随意筋である。

最終的に,クラス階層は最上位クラスを含めた
最大8 階層から構成され,「伝統的な日本の絵画」
に属する用語に対応する 55 クラスと解説文中か
ら抽出した139 クラスが配置された。ただし,そ
のうち 32 クラスが複数の上位クラスをもつとい
う多重継承が示された。例えば,「ngyc:絵巻物」
は「ngyc:伝統的な日本の絵画」と,「ngyc:表具の
形式」の下位クラスである「ngyc:巻子」の 2 つの
クラスを継承する(図 2)。こうした多重継承は,
本質属性をもつ基本概念と機能を表すロール概念
を分離することで,基本概念による属性継承に限
った階層関係に変更するという考え方もあり 10),
「ngyc:伝統的な日本の絵画」がロール概念で,
「ngyc:表具の形式」が基本概念と捉えることもで
きる。しかし,本研究ではテキストからの情報抽
出に即して配置し,多重継承を許容した階層を導
き出した。
http://www.mslis.jp/am2019yoko/05_kobayashi.pdf

随意筋  不随意筋
  ↖   ↗
   チンポ
2021/07/30(金) 18:46:54.49ID:m4720ds0
本人面白いと思ってるのかねこれw
馬鹿じゃねえの
219デフォルトの名無しさん
垢版 |
2021/07/30(金) 19:46:16.03ID:5Dvgi7qY
統失の振りしてたら本当に統失になっちゃったんでしょ
2021/07/30(金) 19:57:20.25ID:Ozy22ut3
>>215
>加齢臭漂う
コメントにそんな辛辣なこと書くなよ……(困惑)
221Mb
垢版 |
2021/07/30(金) 21:14:08.47ID:T4chNKrF
>>220
> コメントにそんな辛辣なこと書くなよ……(困惑)
困惑させて申し訳ない m(_ _)m。
そんなわけで固定ハンドルを使うことにする。
うちらはアセンブラ育ちなので、データ構造というと
スタックかヒープであって、せいぜいリングキューなんだわ。
それが、OO になると「コンテナ」という概念が出てきて、
「sizeof で次のデータにアクセスする」とかするより、
「リンクで参照したほうが面倒臭くない」という話に
なっちゃったので、正直リソース貧乏人には馴染まない部分があるんだわ。
Z80 とかで、ROM 4K バイトで RAM 4K バイトの環境で
BASIC インタプリタを駆動して「スタートレック」をプレイしていた
世代もいるわけだし。
今だったら メモリ空間も広いし仮想メモリもあるし二次記憶のサイズも
ギガテラ単位だし、プロセッサの処理能力も半端ないけど、
うちらのような貧乏人は、ついついケチ臭いコードを書いてしまうのだよ。
若者には、現在の豊富なリソースを堪能していただきたい。
「戦後の焼け跡のスイトンとかラーメンとかを喰ってみたい」というなら
止めないが、二回三回とかやるのは変態だと思う。
2021/07/30(金) 21:57:58.61ID:Ozy22ut3
>>221
いや自分のソースのコメントに
同じこと書かれたら嫌でしょw

昔のマシンがショボくてリソース制約がキツかった時代から
だいぶスタイルが変わってるってのは全くその通りだけどさ
223Mb
垢版 |
2021/07/30(金) 22:07:04.26ID:T4chNKrF
>>220
あ、誤解されてそうだから書くけど、おれが書いたコードのコメントだから。
「とりあえず動けばいい」というので、「配列に突っこんで馬鹿サーチで検索する」
という杜撰なコードを書いた(DB で処理するルーチンの合間に入る
ルーチンだったので、遅くてもよかった。高速化するか保守の利便性を
考えるか迷ったが、「こうやって目立つように書いておけば、
誰かがパフォーマンスとのバランスを考えて修正してくれるだろう」)と
思って書いておいたのだが、あとで模造紙サイズの ER 図とか見せられて、
「どう思う。忌憚のない意見を聞かせてくれ」(いや、SQL なんてよく
知らんし)とか訊かれたあげく、「全体進捗会議のオブザーバー」として
引っ張りだされて小一時間問い詰められた (-_-!)。
オブジェクト志向とはなんの関係もないのだが、「再帰」「リンク」「new」
とかいった概念が出てくると、けっこう苦労する人がいるんだわ。
Oracle の 9i 以降には CONNECT BY という再帰呼出しがあって、
たまたまその部分を担当しただけなんだけどね。
224Mb
垢版 |
2021/07/30(金) 22:19:17.71ID:T4chNKrF
>>222
> いや自分のソースのコメントに
> 同じこと書かれたら嫌でしょw
気に入らなきゃ直しゃいいだけであって、
履歴はソースコード管理システムに残ってるわけでしょ?
開発者どうしがお互いのソースに手を突っこむのは、
アジャイル開発では普通のことでしょうが。
それより不評だったのが、「靴屋の小人」で、
「覚えのないうちにコードが変更されているのだが、
コーディングスタイルが自分と見分けがつかない」というので
自分の正気を疑った、というのがあった。
「コメントくらい入れとけっ!」と苦笑しながら面罵されて、
渋谷の「東電OL殺人事件」の現場近くの線路沿いのバーで
一緒に飲んだ記憶がある。
225デフォルトの名無しさん
垢版 |
2021/07/30(金) 23:22:04.07ID:bcOJfzQj
 .     .,x;Ρ.                  .  r'ニ、               
 ..  с⌒l^     г、     .rョ   .__|{_,..\ヒノ.     .rュ   _  n′
 ...、.=ニ.〉..、  `ゝ'    ノ/.   `¬¬;冖'''′     ,xヒ'.,コ;-、 ´\ `' 
 .´~ ̄⌒"|.Г~~`        ノ/     ィ  |_| -、     Υ//.  」.|  ヘヽ、
     、//          ノァ′    l.}  }|. `('x,    、/j'′ .ノン.    `'´
    ,ンシ´.      ⊂ニニ-'′.    tノ  、|.|   \ .  ~  └`       
 ...  `´.                      `′    ~′             
 ..   ∩...                    .          ,、.._        
 .   Л..        Lニニニ⊃..      |.|          `^''''¬¬-ニr   
    」{.                     l|.                    
    !イ.     ;、               И     ,.n              
    V.    //.    .-..、_  _....    Y-   ィン´..    `〜ニ;-=ィ'√  
    ´`:-コェz:シ      ´`'. ̄-'⌒.       ̄ ̄ ̄           ̄.    
226Mb
垢版 |
2021/07/31(土) 00:16:53.58ID:HS2AjqTr
要するに OO が嫌いだから叩き潰そうという勢力が
あるということなのか orz
漏れもいいかげん古い世代なので、OO に関しては批判的な
思いはあるのだが、コンセプトとしては悪くないと
思っている。
とはいえ、
「チンポシコシコ!」「チンポシコシコ!」「チンポシコシコ!」
「チンポシコシコ!」「チンポシコシコ!」「チンポシコシコ!」
「チンポシコシコ!」「チンポシコシコ!」「チンポシコシコ!」
というメッセージを、どう捉えたらいいのかわからない。
2021/07/31(土) 03:59:01.35ID:MqeBrne9
コメントはどちらかというとコミュニケーションだからなあ悪口言われたらモチベーション下がるだけだ、それこそソースコードを適切に修正したら良いのに
228デフォルトの名無しさん
垢版 |
2021/07/31(土) 08:13:25.39ID:QYAnB91H
>>226
「胸がドキドキする」は良いが、「チンポがシコシコする」はダメな理由を、50字以内で述べろ!
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況