1. 程式人生 > >可能是最簡單的面向對象入門教程(一 ) 一個鴨子引發的血案

可能是最簡單的面向對象入門教程(一 ) 一個鴨子引發的血案

CP object 語言 語言特性 ogr 只知道 stat 了解 turn

本文假設,諸位看官完全不了解,何謂面向對象,如果已經入門請跳過。另:歡迎交流,不喜勿噴。

假設你只知道class的概念,但是還沒有深入理解,不理解屬性,不理解方法,那麽看下去。

有這麽一個場景

  路上,一只狗,一只鴨子,狗跑過去攻擊了鴨子,鴨子發出慘叫,並且血量下降。


首先要知道,對象是由類實例化來得,一只狗一定是有狗這個類實例化來得,同理一只鴨子也是必定是鴨這個類實例化得到得。

類是靜態得,對象是“活”了得類.

類是一個模子,而對象就是模子刻出來得具體物件

類->對象,其實就是 抽象->具體


那麽根據場景我們嘗試寫下狗這個類,根據場景要求,狗能跑,能攻擊,同理,鴨子能慘叫,並且有血量。

ok,現在直接用python 寫下代碼:

class dog(object):

    def run(self):
        print(dog is run)

    def attack(duck):
        print(dog is attack duck)
        duck.screaming()

class duck(object):
    hp=100
    def screaming(self):
        self.hp=self.hp-10
        print(duck hp is ,self.hp) 
           
        print(duck is sceaming)

if __name__==__main__:
    dg=dog()
    dk=duck()
    dg.run()       #狗跑過去
    dg.attack(dk)  #攻擊鴨子dk ,導致鴨子dk慘叫流血

以上,dog是類,dg是dog得實例化對象

如果不習慣python得動態語言特性,請看下面得C#代碼實現:

 class duck
    {
        private int hp = 100;
public void screaming() { hp = hp - 10; Console.WriteLine("duck hp is "+this.hp); Console.WriteLine("duck scraming"); } }
class dog { public void run() { Console.WriteLine("dog is run "); } public void attack(duck dk) { Console.WriteLine("dog is attacking duck"); dk.screaming(); } } class Program { static void Main(string[] args) { var dg = new dog(); var dk = new duck(); dg.run(); dg.attack(dk); } }

感覺寫起來還是C#爽,讀起來還是python好,以下代碼用C++實現:

class duck  //頭文件
{
public:
    duck();
    ~duck();
    void screaming();
private:    
        int _hp=100;
};
#include "duck.h"   //cpp
#include <iostream>
using namespace std;
duck::duck()
{
    
}


duck::~duck()
{
}

void duck::screaming()
{
    this->_hp = this->_hp - 10;
    cout << "duck hp is:" << this->_hp << endl;
    cout << "duck is Screaming"<<endl;
}

#include "duck.h"  //頭文件
class dog
{
public:
    dog();
    void run();
    void attack(duck *dk);
    ~dog();
};

#include "dog.h"  //cpp
#include "duck.h"
#include <iostream>
using namespace std;
dog::dog()
{
}

void dog::run()
{
}

void dog::attack(duck *dk)
{
    cout << "dog attack duck" << endl;
    dk->screaming();
}



dog::~dog()
{
}

//主函數
int main()
{
auto dg = new dog;
auto dk = new duck;
dg->attack(dk);

delete dk;
delete dg;

return 0;
}


相對而言,Cpp就不是那麽友好了,不過這也只是同一思想得三種實現而已。

那麽問題來了,為什麽會有面向對象這個概念,這個例子中無外乎就是當滿足一個條件時(狗跑過去攻擊)某一變量得值發生變化(鴨子血量下降10),我用C語言也能實現啊

為什麽要面向對象,為什麽要class dog與class duck呢?

那麽我將在下一節裏說一下自己得看法,歡(shou)迎(xia)拍(liu)磚(qing)。

可能是最簡單的面向對象入門教程(一 ) 一個鴨子引發的血案