面向對象(OOP)的理解 喜歡程式的朋友們,大家應該都聽過一句話“萬物皆對象”,感覺老牛X了。 面向對象的程式設計,它是圍繞真實世界來設計程式的。 面向對象三要素:封裝、繼承、多態。 我們可以定義一個類,用來表示小轎車,並且定義小轎車的一些屬性跟行為。然而現實中,有很多種類的車,有公交車、貨車、出租 ...
面向對象(OOP)的理解
喜歡程式的朋友們,大家應該都聽過一句話“萬物皆對象”,感覺老牛X了。
面向對象的程式設計,它是圍繞真實世界來設計程式的。
面向對象三要素:封裝、繼承、多態。
我們可以定義一個類,用來表示小轎車,並且定義小轎車的一些屬性跟行為。然而現實中,有很多種類的車,有公交車、貨車、計程車等。難道每次都要定義相對應的類嗎?這樣的話,太麻煩了,我們可以將這些進行一次抽象,這些車是不是都屬於車的範疇內。既然這樣的話,有很多屬性跟行為是大家都有的,只是具體不同罷了,那我們便定義一個抽象類(Vehicle),讓公交車、貨車、計程車來繼承這個類,之後只需重寫其中的方法,或者修改對應的屬性即可。以上工作做好了之後,便可以將公交車、貨車、計程車來實例化一下(也就是new操作),只有實例化後,才能稱得上一個對象。由此,萬物皆對象便自然而然理解了吧。
(沒有女朋友的話,咱new一個,嘿嘿嘿)
緩解眼疲勞
面向對象語言主要有兩種:一、強類型的(C#、Java等) 二、弱類型的(JavaScript)。
1、首先用強類型的C#語言來具體介紹一下麵向對象。(Java個人不是太瞭解的。。。)
代碼如下:
封裝
//定義一個抽象類 Vehicle 將一些屬性跟行為封裝在這個類里供後面的類繼承
abstract class Vehicle()
{
public string myName;//這個是欄位,不是屬性
//屬性
public string Appearance { get; set; } = "red"; //外觀顏色,預設是紅色,而且該屬性可讀可寫
public string Weight { get; set; } = "1.8t" //車身重量
public string Brand { get; set; } //品牌
//行為(方法)
public virtual void Run() //使用virtual關鍵字以供繼承它的類重寫該方法
{
//啟動
}
public virtual void Stop()
{
//停車
}
}
繼承
class Car : Vehicle()//小轎車繼承Vehicle這個類
{
//屬性重新賦值---構造函數(用來構造對象的,順便設置本類的部分屬性值)
public Car()
{
this.Appearance = "小轎車外觀";
this.Weight = "1.5t";
}
//行為(方法) 重寫Vehicle裡面的Run方法
public override void Run()
{
//小轎車啟動
}
public override void Stop()
{
//小轎車停車
}
}
class Bus : Vehicle()
{
//屬性
public Bus()
{
this.Appearance = "公交車外觀";
this.Weight = "2t";
}
//行為(方法)
public override void Run()
{
//公交車啟動
}
public override void Stop()
{
//公交車停車
}
}
多態
class static void Main()//程式入口
{
Car car = new Car();//實例化一個對象
car.Brand = "勞斯萊斯";//重新設置屬性的值
car.Run();//啟動小轎車
Bus bus = new Bus();
bus.Run();//啟動公交車
//小轎車和公交車調用了同一個Run方法,卻產生了不同的效果;
這便是多態,不同的對象調用調用同一個方法,產生了不同的行為。也是面向對象程式設計的魅力所在
}
2、接下來使用弱類型JavaScript語言來介紹一下麵向對象。
代碼如下:
//最簡單的方式
var Vehicle={
Appearance:"",
Weight:"",
Brand:"",
Run:function(){},
Stop:function(){}
}
//js語言也可以設置某個屬性是可讀還是可寫,只不過稍微有些複雜
如下:
Objec.defineProperty(Vehicle,"Appearance",{
writable: false//不可寫,意思就是不能修改該屬性的值
})
//組合使用構造函數模式跟原型模式---這裡可能有些複雜,具體原型在之後的博客中詳細介紹
function Vehicle(Appearance,Weight,Brand)
{
this.Appearance=Appearance;
this.Weight=Weight;
this.Brand=Brand;
}
Vehicle.prototype={
constructor:Vehicle,
Run:function(){},
Stop:function(){}
}
看到這裡,解釋下強類型跟弱類型的區別:
強類型:指的是具體的值的類型是一定的,定義int型變數,需要用到int關鍵字;定義string型變數,需要用到string關鍵字;現在C#也支持使用var關鍵字來定義變數,但定義的時候,必須要賦值。原理其實就是根據賦的值來推測出這個變數是什麼類型的,也就是說根據賦的值來推測出這個var指的是int還是string。
弱類型:在JavaScript中,定義變數都是用的var關鍵字,不管什麼類型的變數都可以使用var來定義。
緩解眼疲勞2
順帶說下, C#(Java)也屬於服務端語言的行列,而JavaScript屬於客戶端語言。
什麼意思?
就是C#是運行在伺服器上的,JavaScript運行在客戶端上。我們平常瀏覽的網頁其中的JavaScript語言就是運行在瀏覽器上的,我們可以通過瀏覽器直接看JavaScript代碼,而服務端語言我們是看不到的。