目前分類:程式觀念 (21)

瀏覽方式: 標題列表 簡短摘要

 

用淺顯易懂的方式說明複雜的程式觀念-小山C#教學

 

    我在網路上有看過很多程式教學的網站,現在網路非常的方便,上面有很多的資源,今天來介紹一個很好的C#教學網站,是小山C#教學網站,這個網站用很淺顯易懂的方式來說明複雜的程式觀念,而且有影片說明,看了以後程式觀念可以更清晰,連結我放在下面,推薦給大家。

 

小山C#教學網站


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

 

使用Page_LoadComplete解決Page_Load在Button_Click之前執行的問題

 

    最近在寫ASP.NET的網頁使用C#,我做一個功能,在Button_Click之後用TextBox的文字來更新資料庫資料,結果我發現我一直沒有辦法更新資料庫,後來才知道是因為我在Page_Load中有設定TextBox中的文字從資料庫讀取,又因為Page_Load會發生在Button_Click之前,所以一直都先設定TextBox的文字再執行Button_Click,資料庫當然無法更新了。

   解決的方法也很簡單,把設定TextBox文字從資料庫讀取的程式寫在Page_LoadComplete裡面就好了,程式如下:

protected void Page_LoadComplete(object sender, EventArgs e)
{

      ......要執行的程式

}

 

    Page_LoadComplete的執行順序會在Page_Load之前,所以這個問題就這樣子解決了,以後大家遇到類似的問題就可以用Page_LoadComplete來解決。


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

 

傳值呼叫、傳址呼叫和傳出呼叫的基本概念介紹

 

傳值呼叫(Call By Value):傳值呼叫為複製記憶體,在副程式宣告變數改變數值不會影響到主程式宣告的變數,這2個各自擁有獨立的記憶體空間。

傳址呼叫(Call By Reference):傳址呼叫為共用記憶體,在副程式宣告變數改變數宣告的變數,因為他們是共用記憶體。們是共用記憶體。

傳出呼叫(Call By Output):傳出呼叫也是共用記憶體,和傳址呼叫的差別在於傳出呼叫的變數使用前不須要給初始值。

 

下面的影片介紹了有關於傳值呼叫和傳址呼叫的不同,使用的是VB程式語言,大家可以參考看看:

傳值呼叫介紹(資料來源:薛志瑋Youtube頻道)

 

傳址呼叫介紹(資料來源:薛志瑋Youtube頻道)


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

 

C#少見的存取修飾詞 - internal、 protected internal

 

之前我就跟大家介紹過封裝(Encapsulation) 的觀念,有介紹了三個常見的存取修飾詞,就是public、private、protected。其實C#除了這3個存取修飾詞以外,還有2個少見的存取修飾詞,那就是internal、 protected internal。

internal:存取範圍是相同組件(Assembly)都可以使用,簡單來講其實就是相同的dll都可以使用

protected internal:除了相同組件(Assembly)都能使用之外,還有其子類別都可以存取。


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

物件導向程式中抽象(Abstract)和介面(Interface)的差異

 

之前我有介紹過物件導向抽象Abstract和介面Interface的程式觀念,今天我整理這二者的相似處如下:

1.抽象類和介面無法實例化,即我們無法為它們建立物件。

2.子類別必須覆蓋抽象類別或介面中定義的抽象方法。

 

而二者的主要差異如下:

1.抽象類別內可以有一般方法和抽象方法。
   介面中只能宣告方法,並且設定為必須是公開抽象,在介面中也不能有實作的程式碼。

2.抽象類別一定是繼承架構的父類別,但是毫無關係的類別可以實作同一介面。

3.一個類別只能繼承一個抽象類別,但是可以實作多個不同的介面。

 

想了解抽象和介面程式觀念的可以閱讀下面的文章:

抽象

介面

 

 


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

 

Garbage Collection垃圾回收機制

 

    在C#中,Reference Type的資料會存放在Heap,這樣子如果一直建立物件,就會讓Heap的記憶體空間裡面東西愈積愈多,那這樣子不清理的話就會使用愈來愈多的記憶體,這樣最後有可能會導致記憶體不足,如果是C++會需要呼叫free()來自己清理資料,而C#可以不要這麼做,因為C#會自動清理,不需要自己手動清理。

    在C#中就好像會有清潔隊在固定時間就會把沒有用的垃圾給清理乾淨,如果Heap裡面有記憶體區塊都已經沒有再使用了,就會去刪除這些區塊釋放出記憶體,會檢查這些建立的區塊有沒有指向物件,如果有指向物件的話,那麼就不會刪掉,但如果都沒有指向物件,那就會刪掉。在C#程式的這個機制叫做Garbage Collection垃圾回收機制,有這個機制就不用自己手動來刪除這些資料了。

    Heap是一種記憶體區間,想了解Heap是甚麼的人,可以看下面這篇文章:

    Garbage Collection在程式設計中實際可以不必學會也還是可以寫程式,現在至少先有這個觀念,以後再學比較進階的會有所幫助,在C#中其中還是有強制回收的方法,讓程式釋放出記憶體,今天因為只有講觀念,所以先不提程式怎麼寫。Garbage Collection是C#的程式語言中和C++程式語言一個很大的不同,如果面試時有人問你C++和C#哪裡不同,就可以回答Garbage Collection,了解這個觀念多少還是有幫助。

    

 


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

   

愛麗絲漫遊量子奇境

「愛麗絲漫遊量子奇境」書中講述量子物理,由天下文化出版

   

期望有一天能寫出「愛麗絲漫遊量子奇境」這樣的作品

   

    去年開始,我開始經營現在這個程式部落格,主要是為了找工作用,想要做一個作品給大家看到,這樣子去找工作至少有一個作品可以給人家看,雖然說這個作品感覺不怎麼樣,但是也總比沒有好。
    除了找工作建立這個部落格以外,我也希望可以把我寫作這方面的專長和我的專業做結合,用很淺顯易懂的方式教大家程式的基本觀念,最好是簡單到沒有程式基礎的人都可以聽得懂我在講甚麼,這樣子就成功了。
    事實上我在網路上也找過很多程式設計的教學資源,有的人真的是把一些程式的觀念講的非常簡單容易了解,我有看小山的C#教學部落格,他教C#真的就是講得非常淺顯易懂,我看他的部落格就可以把一些程式的觀念釐清,在過去他的部落格真的是對我幫助滿大的。會教的人就是可以把很難的東西講得很簡單,讓不懂的人聽懂。
    我其實是物理系畢業的,讀大學的時候我就有看過一本物理書,這本書在講量子物理,書名叫做「愛麗絲漫遊量子奇境」,這本書是用很淺顯易懂的方式來描述量子物理,我那時候看這本書就覺得真的是寫得很好的一本書,印象很深刻就是書中在講解測不準原理,是講說蓋房子的時候磚頭用丟的,因為無法準確知道每個磚頭會落在哪個位置,所以只好用丟的,但是可以知道磚頭出現在哪個位置的機率最大,這樣子磚頭愈來愈多,房子的樣子也就慢慢成形了。測不準原理就是在講量子的事件中位置是測不準的,只能知道機率分布這樣子。
    現在我的工作是程式設計師,所以我現在就是在嘗試要用很淺顯易懂的方式教大家程式設計的觀念,不但可以讓大家學會這些程式設計的觀念,其實對自己來講思考要怎樣寫這些內容,也是在複習我已經學過的程式設計觀念,對我自己而言也是有好處。學程式設計觀念很重要,最基本的觀念會了以後再學的更深入就會輕鬆很多。


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

 

Static 靜態

 

    在物件導向程式中,static靜態的意思就是共享,大家都是一樣的,如果設定為static的內容做變更,那是所有人都會跟著一起變,不是只有一個人變而已。

    例如我把公款設為static,今天公司某個部門辦活動用到公款,公款本來有1,000,000減少10,000元,變成990,000元,那是所有人的公款都減少,不會因為只有幾個人用了這個款項,所以只有那幾個人的公款減少,因為公款本來就是公司裡大家都共用的。那如果今天部門辦活動,他們是自己自挑腰包辦活動,而不是用到公司公款,那麼會減少的那是個人財產,如果王小明和李阿呆這二個人出錢辦活動,那麼就是這2個人的個人財產減少,個人財產就不會是static,因為那並不是大家共享的。

    或是今天公司老闆設為static,假設公司老闆叫做郝有錢,那麼這家公司所有員工的老闆都是叫做郝有錢,並不會問小明老闆是誰?他說老闆是郝有錢,問小美老闆是誰?她回答老闆是甄試棒,因為大家的老闆就是只有一個人,就是郝有錢。當然老闆會換人,如果今天換老闆了,新老闆就做郝郝孝,那麼公司老闆就變成了郝郝孝,大家的老闆都叫做郝郝孝。

    static就是如此,static的特性就是大家共用,如果變動的話大家都跟著變,不會只有一個人變而已,並且要記得,static就跟真相一樣只有一個。

    善用static可以讓程式變得簡潔並且會很好維護,我舉上面的例子可能大家不會很了解,之後我再寫一些程式範例相信大家會比較能夠弄懂這個觀念。


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

程式設計常用名詞解釋整理

現在求職去面試時常常會需要先筆試,筆試可能會考一些名詞解釋,以下為大家整理筆試時常出現的名詞解釋考題,適用於應徵ASP.NET使用C#的職缺,另外C++或JAVA的職缺也適用。

物件導向程式設計:物件導向程式設計(Object oriented programming,OOP)是使用抽象化的概念來實現程式設計模型,以物件做基礎,最基本的概念就是物件和類別,說明如下:

類別(Class)-類別就是把事物做分類,有相同行為的放到同一個類別,類別是抽象的,看不到也摸不著,屬於靜態,不是實體。

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

 

封裝(Encapsulation):把程式碼分割成不同類別,把沒必要的資訊隱藏,有必要的資訊才會公開可以共用。

 

繼承(Inheritance): 使用其他類別的屬性和行為,以避免重複程式碼。在物件導向程式設計中,類別下面可以有子類別,子類別可以使用上面父類別的屬性和行為,稱做繼承。

 

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

 

sql injection:在輸入字串資料時,使用者故意輸入SQL指令來攻擊系統,對系統的安全性造成威脅,常見的情況是登入時略過權限檢查就登入,或是刪除整個資料庫。

若要防止sql injection,最基本的做法就是一定要使用參數化查詢,程式中使用SQL指令絕對不可以出現",否則就很容易被攻擊,這是最基本的防護。

 

single sign on:在一家公司中可能有好幾個系統,每個系統都使用不同帳戶一個個登入非常麻煩,而single sign on是把這些帳號整合成一個帳號,以後所有的系統要登入就使用這一個帳號就好,此帳號會自動在系統中去映射到每個人各個系統的帳號,這樣就可以做到一個帳號就能登入所有系統。

有single sign on那就也會有single sign off,就是只要我一個系統做登出了,這個人就會所有系統都登出,而不必每個系統都還要一個個登出,以節省時間。

 

stored procedure:使用MS SQL Server時,有些TSQL會一直重複用到,但是使用的參數會不一樣,使用stored procedure就是把TSQL先寫好,並且指定有哪些參數可以調整,這樣以後要用到時就叫出來使用,把參數改一改就好了。

 

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

Global全域

Stack堆疊

Heap堆積

 

這一篇來和大家介紹一下C#的程式觀念,有關於記憶體空間,分成了三種-globalstackheap

 

Global全域:

存放

全域變數(global variable)

靜態變數(static variable)

程式編譯時會優先配置global的記憶體,因為優先配置的特性,使用global可以提升程式的效率,但是global沒有存活周期,程式啟動時就會佔用記憶體,一直到程式結束才釋出記憶體,因此使用global會造成容易耗用記憶體的問題。

 

Stack堆疊:

靜態記憶體配置,這是可預測的記憶體配置方式。

存放值型別(value type)資料

區域變數(local variable)

函式參數(function/method parameter)

函式的位址(function/method return address)

Stack是採用先進後出,最先進去的最後出來,最後進去的反而第一個出來,最後才宣告的變數會先被回收釋放出記憶體空間,先宣告的變數會之後才被回收。由於Stack的生命週期是規律的,可以知道甚麼時候就不會在使用了,因此系統在生命週期結束以後就會自動回收釋放出記憶體。

 

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

 

Array陣列和List串列

 

    上次介紹了C#資料結構中的quene和stack,這次來介紹在C#資料結構中的array陣列和list串列。

    程式語言中,有時候需要存放好多個數值,而這些數值都是相同的類型,這時候一個一個變數宣告那實在是太花時間了,有沒有其他的方法呢?當然是有的,可以使用array陣列。

    今天如果我要輸入成績資料,我就可以宣告一個array陣列[成績],這個array陣列會使用連續記憶體,並且要設定array陣列要存放多少筆資料才能使用,可以存放多少筆資料這在程式上叫做這個陣列的大小,如果超出array陣列大小範圍的話就不能存放資料了,所以在設定array陣列大小時數字要注意不要太小。在宣告array以後,裡面的內容會先給一個預設值,不同的資料型態預設值不同,如果宣告array的資料型態是int整數的話,那麼預設值是0,所以即使陣列裡面的內容都還沒有設定數值,呼叫陣列裡面的第幾筆資料時都還是會有東西,只要沒有超出這個陣列大小的範圍就會顯示預設值,就好像1~100號成績都先預設為0,然後一筆一筆的去改每個人成績應該是多少。

    那可不可以我不要一開始設定我最多有多少筆資料,而是資料筆數可以增減呢?那可以使用list串列,使用list串列不需要使用連續記憶體,也不用告知要存放多少筆資料,可以增加和減少資料筆數,是一筆一筆增加資料,不像陣列告知有多少筆資料以後先給每一筆資料一個預設值,如果我只增加到第3筆成績資料,然後要取得第4筆成績資料在list中是不行的,而在陣列中我只設定到第3筆成績資料,然後要取得第4筆成績資料是可以的,你會得到預設值0。用list來輸入成績資料,就好像給你一個空白的成績表,上面都沒有內容,你要一筆一筆的把成績寫上去,也不需要先告知有多少筆成績資料,不必擔心不夠寫。使用list一個很方便的地方是移除一筆資料,後面資料就會自動往前移,就好像排隊時有一個人他不排了,後面的人就自動往前,array就沒有辦法這樣了。

 

整體來說,array和list有下面幾點不同:

1、array使用連續記憶體空間,list不需要使用連續記憶體空間。

    array就好像找一塊地搭帳篷,把帳篷搭在一起,而list則是搭帳篷但不搭在一起,會找好幾塊地搭帳篷。array在搭帳篷時地要找的夠大,不然帳篷太多就沒地方搭了,而list沒有這個問題,因為帳篷並沒有搭在一起,所以要再增加帳篷並不困難

2array的速度快,而list的速度慢

   array使用連續記憶體,帳篷都搭在一起,所以要走過所有帳篷會很快,而list不使用連續記憶體,帳篷沒有搭在一起,要走過所有帳篷當然就比較慢。

3array不能新增或刪除元素,但是list可以

   array的特性是一開始就宣告好多少筆資料,並且會給預設值,就好像找一塊地搭帳篷,已經告知園區我要搭多少個帳篷,園區已經把帳篷的位置一格格都畫好了,事先說好可以搭幾個帳篷,錢已經付好,如果要增加或是減少可搭帳篷的地方都不行,但是list不一樣,不需要宣告有多少筆資料,好比我在自己家的土地搭帳篷,所以我要增加一個搭帳篷的地方或是減少一個搭帳篷的地方都可以。

 

相關文章

Quene隊列和Stack堆疊


文章標籤

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

 

Quene隊列和Stack堆疊


    今天來跟大家談談C#資料結構,有2個觀念很重要,叫做Quene隊列和Stack堆疊。

 

Quene隊列

    Quene隊列的意思其實就跟它的名稱一樣,是一種先進先出(First in first out)的概念,這就跟買東西要排隊一樣,先到的人先買然後先離開,後到的人後買後離開,因為就和排隊一樣照順序,所以稱做隊列。在Quene隊列中要把資料放進去叫做push,而要把資料取出叫做pop。

 

Stack堆疊
    Stack堆疊也是意思和他的名稱一樣,是一種先進後出(First in last out)的概念,最先到的人反而是要最後離開。這其實就好像球桶,把籃球或是網球放入球桶裡面,如果要把球拿出來,這時候就要從最上面的開始拿,沒辦法從最下面的開始拿,一個一個疊上去,先放進去的後拿出來,後放進去的先拿出來,所以叫做堆疊。在Stack堆疊中要把資料放進去叫做Enqueue,而要把資料拿出來叫做Dequeue。

 

資料類型

Quene

Stack

定義

先進先出

先進後出

新增資料

Enqueue

Push

文章標籤

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

泛型(Generics)

 

  泛型(Generics)在物件導向中是一個比較進階的觀念,但也非常容易用到,Genrics字面的意思是通用,在物件導向中翻譯成泛型,意思是廣泛的型別,一件事物可以用不同的形態來描述。

  舉例來說,成績這件事情我把它定義為泛型,學生的成績有可能是分數0~100分,但是也有可能成績會是等第A、B、C、D、E、F,同樣是成績,但是要表達成績的方式可以不一樣,這就是泛型。

  或者是班級這件事情也可以是泛型,班級可以是數字1~10班,但也可以是甲乙丙丁,同樣是班級,但是可以用不同的形態來表達。

  使用泛型的好處是程式不必再寫一次,可以重複使用,只需改變資料的類型就可以了,如果再宣告一個新的資料會讓程式變複雜,程式顯得比較雜亂,使用泛型則是可以讓程式較簡單好管理,這是使用泛型的目的。

 

 


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

介面(Interface)

 

  介面(Interface)在物件導向中可以說是非常重要的一個觀念,介面的意思是不同類別但是擁有相同的方法,稱作介面。

  這就好像不同的電腦周邊,像是隨身碟,行動硬碟,滑鼠等,他們都有共同的規格USB,因為有這個共同的規格,所以不同廠牌的這些產品都可以通用,因為大家擁有相同的介面叫做USB。

  其實介面和抽象相當類似,表示大家都必須做的事情,在抽象中我舉的例子是公司員工,如果我定義一個介面為員工,和抽象一樣每個員工當然都要工作,也必定都會領薪水,所以工作和薪水就是員工這個介面裡面的方法,而每個員工的工作內容當然都不會相同,薪水也會每個人不一樣。要注意在介面中的方法已經是定義為公開並且抽象了,介面中的方法一定是大家都可以使用並且都要做的事,而在抽象類別中的方法則是不一定要是抽象並且公開的,抽象類別中可以有抽象方法和一般方法。

   另外還有一個特點是介面和抽象很大的不同,那就是一個類別只可以去繼承一個抽象類別,但是可以繼承好幾個介面,就好比抽象是你的爸爸只能有一個,可是介面是乾爹,一個人可以有好幾個乾爹。

  其他抽象所擁有的特性,介面也相同,抽象不能實例化,介面一樣不能實例化,因為跟抽象一樣是要被子類別繼承的,所以實例化沒意義。

  這一篇一樣僅僅說明介面的觀念,沒有搭配程式大家可能會不好理解,之後我會再寫一篇介面的程式教學,要理解介面這個觀念大家可以先看一下前一篇介紹抽象(Abstract)的文章,因為介面和抽象很類似,所以建議大家先看完抽象以後再來看介面。

 

相關文章

抽象(Abstract)

 


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

抽象(Abstract)

   

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

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

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

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

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

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

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


文章標籤

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

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

封裝概念介紹

 

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

繼承概念介紹

 

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

多型概念介紹

 


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

多型(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) 人氣()

1 2