[Day 00] 第 01 屆開發者寫作松寫作規劃


自我介紹

  • 電算中心工讀生
  • 曾於工研院擔任小軟工讀生
  • Wikidata台中地方學專題聚會主持人
  • 主要以Web前端開發為主
    大家好,目前是剛考上資工所的大四生,也有參加FLOSS社群,這次想利用七天的時間閱讀設計模式,正好有一本書叫做7天學會設計模式設計模式也可以這樣學,書中介紹了常見的設計模式,所以接下來這7天都會撰寫閱讀書摘,並且同時培養自己閱讀習慣。

書籍資訊

  • 作者: Yan(硯取歪)
  • 出版社:博碩
  • 出版日期:2017/04/25
  • ISBN: 978-986-434-204-4

為何學習設計模式

當project越寫越龐大之後,maintain的難度就越來越高,如果有Design Patterns,不僅能夠加速維護程式碼之速度,也能夠方便於和其他開發人員溝通。

7天目標

了解GoF的23個設計模式之概念與基本用法

物件導向程式設計(Object-Oriented Programming)

書本最前面寫到在閱讀之前要知道甚麼是OOP,以下我們就快速複習一下OOP吧!

  • 類與物件

    • 類(Class):

      定義了一件事物的抽象特點。類的定義包含了資料的形式以及對資料的操作。
      from Wikipedia

    • 物件(Object): 類的實例

  • 封裝:
    • Public
    • Private
    • Protected
  • 繼承:
#define PI 3.1415926
#include <iostream> 
#include <cmath>
using namespace std;

class Const
{
protected:
    int radius;
    int height;
public:
    void setRadius(int r)
    {
        radius = r;
    }   
    void setHeight(int h)
    {
        height = h;
    }
};

//Cylinder繼承Const類別,並獲得父類別之屬性
class Cylinder : public Const
{
public:
    double getVolume()
    {
        return (pow(radius,2) * PI * height);
    }
};

int main()
{
    Cylinder Instance;

    Instance.setRadius(10);
    Instance.setHeight(25);

    cout << "Volume = " << Instance.getVolume() << endl;

    return 0;
}
  • 多型
  • 多載:
#include <iostream>
using namespace std;

int add(int x, int y);
int add(int x, int y, int z);

int main()
{
    cout << "5 + 3 = " << add(5, 3) << endl;
    cout << "9 + 6 + 7 = " << add(9, 6, 7) << endl;
}

int add(int x, int y) {
    return (x + y);
}

int add(int x, int y, int z) {
    return (x + y + z);
}

系列文規劃

Day 內容
Day 1 SOLID原則
Day 1 單例模式
Day 1 簡單工廠模式
Day 2 工廠模式
Day 2 抽象工廠模式
Day 2 策略模式
Day 2 裝飾者模式
Day 3 觀察者模式
Day 3 命令模式
Day 3 轉接器模式
Day 3 表象模式
Day 4 樣板模式
Day 4 合成模式
Day 4 狀態模式
Day 4 代理模式
Day 5 走訪器模式
Day 5 建造者模式
Day 5 責任鏈模式
Day 5 解譯器模式
Day 6 中介者模式
Day 6 原型模式
Day 6 橋梁模式
Day 7 備忘錄模式
Day 7 蠅量級模式
Day 7 拜訪者模式
#寫作松 #設計模式 #物件導向 #C++







你可能感興趣的文章

ASP.NET Core Web API 入門教學 - 自訂模型資料驗證標籤

ASP.NET Core Web API 入門教學 - 自訂模型資料驗證標籤

Container筆記 - K8s

Container筆記 - K8s

[html] 暗藏玄機的跨域連結 - link rel

[html] 暗藏玄機的跨域連結 - link rel






留言討論




lagagain Feb 23, 2020

Hi~
就我理解的,您的範例「多型」(polymorphism)比較常被稱呼為「多載」(overloading)

對於C++語言,帶變數的宏和函式多載(function overload)機制也允許將不同的特殊行為和單個泛化記號相關聯。然而, 習慣上並不將這種函式多型(function polymorphism)、宏多型(macro polymorphism)展現出來的行為稱為多型(或靜態多型) ,否則就連C語言也具有宏多型了。 談及多型時,預設就是指動態多型,而靜態多型則是指基於模板的多型。


多型的概念更常來討論OOP。因為有物件概念,所以多載和多型我通常會分開,前者看個是參數個數、類型;後者看執行的對象/物件。這點在函數型語言裡就不那麼明確,也就可能正確敘述,不過我看你的範例是C++,或許搞清楚這兩者概念比較好。

在四人幫的設計模式那本書裡:

程式設計語言的選擇非常重要,它將影響人們理解問題的出發點 。.....若我们採用過程式語言,可能就要包括諸如“繼承”、“封裝”和“多態”的設計模式。 相應地,一些特殊的物件導向程式語言可以直接支持我們的某些模式


好拉~單純只是發表一下我的看法~
最後,也可能是我以前學的有誤,歡迎指正交流~

參考資料

did1335 Feb 23, 2020

感謝您的指正及補充!




2
2
2