可能是最简单的面向对象入门教程(一 ) 一个鸭子引发的血案

本文假设,诸位看官完全不了解,何谓面向对象,如果已经入门请跳过。另:欢迎交流,不喜勿喷。

假设你只知道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)。

猜你喜欢

转载自www.cnblogs.com/leelds/p/9073659.html