(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代碼,而服務端語言我們是看不到的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM