クラスの継承
オブジェクト指向プログラミング(OOP)において重要な役割を果たす継承という機能ですが設計が杜撰だと仕様変更の際などに致命的なバグにつながってしまいます。
まずオブジェクト指向とは何なのかという話ですが、簡単に言うとclassという設計図を作ってそれをインスタンス化することでそれに関するプロパティやメソッドをまとめてしまおうというものです。
例としては、Dog(いぬ)というクラスを作ります。犬はご飯を食べる、水を飲む、よく吠えるなどの特徴を持っていますよね。それをコードにしてみたのが以下です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import java.util.*; public class Main { public static void main(String[] args) throws Exception { // Your code here! Dog dog = new Dog(); dog.bark(); } } class Dog { void bark() { System.out.println("Bow!"); } void eat() { System.out.println("Delicious!"); } void drinkWater() { System.out.println("GokuGoku"); } } |
class DogとなっているところがDogクラスの宣言部にあたります。そして、Mainクラス内のmain関数内がDogクラスのインスタンス生成部分になります。newで犬のインスタンスを生成して変数名.関数名の形で使えるので便利ですし、通常ファイルを分けるのでファイルの見通しもよくなり保守性がぐんと上がります。クラスの説明はこんな感じで終わりにして継承について説明します。
継承とはそのままなんですが親となるクラスのものをそのまま受け継げるというものです。上記のDogクラスでは動物ならご飯を食べるのも水を飲むのも共通事項ですよね。そんな時はAnimalというクラスを作って動物なら共通するというようなものをまとめておきます。そしてそれをDogクラスに継承させたら元のDogクラスと同じになるし、Catクラスを作るとなったときにAnimalクラスを継承させれば食べる、飲むといった行動を実装する必要もなくなります。コードは以下になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
class Dog extends Animal { void bark() { System.out.println("Bow!"); } } class Cat extends Animal { void highJump() { System.out.println("Jump!!"); } } class Animal { void eat() { System.out.println("Delicious!"); } void drinkWater() { System.out.println("GokuGoku"); } } |
extendsで継承ができます。実際はクラスごとにファイルを分けたりするので元になるクラスを継承するだけでかなり一つ一つのファイルの見通しが良くなったのではと思います。
さて、長々とクラスと継承について説明しましたがここまでは前置きです。本題は冒頭で触れたクラスの杜撰な設計というところです。今回例示したような簡単なものだとバグにつながるようなことはあまりないかと思いますが、決済システム等の大規模なものだと取り返しのつかないバグにつながりかねません。特にやっつけ的に機能を追加していった場合以下の動画のようなことになる可能性が高いです。
クソコード動画「継承」 pic.twitter.com/wK3mIx6XmE
— ミノ駆動 (@MinoDriven) January 24, 2021
こんなことになったら泣きながら対応する羽目になるので設計には気を付けて書きましょうという話でした。
今回書いた言語はJavaです。
- 最新の投稿
-
- 2024.11.20今でも見たくなる古いアニメ その①「エスカフローネ」
- 2024.11.18長年寄り添った彼氏との別れ
- 2024.11.14選挙の年ですね
- 2024.11.14ニュースでは見て知ってはいたけど・・・初めての経験
- 2024.11.13iMac M4発売
- タグ
-
- Analytics (3)
- BBQ (1)
- Canva (1)
- Firebase (1)
- GAS (1)
- Google (3)
- javascript (2)
- jQuery (1)
- news (4)
- saver (1)
- thunderbird (1)
- TIPS (9)
- vue.js (2)
- youtube (1)
- おやつ (2)
- お勉強 (2)
- お昼休み (1)
- お花見 (1)
- お金 (1)
- たつの (1)
- なぎさ公園 (1)
- ゆかた祭り (1)
- アクセサリー (1)
- アメカジ (2)
- ウエスタン (1)
- ウォーキング (1)
- カフェ (1)
- カラオケ (1)
- グルメ (11)
- ゲーム (1)
- コロナ (2)
- サブカルチャー (1)
- システム (3)
- ファイヤーキング (1)
- ファッション (1)
- ホームページ (1)
- マスク (1)
- マッサージ器 (1)
- モッズ (1)
- ラテン (1)
- 仕事 (1)
- 便利ツール (3)
- 健康 (2)
- 動画 (1)
- 化け猫懸垂 (8)
- 夢 (1)
- 姫路 (46)
- 姫路文学館 (2)
- 娘 (7)
- 工場夜景 (1)
- 日常 (114)
- 日本玩具博物館 (1)
- 本 (1)
- 献血 (1)
- 珈琲 (1)
- 短歌 (1)
- 神戸人形 (1)
- 筆記用具 (1)
- 網干 (2)
- 育児 (3)
- 花火 (1)
- 藤原正彦エッセイコンクール (2)
- 見学 (2)
- 観光 (1)
- 観葉植物 (1)
- 電車 (1)
- 音楽 (4)
- 香水 (1)
- 高砂 (2)