抽象(Abstract)

   

     抽象(Abstract)在物件導向中可以說是非常重要的一個觀念,他的意思簡單的講,那就是大家都必定會做這件事,但是內容會不同。

      舉例來說,公司裡每個人每天從家裡來公司的方式都不同,同樣是交通這件事,美美騎車來上班,阿花坐捷運來上班,阿財開賓士來上班,阿土伯騎腳踏車來上班,阿里走路來上班,交通這件事是每個人都必定會做的事,但是每個人的交通方式都不會相同,這就是抽象。

要使用抽象方法,就必去把類別宣告為抽象類別,抽象類別中可以有抽象方法,也可以有一般方法,而一般類別只能有一般方法,不能有抽象方法。抽象方法只有方法體,裡面沒有內容,沒有內容為什麼還要宣告呢?抽象方法宣告以後,是給他的子類別使用,子類別一定要實作抽象方法,如果沒有實作的話程式就會錯誤不能執行。

使用抽象就表示大家都有共同要做的事情,才會使用抽象,例如我宣告一個抽象類別是員工,每個員工當然都要工作,也必定都會領薪水,所以工作和薪水就是員工這個抽象類別裡面的抽象方法,每個員工的工作內容當然都不會相同,薪水也會每個人不一樣,這就是抽象的概念。簡單的說,抽象就是對要描述的東西,找到共同必要的元素。

由於使用抽象類別的目的是裡面的方法要被繼承然後覆寫,所以抽象類別是不能實例化的,既然一定會被下面的子類別覆寫,那也就沒有需要做實例化的動作了,如果要使用抽象方法,應該是實例化繼承了抽象類別的子類別,然後再去使用這個子類別的抽象方法。就好像上面的例子中,員工是抽象類別,如果要我想要知道薪水,使用這個薪水抽象方法,一家公司裡面每個人的薪水都不一樣,想要知道薪水就應該是要去呼叫繼承了員工這個類別下面子類別的員工A、員工B、員工C…,然後才能夠得到員工A、員工B、員工C每個人的薪水分別是多少。

抽象(Abstract)雖然通常大家都是翻譯為抽象,但是其實Abstract這個詞比較像是歸納的意思,就好像讀論文時,論文的最前面都會有Abstract,這裡Abstract的意思就是摘要和歸納。如果我宣告一個抽象類別是車子,抽象方法就會有油耗、承載量等等,可以說我歸納了一台車子會有油耗、承載量這些特性,但如果說我抽象了一台車會有油耗、承載量這些特性感覺就很奇怪,這是關於名詞上的翻譯使用歸納感覺比較好理解,但是通常大家都還是把Abstract翻譯為抽象。

這一篇僅僅說明抽象的觀念,沒有搭配程式大家可能會不好理解,之後我會再寫一篇抽象的程式教學,大家就會比較好理解,好好的運用抽象可以讓程式好維護,是非常重要的一個觀念。


文章標籤

波羅、希夏普2020 發表在 痞客邦 留言(1) 人氣()

索引子get; set;

 

索引子(indexer) 是用來處理資料用的,也就是getset,這在程式設計中很常用到,分別是用來取值和設定值,善用索引子可以讓程式更好維護。

假設今天做一個紙牌類遊戲,玩家只要有一定金額的籌碼就可以遊戲,如果在一輪遊戲中輸掉太多錢,籌碼不夠付,這時籌碼仍然為0,不會變成負的,這就可以使用索引子(indexer)來做。

如下建立一個Player類別,並且宣告變數moneyMoneyMoney字首大寫和money做區分,Money是使用索引子處理以後的資料,程式如下:

public class Player

    {

        private int money=1000;

        public int Money

        {

            get { return money*10; } //一台幣換10遊戲幣

            set

            {

                if (value < 0)

                    money = 0;   //籌碼小於零仍然是零,不會變成負的

                else

                    money = value;

            }

        }

    }

get:讀取數值時做的動作。

文章標籤

波羅、希夏普2020 發表在 痞客邦 留言(0) 人氣()

 

[作品]終極密碼遊戲

 

終極密碼這個遊戲相信很多人都相當熟悉,是很常見的一個團康遊戲,由主持人在一個範圍內選定一個幸運號碼,通常是1~100,然後大家就輪流喊數字,喊了這個數字以後範圍縮小,然後下一個人再喊一個數字,範圍再縮小,然後一直到有人中為止。

本專案我使用C# Winform撰寫,終極密碼這個遊戲寫起來不會很難,程式大約200行,適合剛開始學程式,但是已經有一定程度的程式設計師練習,遊戲畫面如下:

 

 

一開始可以設定遊戲的數字範圍

 

輸入一個數字,輸入好以後按下確認或是按Enter都可以。

 

輸入數字以後範圍就變小了,然後再繼續輸入數字。

 

輸入數字剛好命中遊戲就結束了,可以按再一次,遊戲會重新開始。

 

波羅、希夏普2020 發表在 痞客邦 留言(0) 人氣()

封裝(Encapsulation)-意思是把有必要的內容對外來公開,沒有必要讓別人看到的內容則隱藏起來。

封裝概念介紹

 

繼承(Inhertitance)-子類別使用上面父類別擁有的屬性和行為。

繼承概念介紹

 

多型(polymorphism)-一件事物有多種不同的樣貌,在物件導向程式語言指的是同樣一個方法在不同類別中會有不同的內容。

多型概念介紹

 


波羅、希夏普2020 發表在 痞客邦 留言(1) 人氣()

遇到黑心企業要怎麼辦?

          在台灣工作環境並沒有那麼理想,每個人的際遇不同,有的人工作一帆風順老闆都很好,也有的人總是會遇到一些黑心企業,我想良心企業和黑心企業都有,如果真的有一天遇到黑心企業要怎麼辦呢?
    我來跟大家講一個故事。


    侯文詠有一本書叫做大醫院小醫師是在講實習醫師的生活,後來改編成電視劇,醫學院是非常難讀的,第七年的實習比前六年的考驗還要更加艱難,那種辛苦一般人很難想像。
    有一個實習醫生叫楊格,因為得罪了卓醫師,後來卓醫師的好朋友紐醫師放話要當楊格加護這門課,楊格就常常被鈕總醫師刁難,楊格醫生他自己也學不好,被問問題常常是答不出來,甚至是連有旁邊的人打Pass給他了都還是答不出來,下場都很難看。
    有一次楊格醫生在報告病人的病況,這時候鈕總醫師進來了,紐醫師表示這個實習醫生表現不太好,想要大家問楊格問題,有一個學生問了一個問題,總醫師後來追問跟病人的病史有沒有關係?楊格他又答不出來,總醫師他就直接叫楊格不要再浪費大家時間了,下學期別在選加護這門課。
    下了課大家走了,有一個醫生是醫院裡的老鳥,叫楊醫生留下來問他問題。
    這個老鳥醫生問:「你知不知道總醫師問你問題的重點是什麼?
    「目的我知道,重點我不曉得。」顯然楊格覺得這是總醫師看他不爽,所以就故意要刁難他。
     看到楊格這副模樣,這個醫生就開導楊格說總醫師為什麼問這個問題,因為加護不同於急診的地方在於除了救急以外,還可以深入的追蹤,一個人病史就像是一個人他一生的縮影一樣,這也就是為什麼總醫師要問病人病史的原因了。
    這個故事給了我很大的啟示,就是那句話「你知不知道總醫師問你問題的重點是什麼?」在楊格來看,他只認為這就是那個姓鈕的看他不順眼,存心要刁難他,所以才會問這個問題,雖然鈕醫師確實是已經放話要當楊格了,因此一直在不斷刁難楊格,一直問問題,但是楊格卻沒有注意到總醫師他問問題的重點到底在哪裡,結果楊醫師每次被總醫師問,每次都不會。
    所以說職場上遇到類似的情況怎麼辦呢?如果遇到主管或是前輩一直要刁難,心理可能不平,但是最重要的是要記得人家講話的重點是甚麼,如果真的是真材實料的話是不用擔心找不到好工作的,也許這一家公司不好,但是你有能力,也記取教訓,到了下一家公司老闆很有良心,可能就此飛黃騰達,之前所遇到的那些事情也就一點也都不重要了。
   有一句英文諺語講得最為貼切。

    An enemy may chance to give good counsel.
    敵人也可能給人好的忠告

    遇到黑心企業,也許那個老闆真的很可惡,但是老闆也有可能會給你很好的建議,你對老闆不滿,你覺得這老闆怎麼這麼難搞這都沒關係,但是至少你要記得人家講話的重點是甚麼,汲取經驗這樣才會愈來愈進步。在事情發生的當下也許感到很氣憤,但事後應該要平心靜氣的想一想人家講話的重點,怎樣讓自己可以變得更好,這才是最重要的,如果一心想著要報復的話那就太糟糕了。
    另外關於紐醫師放話要當楊格的事情講給故事給大家做參考。

    在美國有一個大學教授的課很難拿到高分,從來沒有一個學生在這門課拿過A,有一個學生他的成績很好,他就不相信他去修這門課拿不到A,後來他去修了,也真的表現很好,最後學期末拿到了A。
    後來這個學生要去申請學校了,找這個教授寫推薦信,這教授很高興這小子還記得我,找我寫推薦信,就幫他寫了好幾封推薦信,因為這學生要申請很多學校。

文章標籤

波羅、希夏普2020 發表在 痞客邦 留言(0) 人氣()

    我做程式設計師已經有四年的工作經驗了,身為程式設計師一定要會上網查資料,並且吸收最新的資訊,我知道很多很好的網站,這些網站都很好用,推薦給大家,之後會持續增加。

 

IThome

https://www.ithome.com.tw/

簡介:在IThome中有很多資訊新聞和很多很有用的文章,而且文章常常更新,裡面有很多最新的技術,身為程式設計師應該要常常更新資訊,IThome應該是每個程式設計師都應該要看的網站。

 

The will will web

https://blog.miniasp.com/

簡介:Will保哥現在是多奇數位創意有限公司技術總監 ,同時他也是專業講師,教過很多程式設計課程,他的部落格有很多很有用的文章,而且一直都有持續在更新中,Will保哥的部落格一直是我很喜歡看的一個部落格,非常有用。

 

Stackoverflow

https://stackoverflow.com/

簡介:stackoverflow是一個國外的網站,都是寫英文,但是在這個網站上有很多人在互相交流,討論問問題,如果看得懂英文的話這是一個非常值得推薦的網站。

 

ASP.NET專題實務 WebForm + MVC教學影片 -- MIS2000Lab.

https://dotblogs.com.tw/mis2000lab/

簡介:MIS2000 Lab.已推出20餘本電腦書,曾任資策會專任講師與微軟MVP。他的網站較適合有一定程式設計基礎的人看,他的網站有教學影片,教的方式非常的淺顯易懂,但需要會基本的程式設計才適合看,課程的特色是強調使用錯誤學習法和驚嚇學習法,會故意把程式寫錯給大家看錯誤訊息,從這個錯誤中來學習。

 

藍色小舖

https://www.blueshop.com.tw/

波羅、希夏普2020 發表在 痞客邦 留言(2) 人氣()

 

網頁資料儲存方式 CookieSession

 

    在網頁有很多的資料儲存方式,其中最常用的資料儲存方式為Session、Cookie,不同的資料須要使用不同的資料儲存方式。

Cookie的概念就好像去辦事或是買東西要抽取號碼牌,等到輪到你時只認這張號碼牌,然後你再講說今天要辦理甚麼,點甚麼餐點。Cookie的特性是沒有詳細資料,因此店員在輪到你之前不會知道你要做甚麼,也只認號碼牌而已。

Session的概念就像是會員卡,有一天商店的號碼機升級了,抽號碼牌時改成插會員卡或是輸入身分證字號,等到輪到你時店員就已經知道你的會員資料,也有你的消費紀錄,如果是在餐廳消費就能根據顧客的消費習慣,問客人是不是點跟上次一樣的餐,或是有的店家會幫客人集點。

使用Session會核對Session ID,Session ID會儲存於Cookie,要先從Cookie取出Session ID,如果沒有的話則是產生一個新的Session ID,然後去核對有沒有這筆Session ID,取出Session的詳細資料。這個過程就好像核對會員的身分證字號,或者是核對病人的病歷號碼,然後取出會員資料或是病歷。

Cookie是把資料存放在Client端,等到要用再取出,這個資料會讓別人看到,但是使用Cookie可以減少server的負擔,而因為資料會被看到,因此不建議存放機敏資料,Cookie的使用期限短,需要注意。

Cookie資料儲存的每一筆會有一個key和他對應到的value。當使用者輸入資料,不小心把網頁關了,然後使用者再打開時資料都還在,就是使用Cookie,在網路上有很多網頁要輸入資料的地方,在你下次再到訪時都幫你先輸入好,這些都是使用了Cookie來儲存的。

Cookie的使用並非沒有限制大小和數量,大多數的瀏覽器會對於Cookie有所限制,而基於RFC2965的規範,定義了瀏覽器對於Cookie的最低儲存量,現在的瀏覽器大部分都已經是符合了RFC規範,RFC規範中對Cookie的限制如下:每個Cookie的大小限制至少有4096bytes,每個網站至少可存放20個Cookie,瀏覽器至少可以存放300個Cookie。`

對於RFC2965的規範原文請大家參考這篇文章RFC-2965 HTTP State Management Mechanism

Session是把資料存放在server端,等需要使用時再拿出來,別人無法看到這個資料,會比較安全,但是由於Session常常會用來存放機敏資料,所以容易被攻擊。Session就好像打電話,從電話接通一直到掛斷的這段過程,所以Session中文翻譯為會期,這個意思就很接近,這這段期間Session資料都會在,除非server通知刪除Session否則不會消失,Session很常會用在跨頁傳送機敏資料。

在網頁設計中,資料儲存方式中最重要最常使用的就是Cookie和Session,其他還有很多資料儲存方式像是Cache、ViewState、Application,但是在這些網頁資料儲存方式當中,這裡面最重要也是最基本的方法就是Cookie和Session,這是我過去的工作面試常遇到的考題,是身為一個程式設計師必須要學會的方法。


文章標籤

波羅、希夏普2020 發表在 痞客邦 留言(0) 人氣()

多型(Polymorphism)

 

多型(polymorphism)的意思是一件事物有多種不同的樣貌,在物件導向程式語言中一個方法在不同類別中會有不同的內容,就叫做多型。

舉例來說,同樣是動物叫聲,狗是汪汪叫,貓是喵喵叫,小鳥是吱吱叫,貓頭鷹是咕咕叫,公雞是啼叫,同樣是動物叫聲這個方法,不同的動物在使用動物叫聲這個方法時,都會不一樣,這就是多型。

或是今天同樣是交通工具,每個人的交通工具皆不一樣,小明的交通工具是腳踏車,阿舍的交通工具是黑頭車,小李的交通工具是汽車,阿伯的交通工具是坐公車,美美的交通工具是船,當每一個人在使用交通工具這個方法時,都有各自的交通工具,這就是多型。

如同上面的例子,在物件導向程式設計中,在父類別中同樣的方法名稱被不同的子類別繼承使用,各有不同的內容,這種現象稱做多型,善用多型可以讓程式變得簡單易讀,也較容易維護,在功能擴充上也比較方便,由於這裡只有講觀念沒有實際用程式做介紹,讀者可能很難理解,之後我會再寫一些文章實際用程式來說明,這樣就比較能理解使用多型的好處了。多型常會跟抽象一起使用,抽象的觀念還沒有介紹,之後會再跟大家做介紹,對程式設計師多型來說是很重要的一個觀念,好的程式一定會常常用到多型,程式才會好維護。


波羅、希夏普2020 發表在 痞客邦 留言(0) 人氣()

 

程式設計觀念文章總整理

 

 

    我的部落格以介紹程式設計為主,最近陸續寫了幾篇物件導向程式設計的文章,另外也有寫不是物件導向範圍內的程式觀念文章,也都非常重要,整理如下:

 

物件導向

物件導向程式設計簡介

封裝(Encapsulation)

繼承(Inheritance) 

多型(Polymorphism)

抽象(Abstract)

介面(Interface)

泛型(Generics) 

靜態(Statics)

 

C#

三種記憶體區間-Global、Stack、Heap 

Garbage Collection垃圾回收機制

 

資料結構

Quene隊列和Stack堆疊 

Array陣列和List串列 

波羅、希夏普2020 發表在 痞客邦 留言(0) 人氣()

 

繼承(Inheritance)

 

繼承(Inhertitance)的意思是可以讓物件使用其他物件的屬性和行為,以避免重複程式碼。在物件導向程式設計中,類別下面可以有子類別,子類別可以使用上面父類別的屬性和行為,稱做繼承,就好像兒子繼承了父親的財產。

父類別和子類別的關係,簡單的說,就好像今天我有一個類別叫做動物,動物有很多種,貓、狗、豬等等這些都是動物,所以貓、狗、豬這些就是子類別,動物則是父類別。

繼承就好像一個富翁他的財產非常的多,他擁有很多的土地和房子,他也有很多的小孩,他的小孩就繼承了富翁的財產,每個人都分到了爸爸的房子,他的小孩也已經長大成家了,他的小孩再把房子分給下面的孫子,這就是繼承的概念。這個富翁是父類別,小孩是子類別,子類別繼承了父類別的內容,子類別下面還可以有子類別,下面的子類別又再繼承了父類別的內容,然後可以一直繼承下去。

但是需要注意,富翁當然不是所有的財產都給他的小孩繼承,這個富翁他擁有一個豪華的度假中心,只有他可以使用,不讓他的小孩用,不給他的小孩繼承,那麼這個土地就是是私有的,只有富翁可以用,不能被繼承。

這就回到了上次封裝的觀念,上回講到了封裝的目的是隱藏不必要的資訊,只提供了有必要的介面給使用者使用。那麼在這裡例子中,這個富翁的私人度假中心就是屬於private,富翁給他兒子繼承的土地房子就是protected,如果這個富翁他想為國家有點貢獻,想捐一塊地出來做公園,給大家都能到公園運動遊玩,那麼這個公園就是public

在物件導向程式設計中,使用繼承可以簡化程式,繼承者繼承了父類別的內容,這樣就可以不必再一直做同樣的事情,因為這些事情在父類別已經做過了,沒必要再做一次,子類別只需要繼承就能使用,繼承是一個很重要的觀念,寫程式記得要善用繼承。


波羅、希夏普2020 發表在 痞客邦 留言(0) 人氣()

 

封裝(Encapsulation)

 

介紹完物件導向的基本概念以後,首先要來跟大家介紹甚麼是封裝。

封裝(Encapsulation) 指的是把有必要的內容對外來公開,沒有必要讓別人看到的內容則隱藏起來。

舉例來說,就好像一家大公司,他的大廳是所有人都可以去的地方,所以說大廳會客這是公開的,而公司有很多機密資料,這些存放機密資料的電腦不能隨便讓人使用,都是只有特定的員工或是主管可以使用,所以使用機密資料電腦就是不公開的,另外還有一種情況,公司裡面每個部門的某些電腦可能是可以同一部門的人使用,提供同一個部門的人來查詢資料,或是開會時做簡報,但是別的部門的人就不能使用,所以使用XX部門公用電腦這件事情他的權限是同一部門內都可以用。

上面這個例子就說明了封裝這件事情,封裝分成三種情況publicprotectedprivate.

 

public:公開讓任何人都可以使用。

protected:同一個群組的人可以使用。

private:只有特定的人可以使用,外界不能用。

 

甚麼是public?就像我上面所舉的例子,在公司中大廳是公開所有人都可以去的地方,大廳會客是所有人都可以做的,這就叫做public。使用公司裡面機密資料電腦僅僅只有特定的人可以做,其他人都不能做,這就是private。公司裡面的部門電腦只有該部門的人可以用,其他人都不能使用,因為只有同一個群組的人可以做,不是這個群組的人就不能做,這種情況就是protected

在物件導向程式設計中,封裝的目的是只提供使用者必要的介面,把實作內容隱藏,就好像我今天使用電視遙控器,我只會看到按鈕,電視遙控器的電路板則是隱藏起來了,因為電視遙控器的運作原理不必給使用者知道,這就是封裝在日常生活中的例子。

封裝的三種情況publicprotectedprivate在物件導向程式中非常容易遇到,好的程式並不會把所有內容都寫成public,而是三個都會使用。去面試的時候這也是很常見的考題,因為這個觀念算是最基本的東西,是任何一個寫物件導向程式語言的程式設計師都應該要會的東西。


波羅、希夏普2020 發表在 痞客邦 留言(0) 人氣()

 

物件導向程式設計簡介

 

一開始當然先跟大家介紹甚麼是物件導向,因為我的工作經驗都是以C#為主,因此在這一系列的文章中都會以C#來介紹物件導向,除了C#以外,JAVAC++也都是物件導向的語言,在程式語法上和C#會有很多的不同,我在介紹物件導向語法時都會以C#來講解,現在先來跟大家簡單介紹甚麼是C#

C#他就是一種物件導向的程式語言,適合在Windows平台上執行,以.Net Framework為基礎來運作,C#程式編譯之後,需要有「Common Language Runtime (CLR) 來作代碼轉換的功能,CLR裡面有很多功能 ,而CLR都已經整合在.Net Framework裡面了,因此在寫C#時是不能沒有.Net Framework的。

C#這個名稱具有C語言升級的意思,比CC++更高級。

再來說明甚麼是物件導向,物件導向程式設計(Object oriented programming,OOP) 是使用抽象化概念來實現程式設計模型,以物件為基礎,每個程式之間會互動,好比我開車子踩油門會前進,踩煞車會停止,按喇叭會響等等。在物件導向最基本的概念是類別和物件。

 

類別(Class):類別是抽象的,看不到摸不著,屬於靜態,不是實體,在類別裡面會定義屬性和方法。

物件(Object):物件是一個可以看得見也摸得到的實體,屬於動態,狀態會變但行為不變。

 

例如今天我定義一個類別是人,在人這個類別裡面會有身高、體重、年齡,這些有關於人的描述就是人的屬性,每個人都會有這些屬性。人會吃飯和睡覺,這些行為就是方法。

我定義小明是人,小明就是人這個類別中的物件,然後可以描述小明這個人的特性,小明的身高175公分,體重65公斤,年齡20歲。除了小明是人以外,阿勇也是人,然後他的身高體重這些特性又跟小明不一樣了,這就是物件導向的基本概念。

另外,物件導向有三大特性,任何一個會物件導向的程式設計師都必須要知道這三大特性,分別是封裝、繼承和多型,這在後面會再跟大家做介紹。


波羅、希夏普2020 發表在 痞客邦 留言(0) 人氣()

大家好,我是希夏普2020,這是本部落格的第一天文章。我是一個已經工作多年的程式設計師,我的專長是ASP.NET使用C#,本部落格將會介紹物件導向語言,希望用口語化比較生動的方式來做程式教學,讓初學者也能了解程式,希望大家會喜歡,謝謝。


波羅、希夏普2020 發表在 痞客邦 留言(0) 人氣()