1. 閒話程式設計
什麼是程式設計,大部分程式語言有哪些特點,我想對於很多第一次接觸程式設計婦女同志來說是懵逼的,別急,且聽我一一道來。
先來看一個結構
- 語言層面
- 資料型別與運算子
- 變數
- 順序結構
- 選擇
- 迴圈
- 函式
- 自定義型別
- 繼承
- 多型
- 系統層面
- 多執行緒
- I/O互動
- GUI
以上的內容,對於初學程式設計的同志來說我覺得夠用了。從上面兩個分類可以分成語言層面和系統層面,與此同時,我們基本可以劃分兩大類書籍,
- 一類只講語言本身
- 另一類是用該語言與作業系統互動。
1.1 語言層面
- 資料型別
對於從語言層面來說,首先都會講一個資料型別,什麼是資料型別,比如我們數學裡學的整數,小數(浮點數),布林型別(YES/NO)字串型別;用這些數幹什麼呢?是用來做一些運算,包括“加、減、乘、除、取餘數、判斷是非,求交、求並”等等。
- 變數 變數拿來幹什麼?是用來儲存一個值,不好解釋,上例子。
# python
a = 3 # 把3賦值給a,a現在的值是3
b = 4 # 把4賦值給b,b現在的值是4
c = a + b # 把a + b的值賦值給c,就是c = 3 + 4,即c現在的值是7
print c # 列印c
複製程式碼
其實變數就是用來存資料的,在程式設計中的“=”不是“等號”,叫“賦值”號,真正的“等號”這麼寫“==”;
// C++
int a = 3;
bool b = true;
char *str = "hello wrold";
float c = 3.0f;
複製程式碼
# Python
a = 3
b = True
c = 0.2
d = "hello world"
複製程式碼
我們可以看到,對於C++ 來說,我們必須要先告訴編譯器,我們宣告得的變數是什麼型別,但是Python不用,直接a = 3就可以了用了,而不用int a = 3;Python的直譯器會根據你給變數賦值的型別來推匯出變數a的型別。
- 順序、選擇、和迴圈
一段程式碼怎麼執行,是從上向下執行,如果遇到選擇就會根據條件選擇一條分叉繼續執行,如果遇到迴圈就在迴圈條件一直迴圈執行。其實只要實現了順序,選擇和迴圈,就能實現人類所有的邏輯,也就是說,你的任何想法都能實現,這個特性我們稱之為:圖靈完備。
- 函式
函式的出現是把一些通用的功能放在一起,每次用的時候用一下,比如說,你要洗衣服,你不能每次弄一堆鐵皮,一個發電機做一個臨時的洗衣機,然後洗一次,這個洗衣機就廢了。我們需要複用,就是這次能用,下次也能用,我能用,我拿給別人也能用,正是因為有了複用的概念,所以才出現了函式,有了函式我們覺得這個粒度還是太小了,我們需要一些更大的模組,所以有了自定義型別,自定義型別裡定義了一堆堆屬性和行為,屬性就是變數,比如年齡、性別。行為就是一對函式,來描述吃喝玩樂飛簷走壁之類的。
- 自定義型別
為什麼有自定義型別?因為目前給的型別不夠用,在C語言裡會有結構體,物件導向流行之後,我們開始說Class(類)。類其實就是自定義型別,比如人是一個自定義型別,鳥,車、馬、動物。總之現實生活中天上飛的、地上跑的,每個東西都是有型別的。
那麼沒有自定義型別可以嗎?我覺得可能可以,但是有了自定義型別以後,很多事情變得很自然,理解起來很容易,所以有了理解上的需求,所以自定義型別也應運而生。
- 繼承 這是兩個物件導向裡的概念,什麼叫物件導向,就是萬物皆物件。繼承是什麼意思,是一種“is-a”的關係,比如說:金絲猴是一種猴,草泥馬是一種駝(羊駝)、航空母艦是一種船、流氓是一種人。這都是繼承關係,繼承了什麼呢。
比如說猴子都有尾巴,那金絲猴必定有尾巴,猴子作為金絲猴的父類或是基類,一定有猴子與生俱來的特點。而金絲猴也有一些自己的本身的特點,比如毛是金色的。
轉化成程式語言來說我們通過一個類圖來展現一下:
這是一個類圖,怎麼看的,箭頭三角指的是父類、箭頭尾端的是子類。
這個例子可能也不太合理,但將就看吧,我也懶得想了。Golden Monkey是金絲猴,macaque是獼猴; 我們都知道他們都是猴,都具備猴子的特性,比如:有尾巴、有年齡,都有吃、跳、爬樹的行為,這是他們作為猴子的共性。但是他們也有個性,就是金絲猴是金色的,獼猴是灰色的。
- 多型 有繼承才有多型,沒有繼承肯定沒有多型的概念,多型是用父類做指代,比如你說有個人在寫作業,我問你這個人是誰,你說李四,就表示李四在寫作業,你說這個人是張三,那就是張三在寫作業。
舉個例子吧
# 虛擬碼
猴子 a = create("金絲猴");
a.eat();
猴子 b = create("獼猴");
b.eat();
複製程式碼
這段程式碼什麼意思,就是有個猴子a,然後明確告訴你它是個金絲猴,那這個猴子吃,其實就是金絲猴在吃,對於b呢就是獼猴在吃。
所以說多型有什麼用,就是當我們有很多猴子吃飯,或人寫作業這種事要處理的時候,我們就可以一直用人做作業來描述,只需要換這個人和實際人之間的對映關係就好了,比如說當前這個人是張三,當前這個人是李四。
1.2 系統層面
關於系統層面,不想講的太多,怕各位女同志消化不了,簡單說說吧; 你熟悉了程式語言之後,你總想寫點好玩的東西吧,你總不能都寫一些算閏年、算最大值、求和這種無聊的程式碼,那你要怎麼才能玩出花呢?
你是不是想寫一個帶圖形介面(GUI)的程式,你是不是想寫一個能網路通訊的程式(I/O)。這都會涉及到多執行緒的概念。
- 多執行緒 啥叫多執行緒,理解多執行緒先得知道CPU怎麼工作的,CPU是一個處理器,每隔一段時間就會處理一個任務。比如有個任務佇列:吃飯、打遊戲、喝水、聊天。
然後CPU有個叫分時的概念,就比如把一分鐘分成了60秒,第一秒:吃飯、第二秒:打遊戲、第三秒:喝水、第四秒:聊天、第五秒:吃飯、第六秒:打遊戲、第七秒:喝水、第八秒:聊天 。。。
你將看到一個什麼樣的結果:你感覺吃飯、打遊戲、喝水、聊天是同時進行的。如果把這個時間粒度從一秒縮減到一毫秒,你更加感覺這四件事是同時的。所以天下武功,唯快不破,就是快到讓你反應不過,以為是同時發生的,這就是為什麼你聊天的時候能聽歌、聽歌的時候能上網,什麼事都不耽誤。而每一個人任務我們目前粗淺的認為是在一個執行緒裡執行的,而通常程式啟動都會有第一個執行緒,我們稱之為主執行緒、對於圖形類程式來說,這個主執行緒是GUI(跟顯示有關的)執行緒,其他的執行緒我們可以稱之為:“後臺執行緒”,就是俗稱的跑在後臺的執行緒。
好了,說了這麼多的廢話,這篇文章的目的主要是讓你們在程式設計整體上建立一個概念,所有的程式語言,不管是C Java Python C# 都會有這些共性,當然想繼承裡提到的,他們也有他們自己的個性。ok,下一章,我們開始從Python的資料型別開始講起。