發表文章

目前顯示的是 1月, 2019的文章

Agile Principles, Patterns, and Practices in C# 無瑕的程式碼 敏捷完整篇 第13章 寫給C#程式設計師的UML概述

        第十三章簡介類別圖、物件圖、循序圖、協作圖和狀態圖,類別圖和狀態圖比較常見。 統一塑模語言是用來繪製軟體概念圖的一種圖形符號。 本書關注規格說明層級和實作層級。 UML包含三種主要圖示。 靜態圖 描述類別、物件、資料結構及它們之間的關係,展現出軟體元素那些「不變」的邏輯結構。 動態圖 軟體實現在執行過程中是如何變化,其中描述了執行流程或實體改變狀態的方式。 實體圖 展示了軟體實體「不變」的物理結構,其中描述原始檔、程式庫、二進位檔、資料檔等物理實體。 類別圖 類別圖展示了程式中主要的類別和關係。 圖13-2 矩形表示類別,箭頭表示關係。 本圖中所有的關係都是關聯關係。關聯是簡單的資料關係,其中一個物件持有對另一個物件的參考或呼叫了其方法。 關聯上的名字對應的是持有該參考的變數名稱。 箭頭相鄰的數字表示關係所包容的實例個數,數字比1大,意味著是某種容器,通常是陣列。 類別圖可分為多個隔間,最上面的隔間放類別的名稱,其他隔間放描述函數和變數。 interface 代表介面 物件圖 物件圖展示系統執行時,某個特定時刻的物件關係,可看做記憶體快照。 圖13-3 矩形表示物件,名稱下方有底線作為識別。冒號後面的名稱是所屬類別的名稱。每個物件的下層顯示該物件的key變數值。 物件之間的關係稱為鍊link。 循序圖 圖13-4描繪了TreeMap.Add方法如何實作。 人形線條圖代表一個未知呼叫者。 方括號[]中的布林運算式稱為監護條件,指出應該選擇哪一個路徑。 終結在TreeMapNode圖示上的箭頭訊息表示物件建造。 帶有小圓圈的箭頭稱為資料標記 協作圖 協作圖包含了循序圖中包含相同的資訊。循序圖為了表達訊息的順序,協作圖為了表達物件之間的關係。 物件被稱為鏈的關係給連接起來,只要一個物件可以向另外一個物件發送訊息就存在鏈的關係。 鏈上傳遞訊息,用小一點的箭頭表示。訊息上標記了訊息名稱、訊息順序號碼以及任何使用到的監護條件。 帶點的順序號碼表示呼叫的層次結構。訊息1.1是訊息1所呼叫的函式發送的第一條訊息。 狀態圖 UML能夠全面地表達有限狀態機FSM。 圖中的箭頭稱為遷移,其上標記有觸發遷移的事件及該遷移執行的動作。當一個遷移被觸發時,會導致系統的狀態發生改變。 狀態圖用於了解系統的行為,透過狀態圖可知系統如何動作。 ...

Pattern Hatching 揭開設計模式的祕辛 第一章 介紹

       第一章內容作者澄清常見對設計模式的誤解。 1.1 對模式的十大誤解 誤解1:模式就是再一種場合下,對某個問題的一個解決方案。 作者認為除了解決方案之外還要需要三樣東西。 1.再現 (recurrence) 解決方案不僅能夠解決當下的問題,也能夠應用再其他的問題上。 2.教學 學習如何解決方案,適應問題的變化。 3.正名 一個用來代表模式的名稱。 誤解2:模式只是行話jargon、規則、程式設計技巧、資料結構..... 誤解3:看到冰山的一角,就等於看到了整座冰山。 避免以偏概全,不可以用少數例子就對模式下一個籠統的結論。 誤解4:模式需要工具或方法的支援才能生效。 模式的優點來自於對模式本身的應用,不需要任何形式的支援。 模式的四個主要優點: 1.設計模式提煉出專家的經驗和智慧,讓一般開發人員使用。 2.設計模式的名稱組成一個詞彙表,有助於開發人員交流順暢。 3.系統文件若記載了該系統所使用的模式,有助於人們更快理解系統。 4.對系統進行改造變得更容易,無論系統原來的設計是否採用了模式。 誤解5:模式可以保證軟體的耐用、更高的生產率...... 模式是要開發人員軍火庫中其中一項武器。 誤解6:模式可以產生整體架構 模式與生產能力無關,使用者必須運用自己的創造力來填補各種模式之間的空白地帶。 誤解7:模式只用在物件導向設計或實作 模式是一種用來記錄和傳播專家經驗的工具,不會只有用在物件導向。 誤解8:沒有證據顯示模式對任何人有幫助 已經存在許多設計模式有益的結果。 誤解9:模式族群是一群由精英分子組成的小幫派 設計模式充滿多樣性,只要有心每個人都可以使用設計模式。 誤解10:模式族群是為自己服務的,甚至是不懷好意的。 1.2  觀察   高手學習設計模式會發現智者所見皆同,許多東西自己已經知道,只是不知道這個模式的名稱。   新手花費時間學習設計模式絕對會有幫助。  

陰屍路第一季 03 世間情

        第三集殭屍退居第二線,主要劇情是營地的世間情。 人之將死,其言也善 開頭場景莫爾被手銬扣住,一群殭屍快要攻破頂樓的門,「人之將死,其言也善」莫爾快要死了才「自我批判」,這一生做太多壞事傷害許多人。 家人團聚 劇情依然採用雙線劇情,大賣場是地獄而露營地是天堂,主角們一行人到了營地出現家人團聚的溫馨場景,編劇故意讓男主角瑞克最晚下車,瑞克下車之後才發現妻子蘿莉與卡爾兩人也在營地,瑞克也一家團聚。 綠光罩頂的瑞克 晚上瑞克與蘿莉享受「魚水之歡」,有趣的場景是兩人的兒子卡爾懂得裝睡假裝不知道。 團聚歡樂的劇情之外也有黑暗的綠帽劇情,之前劇情瑞克的妻子蘿莉與瑞克的好友夏恩發生性關係,觀眾必定會對蘿莉沒有好感「瑞克生死不明,蘿莉與小王夏恩好上了」,第三集蘿莉與夏恩吵架揭露了真相,夏恩對他們說瑞克已經死了,沒有想到瑞克有主角威能都不會死,蘿莉覺得被欺騙很生氣與夏恩絕交。 兄弟情 第三集新增一位角色十字弓戴瑞,戴瑞是莫爾的弟弟,戴瑞回到營地就一直說髒話罵莫爾,眾人面面相覷只好告訴戴瑞真相,戴瑞展現兄弟之情要去救莫爾。 瑞克的選擇 瑞克的選擇是劇情的關鍵轉折,夏恩說出普通人的想法根本不應該回到大賣場救莫爾,何況莫爾實在「顧人怨」,全營地恐怕只有莫爾的弟弟戴瑞想要救莫爾。 瑞克不顧太太的強烈反對,毅然決定組隊回到大賣場救莫爾,只能說瑞克是男主角重情重義想法不一樣,不是一般普通人。 救援小隊再度殺回大賣場,十字弓展現了妙用,槍聲會引來更多的殭屍,十字弓射殺殭屍沒有聲音,而且弓箭可以回收再利用。 結尾救援小隊到了頂樓只見到莫爾的手,沒看到莫爾的屍體,莫爾的生死留下一個謎團。 世間情 營地的人逃脫了殭屍的圍攻,生還者卻未建立新的秩序,編劇有意描寫人性的黑暗面,人類其實比殭屍更可怕! 營地首先出現男女裂痕,有女成員抱怨女生變得像是奴隸,偏偏愛德又家暴妻子引起更多紛爭,這次愛德倒楣!夏恩被蘿莉甩了正好打愛德出氣,暴力只能壓下問題無法解決問題。 第三集最讓人印象深刻的劇情是「瑞克的選擇」,男主角可以分兩類,一種男主角的決策模式接近普通人,劇中夏恩是普通人的代表求穩定求安全,另一種男主角決策模式與普通人不同,瑞克有奇怪的想法讓劇情能夠多采多姿。  

人與人之間若是有緣就會相遇

        近日在球場上發生一件怪事,我長得其貌不揚外觀是大腹便便的怪叔叔,竟然有不認識的國中妹妹主動找我聊天!人與人之間若是有緣就會相遇。 國中妹妹與我是不同的賽區,比賽桌子也離我比賽區域有一段距離,國中妹妹會主動找我聊天讓人非常意外!國中妹妹說要在這邊看比賽,並且點評場上認識的參賽選手。 國中妹妹話夾子打開說出心內話,他今天不想比賽想在家看電視,因為過幾天有參加大賽,今天只好出賽進行賽前練習。 國中妹妹的父母有花錢請教練,妹妹輸球的時候父母就會念:「怎麼花了那麼多錢還打輸?」話語中可以感受到妹妹承受很大的勝負壓力。 我說出我的看法 小時候就能夠得到教練正確的指導是幸運,像我大人才正式開始練乒乓球,基本功很難練好,比賽中經常因為基本功不夠紮實而失分。 「Do your best」會出來比賽的人都不是吃素,每個人都有一定的實力,若是遇到實力比自己強大許多的對手,最重要的是把自己的實力發揮出來。 打球可以擴展自己的人際關係,對將來找工作有利。妹妹贊同認為以後自己有機會可以當教練。 我再補充不是只有當教練,有的球友或許球技並不突出,卻可能實際是大老闆。人與人之間會相遇就會相遇,我有位朋友打羽毛球的時候受傷,去醫院看病認識了現在的太太。 妹妹了解打球擴展人際關係之後,就有機會認識「有力人士」找到工作。 從國中妹妹的談話可知 國中年紀的妹妹就很懂事了,與大人的差別只在於人生經驗。社會經歷會讓人有不同的想法。 女人的直覺很厲害!猜想國中妹妹因為女人的直覺才會找怪叔叔聊天,我的想法多少可以給妹妹參考。 每個人都需要能夠傾聽自己內心話的對象,不認識的外人因為沒有厲害關係,反而可以對外人說出內心話。 人與人之間若是有緣就會相遇,國中小妹妹與我之前根本沒見過面完全不認識,一股冥冥中的力量讓兩人有交集。  

C# 程式設計經典300例 實例096 果園改進種植方法 裝飾者模式

        實例096介紹裝飾者模式,說到裝飾者模式讓人聯想《聖鬥士星矢》的黃金聖衣,穿上聖衣會變強。 實例描述 裝飾者模式主要用於給類添加額外的功能擴展,可用一個類或多個裝飾類來擴展類的方法。 範例果園在種植水果之後,還要替果樹鬆土澆水,範例用裝飾者模式對種植方法進行擴展。 輸出「種植蘋果樹」、「為果樹鬆土」、「為果樹澆水」。 實現過程 //抽象水果類 public abstract class Fruit {    public abstract void Plant(); }   //蘋果類 public class Apple:Fruit {    public override void Plant()    {        Console.WriteLine(“種植蘋果樹”);    } }   //水果抽象裝飾者 public abstract class FruitDecorator:Fruit {    protected Fruit fruit;    public FruitDecorator(Fruit fruit)    {        this.fruit = fruit;    }    public override void Plant()    {        if( this.fruit != null) this.fruit.Plant();    } }   //鬆土裝飾者 public class LoosenSoilDecorator:FruitDecorator...

C# 程式設計經典300例 實例095 果園改變種植方式 適配器模式

        實例095介紹適配器模式,範例程式有兩種寫法。  實例描述 範例以果園改變種植方式為例,目前已經存在一個果園類,提供一個指定城市種植指定類型的水果方法,由於需求發生更改,使用者只需要執行一個種植方法。 為了能有效地利用原有的果園類型,範例用了適配器模式改變種植方向的介面,以滿足新的需求。 輸出「北京果園種植蘋果」、「上海果園種植橘子」。 實現過程 //種植接口 public interface IPlant {    void Plant(); }   //果園類 public class Orchard {    public void Plant(string city, string fruit)    {         Console.WriteLine(“{0}果園種植{1}!”, city, fruit);    } }   //類適配器:北京果園 public class BJOrchard:Orchard, IPlant {    public void Plant()    {         base.Plant(“北京”,”蘋果”);    } }   //對象適配器:上海果園 public class SHOrchard: IPlant {     Orchard orchard = new Orchard();    public void Plant()    {         orchard.Plant(“上海...

C# 程式設計經典300例 實例094 種植不同種類的水果 外觀模式

        實例094介紹外觀模式,我認為外觀模式(Facade pattern)中文翻成門面模式會比較貼切。感覺外觀模式、適配器模式與裝飾者模式這些設計模式分兩階段思考會比較容易理解,第一階段先看原始程式碼,第二階段再看加料改造之後的結果。 實例描述 需要在北京和上海兩地的果園種植三種水果,北京果園種植蘋果和橘子,上海果園種植橘子和香蕉。 輸出「北京果園」、「種植蘋果樹!」、「種植橘子樹!」、「上海果園」、「種植橘子樹!」、「種植香蕉樹!」字串 實現過程 //蘋果類 public class Apple {    public void PlantApple()    {        Console.WriteLine(“種植蘋果樹”);    } }   //橘子類 public class Orange {    public void PlantOrange()    {        Console.WriteLine(“種植橘子樹”);    } }   //香蕉類 public class Banana {    public void PlantBanana()    {        Console.WriteLine(“種植香蕉樹”);    } }   //種植類 public class Plant {    Apple apple = new Apple();    Orange  orange = new Orange(); ...

C# 程式設計經典300例 實例093 果園噴洒殺蟲劑 單例模式

       實例093的範例貼切,用一架直升機噴洒農藥的範例讓讀者了解單例模式。 實例描述       範例以果園噴洒殺蟲劑介紹單例模式的用法。北京與上海都有果園,一架直升機往返兩地噴洒殺蟲劑。單例模式使直升機實例全局唯一。 輸出「為北京的果園噴洒殺蟲劑」、「殺蟲劑還剩50噸」、「為上海的果園噴洒殺蟲劑」與「殺蟲劑已用完」字串 實現過程 class Helicopter {    static Helicopter helicopter;    public static Helicopter Instance    {        get        {            if(helicopter == null)                 helicopter = new Helicopter(); //延遲創建直升機的實例            return helicopter;        }    }    protected Helicopter() {}    int insecticide = 100;    public void SprayInsecticide(string city)    ...

C# 程式設計經典300例 實例092 建造同樣的果園 原型模式

         原型模式是所有設計模式中最容易懂的設計模式。 實例描述 用原型模式可對北京果園進行複製的方法來創建北京果園。 輸出「北京果園種植了北京皮果蘋果和北京橘子」、「上海果園種植了北京皮果蘋果和北京橘子」字串 實現過程 //果園介面 public interface IOrchard {    IOrchard Clone(); }   //果園類別繼承果園介面 public class Orchard : IOrchard {    public string Name   { get; set; }    public string Apple    { get; set; }    public string Orange { get; set; }    public IOrchard Clone()    {         return new Orchard()         {              Name = this.Name,              Apple = this.Apple,              Orange = this.Orange         };  ...

盾之勇者成名錄 動畫第一季02觀後感 蘿莉的時間,結尾加一段場景會更好

        第一話都是尚文被婊子欺負陷害的故事,觀眾感到憤怒又不得不看完。第二話是精華蘿莉的時間,尚文買下浣熊種亞人拉芙塔莉雅訓練調教,盾之勇者尚文自身無法攻擊,只能與奴隸組隊依靠奴隸打怪升級。第二話可幫觀眾從拉芙塔莉雅視角了解男主角尚文,若是結尾再加一段場景會更好。 驚恐 小說有介紹拉芙塔莉雅與尚文相遇之前的劇情,拉芙塔莉雅遇到虐待狂主人,拉芙塔莉雅被整得晚上睡覺會突然驚醒抓狂,外加一身是病還一直咳嗽。 拉芙塔莉雅被尚文買下來的時候感到驚恐,以拉芙塔莉雅的視角觀察尚文外表看起來很凶惡的樣子! 拉芙塔莉雅相關劇情有提到拉芙塔莉雅的父母,浪潮魔物來襲!拉芙塔莉雅的父母為了救拉芙塔莉雅被犬型魔物殺害,因此拉芙塔莉雅對血與犬型魔物都有很大的恐懼感。拉芙塔莉雅明顯有創傷後遺症。 日常生活 拉芙塔莉雅與尚文相處一陣子之後,拉芙塔莉雅對尚文的態度有了改變。尚文是天生屬性善良之的人,儘管歷經磨難之後,想法與做法有了變化,本性善良的人依然是善良的人。 從食衣住行育樂各方面可感受到尚文把拉芙塔莉雅當做妹妹照顧。去餐廳吃飯尚文替拉芙塔莉雅點一般人吃的兒童套餐,拉芙塔莉雅看得懂招牌文字也明示拉芙塔莉雅有受過基礎教育。尚文有請武器店老闆張羅拉芙塔莉雅的衣服。 除了一日三餐之外,拉芙塔莉雅有零食吃、有皮球玩,尚文製作昂貴的藥治療拉芙塔莉雅的咳嗽,尚文幫拉芙塔莉雅剪頭髮。拉芙塔莉雅夜晚驚醒抓狂的時候,尚文安撫拉芙塔莉雅。旅館住宿拉芙塔莉雅會尿床,尚文也沒有「修理」拉芙塔莉雅。 練功打怪 練功打怪的劇情可看出拉芙塔莉雅的成長,拉芙塔莉雅原本都沒有戰鬥經驗,看到氣球怪都會怕!尚文必須用奴隸紋才能驅使拉芙塔莉雅戰鬥。遇到兔子怪又是拉芙塔莉雅另一道難關,拉芙塔莉雅有心理陰影看到血會害怕,拉芙塔莉雅勉強克服怕血的恐懼,擊殺了兔子怪。 大戰雙頭犬是名場面 結尾大戰雙頭犬是劇情轉折,尚文第一次遇到強力魔物可以攻破盾勇的防禦讓尚文重傷,偏偏此時拉芙塔莉雅創傷後遺症發作!拉芙塔莉雅無法動彈,起初尚文用奴隸紋驅使拉芙塔莉雅戰鬥都沒有效果,善良的尚文轉念反而要拉芙塔莉雅趕快逃走。 以前犬型魔物殺了拉芙塔莉雅的父母,現在犬型魔物又要來殺拉芙塔莉雅的主人尚文,拉芙塔莉雅黑化暴走,拉芙塔莉雅沒有逃走反而湧出一股戰鬥力擊殺犬型魔物。 戰鬥後拉芙塔莉雅與尚文抱在一起,拉芙塔莉雅會提出...

【觀點│世界一把抓】鄭麗文 vs 陳永峰談《神話心理學:來自眾神的處方箋》

        在觀點頻道,名嘴鄭麗文與陳永峰教授介紹日本作家河合隼雄的書《神話心理學:來自眾神的處方箋》,節目內容有啟發性值得參考。 影片網址 19.01.17【觀點│世界一把抓】鄭麗文 vs 陳永峰談《神話心理學:來自眾神的處方箋》 學霸鄭麗文 節目開頭鄭麗文講古自己大學前的求學過程,鄭麗文學生時期是學霸理科與文科都很強,考試都可以得到高分。正常發展鄭麗文會去讀理科,初三與高一這兩年不知為何?鄭麗文的狀態不好,鄭麗文棄理從文轉讀文科,學霸就是學霸!鄭麗文讀文科還是能夠考到台大法律系。 神話 長大後覺得神話只是遠古時代無稽之談的故事,節目中陳永峰教授談到神話故事的重要性,神話是一個民族共同的故事,這邊可以對照《羅輯思維》節目羅胖談到國家是想像中的共同體,就可以懂神話故事的重要性。提到《竹取物語》,我們會說這是日本的故事。提到「嫦娥奔月」這是兩岸華人共同的故事。 日本中央的權力真空 作者河合隼雄有指出日本有中央權力真空的傳統,歷史上日本天皇都沒有什麼實權,也因為中央權力真空才能包容地方上不同的情況。陳永峰教授補充日本大正天皇是智障,對於日本發展卻沒有什麼影響,因為日本政府的行為得到基層民眾的支持。 我認為日本中央權力真空也有很大的壞處,第二次世界大戰就可以看出來,日本「下剋上」的傳統讓日本軍閥可以綁架整個日本,老蔣領導的國民政府不願意與日本政府和談,因為談也是白談,美國也只能選擇徹底打垮日本才能結束戰爭。 心理醫生 作者河合隼雄是心理學家也是心理醫生,河合隼雄直言心理醫生是說謊者,其實無法幫助病患,心理醫生並不是完全沒有用,心理醫生的陪伴給病患希望,讓病患有機會走出陰霾。 河合隼雄自己就遇到一個案例,一位遇到很多倒楣事的病患,看到了一棵樹就突然心情豁然開朗!心理醫生可以幫病患爭取時間、得到復原的機會。 河合隼雄認為每個人要找到自己的生命之樹,每個人都在寫自己的故事。 我認為這段話等同《倩女幽魂》電影燕赤霞說的「自求我道」。 無差別殺人事件 日本社會發生了許多無差別殺人事件,殺人者與被害者都不認識也無冤無仇,兇手卻可以殘忍地下殺手。 河合隼雄認為日本青年受到西方文化的影響,學到了西方的個人主義,然而沒有學到西方的基督教文化,當一個人成為一個脫離社會孤離的個體沒有任何鏈結,有可能什麼什麼事都會做出來! 陳永峰教授補充新興宗教就是利用...

C# 程式設計經典300例 實例091 建造不同的果園 建造者模式

        實例091要先看main函數的內容,對照圖8-7建造者模式結構圖,會比較容易懂。若是物件建造過程較複雜,可使用建造者模式。 實例描述 在北京與上海建造果園,每個果園水果品種都不同。範例利用果園建造者對具體的果園提供創建方法,再由果園建造者對具體的果園進行創建。 輸出「建造北京果園」、「北京果園種植北京蘋果和北京橘子」、「建造上海果園」與「上海果園種植上海蘋果和上海橘子」字串。 實現過程 main函數代碼如下: //創建北京果園建造指導者 OrchardDirector bjOrchardDirector = new OrchardDirector(new BJOrchardBuilder()); Orchard bjOrchard = bjOrchardDirector.Construct(); bjOrchard.Plant(); //創建上海果園建造指導者 OrchardDirector shOrchardDirector = new OrchardDirector(new SHOrchardBuilder()); Orchard shOrchard = shOrchardDirector.Construct(); shOrchard.Plant();   //果園 public class Orchard {    string name;    public string Apple { get; set;}    public string Orange { get; set;}    public Orchard(string name)    {        this.name = name;        Console.WriteLine(“建造{0}果園!”, name);    }    pub...