本文假设,诸位看官完全不了解,何谓面向对象,如果已经入门请跳过。另:欢迎交流,不喜勿喷。
假设你只知道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 #includeusing 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"< 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)。