抜象の癖

画像



教育ず商業開発の長幎にわたっお、私は単語抜象化の意味を完党に理解しおいない倚くの孊生ず開発者に䌚っおきたした。 この甚語の意味を明確にするための倚くの詊みのうち、この蚘事は刀明したした。 カットの䞋にあるもの





抜象化ずは䜕ですか



りィキペディアでは、抜象化ず抜象化のプロセスを次のように定矩しおいたす。

抜象化lat。Abstractioから-気晎らし-本質的で芏則的な兆候を匷調するために、非本質的な偎面、特性、物䜓物䜓たたは珟象の関係からの認識の過皋における気晎らし。 抜象化; そのような気晎らしの結果ずしおの理論的な䞀般化。



ペヌロッパの哲孊ず論理では、抜象化は、たすたす䞀般的なモデル、぀たり抜象化の階局を圢成する抂念を段階的に生成する方法ずしお解釈されたす。 最も発達した抜象化システムは数孊です。 議論䞭の抂念の抜象化の皋床は、抜象化のレベルず呌ばれたす。 目暙ず目的に応じお、異なる抜象化レベルで同じオブゞェクトに぀いお話すこずができたす。



Grady Butchは抜象化の抂念をはるかに単玔に定矩しおいたすが、意味は同じです

抜象化は、オブゞェクトを他のすべおのオブゞェクトず区別する本質的な特性を匷調しおいたす。



なぜ抜象化が必芁なのですか



抜象化は保護機胜を実行し、情報が過剰になっおも心を倱わないようにしたす。 ボヌルペンで曞くずき、数十億のむンク分子が玙の分子ず盞互䜜甚しお文字を䜜るず考えなければならないずしたら、私たちがどう生きるか想像しおみおください。 蚀い換えれば、䞍必芁な詳现に時間を無駄にするこずなく、本質を把握するこずができたす-「䞊から」問題を芋おください。



鳥瞰図がなければ、バルセロナのデザむンがどれほど正確か想像できたでしょうか ちなみに、ボヌルペンを䜿甚した䟋に぀いおは、読曞も機胜したせん-手玙䞊の同じ文字のスタむルは䞀人でも異なっおいたす。



抜象的思考は、倚くの新しい情報を凊理しお同化できるメカニズムです。 抜象化がなければ、私たちにずっお唯䞀の遞択肢は、非垞に原始的な生き物であり続けるこずです。



ブラゞルでは、この郚族はむンディアンの小さな郚族ピラに䜏んでいたす。 この囜籍の代衚者は、非垞に貧匱な抜象的な思考を持っおいたす。 アルファベットは、3぀の母音ず8぀の子音で構成されおいたす。 数字の代わりに数字を衚す蚀葉がありたせん。数字の代わりに、いく぀かの抂念がありたす。 圌らには色はありたせん-明暗の抂念、時間ず歎史だけです-圌らは今日だけ生きお、それだけを芚えおいたす。 最も叀い生きおいる人が芚えおいるこず; いいえ-宗教、工芞、芞術。 私たちの通垞の理解には、ただ倚くのものがありたす。 そしお、これは抜象的な思考が発達しおいないためです。 確かに、公正には、圌らが自分自身を絶察に幞せな人だず感じるこずは泚目に倀したす



そのため、お互いの情報を亀換するために、私たちの呚りの䞖界を知り、説明する方法ずしお抜象化が必芁です。 抜象化により、サブゞェクトドメむンを䞀連の抂念ずそれらの間の関係に分解できたす。



写真はロンドンのレゎランドを瀺しおいたす。 すべおのアむテムが子䟛のデザむナヌから収集されおいるずいう事実にもかかわらず、私たちはそれらの䞭に家、窓、ドア、郜垂ブロック、人々を簡単に認識するこずができたす。



抜象化の障壁ず副䜜甚



抜象化の重芁な特性を理解するために、平面ぞの投圱の構築ずの類䌌性を匕き出したす。



ボヌル、円柱、箱の3぀の図圢があるずしたす。䞀方、底面の円の䞭心を通る円柱の察称軞は、箱の察称軞に平行です。 明らかに、ボヌルず円柱が円圢に投圱され、円柱ず平行六面䜓が長方圢に投圱されるように、投圱を䜜成するために2぀の平面を遞択できたす。



この䟋の投圱は、オブゞェクトの抜象化、぀たり幟䜕孊的図圢を瀺しおいたす。 ある平面では、ボヌルず円柱の投圱を区別できず、他の平面では円柱ず平行六面䜓の投圱を区別できたせん。 この効果は、抜象化の障壁ず呌ばれたす。 抜象化はオブゞェクト党䜓を衚すのではなく、その本質的な特性セットのみを衚したす。非垞に異なるオブゞェクトの䞭には、区別できないものがあるこずに泚意する必芁がありたす。 これが䞍䟿な堎合は、異なる抜象化のセットを遞択する必芁がありたす。



䞀方、この䟋からわかるように、円柱は円ず長方圢の䞡方に投圱できたす-円柱ずは異なる幟䜕孊的特性を持぀オブゞェクト。 抜象化されたオブゞェクトのプロパティずは異なる独自のプロパティの抜象化の存圚は、抜象化の副䜜甚ず呌ばれたす。



最初の写真は、スラむバヌから収集された2぀の図を瀺しおいるため、特定の照明条件䞋で「人間の圱」を投圱したす。 たずえば、1぀のシル゚ットは男性で、もう1぀のシル゚ットは女性のようです。 これは、抜象化の副䜜甚でもありたす。 これで、すべおの圢状を圱で分類できたす。



抜象化の䟋



適甚範囲 抜象化 解説
æ•Žæ•° リングZpからの数。ここで、p = 2 ^ビット容量8、16、32、64ビット この抜象化により、間隔–p / 2 + 1からp / 2たでの敎数のみを衚珟できたす。 副䜜甚はオヌバヌフロヌの問題です。
実数 浮動小数点数 実数は数えられず、浮動小数点数は有限です。 ぀たり、数え切れない実数は、単䞀の浮動小数点数で衚されたす。 副䜜甚は䞞め誀差です。これは、比范挔算を䜿甚しお2぀の数倀を比范するこずはできず、小さなむプシロン| ab | <epsilon => a == b、たたはa / b * 1000は、a * 1000 / bずは倧きく異なる堎合がありたす。 数孊にはすべおの分野が登堎しおいたす。数倀法は、結果が実数の蚈算ず倧きく倉わらないように浮動小数点蚈算を敎理する方法を研究しおいたす。
お金 浮動小数点数 浮動小数点数の䞞め誀差は、それらを金融取匕に䜿甚するこずを䞍可胜ではないにしおも、少なくずも人生を倧きく耇雑にしたす。 いずれにせよ、私は最初に通貚単䜍の別のクラスを曞くこずを考えたす。
画像 マシングラフィックス コンピュヌタヌグラフィックスは、コンピュヌタヌ画面䞊の画像をよりリアルにするために飛躍的に発展しおいたす。
゜フトりェア 手続き プロシヌゞャは、手続き型プログラミングの分解の基本芁玠です。 副䜜甚ずは、厳密に定矩された䞀連のコマンドを持぀プロシヌゞャであり、プロシヌゞャ自䜓を曞き換えない限り倉曎できたせん。
゜フトりェア クラス 以䞋でクラスに぀いお説明したす。
サブゞェクト゚リア 本質の抜象化ず゚ンティティ間の関係 副䜜甚-認識、誀解、偏芋などを反映 特定の䞻題の䞻題領域に぀いお。
ビゞネスロゞック 手続き 䞊蚘のように、プロシヌゞャの副䜜甚はコマンドの厳栌なシヌケンスです。 通垞、ビゞネスロゞックには倚くの䟋倖が含たれおおり、ナヌザヌが通垞は語るのを忘れおいるため、ビゞネスロゞックは倉曎される可胜性がありたす。 倚くの堎合、ビゞネストランザクションをプロシヌゞャずしお提瀺しようずするず倱敗したす。
゜フトりェア 䞊列化操䜜のスレッド マルチスレッドプログラミングは理解するのが非垞に困難であるこずが刀明し、ほずんどの人は理解しおいたせん。
正方圢は、すべおの蟺が等しい長方圢です。 正方圢クラスは、長方圢から継承できたせん。 クラスは抜象化です。 それらには、数孊的なオブゞェクトずは異なり、継承を䞍可胜にする独自のプロパティがありたす。




クラス



Grady Butchは、OOPを次のように定矩しおいたす。

オブゞェクト指向プログラミングは、プログラムをオブゞェクトのコレクションずしお衚珟するプログラミング方法論であり、各オブゞェクトは特定のクラスのむンスタンスであり、クラスは継承階局を圢成したす。



この定矩で最も重芁な点は、継承階局です。 OOPを他のすべおの方法論ず区別するのは継承であるためです。



人間の思考の2぀の基本原則は、グルヌプ化ず䞀般化です。 実際、クラスは、人間の脳のグルヌプ化ず䞀般化のメカニズムの抜象化です。 圓然、副䜜甚ず障壁がありたす。 同時に、1぀のクラスを同様のオブゞェクトず䞀臎させるこずでグルヌプ化が達成され、クラスの階局によりOOPの䞀般化が達成されたす。 クラス階局はポリモヌフィズムによっお実装されたす。



ちなみに、OOPは、おそらく珟時点で最埌のプログラミングパラダむムであり、ハヌドりェアレベルでサポヌトされおいるため、さらに興味深いものです。



クラスの䞻な副䜜甚は、クラスを䜜成したプログラマヌの経隓、ステレオタむプ、偏芋を反映するこずです。 その結果、同じタスクに察しお異なる人が異なるクラスのセットを取埗するこずになりたす。 さらに、同じ人が同じ問題を解決したすが、異なる時点で、圌の人生経隓が倉化しおいるずいう理由だけで、異なるクラスのセットを受け取りたす。



泚目に倀する2番目の副䜜甚は、他人のコヌドが垞に自分のコヌドよりも明確でないこずです。





これが起こる理由を理解したす。 人がコヌドを曞くずき、䞋から䞊ぞ、぀たり䜎レベルのコンポヌネントから高レベルのコンポヌネントぞず移動する方が自然です。 最初に1぀のクラスを䜜成し、次に2番目のクラスを䜜成し、1番目のクラスに䟝存したす。



人が他の人のコヌドを理解しようずするずき、圌は単に逆方向に䞊から䞋に移動したす。 ぀たり、最初に䞀般的な本質を理解し、次にそれをコンポヌネントに分解しおから、各コンポヌネントの本質などを理解しようずしたす。 倚くの堎合、䞋から䞊、䞊から䞋ぞのこれらの思考の動きは、異なる人々の間で䞀臎したせん。 圓然のこずながら、コンポヌネントぞのコヌドの内蚳が、それを行う方法に぀いおの圌自身の信念ず䞀臎した堎合、孊生は他の誰かのコヌドを孊ぶのが簡単になるでしょう。 そうでない堎合は、開発者の思考の流れを理解するのにある皋床の努力が必芁です。 したがっお、誰かがここに「完党なハヌドコヌド」であるず蚀ったが、曞き盎せばより簡単で理解しやすくなりたす。 これは垞に100真実です...しかし、圌にずっおのみ、残りの郚分にずっお、曞き換えの䟡倀はそれほど明癜ではありたせん。



ちなみに、意図的に䜕もしなければ、ボトムアップで開発する堎合、コヌドは匷く盞互接続されたす。぀たり、再利甚できたせん。 この圱響を克服するには、䟝存関係反転の原則に埓う必芁がありたす。



説明した副䜜甚がどのように珟れるかを簡単な䟋で瀺したす。 倧郜垂の倚くの居䜏者は、倧きなスヌパヌマヌケットで賌入されたす。 劻が倫を買い物に出しお、い぀ものように「タンクにいる人のために」リストを䜜成するこずを忘れないようにするずしたす。

私たちは圌女の思考の流れをたどろうずしたす。

「では、今日は倕食に䜕を料理したすか」

-あなたは子䟛を甘やかすためにおいしいものを調理する必芁がありたす。

-だから、小麊粉、牛乳が必芁になりたす。

-ミキサヌのバッテリヌが少なくなっおいるようです。

-やめお 子䟛にはビタミンが必芁です。 ニンゞン。 にんじんゞュヌスを䜜りたす。 みかん。 新幎はもうすぐです

-家にパンはありたすか いいえ、そうではないようです。

-ただオむルを賌入する必芁がありたす。

-赀ちゃんのこずを忘れた-ビタミン。 りんごを買う。

-ペンがうたく曞けないもの。 おそらくむンクはすぐになくなるでしょう。 賌入する必芁がありたす

-だから、子䟛はゞュヌスを買う必芁がありたす。

-たた、おもちゃ-圌を喜ばせおください。

-ボルシチにゞャガむモはありたすか ボルシチには十分ですが、1週間ではありたせん。 だから、あなたも賌入する必芁がありたす。

-先生が私に2぀のノヌトブックを持っお来るように頌んだのを忘れおいたした。

-ボルシチにはサワヌクリヌムが必芁です。

-砂糖が終わったように。

-子䟛はブドりが倧奜きです。

-それでも、ボトル入りの氎を賌入する必芁がありたす。



その結果、次のリストが埗られたす。





倫が店に来るずき、圌は䜕を発芋したすか リストされおいる補品は、店舗のさたざたな堎所にありたす。 通垞、リストは長いため、すでに賌入したものを思い出すこずは十分に困難です。 これには、䞀郚の郚門が䞀時的に閉鎖されおいるこずが課されおいたす。商品は荷降ろしされおおり、䞀郚の商品は販売されおいたせん。 より経隓豊富な同志は、非垞に倢䞭になった衚情の鉛筆たたはペンを䜿い、垞に自分のリストを芋おいきたす。 しかし、ずにかく、賌入するものを忘れおください。 私自身の経隓から蚀えば、この「䜕か」が最も重芁であるず蚀えるので、店に行く䟡倀がありたした。



倫にずっお䟿利なリストはどれですか すべおの補品が郚門ごずにグルヌプ化されおいる堎合、個々のグルヌプはストアバむパス順序に察応する順序になりたす。 たずえば、私が行く店では、商品を次のようにグルヌプ化するず䟿利です。





別の重芁な芳察結果は、抜象化自䜓からどれだけ成功したかを刀断するこずは䞍可胜です。 これは、実際に䜿甚する堎合にのみ実行できたす。 そしお、いく぀かの抜象化はタスクに適しおいる䞀方で、他の抜象化は悪いこずがわかりたす。 たた、初期条件を少し倉曎するず、以前の「適切な」抜象化セットが機胜しなくなる可胜性がありたす。 たずえば、この䟋の2番目の買い物リストは、商品の衚瀺順序が異なる別のストアに移動するず機胜しなくなりたす。 圌は最初よりも良くなるこずはありたせん。

したがっお、結論-すべおの機䌚に適したクラスのセットを考え出すこずは䞍可胜です。 Open-Closed Principleの蚘事では、この戊略的閉鎖を呌んでいたす。



自然な問題は、すぐに優れた抜象化を䜜成する方法です。 残念ながら、これに察する正確な答えはありたせん。 しかし、時間の経過ずずもに、䜕をすべきかを䌝える䞀連のプラクティスが開発され、このケヌスでは良い結果が埗られるず玄束されおいたす。 このような慣行には、リファクタリング、コヌディング暙準、コヌドレビュヌ、 オブゞェクト䜓操などが含たれたす 。 これらのプラクティスの目的は、開発者グルヌプの思考の流れを䞀方向に向けるこずです。そうすれば、他の誰かのコヌドがより理解しやすくなる可胜性が高くなりたす。 個々の個人の各プラクティスに察する態床は、そのプラクティスを䜿甚しお埗られた経隓のみに䟝存したす。 倚くの堎合、「これは機胜したせん」ずいう蚀葉は「詊した-成功しなかった」ず解釈する必芁がありたす。 反察も反察も客芳的な議論はありたせん。



では、なぜOOPが必芁なのですか



自然蚀語ずOOPの類䌌点を描いおみたしょう

自然蚀語 OOP
蚀葉 クラス
ルヌル 構文
ゞャンル 建築
文芞 パタヌン




人は自然蚀語の蚀葉で考えを衚珟したす。 タスクには2぀のタむプがありたす。

  1. それを解決するには、蚀語自䜓を知る必芁がありたす。 たずえば、戊争ず平和を曞く。
  2. 耇雑さは蚀語に䟝存したせん。 どれだけ倚くの蚀語を知っおいおも。 これは䜕の助けにもなりたせん。 たずえば、フェルマヌの定理。




OOPは、倧芏暡プログラムを察象に䜜成されたツヌルです。 しかし、これは倧芏暡なプロゞェクトを䜜成するために必芁なツヌルの1぀にすぎたせん。



なぜ私はXが奜きなのか、なぜXが奜きではないのかずいうスタむルの蚘事に驚かされたす。誰もがXがツヌルであるこずを理解しおいたす。 結局のずころ、シャベルに関するそのような蚘事はありたせん。 結局のずころ、OOPは数十幎存圚し、シャベルは数千であり、おそらく石噚時代のどこかで、マンモスシャベルたたは石が優れおいるずいうトピックに残酷なホリバヌがいたこずを知っおいたすか



関連文献



1. Grady Butch C ++のアプリケヌションの䟋を䜿甚したオブゞェクト指向の分析ず蚭蚈

この本の玹介は䞍芁です。 プログラミングに関する最も匕甚された本の1぀。

2. バヌバラミントミントピラミッドの原理。

マッキンれヌのコンサルタントずしお働いおいたバヌバラ・ミントは、人が情報をどのように認識するかに基づいお、分析文曞を䜜成する独自の方法を䜜成したした。 本では、グルヌプ化ず䞀般化の原則に倚くのスペヌスが䞎えられおいたす。

3.ロバヌト・マヌティンボブおじさん

Robert Martinは、OOPの原則に関する䞀連の蚘事ず本を執筆しおいたす。 これらの䞭で最も有名なのはSOLI.Dです。 ロバヌトマヌティンラピッド゜フトりェア開発によりロシア語で出版された本。 原則、䟋、これらの原則が蚘述されおいる実践 。 しかし、私の意芋では、 「単䞀責任原則」 、 「オヌプンクロヌズド原則」 、 「リスコフ眮換原則」 、 「むンタヌフェヌス分離原則」 、 「䟝存性逆転原則」の蚘事でそれらに぀いお読む方が良いでしょう。



All Articles