オブジェクト指向プログラミング入門

45

2022

きしだൠ(K1S) @kis

オブジェクト指向について、技術的には「オブジェクト指向は差分プログラミングとデータ分類をまぜて考えてややこしくなる。分離せよ。そして差分プログラミングにはラムダを使え。データ分類のときはオブジェクト指向じゃなく型を考えろ」っていう主張になった。

2022-02-28 12:22:33
きしだൠ(K1S) @kis

「オブジェクト指向は差分プログラミングとデータ分類を同時に行う手法」という見方。 もっといえば、継承の用途を差分プログラミングとデータ分類の2種類にわけた。その上でそれぞれについてのオブジェクト指向離れを考えた。

2022-02-28 12:25:12
きしだൠ(K1S) @kis

ここから考えると、オブジェクト指向の技術的欠点は差分プログラミングとデータ分類を不可分に考えてしまったところか。 継承を使うと差分プログラミングとデータ分類が同時にできてしまうけど同時にやると難しいのでなんとかする考え方としてオブジェクト指向が育ったともいえる。

2022-02-28 12:28:17
きしだൠ(K1S) @kis

ということでオブジェクト指向やめて差分プログラミングとデータ分類は別に考えようぜって話をまとめました。 またステルさないマーケティングです。 nowokay.hatenablog.com/entry/2022/02/…

2022-02-28 16:37:11
きしだൠ(K1S) @kis

アランケイのオブジェクト指向って、特にだれも話題にしてないので、害もなく批判する必要もないのよね。話題にするとしても、なんらかこだわりある人で。アランケイじゃないほうのオブジェクト指向は、今でもなぜか入門者が挑戦して混乱して挫折してるので、気にしなくていい、やめようって言ってる。

2022-02-28 19:48:03
きしだൠ(K1S) @kis

アランケイのほうの「オブジェクト指向」の話がなぜされないかというと、あれはアランケイじゃないほうのに名前空間を占有されたのもあって、メッセージパッシングとかイベントストリームとかいう名前で議論されるようになってるからだと思っている。

2022-03-01 16:23:36
きしだൠ(K1S) @kis

「オブジェクト指向から離れるためのJava入門」という名前にしたい気持ちはあったけど、営業販売を考えると無理w

2022-03-01 16:49:14
きしだൠ(K1S) @kis

そういえばオブジェクト指向批判のひとつに「再利用なんか考えるな」ってのがあるんだよな。すでに見えてる部分の効率化共用化に使うものであって、将来的に使うかもしれないみたいな動機で設計しても役にたたない。 ネットサービス時代にアプリケーションに出てきたクラスを再利用なんかやらないって

2022-03-01 17:02:02
きしだൠ(K1S) @kis

あれは、同業多社にシステムを納入するとき、こちらの会社に納入したシステムの一部を他者のシステムに使いまわすという文脈であって、いまは業種向けサービスをたちあげて多社が同じシステムを使うんだから、再利用なんかしない。再利用できるような部分はサービスになってる。

2022-03-01 17:02:02
きしだൠ(K1S) @kis

この会社のシステムの一部を基底クラスにしておいて、他社のシステム構築ではそれを継承したら差分だけの実装でおわるぜ、基底クラスのメンテナンスを行うと2社のシステムが同時にメンテナンスできるぜ!ってないでしょう。 再利用するにしてもコピペして独立した形で適用して、だいたい跡形もなくなる

2022-03-01 17:05:57
きしだൠ(K1S) @kis

共通の業務ロジックを部品化して販売、業務ロジックのコンポーネント市場を作るみたいな構想があったりしたけど、そんなのはWebサービスになっているので。

2022-03-01 17:13:30
きしだൠ(K1S) @kis

「Hindley-Milnerに基づく型システムとGoにインスパイアされた並行処理モデルを採用している」 おもしろそう。 infoq.com/jp/news/2022/0…

2022-03-09 23:13:22
きしだൠ(K1S) @kis

「オブジェクト指向プログラミングは間違った方向に進んでいると確信することが多くなりました。特にオブジェクト指向の古典的な特徴(あるいは価値)である、オブジェクトの同一性、変更可能な状態、クラス継承は、プログラムを構成し考えるための正しい方法ではないと私は感じています」

2022-03-09 23:13:22
きしだൠ(K1S) @kis

ラムダ式はいってインタフェースで実装もてるようになってレコードというのも導入された中で、クラス・インタフェース・レコードの使い分けどうするか、ラムダと継承の使い分けどうするかなんか、「オブジェクト指向」みたいな言語非依存っぽいこと言っても結局「Javaのベストプラクティス」でしかない

2022-03-24 05:41:35
きしだൠ(K1S) @kis

じゃあ言語横断的に考えるときはどうするかってなると、ラムダ計算だったり型理論だったりモナドだったり、もしくは構造体とかデータ構造が支配的で、言語非依存な「オブジェクト指向」が入る余地があまりない。

2022-03-24 05:41:36
きしだൠ(K1S) @kis

システム構成とかになるとマイクロサービスやらデータベース設計やらキャッシュやらキューやらネットワークやらでオブジェクト指向の出る幕はないし、じゃあ設計はってなるとオブジェクトじゃなくてドメインでしょうみたいな感じになっており。

2022-03-24 05:45:04
きしだൠ(K1S) @kis

プログラムの設計で言語共通の話でいえば、ミュータブルとイミュータブルのすみ分けだったり、参照透過性と副作用のすみ分けだったりが大事で、それはオブジェクト指向が意識しなかったところなわけで。

2022-03-24 05:51:42
きしだൠ(K1S) @kis

ラムダ式は当然オブジェクト指向ではなく関数型やラムダ計算由来だし、レコードはデータを扱うことを集中できるようクラスの機能を制限してイミュータブル・継承不可にするという、ある種オブジェクト指向を否定したものだし、そうするとそれらの使い分けはオブジェクト指向ではないノウハウが必要

2022-03-24 13:48:39
きしだൠ(K1S) @kis

オブジェクト指向は関数やイミュータブルに対応していないので、ラムダやレコードの使い分けの話はオブジェクト指向の文脈では難しいです 「オブジェクト指向」と言語非依存のように言ってるけど、結局は言語機能に大きく依存して、言語非依存の「オブジェクト指向」の出番がほぼないです #prog_edu

2022-03-25 21:32:15
きしだൠ(K1S) @kis

言語非依存の「オブジェクト指向」を抜き出そうとすると、もっと適切な用語で具体的に議論されていることが多いので、「オブジェクト指向」ではなくそちらの用語で考えるほうがいいというのもあります。 #prog_edu

2022-03-25 21:32:16
きしだൠ(K1S) @kis

最近のコードの設計基準は、イミュータブルとミュータブルをどう分離するか、副作用をどう閉じ込めるかということが非常に重要になっていますが、オブジェクト指向はそこに手出しできません。オブジェクト指向はミュータブル・副作用ベースでイミュータブル・参照透過は考慮しないので #prog_edu

2022-03-25 21:40:35
きしだൠ(K1S) @kis

まあ、とにかく、プログラムがうまく作れないのは「オブジェクト指向がわかっていない」が原因じゃないぞーという話。 オブジェクト指向はプログラムを整理する技法のひとつでしかない。

2022-03-28 22:36:20
きしだൠ(K1S) @kis

15章の差分プログラミングのサンプルは、「オブジェクト指向わからん」「継承の使い方わからん」という人に見てほしいんよね。イヌとかネコとか、わかった気はするけど使えるようにならない説明よりは、ちゃんと使えるようになるので。 #projava

2022-03-30 17:55:09
きしだൠ(K1S) @kis

「お姫様と勇者とか」って書こうと思ったけど特定書籍をdisるっぽくなるので自重しました! お姫さまクラスと勇者クラスを多重継承して「勇者として旅に出たお姫様」を実現するって、旅にでる前のお姫さまと旅にでたお姫様のインスタンスが別になっていいの?ってなる。あれダメな設計の例よねぇ。

2022-03-30 18:03:12
1 ・・ 11 次へ