摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。
馬上就要到七夕了,離年底老媽老爸三姑六姨七大爺“找到對象了嗎?”的靈魂拷問又近了一點。今天我們就來說說讓廣大程序猿日思夜想抓耳撓腮的“對象”吧~
不過,此“對象”非彼“對象”。這個“對象”就是那個你 new 一下就有了的對象,不僅天天看到,還經(jīng)常需要“用到”。
然而說到對象,又不得不從面向?qū)ο缶幊陶f起了。
面向?qū)ο缶幊?/b>面向?qū)ο缶幊獭狾bject Oriented Programming,是用抽象方式創(chuàng)建基于現(xiàn)實世界模型的一種編程模式。 它使用先前建立的范例,包括模塊化,多態(tài)和封裝幾種技術(shù)。 今天,許多流行的編程語言(如Java,JavaScript,C#,C+ +,Python,PHP,Ruby和Objective-C)都支持面向?qū)ο缶幊蹋∣OP)。
《計算機科學(xué)導(dǎo)論》讀書筆記(一):淺析面向過程與面向?qū)ο缶幊?/p>
面向?qū)ο竽J脚c面向過程模式區(qū)別在于:面向?qū)ο竽J教幚砘顒訉ο螅潜粍訉ο蟆H缛粘I钪械南匆聶C,汽車等。 在這些對象上執(zhí)行的動作都包含在這些對象中,對象只需要接收合適的外部刺激即可。
還是拿打印文件做例子,在面向?qū)ο竽J街械奈募馨阉斜晃募?zhí)行的過程(面向?qū)ο笾谐蔀榉椒ǎù蛴。瑥?fù)制粘貼等)打包在一起。在這種模式下,程序只需要向文件發(fā)出打印或者復(fù)制的請求,文件就會被打印或復(fù)制。而這些方法,也被從這些對象繼承的其它對象共享。
初探面向?qū)ο缶幊讨畂op與設(shè)計模式
我們在使用面向?qū)ο缶幊虝r一定要記住以下幾個基本原則(也就是設(shè)計面向?qū)ο蟪绦虻幕驹瓌t),這樣才能夠更好的理解面向?qū)ο蟮纳钜狻?/p>
單一職責(zé)原則
開放封閉原則
里氏替換原則(LSP)
依賴倒置原則
ISP 接口隔離原則
談?wù)勎覍γ嫦驅(qū)ο笠约邦惻c對象的理解
隨著計算機技術(shù)的不斷提高,現(xiàn)在計算機不單單是用來解決運算問題,而是被用于解決越來越貼近現(xiàn)實生活的復(fù)雜問題。面向?qū)ο缶褪沁@一發(fā)展進程的產(chǎn)物,它使得編程工作更貼近人的思維方式,從而大大提升編程效率。我們必須明白的是面向?qū)ο蟛⒉皇且环N編程方式,而是一種編程思維方式,這種思維方式涵蓋了分析,設(shè)計,編碼等。在面向?qū)ο缶幊讨校绦虻幕締卧菍ο螅瑪?shù)據(jù)封裝在對象中。類是對象模板,是預(yù)定義好的結(jié)構(gòu),所謂的實例化一個類,所指的就是將數(shù)據(jù)填入模板。
從俄羅斯方塊來聊一聊面向?qū)ο?/p>
在許多后端語言中,在基礎(chǔ)部分,經(jīng)常說面向?qū)ο蠛苤匾热缭趈ava中有類的概念,封裝、繼承、多態(tài)往往被稱為面向?qū)ο蟮娜齻€核心。簡單來說,封裝就是為了更好的復(fù)用與繼承。在JavaScript中,在ES6之前雖然沒有類的概念,但往往封裝一些工具類,增強其復(fù)用性與便利性是一個不錯的選擇。
曾有句經(jīng)典的話:萬事萬物皆對象。在許多面向?qū)ο蟮闹v授中,可能很多的都拿人做例子,一個人是一個對象,對象有一些屬性(姓名、年齡、性別等等),對象有一些方法(吃飯、行走、說話),整個人類即一個類。很多情況下,通常new一個人類,即創(chuàng)建了一個具體的對象。那拿到面向?qū)ο缶幊虂碚f的話,這個對象可以是更為抽象的概念。
用面向?qū)ο蟮乃季S方式來設(shè)計數(shù)據(jù)庫
PHP 中的面向?qū)ο?/b> 基礎(chǔ)場景
我們有多種類型訂單:實物訂單、特享商戶訂單、核銷訂單、生活繳費訂單、電影票訂單、機票訂單、以及以后會持續(xù)新增的未知類型訂單,它們都存放在不同的訂單類型表中
第三種方式使用面向?qū)ο蟮姆绞絹韺崿F(xiàn):
先把所有訂單的公有的屬性抽象集合起來(如:訂單編號、下單時間、訂單狀態(tài)、訂單類型等)創(chuàng)建一張父訂單表
創(chuàng)建各種訂單專有屬性表(各類訂單特有屬性)
關(guān)系:父類訂單表 與 訂單表 一對一的關(guān)系(每張訂單表里面都能在父訂單表里面有1條與之對應(yīng))
以上方式將能滿足絕大多數(shù)業(yè)務(wù)情況
面向?qū)ο?/p>
對象和類的概念及兩者的關(guān)系:
類是定義一系列屬性和操作的模版,而對象則是把屬性進行具體化,然后交給類處理。
對象就是數(shù)據(jù),對象本身不包含方法。但是對象有一個“指針”指向一個類而這個類里可以有方法。
方法描述不同屬性會導(dǎo)致不同的表現(xiàn)。
類和對象是不可分割的,有對象就必定有一個類與其對應(yīng),否則這個對象也就沒有意義了。(但是有一種特殊情況:由標(biāo)量進行強制類型轉(zhuǎn)換的object,沒有一個類與他相對應(yīng),此時PHP中一個稱為“孤兒”sidClass類就會收留這個對象)。
php學(xué)習(xí)筆記(二)面向?qū)ο缶幊?/p>
類的定義:物以類聚,把具有相似特性的對象歸到一個類中,類定義了這些相似對象擁有的相同屬性和方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。
成員方法:類中的函數(shù)被稱為成員方法。函數(shù)和成員方法唯一的區(qū)別就是,函數(shù)實現(xiàn)的是某個獨立的功能,而成員方法是實現(xiàn)類中的一個行為,是類的一部分。
構(gòu)造函數(shù):PHP 5 允行開發(fā)者在一個類中定義一個方法作為構(gòu)造函數(shù)。具有構(gòu)造函數(shù)的類會在每次創(chuàng)建新對象時先調(diào)用此方法,所以非常適合在使用對象之前做一些初始化工作。
析構(gòu)函數(shù):析構(gòu)函數(shù)會在到某個對象的所有引用都被刪除或者當(dāng)對象被顯式銷毀時執(zhí)行。。
靜態(tài)類成員:有時候,可能需要創(chuàng)建供所有類實例共享的字段和方法,這些字段和方法與所有的類實例有關(guān),但不能由任何特定對象調(diào)用。。
PHP_OOP
在php中,對象通過對類的實體化形成的對象。
類(class):對象的模子。 一類的對象抽取出來。一個將對象的行為和屬性的一個抽象。就是一個定義。規(guī)定了對象應(yīng)該有哪些屬性,應(yīng)該有哪些操作(方法)。
實例化:一個動作,根據(jù)類中所定義的對象的特征,形成一個對象的過程。
注意: php 中,對象一定是通過類的實例化來的。類的地位,只是得到對象的方法。
PHP面向?qū)ο笕筇匦裕悍庋b、繼承、多態(tài)
進階算法提高程序運行的速度,而設(shè)計模式提高編程的速度。
php是面向?qū)ο蟮哪_本語言,而我們都知道,面向?qū)ο蟮恼Z言具有三大特性:封裝,繼承,多態(tài)。
PHP經(jīng)驗總結(jié) - 聊聊面向?qū)ο?/p>
“現(xiàn)在大伙都在講面向?qū)ο缶幊蹋俏覀円驳孟日抑粋€對象是不?不然怎么面向?qū)ο螅吭趺淳幊蹋俊?--- 笑話一則,但是理不虧,要搞P面向?qū)ο缶幊蹋覀兤鸫a要先搞懂對象(還有類)是什么?只有了解它,理解它,你才能駕馭它。做編程的不能瞎搞,邏輯嚴(yán)謹(jǐn)清晰最重要,要明白我們在做什么?我需要做什么?我該怎么做?接下來,我來談?wù)凱HP類和對象的認(rèn)知,然后說一下我們應(yīng)該怎么用它們。
php面向?qū)ο笾衧elf和static的區(qū)別
可以看到,在調(diào)用 static,子類哪怕調(diào)用的是父類的方法,但是父類方法中調(diào)用的方法還會是子類的方法(好繞嘴。。)
在PHP5.3版本以前,static 和 self 還是有一點區(qū)別,具體是什么,畢竟都是7版本的天下了。就不去了解了。
總結(jié)呢就是:self 只能引用當(dāng)前類中的方法,而 static 關(guān)鍵字允許函數(shù)能夠在運行時動態(tài)綁定類中的方法。
PHP|關(guān)于對象復(fù)制的一些事
當(dāng)我們需要一個對象的副本時,可以通過 clone 關(guān)鍵字,使用值復(fù)制方式新生成一個對象。
但是這有一個問題,對象中的某些數(shù)據(jù),比如 id,我不想是一樣的。但是 clone是做不到的。
這時我們可以通過實現(xiàn)一個特殊的方法 __clone() 來達到這個目的。當(dāng)一個對象調(diào)用clone關(guān)鍵字時,其 __clone() 方法就會被自動調(diào)用。
面向?qū)ο?關(guān)鍵字, 重點 必看
$this只能在成員方法中。$this主要用來調(diào)用成員屬性和成員方法;只能調(diào)用對象的東西。
self可以在所有方法中使用。self主要用來調(diào)用類的常量、靜態(tài)屬性、靜態(tài)方法,只能調(diào)用類的東西。
parent可以調(diào)用父類的內(nèi)容:成員方法、靜態(tài)屬性、靜態(tài)方法、常量
static關(guān)鍵字修飾的屬性和方法,就是靜態(tài)屬性和靜態(tài)方法; 靜態(tài)屬性和靜態(tài)方法,是與某個類相關(guān)的,與對象無關(guān)。 靜態(tài)屬性和靜態(tài)方法,不創(chuàng)建對象也能調(diào)用。
面向?qū)ο蟮膶嵗龖?yīng)用:圖形計算器
Java 中的面向?qū)ο?/b>使用動態(tài)頁面實現(xiàn)圖形計算器,可以計算給定圖形的周長和面積
可以使用接口或抽象類作為規(guī)范,再寫各子類的多態(tài)
簡談我所理解的面向?qū)ο?/p>
眾多面向?qū)ο蟮木幊趟枷腚m不盡一致,但是無論哪種面向?qū)ο缶幊陶Z言都具有以下的共通功能。
不需要知道內(nèi)部的詳細(xì)處理就可以進行操作(封裝、數(shù)據(jù)抽象)。
根據(jù)不同的數(shù)據(jù)類型自動選擇適當(dāng)?shù)姆椒ǎǘ鄳B(tài)性)。
Java 面向?qū)ο缶幊痰娜筇匦裕ǚ庋b、繼承、多態(tài))以及重寫和重載
Java 面向?qū)ο缶幊逃腥筇匦裕悍庋b、繼承、多態(tài)。
封裝:隱藏對象的屬性和實現(xiàn)細(xì)節(jié),僅對外公開訪問方法,控制在程序中屬性的讀和寫的訪問級別。
繼承:可以理解為,在一個現(xiàn)有類的基礎(chǔ)之上,增加新的方法或重寫已有方法,從而產(chǎn)生一個新類。
多態(tài):相同的事物,調(diào)用其相同的方法,參數(shù)也相同時,但表現(xiàn)的行為卻不同。
Java 面向?qū)ο? 類 對象 方法 變量 封裝
Java 面向?qū)ο? 構(gòu)造器 繼承 多態(tài)性 初始化塊
Javascript 中的面向?qū)ο?/b> 基礎(chǔ)溫故知新之javascript面向?qū)ο?/p>
類和實例是大多數(shù)面向?qū)ο缶幊陶Z言的基本概念
類:類是對象的類型模板
實例:實例是根據(jù)類創(chuàng)建的對象
但是,JavaScript語言的對象體系,不是基于“類”的,而是基于構(gòu)造函數(shù)(constructor)和原型鏈(prototype)。了與普通函數(shù)區(qū)別,構(gòu)造函數(shù)名字的第一個字母通常大寫。
JavaScript_面向?qū)ο蟪绦蛟O(shè)計
Object每個實例都會具有的屬性和方法:
Constructor:保存著用于創(chuàng)建當(dāng)前對象的函數(shù)。(構(gòu)造函數(shù))
hasOwnProperty(propertyName):用于檢測給定的屬性在當(dāng)前對象實例中(而不是原型中)是否存在。
isPrototypeOf(Object):用于檢查傳入的對象是否是另外一個對象的原型。
propertyIsEnumerable(propertyName):用于檢查給定的屬性是否能夠使用for-in語句來枚舉。
toLocaleString():返回對象的字符串表示。該字符串與執(zhí)行環(huán)境的地區(qū)對應(yīng).
toString():返回對象的字符串表示。
valueOf():返回對象的字符串、數(shù)值或布爾表示。
判斷一個對象是不是另一個對象的實例,通常使用的是 instanceof,比較少使用constructor。
JavaScript設(shè)計模式與開發(fā)實踐 | 01 - 面向?qū)ο蟮腏avaScript
JavaScript在設(shè)計的時候,模仿Java引入了兩套類型機制:基本類型和對象類型。
按照J(rèn)avaScript設(shè)計者的本意,除了undefined之外,一切都應(yīng)是對象。為了實現(xiàn)這一目標(biāo),number、boolean等幾種基本類型數(shù)據(jù)可以通過“包裝類”的方式變成對象類型數(shù)據(jù)。
JavaScript絕大部分?jǐn)?shù)據(jù)都是對象。事實上,JavaScript中的根對象是Object.prototype對象。Object.prototype對象是一個空對象。JavaScript的每個對象,都是從Object.prototype對象克隆而來。
CoffeeScript—面向?qū)ο?/p>
細(xì)說 Javascript 對象自從面向?qū)ο蟮木幊趟枷氤霈F(xiàn)以來,這個概念已經(jīng)被炒爛了,只要編程開發(fā)大家都會拿面向?qū)ο髞碚f事,好像只要跟面向?qū)ο笳催吘蜁@得逼格很高一樣,不過確實逼格提高了。要知道,面向?qū)ο笾皇且环N手段,最終目的是為了提高我們項目的重用性、靈活性和擴展性。
為了迎合面向?qū)ο蟮某绦蛟O(shè)計思想,JavaScript也通過自己的語法實現(xiàn)了自己的一套面向?qū)ο髾C制。不過我想問下,前端開發(fā)當(dāng)中有多少人使用過面向?qū)ο螽?dāng)中的繼承?
JavaScript面向?qū)ο蟮膶崿F(xiàn)確實有點不倫不類的感覺。下面先簡單說明下JavaScript當(dāng)中面向?qū)ο蟮膶崿F(xiàn),涉及的東西比較深,要對constructor、prototype有一定的理解,不然看起來會很吃力,或者你也可以跳開這部分內(nèi)容,直接看CoffeeScript面向?qū)ο蟮膶崿F(xiàn)。
細(xì)說 Javascript 對象篇(一) : 對象的使用和屬性
一個經(jīng)常容易被誤解的就是數(shù)字常量不能視為對象,實際上數(shù)字常量仍然可以視為對象。這是因為 Javascript 解析器在解析點操作符時而將其視為浮點數(shù)特征而犯下的錯誤。
細(xì)說 Javascript 對象篇(二) : 原型對象
Javascript 并沒有類繼承模型,而是使用原型對象 prototype 進行原型式繼承。
盡管人們經(jīng)常將此看做是 Javascript 的一個缺點,然而事實上,原型式繼承比傳統(tǒng)的類繼承模型要更加強大。舉個例子,在原型式繼承頂端構(gòu)建一個類模型很簡單,然而反過來則是個困難得多的任務(wù)。
Javascript 是唯一一個被廣泛運用的原型式繼承的語言,所以理解兩種繼承方式的差異是需要時間的。
細(xì)說 Javascript 對象篇(三) : hasOwnProperty
判斷一個屬性是定義在對象本身而不是繼承自原型鏈,我們需要使用從 Object.prototype 繼承而來的 hasOwnProperty 方法。
hasOwnProperty 方法是 Javascript 中唯一一個處理對象屬性而不會往上遍歷原型鏈的。
細(xì)說 Javascript 對象篇(四) : for in 循環(huán)
進階如同 in 運算符一樣,使用 for in 循環(huán)遍歷對象屬性時,也將往上遍歷整個原型鏈。
這里我們要注意兩點,一是 for in 循環(huán)會忽略 enumerable 設(shè)置為 false 的屬性。例如一個數(shù)組的 length 屬性。第二是,由于 for in 會遍歷整個原型鏈,所以當(dāng)原型鏈過長時,會對性能造成影響。
JavaScript學(xué)習(xí)總結(jié)(五)原型和原型鏈詳解
原型鏈:當(dāng)從一個對象那里調(diào)取屬性或方法時,如果該對象自身不存在這樣的屬性或方法,就會去自己關(guān)聯(lián)的prototype對象那里尋找,如果prototype沒有,就會去prototype關(guān)聯(lián)的前輩prototype那里尋找,如果再沒有則繼續(xù)查找Prototype.Prototype引用的對象,依次類推,直到Prototype.….Prototype為undefined(Object的Prototype就是undefined)從而形成了所謂的“原型鏈”。
Javascript面向?qū)ο缶幊蹋ǘ簶?gòu)造函數(shù)的繼承
上面是采用prototype對象,實現(xiàn)繼承。我們也可以換一種思路,純粹采用"拷貝"方法實現(xiàn)繼承。簡單說,如果把父對象的所有屬性和方法,拷貝進子對象,不也能夠?qū)崿F(xiàn)繼承嗎?這樣我們就有了第五種方法。
面向?qū)ο?非構(gòu)造函數(shù)的繼承
除了使用“prototype”鏈以外,還有另一種思路:就是把父對象的屬性,全部拷貝給子對象,也能實現(xiàn)繼承。
理清javascript中的面向?qū)ο螅ㄒ唬屠^承
與其它編程語言不一樣的是,javascript的面向?qū)ο蟛⒎且蕾囉诔橄蟮念悾峭ㄟ^原型鏈,將一個個具體的對象實例進行連接,位于原型鏈下游的對象實例可以讀取/使用位于上游的對象實例的屬性/方法。
下文由簡及深,試圖一步步理清javascript面向?qū)ο蟮谋举|(zhì)。
javascript對象詳解:__proto__ 和 prototype 的區(qū)別和聯(lián)系
函數(shù)是js中的一等公民,js在創(chuàng)建對象的時候,都有一個叫做__proto__的內(nèi)置屬性,用于指向創(chuàng)建它的函數(shù)對象的原型對象prototype。只有函數(shù)有prototype, 當(dāng)你創(chuàng)建一個函數(shù)時,js會自動為這個函數(shù)加上prototype屬性,值是一個空對象。
JavaScript深入之創(chuàng)建對象的多種方式以及優(yōu)缺點
優(yōu)點:該共享的共享,該私有的私有,使用最廣泛的方式
缺點:有的人就是希望全部都寫在一起,即更好的封裝性
js面向?qū)ο缶毩?xí)-拖拽效果
普通方法變形
盡量不要出現(xiàn)函數(shù)嵌套函數(shù)
可以有全局變量
把onload函數(shù)中不是賦值的語句放到多帶帶函數(shù)中
改成面向?qū)ο?/p>
全局變量就是屬性
函數(shù)就是方法
onload中創(chuàng)建對象
改this指針問題
談?wù)?javascript 面向?qū)ο蟮囊恍┘?xì)節(jié)問題
JavaScript面向?qū)ο笾R點小結(jié)
一張圖秒懂原型鏈查找,這個是理解js原型繼承的關(guān)鍵
社區(qū)技術(shù)群SegmentFault 官方目前開放的微信技術(shù)群如下:
SF.GG 后端攻城獅交流群
SF.GG 前端攻城獅交流群
SF.GG 北京技術(shù)交流群
SF.GG 上海技術(shù)交流群
SF.GG 廣州技術(shù)交流群
SF.GG 深圳技術(shù)交流群
SF.GG 杭州技術(shù)交流群
以上群組僅限程序員加入,需要入群的小伙伴請?zhí)砑庸芾韱T微信好友:mgr_segmentfault,備注『群名稱+SF用戶ID』,審核成功后會拉你進入相應(yīng)技術(shù)群。
本期完
:)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/25706.html
摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:標(biāo)簽怎么樣下的日志怎么樣,好不好,洛杉磯安暢服務(wù)器,電信聯(lián)通走,移動直連,美國原生,可解鎖奈菲。歡迎所有新老客戶參與此優(yōu)惠活動。VpsMS怎么樣,VpsMS好不好,VpsMS洛杉磯安暢GIA-CN2服務(wù)器,電信聯(lián)通走GIA CN2,移動直連,美國原生ip ,可解鎖奈菲。 七夕活動,原諒他77次之2021七夕活動,詳情如下: 七夕將至,VpsMS團隊為答謝廣大客戶一年多以來對本站的支持...
摘要:安暢線路方面,電信聯(lián)通走,美國安暢七折優(yōu)惠不超售帶寬月起美國安暢七折優(yōu)惠不超售帶寬月起是一家主營美國洛杉磯服務(wù)器的商家,線路為美國安暢,全線采用架構(gòu)配備vpsms怎么樣?vpsms洛杉磯安暢GIA-CN2服務(wù)器,電信聯(lián)通走GIA CN2,移動直連,美國原生ip ,可解鎖奈菲。七夕活動,原諒他77次之2021七夕活動,詳情如下:七夕將至,VpsMS團隊為答謝廣大客戶一年多以來對本站的支持,即日...
閱讀 2181·2021-11-24 10:26
閱讀 2792·2021-11-23 09:51
閱讀 2907·2021-10-08 10:05
閱讀 1683·2021-09-22 15:18
閱讀 1619·2019-08-29 18:45
閱讀 2142·2019-08-29 18:40
閱讀 3332·2019-08-29 16:16
閱讀 2849·2019-08-29 14:21