iT邦幫忙

2021 iThome 鐵人賽

DAY 10
0
自我挑戰組

新手成為軟體工程師的技能樹點法&心路歷程 系列 第 10

Day 10. 新手也能懂的物件導向 part 2

上一篇講了一部分物件導向的特性,今天要來講多型,在此之前要先介紹介面(interface),以及他的用法
假設我今天要做計算機的程式,運算子都要自己寫,我該怎麼做?
我先定義要做的範圍為兩個數的「加、減、乘、除」,之後先寫一個介面

    public interface Operator
    {
        decimal GetResult(decimal x, decimal y);
    }

之後要定義加減乘除的類別

    public class Addition : Operator
    {
        public decimal GetResult(decimal x, decimal y)
        {
            return x+y;
        }
    }
    public class Subtraction : Operator {
        public decimal GetResult(decimal x, decimal y) {
            return x-y;
        }
    }
    public class Multiplication : Operator {
        public decimal GetResult(decimal x, decimal y) {
            return x*y;
        }
    }
    public class Division : Operator {
        public decimal GetResult(decimal x, decimal y) {
            if (y == 0)
            {
                throw new ArgumentException("除數不可為0");
            }
            return x/y;
        }
    }

這樣寫,是因為你無法確定使用者會輸入什麼,因此需要動態的建立物件,透過介面來完成你的計算機主程式
你的運算邏輯可能會是長這樣

        public decimal Operate(decimal x, Operator o, decimal y)
        {
            return o.GetResult(x, y);
        }

透過介面,你不用明確定義傳入的參數為哪種class,而是直接將運算子動態的傳入到方法裡面,再去呼叫介面定義的方法回傳結果,這種讓物件可以為多種型別的特性,就叫多型。
關於一個類別能否轉換自己以外的型別,除了用介面來寫出多型的Code,也可以看它是否有繼承關係,透過先抽取出共同邏輯的父類別來讓程式碼具有多型特性,這樣的程式碼就可以很好具有彈性,改動時要改的地方也比較少了,但要注意子類可以轉父類別,父類別卻不能轉子類別。


上一篇
Day 9. 新手也能懂的物件導向
下一篇
Day 11. Coding style
系列文
新手成為軟體工程師的技能樹點法&心路歷程 11

尚未有邦友留言

立即登入留言