软件开发中的理想与现实(九)——三个臭皮匠,顶个诸葛亮

2024-02-12 02:30

本文主要是介绍软件开发中的理想与现实(九)——三个臭皮匠,顶个诸葛亮,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我说过要介绍一下项目组成员的,既然马上要真正开始做项目,那么互相好好了解一下还是很有必要的。
项目组包括我一共四人,分别是realdodo(我)、chanjinn、wumaomao、XophiiX。
我自不用多说,在项目中以项目流程的引导者身份出现,同时也参与开发。
chanjinn是我的学长(噢,忘说了,我们四个都是学生),做过好几个项目,编过很多代码,嵌入式、Linux都有不少研究,做项目很有思想,唯一只是C++基础相对差一点,不过不要紧,软件开发中的经验和悟性很重要。他笑起来很可爱(^______^),就像括号里面那样,很和蔼可亲。
wumaomao是团队中少有的C++高手,了解不少C++和设计模式的东西,有很强的编程能力,绝对将是项目中的中坚力量。而且他写得一手好字,有深厚的文化内涵,令我十分佩服。
XophiiX是项目组中最年轻的同学,比我小整四岁,但在编程方面已经很有感觉,并且酷爱游戏编程,对新东西非常感兴趣。我见到他之后就马上感觉到后生可畏,他超过我只是时间问题了!
在团队中能够拉到这么强大的阵容真是十分难得,我相当知足了。不过,如果放到更大的范围内比较,我们都是菜鸟中的菜鸟,我们的能力还远没有值得骄傲的地步。这不,2月20日,项目正式开张的第一天,我们就遇到大难题了。
我们项目的第一个迭代目标是,将用ASN语法描述的消息转换成C语言数据结构。至于什么是ASN、为什么要自己开发而不用现成的ASN到C的转换工具、为什么不用yacc、为什么用C++开发这些功能等问题我都不想回答,反正我们有自己的理由(呵呵)。写一个最简单的例子,假设有下面的消息:
     A ::= SEQUENCE
    {
        b BOOLEAN,
        c INTEGER
    }
那么转换成C语言之后应该是:
    typedef struct tagA
    {
        BOOL b;
        LONG c;
    }A;
相信一看这个例子就能够明白,SEQUENCE和struct相对,BOOLEAN和BOOL相对,INTEGER和LONG相对,只要处理好这个对应关系就问题不大了。
根据这个想法,XophiiX提出一种设计(白板上画的草图,我把它稍微整理了一下):
第一版设计
当然,这是一种有效的做法,但是扩展性实在太差,因为ASN的语法可不比C语言简单!例如这个消息:
    Sample ::= CHOICE
    {
        b BOOLEAN,
        c INTEGER
    }
那么换成C语言之后应该是:
    enum Sample_E
    {
        I_B,
        I_C
    };
   
    typedef struct tagSample
    {
        ULONG ulIndex;
        union
        {
            BOOL b;
            LONG c;
        }choice;
    }Sample;
噢,这是什么东西,根本就没有办法简单的进行对应了!如果用刚才简单对应的方式来处理,这个系统真的就会变成一个怪物了!所以这个方案就被否定了,啊,XophiiX不要伤心,在最开始这是很常见的事情。
为了方便确定设计的方向,我根据需求画出这个系统最基本的处理流程图(好了,大家终于知道我有多么菜了):
第二版设计
但是我还没有想好如何把它变成可分解的类,所以就算大家都比较认同这样的流程也没有用,不过作为一个大体思路,起码有助于指明方向。
马上,我们就把上面这个做了一个精简,并准备对各部分进行细化。精简图如下:
第三版设计
大家心里都明白,最重要也是最麻烦的就是如何收集词元信息,但是如何做最好呢?不知道!眼看着上午就要结束,白板上的图画了又擦,方案往往提出几分钟就被否,然后所有人都陷入一种抓狂之中。
OK,it's lunch time。人是铁饭是钢,还是去休息一下吧。
午餐的时候大家都比较沉默,虽然我一直安慰大家,每个项目开始的时候都是这样的,设计的灵感会突然冒出来的,不过大家还是不太相信。
嗯,不管怎么样,灵感还真的就出来了。不知道是谁提出了一个“作坊”模型,让大家眼前一亮,简单的说就是,把处理ASN文件得到的词元当作零件,收集词元信息当作零件分类,修饰词元信息当作零件组装,输出C文件则是最终包装,那么“作坊”(就是收集词元信息)负责进货(得到零件)和销售(零件分类输出)。按这样的说法,为了进货,我们需要一个库存;为了分类,我们需要工人;为了管理工人,我们需要一个经理。他们的职责也很清楚,库存负责存放零件,经理负责根据库存情况划定工作范围并“雇佣”合适的工人,工人则仅仅专注于工作。他们的关系如下:
第四版设计
这个图并不详细,甚至有些明显地错误,但是我们已经可以按照中央的想法进行工作了!综合来看,现在可以把整个处理过程表达如下:
第五版设计
下面我们就可以针对这种设计,具体规定这几部分之间的接口了!在规定接口时我们发现,这个流程并不具有弹性,因为作坊必须知道它的顾客(修饰词元信息)的情况才能工作,而我们是想实现一个面向广大人民群众的作坊,所以我们引入了一个代理商来解决这个问题。嗯,代理商具体是什么呢?哦,直接用main来做这样的代理其实就可以了!
最终,今天的框架如下:
第六版设计
至于接口,我们也慢慢的一一确定,此处不再赘述。今天的晚餐吃得特别香。
好了,喘口气,今天收获很多,等会我们来好好总结一下。

这篇关于软件开发中的理想与现实(九)——三个臭皮匠,顶个诸葛亮的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/701437

相关文章

三国地理揭秘:为何北伐之路如此艰难,为何诸葛亮无法攻克陇右小城?

俗话说:天时不如地利,不是随便说说,诸葛亮六出祁山,连关中陇右的几座小城都攻不下来,行军山高路险,无法携带和建造攻城器械,是最难的,所以在汉中,无论从哪一方进攻,防守方都是一夫当关,万夫莫开;再加上千里运粮,根本不需要打,司马懿只需要坚守城池拼消耗就能不战而屈人之兵。 另一边,洛阳的虎牢关,一旦突破,洛阳就无险可守,这样的进军路线,才是顺势而为的用兵之道。 读历史的时候我们常常看到某一方势

【软件工程】软件开发模型

三、瀑布模型  四、几种软件开发模型的主要特点 题目 判断题 选择题 小结

集成电路学习:什么是SDK软件开发工具包

SDK:软件开发工具包         SDK,即Software Development Kit(软件开发工具包),是一套由软件提供商或其他组织提供的开发工具集合。这些工具旨在帮助开发者更快速、更便捷地创建、测试和部署软件应用程序。以下是对SDK的详细解释: 一、SDK的定义与组成         定义:SDK是一套包含编程工具、代码示例、技术说明文档、调试和测试工具等内容的软件包,有

从知识视角理解软件开发

软件构造中的核心知识:业务知识与架构知识 在软件构造过程中,最关键的两类知识是业务知识和架构知识。业务知识回答“什么是正确的软件”,而架构知识解决“如何正确地构造软件”。从这两个方面深入理解软件构造,可以帮助我们在设计和开发过程中做出更明智的决策。 1. 业务知识:定义正确的软件 业务知识是关于如何解决现实问题的知识,包括业务的目标、规则、限制、和已有的解决方案。它定义了“正确的软件”是什么

如何利用mHand Pro动捕数据手套连接虚拟与现实?

数据手套作为虚拟现实中的一种交互动捕设备,能够模拟真人手部的动作和感知反馈,实现人机交互的效果。随着虚拟现实技术的不断发展,数据手套也在不断地改进和升级。 mHand Pro是一款由拥有多年经验的惯性动作捕捉技术团队广州虚拟动力研发的数据手套。这款手指捕捉动捕设备具有轻便易使用、响应速度快、数据采集精准、硬件集成度高等优势。使用者穿戴这手指捕捉的动捕设备后,能够实时采集真人手部、手腕、手指弯曲等

第二章 可行性研究与软件开发计划简记

第二章  可行性研究与软件开发计划 可行性研究的任务:回答所开发的软件系统有无可行的解决办法或者这个系统值得开发么。 可行性研究大体可分为三个大的方面:工艺技术、市场需求、财务经济状况。 可行性研究的目的:就是尽可能的用最小的代价在尽可能短的时间内确定问题是否能解决。 可行性研究的解决方案:一般集中在 1.技术可行性2.经济可行性3.操作可行性。

软件工程技术专业软件开发综合实训室解决方案

一、行业背景与前景分析 1.1 软件工程技术专业就业前景 近年来,中国的软件行业取得了显著的成就,即便在全球经济受到新冠疫情冲击的情况下,仍保持了强劲的增长势头。据工业和信息化部发布的数据,2021年我国软件和信息技术服务业的业务收入达到85371亿元人民币,同比增长18.3%,远超同期国内生产总值的增长率。这一成就不仅体现了中国软件行业的韧性和发展潜力,也为未来的持续增长奠定了坚实的基

震惊,从仿真走向现实,3D Map最大提升超12,Cube R-CNN使用合成数据集迁移到真实数据集

震惊,从仿真走向现实,3D Map最大提升超12,Cube R-CNN使用合成数据集迁移到真实数据集 Abstract 由于摄像机视角多变和场景条件不可预测,在动态路边场景中从单目图像中准确检测三维物体仍然是一个具有挑战性的问题。本文介绍了一种两阶段的训练策略来应对这些挑战。我们的方法首先在大规模合成数据集RoadSense3D上训练模型,该数据集提供了多样化的场景以实现稳健的特征学习。随后,

EasyConnect 现实 Harfbuzz version too old 解决方案

https://www.cnblogs.com/cocode/p/12890684.html

软件开发教学:基于数字药店系统源码的医保购药APP开发策略

本篇文章,小编将详细探讨基于数字药店系统源码的医保购药APP开发策略,并提出一些开发中的关键技术要点。 一、数字药店系统源码的功能概述 数字药店系统源码是构建在线药店的基础,它集成了药品信息管理、订单处理、支付系统、用户管理等核心模块,旨在实现药品销售的全流程数字化。一个典型的数字药店系统包括以下几个主要功能: -药品信息管理:支持药品分类、库存管理、药品搜索和详细展示。 -订单管理: