2018年8月24日 星期五

首支應用程式—關機程式

寫程式入門會遇上的術語小整理

對於自己學程式時,查資料遇上的卡關用字,盡可能的集中於此,解釋上也以好懂優先,若有錯誤歡迎提醒更正...:3

程式(Porgram)

  指一連串能 "指示電腦" 或其他具有 "訊息理能力的裝置" 每一步動作的指令,通常用某種程式語言編寫,執行於某種目標(求得結果)上。

參考來源:維基百科,自由的百科全書 - Wikipedia  電腦程式

函數(Function)與副程式(Subroutines)、參數(Parameter)、引數(Argument):

  有些程式碼被重覆使用,一旦這些程式碼需要修改,可能會造成前後不一致,或是變數名稱不符等種種問題。總而言之是不容易被維護的。為了方便維護程式,並且節省程式設計師的力氣,因此發展出了函數與副程式的寫法。執行相同動作的程式碼只需要撰寫一次。

1.函數與副程式最基本的差異就是:函數有"回傳值",副程式沒有。
2.每一個函數或副程式只負責解決"一個"小問題。
3.函數與副程式是程式裡的"黑盒子(Black Box)",在黑盒子外面不需要知道裡面實作的方法,只需要知道輸入值( 參數(Parameter) )與回傳值。

 ex:回傳值 = 函數 ( 參數 )
  回傳值就是黑盒子出來的輸出值,輸入值就是參數(Parameter)黑盒子即應用時不需要了解中間怎麼做、經過了什麼,能達成目的就行,而目的就是函數的名稱。

4.黑盒子的出入口(參數與回傳值)必須定義清楚並且容易了解。
5.物件導向裡,所有的函數與副程式都被稱為"方法"。
6.在迴圈,重複的程序會連續執行。在函數與副程式裡,重複的程序可以需要時再呼叫,在分配上更能靈活應用。

保留字(Reserved Word):

  也有稱關鍵字,指該程式語言保留下來的英文單字,這些單字是不能被用來作為變數名稱。簡單的說就是該程式語言的語法不能拿來當變數,因為電腦會搞不懂我們寫的是指令還是變數。


物件(Object)、封裝(Encapsulation):

  物件裡只有兩種東西:屬性(Property)方法(Method)

  在開刀房工作時,醫生會告訴護士需要的器材(物件名稱)、尺寸(屬性),護士就會給予該項器材,該器材的功能可能不只一個,但醫生知道使用該器材的部分功能(方法)來工作。

  外出開(物件名稱),我們開啟了冷氣(方法),調了溫度(屬性)。播放了音樂(方法),決定哪首歌(屬性)。踩下油門(方法)出發,踩太底(屬性)爆衝出去(副程式的結果)

  網路遊戲裡,血量不夠(目的)要喝血罐(物件名稱)補血(方法),每瓶血罐預先設定可以補多少血量(屬性)
註:當然,血量不能隨玩家輸入來決定,不是遊戲不會結束,就是角色永生了。

  需要什麼工具(物件名稱)?工具的什麼功能(方法)?該功能要什麼輸入值(屬性)?是否有結果(輸出值)會出來?

1.決定完屬性(預設或等待輸入)與方法(是否有輸出)後,會集中放在一個" 類別 ",之後要使用時,該類別會以一個寫法上像" 資料型態 "(int、float....etc)那樣,並銜接一個變數名稱(就是物件名稱),然後就可以開始設定該物件的屬性與應用該物件的方法。
2.在" 物件導向 "裡,這種集中放置屬性與方法的方式,就是" 封裝(Encapsulation) "
3.相異物件名稱,可以有相同名稱的屬性或方法,但是並不會被混淆,使用時就會發現到。
4.屬性就是" 資料成員(Data Member"。
5.方法的名稱不可與" 類別名稱 "相同,這唯一特殊例外的方法叫" 建構子(Constructor) "

   你我拿相同的手機(物件名稱),有著一樣的功能(方法),且設定不同的電話號碼(屬性),且操作(輸出值)上卻不會互相影響。

參考來源:摩刻部落 一個呆子的網站 基礎程式設計(14)-物件、屬性與方法

類別(Class)

  就像在寫函數時,可以先寫在主程式前面,告訴電腦執行主程式時,對該函數的" 前提 "。同樣的道理,類別是創造物件的" 前提 ",應用時在寫法上與函數稍有差異,因為類別裡包含的屬性與方法,都是為了該物件的需要而設計、集合起來的,省略了每次應用都要再重新撰寫並呼叫好幾個函數。

1.自創的" 類別名稱 "不可與" 主程式名稱 "相同。唯一的例外,就是被設定關鍵字為全域(Public),且會包含一個叫" main "的類別,這是一般語言裡程式執行的起點。
2.程式碼裡,擁有同名類別的異名套件並不會被混淆喔!:3
3.類別也是有因為各種目的而生出的特殊種類,如
" 常數類別 "(為了不讓該類別被繼承而修改)。
" 抽象類別 "
 1.為了一定要被繼承,且不能被宣告成物件(需透過子類別名稱建立)。
 2.可以自行實作方法給子類別呼叫但是,若宣告為" 抽象方法 "(函數或副程式),則沒有實作過程且一定由子類別覆寫(Override),僅僅只能宣告。
 3.該類別底下的屬性與方法關鍵字不可為私有(Private)。
 4.而且,子類別僅能繼承(Inheritance)唯一的抽象類別。
" 巢狀類別 "(一種兩類別之間寫法上的結構,由外層類別對內層的類別的一切支配與控制。內層的屬性與方法供外層來使用,即便關鍵字是私有(Private))。

參考來源:
摩刻部落 一個呆子的網站 基礎程式設計(14)-物件、屬性與方法
摩刻部落 一個呆子的網站 基礎程式設計(17)-類別的種類
 iT 邦幫忙 4x D9:[Java]抽象類別(基本範例解說)

過載(Overload)、建構子(Constructor):

  " 物件 "透過" 類別 "事先告訴電腦使用時該連結那些功能(方法)或設定哪個值(屬性)。然而,有一種特殊的" 方法 ",是唯一能和類別名稱相同,不回傳任何值,可以用來作為集中預設值設定區域的方法,並能將集中於此的預設值再次應用於同類別的其他方法中,當該方法需要輸入值卻沒有被輸入時,就可以加入預設值來輸出結果。

  然而,這種方法,當然可以透過在同一" 類別  "裡,再寫一個一樣的方法,但執行內容與回傳結果相異,且輸入值(參數)的部分給予設定個數與資料型態,當之後遇到應用時,若有加上對應的輸入值,則會自動被判定是對應到哪一種同名的方法,這就是" 過載(Overloading) "。

參考來源:
摩刻部落 一個呆子的網站 基礎程式設計(15)-建構子

繼承(Inheritance)、覆寫(Override)、多型(Polymorphism)

  繼承(Inheritance)顧名思義,是一種與來源的支配關係,應用於類別與類別之間,來源的類別即是所謂唯一的" 父類別 ",所以底下可能支配著多個" 子類別 "。類別裡只有兩種東西:屬性(Property)方法(Method)" 子類別 "則能夠將" 父類別 "的屬性(被設定允許修改的)與方法(建構子不行)做再一次的延伸應用(改寫預設值、重寫一個同名的方法(就是" 覆寫 ")、呼叫父類別的方法與屬性...etc)

  也就是說,若有一群要重複執行的指令,則能用迴圈進行。有多次同樣重複執行且含迴圈的指令,則能用" 函數與副程式 "來統一管理。有多個部分同樣的屬性、方法的類別,則能將相同的部分集中放在父類別裡,再透過繼承的方式來逐一延伸與應用以顯示差異。

  建立物件時,倘若使用父類別名稱做物件的" 資料型態 ",而後面接著的,卻是子類別的建構子。在應用與父類別同名的方法時,則會自動選擇使用被子類別覆寫(Override)的方法(即使同父的子類別之間有同名的方法但不同實作)。這種會依據子類別的不同而自動做出相異的判斷就是多型(Polymorphism)。

參考來源:
Elsaの程式學習筆記 [Java] Java中函數「覆寫(Override)」之介紹
摩刻部落 一個呆子的網站 基礎程式設計(16)-類別繼承
國立中山大學程式諮詢網  5. 什麼是多型
痞客邦 Cedric's 學習備忘錄 多型 ( polymorphism)
摩刻部落 一個呆子的網站 基礎程式設計(18)-多形概念

介面(Interface)、實作(Implements)

  從類別與類別間相同的部分集中到父類別,會應用到繼承(Inheritance)。但從設計程式功能時的角度來看,若從集中" 需要的程式功能 "這點來著手,是否較好進行思考呢?於是,一種類似" 父類別 ",卻打破唯一繼承(實作的子類別可以實作(似" 繼承 ")多個介面(" 類別 "))。與" 抽象類別 ",卻只有宣告方法(完全交由實作類別" 外包 "的概念),完全沒有自己的實作。

  在介面需要新增方法時,並不適合直接在原介面與實作的子類別各自加上內容,因為當事後要來回朔問題時,對於找尋錯誤的該方法時,會因為越來越多的方法數而形成如同海底撈針似的困擾,所以會產生新的介面(用同一個子類別,所以會實作多個介面)來存放要新增的功能,並繼承先前的介面(對!新介面繼承舊介面)。

1.介面下會有一個類別以" 實作 "(Implements)的方式(不是用繼承(Inheritance),用的關鍵字不一樣)來" 實作 "(設計方法的內容)宣告的方法。
2.介面與介面之間,則可以使用繼承(Inheritance)的方式來新增方法。

參考資料:摩刻部落 一個呆子的網站 基礎程式設計(19)-介面與多重繼承

函式庫(Library)、API(Application Programming Interface)、框架(Frame)、套件(Package)、模組/模塊(Module)

  函式庫(Library)將該程式語言該常用或基本的方法、物件集中起來(也許是程式語言本身給予的、自己或別人開發的),做成一支可供匯入的程式,不需再自己重新定義相同目的的方法,直接應用裡面的函式,以加速撰寫程式碼效率為主要目的

  API(Application Programming Interface)程式常用或基本的方法(必須被設定為可被外部存取,也就是要全域(Public))集中起來(也許自己或別人開發的),做成一支可供匯入的程式,不需再自己重新定義相同目的的方法,直接應用裡面的函式,以加速程式與程式之間的開發為主要目的(因為開發程式時可以再匯入其他程式增加功能,這裡的其他程式就是API)

  框架(Frame)制定一套規範或者規則(思想),大家(程式設計師)在該規範或者規則(思想)下,確保所做的、所想的、所理解的一樣。如同開發環境(IDE)、作業系統、程式語言、資料結構...etc,通常具有增進開發效率的特色。

  套件(Package)則是除了函式庫外,額外增加了自動安裝程序(為了防止使用者自行設定造成的各種不可測錯誤。應該是用腳本寫的吧...),也就是軟體包。之後依據看是開發者(再自行引入函式庫)、使用者(程式自動匯入執行)。

參考來源:
痞客邦 CONY的世界 什麼是Library(函式庫,大陸稱庫)
摩刻部落 一個呆子的網站 基礎程式設計(20)-套件與API
Simple API、Method和Library是什麼東西和關係?
Corner Hack [Dev] IDE, API, SDK, Library 基本術語解釋
學長
[英](語言跟我一樣易卡關者,前方高能注意!!@o@)
Quora What is the difference between an API, a library and a framework?
Onetrail API, Library and Framework. What’s the difference?

巨集(Macro):

  根據一系列預定義的規則替換一定的文字模式。將一系列的的操作自訂為一個步驟(制定操作程序),讓應用程式來「記住」這些操作以及順序。必較像是這隻程式執行前的" 暖身準備 "。

參考資料:維基百科,自由的百科全書 - Wikipedia  巨集

平台(Platform):

  指在電腦裡讓軟體執行的系統環境,包括硬體環境和軟體環境而程式或軟體就是在這上面執行的。

參考資料:維基百科,自由的百科全書 - Wikipedia  系統平台

插件/外掛、(Plug-in、Plugin、add-in、addin、add-on、addon)、擴充套件(Extension):

   在程式裡,針對功能上進行修改或者增加,而差別在於,插件通常依賴於應用程序的用戶界面(修改),它的一切行為都不能超出已經嚴格定義好的界限。而擴充套件通常較沒有限制,也許還會擁有獨立的用戶界面(新增)。他們通常是用來減小應用程序的尺寸,並提供一些可選的功能。

參考資料:維基百科,自由的百科全書 - Wikipedia  插件

疊代器(Iterator):

  寫程式時,不免會應用到各種暫時儲存資料的物件 --- " 容器 "。然而,在這些裡要取出指定的部分資料時,勢必要" 挨家挨戶 "的走一遭來尋求結果(查水表?)。而這挨家挨戶的" 人 ",就是以一個移動式箭頭的存在,來進行所謂的" 走訪 ",以協助程式進行" 篩選資料 "。

沙箱、沙盒(Sandbox):

  源自於一種安全模型,可以將為信任的程式碼在裡頭進行測試,以防止直接對電腦造成損害,在這虛擬出來的環境裡頭,因為記憶體被獨立出來,存取權上也受限,對於檢測危害的程式碼有相當的助益。

參考資料:

維基百科,自由的百科全書 - Wikipedia  沙盒 (電腦安全)
什麼是沙箱?沙盒? Sandbox