跳到主要內容

物件導向複習筆記

參考網址: https://dotblogs.com.tw/ace_dream/2016/01/10/oop1

物件導向的三大特性:
封裝:(Encapsulation):指的是將一組相關的屬性、方法和其他成員,視為單一單位或物件。
繼承(Inheritance):則是描述依據現有類別來建立新類別的能力。
多型(Polymorphism):指的是您可以有多個交替使用的類別,即使每個類別是以不同的方式來實作相同的屬性或方法。

封裝:(Encapsulation):
物件都會擁有物件內部的私有部分(屬性、方法...)而這些部分必須是外界無法直接存取,這樣才能保有物件的完整性。
如果"破壞封裝"的話,會有可能無法恢復原來的功能,因此物件必須將私有的部分封裝在物件的內部,而使用者只能藉由物件所提供的方法、屬性來操控物件,以保持物件的完整性,這就是封裝的特性。

繼承(Inheritance):
一個物件A得到另一個物件B特性的過程稱為“A繼承B”,物件B則屬於“父類別”或稱基礎類別(Base class),物件A則屬於子類別或稱為衍生類別(Derived class)。

子類別可以繼承父類別的能力,直接使用父類別非私有的屬性和方法。
子類別只能繼承一個父類別。
父類別的方法若宣告為虛擬(virtual),則表示該方法可以被子類別覆寫(非必需)。
父類別的方法若宣告為抽象(abstract),則表示該子類別一定要覆寫該方法(子類別為抽象類別除外)。
類別若包含抽象成員,則該類別必需宣告為抽象類別。
父類別又叫做基底類別(Base Class)。
子類別又叫做衍生類別(Derived Class)。
若方法或屬性宣告為密封(sealed),則不可以被子類別覆寫

多型(Polymorphism):又稱同名異式,是透過動態繫結的方式讓我們在程式執行時期可以動態決定物件參考所要執行的方法,多型允許我們在程式中使用名稱相同的方法或屬性,但不須考慮當時使用的物件型別是什麼。若要設計多型,子類別就必須先覆寫父類別同名稱的方法或屬性,接著再使用父類別的物件參考來選擇所要執行子類別物件實體的方法。由於多型的使用上會在類別中建立名稱相同的成員(屬性或方法),多載(Overloading)和覆寫(Overriding)也可以建立名稱相同的成員,因此有必要釐清這兩者的概念。

多載(Overloading):可接受不同個數的參數或不同資料型別的參數,用來提供不同版本的屬性或方法。也就是多個方法擁有"相同名稱"但"不同參數",傳入不同參數時會執行對應的方法。

覆寫(overriding):子類別的成員可用來取代父類別中不適用的成員,子類別覆寫父類別的成員時,子類別與父類別的成員必須接受相同個數的參數與相同的資料型別。也就是子類別重新定義父類別的"同名同參數"方法。

如果子類別想要重新定義父類別的方法或屬性(覆寫),首先必須將父類別的方法宣告為virtual,表示父類別允許被子類別的同名的方法覆蓋;而子類別要覆蓋父類別同名稱的方法,必須將子類別的方法宣告為override(覆寫),表示要重新定義父類別的方法。

留言

這個網誌中的熱門文章

加密貨幣交易實戰心得筆記

加密貨幣交易實戰心得筆記 . 對於加密貨幣,雖然公司有個團隊已經在開發相關產品,但我自己只有大概了解什麼是加密貨幣,什麼是比特幣,以及什麼是區塊鍊。雖然稍微知道,但也只是知道,並沒有真的去購買跟投資。 . 幾天前公司舉辦了一場課程,邀請了史旺基到公司分享加密貨幣的交易實戰。課程需要自費,但其中包含了直接幫我們購買比特幣,並將購買的比特幣交易給我們。可以實際接觸到加密貨幣的交易讓我很期待,因此毫不猶豫的就參加了這堂課程。 . 這堂課程並不是在技術上來跟你說什麼是加密貨幣或是區塊鍊的技術是什麼,它著重在由淺入深的介紹什麼是比特幣、什麼是區塊鍊、什麼是去中心化、什麼是挖礦、誰是中本聰、什麼是以太坊以及以太幣、什麼是熱錢包以及冷錢包,等等這類的相關資訊。 . 學習並了解上面介紹的基本資訊之後,課程的重點放在了交易所的介紹與操作上面。我們一步一步的申請了台灣的兩個交易所,分別是 MaiCoin 以及 BitoEX。相信有在投資比特幣的人應該都已經知道,但對於沒有追上潮流的我來說,這個資訊真的是省了我很多研究的時間,立刻感覺前進了一大步,雖然手續費高常常可能卡幣,但中文介面,簡單的認證與交易方式,讓我感覺已經真的觸碰到了比特幣與區塊鍊的邊。 . 除了台灣交易所,更有國際交易平台的介紹與教學,這邊我就不一一介紹了,因為我自己也都還沒申請,而且這些國際平台很多是停止申請帳號的。 . 另外還有更多的資訊,包括怎麼開始投資,投資心法以及不少的中英文介紹資料,包括App的介紹。 . 這堂課除了讓我立刻從門外漢大躍進成初心者,更是直接開始打怪(購買)了,破除了這個最大靜摩擦力之後,我讓我的投資標的又多了一個可能,感覺非常值得。

[TDD之路] 與資源檔案相依時導致 CI 測試失敗

CI 上跑測試專案的指令如下 "MSTest.exe /testcontainer:.\bin\Debug\TargetTests.dll /resultsfile:TestResults.trx" 在本機測試都 all pass, 但是在 CI 上面卻失敗。主要原因是測試的物件中有一個跟Bitmap有關的 Image 找不到圖檔導致錯誤。 程式碼如下: public static string ImagePath = Directory.GetCurrentDirectory() + "\\img\\"; public static Image ClockRed = new Bitmap(ImagePath + "Clockred.png"); 看起來ImagePath就是取得當前位置,然後從當前位置的 img 資料夾中找出 Clockred.png 來產生 Bipmap 物件存到 Image裡面。 local 建置與測試一切正常。但執行了 CI 就吐錯誤。 為什麼呢? 主要原因是雖然已經有將 img\Clockred.png copy 到 output 資料夾(bin\debug),但是實際上MSTest.exe執行的目錄卻是在 .\bin\Debug\TestResults\kyo_TI02BT43 2018-03-07 23_46_45\Out 的資料夾。且裡面是沒有 img\Clockred.png 的。 為了解決這個問題,我嘗試了很多取得當前目錄的方法。但問題不在取得目錄,其實目錄是對的,錯的是檔案並不存在。因次找到了一個 deploy 資源檔案到 deploy out 目錄的方法。 就是 DeploymentItem 這個 attribute, 用法可以寫在 [TestClass] 下方 或是 [TestMethod] 下方。 [TestClass] [DeploymentItem(@"img\Clockgraypanel.png", "img")] 就這樣我的測試就可以在 CI 伺服器上跑過了。

Multiple without multication or addition operator

Given two binary strings, return their sum (also a binary string). For example, a = "1101" // 13 b = "1000" // 8 Return “1101000”. // 104 Solution: implement Binary add to perform multication static int MultipleWithoutOperator(int num, int multiplier) { StringBuilder sb = new StringBuilder(); string binary = Convert.ToString(num, 2); string binaryMultiplier = Convert.ToString(multiplier, 2); string temp = ""; for (int i = binaryMultiplier.Length-1, j=0;i >= 0;i--,j++){ if (binaryMultiplier[i]=='1') { if (string.IsNullOrEmpty(temp)) { temp = binary.PadRight(binary.Length + j, '0'); } else { temp = BinaryAdd(temp, binary.PadRight(binary.Length + j, '0')); } } } return Convert.ToInt32(temp, 2); } static string BinaryAdd(string a, string b) { int carryover = 0; Stri...