面向?qū)ο螅∣OP)的理解
喜歡程序的朋友們,大家應(yīng)該都聽(tīng)過(guò)一句話“萬(wàn)物皆對(duì)象”,感覺(jué)老牛X了。
面向?qū)ο蟮某绦蛟O(shè)計(jì),它是圍繞真實(shí)世界來(lái)設(shè)計(jì)程序的。
面向?qū)ο笕兀悍庋b、繼承、多態(tài)。
我們可以定義一個(gè)類,用來(lái)表示小轎車,并且定義小轎車的一些屬性跟行為。然而現(xiàn)實(shí)中,有很多種類的車,有公交車、貨車、出租車等。難道每次都要定義相對(duì)應(yīng)的類嗎?這樣的話,太麻煩了,我們可以將這些進(jìn)行一次抽象,這些車是不是都屬于車的范疇內(nèi)。既然這樣的話,有很多屬性跟行為是大家都有的,只是具體不同罷了,那我們便定義一個(gè)抽象類(Vehicle),讓公交車、貨車、出租車來(lái)繼承這個(gè)類,之后只需重寫(xiě)其中的方法,或者修改對(duì)應(yīng)的屬性即可。以上工作做好了之后,便可以將公交車、貨車、出租車來(lái)實(shí)例化一下(也就是new操作),只有實(shí)例化后,才能稱得上一個(gè)對(duì)象。由此,萬(wàn)物皆對(duì)象便自然而然理解了吧。
(沒(méi)有女朋友的話,咱new一個(gè),嘿嘿嘿)
緩解眼疲勞
面向?qū)ο笳Z(yǔ)言主要有兩種:一、強(qiáng)類型的(C#、Java等) 二、弱類型的(JavaScript)。
1、首先用強(qiáng)類型的C#語(yǔ)言來(lái)具體介紹一下面向?qū)ο?。(Java個(gè)人不是太了解的。。。)
代碼如下:
封裝
//定義一個(gè)抽象類 Vehicle 將一些屬性跟行為封裝在這個(gè)類里供后面的類繼承 abstract class Vehicle() { public
string myName;//這個(gè)是字段,不是屬性 //屬性 public string Appearance { get; set; } = "red";
//外觀顏色,默認(rèn)是紅色,而且該屬性可讀可寫(xiě) public string Weight { get; set; } = "1.8t" //車身重量
public string Brand { get; set; } //品牌 //行為(方法) public virtual void Run()
//使用virtual關(guān)鍵字以供繼承它的類重寫(xiě)該方法 { //啟動(dòng) } public virtual void Stop() { //停車 } }
繼承
class Car : Vehicle()//小轎車?yán)^承Vehicle這個(gè)類 { //屬性重新賦值---構(gòu)造函數(shù)(用來(lái)構(gòu)造對(duì)象的,順便設(shè)置本類的部分屬性值)
public Car() { this.Appearance = "小轎車外觀"; this.Weight = "1.5t"; } //行為(方法)
重寫(xiě)Vehicle里面的Run方法 public override void Run() { //小轎車啟動(dòng) } public override void
Stop() { //小轎車停車 } } class Bus : Vehicle() { //屬性 public Bus() {
this.Appearance = "公交車外觀"; this.Weight = "2t"; } //行為(方法) public override void
Run() { //公交車啟動(dòng) } public override void Stop() { //公交車停車 } }
多態(tài)
class static void Main()//程序入口 { Car car = new Car();//實(shí)例化一個(gè)對(duì)象 car.Brand =
"勞斯萊斯";//重新設(shè)置屬性的值 car.Run();//啟動(dòng)小轎車 Bus bus = new Bus(); bus.Run();//啟動(dòng)公交車
//小轎車和公交車調(diào)用了同一個(gè)Run方法,卻產(chǎn)生了不同的效果; 這便是多態(tài),不同的對(duì)象調(diào)用調(diào)用同一個(gè)方法,產(chǎn)生了不同的行為。也是面向?qū)ο蟪绦蛟O(shè)計(jì)的魅力所在 }
2、接下來(lái)使用弱類型JavaScript語(yǔ)言來(lái)介紹一下面向?qū)ο蟆?br> 代碼如下:
//最簡(jiǎn)單的方式 var Vehicle={ Appearance:"", Weight:"", Brand:"", Run:function(){},
Stop:function(){} } //js語(yǔ)言也可以設(shè)置某個(gè)屬性是可讀還是可寫(xiě),只不過(guò)稍微有些復(fù)雜 如下:
Objec.defineProperty(Vehicle,"Appearance",{ writable: false//不可寫(xiě),意思就是不能修改該屬性的值
}) //組合使用構(gòu)造函數(shù)模式跟原型模式---這里可能有些復(fù)雜,具體原型在之后的博客中詳細(xì)介紹 function
Vehicle(Appearance,Weight,Brand) { this.Appearance=Appearance;
this.Weight=Weight; this.Brand=Brand; } Vehicle.prototype={
constructor:Vehicle, Run:function(){}, Stop:function(){} }
看到這里,解釋下強(qiáng)類型跟弱類型的區(qū)別:
強(qiáng)類型:
指的是具體的值的類型是一定的,定義int型變量,需要用到int關(guān)鍵字;定義string型變量,需要用到string關(guān)鍵字;現(xiàn)在C#也支持使用var關(guān)鍵字來(lái)定義變量,但定義的時(shí)候,必須要賦值。原理其實(shí)就是根據(jù)賦的值來(lái)推測(cè)出這個(gè)變量是什么類型的,也就是說(shuō)根據(jù)賦的值來(lái)推測(cè)出這個(gè)var指的是int還是string。
弱類型:在JavaScript中,定義變量都是用的var關(guān)鍵字,不管什么類型的變量都可以使用var來(lái)定義。
緩解眼疲勞2
順帶說(shuō)下, C#(Java)也屬于服務(wù)端語(yǔ)言的行列,而JavaScript屬于客戶端語(yǔ)言。
什么意思?
就是C#是運(yùn)行在服務(wù)器上的,JavaScript運(yùn)行在客戶端上。我們平常瀏覽的網(wǎng)頁(yè)其中的JavaScript語(yǔ)言就是運(yùn)行在瀏覽器上的,我們可以通過(guò)瀏覽器直接看JavaScript代碼,而服務(wù)端語(yǔ)言我們是看不到的。
熱門(mén)工具 換一換
