编程工具范文
编程工具范文(精选10篇)
编程工具 第1篇
提高软件开发效率、降低开发成本、减轻编程负担是软件开发追求的目标[1,2,3]。在软件设计和开发过程中,人们通常采用的方法有如下两种方式,第一种是基于代码重用:利用类的特性,创建用户定义类;对公共处理用公用的函数实现;在可视化编程中,充分利用ActiveX控件实现目标功能;调用API函数解决实际问题[4]。另一种是基于共性之上的追加开发,即针对某类业务做成基本软件包,然后在基本软件包基础上根据各用户的特殊需求做追加开发,行业针对性很强的软件及ERP类软件均属于这一方式。第一种方式在一定程度上减少了代码编写量,但不同系统共用部分的分析及程序代码的编写工作量依然很大;第二种方式代码编写的总工作量会大幅度减少,但对基本软件包的理解往往需要在前期花费大量的时间。目前市场上较成熟的ERP软件,比如EBS、SAP等业务内容非常庞大,对于中小型企业,在硬件(设备)和人力资源(既懂业务又懂计算机)上都难以到位。因此,大多数企业仍然是根据自身实力和业务需要开发专用的管理软件。
为提高编程效率,研究者们提出了基于代码重用和常规结构程序的自动化编程方法[5,6],国内也有部分自动化编程工具问世,旨在让不会编程的人通过无代码操作实现简单的管理信息系统,这些工具往往只支持Access或SQL Server数据库,有一定局限性,对于不懂系统设计的人要用好它不是很容易,而对于懂得系统设计和编程的人来说,在某些方面反而感觉利用工具更加繁琐。日本一些软件开发机构致力于开发针对日文的文本分析工具来实现从设计书到程序自动生成,但目前还处于文本分析工具的完善阶段。本自动化编程工具通过在工具界面进行编程设定来完成自动化编程,而编程设定的依据来自于详细设计书,它实现了从设计书到代码的半自动化编程。
在软件开发过程中,我们通过拷贝、修改的方式,编写了很多类似的代码。这样的编程工作机械而枯燥,若修改不当将会花费较长的调试时间,如果能把这样的工作交给计算机来完成,将达到事半功倍的效果。我们只要抽象出各种系统开发的共性,找出编程规律,便可以利用计算机进行自动化编程,从而有效地减轻编程者负担,提高编程效率。同时,用计算机编写的程序,规范且风格统一,可增强程序的可读性及可维护性。
1自动化编程的可行性分析
虽然管理信息系统的设计各具特色,处理的信息也千差万别,但它们所实现的功能和操作模式往往是相似的[7]。通过对现存管理信息系统的比较分析,我们发现不同的管理信息系统从功能上划分通常包含三部分:信息登录、报表打印、批处理。批处理基本都是针对业务内容的,共性抽象较困难;报表打印中的数据生成部分及表格输出格式与业务关联也比较强,但用于数据检索条件输入的输入控件编程与信息登录处理类似,报表制作流程也基本一致的;信息登录处理有50%以上的处理集中在对界面(VB中的窗体form)中输入控件的编程处理,包括输入数据类型控制、光标走向、数据检查,这些处理与每一个输入控件都相关,故编程量较大,但编写的程序却非常雷同且有规律可循,此外,非输入控件的事件处理,除业务逻辑以外,其处理流程也是按统一方式设计实现。而同一系统由于数据处理类别不同,往往有多个甚至几十几百个类似的界面或功能模块设计。由于不同系统之间以及同一系统内部不同模块之间具有类似的处理模式,因此我们就能设计出一种通用的模式,基于这种模式来实现自动化编程。以下主要针对信息登录处理部分,探讨其自动化编程的实现。
2自动化编程工具的实现
针对大多数高级语言都有相应的可视化编程工具,通过控件拖放完成界面布局。由于用户界面的视觉效果要求较高,因此界面设计通常是手动实现。在可视化设计过程中,会自动生成一个资源描述文件,例如VB是以frm为扩展名的文件,VC是以rc为扩展名的文件,而.net系列、Jbuilder、Eclipse等在可视化设计完成后都会形成一个这样的资源描述文件。可视化设计之后的编程,基本都是针对资源文件里的控件。我们通过读取资源文件中需要进行编程的控件,并以一览方式(表格形式)表示,在一览表示中根据设计书进行编程设定,然后依据设定开始自动化编程。本自动化编程工具以VB6.0为平台,在可视化编程完成后实现程序自动生成。本编程工具本身也利用VB6.0开发实现。
2.1设计思想
分析可知,针对某一界面的编程包括两大部分:输入控件和动作控件(选项按钮、命令按钮、菜单等)。动作控件主要集中在系统功能实现和处理流程控制上,在设计时,只要遵循以下原则,各个界面的编程基本是一致的,因此就能较大比例地实现自动化编程。
(1) 采用某一可行的设计模式。
(2) 不同界面除输入控件以外的同类控件采用相同的命名。
(3) 不同界面的同类模块级变量采用相同的命名,如数据库连接相关的变量、主记录集、用于特殊判断的标志符等。
(4) 要求控件及变量命名含义明确,与数据库字段相关联的控件采用控件或数据类型标识与字段名组合命名。
不同界面中输入控件处理的内容不同,输入控制、错误检查和格式控制也各不相同,因此在不同界面的编程中,针对输入控件的编程差异较大,为了实现针对不同界面的动态编程,我们通过读取可视化编程完成后形成的资源描述文件,将需要进行编程控制的输入控件读出并用MSFlexGrid控件(本工具中的控件名为grdList)一览显示于界面,在一览显示中根据设计书进行编程设定,来实现不同输入控件的动态编程。
2.2界面设计
如图1所示,自动化编程工具的界面组成如下。
1) 编程文件选择栏
输入编程对象文件,在VB6.0中资源描述文件和编程文件是以frm为后缀的同一文件,因此这里实际上是指定了资源描述文件和编程文件。
2) 控件读入
此操作完成从资源描述文件读出需要进行编程的控件,可视化设计中,某些控件是不需要进行编程的,比如只用于显示的某些Label控件,对这样的控件特殊命名,在忽略读入控件栏输入特殊命名标志符来控制非编程控件的读入。
3) 输入控件编程设置一览
每一行为一个控件,每一列是对输入控件的常用编程设置,主要包括控件类别(主键项、检索项、普通项)输入字符类别控制、格式化控制、数值范围控制等编程设置项目,通过鼠标单击某单元格,内容设为"○",表示该控件在编程中需要对相应列进行对应编程,再次单击可取消设定,双击单元格可直接输入文字,主要用于格式化设定和检查标准设置,比如日期对应列设置为"YYYY/MM/DD",表示按此格式显示日期,最大值对应列设置为60,错误检查时就要验证数据是否超过60。
4) 操作说明
为使用方便,当鼠标停留在一览表格的行首某列时,操作说明栏会给出相应列设置所代表的意义,从而引导编程者进行编程设定。
5)整体编程内容设定
根据系统的具体设计,我们可以在界面中选择自动生成输入控件以外的其他程序,如父界面和子界面的相互切换程序、数据库连接程序、权限检查程序等。当用户对某一部分编程提出与通用设计不同的要求时,我们可以不选择这部分编程,而利用手工来完成,在需要自行加入程序的位置本工具自动写入提示注释以提醒编程者自己加入该部分处理的程序。
6) 编程实施
编程设定完毕,便可根据设定内容向编程文件中写入程序。
2.3程序实现
利用VB6.0写文件的功能,将程序按行写入对应的编程文件来实现自动化编程。编程内容包括以下部分:初始化处理、各命令按钮编程、输入控件编程以及与这几部分相关的被调函数的编程。
逐行写入程序涉及行文字列编辑,为便于指定空格数目(句前缩行)和带回车的程序行写入,工具中设计CatString函数来处理待写入程序行。
按以下顺序完成程序的自动编写。
1)模块级共用程序做成
以写方式打开编程文件,后逐行将语句写入文件。
编程界面中“权限控制程序做成”为选中状态时,定义权限标志变量。
如此依次进行所有变量定义。
2)针对输入控件的编程
通过实用性和可操作性结合分析,Key Down、Got Focus、Key Press、Validate四个事件处理即能友好地完成输入控制相关的功能,利用Key Down事件实现常用操作中利用键盘上下箭头实现光标按Tabindex正反向顺次移动;利用Got Focus事件实现控件内容的反显,醒目地提示用户光标位置(错误检查时定位出错位置);利用Key Press事件实现输入字符控制,让非允许输入无效;利用Validate事件,来完成及时输入错误检查和格式化。不同输入控件针对这四个事件处理的程序基本类似,因此我们在工程的公共模块中定义四个通用的事件处理函数(Key Down Event、Got Focus Event、Key Press Event、Validate Event),将输入控件对象本身作为函数参数,各输入控件在事件处理函数中对其进行调用即可。
在Key Press和Validate事件中完成对各控件的输入字符控制、格式化控制和输入内容检查,实现方法是,根据控件一览的设置,将输入控制方式、格式化方式和检查形式按一定方式编辑成字符串,然后将该字符串设为该控件的Tag属性,在Key Press和Validate事件处理函数中,通过读取Tag属性完成输入控制、格式化处理和输入内容检查,例如tag属性值“Keypress|9,/&&DATE|YYYY/MM/DD”(&&为项目分隔符)表示在Keypress事件中只能输入数字和斜杠,在Validate事件中检查输入数据是否日期,并格式化为带斜杠的日期表示形式。由于控件名本身是函数参数,这样,各控件编程代码一致,因为各自不同的Tag属性各控件执行时表现出不同的功能。
从控件一览逐行读取控件及编程设置,完成各输入控件的事件处理编程,由于这些事件处理已抽象为函数实现,编程只涉及函数调用,因此编程内容简单。以下为Key Press事件的编程实现:
上面程序中,变量x_ctrlname为控件名对应的列编号,x_Sel Cob为下拉选项标志对应的列编号。程序循环结束,一览中的所有输入控件的Key Press事件处理编程自动完成。Get KeyPress Event函数实现如下,参数str Ctrlname为控件名,str Sel Cob标识是否是仅供选择而不允许键盘输入的下拉列表框控件:
以上编程工具程序生成的代码如下:
以上为txt Birthday控件的Key Press事件处理程序,其中,通用的事件处理函数Key Press Event函数将根据Tag属性值进行可输入字符的控制。程序如下:
System Err Proc为错误处理函数,给出错误信息、发生界面名和函数名等错误信息提示。自动编程实现了Key Press事件处理外,还做成了调试用的预编译处理程序,错误处理程序,并实现了规范的两字符程序缩行书写。Key Down、Got Focus、Validate事件处理程序也可以类似生成。
3)动作控件的编程
遵循设计思想中的设计原则,各动作控件的编程内容及处理流程大体是固定的,将固定语句顺次写入编程文件即可,涉及数据库操作的SQL语句和特殊业务逻辑等需要手动编程部分以注释方式向编程文件中写入提示信息,编程者根据提示进行手动编程。
3应用实例
本自动化编程工具在日本都市银行债权管理系统和健康管理系统的开发中使用,这两套系统都涉及大量的不同种类的信息登录、修改、删除和查询处理。在进行完需求分析后,我们向用户推荐了实际开发中常用的一套设计模式,得到用户认可,并利用自动化编程工具予与实现。
在该模式的界面及功能设计中,我们利用同一界面实现登录、修改、删除、查询四项功能,界面由标题区、功能选择区、检索区、信息输入区、动作按钮区、状态栏组成。标题区包括系统标题及界面标题,用Label控件实现;功能选择区用选项按钮实现,用于界面在登录、修改、删除、查询功能状态间切换;检索区包括检索条件输入项和检索动作按钮,检索条件输入项为数据库表定义的主键项或索引项,用文本框(textbox)或下拉列表框(combobox)实现,检索按钮执行检索处理;普通项(非检索项目)置于信息输入区,当登录信息只涉及一个表且项目数不多时,用文本框和下拉列表框实现,图片信息可用图片框(PictureBox)实现,当数据项较多时,为了控制登录界面大小及实现处理内容的分类,利用SSTab控件的多个选项卡来实现,若需在同一界面实现多表数据的处理,对1:1关系的多表数据,利用SSTab控件的不同选项卡来放置不同表的内容,对1:N关系的多表数据,可在选项卡中用网格控件(MSFlexGrid)实现;动作按钮区设置执行、复原、取消、退出四个按钮,用于对界面状态、输入内容及数据入库进行控制;状态栏显示操者信息、处理状态及进度。
在本设计中通过控制登录、修改、删除、查询四种状态下主键项目和普通项目及动作按钮的可用状态(enabled属性),来防止系统使用时的误操作和降低编程复杂程度。
基于这种模式,针对输入控件的四大事件程序处理程序、四种功能状态下控件可用状态的设定和动作按钮的主控制流程全部由自动化编程工具完成,占总编程量的70%以上,只有对数据库操作的部分较复杂的SQL语句和需要根据业务进行特殊计算的界面显示项和登录项目需要手动编程来完成。
4结束语
自动化编程的目标为从设计书到程序自动生成。由于自然语言二义性较大,目前还没有完善的面向设计书的自动化编程工具,我们有望通过制定统一的设计书书写规范,开发出针对各种编程平台的自动化程度更高的编程工具。
参考文献
[1]宫涛,侯红,李玉鹏.一种基于OSS的开发框架及其应用[J].计算机应用与软件,2008,25(4):97-99.
[2]黄健,吴延海,刘晓佩,等.如何高效开发企业级的数据库信息系统[J].计算机工程与设计,2005,26(8):2168-2169.
[3]林冰玉,彭四伟,汪须忠.软件开发自动化平台的研究与应用[J].计算机工程与应用,2005(9):122-124.
[4]甘露.如何提高面向对象编程效率[J].电脑开发与应用,2004(1):44-45.
[5]Zhuo Kang,Yan Li,Li-shan Kang.Automatic Programming Methodolo-gy for Program Reuse[C]//Proc.of International Conference on Com-putational Intelligence and Security,2006,1:208-214.
[6]Reformat M,Chai Xinwei,Miller J.Experiments in automatic program-ming for general Purposes[C]//Proc.of15th IEEE International Con-ference on Tools with Artificial Intelligence,2003:366-373.
编程工具 第2篇
(一) 金融工具的定义
《国际会计准则第32号金融工具》揭示和呈报关于金融工具的定义是:一项金融工具是使一个企业形成金融资产, 同时使另一个企业形成金融负债或权益工具的任何合约。美国财务会计准则委员会颁布的第105号财务准则公告认为, 金融工具包括现金、在另一企业的所有权益以及如下两种合约: (1) 某一个体向其他个体转交现金或其他金融工具, 或在潜在的不利条件下与其他个体交换金融工具的合约规定的义务; (2) 某一个体从另一个体收到现金或其他金融工具的合约规定的权利。
通常认为, 金融工具是一种交易工具, 是在金融市场中可交易的金融资产, 是证明债权、债务关系并据以进行货币资金交易的合法凭证, 也是货币资金或金融资产借以转让的工具。
(二) 金融工具的分类
根据财产类型, 金融工具可分为债务型和所有权型两类。更普遍的分类则把金融工具分为现金类和衍生类。现金类包括证券和贷款、存款等, 衍生类分为交易所交易的金融衍生品和柜台 (OTC) 金融衍生品。金融工具具有表外风险, 不同形式其金融工具的金融风险不同。随着金融市场的发展, 衍生类金融工具越来越受到重视。
(三) 衍生金融工具
国际互换和衍生协会认为, 衍生金融工具是一种为交易者转移风险的双边合约。合约到期时, 交易者所欠对方的金额由基础商品、证券或指数的价格决定。衍生金融工具是市场经济高度发达的产物, 是一种新型的派生金融工具, 是在即期交易的商品合约、债券、股票、外汇等原生金融工具的基础上派生出来的。衍生金融工具一般包括股票期货合约、股指期货合约、期权合约、债券期货合约等。衍生金融工具具有4大特征:跨期交易、杠杆效应、不确定性和高风险、套期保值和投机套利共存。
随着金融市场的发展, 人们意识到, 衍生金融工具的积极作用非常明显:首先, 价格的形成有利于资源的合理配置和资金的有效流动, 同时加速经济信息的传递, 促进金融市场的发展;其次, 衍生金融工具可以转移风险, 提高金融市场效率的同时增强国家的金融宏观调控能力。但是, 在此次席卷全球的金融危机中, 衍生金融工具的负面作用受到了人们的诟病。
二、金融危机与衍生金融工具关系分析
从2006年春季开始, 美国的次贷危机开始显现, 2007年8月, 美国次贷危机开始波及欧盟、日本等世界主要金融市场。至今, 金融危机已经波及了全球。分析其形成过程可以发现, 利率的上升和住房市场的持续降温是直接原因。
在2006年之前的5年里, 美国利率水平较低, 而住房市场持续繁荣。一些贷款机构便向信用程度较差和收入不高的借款人提供贷款。银行给购房者放贷后, 商业银行便通过投资银行, 对贷款进行重新包装, 通过发行和销售CDO (Collateralized Debt Obligation, 债务抵押债券) 让债券持有人分担房贷风险, 以便使自己尽快回笼资金。
接着, 投资银行又推出了高风险的新产品CDS (Credit Default Swap, 信贷违约掉期) , 由于投资银行从CDO中拿出部分资金作为保险金, 因此, 保险公司也加入其中。从此, 具有高风险的CDO全面进入美国金融市场。之后, 美国金融机构把原始的金融产品分割、打包、组合, 从而开发出多种金融衍生产品。
由于衍生金融产品在一定条件下可以实现复杂的风险管理, 又能降低交易成本, 同时蕴含着巨大的利润, 因此, 投资者纷纷加入到衍生金融产品的交易中来, 其规模与影响范围也越来越大。而随着衍生金融产品的种类越来越丰富, 其风险也越来越隐蔽、越来越难以评判。
随着美国住房市场的降温, 加上短期利率的提高, 次贷的还款利率相应地大幅提升, 这就使得购房者通过出售住房或抵押住房再融资变得困难, 购房者的还贷压力大大增加。当大批次贷的借款人不能按期偿还贷款时, 违约现象大量出现, 从而广泛影响了银行、保险公司等机构, 金融危机便由此产生。
研究发现, 衍生金融工具可以对冲风险, 但是独立使用衍生金融工具却隐含着巨大的风险。从衍生金融工具的4大特征可以看出, 衍生金融工具是一种具有高收益性和高风险性的投资工具, 因此, 这就大大增加了市场上的投机、套利机会。而从此次金融危机的产生过程可以看出, 次贷危机引发了金融危机, 而次级抵押贷款、CDO、CDS等衍生金融工具则是引发次贷危机的重要因素。
三、应对金融危机的措施
(一) 完善相关法律, 加强人才培养
从此次金融危机中, 各国均应提高对衍生金融工具的认识, 加强探索和研究, 从而对衍生金融工具产品进行合理的定价并进行有效的风险管理。同时, 各国还应完善关于衍生金融工具的相关法律, 使对其监管有法可依。另外, 加强衍生金融工具风险防范专业人才培养也非常紧迫。
(二) 加强自身监管, 进一步防范风险
1. 金融机构应重点加强内部的自我监管
金融机构应重新确立发展目标及行为准则, 着眼长远, 采取有效的措施降低经营风险, 提高经营效率, 深化金融改革;建立从宏观至微观的控制系统, 规定交易种类和交易量等, 谨慎选择金融产品;重点加强内控, 严格监管交易程序, 实行操作权、结算权、监督权的分离, 并对业务授权进行严格的层次划分;对于机构的资产组合, 要定期进行审查, 从而对于风险过大的操作进行调整;要建立科学、合理的企业文化, 合理地使用激励机制并加大对违规操作的处罚力度。
2. 交易所应切实履行职责, 加强内部监管
作为组织者与市场管理者, 交易所要完善交易制度, 制定合理的保证金比例并进行及时有效的调整, 避免连锁性合同违约风险的发生和内幕交易等事件的发生;要建立和完善严格的清算制度, 加强清算、结算、支付系统的管理, 通过协调各市场提高应对突发情况的应变能力;要完善涉及衍生金融工具的财务监管与信息披露制度, 改革会计记账方法和原则;各国交易所还应加强交流与合作, 在充分考虑各国国情的基础上进行探索。
3. 各国政府更应切实加强监管工作
各国应积极改革监管制度, 明确各机构的监管职能, 制定交易管理的统一标准, 通过消除立法和管理方面的不确定性;及时关注国内金融市场及重要金融机构, 一旦发现问题及隐患, 要及时采取措施, 缓解负面影响;各国应出台有利于金融机构与金融市场健康发展的政策法规, 从而抑制市场上过度的投机行为。
(三) 加强国际合作, 发挥行业协会自律作用
随着世界经济的联系越来越紧密, 在应对金融危机时, 国际间应加强合作。世界各国应在充分了解本国衍生金融工具现状的前提下, 积极加强彼此的信息交流, 从而提高对衍生金融工具在世界金融中的发展现状;国际清算银行应加强对衍生金融工作的调查研究, 并和各国政府加强交流与合作, 以加强对银行的监督;由于各国金融市场对外开放的程度不断提高, 各国应积极与国际接轨, 通过行业协会的自律作用, 加强信息的披露, 提高市场的透明度, 从而更有效地保护各国的权益、防范金融风险, 促进金融稳定。
在面对席卷全球的金融危机时, 世界各国均无法独善其身, 因此, 世界各国应积极努力、共同应对, 从而更好地掌握衍生金融工具, 有效防范其引发的风险, 使世界经济顺利渡过这场危机并重新回归到健康发展的轨道上来。
参考文献
[1]IASB, 2008:《Reclassification of Financial Assets:Amendments to IAS39and IFRS7》, http://www.iasb.org.uk.
抠图―套索工具和魔术棒工具篇 第3篇
在经典好友与蓝色的支持和信任下,做了一段时间的版主,翻帖的次数越来越多,所看到的抠图的需求越来越多,所以对抠图做了一些归纳。实际以前经典有朋友总结过,而今天再次总结,是因为它是重要的。
其实对于PS而言,光总结,只理论是不行的,因为它是一个动手的软件,所以要求我们动手实际去做,所以,总结完成后,我们来实际练习,帖子会不断更新,直到我们把抠图练到”我的图片我做主”的水平,让我们一起学习!
也许这将会是我在经典发表的最用心的一篇教程(因为一直很惭愧,从没有给过朋友太大的帮助),也许它会给人情味很浓的经典带来一点点贡献,也许会为我是亲爱的论坛网友带来一丝丝帮助,也许不管怎么样,反正这篇教程我写定了,因为已经酝酿好久了,憋不住了。
图片在处理的时候,大多时候都会要求我们抠图,当然,也就是做选区!而实际上,PS在抠图的时候不只局限在工具中,还有其它的N种方法,那你对抠图到底了解多少呢??知道如何具体处理吗??让我们一个一个来,先从工具说起。
首先申明,本教程是抠图大集合,有很多东西就是学习了别人的东西而总结下来的,学习的时候也许已经忘记在哪里学到的了,所以不要将我的教程和其它教程去做比较,而且,本姑娘水平有限,也许有问题解决的不到位,但是我会努力,和大家一起进步,我的图片我做主,大家一起来练手。
好了,不多说了,let’s go on来,现在开始!
工具篇--------之套索工具和魔术棒工具的用法
1.矩形椭圆选框工具都可以做选区,而它做的选区是规则的,对于抠不规则形的图来说,有一定难度,那么我们又会想到套索工具组里的三个工具。
2.套索工具组里的第一个套索工具用于做任意不规则选区,套索工具组里的多边形套索工具用于做有一定规则的选区,而套索工具组里的磁性套索工具是制作边缘比较清晰,且与背景颜色相差比较大的图片的选区。而且在使用的时候注意其属性栏的设置。
各功能介绍如下图:
(1)选区加减的设置:做选区的时候,使用 “新选区”命令较多。
(2)“羽化”选项:取值范围在0-250间,可羽化选区的边缘,数值越大,羽化的边缘越大。
(3) “消除锯齿”的功能是让选区更平滑。
(4)“宽度”的取值范围在1-256间,可设置一个像素宽度,一般使用的默认值10。
(5)“边对比度”的取值范围在1-100间,它可以设置“磁性套索”工具检测边缘图像灵敏度。如果选取的图像与周围图像间的颜色对比度较强,那么就应设置一个较高的百分数值,
反之,输入一个较低的百分数值。
(6)“频率”的取值范围在0-100,它是用来设置在选取时关键点创建的速率的一个选项。数值越大,速率越快,关键点就越多。当图的边缘较复杂时,需要较多的关键点来确定边缘的准确性,可采用较大的频率值,一般使用默认的值57。
补:在使用的时候,可以通过退格键或“Delete”键来控制关键点。
3.也许有朋友说了。摩术棒工具也可以做选区用来抠图,的确,摩棒工具可以通过设置容差值的大小,来设置所抠图的范围的大小,“容差”的取值范围在0-255间,数值越大,选择的范围也就越大。好了,总结完毕,开始实践:贴图。
做图用到的素材:
1:
2:
3:
操作步骤如下:
1. 打开瀑布图片,鼠标指向,完了,怎么不能用,没关系,这里设置,先把瀑布的图改成八位,方法:图像/模式/八位通道,鼠标再指指,呵呵,能用了,好,继续操作!~(原因可以看一下赵鹏老师讲过的通道详解。)
2.打开小鸭子图片,选择摩术棒工具,设容差值为10,然后在小鸭子图片的空白处单击,然后点击CRTL+SHIFT+I反选,这个时候所选中的就是小鸭子了,鼠标切换到移动工具,指向小鸭子或直接按住CTRL键移动鸭子到刚才改好通道模式的瀑布图上,如图所示:
3.打开山丘图片,选择多边形套索工具,将要图中要用到的蓝天部分选取,并也使用移动工具将图拖动到瀑布上方,如图所示:
4.选中小鸭子图层,然后CTRL+T自由变形,调整小鸭子的大小和位置,并使用同样的方法调整蓝天图片,如图所示:
5.这个时候大家发现,蓝天和瀑布的分界线太明显,不合适,那么我们就调整一下,如果蒙版用的好,那可以用渐变蒙版来做,如例图,如果用着不顺手就没有办法了吗?当然有,选择一个经常使用的工具---------橡皮。这个时候也可以做相应的渐变,但是在使用的时候,一定要设置好橡皮的类型和大小,这里设置成300大小边缘模糊的就好,如图所示:
6.怎么样,鸭子和蓝天都调整好了吧?这个时候,有朋友一定会说,好单调,好像少点什么吧,当然,我们可以加点内容的,选中瀑布中中的河水部分,通过滤镜/扭曲/水波将小鸭子游泳时的水波做出,并选中背景层,通过滤镜/渲染/镜头光晕做出最终效果,好看多了吧?
编程工具 第4篇
关键词 应用软件 编程技术 程序设计
中图分类号:TP31 文献标识码:A
应用型软件的编程离不开成熟的编程技术与实用的软件开发工具,只有两者相结合,才能研发出高质量高性能的应用软件。在对应用软件开发工具进行研究之前,我们必须要了解清楚应用软件的编程技术。被广泛使用的各种应用软件编程技术主要有:面向对象程序设计、可视化编程技术及Windows环境利用技术。
1应用软件的编程技术
面向对象程序设计的实质是设计与开发软件的方法。对象指的是类的实例,它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性[1]。面向对象程序设计实际上与固有模式不同,过去的程序设计把程序看作是若干个相关函数的集合。而面向对象程序设计则把所有的对象当作是能够接收、运算与传递数据的机器,而不是一个接受命令并予以执行的终端。
可视化(Visual)编程技术,以“所见即所得”为基本原则,着重于编程的可视化,以便进行调整。编程人员在使用可视化编程技术的时候,一般都会利用软件自身所带的各种空间,从而进行拼接。由此,编程技术人员很少需要编写程序甚至不需要编写程序,极大程度的提高了程序员的工作效率。
Windows环境利用技术。在十余年前用户环境转至Windows系统环境,应用软件的运行环境也发生了相应的转移。Windows API是在使用该系统进行编程时所必须访问的资源之一。在此系统中编程的两个特征分别是:一、允许数个程序互相交换指令;二、对象链接与嵌入。利用这些特征,可以便捷的共享Windows环境及其他应用程序的数据和资源。
2软件开发工具
软件开发工具是指为软件开发服务的各种软件与硬件。这些工具使软件开发过程更加系统化,而且其基本囊括了软件开发生命周期中各个阶段所需要的工具。软件开发工具按软件研发过程分为几种,主要涵盖了软件开发从前期准备到最后完成的各个阶段。
2.1实例
微软公司的Jupiter开发平台所运用的开发技术结合了技术攻关与实干经验,其主要特点便是自动化。由权威机构定义,它本质上是一种解决方案,而对象是业务基础管理平台。同时,Jupiter在多方面上都具有较为明显的优势:
(1)高可易用性
Jupiter利用文件导向方式来展现整个系统与它的工作流程,同时以应用条件为主要依据对其属性进行划分。虽然文件导向方式很简单,但是其有效地实现了对于系统的分析、使系统需求的定义得到了简化。不仅如此,在定义完成时,只需要一步操作就能够产生所需要的文档和程序的源代码。
(2)迅速的应用开发
Jupiter补充强化了传统的开发方法,自动化生产90%以上的VB60、NET、J2EE代码,大大提升了应用系统的开发效率。
Jupiter平台可以方便的进行ERP、CRM、SCM、OA、POS等系统的快速开发,其使用者包括亚思捷软件等公司。
2.2软件开发工具
软件开发工具指的是一类可以将人类语言转变成机器语言并执行相应指令的工具,包括java、net、Delphi等三类。
2.2.1java开发工具
(1)My Eclipse
My Eclipse应用开发平台是J2EE集成开发环境,所拥有的功能较为齐全,完整支持JAVA、HTML、Struts等。My Eclipse作为一个软件开发平台,其整体是具有统一性的,但是在结构中每一个部分都保有独立性,即可以单独进行升级与扩展。
(2)Eclipse
Eclipse 是一种具备较强实用性的JAVA编程软件。它是一个开源软件开发工具的集合平台,各个部分遵循统一条例,并且共同运作。相较于其他,它更具有灵活性与多样性,让使用者自行控制软件开发的工具。
(3)Net Beans
Net Beans是开放源码的Java集成开发环境(IDE),因此适用范围较为广泛。Sun Java Studio是Sun公司最新发布的商用全功能Java IDE,支持Solaris、Linux和Windows平台,适于创建和部署2层Java Web应用和n层J2EE应用的企业开发人员使用。
2.2.2 Microsoft Visual Studio
Visual Studio 作为软件开发的工具,已经具备了其完整性。如果VB、C#与C++都使用相同的集成开发环境 (IDE),这样不但能共享使用的工具,而且能够更好地解决混合语言汇编的问题。
3总结
随着信息产业的发展,我国计算机领域研究虽然有了量的转变,但是我们更要质的飞跃,也就是说,不但要跟踪学习国外的先进技术,更要利用现有的技术进行创新开发,将我国的软件开发行业推向顶峰。恰当的使用软件开发工具是开发软件最好的途径,只有辨析清楚不同开发工具的适用范围与软件设计的方方面面,才能使我国的软件开发行业更上一个台阶。
参考文献
[1] 邹秀件.试析计算机应用软件的开发技术[J].科技风,2014.27.
金融工具基本权益工具法及其应用 第5篇
一、基本权益工具法概念与逻辑
负债是需要企业牺牲经济利益 (交付资产或者提供劳务) 的义务, 需要企业发行股票进行偿付的义务不是负债。这样, 根据金融工具的形式进行分类就是一个结构化的选择。可以使用“基本权益工具法”来确定某一项金融工具是属于权益工具还是属于债务工具。为此引入“基本权益工具”的概念:基本权益工具是企业的终极所有权, 代表了真正的所有者权益。基本权益工具有如下特征:一是其持有者对企业资产有要求权;如果企业进行清算, 这份要求权相对于其他任何对企业的要求权而言都不具有优先性。二是其持有者对于企业在所有较高优先级要求权都满足后所剩余的资产拥有所有权, 该所有权的大小只受企业剩余资产数量的限制。引入基本权益工具的概念后, 对企业净资产的最后要求权被归类为权益。这类金融工具的持有者被看作是企业的所有者, 减少企业所有者可支配的净资产的要求权被归类为负债, 增加企业所有者可支配的净资产的要求权被归类为资产, 基本权益工具即所有者权益。具有一个基本权益工具部分和一个负债 (或资产) 部分的金融工具应拆分, 只有基本权益部分可以被归类为所有者权益。所有其他金融工具及其组成部分 (包括优先股等永久金融工具) 都应被归类为资产或负债, 而不是所有者权益。
在企业发行的所有金融工具中, 具有最低优先级要求权的金融工具 (如股票) 就是基本权益工具的一个例子。如果企业发行了两种优先级不同的股票, 只有最低优先级的才是基本金融工具。确定哪种金融工具是权益就是在对企业净资产的不同类型的求偿权之间划一条分界线, 将对于净收益的要求权和用于确定净收益的要求权区分开来。历史上所有者权益被定义为企业的剩余权益, 剩余权益是拥有企业经营活动净剩余的权益。但是企业有不同类型的剩余, 所有对企业资产的要求权都可按等级列出来, 对权益和其他要求权的划分取决于对不同剩余水平的划分。基本权益工具的持有者承担企业及其活动的最终风险并享受最终回报。基本权益工具是企业的所有者权益, 是企业剩余权益的最低等级求偿权, 没有这种求偿权, 企业就无法存在或运营。基本权益工具所收到的任何数量的股利、赎回、分配都是企业净收益的分配。
所有者权益的法律形式是指企业组织中的财产权利, 这种财产权利往往都有明确的法律界定。金融工具的法律形式是重要的, 但并不决定其分类, 因此某一金融工具是否符合所有者权益的法律形式并非至关紧要。法律特征并不是判断某一金融工具是权益工具还是债务工具的关键, 一些法律形式的所有者权益是基本金融工具, 如普通股就是所有者权益的法律形式, 也是基本权益工具。优先股虽然是所有者权益的法律形式, 但通常并不具有对企业净资产的最低优先级求偿权, 因此不是基本权益工具。
除基本权益工具外, 其他金融工具或其组成部分 (包括永久性金融工具) 都应分类为资产或负债。所有远期合同和期权都应归类为资产或负债, 即使这些远期合同和期权需要支付或收取基本权益工具。在用基本权益法对金融工具类别进行判断时, 基于股票的支付 (如员工股票期权) 应归类为负债并以其公允价值进行计量。
二、基本权益工具法优点
首先, 基本权益法增加了财务报告透明度和可比性, 只将基本所有权工具归类为权益, 能使财务报表使用者更加容易区分哪些会减少所有者在企业净资产中份额的要求权。该方法是基于财务报告的财产权利观 (产权观) , 财务报表反映了企业所有者的观点。这与财务会计概念框架中所描述的企业主体观不同, 企业主体观从企业 (而非其所有者) 角度看各个交易与事项。通过将最低等级求偿权金融工具列为权益, 基本权益工具法更清楚地区分了不同股东的权益。目前, 几种不同类型的所有者权益都混合在权益中, 在留存收益和累积其他综合收益中报告的数量, 其实应归属于普通股股东、优先股股东、期权持有者和其他各方。如果收益的各部分能清楚地界定, 各类股东就能更容易地判断哪些收益归属于他们, 哪些不是。其次, 基本权益工具法简化了概念和应用, 将其他永久性金融工具归类为负债, 如果减少了可供分配给基本权益工具的净剩余, 对企业资产的要求权就是负债。该定义减少了结构化的机会, 如一些企业发行了永久性优先股, 并约定股利随时间而增长, 如果股利支付率增加太快, 超出企业支付能力, 企业就不得不回购这些优先股, 显然这里的优先股更具有负债的属性。
三、基本权益工具法具体运用
第一, 根据现行会计准则, 以现金结算的签出看涨期权归类为负债, 但如果看涨期权发行者选择使用现金或股票进行结算, 就被归类为权益。这样, 即使发行者的意图是以现金结算, 其也可以通过加入一个股票结算条款将期权归类为权益。现行制度对签出期权的归类依赖于金融工具的结算要求, 如果期权条款要求以股份结算就归类为权益, 如果要求以现金结算就归类为负债, 这种处理方法和金融工具的后果并不总是一致。某项金融工具以权益结算, 但权益工具可以在公开市场上轻易转化为现金, 那就和现金结算没有实质区别。基本权益法消除了这种会计处理上的不一致, 不管签出期权如何进行结算, 都被归类为负债, 这也防止了发行者通过改变金融工具条款操纵会计处理。
第二, 许多基本权益工具是永久性的, 但可赎回的金融工具 (不管是强制可赎回还是持有者具有选择权) 只有在具有上述两个特征时才是基本金融工具。即赎回的数量等于当持有者选择结算时所应享有的净资产数量, 这个数量可以用金融工具的公允价值来近似反映, 赎回计算公式应该反映该金融工具的公允价值或持有者在企业资产中应得的份额。在其条款中规定, 如果赎回会损害到具有较高优先级的要求权, 则不得赎回。但值得注意的是, 要求以公允价值赎回的金融工具不一定是基本权益工具。因为如果企业在金融工具赎回日进行清算, 金融工具持有者所得到的企业净资产的相应份额不等于金融工具的公允价值, 因此有必要排除企业清算的情况。
第三, 子公司和其他合并各方发行基本权益工具应在子公司的层次上进行确认。在合并会计报表中也应保持基本权益工具的特征, 除非这些特征与合并会计报表内容不符。如果子公司发行了可赎回基本权益工具 (将以公允价值赎回) , 母公司对这些工具作了一个最低赎回数量担保, 这项金融工具在子公司报表上是所有者权益。如果母公司没有进行担保, 那么在合并资产负债表上它也是所有者权益;但如果母公司进行了担保, 那么在合并资产负债表上它就是一项负债, 因为担保对赎回数量进行了限制 (保证某一部分一定可以赎回) , 就不再具有最低优先级的求偿权, 因此不满足基本权益工具的定义, 应分类为负债而不是所有者权益。要指出的是, 一个由基本权益工具和债务混合而成的金融工具可以分离并分开进行报告, 就好比是两个各自独立的金融工具一样。大多数金融资产和金融负债都以公允价值计量, 对于某些具有嵌入特征的混合金融工具, 可以直接以其公允价值进行计量而无需再分为宿主合同和嵌入衍生工具分别计量。
参考文献
[1]朱乃平、孔玉生、徐细珍:《可转换债券所含负债与权益的分叉处理法及其案例分析——基于标准期权定价模型的预期价值法》, 《会计研究》2006年第3期。
[2]唐国平:《负债与所有者权益的本质:不同责任观》, 《财会通讯》2003年第3期。
[3]侯鉴、牛振喜:《混合金融工具在风险资本契约中的应用》, 《投资研究》2006年第2期。
[4]张志英:《金融工具确认和计量规定评析》, 《生产力研究》2007年第12期。
编程型游戏编程框架的设计方法 第6篇
关键词:编程型游戏,编程框架,游戏编程语言,编程接口
0 引言
编程型游戏 (Programming Game) 通常以“角色竞技仿真引擎”的形式出现。典型的编程型游戏有Robocode (以坦克战斗为题材) 、AI-RCJ (以足球比赛为题材) 、Terrarium (以生物进化竞争为题材) 等。游戏者通过编写程序控制属于自己的游戏角色, 把它放到竞技场上同其它游戏角色进行竞争。在游戏过程中, 游戏角色的行为不是由键盘、鼠标或操纵杆来控制, 而是由游戏者为它设计的角色控制程序自动指挥。因此, 为游戏系统设计一个优秀的编程框架是开发编程型游戏系统的一项重要任务。
1 游戏编程语言的范型和设计 (选用) 原则
1.1 游戏编程语言的范型
每一种游戏编程语言的范型, 决定了该语言的特点和适用范围。如何确定游戏编程语言的范型呢?或许可以从现有的程序设计语言得到启发。通常, 可以将现有的程序设计语言分成3种不同的范型, 包括命令式语言、函数式语言和逻辑式语言。
(1) 命令式语言。命令式语言认为一个较大问题是通过若干较小问题的顺次解决而解决的。这类语言把解决各个较小问题的动作和所参加的成员抽象为语句和数据, 换言之, 用这类语言编写的程序是通过为“对显式数据的操作”确定直接语句来进行工作的。命令式语言的核心特性是变量、赋值语句和重复迭代形式 (循环结构) 。命令式语言的优点是执行效率高, 其缺点是编程者必须关注诸如对变量的命名、赋值操作和对基本动作的重复等底层细节, 这种对底层细节的过分关注往往不适用于复杂问题求解。命令式语言种类繁多, 主要有FORTRAN、Basic、Pascal、C、C++、Java、C#等语言。
(2) 函数式语言。函数式语言认为计算机所解决的问题是从一个域到另一个域的函数映射, 这些语言把要解决的问题划分成若干相关成员的集合和集合间的函数关系。与命令式语言不同的是, 函数式语言并不使用变量和赋值语句, 也没有循环结构, 重复性工作必须由递归而不是循环来完成。用函数式语言进行程序设计就是从系统的基本函数出发, 用复合、递归等方法构造新函数。相对而言, 函数式语言比命令式语言更高级, 其优点是克服了命令式语言存在的程序难以 (甚至无法) 实现许多算法中的并行计算成分, 语言结构复杂、表达能力弱、缺乏数学性质等缺陷, 其主要缺点是执行效率较低。函数式语言有Hask Kell、LISP和Scheme等几种, 其中以LISP语言最具代表性和影响力, 在人工智能领域有广泛应用。
(3) 逻辑式语言。逻辑式语言支持“说明性程序设计风格”根据问题约束的高层描述来构建程序。逻辑式语言把要解决的问题描述为一系列逻辑公式 (例如:事实和规则) 的集合, 一旦问题描述好, 就可向系统提出问题, 要求系统根据已建立的知识库搜索答案。用命令式、函数式语言进行程序设计时, 编程者必须告诉计算机如何进行计算;用逻辑式语言进行程序设计时, 编程者则不必明确指出如何计算出一个结果, 只须对结果的形式加以描述。可见, 逻辑式语言的程序设计要比命令式、函数式语言更容易, 但其执行效率也相对较低。迄今为止, 逻辑式语言种类不多, 主要以Prolog语言为代表。
1.2 游戏编程语言的设计 (选用) 原则
设计或选用游戏编程语言时应遵循以下几个原则: (1) “拿来主义”原则。如果有适合的语言, 则尽量选用现有的语言, 避免重复劳动; (2) “减少细节”原则。根据学科知识内容和游戏题材, 确定语言的范型和语言成分, 使游戏者把主要精力用于问题求解, 尽量少花费时间在编程细节上; (3) “易学性”原则。针对游戏者思维的能力和特点, 设计 (选用) 让游戏者易于学习掌握的语言; (4) “可读性”原则。充分考虑游戏者阅读程序的难易程度; (5) “可写性”原则。充分考虑游戏者编写程序的难易程度; (6) “高效性”原则。尽量选用执行效率比较高的语言。
2 编程接口的设计原则、设计方法
2.1 编程接口的设计原则
(1) 简单性。API的设计应当是简单的。API是供游戏玩家使用的, 要让游戏被编程水平各异的游戏玩家广泛接受, API就必须尽可能简单, 复杂难用的API会挫伤游戏玩家的信心和积极性。
(2) 高效性。API应该在坚持简单性的前提下, 兼顾高效性。当某些组合操作应用非常频繁时, API的设计者应当为这样的组合操作调用设计一个只需一次交互的单一入口调用, 以提升游戏角色代码的执行效率, 在玩家较多的情况下有效减轻服务器负载。
(3) 完备性。API的完备性指整个API要覆盖所有需要对游戏玩家公开的功能。只要设计阶段考虑得完备, 就能达到完备性的要求, 万一发现不完备的情况, 修正起来也较为容易。
2.2 编程接口的设计方法
运用面向对象的思想与方法, 将游戏系统的API框架分成主体类和辅助类。在编程型游戏中, 因为玩家编程控制的对象是游戏角色, 所以API框架的主体类是游戏角色类。可以设计一个类 (例如Robot) , 根据游戏角色的仿真模型, 按照“属性方法事件 (PropertyMethodEvent, 或PME) ”的方式, 将游戏角色的相关操作封装起来。其中, 游戏角色的状态可用属性描述, 游戏角色的操作可用方法描述, 游戏角色获取内、外界的消息可用事件描述。辅助类是用于协助主体类更有效率地运作, 或提供额外功能的类。例如, 事件队列类、数学运算类、规则类、神经网络支持类等。
3 仿真模型的设计 (以坦克战斗为题材举例)
设计游戏的仿真模型是设计良好编程接口的基础, 构建易于理解的仿真模型有助于实现API的简单性。编程型游戏的主要仿真模型有场景模型、游戏角色的感知模型和动作模型。
3.1 场景模型
场景模型包括单位长度、竞技场空间、地面、坐标系、方向系等。
(1) 单位长度指游戏实体移动的最小距离, 通常为1个像素点。
(2) 竞技场空间、竞技场地面及坐标系。竞技场空间规定了游戏实体的最大活动范围。二维游戏的竞技场空间通常是一个CK的二维空间 (竞技地面) , C为竞技场长度, K为竞技场宽度, 用单位长度度量, 其坐标系如图1所示, P (X, Y) 代表竞技场空间中一点P的坐标。
三维游戏的竞技场空间通常是一个CKH的三维空间, 其中C为竞技场长度, K为竞技场宽度, H为竞技场高度, 用单位长度度量, 其坐标系如图2所示, P (X, Y, Z) 代表竞技场空间中一点P的坐标。三维游戏的竞技场地面是一个CK矩形平面。三维坐标系有左手坐标系和右手坐标系两种, 图2是一个右手坐标系。选择哪一种坐标系主要与编写游戏系统所使用的三维图形API有关。目前, 常用的三维图形API有Open GL和Direct3D, 其中Direct3D采用左手坐标系, Open GL采用右手坐标系。
(3) 绝对方向系。绝对方向系用来描述游戏场景中的方向, 通常用一个向量表示某个方向。二维游戏中各方向都是以竞技场地面为参照物的绝对角度, 可设沿X轴方向为0度角, 从X轴逆时钟向Y轴旋转角度增大, 沿Y轴方向为90度角, 绝对方向系如图3所示。
三维游戏的绝对方向系中的方向可用两个分量描述。设三维空间中的一个方向A, 用A (α, β) 表示, 其中α表示该方向所在XOY平面 (竞技场地面) 上的投影所指方向的角度, β表示该角与XOY平面的夹角 (0度β90度) , 如图4所示。
(4) 相对方向。相对方向是指以游戏角色自身所向的角度为参照物的角度差, 随着游戏角色移动而改变, 不再以竞技场地面为参照物。
3.2 游戏角色的感知模型
游戏系统必须为游戏角色提供一个多方位、多层次的感知模型。游戏角色通常能够感知3类信息自身的状态信息、对方的状态信息和通知消息。
(1) 自身状态。游戏角色的自身状态指游戏角色当前的物理状态。例如, 某时刻游戏角色的坐标、方向、能量、速度和位置等信息。
(2) 对方状态。对方状态指竞技场中其它游戏角色当前的物理状态。在发现其它游戏角色时, 游戏角色将得到关于对方游戏角色的状态信息。例如, 对方游戏角色的距离、方向、能量等信息。
(3) 通知消息。通知消息是指其它游戏角色发送的消息。当一个游戏角色要向其它游戏角色发送消息时, 采用“点对点”的方式将消息发送给对方, 对方在消息发出后的下一“帧”中收到此通知消息。通知消息的主要结构如表1所示。
3.3 游戏角色动作模型
动作模型描述游戏角色能够执行的所有操作。例如, 使游戏角色前进或后退一段距离、转动一个角度等。
4 角色控制程序的结构
一个完整的角色控制程序由1个时间片任务处理函数和若干个事件处理函数构成。假设采用C#语言编写角色控制程序, 其典型的代码如下:
所有的角色控制程序都必须是Robot的子类, Robot是一个抽象类, 封装了所有的事件处理函数的原型, 角色控制程序必须实现这些原型。
采用.NET的“委托”技术实现“事件”, 对每种事件处理函数定义一个“委托类型”, 例如:
5 结束语
为游戏系统设计一个优秀的编程框架是开发编程型游戏系统的一项重要任务。本文阐述了编程型游戏编程框架的设计方法, 包括游戏编程语言的范型和设计 (选用) 原则、编程接口的设计原则和设计方法、仿真模型的设计、角色控制程序的结构。所述方法对同类软件的研发具有一定借鉴意义。
参考文献
[1]江耿豪, 郑炜冬.编程型游戏的设计与实现[J].现代计算机 (专业版) , 2008 (3) .
[2] (美) ROBERT W.SEBESTA.程序设计语言概念[M].林琪, 侯妍, 译.北京:中国电力出版社, 2006.
[3]陈文.高手边玩边学的游戏——Robocode[J].电脑技术-HELLO-IT, 2004 (11) .
[4]IIVERNYLIFE.打造自己的机器人——Robocode[J].电脑爱好者, 2003 (5) .
编程工具 第7篇
关键词:网络编程,TCP,IP地址,UDP,Delphi
1 引言
Delphi具有如下的优点:可视化开发环境的性能;编译器高速度和已编译代码的高效率;编程语言的功能强大,复杂性低;数据库结构的灵活,可扩展性强;框架对设计和使用模式的扩充支持。应用delphi可以很容易地在完成一个C/S结构的局域网系统的设计和实现。这通常涉及到图形用户界面设计、TCP/IP协议、UDP数据广播、局域网内文件传输等一系列技术。本文通过一个简单示例程序,展示了在Del2phi语言中进行UDP数据广播及利用Delphi的TServerSocket、TClientSocket构件实现局域网内基于TCP/IP通信的一般步骤和方法。
2 TCP/IP/UDP协议
传输控制协议TCP(Transmission Control Protocol)是Internet最基本的网络通信协议,它由一系列协议组成,下面分别概括介绍TCP/IP协议族中的各协议。
IP协议是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。IP协议提供的是不可靠无连接的数据报传送服务,它只提供最好的传输服务,但不保证IP数据报能成功的达到目的地。IP层也可配置成路由器,路由器比主机多了数据报转发的功能即对于目的地址为非本机地址的数据报进行转发。
TCP是属于传输层的协议,向应用层提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP的应用(通常为一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。因此在一个TCP连接中,仅有两方进行彼此通信,没有广播和多播的概念。TCP某些方式来提供数据传输的可靠性。
UDP是一个简单的面向数据报的传输层协议,它只提供不可靠性的数据传输服务把:应用程序传给IP层的数据发送出去,但并不保证它们能到达目的地。这意味着UDP客户机向指定的远端主机发送数据报时,并未事先确知对方是做好了接收数据的准备的。因此就会发生某一客户机发给一个主机,而此主机事先并未把此客户机列入其目标端口号而加以监听的情况。TCP的校验和是必需的,而UDP的校验和是可选的。当校验和有差错时UDP就将数据报丢弃并不产生任何差错报文。
综合三种协议,如果通讯强调可靠性,应该使用TCP;如果可靠性要求不高,但实时性要求高时可以应用UDP协议。本文这里应用TCP/IP协议作为通信协议,可以保证很强的可靠性。
3 socket编程
3.1 soket简介
在Windows环境下开发网络应用程序,通常都是使用Microsoft的网络编程接口,即Windows套接字WindowsSocket(简称Winsock),它包含在Winsock.dll中的一组API中,用于在网络上传输数据和交换信息,编程人员需要熟悉和掌握相关的网络协议、系统的底层知识以及网络软硬件技术,因而Winsock编程相当复杂。所幸的是,Delphi对WinSock进行了有效的封装,并不需要直接与Winsock的API打交道,只需使用其NMUDP、TClientSocket和TServerSocket等构件,使得对Winsock的访问大大简化。本文通过利用Delphi的TServerSocket、TClientSocket构件实现了局域网内基于TCP/IP的通信。
抽象地说,Socket是一种双向通信接口;实际上,Socket是一种数据结构,用以创建一条在没有互联的进程间发送、接受消息的通道(连接点)。一对互联的Socket提供通信接口,使两端可以传输数据。Socket屏蔽了底层通信软件和具体操作系统的差异,使得任何两台安装了TCP协议软件和实现了Socket规范的计算机之间的通信成为可能。Socket接口是TCP/IP网络最为通用的API,也是在Internet上进行应用开发最为通用的API。
3.2 主要的代码实现
在程序界面中,使SeverSocket控件和ClientSocket控件。SeverSocket控件是基于TCP/IP协议传输的服务器方的控件,它的主要作用是用来监听其它基于TCP/IP传输计算机的连接请求,并在收到连接请求时。建立连接,进行数据传输,ClientSocket控件是基于TCP/IP传输的客户方的控件,它的主要作用是监听TCP/IP传输的服务器发出连接请求,在收到服务器的允许连接的响应后,建立连接,并传输数据,之所以在窗体中同时创建ServerSocket和ClientSocket控件,是因为应用程序既可作为服务器,又可作为客户端使用。
1)Serversocket和ClientSocket之间的连接
2)消息的输入
3)服务器端的监听
4)断开链接
4 程序演示
如图2所示,这是程序运行的主界面。在两台计算机各打开一个程序的实例,通过设置好ip和端口以后,就可以进行通信了。通讯可以在广域网内进行,也可以在局域网内进行,但要保证计算机支持TCP/IP协议,这可以通过设置计算机实现。
5 结束语
通过编程,实现了Delphi下的网络编程。这极大的增强了对TCP/IP协议的理解,认识了套接字的编程的思想。通过运用Delphi编程,可以使我们认识到Delphi本身就是一个功能十分强大的面向对象开发平台。本文开发的程序可以用作局域网聊天的工具,或者用于广域网的通信。可以看出,本文编制的程序代码简单,程序占用内存极少,对于数字信息的通信有很大的好处,本文的代码还可以嵌入高级的应用中来,使得本程序作为其它应用的一部分,有很强的实际意义。
参考文献
[1]黄文兰.Delphi语言开发教务管理系统[J].电脑知识与技术,2006,(20).
[2]向继文.Delphi与汇编语言的混合编程[J].吉林大学学报(自然科学版),2006,(3).
[3]林瑜华.如何在DELPHI中使用SQL语言[J].福建电脑,2005,(10).
[4]严丽平.基于Delphi的C语言词法分析器的实现[J].科技广场,2004,(8).
[5]王忠,迟忠先.Delphi5开发指南[M].北京:电子工业出版社,2000:28-30.
编程工具 第8篇
3A2班的入学英语成绩如下:
本文以对该班学生的成绩进行分析为例,讲述如何对成绩的总分进行描述统计并作出直方图,然后根据得到的数据和图形说明该成绩(总分)分布是否为正态分布。
2. 描述统计工具
常用统计分析术语:对于一组数据,要想获得它们的一些常用统计量,可以使用Excel提供的统计函数来实现。利用Excel提供的描述统计工具,可以给出一组数据的许多常用统计量,包括:平均值、标准差、区域、计数标、准误差、样本方差最大值、中值、峰值、最小值、模式、偏斜度、总和。
得到如下结果:
说明:从峰值和偏斜度都非常接近0这一点可以判断这些数据来自一正态分布总体(或可以说:该总体呈正态分布)。
3. 直方图制作
对于上例中“总分”项的描述统计,用Excel可以非常方便地给出一组数据的直方图。步骤如下:
a.定区间。根据描述统计中“总分”项的最小值和最大值,先确定区间[62.1, 89.1] (组限通常取比数据的精度高一位,以免数据刚好落在端点上) 。这个区间能覆盖[62, 89],否则统计结果会将最小值和最大值排除在外。
b.定组距。将区间[62.1, 89.1]等分为9个小区间,即组距Δ=(89.1-62.1)/9=3。这样各小区间的端点从左至右依次为:
c.输入组限端点。在Excel表格中,把上面这9个表示组限端点的数字输入到区域N2:N11中计算出落在每个小区间内的数据的频数f。结果如下:
d.具体操作步骤。
操作完毕,得到直方图(图1):
4. 结论
由图1可以画出如下分布图形:
该图形说明:3A2班英语成绩分布呈正态分布,测试结果与学生的实际情况一致,各种难度的题型比例设置合理。
摘要:本文以对3A2班学生的入学英语成绩进行分析为例, 讲述如何对成绩的总分进行描述统计并作出直方图。
汽车就是代步工具 第9篇
新车促销五花八门
从投资的角度来看,购买汽车绝不是投资的最佳选择,因为汽车的折旧率高,几年下来新车就值不了几个钱了。当然收藏古董车又是另外一件事,那是有钱人的嗜好,普通老百姓买车只是作为代步的工具,要想从投资汽车上发财那几乎就是不可能完成的任务。通常美国人换车的频率是五年,购买新车时汽车商会提供五年的汽车保修,只要是机械性故障,厂商会免费更换零件和修理。
美国汽车市场上的各种类型和品牌汽车应有尽有,家庭用车分为豪华型、普通型、轿车型、卡车型、越野型、旅游休闲型等,消费者可根据自己家庭的实际需要和经济能力选择适合于自己的车型。汽车在美国的功能基本上是代步。虽然豪华车能反映出驾车人的经济状况,但却不代表其在社会上的地位。而且随着豪华车的普及,人们在购车时更多考虑的是支付能力、是否省油、安全性能以及对车型、车种的喜好程度。
购买新车自然得到各车厂的专门经销商处买,而各厂商为了提高销售量也为消费者提供五花八门的优惠,包括贷款的零利率、厂家3000~5000美元的折扣、不要付头款等。购买新车时美国人较少会用现金一次性购买,汽车贷款成为主要方式。汽车贷款一般为5年期,贷款利率主要看购车人的信用记录。
买二手车更划算
在美国,销售旧车(二手车)是一个很大的生意。由于汽车的折旧率高,买二手车从经济角度考虑,特别是对收入不高的人群而言,就是非常划算的选择。2009年,美国二手车的销量为3550万辆,新车销量是1040万辆,二手车销量是新车销量的三倍。从价格上看。新车的平均销售价格是26250美元,二手车的平均售价为8480美元。新车销售系统一年带来的经济效益是2740亿美元,而二手车一年带来的经济效益则为3010亿美元。美国有6万多家汽车经销商,其中4万多家是专门销售二手车的。到汽车经销商处购买二手车价格稍微贵一些,但汽车的质量较为有保证。实际上很多美国人买二手车并不是到汽车经销商处,而是直接从个人手中购买,这样在价格上会更便宜。美国有专门的出版物介绍各类车型在出厂销售后每一年的折旧率,只要到图书馆一查,在私人间买卖汽车时根据车况大致就可以算定用多少钱买车不会吃亏了 。
编程工具 第10篇
关键词:九宫格,枚举法,C#语言,趣味编程
1 概述
九宫格游戏19世纪起源于法国,虽然有别于现代九宫格,但要求行、列、对角线数的和相等。在销声匿迹了近一个世纪后,1984年九宫格被引入了日本,之后被命名为Sudoku,意思是“独数”[1],并一直沿用至今。九宫格还有许多变种,例如3x3、4x4、6x6宫格等等。现在许多的报刊杂志常会刊登一些九宫格的小游戏,例如英国的免费日报Metro(赶早的话在任意车站都可以拿到)就刊登有九宫格游戏(分为很难、难、易三种),而且读者若将答案寄往指定的地址还有可能获取100英镑的抽奖呢。为了打发时间,笔者还见过有人带着名为Soduku题库的书在火车上研究呢。九宫格在2005年左右风靡全球,世界上每年也举办九宫格世锦赛(World Sudoku Championship)[2],上一届(2009年4月)在斯洛伐克的日利纳举行,今年将是第五届了。有意思的是九宫格竟然如此让人着迷以至于出现了一些令人啼笑皆非的事情。在2004年12月12日英国泰晤士报刊登九宫格题的第二天刊登了一则投诉,说由于九宫格导致他地铁坐过了站。他在投诉中写道:“Sir, Su Doku puzzles (T2 and leading article, November 12) should carry a warning.It's not even day one and already I've missed my stop on the Tube[3]”。在2008年6月悉尼法院的一个花了100万澳元调查取证的吸毒审判竟由于5个陪审员中的4个被发现在庭审听证时玩九宫格而夭折[4]。
网络为九宫格的发展提供够了一个很好的平台,随便搜索关键字“Sudoku”或者“Sudoku forum”便可以找出很多技术交流的网站来,例如:
解九宫格的方法很多,还有人编写了口诀“一居上行正中央,依次斜填切莫忘;上出框时向下放,右出框时向左放;排重便在下格填,右上排重一个样”[5],这对简单问题可行,但对稍难一点的恐怕就不是几句口诀能解决得了的了。本文提供了通过枚举法解九宫格的思路和C#实现方法,希望起到抛砖引玉的效果。
2 编程的思路及算法
2.1 建立对象类
九宫格的网格有个共性,就是每个网格数字的左右可能值为1到9。所以可以创建一个网格单元对象(cell类),便于编程。这个类需要有以下功能:
1) 设置已知网格的初始值;对待求网格,其初始值为1到9;
2) 获知当前的剩余可能数字集,可以用自由度(dof)来表示;那么一个正确的结果必须是每个网格单元的dof为1;否则,dof将在运算过程中随时更新;
该对象的部分代码如下:
2.2 解题思路
一旦网格类已经建立,自然地,九宫格就是一个网格单元类的二维数组,命名为g[9, 9]。九宫格要求每一行、列以及3x3的子网格内不能有重复数字,因此解题的总体思路为:
根据已知cell的值对待求cell中的可能数字集依次按行、列、三宫格进行消元;
更新所有待求cell的dof并累加为总的dof,用DOF表示;
如果DOF=81,解题完毕;
如果DOF>81,说明还有某些cell的值未确定,必须进一步进行后面的枚举计算。
部分代码如下:
2.3 枚举算法
在进行枚举算法时首先选取dof最小(dof>1)的cell进行枚举,对于每一次枚举,都按前面给出的思路进行。如果不能达到DOF=81,那么就通过进一步的嵌套递归调用进行枚举,直到DOF=81为止。但这里要注意的是由于这里采用的是枚举法,枚举的值未必就是正确的,所以要增加一个结果的检查判断。检查的方法是:
1) 每个行、列没有重复值;
2) 行、列和三宫格的累加值均为45;
如果不满足上述要求,那么这次枚举值是错误的,要换下一个枚举值。
递归调用的部分代码如下:
3 解题举例
按以上思路编程在Microsoft Visual Studio 2005上编译通过后笔者还没发现有解决不了的九宫格题。简单的就不说了,笔者对所有网络上被认为最难的所谓“Extreme”级的九宫格难题进行了试算,发现都可以在较短的时间内解决,这里仅举两例予以说明。这两个难题如图1a和1b所示,解题结果如图2a和2b所示,虽然运算过程包含了数百次的嵌套递归调用,但在笔者的笔记本(ASUS-M9V)上所花的解题时间不过两三秒而已。
4 结论与探讨
本文简要回顾了九宫格的起源、发展和现状,然后详细介绍了如何用枚举法进行解题的C#实现,最后举了两个九宫格难题的例子。从解题效率上说,该方法不是最优化的,比如计算效率受枚举值排序的影响,例如在可能值1, 2, 3, 4中,假定4为正确值,那么前三次枚举都是徒劳,浪费了处理时间。尽管如此,九宫格解题本身就不是很复杂,出结果一般是眨眼间的事儿,在电脑代替人脑从事复杂计算的年代,这点时间耗费实在算不了什么。当然,从算法优化研究这个角度而言,本程序还有待于进一步的改进。九宫格作为一种趣味游戏,笔者的建议是能不用电脑就尽量不用电脑,这样解出来更有乐趣和成就感,不是吗?
参考文献
[1]Brian Hayes, "Unwed Numbers", American Scientist, 94 (2006) :12-15.
[2]http://www.wsc2006.com/eng/index.php.
[3]http://www.timesonline.co.uk/tol/comment/letters/article390381.ece.
[4]http://www.smh.com.au/news/national/jurors-get-1-million-trial-aborted/2008/06/10/1212863636766.html.
编程工具范文
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。


