Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试只使用一个方法名_Java_Php_Oop - Fatal编程技术网

Java 尝试只使用一个方法名

Java 尝试只使用一个方法名,java,php,oop,Java,Php,Oop,当我用PHP编写表单验证程序时,当创建新方法时,我需要增加旧方法中的参数数量 当我学习Java时,当我读到extends是为了不接触以前测试过的工作代码时,我认为我不应该增加旧方法中的参数数量,而是用新方法覆盖旧方法 想象一下,如果要验证表单的一部分、另一部分和另一部分中的字段是否为空 如果参数不同,您将重载isEmpty,但是,如果参数相等,使用isEmpty、isEmpty2、isEmpty3、三个类和每个类一个isEmpty是否正确,或者,如果两者都错误,我应该怎么做 由于java 5,您

当我用PHP编写表单验证程序时,当创建新方法时,我需要增加旧方法中的参数数量

当我学习Java时,当我读到extends是为了不接触以前测试过的工作代码时,我认为我不应该增加旧方法中的参数数量,而是用新方法覆盖旧方法

想象一下,如果要验证表单的一部分、另一部分和另一部分中的字段是否为空

如果参数不同,您将重载isEmpty,但是,如果参数相等,使用isEmpty、isEmpty2、isEmpty3、三个类和每个类一个isEmpty是否正确,或者,如果两者都错误,我应该怎么做

  • 由于java 5,您可以使用变量参数列表,如
    void foo(Object…params)
  • 由于不能重载具有相同类型和参数数(或基于返回类型)的方法,因此需要为方法提供创造性的名称。实际上,我个人更喜欢这种方式,而不是重载方式。所以你可以有isEmpty和isEmptyWhenFoo和IsemptyWheniHavetheArguments(我不是最后一个:)

  • 不确定这是否真的回答了您的问题,但在“现实生活”中思考OO的最佳方式是:

    面向对象编程。程序执行被视为一个物理模型,模拟世界的真实部分或想象部分的行为

    那么,您将如何构建一个物理设备来完成您试图在代码中完成的任务呢?您可能有某种“表单”对象,表单对象将有一些小选项卡或位连接到它以表示不同的表单变量,然后您将构建一个验证器对象,它将表单对象放入插槽中,然后在表单有效时闪烁一盏灯,在表单无效时闪烁另一盏灯。或者,您的验证器可以在一个插槽中获取一个表单对象,然后返回一个表单对象(可能是同一个),但可以通过各种方式进行修改(只有验证器能够理解),以使其“有效”。或者可能验证器是表单的一部分,因此表单中有一个验证器的东西突出出来

    我的观点是,试着想象一下这样一台机器会是什么样子,它会如何工作。然后想想那台机器的所有部件,把每一个都变成一个物体。这就是“面向对象”的东西在“现实生活”中的工作方式,对吗

    话虽如此,“扩展”一个类是什么意思?好的,类是对象的“模板”——每个对象实例都是通过从一个类构建而成的。子类只是从父类“继承”的类。至少在Java中,有两种继承:接口继承和实现继承。在Java中,您一次最多可以从一个类继承实现(实际的方法代码),但您可以继承多个接口——这些接口基本上只是某些人可以从类外部看到的属性集合

    此外,考虑OO编程的一种常见方式是考虑“消息”而不是“方法调用”(事实上,这是Alan Kay为Smalltalk发明的原始术语,Smalltalk是第一种真正被称为“面向对象”的语言)。因此,当您向对象发送
    isEmpty
    消息时,您希望它如何响应?是否希望能够使用
    isEmpty
    消息发送不同的参数,并使其做出不同的响应?或者您想将
    isEmpty
    消息发送到不同的对象,并让它们做出不同的响应吗?这两种答案都是合适的,具体取决于代码的设计。

    所以问题是:

    如果对于接收相同数量参数的方法
    isEmpty
    ,我需要不同的行为,我应该怎么做

  • 用不同的名字?(isEmpty,isEmpty2,isEmpty3)
  • 有三个类使用一个isEmpty方法吗
  • 其他的
  • 如果这是一个问题,那么我认为你应该使用:

  • 当它们属于同一逻辑单元(它们具有相同的验证类型)但不使用数字作为版本时,最好按照它们的功能命名:
    isEmptyUser
    isEmptyAddress
    isEmptyWhatever

  • 当验证器对象可以在一个地方计算并在程序生命周期中传递时。假设:
    Validator v=Validator.getInstance(…)validator.isEmpty()
    ,并将多态性应用到它的作业中

  • 或者,您可以将参数打包到一个类中,并将其传递给
    isEmpty
    方法,尽管最终会遇到几乎相同的名称问题。尽管如此,从那里重构并让新类为您进行验证还是比较容易

    isEmpty( new Arguments(a,b,c ) );  => arguments.isEmpty();
    

  • 开放/封闭原则(通常归于Bertrand Meyer)说“软件实体(类、模块、函数等)应该开放以供扩展,但关闭以供修改”。这可能是您在Java时代遇到的原则。在现实生活中,这适用于完成的代码,其中修改、重新测试和重新认证的成本超过了通过直接更改获得的简单性的好处

    如果由于需要附加参数而更改方法,则可以选择使用以下步骤:

  • 照搬旧方法
  • 从副本中删除实现
  • 更改原始方法的签名以添加新参数
  • 更新原始方法的实现以使用新参数
  • 使用参数的默认值根据新方法实现副本
  • 如果您的实现语言不支持方法重载,那么原理是相同的,但是您需要为新方法签名找到一个新名称

    这种方法的优点是