可能是最簡單的面向對象入門教程(一 ) 一個鴨子引發的血案
阿新 • • 發佈:2018-05-22
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)。
可能是最簡單的面向對象入門教程(一 ) 一個鴨子引發的血案