phpoop教程,php最新教程

本文目錄一覽:

PHP程序員要掌握的知識以及相關書籍

我認為,首先,要想成為一個程序員,C或者C++或者JAVA是必須選擇一門掌握的,因為其中的編程思想和編程方法和這些語言所具有的廣大使用群和庫LIB是今後學習其他語言的巨大幫助。

其次,PHP是作為網頁後台語言存在的,那麼要想做後台,就要把前台的HTML,CSS,JS,flash,甚至是photoshop都要玩通。後台的話,需要補一下資料庫和LINUX的知識。

最後推薦一些入門到中級的網站

視頻PHP100出的教學視頻,兄弟連-電驢上有 出的教學視頻

這兩個視頻都有對應的書。

另外,網上可以下載到明日科技 這個團隊出版的書籍 都配有光碟 光碟裡邊有不同功能模塊(例如博客系統、商城系統、OA系統)的源碼,多讀這些源碼,對編程幫助很大。

再到高級就是大數據存儲、網路優化的東西了吧,我的水平還沒接觸到,你加油吧~

php怎麼方法重載

php面向對象(OOP)編程完全教程:12.重載新的方法

在學習PHP 這種語言中你會發現, PHP中的方法是不能重載的, 所謂的方法重載就是定義相同的方法名,通過「參數的個數「不同或「參數的類型「不同,來訪問我們的相同方法名的不同方法。但是因為PHP是弱類型的語言, 所以在方法的參數中本身就可以接收不同類型的數據,又因為PHP的方法可以接收不定個數的參數,所以通過傳遞不同個數的參數調用不相同方法名的不同方法也是不成立的。所以在PHP裡面沒有方法重載。不能重載也就是在你的項目中不能定義相同方法名的方法。另外,因為PHP沒有名子空間的概念,在同一個頁面和被包含的頁面中不能定義相同名稱的方法, 也不能定義和PHP給我提供的方法的方法重名,當然在同一個類中也不能定義相同名稱的方法。

我們這裡所指的重載新的方法所指的是什麼呢?其實我們所說的重載新的方法就是子類覆蓋父類的已有的方法,那為什麼要這麼做呢?父類的方法不是可以繼承過來直接用嗎?但有一些情況是我們必須要覆蓋的,比如說我們前面提到過的例子裡面, 「Person」這個人類裡面有一個「說話」的方法,所有繼承「Person」類的子類都是可以「說話」的, 我們「Student」類就是「Person」類的子類,所以「Student」的實例就可以「說話「了, 但是人類裡面「說話」的方法裡面說出的是「Person」類裡面的屬性, 而「Student」類對「Person」類進行了擴展,又擴展出了幾個新的屬性,如果使用繼承過來的「say()」說話方法的話,只能說出從「Person」類繼承過來的那些屬性,那麼新擴展的那些屬性使用這個繼承過來的「say()」的方法就說不出來了,那有的人就問了,我在「Student」這個子類中再定義一個新的方法用於說話,說出子類裡面所有的屬性不就行了嗎?一定不要這麼做, 從抽象的角度來講, 一個「學生」不能有兩種「說話」的方法,就算你定義了兩個不同的說話的方法,可以實現你想要的功能,被繼承過來的那個「說話「方法可能沒有機會用到了,而且是繼承過來的你也刪不掉。這個時候我們就要用到覆蓋了。

雖然說在PHP裡面不能定義同名的方法, 但是在父子關係的兩個類中,我們可以在子類中定義和父類同名的方法,這樣就把父類中繼承過來的方法覆蓋掉了。

代碼

?

//定義一個”人”類做為父類

class Person

{

//下面是人的成員屬性

var $name; //人的名子

var $sex; //人的性別

var $age; //人的年齡

//定義一個構造方法參數為屬性姓名$name、性別$sex和年齡$age進行賦值

function __construct($name, $sex, $age)

{

$this-name=$name;

$this-sex=$sex;

$this-age=$age;

}

//這個人可以說話的方法, 說出自己的屬性

function say()

{

echo “我的名子叫:”.$this-name.” 性別:”.$this-sex.” 我的年齡是:”.$this-age;

}

}

class Student extends Person

{

var $school; //學生所在學校的屬性

//這個學生學習的方法

function study()

{

echo “我的名子叫:”.$this-name.” 我正在”.$this-school.” 學習”;

}

//這個學性可以說話的方法, 說出自己所有的屬性,覆蓋了父類的同名方法

function say()

{

echo “我的名子叫:”.$this-name.” 性別:”.$this-sex.” 我的年齡是:”.$this-age.”我在”.$this-school.”上學;

}

}

?

上面的例子, 我們就在「Student」子類里覆蓋了繼承父類裡面的」say()」的方法,通過覆蓋我們就實現了對「方法」擴展。

但是,像這樣做雖然解決了我們上面說的問題,但是在實際開發中,一個方法不可能就一條代碼或是幾條代碼,比如說「Person」類裡面的「say()」方法有裡面有100條代碼,如果我們想對這個方法覆蓋保留原有的功能外加上一點點功能,就要把原有的100條代碼重寫一次, 再加上擴展的幾條代碼,這還算是好的,而有的情況,父類中的方法是看不見原代碼的,這個時候你怎麼去重寫原有的代碼呢?我們也有解決的辦法,就是在子類這個方法中可以調用到父類中被覆蓋的方法, 也就是把被覆蓋的方法原有的功能拿過來再加上自己的一點功能,可以通過兩種方法實現在子類的方法中調用父類被覆蓋的方法:

一種是使用父類的「類名::「來調用父類中被覆蓋的方法;

一種是使用「parent::」的方試來調用父類中被覆蓋的方法;

代碼

class Student extends Person

{

var $school; //學生所在學校的屬性

//這個學生學習的方法

function study()

{

echo “我的名子叫:”.$this-name.” 我正在”.$this-school.” 學習”;

}

//這個學性可以說話的方法, 說出自己所有的屬性,覆蓋了父類的同名方法

function say()

{

//使用父類的”類名::”來調用父類中被覆蓋的方法;

// Person::say();

//或者使用”parent::”的方試來調用父類中被覆蓋的方法;

parent::say();

//加上一點自己的功能

echo “我的年齡是:”.$this-age.”我在”.$this-school.”上學.”;

}

}

現在用兩種方式都可以訪問到父類中被覆蓋的方法,我們選那種方式最好呢?用戶可能會發現自己寫的代碼訪問了父類的變數和函數。如果子類非常精鍊或者父類非常專業化的時候尤其是這樣。 不要用代碼中父類文字上的名字,應該用特殊的名字 parent,它指的就是子類在 extends 聲明中所指的父類的名字。這樣做可以避免在多個地方使用父類的名字。如果繼承樹在實現的過程中要修改,只要簡單地修改類中 extends 聲明的部分。

同樣,構造方法在子類中如果沒有聲明的話,也可以使用父類中的構造方法,如果子類中重新定義了一個構造方法也會覆蓋掉父類中的構造方法,如果想使用新的構造方法為所有屬性賦值也可以用同樣的方式。

代碼

class Student extends Person

{

var $school; //學生所在學校的屬性

function __construct($name, $sex, $age, $school)

{

//使用父類中的方法為原有的屬性賦值

parent::__construct($name, $sex, $age);

$this-school=$school;

}

//這個學生學習的方法

function study()

{

echo “我的名子叫:”.$this-name.” 我正在”.$this-school.” 學習”;

}

//這個人可以說話的方法, 說出自己的屬性

function say()

{

parent::say();

//加上一點自己的功能

echo “我的年齡是:”.$this-age.”我在”.$this-school.”上學.”;

}

}

PHP開發怎麼學習?PHP學習有沒有什麼方法?

一、學前準備

1、建議首先要對網站有個整體的認識,對做網站需要學習的知識要有個認識,從而確定自己的學習方向,不要學一半,又覺得自己似乎不適合學這個,而半途改道,這樣很浪費時間,也不是學技術的人該有的心態。

2、PHP是什麼網上有很多資料這裡不多說了,自己一定要好好看看。由於它是開源的可以從一些網站上下載很多源碼,甚至整站源碼。但是如果你想要學的好的話,很多東西東西都是自己設計,而不是二次開發。

3、強調一下php並不是想網上一些人說的那樣簡單,它只是語法簡單,深入還是要努力。

二、學習順序

(1)熟悉HTML/CSS/JS等網頁基本元素

(2)理解動態語言的概念,運做機制,熟悉PHP語法

(3)學習如何將PHP與HTML結合起來完成簡單動態頁面

(4)接觸MYSQL,開始設計資料庫程序,學會基本對資料庫的操作

(5)學會一個模版(建議是smarty),會話控制session和cookie,ajax

(6)繼續深入學會怎麼設計一個優秀的資料庫

三、學習方法總結

1, 學習資料:一本好的書籍+配套的視頻+幾個常用的網站

2, 開發工具:記事本,eclipse,Zend Studio 。

學習階段可以使用記事本,但是它的開發效率低,開發的時候要用到其他開發工具,eclipse,Zend

Studio是兩款最常用的工具。Eclipse是完全免費的產品,Zend

Studio(是一款集成開發軟體)是收費,但是它的破解方法很簡單。當然還有其他的開發軟體,自己可以挑選一個適合自己的。

3, 剛開始學習的時候基本上都會要學習lamp或者是wamp的環境的搭建,搭建環境的過程不是很多,但是可能會遇到很多問題(也可能你運氣好一次搭建好),千萬不要灰心,一定會解決的。

4, 在學習php的前期雖然用不到那麼多資料庫的知識,但是懂得怎麼使用它是很有必要的。等你可以開發網站後,設計一個好的資料庫就會成為一個成功的網站關鍵。

5, 在學習的過程中還要準備各種開發手冊,php手冊,mysql手冊,以及一些框架的手冊。

6, php是一種後台語言,但是在學習後台之前還需要學習前台語言,DIV+CSS,HTML,JavaScript,以及實現非同步傳輸的ajax。

7, 學習ajax基本上是必須,但是學習它之前最好學習了javascript和xml,這樣才能從本質上了解原理。

8,有很多軟體專門用來管理和設計資料庫,這個很方便但是你一定要懂得sql語言,才能更好的設計資料庫,以及在php中用對資料庫進行相關的操作。

9,eclipse默認是不能開發php的,需要你對它進行擴展。擴展後要安裝Xdebugger或者是Zend_Debugger,安裝以後才能進行調試,調試和java調試基本一樣。

10,在學習php的過程中一定會遇到很多問題,你一定會去查找各種資料或者是別人,但是很有可能你下次遇到還是不懂,所以這就需要你要把遇到過的問題和解決方法記錄下來。

學習IT類,不論是哪一類不能僅靠理論知識,實戰和項目(也就是多練習)是重點!

php新手如何入門

PHP的背景恐怕就不用贅言了,我相信大家選擇一種語言,並不是看它的背景和悠久歷史,更重要的是看它的實用性,華而不實的語言哪怕是再輝煌的歷史,也畢將步向沒落,可喜的是PHP經受住了考驗,也因此,它確實是一種值得學習的語言。

一直是聽從別人的經驗長大的,也因此在前輩們的經驗里讓少走了許多的彎路,更快的步入了正規,在此向那些我至盡不知道其名字的前輩們道聲謝謝,在的眼裡, 幫助不分大小,只要是幫助,總會讓的心裡暖融融的,我想,前輩們幫助我,並不是為了得到我的一句謝謝,更多的是出於一種責任感和對的期望,所以我想,只有 學好PHP,才能對得起前輩們的汗水。

正如我所說的,也終於感覺到了一種責任感,不知道自己的經驗到底能幫助新手多少,但是明白,現在到了履行責任的時候了,我有必要把自己的經驗告訴給所有希望學好PHP的人,只有這樣才能讓中國的PHP不斷的進步,不斷的發展,在世界上佔據一席之地。

學習PHP的這段期間,感覺國內的PHP環境越來越成熟,規範也在逐漸的健全,PHPCHINA的成立,標誌著與官方直接掛鉤的PHP機構在中國正式落戶了,在此獻上遲到的掌聲!

好的,切入正題:

我想在講述自己的學習方式前,對那些期望能從我的文章中獲得有用信息的人說一句心裡話:

的文章不會對您的學習起到實質性的作用,您能否成功,還得靠自己的,堅持,堅持,再堅持,就是步入成功的不二法門。

我先把我自己學習PHP的過程做一下概括:

(1)熟悉HTML/CSS/JS等網頁基本元素,完成階段可自行製作完整的網頁,對元素屬性達到熟悉程度

(2)理解動態語言的概念,運做機制,熟悉PHP語法

(3)學習如何將PHP與HTML結合起來完成簡單動態頁面

(4)接觸MYSQL,開始設計資料庫程序

(5)不斷鞏固,摸透大部分PHP常用函數,並可理解OOP,MYSQL優化,以及模板

(6)完成一個功能齊全的動態站點

我的這套線路可能跟許多學習PHP的愛好者不謀而合,這也算是一個循序漸進的學習過程,不過新手不要看到上面的概括就以為學習蠻簡單的,在此不得不對您稍微潑一下冷水,任何東西其實都不簡單,即使是小吃部的燒餅也不是一下子就會做成的。

我先解釋一下我的學習思路。

首先,理解網站這一概念之後不難看出,任何網站都是由網頁組成的,也就是說想完成網站,必須先學會做網頁,因此必須要掌握了HTML,才能為今後製作網站打下基礎。

在學習HTML中我想邊學邊做是最有效的方式,當然這一方式對於學習PHP同樣是最有效的。

HTML中的任何元素都要親自實踐,只有明白了什麼元素會起到什麼效果之後,你才會記憶深刻,而一味的啃書,絕對是不行的,我想大部分新手之所以覺得概念難學,大部分是一個字「懶」,懶是阻止進步的最大敵人,所以克服掉懶的習慣,才能更快的學好一樣東西。

也許您在學習PHP的時候只想儘快的開發一個網站,也就會想我做網站,幹嘛要學什麼網頁這些小兒科?不難看出,眼高手低的新手不在少數,這種思想無疑於建造空中樓閣,你不建地基,何來的房頂呢?

OK,掌握靜態網頁的製作技術是學習開發網站的先決條件,這一點就講到這裡,因為這篇文章不是教程文章,也就不對技術進行深入的刨析了。

我假設你目前已經可以完成一個靜態頁面了,當然,做的好看難看是另外一說,的第一個網頁也沒好看到哪去,但是「孩子」再丑,咱們做「爹媽」的也不能嫌棄不是?這畢竟是咱的成果。

那麼咱們就開始學習動態語言的概念吧,剛一接觸動態語言,可能很多人都會蒙了,怎麼這亂七八糟的東西,在網頁里顯示的時候卻是另外一碼事?其實這並不算亂 七八糟,你寫的HTML代碼不也一樣是一堆堆的字元嗎?畢竟,代碼並不是作為直接輸出的,而是經過處理的,說白了,HTML是經過HTML解析器,而 PHP當然也就通過PHP解析器了,跟學習HTML一樣的道理,想讓任何的解析器完成操作,就必須使用它們專用的語法結構,所以PHP長相奇怪也就不足為 奇了。

對於PHP的理解是新手最難邁過的一道門檻,不過你應該感到幸運的是PHP已經最大極限的為了新手而努力了,如果你學過其他的語言,也許會覺得PHP的確相當的簡單,但是如果你之前什麼都沒學過,那麼阿彌陀佛,硬著頭皮琢磨吧。

書過三遍自然熟,這個簡單的道理告訴我們,即使你理解不了PHP,但是也必須先跟它混個臉熟,看,一遍遍的看,看的同時一邊琢磨,一邊按照它所教的打代碼,即使你搞不清楚那些代碼到底是幹嘛的,但是起碼你應該找找感覺。

在一段掙扎之後,聰明的你,顯然已經逐漸的開悟了,慢慢的理解了編程的概念,那麼祝賀你,你已經邁出了成功的第一步。

搞清楚HTML和PHP的概念,那麼PHP和HTML混合編程應該不成問題,在這期間,你完全可以讓PHP給你算算一加一等於幾,然後在瀏覽器輸出,不要 覺得幼稚,這的確是跟阿波羅登月一樣,你打的是一小段代碼,但是對於你的編程之路,可是邁出了一大步啊!興奮吧?但是不得不再給你潑點冷水,您還是菜鳥一 個。

高興一段時間就必須繼續努力了,接下來就是學習資料庫了,MYSQL可算是PHP的黃金搭檔了,不過,雖然話是這麼說,你也可能恨不得把MYSQL給生吞活剝了,因為這一行一列的東東簡直讓自己頭暈目眩。

頭暈歸頭暈,目眩歸目眩,你不可能吃飯的時候咬了自己一下舌頭就從此不吃飯了不是?放下畏懼,繼續努力,咱們是來征服它的,而不是被它征服的,振奮起來吧同志。

在一番搏鬥之後,你終於理解了資料庫的概念,而且讓你興奮不已的是你終於可以通過PHP來連接資料庫了,這期間你是怎麼學會的,我們不去考證了,但是事實證明,你已經可以了。

學會了PHP和資料庫的你,無疑是左手拿著MOTOLOLA右手拿著NOKIA,要多瀟洒,有多瀟洒,哈哈,終於學會了,但是可能這個時候,又會有人不經意的拍拍肩膀對你說:哥們,別高興的太早,你還是菜鳥,離學會還差著一大截呢!

等到你發奮努力的學會了用PHP成功的插入,刪除,更新數據的時候,顯然,你已經距離成功指日可待了。

這個時候的你也許是這種狀態:

你會HTML嗎?會,我能編好幾個大表格排板的網頁啦!

你會PHP嗎?會,我會把一加一的運算寫在函數里,然後調用啦!

你會MYSQL嗎?會,我會把我的信息在資料庫里插入刪除啦

那,接下來你該怎麼做呢?我覺得,小試一下身手,大概是沒問題了,那麼交給你個任務,做個留言本吧,這和HELLO WORLD有一比啊!^_^,同是新手面臨的第一道關。

花了一段時間,你終於學會把表單的數據插入資料庫,然後顯示出來了,應該說一個程序的雛形已經誕生了。

但是,你可能瞅瞅東,看看西,人家這個編論壇,那個CMS,還有那啥CRM,我啥時候寫一個呢?

不要急,可以說你的馬步已經扎的差不多了,接下來就要開始練把勢的時候了,如果有條件的話,用筆或者列印一個簡易的PHP手冊在身上,時不時的摸出來看看,記得,去WC也不能放過(^2^)。

再有條件的話,買本書看看吧,《PHP+MYSQL WEB開發(第三版)》號稱聖經級,(也許是個不錯的選擇(聲明:作者沒給我啥好處費,我也不是書托,隔著大老遠,我連他老兄的面都沒見過的說-_-)

鞏固了自己的知識,熟悉了PHP和MYSQL開發的要領之後,再回頭看你寫的那個留言本,你也許會懷疑那真的是你寫的嗎?當然,如果屋裡還有鬼的話,也許是它寫的-_-

這個時候,你的留言本應該加入註冊以及分頁功能了,而如果你更強的話,UI(用戶界面)也可以加強,完成之後,感覺是不是特有成就感?不管怎麼樣,咱好歹 是寫了一個動態網站程序了,放在自己的網站上耍耍吧,讓好朋友來看看,嘿,看咱寫的多棒,然後再在網上宣傳一下。

幾天之後你再打開留言本,哎?哇,一下彈出N多頁面!很明顯,你的留言本並沒有做好安全防範,被人用JS代碼小小的耍了一下,我很同情你這個時候的感受,但是沒有別的辦法了,繼續努力吧!

你發奮努力,熟悉了安全方面的問題,然後又設計了一些程序,感覺還不錯。

那麼接下來,這就算學會啦?NO,NO,NO,還早呢,你至盡還沒碰過OOP之類的吧?模板呢?

恩,學!加緊學呀學,學會了這些之後,你又學會了生成靜態網頁,現在你應該接觸一下XML了,恩,XML也了解了,那麼AJAX你也得接觸接觸吧?AJAX完了….然後…

總而言之,你絕對不會發現你全部都學會了,一些真正的強人總會搞出新玩意來丟給你,你不學就落後了,也印證了前人的經驗,果然是學無止境啊!

我想通過我的一番YY,你也應該大致熟悉了一些學習過程,也許我的過程和你的有些出路,但是不管怎麼樣是殊途同歸,我寫這麼多,也只是給大家一個借鑒的機會,至於好與不好,不敢打包票^0^

看完之後你發現,羅嗦這麼多,對我一點用處沒有啊,我知道該怎麼學,但是我想如何才能更快的學,一周速成,啊不,24小時速成那種,你有沒?

我…….我沒有,但是2分鐘之內把你扁進醫院裡,我倒是有把握-_-

學東西,永遠不要妄想有速成這一說,告訴你了一個方式,但是缺少努力這一環節,那也是白搭。

但是有一點我可以給你保證的就是,你學會了PHP,那麼學其他的語言,肯定速成,反過來也一樣,如果你之前學過其他的語言,那麼學PHP肯定快。

不過語法好學,但是怎麼用語法來實現每個人都有每個人的方式,幾乎是各有千秋。然而借鑒別人成功的代碼,絕對是有益無害,因此,多看那些經過千錘百鍊凝出來的經典代碼,是進階的最好方法。

講了這麼多,無非是想說:學習PHP不僅要掌握方法,更多的是付出汗水,我不希望看到中途放棄的人,相信自己,相信自己的選擇,更要相信自己的能力,如果 自己想放棄,暴力一點的話,就自己抽自己一個嘴巴,然後大吼:別人可以,我為什麼就不可以?(是不是有點閻羅教練的味道,的確是電影看多了,抽嘴巴是會痛 的,各位其實明白這個道理了就行了)

另外要叮囑各位的是,抵禦誘惑,ASP/PHP/JSP/.NET的對比也許會讓你無所適從,你也許學了一半PHP,又開始打C#的主意,或者有人說 JAVA很強,這個時候的你絕對不能動搖,哪怕你真想學,也得學會了PHP。然後再學,見異思遷是最不可取的,狗熊掰玉米就是這個道理,如果經常中途放 棄,只能是一無所獲,還浪費了N多的時間和經歷,得不償失,最重要的是,你會被別人瞧不起,沒有人會喜歡和見異思遷的人交朋友,因為這種人太不安分,太不 可靠,因此,你必須要強迫自己完成自己的目標,哪怕可能會很難受,也得堅持,毅力就是這麼鍛鍊出來的。

php oop的作用

oop是面向對象編程(設計) 面向對象程序設計(英語:Object Oriented Programming,縮寫:OOP),指一種程序設計范型,同時也是一種程序開發的方法論。它將對象作為程序的基本單元,將程序和數據封裝其中,以提高軟體的重用性、靈活性和擴展性。基本理論

一項由 Deborah J. Armstrong 進行的長達40年之久的計算機著作調查顯示出了一系列面向對象程序設計的基本理論。它們是:

類(Class)定義了一件事物的抽象特點。通常來說,類定義了事物的屬性和它可以做到的(它的行為)。舉例來說,”狗”這個類會包含狗的一切基礎特徵,例如它的孕育、毛皮顏色和吠叫的能力。類可以為程序提供模版和結構。一個類的方法和屬性被稱為”成員”。 我們來看一段偽代碼:

類狗 開始 私有成員: 孕育 毛皮顏色 公有成員: 吠叫() 結束

在這串代碼中,我們聲明了一個類,這個類具有一些狗的基本特徵。關於公有成員和私有成員,請參見下面的繼承性一節。

對象

對象(Object)是類的實例。例如,”狗”這個類列舉狗的特點,從而使這個類定義了世界上所有的狗。而萊絲這個對象則是一條具體的狗,它的屬性也是具體的。狗有皮毛顏色,而萊絲的皮毛顏色是棕白色的。因此,萊絲就是狗這個類的一個實例。一個具體對象屬性的值被稱作它的”狀態”。

假設我們已經在上面定義了狗這個類,我們就可以用這個類來定義對象:

定義萊絲是狗 萊絲.毛皮顏色:=棕白色 萊絲.吠叫()

我們無法讓狗這個類去吠叫,但是我們可以讓對象”萊絲”去吠叫,正如狗可以吠叫,但沒有具體的狗就無法吠叫。

方法

方法(Method)是一個類能做的事情,但方法並沒有去做這件事。作為一條狗,萊絲是會吠叫的,因此”吠叫()”就是它的一個方法。與此同時,它可能還會有其它方法,例如”坐下()”,或者”吃()”。 對一個具體對象的方法進行調用並不影響其它對象,正如所有的狗都會叫,但是你讓一條狗叫不代表所有的狗都叫。 如下例:

定義萊絲是狗 定義泰爾是狗 萊絲.吠叫()

則泰爾是不會吠叫的,因為這裡的吠叫只是對對象”萊絲”進行的。

消息傳遞機制

一個對象通過接受消息、處理消息、傳出消息或使用其他類的方法來實現一定功能,這叫做消息傳遞機制(Message Passing)。

繼承性

繼承性(Inheritance)是指,在某種情況下,一個類會有”子類”。子類比原本的類(稱為父類)要更加具體化,例如,”狗”這個類可能會有它的子類”牧羊犬”和”奇瓦瓦犬”。在這種情況下,”萊絲”可能就是牧羊犬的一個實例。子類會繼承父類的屬性和行為,並且也可包含它們自己的。我們假設”狗”這個類有一個方法叫做”吠叫()”和一個屬性叫做”毛皮顏色”。它的子類(前例中的牧羊犬和奇瓦瓦犬)會繼承這些成員。這意味著程序員只需要將相同的代碼寫一次。 在偽代碼中我們可以這樣寫:

類牧羊犬:繼承狗 定義萊絲是牧羊犬 萊絲.吠叫() /* 注意這裡調用的是狗這個類的吠叫屬性。 */

回到前面的例子,”牧羊犬”這個類可以繼承”毛皮顏色”這個屬性,並指定其為棕白色。而”奇瓦瓦犬”則可以繼承”吠叫()”這個方法,並指定它的音調高於平常。子類也可以加入新的成員,例如,”奇瓦瓦犬”這個類可以加入一個方法叫做”顫抖()”。設若用”牧羊犬”這個類定義了一個實例”萊絲”,那麼萊絲就不會顫抖,因為這個方法是屬於奇瓦瓦犬的,而非牧羊犬。事實上,我們可以把繼承理解為”是”。例如,萊絲”是”牧羊犬,牧羊犬”是”狗。因此,萊絲既繼承了牧羊犬的屬性,又繼承了狗的屬性。 我們來看偽代碼:

類奇瓦瓦犬:繼承狗 開始 公有成員: 顫抖() 結束 類牧羊犬:繼承狗 定義萊絲是牧羊犬 萊絲.顫抖() /* 錯誤:顫抖是奇瓦瓦犬的成員方法。 */

當一個類從多個父類繼承時,我們稱之為”多重繼承”。多重繼承並不總是被支持的,因為它很難理解,又很難被好好使用。

封裝性

具備封裝性(Encapsulation)的面向對象程序設計隱藏了某一方法的具體執行步驟,取而代之的是通過消息傳遞機制傳送消息給它。因此,舉例來說,”狗”這個類有”吠叫()”的方法,這一方法定義了狗具體該通過什麼方法吠叫。但是,萊絲的朋友蒂米並不需要知道它到底如何吠叫。 從實例來看:

/* 一個面向過程的程序會這樣寫: */

定義萊絲 萊絲.設置音調(5) 萊絲.吸氣() 萊絲.吐氣() /* 而當狗的吠叫被封裝到類中,任何人都可以簡單地使用: */ 定義萊絲是狗 萊絲.吠叫()

封裝是通過限制只有特定類的實例可以訪問這一特定類的成員,而它們通常利用介面實現消息的傳入傳出。舉個例子,介面能確保幼犬這一特徵只能被賦予狗這一類。通常來說,成員會依它們的訪問許可權被分為3種:公有成員、私有成員以及保護成員。有些語言更進一步:Java可以限制同一包內不同類的訪問;C#和VB.NET保留了為類的成員聚集準備的關鍵字:internal(C#)和Friend(VB.NET);Eiffel語言則可以讓用戶指定哪個類可以訪問所有成員。

多態性

多態性(Polymorphism)指方法在不同的類中調用可以實現的不同結果。因此,2個甚至更多的類可以對同一消息作出不同的反應。舉例來說,狗和雞都有”叫()”這一方法,但是調用狗的”叫()”,狗會吠叫;調用雞的”叫()”,雞則會啼叫。 我們將它體現在偽代碼上:

類狗 開始 公有成員: 叫() 開始 吠叫() 結束 結束 類雞 開始 公有成員: 叫() 開始 啼叫() 結束 結束 定義萊絲是狗 定義魯斯特是雞 萊絲.叫() 魯斯特.叫()

這樣,同樣是叫,萊絲和魯斯特做出的反應將大不相同。多態性的概念可以用在運算符重載上,本文不再贅述。

抽象性

抽象(Abstraction)是簡化複雜的現實問題的途徑,它可以為具體問題找到最恰當的類定義,並且可以在最恰當的繼承級別解釋問題。舉例說明,萊絲在大多數時候都被當作一條狗,但是如果想要讓它做牧羊犬做的事,你完全可以調用牧羊犬的方法。如果狗這個類還有動物的父類,那麼你完全可以視萊絲為一個動物。

OOP名詞釋意

編程范型 對於OOP的準確定義及其本意存在著不少爭論。

通常,OOP被理解為一種將程序分解為封裝數據及相關操作的模塊而進行的編程方式。有別於其它編程方式,OOP中的與某數據類型相關的一系列操作都被有機地封裝到該數據類型當中,而非散放於其外,因而OOP中的數據類型不僅有著狀態,還有著相關的行為。OOP理論,及與之同名的OOP實踐相結合創造出了新的一個編程架構;OOP思想被廣泛認為是非常有用的,以致一套新的編程范型被創造了出來。(其它的編程范型例如函數式編程或過程序編程專註於程序運行的過程,而邏輯編程專註於引發程序代碼執行的斷言)

對面向模擬系統的語言(如:SIMULA 67)的研究及對高可靠性系統架構(如:高性能操作系統和CPU的架構)的研究最終導致了OOP的誕生。

一些專家認為Object-Orientation中的Object的本意來自於其在語法領域的意義,即應將其理解為”賓語”或”操作對象”,而非一般的”對象”或”對象”。我們所見到的軟體的運行請求通常都是Subject-Oriented的,即”面向主語的”或”面向操作者的”,然而這樣將使得對操作者對象的設計變得困難而複雜。有鑒於此,部分研究人員開始了對”面向操作對象”的思考。這又一次產生了新的編程范型,這是前邊提到的”面向操作者”的思考模式的一項革新。

依照”面向操作對象”的原則,在程序語句中的動詞應該被劃分到操作對象的類型之中,而與該動詞請求相關的邏輯關係也就因此將在操作對象中處理。以下是採用”面向操作對象”的方式翻譯”面向操作者”的一些例子:

面向操作者:銷售系統保存交易記錄。

面向操作對象:交易記錄在接受到銷售系統的一條請求消息後將自身保存。

面向操作者:銷售系統列印收據。

面向操作對象:收據在接收到銷售系統的一條請求消息後將自身列印。

面向對象的語言

支持部分或絕大部分面向對象特性的語言即可稱為基於對象的或面向對象的語言。早期,完全面向對象的語言主要包括Smalltalk等語言,目前較為流行的語言中有Java、C#、Eiffel等。隨著軟體工業的發展,比較早的面向過程的語言在近些年的發展中也紛紛吸收了許多面向對象的概念,比如C-C++,BASIC-Visual Basic-Visual Basic .NET,Pascal-Object Pascal,Ada-Ada95。

歷史

對象和實例的最早概念出自麻省理工大學的PDP-1系統。這一系統大概是capability based architecture的最早示例。另一個早期的事例是1963年Ivan Sutherland開發的Sketchpad;但是,這並非是一種編程思想,而只是一個程序。

對象最早在20世紀60年代的Simula 67中被引入程序設計中。Simula這一語言是Ole-Johan Dahl和Kristen Nygaard在奧斯陸計算機中心為模擬環境而設計的。(據說,他們是為了模擬船隻而設計的這種語言,並且對不同船隻間屬性的相互影響感興趣。他們將不同的船隻歸納為不同的類,而每一個對象,基於它的類,可以定義它自己的屬性和行為。)這種辦法是分析式程序的最早概念體現。在分析式程序中,我們將真實世界的對象映射到抽象的對象,這叫做”模擬”。Simula不僅引入了”類”的概念,還應用了實例這一思想–這可能是這些概念的最早應用。20世紀70年代施樂PARC研究所發明的Smalltalk語言將面向對象程序設計的概念定義為,在基礎運算中,對對象和消息的廣泛應用。Smalltalk的創建者深受Simula 67的主要思想影響,但Smalltalk中的對象是完全動態的–它們可以被創建、修改並銷毀,這與Simula中的靜態對象有所區別。此外,Smalltalk還引入了繼承性的思想,它因此一舉超越了不可創建實例的程序設計模型和不具備繼承性的Simula。

此外,Simula 67的思想亦被應用在許多不同的語言,如Lisp、Pascal。

面向對象程序設計在80年代成為了一種主導思想,這主要應歸功於C++–C語言的擴充版。在圖形用戶界面(GUI)日漸崛起的情況下,面向對象程序設計很好地適應了潮流。GUI和面向對象程序設計的緊密關聯在Mac OS X中可見一斑。Mac OS X是由面向對象C語言寫成的,這一語言是一個仿Smalltalk的C語言擴充版。面向對象程序設計的思想也使事件處理式的程序設計更加廣泛被應用(雖然這一概念並非僅存在於面向對象程序設計)。一種說法是,GUI的引入極大地推動了面向對象程序設計的發展。

在ETH Zürich(英文),Niklaus Wirth 和他的同事們對抽象數據和模塊化程序設計進行了調查。Mudula-2將這些都包括了進去,而Oberon則包括了一種特殊的面向對象方法–不同於Smalltalk與C++。

面向對象的特性也被加入了當時較為流行的語言:Ada、BASIC、Lisp、Fortran、Pascal以及種種。由於這些語言最初並沒有面向對象的設計,故而這種糅合常常會導致兼容性和維護性的問題。與之相反的是,”純正的”面向對象語言卻缺乏一些程序員們賴以生存的特性。在這一大環境下,開發新的語言成為了當務之急。作為先行者,Eiffel成功地解決了這些問題,並成為了當時較受歡迎的語言。在過去的幾年中,Java語言成為了廣為應用的語言,除了它與C和C++語法上的近似性。Java的可移植性是它的成功中不可磨滅的一步,因為這一特性,已吸引了龐大的程序員群的投入。

近日,一些既支持面向對象程序設計,又支持面向過程程序設計的語言悄然浮出水面。它們中的佼佼者有Python、Ruby等等.

正如面向過程程序設計使得結構化程序設計的技術得以提升,現代的面向對象程序設計方法使得對設計模式的用途、契約式設計和建模語言(如UML)技術也得到了一定提升。

腳本中的OOP

近年來,面向過程程序設計越發流行於腳本語言。Python和Ruby是建立在OOP原理的腳本語言,Perl和PHP亦分別在Perl 5和PHP 4時加入面向過程特性。

原創文章,作者:JPKE,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/144162.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
JPKE的頭像JPKE
上一篇 2024-10-24 15:27
下一篇 2024-10-24 15:28

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • MQTT使用教程

    MQTT是一種輕量級的消息傳輸協議,適用於物聯網領域中的設備與雲端、設備與設備之間的數據傳輸。本文將介紹使用MQTT實現設備與雲端數據傳輸的方法和注意事項。 一、準備工作 在使用M…

    編程 2025-04-29
  • Python3.6.5下載安裝教程

    Python是一種面向對象、解釋型計算機程序語言。它是一門動態語言,因為它不會對程序員提前聲明變數類型,而是在變數第一次賦值時自動識別該變數的類型。 Python3.6.5是Pyt…

    編程 2025-04-29
  • Deepin系統分區設置教程

    本教程將會詳細介紹Deepin系統如何進行分區設置,分享多種方式讓您了解如何規劃您的硬碟。 一、分區的基本知識 在進行Deepin系統分區設置之前,我們需要了解一些基本分區概念。 …

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Qt雷達探測教程

    本文主要介紹如何使用Qt開發雷達探測程序,並展示一個簡單的雷達探測示例。 一、環境準備 在開始本教程之前,需要確保你的開發環境已經安裝Qt和Qt Creator。如果沒有安裝,可以…

    編程 2025-04-29
  • 猿編程python免費全套教程400集

    想要學習Python編程嗎?猿編程python免費全套教程400集是一個不錯的選擇!下面我們來詳細了解一下這個教程。 一、課程內容 猿編程python免費全套教程400集包含了從P…

    編程 2025-04-29
  • Python煙花教程

    Python煙花代碼在近年來越來越受到人們的歡迎,因為它可以讓我們在終端里玩煙花,不僅具有視覺美感,還可以通過代碼實現動畫和音效。本教程將詳細介紹Python煙花代碼的實現原理和模…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 使用Snare服務收集日誌:完整教程

    本教程將介紹如何使用Snare服務收集Windows伺服器上的日誌,並將其發送到遠程伺服器進行集中管理。 一、安裝和配置Snare 1、下載Snare安裝程序並安裝。 https:…

    編程 2025-04-29

發表回復

登錄後才能評論