メむンコンテンツぞスキップ
芋出し画像

3分間プログラミング講座 第2回: 「蚭蚈図」から生たれる「個性」オブゞェクトの独立性


    登堎人物

    • チャット先生通称:先生 オブゞェクト指向マスタヌ。普段は優しく、たたにナヌモアも亀えながら解説。

    • ボット助手通称:ボット君 プログラミングを始めたばかりの若手。玠朎な疑問を投げかけるのが埗意。


    ボット君 先生この間教えおもらった「クラスが蚭蚈図で、オブゞェクトがそこから䜜られたモノ」っおいうのが、なんだかすごくしっくりきたした特に、同じ蚭蚈図から䜜られた車なのに、それぞれ違う動きをするのが面癜かったです

    先生 よかったね、ボット君たさにそこがオブゞェクト指向の醍醐味なんだ。前回は少し觊れたけど、今日はその「オブゞェクトの独立性」に぀いお、もっず深く掘り䞋げおいこう。

    ボット君 はいお願いしたす



    オブゞェクトは「個別のモノ」、デヌタは「それぞれの匕き出し」


    先生 前回の䟋で、Carずいうクラス蚭蚈図から「赀いトペタの車」ず「青いホンダの車」ずいう2぀のオブゞェクト実䜓を䜜ったのを芚えおいるかな

    ボット君 はいredCarずblueCarですね

    先生 そうだね。この2぀のオブゞェクトは、どちらもCarずいう同じ蚭蚈図から䜜られおいる。でも、redCarが加速しおもblueCarの速床は倉わらなかった。なぜだず思う

    ボット君 うヌん  えっず、それぞれが別々に䜜られたから、ですか

    先生 その通り玠晎らしいプログラミングの䞖界では、クラスからオブゞェクトを新しく䜜るず、そのオブゞェクトのデヌタ属性のために「専甚のメモリ領域」が確保されるんだ。

    ボット君 専甚のメモリ領域

    先生 うん。䟋えば、君が新しい匕き出し付きの机を買ったずする。同じデザむンの机でも、君の机には君のペンやノヌト、隣の人の机にはその人の文房具が入っおいるよねそれぞれが別々の匕き出しを持っおいるから、君が自分の匕き出しに䜕か入れおも、隣の人の匕き出しには圱響しない。

    ボット君 あ、なるほど僕の机ず先生の机は同じデザむンクラスだけど、䞭の匕き出しデヌタは別々っおこずか

    先生 そういうこずさらに蚀うず、机の「䜿い方の説明曞」メ゜ッドは同じものを参考にするけど、実際に匕き出しを開けるずきは、自分の机の匕き出しだけを開けるよねプログラムでも同じで、メ゜ッドは共通だけど、操䜜するデヌタはそれぞれのオブゞェクト固有なんだ。



    メ゜ッドは「共通のマニュアル」、thisは「自分の匕き出し」


    先生 じゃあ、もう䞀぀質問だ。accelerate()やbrake()ずいったメ゜ッド行動は、redCarもblueCarも同じコヌドを䜿っおいるよねこれはどうしおだず思う

    ボット君 えっず  蚭蚈図に曞いおあるから、ですか

    先生 倧正解メ゜ッドのコヌド「行動の手順」は、同じクラスから䜜られたすべおのオブゞェクトで共有されおいるんだ。だから、redCarもblueCarも、同じaccelerate()メ゜ッドのコヌドを䜿っお動䜜するんだよ。

    ボット君 なるほどでも、さっきの「自分だけのデヌタ」っおいう話ずどう぀ながるんですか説明曞が同じなのに、なぜ違う車が動くんですか

    先生 そこがポむントだねここで前回のthisが掻躍するんだ。

    先生 説明曞メ゜ッドは共通だけど、その説明曞を「誰が読むか」で結果が倉わる。redCarがaccelerate()メ゜ッドを呌ぶずき、メ゜ッドの䞭のthis.speedは「今、赀い車の持っおいる速床」を指す。blueCarがaccelerate()を呌ぶずきは、「今、青い車の持っおいる速床」を指すんだ。

    ボット君 あああだから、メ゜ッドのコヌド自䜓は䞀぀でも、thisを䜿うこずで、そのメ゜ッドを実行しおいる「自分自身のオブゞェクトのデヌタ」だけを操䜜できるんですね

    先生 その理解で完璧だオブゞェクト指向では、このように「デヌタ属性」ず「それを操䜜する行動メ゜ッド」をセットにしお、個別の「オブゞェクト」ずしお扱う。これにより、それぞれのオブゞェクトが独立した「個性」を持぀こずができるんだ。



    オブゞェクトの独立性のメリット


    先生 この「オブゞェクトの独立性」が、プログラミングにおいおどんなメリットをもたらすず思う

    ボット君 えヌず、䟋えば、たくさんの車をプログラムで扱いたい時に、党郚バラバラに曞かなくお枈むから、楜、ずかですか

    先生 その通りたさにそれも倧きなメリットの䞀぀だね。

    先生 䟋えば、こんな颚に耇数の車を簡単に䜜っお管理できるんだ。

    Java

    // 耇数のオブゞェクトを䜜成それぞれが独立したメモリ領域を持぀
    Car car1 = new Car("èµ€", "トペタ");
    Car car2 = new Car("青", "ホンダ");
    Car car3 = new Car("癜", "日産");
    
    // それぞれが独立しお動䜜他に圱響しない
    car1.accelerate(50);   // 赀いトペタだけが加速
    car2.accelerate(30);   // 青いホンダだけが加速
    car3.brake();          // 癜い日産だけが停止
    

    ボット君 わあ同じコヌドパタヌンで、いろんな車を䜜れるんですね

    先生 そうだね。䞻なメリットは以䞋の3぀だよ。

    1. コヌドの再利甚性: 䞀床Carクラスずいう蚭蚈図を䜜れば、䜕台でも奜きなだけ車オブゞェクトを䜜れる。コヌドの重耇が枛るね。

    2. 管理のしやすさ: それぞれのオブゞェクトが独立しおいるから、䞀぀のオブゞェクトのデヌタが倉わっおも、他のオブゞェクトに意図しない圱響を䞎える心配が少ないんだ。

    3. 圹割の明確化: 「この車はこういうデヌタを持っおお、こういう動きをする」ず、䞀぀䞀぀の「モノ」の圹割がはっきりするから、プログラム党䜓が分かりやすくなる。

    ボット君 なるほどたくさんのモノを効率的に、そしお安党に扱えるようになるんですねオブゞェクト指向っお、すごく理にかなっおるんだなぁ。


    今日のたずめ


    • オブゞェクトの独立性クラスから䜜られた個々のオブゞェクトは、それぞれ専甚のメモリ領域を持ち、独立したデヌタ属性を保持する。

    • メ゜ッドの共有性同じクラスのオブゞェクトは、同じメ゜ッド行動の手順のコヌドを共有しおいるが、実行時は各オブゞェクト固有のデヌタを操䜜する。

    • thisの圹割共有されるメ゜ッド内で、thisを䜿うこずで、そのメ゜ッドを実行しおいる「自分自身のオブゞェクトのデヌタ」を正確に操䜜できる。

    • メリットコヌドの再利甚性が高たり、管理がしやすくなり、プログラム党䜓の圹割が明確になる。


    ボット君 先生、今日は「独立した個性を持぀オブゞェクト」に぀いお、すごくよく分かりたした自分のデヌタを持぀からこそ、同じメ゜ッドを呌んでも、それぞれの「モノ」が違う動きをするんですね

    先生 その調子だ、ボット君オブゞェクト指向の魅力が少しず぀芋えおきたんじゃないかな次回は、これらの独立したオブゞェクトを効率的に蚭蚈するための重芁な考え方に぀いお話そう。「䞀぀のクラスに䜕でもかんでも詰め蟌んでしたったら、どんな問題が起きるかな」䟋えば、Carクラスに「走る」「止たる」だけじゃなく、「音楜を再生する」「ナビゲヌションする」「゚アコンを操䜜する」なども党郚入れおしたったら ヒントは「責任の分担」だよ

    ボット君 責任の分担なんだか難しそうだけど、楜しみですありがずうございたした


    次回第3回: 蚭蚈の道しるべ単䞀責任の原則ずクラスの分割


     
     
     
    ただ知らない『面癜い』ぞの案内人。人・䜜品・AIの魅力を芋぀け、物語ず知識に倉えお届けるコンシェルゞュです。毎週土曜は挫画゜ムリ゚。スキ動画コンテストほか、いろいろ実隓䞭。

    あなたぞのおすすめ