博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
可能是最简单的面向对象入门教程(二)为什么要有类型
阅读量:6083 次
发布时间:2019-06-20

本文共 2194 字,大约阅读时间需要 7 分钟。

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

我的答案是:

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

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

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

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

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 
using namespace std;class AnotherAnimal {public: void hurt() { this->hp -= 10; cout << "I am hurting" << endl; cout << "Hp is " <
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++也挺爽得,就是要手动得管理下内存,不过,问题不大。


 

那么类型如何抽象呢?

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


 

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

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

第二,(暂时不写)


 

那么问题来了?

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

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

 

转载于:https://www.cnblogs.com/leelds/p/9084739.html

你可能感兴趣的文章
Java线程:什么是线程
查看>>
mysql5.7 创建一个超级管理员
查看>>
【框架整合】Maven-SpringMVC3.X+Spring3.X+MyBatis3-日志、JSON解析、表关联查询等均已配置好...
查看>>
要想成为高级Java程序员需要具备哪些知识呢?
查看>>
带着问题去学习--Nginx配置解析(一)
查看>>
onix-文件系统
查看>>
java.io.Serializable浅析
查看>>
我的友情链接
查看>>
多线程之线程池任务管理通用模板
查看>>
CSS3让长单词与URL地址自动换行——word-wrap属性
查看>>
CodeForces 580B Kefa and Company
查看>>
开发规范浅谈
查看>>
Spark Streaming揭秘 Day29 深入理解Spark2.x中的Structured Streaming
查看>>
鼠标增强软件StrokeIt使用方法
查看>>
本地连接linux虚拟机的方法
查看>>
某公司面试java试题之【二】,看看吧,说不定就是你将要做的题
查看>>
BABOK - 企业分析(Enterprise Analysis)概要
查看>>
Linux 配置vnc,开启linux远程桌面
查看>>
CentOS6.4关闭触控板
查看>>
React Native 极光推送填坑(ios)
查看>>