当前位置: 首页 > news >正文

有哪些做二手的网站开一个小公司需要多少钱

有哪些做二手的网站,开一个小公司需要多少钱,网站需求列表,wordpress图片视频主题首先声明一点#xff0c;本文主要介绍的是面向对象#xff08;OO#xff09;的思想#xff0c;顺便谈下函数式编程#xff0c;而不是教你如何准确地、科学地用java求出函数在一点的导数。 一、引子 defd(f) :defcalc(x) : dx 0.000001 #表示无穷小的Δx return (f(xdx) - …首先声明一点本文主要介绍的是面向对象OO的思想顺便谈下函数式编程而不是教你如何准确地、科学地用java求出函数在一点的导数。 一、引子 defd(f) :defcalc(x) : dx 0.000001 #表示无穷小的Δx return (f(xdx) - f(x)) / dx #计算斜率。注意此处引用了外层作用域的变量 f return calc #此处用函数作为返回值也就是函数 f 的导数 # 计算二次函数 f(x) x2 x 1的导数 f lambda x : x**2 x 1 #先把二次函数用代码表达出来 f1 d(f)#这个f1 就是 f 的一阶导数啦。注意导数依然是个函数 # 计算x3的斜率 f1(3) # 二阶导数 f2 d(f1) 首先直接上一段python代码请大家先分析下上面代码是用什么方法求导的。请不要被这段代码吓到你无需纠结它的语法只要明白它的求导思路。 博主说“如果不用 FP改用 OOP上述需求该如何实现俺觉得吧用 OOP 来求导这代码写起来多半是又丑又臭。” 我将信将疑于是就用面向对象的java试了试最后也没多少代码。如果用java8或以后版本代码更少。 请大家思考一个问题如何用面向对象的思路改写这个程序。请先好好思考尝试编个程序再继续往下看。 考虑到看到这个标题进来的同学大多是学过java的下面我用java用面向对象的思路一步步分析这个问题。 二、求导 文章开头我已近声明过了本文不是来讨论数学的求导只是我用来说明面向对象的一个例子。 如果你已经忘了开头那段代码的求导思路请回头再看看看看用python是如何求导的。 相信你只要听说过求导肯定一眼就看出开头那段代码是用导数定义求导的。代码中只是将无穷小Δx粗略地算做一个较小的值0.000001。 三、最初的想法 //自定义函数 public classFunction {//函数f(x) 3x^3 2x^2 x 1 public double f(doublex) {return 3 * x * x * x 2 * x * x x 1; } } //一元函数导函数 public classDerivedFunction {//表示无穷小的Δx private static final double DELTA_X 0.000001;//待求导的函数 privateFunction function;publicDerivedFunction(Function function) {this.function function; }/*** 获取function在点x处的导数 *paramx 待求导的点 *return导数*/ public double get(doublex) {return (function.f(x DELTA_X) - function.f(x)) /DELTA_X; } } public classMain {public static voidmain(String[] args) {//一阶导函数 DerivedFunction derivative new DerivedFunction(newFunction());//打印函数在x2处的一阶导数 System.out.println(derivative.get(2)); } } 先声明一点考虑到博客篇幅我使用了不规范的代码注释希望大家不要被我误导。 我想只要大家好好思考了应该至少会想到这步吧。代码我就不解释了我只是用java改写了文章开头的那段python代码做了一个简单的翻译工作。再请大家考虑下以上代码的问题。 刚开始我思考这个问题想到的是建一个名为Function的类类中有一个名为f的方法。但考虑到要每次要求新的函数导数时就得更改这个f方法的实现明显不利于扩展这违背了开闭原则。 估计有的同学没听过这个词我就解释下”对象类模块函数等应对扩展开放但对修改封闭“。 于是我就没继续写下去但为了让大家直观的感受到这个想法我写这篇博客时就实现了一下这个想法。 请大家思考一下如何重构代码以解决扩展性问题。 四、初步的想法 估计学过面向对象的同学会想到把Function类改成接口或抽象类以后每次添加新的函数时只要重写这个接口或抽象类中的f方法这就是面向接口编程符合依赖反转原则下面的代码就是这么做的。 再声明一点考虑到篇幅的问题后面的代码我会省去与之前代码重复的注释有不明白的地方还请看看上一个想法中的代码。 //一元函数 public interfaceFunction {double f(doublex); } //自定义的函数 public class MyFunction implementsFunction { Overridepublic double f(doublex) {return 3 * x * x * x 2 * x * x x 1; } } public classDerivedFunction { private static final double DELTA_X 0.000001; privateFunction function;publicDerivedFunction(Function function) {this.function function; } public double get(doublex) {return (function.f(x DELTA_X) - function.f(x)) /DELTA_X; } } public classMain {public static voidmain(String[] args) {//一阶导函数f(x) 9x^2 4x 1DerivedFunction derivative new DerivedFunction(newMyFunction()); System.out.println(derivative.get(2)); } } 我想认真看的同学可能会发现一个问题我的翻译做的还不到位开头那段python代码还可以轻松地求出二阶导函数导数的导数而我的代码却不行。 其实只要稍微修改以上代码的一个地方就可以轻松实现求二阶导请再思考片刻。 五、后来的想法 当我写出上面的代码时我感觉完全可以否定“用 OOP 来求导这代码写起来多半是又丑又臭”的观点。但还不能求二阶导我有点不甘心。 于是我就动笔列了一下用定义求一阶导和求二阶导的式子想了想两个式子的区别与联系突然想到导函数也是函数。 DerivedFunction的get方法和Function的f方法的参数和返回值一样DerivedFunction可以实现Function接口于是产生了下面的代码。 public interfaceFunction {double f(doublex); } public class DerivedFunction implementsFunction { private static final double DELTA_X 0.000001; privateFunction function;publicDerivedFunction(Function function) {this.function function; }Overridepublic double f(doublex) {return (function.f(x DELTA_X) - function.f(x)) /DELTA_X; } } public classMain {public static voidmain(String[] args) {Function f1 new DerivedFunction(newFunction() { Overridepublic double f(doublex) {return 3 * x * x * x 2 * x * x x 1; } }); System.out.println(f1.f(2));//二阶导函数f(x) 18x 4 Function f2 newDerivedFunction(f1);//打印函数f(x) 3x^3 2x^2 x 1在x2处的二阶导数 System.out.println(f2.f(2)); } } 考虑到有的同学没学过java8或以上版本以上代码没有用到java8函数式编程的新特性。 如果你接触过java8请考虑如何改写以上代码使其更简洁。 六、最后的想法 public class DerivedFunction implements Function{private static final double DELTA_X 0.000001;private Functionfunction;public DerivedFunction(Functionfunction) {this.function function; } OverridepublicDouble apply(Double x) {return (function.apply(x DELTA_X) - function.apply(x)) /DELTA_X; } } public classMain {public static voidmain(String[] args) {//打印函数在x2处的二阶导 System.out.println(new DerivedFunction(new DerivedFunction(x - 3 * x * x * x 2 * x * x x 1)).apply(2.0)); } } 之前几个想法为了扩展Function接口使用了外部类、匿名类的方式其实也可以用内部类。而这在这里我用了lambda表达式是不是更简洁了。 这里用的Function接口用的是jdk自带的我们不需要自己定义了。因为这是一个函数式接口我们可以用lambda方便地实现。后来发现其实这里用UnaryOperator这个接口更恰当。 现在大家有没有发现用java、用OOP也可以非常简洁地实现求导并不比开头的那段python代码麻烦很多。 七、编程范式 在我看来编程范式简单来说就是编程的一种模式一种风格。 我先介绍其中的三个你差不多就知道它的含义了。 7.1 面向对象程序设计OOP 看到这里的同学应该对面向对象有了更直观的认识。在面向对象编程中万物皆对象抽象出类的概念。基本特性是封装、继承、多态认识不深的同学可以再去我之前的代码中找找这三个特性。 我之前还介绍了面向对象的几个原则开闭原则、依赖反转原则。其他还有单一职责原则、里氏替换原则、接口隔离原则。这是面向对象的5个基本原则合称SOLID。 7.2 函数编程语言FP 本文开头那段代码用的就是python函数式编程的语法后来我又用java8函数式编程的语法翻译了这段代码。 相信你已经直观地感受到它的简洁以函数为核心几行代码就解决了求导的问题。 7.3 过程式编程Procedural programming 大概学过编程都学过CC语言就是一种过程式编程语言。在我看来过程式编程大概就是为了完成一个需求像记流水帐一样平铺直叙下去。 八、结尾 由于本人初学java目前只能想到这么多。如果大家有更好的想法或者觉的我上面说的有问题欢迎评论望各位不吝赐教。 这是我的第一篇技术博客但愿我说清楚了面向对象。如果对你有帮助请点个赞或者评论下给我点继续创作的动力。 九、两年后的思考 以下是写了这篇文章两年后的思考从评论区复制而来 两年前我只是大概理解了OOP无意中使用了闭包定义了层次性数据做了数据抽象。 5000多的阅读量没人指出如果用Java8写出函数式的版本。 其实Java8引入了Lambda后已经可以写出函数式的版本只要把文章开头的python代码翻译下。 想想“求导”这个函数它接收一个函数做为参数然后返回一个新的函数这是一个高阶函数可以用做过程抽象。 Java8引入Lambda后函数可以作为方法参数和返回值这是一个很重大的改变颠覆了老Java用户原有的编程观念。 以前很复杂的OOP代码如果用函数式方式来写会很简单。 很多所谓的设计模式在我看来不过是因为以前Java不支持Lambda这特性去曲折地实现罢了比如模板模式。 然而Lambda并不是什么新鲜的东西Lisp这一第二古老的高级语言就支持。 这推荐下SICP这本书和公开课我也是看了点才有了下面的代码。 有空重写一篇博客谈一谈。 public classDerivativeUtil {private static final double DELTA_X 0.000001;public staticDoubleUnaryOperator d(DoubleUnaryOperator f) {return x - (f.applyAsDouble(x DELTA_X) - f.applyAsDouble(x)) /DELTA_X; }public static voidmain(String[] args) { DoubleUnaryOperator f x - x * x x 1; DoubleUnaryOperator f1d(f); System.out.println(f1.applyAsDouble(3)); DoubleUnaryOperator f2d(f1); System.out.println(f2.applyAsDouble(1)); } } 我是先用scheme翻译了下 然后想到了上面的Java实现。编程语言不过是各种语言特性的排列组合罢了。 (define dx 0.000001) (define (d f) (lambda(x) (/ (- (f (x dx)) (f x)) dx))) (define (f x) ( (* x x) x 1)) (define f1 (d f)) (f13) (define f2 (d f1)) (f21)
http://www.zqtcl.cn/news/334886/

相关文章:

  • 外国自适应企业网站做网站模板用什么框架
  • win7做网站服务器隐私浏览器
  • 优秀的设计网站广州排名推广
  • 做电商设计有什么好的网站推荐软件产品开发流程图
  • 建设网站请示宣传企业网站建设的
  • 汉中定制网站建设公司网站建设建站知识
  • 做壁纸网站建站优化办事效率高
  • linux 做网站数据库怎么开发ios软件
  • 沛县网站设计html制作网页的代码
  • 南昌网站建设公司如何万维网络(临沂网站建设)
  • 张家界做网站洛阳网站建设哪家专业
  • 快餐网站模板电子版邀请函制作软件免费
  • 有什么做视频的素材网站网站名称注册保护
  • 北京 顺义 网站制作h5网站网站建设
  • 网站在百度上搜不到了wordpress导航菜单加图片
  • wordpress网站访问慢网站建设35类
  • 绍兴做网站价格字体
  • asp.net网站开发实训可以不花钱做网站吗
  • 北京网站的制作设计服务器和电脑主机的区别
  • 北京网站建设的服务公司凡科网站 怎么开支付
  • 包头公司做网站知名做网站费用
  • 安徽网站建设服务平台重庆网站建公司大全
  • 有什么网站可以做中间人的相城区建设局网站
  • 房屋装修在线设计网站百度联盟广告怎么屏蔽
  • 网站,商城,app+建设域名网址注册
  • 肥西做网站设计网页页面
  • 怎样做百度推广网站iis服务器的默认网站
  • 东莞建设工程交易中心门户网站湖南设计网站机构
  • 做网站在网站建设客户
  • 河北建设厅安监站官方网站一个新手怎么做电商