A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 荣右铭 中级黑马   /  2013-10-20 16:09  /  1832 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

不同的抽象级别造就不同的思维方式
    假如你买了一台烤箱,这个烤箱至少有这样几个方法:加热,定时,开炉门,关炉门,温度调节,烤箱此时可以看成一个对象,这个对象是从烤箱类那里生成的,烤箱类可以看成是烤箱的设计图纸。
你买了一只鸡,准备用烤箱烤了吃,那你至少得遵循这样的操作流程:
1.把炉门打开
2.把鸡放入(假设鸡已经洗干净了)
3.关上炉门
4.设定时间(假设40分钟)
5.设定温度(240度)
6,按下加热开关,开始烤鸡
    这是一个顺序的过程,你不可能又开炉门又关炉门,也不能同时把鸡放入和按开关,总有先执行哪一步的问题,这是一个过程,我们称这种思想是面向过程的
    前面我们关注的是烤箱本身,后面我们关注的是怎样用这些东西来做一件事,这本来就是一个问题的两个方面,面向对象和面向过程,缺了哪一方面都不行。
    我们既可以从更高抽象的级别思考问题,也可以正好与之相反
    比如:烤箱的图纸可能是很多人通力协作才画出来的,也许最一开始的时候,纸上只有一个方块,但工程师A说,我们要有定时功能,工程师B说我们要有温控系统,于是烤箱类的子类就从工程师AB这里继承了两个方法,如果AB的想法仅仅是概括而没有具体实现,那么我们说烤箱类继承的是两个接口(接口里没有方法的具体实现),无论如何,我们讨论的 都是图纸的问题,都属于类的问题
    相反,低抽象度好像拆盒子,看看里面有什么东西,当我们按下烤箱开关的那一刻,电流从插座流进烤箱电路,包括一些电阻和电容之类的原件,流向石英发热器,石英发热器产生的热量使得空气开始对流,温度开始上升...平时我们大可不必关心这些东西,发热器能放出多少焦耳的热量和烤一只鸡有什么直接联系呢,只有在规定的时间内烤好就OK。再举个例子来说,读写内存的过程也不像往储蓄罐里扔硬币那么简单,后面复杂的机制足够写一本厚厚的大书,然而对于一个普通的程序员说,这些都不需要去考虑。有人把提高抽象度而隐蔽细节的方式,称之为封装、
    没有任何一种编程语言可以完全的称之为“面向过程”和“面向过程”的,如果有也仅仅可以说是推销语言的宣传口号,一个变量,一个结构体,都可以说成是对象,只不过是,到此为止还是能够继续往更高层次思考的区别,这 需要有特殊的机制,比如一个叫做“抽象类”或者“接口”的概念。总结起来,就是说,语言和语言之间的区别,说到底,都是思考问题方式上的区别,在最核心里,就像那个烤箱,无论烤箱本身还是开箱中的电路,都是在为同一件事服务的,那就是加热。
    JavaC#并不是没有指针了,而是不希望程序员用指针的思维方式思考问题,因为那样很容易犯错误又浪费时间,它们希望程序员更关注程序功能的实现,多过对内存操作的认识,就是这样。


评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

1 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马