`
jack
  • 浏览: 392843 次
  • 来自: 温州
社区版块
存档分类
最新评论

语言逻辑边界和新手友好

阅读更多
下面的结论是对比我和arath的两个项目组得出的一个初步结论

  开发语言的逻辑边界越明显,新手在用这种语言做项目时,越不容易失去控制。

最近我和arath都有个类似的项目,就是需要写一个比较高性能的服务器程序。为此我们讨论了很多次。arath的项目用C,我的项目用C++.

   其中有一次,arath提到了项目中的基础设计有些被改乱了。排除了各种人为因素之外,C代码明显比C++代码更加容易随意编写,而不易检查。C并不存在某种物理或者逻辑上的设计边界,C++多了个class的概念。且抛开是否因为OO,明显的C++可以用class来做出最简单设计边界。

   新手,模仿性强且极易把代码写飞,能够很快的离开原本设计。C++ Class 划定了一个基本模块,可以让新手有模仿之处。但是C++ Class的边界存在让其多了一个参考坐标,使其不易跑飞。
   C++ Class 一般都是一个h,一个cpp配对,当需要在A类中添加代码,只能在A.h和A.cpp中添加。如果某块代码归类归错,也是极易查找和调整的。C相对没有这样明显的逻辑和物理边界。如果没有对设计上有个清晰了解和没有抵抗随意编写代码的诱惑,时间长了,最终代码可想而知。

   编写C++代码会比编写C代码更容易遇到各种问题,但是好在循序渐进。class,基本类库,框架,线程,DLL等等这些都是边界,这类边界的存在,新手可以一步一步的前进,每遇到一个边界,就需要停下来摸索和学习。class和class的交互,如何调用基本类库,如何使用框架,线程间怎么通讯,如何编写和调用DLL。
 
    C#,JAVA则明显比C++对于新手更加友好。强类型,不能多继承,单文件代码,这些规则比C++更加让新手更加容易理解和模仿。Ruby的Class边界极易打破,而且还可以写在不同的文件中。还有Mixin功能。就这点而言,新手项目不应采用Ruby。

   
  

  
分享到:
评论
4 楼 buaawhl 2006-10-13  

是啊。模块边界是非常重要的特性。

一门语言,我首先关注的就是 module, package, namespace 这些概念的支持。

一些看法。

java, python 的 package 机制算是做的最好的,能够和文件目录对应起来。管理文件比较容易。import 都可以到达 static method 级别。

c#, ruby 的 namespace, module 也不错,而且 namespace 之间有从属关系。这是 package 不具备的特性。

如果这两者综合起来,就比较完美了。

pacakge 之间有从属关系,同时对应文件目录。import 达到可能允许的最小级别, static method, innerClass, 等。

service.interface
service.impl
business.interface
business.impl

不仅这4个package之间不能有交叉引用,service 和 business 之间也不能有交叉引用。

3 楼 jack 2006-10-13  
Lucas Lee 写道
你说的边界的概念不就是封装?
逻辑上是模块、类,物理上是独立的一个或多个文件。

对 就是这个意思。
在做设计的时候,划分的模块,模块和模块之间有个明显的边界存在。设计人员和熟悉这个设计的开发人员,一般不会去主动越界,而新手们则不一定。
一条“看的见”的边界,对新手们而言,意义重大。
2 楼 dengyin2000 2006-10-13  
有道理
1 楼 LucasLee 2006-10-13  
你说的边界的概念不就是封装?
逻辑上是模块、类,物理上是独立的一个或多个文件。

相关推荐

    OC-添加新手引导页

    在iOS应用开发中,"OC-添加新手引导页"是一个...总之,OC实现新手引导页主要是利用UIScrollView的特性,结合`contentSize`和`contentOffset`,以及手势识别和视图动画,为用户提供一个友好且引人入胜的初次使用体验。

    软件测试新手学习宝典

    4. **测试方法**:分为黑盒测试(只关注输入和输出,不考虑内部结构)和白盒测试(考虑代码结构和逻辑)。灰盒测试则是两者的结合,部分了解内部工作原理。 5. **测试用例设计**:是测试过程中的核心环节,需要明确...

    Quartus-II.rar_FPGA altera quartus_quartus_quartus ii教程

    - **硬件调试**:支持JTAG接口的边界扫描测试,以及Altera的ChipScope集成逻辑分析器,方便硬件调试。 四、学习资源 "Quartus-II-设计基础.pdf"这份教程应该涵盖了Quartus II的基本操作和设计流程,包括项目设置、...

    入门级网页设计作业适合新手入门

    此外,测试是确保功能正常运行的重要步骤,包括边界条件测试和异常情况处理。 5. **用户体验**:除了技术实现,还需考虑用户体验。例如,提示信息应清晰易懂,错误处理要友好,操作反馈要及时。在功能5中,未选中...

    labview.doc

    此外,它还支持与其他编程语言(如C/C++、Python等)的集成,从而扩展了自身的功能边界。这种高度的可定制性和灵活性使得LabVIEW成为解决复杂问题的理想选择。 #### 七、易于学习和使用 对于新手来说,LabVIEW的...

    一个简单的贪吃蛇程序

    它的语法简洁明了,对新手友好,且功能强大,是学习游戏编程的理想选择。 在WinForm环境中开发贪吃蛇游戏,我们需要利用C#中的Windows Forms库来构建用户界面。WinForm提供了丰富的控件和事件处理机制,使得创建...

    初级食人花小游戏

    这些工具对于初学者来说非常友好,因为它们提供了丰富的文档和社区支持。通过这个项目,你可以学习到如何创建游戏对象、管理时间、处理用户输入以及应用基本的动画效果。 在解决游戏中的bug时,初学者会接触到调试...

    五子棋源码新手上传找点

    五子棋源码是一种编程实现的棋类游戏,主要由计算机科学中的算法和数据结构构成。五子棋,又称连珠、朱墨盘,是一种双人对弈的策略游戏,目标是...通过分析和学习这样的源码,开发者可以深入理解游戏逻辑和计算机思维。

    Ios ChineseChess

    例如,用户界面需要清晰地展示棋盘和棋子,同时提供友好的操作反馈;游戏规则解释可以帮助新手理解游戏;悔棋功能则需要记录每一步棋的状态;游戏结束的判定可能包括将死、困毙等多种情况;AI对弈模式则可能涉及到...

    贪吃蛇小游戏 java代码开发 源码 可运行

    在这个Java版本的贪吃蛇游戏中,开发者采用Java语言进行编程,这使得游戏可以跨平台运行,并且对新手友好,适合学习Java开发的初学者作为实践项目。 首先,我们要了解Java的基础知识。Java是一种面向对象的编程语言...

    俄罗斯方块Demo

    Java以其跨平台性、丰富的类库和强大的性能,成为许多游戏开发者的首选语言。在这个俄罗斯方块Demo中,我们可能使用了Java Swing或JavaFX库来创建图形用户界面(GUI),它们提供了丰富的组件和方法,使得开发者可以...

    wuziqi.rar_vc6.0

    6. **错误处理和调试**:在编写程序时,要充分考虑边界条件和异常情况,使用调试器如VC6.0自带的调试器来检查程序运行过程中的错误,确保程序的健壮性。 7. **代码优化**:虽然五子棋逻辑相对简单,但优化代码以...

    C# 扫雷游戏(注释详细 适合初学者)

    标签“C# 扫雷游戏(注释详细 适合初学者)”与标题一致,再次确认了该项目的主要特性:C#语言实现、详细的注释以及面向初学者的友好性。这表明项目开发者在设计时充分考虑到了教学和学习的需求,确保新手能从中受益...

    用js编写的飞机大战,注释都写着,小白也能看懂

    【描述】"这是用JavaScript写的飞机大战,一个比较简单的,图片资源都在压缩包里,注释也写了,大伙应该能看懂" 提示了游戏的实现基础和学习友好性。开发者使用JavaScript编写了一个简化的飞机大战游戏,这涉及到...

    snake贪食蛇游戏

    为了实现游戏逻辑,开发者需要编写一系列函数,包括初始化游戏、处理用户输入、更新蛇的位置、检测碰撞(包括蛇自撞和边界碰撞)、生成食物以及检查游戏结束条件等。在C++中,这些功能可以通过面向对象的设计实现,...

    godot-beginner-2d-platformer-1.1.0_game_godot_

    2. **碰撞检测**:Godot提供了多种碰撞形状,如CircleShape2D和PolygonShape2D,用于定义游戏对象的物理边界。这些形状与CollisionObject2D节点结合使用,可以检测游戏中的碰撞事件,从而实现障碍物的交互和平台间的...

    PLSQL Developer.rar 中文版

    它的主要目标是提供一个用户友好、高效且功能丰富的平台,以便于编写、测试和调试PL/SQL代码,这是Oracle数据库的主要编程语言。这款工具以其易用性、代码质量和生产力提升而受到广泛赞誉。 在PLSQL Developer中,...

Global site tag (gtag.js) - Google Analytics