1. 程式人生 > >(C#、JavaScript)面向物件的程式設計

(C#、JavaScript)面向物件的程式設計

面向物件(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程式碼,而服務端語言我們是看不到的