1. 介紹
1.1 介紹
前面我們學(xué)習(xí)了編程的入門課程生闲,了解的編程語言的基本語法媳溺,知道編程語言的基本要素。
今天開始福哥開始給大家講編程的基礎(chǔ)知識(shí)碍讯,這個(gè)基礎(chǔ)知識(shí)是用來提高編程水平的知識(shí)褂删,基礎(chǔ)知識(shí)每種編程語言的差異會(huì)比較大,所以福哥在講解某一種編程語言的某一特性的時(shí)候冲茸,會(huì)標(biāo)明這種特性針對(duì)的是哪一種編程語言屯阀,只想學(xué)習(xí)某一種編程語言的童鞋可以有選擇的學(xué)習(xí)。
第一課是公共知識(shí)轴术,所以就沒有標(biāo)明是哪一種編程語言难衰,這一課講的主題是結(jié)構(gòu)(Struct),這是一個(gè)輕松的話題逗栽,了解結(jié)構(gòu)可以幫助我們樹立一個(gè)框架性的概念盖袭,對(duì)編寫各種級(jí)別的項(xiàng)目會(huì)有一個(gè)基本概念。
2. 結(jié)構(gòu)層級(jí)
結(jié)構(gòu)層級(jí)指的是在編程領(lǐng)域彼宠,小到一個(gè)函數(shù)鳄虱,大到一個(gè)解決方案,它們之間都是存在這一系列層級(jí)關(guān)系的凭峡,從大到小的順序是:
解決方案(Solution)拙已,針對(duì)一個(gè)大的需求給出的一整套解決方案,它可能是一個(gè)或多個(gè)項(xiàng)目工程組成
項(xiàng)目工程(Project)摧冀,針對(duì)一個(gè)特定的領(lǐng)域的一個(gè)獨(dú)立的程序或庫倍踪,它可能是一個(gè)或多個(gè)模塊組成
模塊(Module),針對(duì)一個(gè)具體的解決一個(gè)特定功能的需求的對(duì)象模型索昂,它可能是一個(gè)或多個(gè)對(duì)象組成
對(duì)象(Class)建车,針對(duì)一個(gè)具體的實(shí)體對(duì)象的定義,它包含這個(gè)實(shí)體對(duì)象的屬性組和方法組
函數(shù)(Function)椒惨,針對(duì)一個(gè)具體的行為的定義缤至,它是實(shí)現(xiàn)這個(gè)行為得到具體邏輯
3. 數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)指的是包含若干屬性的一個(gè) 獨(dú)立的數(shù)據(jù)模型,在c語言里可以使用struct定義數(shù)據(jù)結(jié)構(gòu)康谆,在c++語言里可以使用class定義數(shù)據(jù)結(jié)構(gòu)领斥,在java語言里也是使用class定義數(shù)據(jù)結(jié)構(gòu)错洁,在php語言里除了可以使用class定義數(shù)據(jù)結(jié)構(gòu)外,還可以使用php獨(dú)有的array來定義數(shù)據(jù)結(jié)構(gòu)戒突。
3.1 數(shù)據(jù)結(jié)構(gòu)和變量
數(shù)據(jù)結(jié)構(gòu)是一組變量的集合體屯碴,數(shù)據(jù)結(jié)構(gòu)的實(shí)例可以作為普通變量傳遞給函數(shù)使用,數(shù)據(jù)結(jié)構(gòu)比較變量的優(yōu)勢(shì)有很多膊存,諸如:
攜帶更多的變量导而,傳遞能力更強(qiáng)大
抽象實(shí)體,可以根據(jù)實(shí)體的屬性模擬定義抽象實(shí)體隔崎,這個(gè)是對(duì)象(class)的精髓
便于維護(hù)今艺,通過一個(gè)實(shí)例可以將一眾變量一起帶著走,這種特性使得編寫代碼變得很優(yōu)雅
3.2 數(shù)據(jù)結(jié)構(gòu)和對(duì)象
數(shù)據(jù)結(jié)構(gòu)在沒有對(duì)象的c語言是用struct定義的爵卒,在c++和java虚缎、php等支持對(duì)象的語言里和普通對(duì)象的區(qū)別就只有一條,就是作為數(shù)據(jù)結(jié)構(gòu)的對(duì)象是沒有任何方法定義的钓株,它只作為一組屬性的集合體存在实牡。
4. 實(shí)體對(duì)象
實(shí)體對(duì)象(Entity)是設(shè)計(jì)模式里的一個(gè)概念,這種設(shè)計(jì)模式倡導(dǎo)的是所有需要存儲(chǔ)的數(shù)據(jù)都要?dú)w類到一個(gè)實(shí)體對(duì)象里轴合,存儲(chǔ)數(shù)據(jù)的只能是實(shí)體對(duì)象创坞,讀取數(shù)據(jù)也只能從實(shí)體對(duì)象的屬性里獲取,這是OOP編程思想的思維受葛,是比較先進(jìn)的設(shè)計(jì)思想题涨。
4.1 c/c++示例
在c/c++里,大家更加習(xí)慣使用struct這種數(shù)據(jù)結(jié)構(gòu)語法定義實(shí)體對(duì)象
typedef?struct?T_TFUser?{
????int?userId;
????string?userName;
};
在c/c++里的struct就是一個(gè)類型总滩,我們可以通過這個(gè)struct聲明變量
4.2 java示例
在java里纲堵,實(shí)體對(duì)象會(huì)被放入entity包下面,并且使用setter/getter為實(shí)體對(duì)象增加讀寫能力
@Data
public?class?TFUser?{
????private?Integer?userId;
????private?String?userName;
}
在java里的entity就是一個(gè)class闰渔,我們可以通過這個(gè)class聲明變量
4.3 php示例
在php里席函,實(shí)體對(duì)象就是php的數(shù)組
$TFUser?=?array(
????'userId'=>35,
????'userName'=>"福哥"
);
4.4 python示例
在python里,實(shí)體對(duì)象就是dict(字典)
TFUser?=?{
????"userId":35,
????"userName":"福哥"
}
4.5 javascript示例
在javascript里澜建,實(shí)體對(duì)象就是object對(duì)象
var?TFUser?=?{
????userId:?0,
????userName:?"福哥"
};
5. 總結(jié)
了解了結(jié)構(gòu)層級(jí)向挖,就知道一個(gè)網(wǎng)站,一個(gè)軟件背后有多少代碼了炕舵,就可以大概估算出一個(gè)需求的工作量了,培養(yǎng)這個(gè)經(jīng)驗(yàn)對(duì)于評(píng)估項(xiàng)目復(fù)雜度跟畅,評(píng)估項(xiàng)目周期咽筋,是非常有幫助的。
理解數(shù)據(jù)結(jié)構(gòu)的意義徊件,熟練使用實(shí)體對(duì)象奸攻,有助于幫助我們?cè)O(shè)計(jì)我們的程序代碼結(jié)構(gòu)蒜危,在功能不斷更新迭代當(dāng)中也不會(huì)變得混亂不堪。
【20200919】編程基礎(chǔ)睹耐,結(jié)構(gòu)(Struct) 第 1 頁 - 鬼谷子叔叔的主頁 - 同福網(wǎng) - TONGFU.net