微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 我所理解的代码设计

我所理解的代码设计

时间:08-24 来源:互联网 点击:

首先任何设计模式都是基于现实的客观存在,使用计算机容易实现的方式去表现存在。
主流模式分析
面向过程的设计:
对于过程处理的东西,例如流程型的的东西,使用面向过程的设计

基于对象的设计:
一个东西,如果有一个核心的数据,加上围绕核心数据的接口,那么就使用基于对象的设计

面向对象的设计:
一个系统,里面有很多的对象,对象间互相交互,协调工作,那么就使用面向对象的设计

可见,面向过程,基于对象,面向对象都是客观事物的本身特性,如果一个工作明明就是流程性的,你却要使用OO去实现,那么就得不偿失,反而会增加开发人员的工作量。

面向过程,基于对象,OO是可以同时存在的,是没有优先级别的,是不矛盾的。

面向过程,基于对象,OO是思想方式和设计方法,具体的实现方式千变万化,举例:
面向过程,可以采用C语言直接实现,
step1
step2
step3
也可以在C语言中采用数据标记来实现
while(1){
if(step == 1)
{
func1();
step = 2;
}
else if(step == 2)
{
func2();
step = 3;
}
...

}

基于对象,在C中的实现,可以采用结构中的数据和函数指针来表示,也可以采用窗口加上消息处理来表示

面向对象,基本类似于基于对象,只是其关注点更在多个对象关系而已。

各种模式没有优劣之分,各种模式的实现方式在同一个语言中都有很多种,也就是说设计真的和语言没有什么关系。
现实世界的复杂,并非以上3中模式所能表达出来的,在实际编程中有很多的模式。
而且现实世界中存在很多的并非上面3类主流模式所能表达的东西,例如递归算法,函数式,但是无论什么存在,我们总是有变通的办法来表达的,除非那个存在计算机处理不了。

关于面向对象的错误理解
我觉得甚至云风等高手对于面向对象都没有本质的认识,面向对象本质是关注点是对象间关系,对象间通过接口来互动 ,而不是云风所说的“我所理解的面向对象,是让不同的数据元有共同的操作方式,适合成组的处理”,共同的操作方式只是关注对象间关系的一个有效收益,也就是如果一组对象间有一组相同的接口,那么我们对这一类对象的操作,可以采用一个相同的方式来进行。例如对于window的UI对象,可以发送update消息,让他们刷新。至于C++程序中的构造函数、析构函数、类、继承、虚拟函数、持久化等等更就不是面向对象的本质意义,只是实现方式,或者利于对象使用的工具。
C++语言引入的东西对于实际问题的解决只有有限的效果,但是却引入过多的复杂度,真是得不偿失!

其实就设计来说,几十年来,没有什么本质的进展,例如OO的本质意义,在无数次的软件工程教材中有强调,划分模块并即针对模块的接口设计,隐藏模块的实现细节,所以说,OO不是什么新的东西,只是基本原则上的一个有益的总结实现。想想一下unix的泛文件的概念。
当然语言工具是有很大的进步了,例如虚拟机、各类动态解释语言,但是本质依旧没有变化。

关于OOC
面向对象的C语言编程中,就我目前看来,作者很大的受到C++的影响,无视OO的本质,反而企图用C模拟C++的实现。实际上使用C实现OO并没有一定的强制方法,对象接口就可以有很多种,全局数据、基于通讯的消息、函数等。

看看论坛上关于编程的问题,我真为中国的开发者悲哀。

由于我在放弃c++之后,导致开发世界观变化,

刚好这几天在外调试机器,中间空闲时间较多,就想了一下设计模式。
模式是无处不在,这是基调,例如设计模式中关于建筑中的模式说明。
设计模式中的模式是建立在类继承上,如果没有了类,例如c语言,那么设计模式要发生大的改变,至少很多的设计模式不存在了或者变形了。
模式应重在意图,和具体的实现手段没有多大关系。例如工厂模式,在c语言中,也可以实现,不过,其实现方式可以是通过提供一个消息对象给client,client通过发消息给消息对象,如果消息中的id=1,则生成某个东西,如果id = 2,则生成另外一个东西。这个也是工厂了。
设计模式,特别是GOF中的设计模式无关紧要,学不会也没有关系,思想是相通的,对模式的理解是慢慢进行的,快速学会也不会用。
再次强调,OO和设计模式根本就不是银弹,只是一种思想,而且这个思想很久以前就存在。所以老老实实的做设计演化吧,不要妄图通过学习OO和设计模式就能一次作出完美的设计。
对于具体的问题来说,业务永远是最核心的东西,设计模式和语言工具对于业务的解决毫无帮助,反而分散了开发者的心思。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top