Objective-C 入門指南 - Encrypt 類別與 MVC 模式

接下來進入開發軟體的階段,最後會發展出一個如下的 GUI 程式




Xcode 中單一應用程式使用一個專案,單一專案設置所需要的類別 (class)



我們打算發展兩個專案,第一個專案 demo 設計 Encrypt 類別,它的主要功能是建立一個英文小寫字母的對換表格,藉由這個表格,我們可以對英文句子中的小寫英文字母進行對換,例如 "There is no spoon." 可能變成以下任一個
Tfqdq ki jo itooj.
Tcnan hf gl fqllg.
Tczmz dn ij nkjji.
Tgfsf pb ir barri.
Tdcpc my fo yxoof.


demo.m 便是用來測試 Encrypt 的程式檔案,這也是專案預設的檔名。


第二個專案除了加入 Encrypt 類別外,也發展一個使用者介面 (user interface) ,也就是給使用者輕鬆操作的圖形使用者介面 (graphical user interface, GUI) 。 Xcode 發展 GUI 的模式為 MVC (Model-View-Controller) , Encrypt 類別就是 MVC 中的 M


至於 MVC 中的 V ,也就是 GUI 的外觀,這需要利用 Xcode 裡的 Interface Builder ,屆時我們會再詳細說明 Interface Builder 的操作方式。


我們的 GUI 有兩個可供輸入的文字欄位 (textfield) ,其中一個我們作為輸出的顯示訊息之用,另有三個標籤 (label) ,顯示文字的提示訊息,七個按鈕 (button) ,提供「新建」、「開啟」、「儲存」 Encrypt 物件,與「編碼」、「解碼」所輸入的英文句子,「清除」所有輸入欄位,以及「拷貝」輸出結果等的功能。


無論文字欄位、標籤、按鈕等都被稱為 GUI 的元件,要使元件互有關係,像是按下 Encode 後便將 Input: 後的文字欄位中的文字進行編碼,結果顯示在 something happened 的標籤裡,這就是 MVC 中的 C ,我們將另外設計 EncryptController 類別,來設置 GUI 的功能。


現在我們先來看看所有功能的核心,也就是 Encrypt 類別,我們的目的是,建立一個小寫英文字母的轉換表格,然後編碼、解碼都可直接依據這個表格。首先,我們先來看看建立表格的數學公式
y = a * x + b
m = y % n
r = m + diff


我們的概念很簡單,假設 x 為字元的原始編碼, ASCII 編碼中 'a' 為 97 ,其後依次遞增 1 ,然後我們將 x 乘上變數 (variable) a , 再加上變數 b ,兩者均是 0 到 9 的隨機整數,這樣便得到 y 的值。


然後將 y 除以 n 取得餘數 m , n 為所要轉換的字元數量,英文小寫字母共有 26 個,所以這裡 n 等於 26 ,因此 m 等於 0 到 25 之間的整數值。最後將 m 加上 diff , diff 也就是編碼系統的差值,由於 ASCII 中 'a' 為 97 ,所以這裡 diff 要以 97 代入。


因此,餘數 0 的字元會替換成 'a' ,餘數 1 的字元會被替換成 'b' ,餘數 2 的字元會被替換成 'c' ,餘下 23 個字元類推。這樣的計算需要進行 n 次,也就是 26 次,我們最後得到一組餘數與相對應字元的表格,這就是我們需要的表格了。


重複 n 次,我們需要一個迴圈 (loop) ,由於重複次數確定,因此 for 迴圈 (for loop) 很適合,那我們要用什麼東西來儲存這個表格呢?嗯, Cocoa 中有許多的資料結構 (data structure) ,可以依資料特性有效率的處理資料,這裡,我們利用 NSMutableArray 就可以了。


NSMutableArray 為可變的 (mutable) NSArray ,這裡,我們將會用 NSArray 先做出英文字母表,再由英文字母表製作我們需要的密碼表。


上一個 Demo 類別,我們把介面 @interface 與實作 @inplementation 寫在同一個檔案 classdemo.m 之中,雖然這是可行的,但是 Objective-C 預設要把介面與實作分開唷!



中英文術語對照
類別class
使用者介面user interface
圖形使用者介面graphical user interface, GUI
文字欄位textfield
標籤label
按鈕button
變數variable
迴圈loop
for 迴圈for loop
資料結構data structure
可變的mutable


您可以繼續參考
軟體開發


相關目錄
Objective-C 入門指南
Objective-C 教材
首頁



參考資料
Learning Objective-C: A Primer
The Objective-C Programming Language
Cocoa Fundamentals Guide
Coding Guidelines for Cocoa
Advanced Memory Management Programming Guide
Archives and Serializations Programming Guide

沒有留言: