C#物件導向的核心概念

來源:互聯網
上載者:User

標籤:

一、物件導向的核心概念

(一)抽象——物件導向的根基

講到抽象,不得不涉及到現代科學技術的基礎——數學。

數學是一門抽象的科學,面對著紛繁複雜的世間萬物,數學不理會各種事物的獨特特性,而只抽取它們在數量上的特性,深刻揭示了“世間萬物”在數量上表現出的共同規律,抽象正是數學的本質特徵。

數學的一個分支——離散數學是電腦科學的根基之一,因此,電腦科學從誕生之日起,就與數學有著密不可分的聯絡,抽象思維也是電腦科學的主要思維方法之一。

在使用物件導向的方法設計一個軟體系統時,首先就要區分出現實世界中的事物所屬的類型,分析它們擁有哪些性質與功能,再將它們抽象為在電腦虛擬世界中才有意義的實體——類,在程式運行時,由類建立出對象,用對象之間的相互合作關係來類比真實世界中事物的相互關聯。

在從真實世界到電腦虛擬世界的轉換過程中,抽象起了關鍵的作用。

(二)物件導向的三大基本特性

1.封裝

封裝的類=資料+對此資料所進行的操作(即演算法)

通俗的說,封裝就是:包起外界不必需要知道的東西,只向外界展露可供展示的東西。

2.繼承

真實世界中,事物之間有著一種派生關係,比如“食品”這一大類中包括“水果”這一子類,而“蘋果”又包含在“水果”這一子類中。

在電腦世界中,以物件導向的觀點不僅將上述事物抽象為類,而且將事物之間的派生關係也一併類比出來,這種關係稱為“繼承”。

在物件導向軟體系統中,繼承除了類比現實世界中事物關係這一作用,還是一個“重用已有代碼而又不破壞已有代碼”的方法。

3.多態

在代碼中本應使用某一具體子類的地方使用較為抽象的基類對象,這種方法所帶來的好處是多態的代碼具有“變色龍”的特性,即在不同的條件下,同樣代碼可以完成不同的功能。

二、類與對象

(一)類是物件導向編程的基本單元。

(二)欄位即變數,方法即函數。

函數分為變數函數(欄位的保護),行為函數。

執行個體方法:對象可以調用,類不能調用。

方法的重載:1.同名2.參數類型不同或個數不同

(三)傳值與傳址

傳值引用:整形變數,浮點型變數,結構體,日期時間(儲存在棧空間)

傳址引用:字串,數組,類。(儲存在堆空間)

例題:小狗——類的傳址引用

class dog    {        public string name;        public void bark()        {            Console.WriteLine("汪汪,我的名字叫"+name);        }    } static void Main(string[] args)        {            dog a = new dog();            dog b = new dog();            a.name = "旺財";            b.name = "守家";            a.bark();            b.bark();            //將a的引用地址複製給c,a和c將同時控制同一個對象;            //c將對象屬性改變後,a指向的也是一個改變後的對象。            dog c = a;                       c.name = "大黃";            a.bark();            //將b的引用地址複製給a和c,a、b、c、控制同一個對象;            //a、b原來指向的對象沒有地址指向它,無法被調用,稱為垃圾。            a = b;            c = b;                          a.bark();            b.bark();            c.bark();

 

例題:用oop解決泳池問題

//建立圓的類 class circle    {        public double r;        public double getLength()        {            double l = 2 * 3.14 * r;            return l;        }        public double getArea()        {            double s = 3.14 * r * r;            return s;        }    } //求遊泳池的周長和廣場面積        static void Main(string[] args)        {            circle small = new circle();            circle big = new circle();            Console.Write("請輸入小圓半徑");            small.r=Convert.ToInt32(Console.ReadLine());            Console.Write("請輸入大圓半徑");            big.r = Convert.ToInt32(Console.ReadLine());            Console.WriteLine("泳池周長:"+small.getLength());            Console.WriteLine("廣場面積:"+(big.getArea()-small.getArea()));        }

例題:狗咬狗——方法的重載

class dog    {        public string name;        public int HP = 100;        public void bark()        {            Console.WriteLine("汪汪,我的名字叫" + name);        }        public void bite(dog op)        {            Console.WriteLine(name + "開始攻擊" + op.name);            op.HP -= 10;            Console.WriteLine(name + "的血量:" + HP + "\n" + op.name + "的血量:" + op.HP);        }    } class people    {        public string name;        public void attackDog(dog op)        {            op.HP -= 10;            Console.WriteLine(name+"開始打狗\n"+op.name+"的血量:"+op.HP);        }        public void attackDog(dog op, int blood)        {            op.HP -= blood;            Console.WriteLine(name+"開始打狗\n"+op.name+"的血量:"+op.HP);        }    }  static void Main(string[] args)        {            //狗咬狗            dog a = new dog();            dog b = new dog();            a.name = "旺財";            b.name = "守家";            a.bite(b);            b.bite(a);            //人打狗,函數的重載            people h = new people();            h.name = "秋香";            h.attackDog(a);            h.attackDog(a,15);        }

例題:opp的欄位保護——學生資訊

class student    {        /*通過設定private,在本類之外無法直接操作該類的欄位,        必須通過調用該類的函數(稱為變數函數)來訪問,起到保護欄位的作用*/        public string name;        private int height;        private int weight;        public void setHeight(int a)        {            if (a > 0 && a < 1000)            {                height = a;            }            else            {                Console.WriteLine("身高輸入不正確");            }        }        public int getHeight()        {            return height;        }        public void setWeight(int a)        {            if (a > 0 && a <= 1000)            {                weight = a;            }            else            {                Console.WriteLine("體重輸入不正確");            }        }        public int getWeight()        {            return weight;        }        public void speak()        {            Console.WriteLine("我叫"+name+";體重:"+weight+"千克。身高:"+height+"cm");        }    } static void Main(string[] args)        {            student a = new student();            a.name = "王小明";            a.setHeight(170);            a.setWeight(80);            a.speak();        }

C#物件導向的核心概念

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.