方法、操作、算法和多态性术语的不同意义
操作和方法
UML是这样定义操作和方法的:
1、操作就是能够被类的实例调用的服务的规范
2、方法则是操作的实现。
操作是在方法之上的抽象概念操作定义类所提供的服务,并给出调用该服务的接口。多个类可以用不同的方法实现同一个操作。例如,很多类都以自己的方式实现toString()操作。而每个类都是通过实现方法来提供某种操作,操作的实现代码构成了类的方法。通过对方法和操作进行定义,我们可以澄清很多设计模式的结构。操作的含义是从方法的概念上抽象而来的。
由于设计模式也是从类和方法升华而来,因而,在很多设计模式中,操作都发挥着非常重要的作用。例如,在Composite模式中,一个操作既被应用于叶节点对象上,又被应用于组合对象上。而在Proxy模式中,一个中介者对象与目标对象具有相同的操作,从而使用得中介者对象可以管理对目标对象的访问。同样,责任链(Chain of Responsibility)模式是在一个对象链上分发某个操作。每个对象的方法要么直接实现该方法的业务,要么将对该方法的调用转发到责任链上的下一个对象。
表面上,操作的含义与签名的含义很类似。
方法签名包括方法名、形式参数的数目和类型。注意,方法签名不包括返回类型。但是,如果一个方法重写了另一个方法,而这两个方法的返回类型不同,那么编译时就会报错。在客户端调用方法时,方法签名指明应该调用哪个方法。操作是可请求的服务的规范。术语签名与操作的含义很类似,但是名字本身并不同义。这两个术语的不同之处主要体现在所使用的上下文环境中。当研究不同类中的方法可能会有相同接口时,使用术语操作。当研究Java如何将一个方法调用映射到接收对象的方法时(具体方法),使用术语签名。签名依赖于方法名和参数,但不依赖于返回类型。
算法和多态性
在某些情况下,算法也许完全包含在一个方法中。但是算法的实现经常依赖于多个方法的相互使用。Introduction to Algorithms(算法导论)给出了算法的定义:算法是定义良好的计算过程,把数据值或者数据集合作为输入,并输出某数据值或者数据集合。算法是一个过程,包含一些指令序列,接收输入,产生输出。单个方法也许是个算法:它接受输入————其参数列表————并产生输出作为返回值。然而,在面向对象编程时很多算法会需要多个方法。算法就是需要完成某项任务的过程。它们也许表现为某方法的一部分,或者调用多个方法。在面向对象应用程序中,需要多个方法的算法经常依赖多态性来充许单个操作的多种实现。
多态性是方法调用关于依赖被调用的操作和调用接收者类的基本原则。比如,你也许关心当Java遇到表达式isTree()时,会执行哪个方法。这关键是看方法的依赖关系。如果对象m是Machine类的实例Java会调用Machine.isTree()。如果m是MachineComposite的一个实例,Java会调用MachineComposite.isTree()。非正式地说,多态性意味着要为合适的对象调用合适的方法。很多设计模式都使用多态性,在某些情况下,多态性与该模式的目标紧紧相连。
总结
操作,类似于方法签名,定义了服务的规范。当谈到许多方法可能会有相同的接口的时候,我们可以使用操作这个术语。当讨论方法查询规划的时候,我们可以使用签名这个术语。
一个方法的定义包括方法签名、修饰符、返回类型以及方法体;而方法签名又包括方法名和参数列表。一个方法通常有一个方法签名,并实现一个操作。启动一个方法的常见方式是调用它。方法结束的常见方式是让它返回,但是对任务程序而言,当遇到不可处理的异常时,任何方法都会停止执行。
算法是一个接收输入并产生输出的过程。方法也接收输入、产生输出,另外它还包含一个过程化的方法体,因此常常有人将方法体看作是一个算法。然而,一个算法的过程可能会涉及很多操作和方法,也可能仅仅是另外一个方法的一部分。算法这个术语最好是在谈到产生某个结果的过程时使用。
很多设计模式都涉及到把一个操作分散到几个类中去。因而我们可以说这些模式依赖于多态性,即具体调用哪个方法依赖于收到调用的对象的类型。不同的类可以用不同的方式来实现同一个操作。换句话说,Java支持多态性机制。
方法、操作、算法和多态性术语的不同意义相关推荐
- python使用方法-在Python中使用next()方法操作文件的教程
next()方法当一个文件被用作迭代器,典型例子是在一个循环中被使用,next()方法被反复调用.此方法返回下一个输入行,或引发StopIteration异常EOF时被命中. 与其它文件的方法,如Re ...
- 数据结构源码笔记(C语言):二叉平衡树的相关操作算法
//二叉平衡树的相关运算 #include<stdio.h> #include<malloc.h> #include<string.h>typedef char I ...
- mysql5.7.14操作命令_Mysql5.7.14安装配置方法操作图文教程(密码问题解决办法)
本篇文章主要涉及mysql5.7.14用以往的安装方法安装存在的密码登录不上,密码失效等问题的解决办法,希望可以帮到有同样困扰的朋友. 具体过程如下: 一.软件下载: 2.将下载的文件进行减压,作者的 ...
- python脚本怎么使用_在Python中使用next()方法操作文件的教程
next()方法当一个文件被用作迭代器,典型例子是在一个循环中被使用,next()方法被反复调用.此方法返回下一个输入行,或引发StopIteration异常EOF时被命中. 与其它文件的方法,如Re ...
- JavaScript实现唯一路径问题的动态编程方法的算法(附完整源码)
JavaScript实现唯一路径问题的动态编程方法的算法(附完整源码) dpUniquePaths.js完整源代码 dpUniquePaths.test.js完整源代码 dpUniquePaths.j ...
- JavaScript实现唯一路径问题的回溯方法的算法(附完整源码)
JavaScript实现唯一路径问题的回溯方法的算法(附完整源码) btUniquePaths.js完整源代码 btUniquePaths.test.js完整源代码 btUniquePaths.js完 ...
- JavaScript实现截留雨水问题的蛮力方法的算法(附完整源码)
JavaScript实现截留雨水问题的蛮力方法的算法(附完整源码) bfRainTerraces.js完整源代码 bfRainTerraces.test.js完整源代码 bfRainTerraces. ...
- JavaScript实现跳跃游戏的贪婪方法的算法(附完整源码)
JavaScript实现跳跃游戏的贪婪方法的算法(附完整源码) greedyJumpGame.js完整源代码 greedyJumpGame.test.js完整源代码 greedyJumpGame.js ...
- JavaScript实现跳跃游戏的动态编程自下而上的方法的算法(附完整源码)
JavaScript实现跳跃游戏的动态编程自下而上的方法的算法(附完整源码) dpBottomUpJumpGame.js完整源代码 dpBottomUpJumpGame.test.js完整源代码 dp ...
最新文章
- 使用微软提供的Office Online实现Office文档的在线查看,编辑等功能
- linux gcc 包含头文件 动态库 静态库 链接路径问题
- 洛谷 P3368 【模板】树状数组 2
- php中soap的使用以及wsdl的生成
- 计算机软考网络工程师历年真题,计算机软考《网络工程师》考试历年真题精选(1)...
- onvif_discover虚拟摄像头
- 进程内存信息 /proc/[pid]/maps /proc/[pid]/smaps /proc/[pid]/status
- esb 和mq_使用保险丝结构管理MQ和ESB的大型部署,第一部分
- 我厨蔬菜生鲜商城小程序源码
- ibtais中把clob数据类型转换成string并插入到数据库中
- 【Spring Boot】RestTemplate使用总结
- 关于右键无法选择codeblocks打开cpp或c文件
- tensorflow2.0(简介)
- 成都榆熙:做拼多多电商如何优化用户消费体验?
- Python 详细教程 —— pyautogui 库 基本用法
- 图像处理 直方图均衡化
- 著名的菲尔人格测试!听说挺准的
- r5 4650g和r5 5600g选哪个好
- 江汉大学计算机专业男女比,2018全国高校男女比例排行榜!
- 【vue】链接生成为二维码图片-qrcode.js2
热门文章
- 用chrome学编程
- 检测手机电池状态的代码
- 邯郸学院学计算机宿舍,邯郸学院的住宿条件怎麽样,每个宿舍有的卫生间和洗澡的地方吗...
- Linux下NFS共享存储安装详细步骤
- 机械加工行业云MES解决方案
- 北大占3成、00后超一半,2022阿里全球数学竞赛77位获奖者出炉
- 计算机经典游戏,永远留在硬盘里!PC玩家舍不得删除的经典游戏(二)
- Java HashSet详解
- 历年软考案例分析背景中的明显错误总结(五)
- android——SwipeRefreshLayout上拉加载、下拉刷新、SmartRefreshLayout