① 可視化編程
可視化編程,亦即可視化程序設計:以「所見即所得」的編程思想為原則,力圖實現編程工作的可視化,即隨時可以看到結果,程序與結果的調整同步
可視化編程是與傳統的編程方式相比而言的,這里的「可視」,指的是無須編程,僅通過直觀的操作方式即可完成界面的設計工作,是目前最好的Windows應用程序開發工具
可視化編程語言的特點主要表現在兩個方面:一是基於面向對象的思想,引入了控制項的概念和事件驅動;二是程序開發過程一般遵循以下步驟,即先進行界面的繪制工作,再基於事件編寫程序代碼,以響應滑鼠、鍵盤的各種動作
可視化編程十問1
什麼是可視化程序設計?可視化(Visual)程序設計是一種全新的程序設計方法,它主要是讓程序設計人員利用軟體本身所提供的各種控制項,像搭積木式地構造應用程序的各種界面
2
可視化程序設計有哪些優點?可視化程序設計最大的優點是設計人員可以不用編寫或只需編寫悔瞎則很少的程序代碼,就能完成應用程序的設計,這樣就能極大地提高設計人員的工作效率
3
能夠進行可視化程序設計的語言有哪些?能進行可視化程序設計的語言很多,比較常用的有微軟的VisualBasic、VisualC++、中文VisualFoxpro、Borland公司的Delphi等
4
可視化程序設計中有哪些基本概念?主要的幾個基本概念有表單、組件、屬性、事件、方法等
5
什麼是表單(Form)?表單是指進行程序設計時的窗口,我們主要是通過在表單中放置各種部件(如命令按鈕、復選框、單選框、滾動條等)來布置應用程序的運行界面
6
什麼是組件?所謂組件,就是組成程序運行界面的各種部件,如:命令按鈕、復選框、單選框、滾動條等
7
什麼是屬神慎性?屬性就是組件的性質
它說明組件在程序運行的過程中是如何顯示的、組件的大小是多少、顯示在何處、是否可見、是否有效8
屬性可以分成哪幾類?屬性可分成三類,設計屬性:是在進行設計時就可發揮作用的屬性;運行屬性:這是在程序運行過程中才發揮作用的屬性;只讀屬性:是一種只能查看而不能改變的屬性
9
什麼是事件?事件就是對一個組件的操作
如用滑鼠點擊一個命令按鈕,在這里,點擊滑鼠就稱為一個事件(Click事件)
10
什麼是方法?方法就是某個事件發生後要執行的具體操作,類似以前的程序
例如當我們用滑鼠單擊「退出」命令按鈕時,程序就會通過執行一條命令而結束運行,命令的執行過程就叫方法
面向對象程序設計1.歷史回顧1967年挪威計算中心的KistenNygaard和OleJohanDahl開發了Simula67語言,它提供了比子程序更高一級的抽象和封裝,引入了數據抽象和類的概念,它被認為是第一個面向對象語言
20世紀70年代初,PaloAlto研究中心的AlanKay所在的研究小組開發出Smalltalk語言,之後又開發出Smalltalk-80,Smalltalk-80被認為是最純正的面向對象語言,它對後來出現的面向對象語言,如Object-C,C,Self,Eiffl都產生了深遠的影響
隨著面向對象語言的出現,面向對象程序設計也就應運而生且得到迅速發展
之後,面向對象不斷向其他階段滲透,1980年GradyBooch提出了面向對象設計的概念,之後面向對象分析開始
1985年,第一個商用面向對象資料庫問世
1990年以來,面向對象分析、測試、度量和管理等研究都得到長足發展
實際上,「對象」和「對象的屬性」這樣的概念可以追溯到20世紀50年代初,它們首先出現於關於人工智慧的早期著作中
但是出現了面向對象語言之後,面向對象思想才得到了迅速的發展
過去的幾十年中,程序設計語言對抽象機制的支持程度不斷提高:從機器語言到匯編語言,到高級語言,直到面向對象語言
匯編語言出現後,程序員就避免了直接使用0-1,而是利用符號來表示機器指令,從而更方便地編寫程序;當程序規模繼續增長的時候,出現了Fortran、C、Pascal等高級語言,這些高級語言使得編寫復雜的程序變得容易,程序員們可以更好地對付日益增加的復雜性
但是,如果軟體系統達到一定規模,即使應用結構化程序設計方法,局勢仍將變得不可控制
作為一種降低復雜性的工具,面向對象語言產生了,面向對象程序設計也隨之產生
2.面向對象程序設計的基本概念面向對象程序設計中的概念主要包括:對象、類、數據抽象、繼承、動態綁定、數據封裝、多態性碧棚、消息傳遞
通過這些概念面向對象的思想得到了具體的體現
1)對象對象是運行期的基本實體,它是一個封裝了數據和操作這些數據的代碼的邏輯實體
2)類類是具有相同類型的對象的抽象
一個對象所包含的所有數據和代碼可以通過類來構造
3)封裝封裝是將數據和代碼捆綁到一起,避免了外界的干擾和不確定性
對象的某些數據和代碼可以是私有的,不能被外界訪問,以此實現對數據和代碼不同級別的訪問許可權
4)繼承繼承是讓某個類型的對象獲得另一個類型的對象的特徵
通過繼承可以實現代碼的重用:從已存在的類派生出的一個新類將自動具有原來那個類的特性,同時,它還可以擁有自己的新特性
5)多態多態是指不同事物具有不同表現形式的能力
多態機制使具有不同內部結構的對象可以共享相同的外部介面,通過這種方式減少代碼的復雜度
6)動態綁定綁定指的是將一個過程調用與相應代碼鏈接起來的行為
動態綁定是指與給定的過程調用相關聯的代碼只有在運行期才可知的一種綁定,它是多態實現的具體形式
7)消息傳遞對象之間需要相互溝通,溝通的途徑就是對象之間收發信息
消息內容包括接收消息的對象的標識,需要調用的函數的標識,以及必要的信息
消息傳遞的概念使得對現實世界的描述更容易
3.面向對象語言一個語言要稱為面向對象語言必須支持幾個主要面向對象的概念
根據支持程度的不同,通常所說的面向對象語言可以分成兩類:基於對象的語言,面向對象的語言
基於對象的語言僅支持類和對象,而面向對象的語言支持的概念包括:類與對象、繼承、多態
舉例來說,Ada就是一個典型的基於對象的語言,因為它不支持繼承、多態,此外其他基於對象的語言還有Alphard、CLU、Euclid、Mola
面向對象的語言中一部分是新發明的語言,如Smalltalk、Java,這些語言本身往往吸取了其他語言的精華,而又盡量剔除他們的不足,因此面向對象的特徵特別明顯,充滿了蓬勃的生機;另外一些則是對現有的語言進行改造,增加面向對象的特徵演化而來的
如由Pascal發展而來的ObjectPascal,由C發展而來的Objective-C,C,由Ada發展而來的Ada95等,這些語言保留著對原有語言的兼容,並不是純粹的面向對象語言,但由於其前身往往是有一定影響的語言,因此這些語言依然寶刀不老,在程序設計語言中佔有十分重要的地位
4.面向對象程序設計的優點面向對象出現以前,結構化程序設計是程序設計的主流,結構化程序設計又稱為面向過程的程序設計
在面向過程程序設計中,問題被看作一系列需要完成的任務,函數(在此泛指常式、函數、過程)用於完成這些任務,解決問題的焦點集中於函數
其中函數是面向過程的,即它關注如何根據規定的條件完成指定的任務
在多函數程序中,許多重要的數據被放置在全局數據區,這樣它們可以被所有的函數訪問
每個函數都可以具有它們自己的局部數據
下圖顯示了一個面向過程程序中函數和數據的關系
圖1面向過程程序設計中函數和數據的關系示例這種結構很容易造成全局數據在無意中被其他函數改動,因而程序的正確性不易保證
面向對象程序設計的出發點之一就是彌補面向過程程序設計中的一些缺點:對象是程序的基本元素,它將數據和操作緊密地連結在一起,並保護數據不會被外界的函數意外地改變
下圖顯示了一個面向對象程序中對象與函數和數據的關系
圖2面向對象程序設計中函數和數據的關系示例比較面向對象程序設計和面向過程程序設計,還可以得到面向對象程序設計的其他優點:1)數據抽象的概念可以在保持外部介面不變的情況下改變內部實現,從而減少甚至避免對外界的干擾;2)通過繼承大幅減少冗餘的代碼,並可以方便地擴展現有代碼,提高編碼效率,也減低了出錯概率,降低軟體維護的難度;3)結合面向對象分析、面向對象設計,允許將問題域中的對象直接映射到程序中,減少軟體開發過程中中間環節的轉換過程;4)通過對對象的辨別、劃分可以將軟體系統分割為若干相對為獨立的部分,在一定程度上更便於控制軟體復雜度;6)以對象為中心的設計可以幫助開發人員從靜態(屬性)和動態(方法)兩個方面把握問題,從而更好地實現系統;7)通過對象的聚合、聯合可以在保證封裝與抽象的原則下實現對象在內在結構以及外在功能上的擴充,從而實現對象由低到高的升級
面對對象的程序設計方法在數據輸入模塊內部設計中,採用面向對象的設計方法
[6]面向對象的基本概念如下:對象:對象是要研究的任何事物
從一本書到一家圖書館,單的整數到整數列龐大的資料庫、極其復雜的自動化工廠、太空梭都可看作對象,它不僅能表示有形的實體,也能表示無形的(抽象的)規則、計劃或事件
對象由數據(描述事物的屬性)和作用於數據的操作(體現事物的行為)構成一獨立整體
從程序設計者來看,對象是一個程序模塊,從用戶來看,對象為他們提供所希望的行為
在對內的操作通常稱為方法
類:類是對象的模板
即類是對一組有相同數據和相同操作的對象的定義,一個類所包含的方法和數據描述一組對象的共同屬性和行為
類是在對象之上的抽象,對象則是類的具體化,是類的實例
類可有其子類,也可有其它類,形成類層次結構
消息:消息是對象之間進行通信的一種規格說明
一般它由三部分組成:接收消息的對象、消息名及實際變元
面向對象主要特徵:封裝性:封裝是一種信息隱蔽技術,它體現於類的說明,是對象的重要特性
封裝使數據和加工該數據的方法(函數)封裝為一個整體,以實現獨立性很強的模塊,使得用戶只能見到對象的外特性(對象能接受哪些消息,具有那些處理能力),而對象的內特性(保存內部狀態的私有數據和實現加工能力的演算法)對用戶是隱蔽的
封裝的目的在於把對象的設計者和對象者的使用分開,使用者不必知曉行為實現的細節,只須用設計者提供的消息來訪問該對象
繼承性:繼承性是子類自動共享父類之間數據和方法的機制
它由類的派生功能體現
一個類直接繼承其它類的全部描述,同時可修改和擴充
繼承具有傳遞性
繼承分為單繼承(一個子類只有一父類)和多重繼承(一個類有多個父類)
類的對象是各自封閉的,如果沒繼承性機制,則類對象中數據、方法就會出現大量重復
繼承不僅支持系統的可重用性,而且還促進系統的可擴充性
多態性:對象根據所接收的消息而做出動作
同一消息為不同的對象接受時可產生完全不同的行動,這種現象稱為多態性
利用多態性用戶可發送一個通用的信息,而將所有的實現細節都留給接受消息的對象自行決定,如是,同一消息即可調用不同的方法
例如:Print消息被發送給一圖或表時調用的列印方法與將同樣的Print消息發送給一正文文件而調用的列印方法會完全不同
多態性的實現受到繼承性的支持,利用類繼承的層次關系,把具有通用功能的協議存放在類層次中盡可能高的地方,而將實現這一功能的不同方法置於較低層次,這樣,在這些低層次上生成的對象就能給通用消息以不同的響應
在OOPL中可通過在派生類中重定義基類函數(定義為重載函數或虛函數)來實現多態性
綜上可知,在面對對象方法中,對象和傳遞消息分別表現事物及事物間相互聯系的概念
類和繼承是是適應人們一般思維方式的描述範式
方法是允許作用於該類對象上的各種操作
這種對象、類、消息和方法的程序設計範式的基本點在於對象的封裝性和類的繼承性
通過封裝能將對象的定義和對象的實現分開,通過繼承能體現類與類之間的關系,以及由此帶來的動態聯編和實體的多態性,從而構成了面向對象的基本特徵
面向對象設計是一種把面向對象的思想應用於軟體開發過程中,指導開發活動的系統方法,是建立在「對象」概念基礎上的方法學
對象是由數據和容許的操作組成的封裝體,與客觀實體有直接對應關系,一個對象類定義了具有相似性質的一組對象
而每繼承性是對具有層次關系的類的屬性和操作進行共享的一種方式
所謂面向對象就是基於對象概念,以對象為中心,以類和繼承為構造機制,來認識、理解、刻畫客觀世界和設計、構建相應的軟體系統
按照BjarneSTroustRUP的說法,面向對象的編程範式:l決定你要的類;2給每個類提供完整的一組操作;3明確地使用繼承來表現共同點
由這個定義,我們可以看出:面向對象設計就是「根據需求決定所需的類、類的操作以及類之間關聯的過程」
面向對象設計方法的特點和面臨的問題面向對象設計方法以對象為基礎,利用特定的軟體工具直接完成從對象客體的描述到軟體結構之間的轉換
這是面向對象設計方法最主要的特點和成就
面向對象設計方法的應用解決了傳統結構化開發方法中客觀世界描述工具與軟體結構的不一致性問題,縮短了開發周期,解決了從分析和設計到軟體模塊結構之間多次轉換映射的繁雜過程,是一種很有發展前途的系統開發方法
但是同原型方法一樣,面向對象設計方法需要一定的軟體基礎支持才可以應用,另外在大型的MIS開發中如果不經自頂向下的整體劃分,而是一開始就自底向上的採用面向對象設計方法開發系統,同樣也會造成系統結構不合理、各部分關系失調等問題
所以面向對象設計方法和結構化方法目前仍是兩種在系統開發領域相互依存的、不可替代的方法
② tig — 讓 git 命令行可視化
tig 是一款優化 git 命令行的工具,使 git 命令行更加的便捷人性化 。如果用習慣了,會上癮。
在 Mac 上最簡單的方式是使用 Homebrew :
其他安裝方式請參考 這里
以下內容建議閱讀時在 repository 親手操作
安裝成功後,在 Repo 文件夾下,輸入 【 tig 】+ 【 Enter 】即可進入 tig 模式。此時展現在面前的將會是本地所有的 commit 記錄以及分支的演化。
【 j 】【 k 】可上下切換選中的行,【 Enter 】可分屏查看當前 commit 記錄詳情,【 l 】小寫的 L,全屏查看 commit 記錄。
【 r 】進入 refs view 模式扒沖,查看所有分支,使用 【 j/k 】上下切換, 【 Enter 】查看分支演化。
【 s 】進入 status view,效果同 git status 命令,會展示所有 Untracked 和 UnStaged 文件。 選中 Unstaged 的文件鍵入【禪如 u 】效果同 git add ,選中 staged 的文件鍵入 【 u 】效果同 git reset,即撤銷 add 操作。【 Enter 】查看分屏查看當前文件的修改記錄。
status view 模式下鍵入 【 C 】進入 vim 編輯器,【 i 】進入編輯模式,在第一行輸入 commit 信息,【 :x 】退出並保存。【 m 】查看 commit 記錄。
【 c 】進入 stash view 模式,全屏查看修改記錄,可配合 【 s 】 使用。
【 t 】進入 tree view 模式,git 目錄會以文件夾的形式展示。【 Enter】進入子目錄,【 , 】返回上一級目錄。
【 m 】進入 main view 查看當前分支的所有 commit 記錄,使用 【 j/k 】上下切換,【 回車 】可分屏查看 commit 詳情。同樣,【 j/k 】上下移動,【空格】翻頁。
main view 可以認為是主頁。
【 / 】輸入關鍵字可進行搜索。
【 R 】刷新當前頁面,可退出搜索的高亮狀態。
【 Q 】退出 tig。
【 h 】查看快捷鍵幫助。
tig 可以設置作用域,如果只想關注某個文件夾的修改記錄,可使用 【 tig 文件夾名】。
如果只想展示某一段時間的 commit 記錄, tig --after=「2018-01-01 --before="2018-05-12」 。如果希望不寫引號,可以使用 tig --after==May.10th 。
從以上的介紹來看,tig 更偏向於查看(view)。
上文快捷鍵其實是默認的配置,所以我們可以自定義。自定義文件在 ~/.tigrc 目錄,如果安裝完成後沒有這個文件,需自春襲殲行創建,並拷貝 系統配置 後進行修改。
例如,不喜歡【 t 】顯示的文件夾顏色,可以將 blue 改為 red。
tig 支持 bind 的語法,來實現自定義快捷鍵,映射到具體的 git 命令。bind status 意思是在 statsu view 模式下(【 s 】鍵進入)才會生效,P 的功能為 git push。
! 代表立即執行。
在 .tigrc 文件中:
代表 refs view 模式下,鍵入【 C 】checkout 分支,執行前會請求確認。
注意設置映射關系後需重啟終端。更多功能請自行挖掘。:)
如果對 git 的工作原理不是特別的熟悉,可以走一遍下面的教程,相信你會對 git 有更深刻的理解。
https://learngitbranching.js.org/
參考:
Manual · Tig - Text-mode interface for Git