本帖最后由 keer_zu 于 2014-5-12 11:26 编辑
linux内核中充满了面向对象的思想,mod本身就体现了面向对象的思想,所有的驱动程序或者其他内核功能都可以模块的形式被‘打入’(加载insmod)内核。模块的加载、卸载、接口的定义等等,无不体现面向对象的思想。
同样是C语言的应用,基于有限资源环境下的嵌入式应用完全可以通过UML对系统进行建模(不要说你不会就排斥它,都是学出来的,当年用惯汇编的人,觉得C也看不懂,转过来就不想再回去了/极个别除外,linus开始也用汇编,当他开始转向C的时候,他惊叹工作效率之高,当然他排斥C++或许有一定道理)
用结构体去实现一个类是很轻而易举的事情,在此基础上实现类的关联也非难事。当然继承有点繁琐,记得《设计模式》的作者也建议少用继承,不过用继承实现接口类还是很有用的。用C实现面向对象有几个理由:
1. 很多时候,编译器不支持C++,特别是针对微处理器的。
2. C++有看不见的手,不在你掌控之下的‘小动作’有些时候再嵌入式环境下是难以容忍的。
同时这些看不见的操作本身是占有资源的,这在很多嵌入式环境下也无法容忍。
基于面向对象的设计方法,今天已经很成熟了。它没有必要和面向对象的设计语言绑定,其实用汇编也可以实现面向对象的设计,只是麻烦些而已,设计思想就是设计思想,不要将他等同为语言,这往往是我们初接触者的认知误区。
至于怎么从需求分析中得到系统的类结构,这个目前还没有软件能自动做到,你筛选出来的类,以及类与类之间的关系是否更完美,完全取决于你对面向对象的理解,以及你对系统本身的理解,以及你拥有的设计经验,这个是长期实践总结的结果,所以一个优秀的嵌入式架构师是很难得的。
你真正开始迈入这个门槛后,你一定再也不想回到过去堆砌代码的时代,如果你能随心所欲使用‘设计模式’,你将体会到这样做的好处,你将乐此不疲。。。。
记住,这才是你做为代码工作者的目标:你是一位设计人员,你是一位工程师,而不是代码的堆砌者,你不是一位‘匠人’。
|