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

Posted leelds

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可能是最简单的面向对象入门教程(一 ) 一个鸭子引发的血案相关的知识,希望对你有一定的参考价值。

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

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

 

以上是关于可能是最简单的面向对象入门教程(一 ) 一个鸭子引发的血案的主要内容,如果未能解决你的问题,请参考以下文章

Python---面向对象

2面向对象设计原则

Python入门-初始面向对象

《Java从入门到放弃》JavaSE入门篇:面向对象语法一(入门版)

《Java从入门到放弃》JavaSE入门篇:面向对象语法一(入门版)

面向对象思想可能是错的