可能是最简单的面向对象入门教程(二)为什么要有类型

好的,继续我们上一次的问题,为什么要有类型?

我的答案是:

  节约智力成本,是智力上的一种经济方案。

当体量大到一定级别的时候,面向过程的写法管理上会非常麻烦,但是并不是说面向过程实现不了面向对象实现的功能,就是麻烦了些(可能一个月的东西要做一年)

还有一方面就是,面向对象是仿照人思考方式的,所以,很灵活,这意味着到达目的地的路面不止有一条。

那么如何看待一个问题才是面向对象的精髓,在本质一些就是如何抽象问题,类型其实是无所谓的,这些都是人为的。

OK,回到上一次的鸭子问题,其实这个问题可以看做是一个富有攻击性的动物,去攻击另一个动物,然后被攻击的受伤流血。

还是直接上代码,以下为python实现

class AttackAnimal(object):
    def attack(self,another):
        print("attack another animal")
        another.hurt()
class AnotherAnimal(object):
    hp=100
    def hurt(self):
        print('I am hurt')
        self.hp=self.hp-10
        print('hp is ',self.hp)

if __name__=='__main__':
    attAnimal=AttackAnimal()
    anoAnimal=AnotherAnimal()
    attAnimal.attack(anoAnimal)

so,狗抽象成攻击性动物(AttackAnimal),鸭子抽象成另一种能受伤的动物(AnotherAnimal)

以下用C#实现:

class AttackAnimal
    {
       public void attack(AnotherAnimal another)
        {
            Console.WriteLine("attack another");
            another.hurt();
        }
    }
    class AnotherAnimal
    {
        int hp = 100;
       public  void hurt()
        {
            Console.WriteLine("I am Hurt");
            hp -= 10;
            Console.WriteLine("hp is "+this.hp);
        }
    }
    class Program
    {

        static void Main(string[] args)
        {

            var attackAnimal = new AttackAnimal();
            var anotherAnimal = new AnotherAnimal();
            attackAnimal.attack(anotherAnimal);
         }
}    

所以说面向对象还要C# /Java这种语言啊,以下是C++实现:

#include "stdafx.h"
#include <iostream>
using namespace std;

class AnotherAnimal {
public:
    void hurt() {
        this->hp -= 10;
        cout << "I am hurting" << endl;
        cout << "Hp is " <<this->hp<< endl;
    }
private :
    int hp = 100;
};

class AttackAnimal{
public:
    void attack(AnotherAnimal *ano) {
        cout << "attack another animal" << endl;
        ano->hurt();
    }
};


int main()
{
    auto attacker = new AttackAnimal;
    auto another = new AnotherAnimal;
    attacker->attack(another);

    delete attacker;
    delete another;

    return 0;
}

这么看来其实C++也挺爽得,就是要手动得管理下内存,不过,问题不大。


那么类型如何抽象呢?

思考类型的关系,然后简化它。(这个概念在讲到接口时很深入探讨。)


让我们讨论一下 面向对象得好处,

第一,是易于管理代码(相比于面向过程),偏向于人得思考方式。

第二,(暂时不写)


那么问题来了?

为什么要抽象?必须要有抽象吗?或者说抽象会给我们什么好处让我们必须抽象?

我将在下节探讨,欢迎讨论。

猜你喜欢

转载自www.cnblogs.com/leelds/p/9084739.html
今日推荐