「オブジェクト指向」を含む日記 RSS

はてなキーワード: オブジェクト指向とは

2024-04-04

anond:20240404133919

利用者概念だけでもオブジェクト指向理解してないと、ノーコードはすぐ破綻するんよね^^;

しかも、ノーコードリファクタリングは物凄くやりづらいし。

ノーコード開発アンチパターンみたいなのが蓄積されて、普及していかないと、いろいろ厳しいでしょう。

2024-04-01

anond:20240401152026

今Rust使ってるのはよっぽど意識高い系ベンチャーGAMかってくらいなのよ

5年前ならともかく、今は全然そんなことはないです

ちゃんとしたプロエンジニアはRust以外にもたくさんメジャー言語経験があるし面接経験とかもあるのよ

それはそうですが、Rustがオブジェクト指向言語かどうかに関係ありませんね

インターフェイスがとか足切り質問であってそんな読めばわかること誰も重要視しないんだよね

「Rustがオブジェクト指向言語なのか?」という話題においては、traitがインターフェース機能をより一般化して強力にした機能であるとか、

そのあたりの方が「誰がどのプロダクトを作ったか」より遥かに重要ですね

実際にどんなサービスを作ったとかの話になるの

「Rustがオブジェクト指向言語なのか?」という話題においては、なりませんね

君その辺空っぽだよね

キミ、Rustの具体的な機能イディオムコーディングスタイルの話一切できてなくて、空っぽだよね

全部増田はいくらでもホラ吹ける自称だけ

anond:20240401150811

オブジェクト指向かどうか云々の話なんだから

テックカンパニーバックエンド不正検知のMLサービスにつながるSpringBootのサービスを置き換えました

より

pubで可視管理してtraitでインターフェース定義して、

ジェネリクストレイオブジェクトで多相する普通のRustのプログラムだよ~

の方が具体的だよ

前者はオブジェクト指向じゃなくて手続き型でも関数型でもなんでもできるんだから

関数型言語豪語するやつはバグが多い

別に関数型言語だろうがオブジェクト指向言語だろうが業務によって使い分けるけど

関数型言語をやたら主張してくるやつはめちゃくちゃバグが多い

普通に考えると型付けの関数型ならバグが少なくなりそうなのに実際には全くそんなこと無い

観察したことがある感じだとオブジェクト指向的に状態を整理するようなことが苦手で

それが嫌でオブジェクト指向から逃げて関数型を主張してくるので

根本的に体系的な物事の捉え方ができてないのでバグを量産する

例えば商品として服と靴があったとして、カートに入れたら服は税込みなのに靴は税抜きになってたりする

ちなみにオブジェクト指向をやたら主張してくるやつはバグは少ないけど開発がめちゃくちゃ遅い

俺の考えた最強のデータ構造模索し続けるし他人にもそれを求めるのでめちゃくちゃ面倒くさい

服と靴を買うだけのサイトなのに「靴磨きのサービスを追加する場合は?」みたいなことを考え始める

何事もほどほどがいいと思う

anond:20240401143235

Rust言語公式で「Rustはオブジェクト指向もできるよ!」ってアピールするための3つの主張の2番目が「カプセル化もできるよ!」なんだぞ

そこから考えれば

カプセル化オブジェクト指向本質の1つとみなされている」

カプセル化オブジェクト指向はなんの関係もない」

ではどちらが確からいか

2024-03-25

私の思うオブジェクト指向貴方の思うオブジェクト指向はなぜ違うのか

同じプログラマなのに話が通じないと思ったことはないでしょうか

どうやら私の思うオブジェクト指向貴方の思うオブジェクト指向は別のもののようだ

A君はウィキペディアを見ながら、カプセル化継承多態性だと言う

B君はC++/C#/Java等でプログラムを書くことだと言う

C君は OOPとOO は区別しろとか言ってくる

D君はこの世界のすべてはオブジェクトだと言う

E君はSOLID原則の方が大事だと言う

なぜかみんな見ている世界が違うようだ

どうしてこうなったのか

anond:20240325091743

俺もそんな意識高くないけど、オブジェクト指向が間違えづらいなんてこと無いでしょ

手続き無限に書き連ねたタイプの糞コード時間をかければ着実に直せるから精神ダメージはそこまでではないけど

ヤバい人が書いたオブジェクト指向副作用まみれで読めないし直せないし気が狂う

オブジェクト指向批判してる人は幸せ個人プログラマー

クソコード出会ってきた経験全然無いんだろうな

他人が書いたコードレビューした経験もなさそう

多分だけど業務ほとんどコード書いてなくて

オープンソース開発(笑)とか研究(笑)とかやってて

書いたとしてもモジュール化された完全に独立した部分か

周りがある程度優秀なプログラマーに囲まれててクソコードに遭遇してない

まぁ、幸せな人だと思うな

戦争を知らない平和時代プログラマー、という感じがする

プログラマー初級者〜中級者ぐらいのコードを見ると

「どうして人間はこんな愚かな発想でコードを書いてしまうのか」

という感想を持つし、その中でオブジェクト指向が一つの解だと理解する

人間は間違いを犯す生き物で、愚かな発想で愚かなコードを書いてしまう、という前提に立って

間違いにくく間違えることができないようにしよう、というのがオブジェクト指向の目指しているところであって

プログラムとは何か」みたいなアホみたいなことはこれっぽっちも考えてないよ

ただ、今後生AIが完全生成までは至らずとも広範囲サポートができるようになると

間違いを犯す心配はなくなるから新しいAI用の言語が生まれてくる気はするけどね

2024-02-10

継承ダメっていう話ってオブジェクト指向オブジェクトを物と思ってるのが諸悪の根源で、オブジェクトは物のことだと思ってるから物を継承させたがる。DigitalClock extends Clockとか。

継承は、というか正確にはオーバーライド機能だけど、インスタンス化したクラスが何であるのかで実際に実行される処理が変わるわけだからインスタンス化したクラスが条件になってる条件分岐みたいなもので、ifとかswitchで同じ条件が何度もプログラムに登場するのを消す目的使用するのが継承の正しい使い方だと思う。

2024-01-26

各位、久々の大型新人の予感がするので可愛がってください

https://twitter.com/shims_ag/status/1749925004236779961

午前7:40 · 2024年1月24日

「型」という概念存在しないプログラミング言語存在しません。

https://twitter.com/shims_ag/status/1750300836113342567

午前8:33 · 2024年1月25日

メモリ上のデータの種類を表す情報が「型」(type)です。

プログラミング言語側に組み込まれている「型」だけでなく、プログラマー独自に「型」を定義する方法も用意されています

struct、classinterface、type, enumなどを使って独自の「型」を定義します。

開発しているソフトウェア独自の「型」は、ドメインモデルの要素になります

多数の「型」を分類し、組織化するために名前空間を利用します。

近年「クラス」が「型」の定義であるという基本概念理解していないエンジニアが増えているので、エンジニア採用する際には注意しましょう。

https://twitter.com/shims_ag/status/1750346589431042157

午前11:35 · 2024年1月25日

ソフトウェアを起動すると、メモリ上には、たくさんのデータを読み込まれます。各データには、データの種類を表す「型」が割り当てられています

例えば、ゲームならばCartという大分類の「型」を用意し、その要素としてMarioCart, LuigiCartという「型」を用意します。

業務システムならば、Reportという大分類の「型」を用意し、その要素としてCostReport, SalesReportのような「型」を用意することになります

上記の「型」は、構造体やクラスを使って定義します。

これらの大分類の「型」と、要素の「型」は、is-a関係にある、といいます

現代ほとんどの言語にはis-a関係を明確にする方法が用意されています

上記のような「型」の知識プログラミングの基礎です。

https://twitter.com/shims_ag/status/1750014081648779450

午後1:34 · 2024年1月24日

CPU機械語しか理解できません。一方で人間機械語プログラミングすることは困難です。

人間が「1ドル」のつもりで、メモリに「1」と記憶させても、CPUは「ドル」だとは扱ってくれません。

CPUは、「円」のつもりで記憶させた「1」と、ドルの「1」を区別出来ないので、そのまま足し算などの演算を実行してしまます

そこで、人間にとってプログラムを読みやすくすることと、CPU意図しない演算をさせないために、データの種類を表す「型」という概念プログラミング言語に用意されるようになりました。

金融ECサイトなどのお金計算間違いが致命的なシステムでは、1ドル、1円を整数型などで扱うのではなく、予期せぬ演算が実行されないように「ドル型」、「円型」という「型」を定義します。

まとめると、可読性向上と、プログラムの誤動作防止のために「型」が不可欠な概念になりました。


https://twitter.com/shims_ag/status/1750507533536760000

午後10:14 · 2024年1月25日

プログラミング初心者は、

プログラミングを以下のようにシンプルに考えましょう。

(1) データメモリ記憶する命令プログラミングする。

変数配列構造体、クラスなどを使って、メモリ上にデータ記憶させる命令設計し、コーディングする。

(2) データ操作する命令プログラミングする。

上記(1)でメモリ記憶したデータに対して、計算、変換、表示、出力、保存などの命令設計し、コーディングする。

https://twitter.com/shims_ag/status/1750534515616059749

午前0:02 · 2024年1月26日

「型」という概念数学に由来しています

メモリ上のデータがどの「型」に属しているのか、という集合論の話でもあります

分かりやすく言えば、データの種類、分類の話です。

例えば、猫型のデータは、動物型という大分類に属する、という集合の話です。

オブジェクト指向プログラミングの「is-a関係」は、集合論に由来するメモリ上のデータ(オブジェクト)の分類の話です。

クラス」とは「型」の定義であり、メモリ上のデータの「分類」(class)です。

is-a関係」ではないのに継承すると、当然破綻します。

逆に、明らかにis-a関係」なのに、継承せずに委譲すると、スパゲッティコード化を誘発します。

2023-12-16

6年付き合った年上の彼女と別れた

自分には6年付き合った年上の彼女がいた。名前PHP学生の時からの付き合いで、自分にとっては初めての彼女だった。付き合った当初は全てが新鮮で、オブジェクト指向やSOLID原則大事なことは全て彼女から教えてもらった。(そう思われるかもしれないが、)時間が経って彼女の魅力が感じられなくなってしまったということはなくて、彼女は歳をとっても魅力的なままだった。むしろreodonlyプロパティEnum、null safe演算子など、新しい機能が導入されてますます綺麗になっていったように思う。最近ではジェネリクスさえ導入されたようだ。彼女は本当に努力家だ。


(褒められた話ではないが一応、彼女以外の女性を全く知らなかったわけではなく、TypeScriptという若い子と少し遊んでいたこともある。TypeScriptは昔からの知り合いのJavaScriptの妹で、大雑把な姉と違って几帳面で、少しオタク気質もある個性的な子だった。よく新しい型パズルを考案して楽しそうに話してくれたが、自分には正直よく分からなかった笑。)


そんな中でも基本的には6年間PHPとずっと一緒に過ごしてきた。前述の通り彼女に何か不満があったわけではない。ただ、彼女との将来に不安を覚えるようになってしまっていた。周囲に彼女と付き合っていることを話すと、「え、まだPHPと付き合ってたんだ?(昔は人気だったけど、最近はそうでもないよね)」みたいなことを、彼女のことをよく知らない人から言われたりもした。そこまで直接的ではなかったけれど。自分も、彼女以外の女性のことをほとんど知らずにずっと彼女と付き合っていて大丈夫なのかななんて思ってしまったりしていた。



結局自分PHPと別れて、新しい女性と付き合う決断をした。新しい彼女名前Go彼女若いのに自分の芯がしっかりしていて、みんなの憧れの格好良い女性といった人だった。そんな彼女と付き合いだして、最初は戸惑うことも多かった。


例えばこんな感じだ。

「え、Goって三項演算子とかデフォルト引数はないの?」

「ええそうよ。どっちもif文や可長変引数を使えば実装できるじゃない。私は興味ないわ」


また、今まで当たり前だと思っていたPHPの良さに気づくことも多い。PHPStanを使えば静的型付け言語と同じように型安全性担保できていたし、彼女Web FWには歴史が長いだけあって痒いところまで手が届く様々な機能が完備されていた。経験豊富こちらの要望をなんでも受け止めてくれるような包容力があったことに今更気づいた。


とはいえいつまでも昔の彼女を引きずっていてもしょうがない。Goにはこちらに積極的に合わせてくれるような包容力はないが、彼女なりの哲学を持っていてそれ故の美しさがあると思う。そして正直、まだ彼女10分の1も理解できていない。彼女が得意だという並行処理や、実行速度が求められるような処理も、自分はまだ実際に実装したことはない。でもこれからしっかり向き合って、Goのことをもっと理解して、実りのある交際にしていきたいと考えている。PHPと別れてGoと付き合う決断したのは自分なのだから

オブジェクト指向勉強したいと言われたらPytorchを勉強しろと言えばいい

カプセル化継承ポリモフィズムの嬉しさが実感でき、かつ、職業選択可能性が広がる

逆に言えばML以外であればあえて使う意味がない

2023-11-17

あーそうかオブジェクト指向継承差分プログラミングするものだと理解してるから、異常なswitch文ができるのか

多態性って概念がないのね

function hoge(value):
  switch(value.a, value.b)
  case 1, ‘a’
    return methodA(value)
  case 1, ‘b’
    return methodB(value)
  case 2, ‘c’
    return methodC(value)
………

これでキャリア15年超えってマジかよ

死のうかな

2023-11-16

オブジェクト

馬鹿オブジェクト指向をやると一つのクラスに全部の機能を突っ込んだりする

そういう状態になったものを神クラスといい、インスタンス化したものは神オブジェクトという

以前、そういう状態に陥った現場仕事をしていた

EchsSee(仮)という謎のクラスに全機能が詰め込まれていた

最初HTMLの表示をデバイスごとに振り分けるヘルパークラスしかなかったが、馬鹿が「便利だから」などといって無関係フィールドメソッドをどんどんEchsSeeに詰め込んだ

EchsSeeは高頻度に更新される上に、更新による失敗が全システムに影響を与えたため、開発者は「EchsSee触るの怖いんですよね」などと言うようになった

2023-11-15

オブジェクト指向人類の退化の象徴

オブジェクト指向とかかっこいい言い方をしても無駄だ。従来の構造プログラミングから進歩したことなど一つもない。オブジェクト指向がなぜダメであるのか、それを今から話すぜ。

 

1. データと処理をまとめるという発想。

データと処理をまとめてクラスとして置くという発想がある。しかし、このようなことをしなくとも、モジュールという単位で利用データと処理の集合をまとめればよかったので、クラスを使う必要はない。しかクラスインスタンス化のときに、不要情報まで持ってくるのでメモリ効率が明らかに悪い。コンピュータ進化しているかメモリのことはあまり考える必要がないとはいえ必要ない処理をまとめて閉じ込めるのは無駄が多い。なぜクラスという名詞概念分類できると考え始めたのかは不明だが、アルゴリズムデータ構造という構造プログラミング手法を、クラスと型というパラダイムに変換することで型にうるさいC++馬鹿を生み出し、彼らが発狂することになってしまった。しかデータと処理にわざわざ依存関係を持たせて、変更に対する柔軟性を失わせている。

 

2. 継承

継承によって既存構造を持ってこようとする必要性が全く無い。それどころか、継承を使うことによってプログラムスパゲティ化し、依存関係グラフがややこしくなってしまう。継承など使わず必要情報スコープの限られた共通変数、または関数引数として用意しておけば良い。もしクラスをどうしても使いたければ、共通インターフェイスをもたせたほうがマシであるインターフェイスを使えば、クラス利用者意識すべきpublicメソッドがなんであるか把握できる。

 

3. カプセル化

オブジェクト指向の中で役立つ概念カプセル化だけであるしかし、カプセル化クラスなしで構造プログラミング方法実装できる。pythonでは、モジュールの中でアンダースコアから始まる関数を用意しておけば、それがprotectedやprivateと似たように機能させることができる。オブジェクト指向がなぜカプセル化独自概念だと言い始めたかは謎。

 

4. ポリモーフィズム

同じ名前メソッドを、入力に応じて処理の内容を変える。このようなことはオブジェクト指向などと誇大宣伝をするほどのことでもない。構造プログラミングで似たようなことができる。

2023-10-20

マジ頭湧いてるプログラマーがいるわ

プログラミングサッカーに喩えると、巷にいるプログラマー小学生サッカーレベルからJ1レベル選手まで全部いるんよ

他の人から見たら

リフティングできるのすごいね

ってなるんだけど、実際には小学生サッカーだったりする

だけど普通に会社とかフリーランスとかでドヤ顔プログラマーとして働いてるわけ

面接でそれを見抜くのはそれなりの能力を持った人、つまりスカウトじゃないと無理なので小学生レベルでも普通に採用される

その結果リフティングしかできないやつがJ3のチームに普通に所属してしま

小学生の昼休みサッカーでそこそこ上手いって言われてるレベルなのにJ3試合に出てくるっていう地獄

いざ試合になってボールが回ってきたらリフティングばっかしてて、いきなり敵にパスするみたいなことを平気でやって

パスミスはしょーがないでしょ」

みたいな感じだったりするわけでマジでヤバイ

具体的に言うとオブジェクト指向理解できてない状態TypeScriptanyを連発してバグだらけのクソコードを量産しておいて

オブジェクト指向とか古い考え方は必要無いです」

とか言うくせに

別にオブジェクト指向で書く必要はないけれど、だったらどこでメンテナンス性と堅牢性を担保してるのか教えて?」

って言うとフガフガ言いながら逃げるっていうね

まぁ見事に首になったけど、別のJ3のチームに行って試合するんだろうな

2023-10-19

からJavaScriptやってる人は困ってない(キリッ)

お前の書いたクソコードメンテしてる人が死ぬほど困ってるんだよアホかよ

そんでバグ放置してるせいでセキュリティ系の問題死ぬほど起きてる

そのくせ「JavaScriptでは型なんていらない」とか言い出してオブジェクト指向的なコード全然書かない

TypeScriptがなんで流行ってるのか分かってないんだろうな

JavaとかC++とかをずっとやってる人が「オブジェクト指向は古い」って言う意見とはレベルが違うんだよ

みんな「バグを無くそう」「メンテやすコードにしよう」とか考えてオブジェクト指向とかそれに代わる物を使ってるのに

JavaScriptしかやってないアホって自分の好きなコード書けたら別にいいよね、っていう感じで協調性なさすぎだわ

2023-09-27

anond:20230927200327

でもガチCS勉強しようと思ったらアルゴリズムデータ構造必須で、それに適した言語となるとC以下あれやこれやでしょ。

あと、デザインレシピかいう考え方なら OCaml とかの関数型言語が入門に適しているし、オブジェクト指向ならCじゃ無理だし。

オブジェクト指向で学ぶ人生

Microsoft本社入り口に貼ってあるらしいコード

時は金なりという意味か?

    public class Person {
        BasicInfo info;
        float stock;
        float Value;
        public string Name(bool isSpy){
            return isSpy ? info.Name : info.Name.ToSecondName();
        }
        public string Sex(bool isNormal){
            return isNormal == info.isMan ? "Man" : "Woman";
        }
        public float Earn(bool isExtra = false){
            float sexPad = info.isMan ? 1f : 0.5f;
            float racePad = info.isWhite ? 1f : 0.5f;
            var delta = DateTime.Now - info.Birth;
            int age = (int)(delta.TotalDays / 365);
            float result = Value * sexPad * racePad * age;
            if(isExtra){
                Value += result;
            }
            return result;
        }
        enum Race{
            White, Black, Yellow
        };
        class BasicInfo{
            public string Name;
            public int NationalId;
            public bool isWhite;
            public bool isMan;
            public DateTime Birth;
            public BasicInfo(string Name, int NationalId, Race race, bool isMan){
                this.Name = Name;
                this.NationalId = NationalId;
                this.isWhite = race == Race.White;
                this.isMan = isMan;
                Birth = DateTime.Now;
            }
        }
ログイン ユーザー登録
ようこそ ゲスト さん