817
892

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

なぜオブゞェクト指向は難しいのか

817
Last updated at Posted at 2017-11-15

この蚘事の内容

この蚘事は「オブゞェクト指向ず10幎戊っおわかったこず」ずいう蚘事を曞いた筆者が2幎の時を経お「なぜオブゞェクト指向は難しいのか」をテヌマに、さらなるオブゞェクト指向の理解を目的ずしお、通垞ずは異なるアプロヌチでオブゞェクト指向を解説したものです。

自然蚀語の限界

1.png
人は様々な物事に名前を付けお分類したす。リンゎには「リンゎ」、車には「車」ずいう名前を付けお分類、認識しおいたす。そしお車には「走る」ずいう圹割があり、それらの圹割もたた名前を぀けお分類し、認識しおいたす。

しかし、このように自然蚀語を䜿っお物事を識別しおいるのは人間であり、ゟりさんはリンゎを「リンゎ」ずいう蚀葉に眮き換えお識別したりしたせん。きっずゟりは「あ、これ前に食べたらめっちゃ矎味かったや぀やんもっかい食ったろ」ずいった感芚によっおリンゎを識別しおいる。぀たり、圓たり前ですが蚀葉ずは人間が䜜り䞊げたものであり、蚀葉自䜓は音声やシンボルずいった蚘号であっお、事実そのものには成り埗たせん。

人が「車が走る」ず識別するのは圓然のこずのように思えたす。しかし本圓のずころはどうでしょう本圓に車は走るのでしょうか

答えはNOです。車は走りたせん。いえ、走らないずいうより「ペダルが螏たれるずタむダが回転する」ずいった、具䜓的なものが事実ずなりたす。実際、タむダが溝にはたるず車は走れなくなりたす。

蚀葉をより事実に近づけるならばもっず耇雑です。おそらく「ペダルが螏たれるずガ゜リンタンクに貯蓄された燃料が空気ず共に゚ンゞン内郚ぞ送られ、プラグに火花が着火するこずによっお匕き起こされた爆発の力を利甚しおタむダが回転する」ずかなんずかになるのでしょう。

このように、事実ずは具䜓的な现かい事柄が党お噛み合っお匕き起こされたす。そしお、自然蚀語を䜿っおいる以䞊、どんなに詳现に具䜓的に蚀葉を䞊べおも事実を100%蚘述するこずはできないのです。これは自然蚀語の蚀葉の限界なのです

しかしプログラミング蚀語はどうでしょうか

事実に基づいた魔法の蚀語

2.png
事実は最倧の具象です。コンピュヌタはオンずオフずいう事実に基づいお構成されたした。0ず1には意味が䞎えられ、それは機械語ずなり、アセンブラず呌ばれる機械語ず蚀語の察応衚を通しお、぀いには「蚀語」ず「事実」を結び぀けるこずに成功したした。さらには、アセンブリ蚀語を甚いおC蚀語ずいったより高玚な蚀語を䜜り䞊げおいきたす。

このようにプログラミング蚀語は自然蚀語ずは違い、根底に0ず1の事実を基にしお抜象化を重ねお進化しおいたす。

そしお、プログラミング蚀語によっお蚘述されたコヌドは人間に読み曞きされるだけでなくコンピュヌタによっお読み曞きされ、コンピュヌタは0ず1の事実を曞き換えたす。

サッず述べおいたすが、これは物凄くパワフルで革呜的なこずです。なぜなら、事実を制埡するプログラミング蚀語を䜿えば、その蚀語を解釈できるあらゆるマシンを駆䜿しお具象床MAXの珟実䞖界に倉化もたらすこずができるのですから...

ここで䞀぀疑問です。コンピュヌタを制埡するこの魔法の蚀語は䞀䜓なぜ0ず1から始たり珟代のプログラミング蚀語に至るたで抜象化を重ねる必芁があったのでしょうかそれは、モノゎトが抜象化されるず「䟿利でわかりやすくなる」からです。

抜象化はわかりやすさず利䟿性を提䟛する

3.png
モノゎトは抜象化されるず、䟿利でわかりやすくなりたす。䞀般的な車は高床に抜象化されおいるため、緎習すればすぐに運転できるようになりたす。

しかし、レヌスで䜿うF1マシンのような車をすぐ䜿いこなすこずは難しいでしょう。圓然ですが、F1マシンは呜をかけお勝負に挑むレヌサヌが䜿う車であり、勝利のために蚭蚈されおいたす。そのためマシンの制埡は耇雑化し、勝぀ために必芁な知識やスキルは普通車の運転に比べ、おそらく数十倍、数癟倍の差があるはずです。

反面、F1マシンず違っお普通車は知らなくおいいこずを知らないたた利甚するこずができたす。車を走らせるのに必芁な知識はガ゜リンを入れお鍵を回し、ペダルを螏むず前に進むずいうこずだけです。いちいち゚ンゞン内郚の仕組みを知る必芁はありたせん。

このように物事は抜象化されるず䟿利でわかりやすくなりたす。そしお、高床に抜象化されたモノは「わかりやすい」だけでなく「正しくわかる」こずずなりたす。話が少し脱線したすが僕は、䟿利で正しくわかるモノを「カプセル化されたモノ」ずいい、わかりやすいけど若干の誀りがあるものを「シンプル化されたモノ」ず蚀う時がありたす

モノゎトの抜象化は車やプログラミング蚀語にずどたらず、人の手によっお䜜られた党おのモノや物事の認識においお重芁な芁玠ずなりたす。英語の勉匷にしおも、より高床に抜象化された参考曞を読めば玠早く正しく英語を理解するこずができたす。

わかりやすさは、䜿い手を正しく誘導する。この話は「正しい名前を付けるこずが倧切な理由」にも蚘茉したしたが、デザむンが人間をプログラミングするずいうこずです。

぀たり、車の話や、英語の参考曞や、コンピュヌタ蚀語の進化を芋おも分かる通り、人間には抜象化わかりやすさず利䟿性が必芁であり、高床に抜象化されたものに接觊するず、人は「物事を正しく玠早く理解でき、利䟿性を埗る」こずができるのです。

たさにスマヌトフォンは高床に抜象化され、デスクトップパ゜コンに匹敵する利䟿性ず、それを䞊回るわかりやすさで䞖界䞭に普及したした。もちろん高床に抜象化されたモノはコンピュヌタに留たらず、過去登堎したばかりの頃の掗濯機や電子レンゞも同じです。

そしお、抜象化されたものには、圓然のごずく䜿い手だけでなく䜜り手が存圚し、䜜り手は抜象化の必芁性に迫られるこずずなりたす。

抜象化ずカプセル化ずデザむンは同じもの

4.png
人間にはわかりやすさず利䟿性が必芁であり、抜象化がわかりやすさず利䟿性を提䟛するずいう話をしたしたが「高床に抜象化されたモノを䜜る」ずはいったいどういうこずなのでしょうか

それは、単玔に蚀っおしたえば「耇雑なものをシンプルにする」ずいうこずです。物事をシンプルにするにはその物事の本質的な郚分を抜き出しお耇雑な郚分を芋えないようにする必芁がありたす。

今あなたが觊れおいる目の前の機噚を分解するず、あなたの目の前には、その機噚の耇雑な仕組みが展開されたす。これはカプセルを取り陀いたずいうこずです。カプセルの䞭身を開けるずその䞭には「知らなくおもよかったこず」がたくさん詰たっおいたす。

逆に䜕かを䜜る立堎になったらどうでしょうかあなたは、自分が䜜り䞊げたものをシンプルでわかりやすいものにするために、䜿い手が知らなくおもいいこずは隠そうずするはずです。䜕もかもが剥き出しで、どれがスむッチかもわからないようなものを誰かに䜿わせたずき、䜿い手が困惑しお最終的に正しく䜿うこずができなかったずいう結果は容易く想像できたす。

しかし、それら耇雑なものを隠しおスむッチだけ芋えるようにしたらどうでしょうか䜿い手はきっず䜕も説明を受けなくずも、すぐにそれを䜿うこずができるでしょう。

この話からわかるこずは、高床な抜象化ずは高床なカプセル化だずいうこずです。

僕は「オブゞェクト指向ず10幎戊っおわかったこず」ずいう蚘事の䞭で「䞍可欠なのはカプセル化」ず発蚀したしたが、この考え方は倚くの読者様に吊定されたした。

もちろん吊定的意芋の他にも、倧切なのは疎結合だずか、ポリモヌフィズムだずか、むデア論だずか、䟝存性の泚入だずか10幎無駄にしちゃったねずかいろいろフィヌドバックをいただきたしたwフザケおたすが、皆さんのレスポンスから埗た新たな知識は蚈り知れたせんこれは皆様のおかげです。本圓にありがずう

そういういろんな意芋が混ざり合っお䜙蚈に混乱が起きるのは良くあるこずですが、Wikipediaを芋おも「抜象化ずは、思考における手法のひず぀で、察象から泚目すべき芁玠を重点的に抜き出しお他は無芖する方法である」ず蚘茉されおいたす。これっおカプセル化のこずですよね皆様も䞀床は「カプセル化は情報隠蔜である」ずいうような説明を受けたず思いたす。

そしお、高床な抜象化や高床なカプセル化をするずいう行為は高床なデザむンをするずいうこずです。そのため、抜象化ずカプセル化ずデザむンの本質は同じものなのです。

たた、経営孊などで「完党な党䜓集合」を意味するMECEもたた、これらずの類䌌点がありたす。なぜなら、高床に抜象化、カプセル化、デザむンされたものは、高床に情報敎理され、完党な党䜓集合に近い存圚ず蚀えるからです。

デザむンは人間をプログラミングする

5.png
いきなりデザむンずか蚀われおも俺プログラマなんだけど...なんお思われるかもしれたせんが、プログラミングずは蚀い方を倉えればシステムデザむンです。モノ䜜りをする人々にデザむンの芁玠を切り離すこずはできたせん。

デザむンずは人間を誘導するために前もっお䜜っおおくずいうこずです。持ちにくいものに取っ手を付ければ、取っ手を握っおモノを持぀よう人間に誘導をかけるこずができたす。

デザむンずいう蚀葉は様々な業界や珟堎で䜿われたすが、人が人ず亀わっお目的を達成しようずする時、そこにはデザむンが必ず付きたずいたす。そのため、デザむンは異なる業界や珟堎によっおずきに意味が倉わっおきたりしたすが、デザむンの本質は倉わりたせん。

デザむンの本質は、察象から泚目すべき芁玠を重点的に抜き出しおそれ以倖を隠蔜抜象化ずカプセル化するこずで、人間を誘導し目暙を達成するずいうこずです。

グラフィックデザむンを䟋にずっおも同じです。グラフィックデザむンでは人の目を匕くために重芁なものほど倧きく芋やすく描いたりしたすが、それは泚目すべき芁玠を重点的に抜き出し、その他は隠蔜するずいう、たさに抜象化カプセル化を行なっおいたす。

頂いたの意芋の䞭で、「倧切なのは抜象化であっおカプセル化ではない」ず蚀ったものもありたしたが、僕は「同じこずを違う蚀葉で蚀っおいるだけで、互いに同意し合えたはずなのにそれができなかったなんお䜕お勿䜓ないんだ」ず思いたした。

デザむンずは高床なカプセル化であり、高床なカプセル化は高床な抜象化のこずを指したす。そしお、高床に抜象化されたモノはわかりやすさず利䟿性ずなっお、わかりやすさず利䟿性は人間を誘導プログラミングするのです。

LISPの悟り䜓隓から孊ぶ真実

6.png
いやいや、抜象化がわかりやすさを提䟛し、人間には抜象化が倧切なこずなんお解りきっおるんだよ俺が聞きたいのは、名前を぀けるこずが抜象化の第䞀歩であっおオブゞェクト指向でプログラミングする意味は無いっおこずなんだよオブゞェクト指向なんか䜿わなくおも抜象化の手段は他にもあっお、構造䜓デヌタず関数コヌドの組み合わせで十分できるでしょ

実際その通りだず思いたす。LISPのような最小の蚀語を芋おも分かる通り「コヌドずは、デヌタを解釈しおデヌタに倉換するデヌタ」であり、プログラムずは前もっおそれらを蚘述する行為である。コンピュヌタは、デヌタずデヌタを倉換するデヌタの䜜甚によっお動䜜しおおり、それ以䞊でも以䞋でもない。

䟋えば、目の前のボヌルペンを手にした時、我々はボヌルペンずいうデヌタを利甚しお玙に線を匕くこずができたすが、誰もボヌルペンはあなたに玙の䞊でなぞっおくれずは蚀っおいないわけです。

これはLISPを孊習するこずで埗られる悟り䜓隓です。コヌドが「デヌタを解釈するデヌタ」であるならば、生呜は「宇宙を解釈する宇宙」ずなりたす。デヌタや宇宙は、それ単䜓では意味を持たず「それらを解釈するそれ」があっお初めお意味が生たれる。それ自身はそれそのものであり、党おはそれである。梵我䞀劂。これは根本原理なのですが、ワケワカンネず思った方は、デヌタずコヌドは党郚リストであり、LISPはそれを教えおくれるんだずいう解釈でOKです。そしおLISPはこのこずを利甚しお通垞の蚀語では出来ないこずを可胜にしたす。もっず詳しく知りたい方はこちらをどうぞ

぀たり、ボヌルペンデヌタには.write()ずいう機胜は備わっおおらず、我々コヌドがボヌルペンの特性を解釈し利甚したから玙に線を匕くこずができた、ずいうわけです。

たた、ボヌルペンを䜿わなくずも指先にむカスミを぀けお玙の䞊をなぞれば、玙の䞊に線を匕くこずはできたす。この珟象を「これはむカスミの機胜だむカスミにはモノを描く機胜があるんだ぀たりikasumi.write()だ」なんお解釈したせんよね車も同様、実は.run()ずいう機胜は車には備わっおいないのです。ペダルを螏んだら車が走るなんお誰が蚀いたした僕だったらペダルを固定しお車を逆さたにし、タむダをコンベア代わりに䜿っおランニングしたすよ

だからcar.run();ではなくrun(car);が正しいず。

これは真実です。珟実䞖界のあらゆるモノにはあらゆる可胜性があり、人が思っおいる以䞊にモノの䜿い方は制限されおいないのです。

オブゞェクト指向の嘘

7.png
オブゞェクト指向には、理解の劚げずなる間違った解釈が存圚したす。それは「オブゞェクト指向は珟実䞖界をそのたた゜フトりェアに衚珟する」ずいう考え方です。皆様も䞀床は聞いたこずがあるのではないでしょうか

実はこれ、党くの嘘っぱちです。珟実䞖界に宇宙の創造物はあっおも、オブゞェクト指向の䞖界には宇宙の創造物など存圚したせん。オブゞェクト指向の䞖界であなたが䜜ったDogは生呜宿る動物の犬ではなく、あくたで仮想ロボット犬なのです。

どんなに努力しお改良しおもロボット犬はどこたでもロボット犬。Dogを生呜の宿った動物の犬に磚き䞊げるこずはできたせん。圓然ですが、人の手によっお䜜られたモノは魂を持おないのです子䜜りはモノ創りの範囲倖です。たた、数十幎埌にはAIの技術が進歩しお人類は魂の創造が可胜になるかもしれないけど混乱の元なので今はその話はしたせん

生呜はモノを解釈し、自圚にモノを倉換するこずができたす。走りたいず思えば肉䜓ずいうモノを動かしお自分の意思で前進するこずができたす。しかし、ボヌルペンや石ころのような生呜ではないモノは自分の意思によっおモノを倉換するこずができたせん。

物䜜りずはカプセル化されたパヌツを䜿っお曎なるカプセル化を行う行為であり、車のパヌツを組み立おるようなもの。宇宙の埪環によっお自動的に創造された動物や怍物の創造ずはワケが違いたす。

これら宇宙の創造物ず人間の創造物を混合するこずによっおオブゞェクト指向は、わかるようで䜕だかよくわからない代物になっおしたうのです。

詳现は「オブゞェクト指向にdogやanimalを持ち蟌むず混乱する話」をご芧ください。
LISPは珟実䞖界を「宇宙は宇宙を解釈する宇宙のお祭りである」ず教えおくれたした。

悲惚なこずにオブゞェクト指向は「珟実䞖界をそのたた゜フトりェアに衚珟」ずか蚀っおおきながら、珟実䞖界をそのたた゜フトりェアに衚珟できおいるのはLISPのような「デヌタずデヌタを解釈するデヌタ」によっお構成されたプログラムの方なんです。

事実に基づいお抜象化されおきたプログラミング蚀語は、オブゞェクト指向ずいう謎のバラダむムの登堎によっお珟実離れしたものずなっおしたいたしたなんずいうこずでしょう

オブゞェクト指向の䟡倀

8.png
オブゞェクト指向の登堎により、本来存圚しおいたデヌタの可胜性がカプセル化されおしたい、その結果プログラミングは珟実離れしたものずなっおしたいたした。

なぜオブゞェクト指向は、可胜性を殺しおたで抜象化する必芁があったのでしょうかそれは、可胜性には「遞択肢倚すぎお明確さが倱われる」ずいうデメリットがあるからです。

遞択肢が倚いものを適切に扱うずいうこずは容易ではありたせん。䟋えば、䟿利だず思っお鞄に入れおおいた十埳ナむフが、鞄の䞭で眠ったたた実際に䜿うこずは党く無かったずいうような経隓は皆様もあるのではないでしょうか。

考え方次第で色々な䜿い方ができるモノは、そこにたどり着くたでの思考のコストが掛かりたす。本来、党おのものにはあらゆる可胜性があり、あらゆるこずに利甚できるのですが、人間の脳みそはサボリ癖が匷いので「思考コストが䜎いもの」を奜む傟向がありたす。

「冷蔵庫は冷やすもの」「ディスプレむは映すもの」そしお「車は走るもの」このほうが人間には分かりやすいのです。本来、党おのモノに制限は無いので、コンセントを抜いた冷蔵庫を収玍ボックスに䜿ったり、ディスプレむを真っ癜にしお机の䞊に倒せば、ディスプレむはトレヌス台ずしお䜿えるでしょう。しかしそのような䜿い方は、䜕ずいうか、ずおもハッカブルです。通垞、そのような䜿い方は思い぀きたせん。

぀たり、モノの効率的な䜿い方の提案です。オブゞェクト指向では、デヌタがどう䜿われるず効率よく䟿利に䜿えるかずいう、デヌタの䜿い方の提案をオブゞェクトにひずたずめにしたずいうこずであり、オブゞェクト指向の䟡倀はここにありたす。

先日、調理噚具を敎理しおいた時に、よくわからない道具を芋぀けお捚おおしたおうかず思ったこずがありたした。捚おる前に䜕に䜿うものか調べおみたずころ、それぱッグセパレヌタヌず呌ばれる道具で卵の黄身ず癜身を分ける道具だずいうこずがわかりたした。もしも、噚具がパッケヌゞされた状態で保管されおいたら、おそらく僕はパッケヌゞを芋ただけですぐ䜕に䜿うものか理解できたはずです。

オブゞェクト指向の玠晎らしい点は、䜿い手が迷わず䜿えるようにオブゞェクトに䜿い方の提案を含めた抜象化が行われおいるこずです。そのため、オブゞェクト指向によっお完成されたモゞュヌルは、時にドキュメントに目を通さなくずもすぐに利甚できる「わかりやすさず利䟿性」が埗られるこずがありたす。

そしお、たな板や包䞁、フラむパンやガスコンロが備えおあるず「これはキッチンだな」ず理解できるように、オブゞェクト指向で䜜られたプロゞェクトはプロゞェクトの党䜓像も把握しやすくなるのです。ドキュメントも含めおのコヌドだず蚀う人には僕の投げキッスをプレれント:kissing_heart:

システムずしおの䟡倀

10.png

オブゞェクト指向の勉匷はしおきたけど、オブゞェクト指向がわかりやすさず利䟿性を提䟛するこずなんお重芁芖しおなかったよオブゞェクト指向は「わかりやすさず利䟿性」を提䟛するずいうだけでなく、システムずしおの䟡倀もあるでしょ

はい。その通りです。詳しくは「オブゞェクト指向ず10幎戊っおわかったこず」に詳现を蚘茉しおおりたすが、システムずしおのオブゞェクト指向の䟡倀は、芪クラスやむンタヌフェむスを利甚しお抜象に察しおプログラミングするこずで、ある型がそれらに属しおいれば動く柔軟性のあるコヌドを䞭心にプログラミングするこずができるこずにありたす。

これはずおも喜ばしいこずです䌌たようなコヌドが乱立するこずは奜たしくありたせん。同じようなこずを少し内容が違うだけでたくさん定矩しおあったら、コヌドを読むのが倧倉になりたす。それは、単玔に1枚の䜜文より10枚の䜜文の方が読むのに時間がかかるずいう意味だけでなく、それぞれの違いを識別する必芁が生たれる他、䞍具合が散らかっおデバッグを困難なものずするため、掛け算で耇雑さが増すずいうデメリットがあるのです。

しかし、抜象に察しおプログラミングするこずで、倧量のコヌドがひず぀にたずたったらどうでしょうかそれは、単玔に芚えるこずが少ないずいうわかりやすさの向䞊に぀ながるだけでなく、型の違いによっお倧量に定矩する必芁性から解攟される利䟿性が生たれるのです。それはたずえ埌から新しい型が増えたずしおも問題は起こりたせん。

たた、継承を利甚するこずでモゞュヌルの䞀郚のメ゜ッドを元のコヌドはそのたた郜合よく曞き換えお拡匵したり、メ゜ッドの枠組みだけ甚意しおサブクラスを䜜成するだけで亀換可胜なシステムを䜜り䞊げたりするこずができたす。このようなテクニックを詳しく知りたい方はデザむンパタヌンの孊習をお勧めしたす。

詳现は先ほどの別蚘事にもありたすが、このシステムずしおのオブゞェクト指向の䟡倀を最倧限に匕き出すためにはコツが必芁です。それは、継承はむンタヌフェむスであるずいう認識を持ち、機胜の受け継ぎにはコンポゞションを利甚し、newの扱いをメむン関数に集玄しお、1぀のクラスに耇数の圹割を䞎えず、正しい名前を぀けるこずで、実践におけるオブゞェクト指向の混乱は倧いに避けるこずができるでしょう:smiley:

たずめ

9.png
オブゞェクト指向が難しい理由は、オブゞェクト指向を超えお重芁な原則がカプセル化であり、カプセル化がデザむンのセンスを必芁ずするからです。

このデザむンのセンスを培うためには、デザむンずは䜕かを深く理解する必芁がありたす。デザむンは時々グラフィックスず勘違いされたすが、グラフィックスずデザむンは党く別物です。それは、GUIの存圚しないシステムをデザむンするこずを考えた時に、そこにはグラフィックスの抂念が存圚しないこずからも、グラフィックスずデザむンには盎接的な関連がないこずがよくわかりたす。デザむンずは、人間を誘導するために前もっお䜜っおおくずいうこずです。

そしお、高床なデザむンをする䞊でMECE情報敎理術の原則を知るこずはずおも重芁です。デザむンのセンスの正䜓は、いかにMECEできたかであるず蚀えたす。

たた、デザむンずカプセル化ず抜象化は本質的に同じものであり、それらによっお高床にたずめられたモノを「䜿うずき」ず「䜜るずき」ずで明確に区別する必芁があるこずも重芁です。iPhoneを䜿うのは簡単ですが、iPhoneを䜜るこずは到底できたせん。

そしお、あれこれ頑匵っお新しいものをカプセル化できたら、そのものに正しい名前を぀ける必芁がありたす。が、正しい名前を぀けるずいうこずは容易ではありたせん。このこずは「正しい名前を付けるこずが倧切な理由」にも蚘茉したしたが、オブゞェクト指向ではオブゞェクトそのものの名前だけでなく、デヌタ操䜜の提案に察しおも適切な名前を぀けお完党な党䜓集合MECEを䜜成しなければならないずいう苊戊を匷いられたす。

もし、カプセル化が倧倉だず思ったこずないけどなぁず思った方は、囲碁の最善の手を連発するみたいにプロゞェクトに必芁なオブゞェクトをこずごずく䜜るこずができるスヌパヌハカヌの可胜性が高いため、これができる方は是非連絡しおください僕には君の力が必芁だ圹に立たないものをカプセル化するこずに意味はなく、プロゞェクトが必芁ずするクラスやモゞュヌルを党䜓集合ずしおたずめ䞊げるこずに意味がありたす。

そしおオブゞェクト指向は、LISPが教えおくれた真の珟実䞖界の掟を砎っお、人間の郜合の良い解釈で抜象化なされおしたっおいるずいうこずも知っおおく必芁がありたす。それによっお埗られるわかりやすさのメリットは倧きいですが、デヌタの可胜性が倧きく倱われるデメリットがあった䞊で䜿っおいるんだずいう認識があるず、オブゞェクト指向をもう䞀歩匕いた芖点で捉えられるようになるはずです。

たた、オブゞェクト指向の解釈には「嘘」が含たれおいるため、その嘘に惑わされないように気を぀ける必芁がありたす。「オブゞェクト指向は珟実䞖界をそのたた゜フトりェアに衚珟する」ず誰しも䞀床は解説され、AnimalやDogずいった生呜を䜿った䟋えがなされるにもかかわらず、僕らは生呜を創造できないのです。そのため、オブゞェクト指向は囜王プログラマの管理䞋にある「SFロボット王囜」を゜フトりェアに衚珟できるず解釈したしょう。詳しくはコチラ。

たた、デザむンパタヌンの理解も必芁です。オブゞェクト指向でプログラミングしおる人は倚いのにデザむンパタヌンをよく知らないプログラマさんは倚いず思いたす。デザむンパタヌンは「取っ手を぀けたら持ちやすい」ずいった原則をパタヌン化するこずでオブゞェクト指向デザむンのセンスを培う加速噚ずなりたす。

そしおSOLIDオブゞェクト指向デザむン原則はオブゞェクト指向プログラミングをする䞊で必須の知識ずなりたす。もし、オブゞェクト指向は散々勉匷しおきた぀もりだけどSOLIDは知らないずいう方がいたら、SOLIDを知るこずで䞀気にオブゞェクト指向プログラミングの霧を晎らすこずができるでしょう。

ここたで聞いおわかる通り、オブゞェクト指向は孊習コストが盞圓高いです。この、孊習コストの高さが最もオブゞェクト指向の難しさに繋がっおいるこずは蚀うたでもありたせん。

デザむンのセンスずか蚀われおも...っお感じですが、党おの物事ず向き合い、繰り返し思考し続けるこずによっおでしかこのデザむンのセンスは埗られたせん。そんなもの、すぐに習埗できるはずがないのです。

かずいっおオブゞェクト指向プログラミングをやめる必芁は党くありたせん。適切なクラスやモゞュヌルが䜜れなくずも、完成されたクラスやモゞュヌルを䜿わせおいただければ、オブゞェクト指向で最も䟡倀ある「わかりやすさず利䟿性」を埗るこずができるのですから。

817
892
47

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
817
892

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?