【20200918】編程入門第八課奠蹬,對象(class)

1. 介紹

1.1 介紹

福哥今天給大家講的是入門課里的最后一堂課球凰,也是編程里的精髓——對象(class)

在c語言年代里沒有對象(class)這個結構體虐沥,所以使用c語言開發(fā)的程序不會太過復雜,在大型項目當中脏榆,眾多模塊(module)之間都會出現大量的同名函數猖毫,為了避免這些函數的名稱沖突,都會用非常長的函數名稱须喂,即:

returnValue moduleName_functionName (arguments)

這樣的命名方式是很不方便的吁断,首先的問題就是函數名稱太長了,寫起來非常的麻煩坞生,閱讀起來也是很不方便仔役;其次就是函數都是獨立的,我們不得不人為的把它們湊到一起恨胚,如果漏掉了一個骂因,就麻煩了;還有就是無法為模塊定義獨有的屬性赃泡,沒有一個共享內存空間寒波,無法實現同一模塊的不同實例的效果

后來的c++語言實現了對象(class)這個結構體,所有上面的一切問題都迎刃而解了升熊。我們可以定義一個對象(class)俄烁,這個對象擁有獨立的屬性(property)組和函數(method)組(在對象里稱為方法);對象可以被實例(instance)化级野,實例化的對象擁有獨立的共享內存空間页屠;對象實例化后可以做為一個普通變量來使用,可以幫助工程師設計更為復雜的模塊,開發(fā)更為大型的項目

2. 對象語法

對象是一個抽象的概念辰企,世間萬物都可以化為一個對象风纠,首先無論是人還是物都會有一個名字,這個可以用對象名稱(class name)表示牢贸;無論是人還是物都會有很多特征(屬性)竹观,這個可以用對象屬性(class property)表示;人或物會有一些能力潜索,可以做一些事情臭增,這個可以用對象方法(class method)表示;那么對象名稱竹习、對象屬性誊抛、對象方法就是一個對象的三要素,對象實例(instance)化之后就可以描述一個具體的人或物整陌,每個人的人體構造都是一樣的拗窃,但是每個人的性格是千差萬別的,長相也是不盡相同的蔓榄,這些特性和對象實例是一模一樣的

2.1 對象名稱

對象名稱就是對象的唯一ID并炮,對象名稱在整個程序里必須是唯一的

注意:命名空間可以實現相同對象名稱的設計,這個以后再講吧

2.2 對象屬性

對象屬性就是對象的特征甥郑,一個對象可以有無限多個屬性逃魄,每個屬性的名稱在對象內必須是唯一的

2.3 對象方法

對象方法就是對象的能力,一個對象可以有無限多個方法澜搅,每個方法的聲明在對象內必須是唯一的伍俘,相同名稱不同參數的方法稱為多態(tài)(polymorphism),在弱類型的語言里每個方法的名稱在對象內必須是唯一的勉躺,如:php語言

2.4 構造器

構造器是一個特殊的對象方法癌瘾,它沒有返回值,它的名稱和對象名稱完全一樣饵溅,它是對象的入口函數妨退,它會在對象實例化的時候自動執(zhí)行,它就是對象構造器

2.5 c/c++示例

class?programer?{

public:

????int?id;

????string?fullName;

????string?gender;

????int?age;


public:

????programer(int?id);

????void?setFullName(string?fullName);

????void?setGender(string?gender);

????void?setAge(int?age);

????void?printInfo();

};

programer::programer(int?id)?{

????this->id?=?id;

????fullName?=?"";

????gender?=?"";

????age?=?0;

}

void?programer::setFullName(string?fullName)?{

????this->fullName?=?fullName;

}

void?programer::setGender(string?gender)?{

????this->gender?=?gender;

}

void?programer::setAge(int?age)?{

????this->age?=?age;

}

void?programer::printInfo()?{

????cout?<<?endl;

????cout?<<?"("?<<?id?<<?")?程序員的信息"?<<?endl;

????cout?<<?"姓名:"?<<?fullName?<<?endl;

????cout?<<?"性別:"?<<?gender?<<?endl;

????cout?<<?"年齡:"?<<?age?<<?endl;

????cout?<<?endl;

}

int?main()

{

????programer?fuge(123);

????programer?student(321);

????fuge.setFullName("福哥");

????fuge.setGender("男");

????fuge.setAge(35);

????string?fullName,?gender;

????int?age;

????cout?<<?"請問你是誰蜕企?"?<<?endl;

????cin?>>?fullName;

????cout?<<?"請問你的性別"?<<?endl;

????cin?>>?gender;

????cout?<<?"請問你的年齡"?<<?endl;

????cin?>>?age;

????student.setFullName(fullName);

????student.setGender(gender);

????student.setAge(age);

????fuge.printInfo();

????student.printInfo();

????return?0;

}

2.6 java示例

class?programer?{

????private?Integer?id;

????private?String?fullName;

????private?String?gender;

????private?Integer?age;

????public?programer?(Integer?id){

????????this.id?=?id;

????????this.fullName?=?"";

????????this.gender?=?"";

????????this.age?=?0;

????}

????public?void?setFullName(String?fullName){

????????this.fullName?=?fullName;

????}

????public?void?setGender(String?gender){

????????this.gender?=?gender;

????}

????public?void?setAge(Integer?age){

????????this.age?=?age;

????}

????public?void?printInfo(){

????????System.out.println("");

????????System.out.println("("?+?id?+?")?程序員的信息");

????????System.out.println("姓名:"?+?fullName);

????????System.out.println("性別:"?+?gender);

????????System.out.println("年齡:"?+?age);

????????System.out.println("");

????}

}

public?class?TFJavaDemo{

????public?static?void?main(String[]?args){

????????programer?fuge?=?new?programer(123);

????????programer?student?=?new?programer(321);

????????fuge.setFullName("福哥");

????????fuge.setGender("男");

????????fuge.setAge(35);

????????String?fullName,?gender;

????????Integer?age;

????????byte[]?buff?=?new?byte[100];

????????int?rdLen;

????????try?{

????????????System.out.println("請問你是誰咬荷?");

????????????rdLen?=?System.in.read(buff);

????????????fullName?=?(new?String(buff,?0,?rdLen-2));

????????????System.out.println("請問你的性別");

????????????rdLen?=?System.in.read(buff);

????????????gender?=?(new?String(buff,0,rdLen-2));

????????????System.out.println("請問你的年齡");

????????????rdLen?=?System.in.read(buff);

????????????age?=?Integer.parseInt(new?String(buff,0,rdLen-2));

????????????student.setFullName(fullName);

????????????student.setGender(gender);

????????????student.setAge(age);

????????????fuge.printInfo();

????????????student.printInfo();

????????}

????????catch?(IOException?e){

????????????e.printStackTrace();

????????}

????}

}

2.7 php示例

class?programer?{

????private?$id;

????private?$fullName;

????private?$gender;

????private?$age;

????public?function?programer?($id){

????????$this->id?=?$id;

????????$this->fullName?=?"";

????????$this->gender?=?"";

????????$this->age?=?0;

????}

????public?function?setFullName($fullName){

????????$this->fullName?=?$fullName;

????}

????public?function?setGender($gender){

????????$this->gender?=?$gender;

????}

????public?function?setAge($age){

????????$this->age?=?$age;

????}

????public?function?printInfo(){

????????print?"\n";

????????print?"("?.?$this->id?.?")?程序員的信息\n";

????????print?"姓名:"?.?$this->fullName?.?"\n";

????????print?"性別:"?.?$this->gender?.?"\n";

????????print?"年齡:"?.?$this->age?.?"\n";

????????print?"\n";

????}

}

$fuge?=?new?programer(123);

$student?=?new?programer(321);

$fuge->setFullName("福哥");

$fuge->setGender("男");

$fuge->setAge(35);

$fo?=?fopen("php://stdin",?"r");

print?"請問你是誰?\n";

$fullName?=?fgets($fo,?100);

$fullName?=?substr($fullName,?0,?strlen($fullName)-2);

print?"請問你的性別\n";

$gender?=?fgets($fo,?100);

$gender?=?substr($gender,?0,?strlen($gender)-2);

print?"請問你的年齡\n";

$age?=?fgets($fo,?100);

$age?=?substr($age,?0,?strlen($age)-2);

$student->setFullName($fullName);

$student->setGender($gender);

$student->setAge($age);

$fuge->printInfo();

$student->printInfo();

3. 作用域

對象的作用域和函數一樣轻掩,在對象內部是一個獨立的作用域幸乒,內外都是完全隔絕的。

對象的每個函數(對象方法)也會是一個獨立的作用域唇牧,不過對象的每個屬性針對對象的每個函數又都是共享的

對象的屬性的共享特性就好像人的身體是一個整體罕扎,走路可以用到腳聚唐,跳躍也可以用到腳,吃東西需要用到嘴腔召,喝東西也需要用到嘴

4. OOP

OOP就是Object Oriented Programming的簡寫杆查,即面向對象編程。

面向對象編程需要具備一個能力宴咧,可以將項目當中的各種元素轉化為抽象的對象模型根灯,如果沒有這個能力,是無法編寫出基于OOP思想的對象編程代碼的掺栅,如果不能掌握OOP思想,就很難做出大型的項目

很多人從事編程多年纳猪,仍無法領悟OOP思想的精髓氧卧,因此一直無法參與高端開發(fā)工作,無法成為高級工程師氏堤,這個會成為工程師晉級的一個瓶頸

5. 總結

OOP是需要不斷地參與各種項目開發(fā)的過程中沙绝,通過實踐積累經驗,才能逐步提高的

如果你喜歡編程鼠锈,如果你領會了OOP的思想闪檬,那么恭喜你,你會寫出非常漂亮的的代碼购笆,你可以做出功能非常強大的程序粗悯,你會成為領導者

【20200918】編程入門第八課,對象(class) 第 1 頁 - 鬼谷子叔叔的主頁 - 同福網 - TONGFU.net

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末同欠,一起剝皮案震驚了整個濱河市样傍,隨后出現的幾起案子,更是在濱河造成了極大的恐慌铺遂,老刑警劉巖衫哥,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異襟锐,居然都是意外死亡撤逢,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進店門粮坞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蚊荣,“玉大人,你說我怎么就攤上這事捞蚂「狙海” “怎么了?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵姓迅,是天一觀的道長敲霍。 經常有香客問我俊马,道長,這世上最難降的妖魔是什么肩杈? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任柴我,我火速辦了婚禮,結果婚禮上扩然,老公的妹妹穿的比我還像新娘艘儒。我一直安慰自己,他們只是感情好夫偶,可當我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布界睁。 她就那樣靜靜地躺著,像睡著了一般兵拢。 火紅的嫁衣襯著肌膚如雪翻斟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天说铃,我揣著相機與錄音访惜,去河邊找鬼。 笑死腻扇,一個胖子當著我的面吹牛债热,可吹牛的內容都是我干的。 我是一名探鬼主播幼苛,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼窒篱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蚓峦?” 一聲冷哼從身側響起舌剂,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎暑椰,沒想到半個月后霍转,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡一汽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年避消,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片召夹。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡岩喷,死狀恐怖,靈堂內的尸體忽然破棺而出监憎,到底是詐尸還是另有隱情纱意,我是刑警寧澤,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布鲸阔,位于F島的核電站偷霉,受9級特大地震影響迄委,放射性物質發(fā)生泄漏。R本人自食惡果不足惜类少,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一叙身、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧硫狞,春花似錦信轿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至世剖,卻和暖如春定罢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背旁瘫。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留琼蚯,地道東北人酬凳。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像遭庶,于是被迫代替她去往敵國和親宁仔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內容