思维和方法:冯诺依曼代码分析法:高效阅读理解和写代码

冯诺依曼代码分析法:高效阅读理解和写代码

数学家冯·诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备),这套理论被称为冯·诺依曼体系结构

冯诺依曼代码分析法,根据冯·诺依曼体系结构演变而来。
冯诺依曼代码分析法:以类class或结构体struct的代码对象进行分析。
有五个部分组成:
输入部分,输出部分,运算部分,控制部分,存储部分。
结合对象的上下文环境进行分析。

    冯诺依曼法的九大步骤:
      1,为何要有该对象?
      2,该对象的上下文环境是什么?
      3,该对象应该有的功能是什么?
      4,该对象提供的功能的作用范围是什么?
      5,输入是什么?
      6,有哪些运算操作?
      7,有哪些控制操作?
      8,有哪些存储操作?
      9,输出是什么?

    比如:Android系统手机的PowerManagerService类。
	
	PowerManagerService的冯诺依曼法的九大步骤:
    第一步,为何要有该对象?
	  即该对象的使命是什么。
	  1Android系统手机是电子产品:有硬件和软件组成。
	  2Android系统手机的软件部分即Android系统架构,
	  又分为:应用层(app),应用架构层(framework),运行层(系统运行库层,Android运行库)Linux内核层
	  
	    应用层(app)
	    应用架构层(framework)
	    运行层(系统运行库层,Android运行库)
	    Linux内核层
	  
	  3Android系统架构,为了方便管理,分成4层,而每层为了方便管理,每层又是以功能进行划分的多个模块进行管理。
	  今天我们分析的是framework层的系统电力power模块。因此为了方便framework层系统电力power模块的管理。
	  我们有必要进行合理的封装进行统一管理。
	  于是,诞生了PowerManagerService对象。
	  
    第二步,该对象的上下文环境是什么?
	  PowerManagerService对象,位于framework层,其上是app层,其下是系统库和linux内核,
	  因此该对象,注定要起着承上启下的作用。既要与app层交互,也要与系统库和linux内核交互。
	  所以,我们要有站在整个系统层面分析该对象的大局观。
	  具体上下文环境是:
	      主要有:app应用,电源power按键,显示器display,cpu电力控制,电池battery
		  其次有:传感器(psensor,light sensor)
	  
    第三步,该对象应该有的功能是什么?
	  站在第一步和第二步的该对象的上下文环境基础上,我们应该能推断出,
      因为该对象的使命是实现Android系统电力power模块的管理。
	  
	  所以,具体功能应该有:
	    1,关机与开机
	    2,系统的睡眠和唤醒,屏保
		  四种屏幕状态:
		    Awake状态:表示唤醒状态
            Dream状态:表示处于屏保状态
            Doze状态:表示处于Doze状态
            Asleep状态:表示处于休眠状态

		3,亮屏与灭屏,屏幕亮度
		4,充电与不充电
		5,省电考虑
		6,app应用的对power模块的需求功能
		  普通app应用和系统app应用:
		    保持屏幕常亮,如,播放视频时,需要该功能
		    允许应用控制系统灭屏和亮屏
		  
		
		主要实现方法:
		updatePowerStateLocked() {
		    updateIsPoweredLocked()
			updateStayOnLocked()
			updateScreenBrightnessBoostLocked()
			updateWakeLockSummaryLocked()
			updateUserActivitySummaryLocked()
			updateWakefulnessLocked()
			updateProfilesLocked()
			updateDisplayPowerStateLocked()
			updateDreamLocked()
			updateSuspendBlockerLocked()
		}
		
    第四步,该对象提供的功能的作用范围是什么?
    第五步,输入是什么?
	  对外提供的服务接口和回调接口: PowerManagerInternal
	  广播接收: BatteryReceiverDreamReceiver
	  属性配置config: 用到的属性值配置在framework/core/res/res/values/config.xml
	  设置配置SettingsObserver: Constants
	  
    第六步,有哪些运算操作?
	  该对象的内部方法:
	    updatePowerStateLocked()等等
    第七步,有哪些控制操作?
	  PowerManagerHandler
    第八步,有哪些存储操作?
	  该对象的属性:
	    mDirty,mContent,DEBUG等
    第九步,输出是什么?
	  该对象调用其他模块的方法,以及传入该方法的参数。
     return返回输出,或Callback回调函数输出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值