V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
soclearn
V2EX  ›  编程

我从来没见过比面向对象更糟糕的编程范式和语言

  •  1
     
  •   soclearn · 2023-02-14 12:31:17 +08:00 · 11394 次点击
    这是一个创建于 675 天前的主题,其中的信息可能已经有所发展或是发生改变。

    来看 java 的 hello world

    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("Hello world");
        }
    }
    

    好一个蠢字了得。为了输出二个字,要写这么多样板和层次

    不能像 shell 一样平坦化吗

    而且以后,你还要学”继承,保护,ducking type ,mixed in, 参数类,原型链,面向 interface ,设计模式,并发加锁,信号量“ 而且到最后,你会被告知”py,cpp 的 oo 都是山寨,只有 smalltalk,ruby 那种 oo 才是纯的“

    并且最最后,你会发现先它们一步的函数式语言无须厚重的数据抽象,也能获得更好的代码结构和范式,并且天然并发,自带 dsl

    第 1 条附言  ·  2023-02-16 08:15:59 +08:00
    oo 的最大问题其实正是稍微一做大,其迅速呈现的反软件工程的属性
    一 W 个人对一份具体的 domainlogic 有一 W 种抽象方案。
    而且你不能把计算机的东西刻意往人的方面过高去抽象,否则属过度抽象

    企图靠语言和语法层面的统一,实现的工程化,其实是狭隘的。
    更好的语法糖和 dsl 。领域语义化,才是关键。
    (虽然语法糖的 dsl 化打破了语言语法层面的那种狭隘的工程化,但有待讨论)
    135 条回复    2023-04-27 03:43:28 +08:00
    1  2  
    justfindu
        101
    justfindu  
       2023-02-15 09:43:15 +08:00   ❤️ 1
    @zapper #1 你赚了 花了 5 铜币, 赚了 380
    qiumaoyuan
        102
    qiumaoyuan  
       2023-02-15 09:59:45 +08:00
    见识少不奇怪。
    不如看看你写的代码?
    JavenXiao
        103
    JavenXiao  
       2023-02-15 10:06:41 +08:00
    复杂的继承确实给阅读代码带来了很大的难度,耦合问题很严重。

    尤其是大公司的大一统 android 客户端代码,那真的是错综复杂。大家也都没有删代码的习惯,很多类其实没用了也不删,也会给阅读代码带来很大的障碍。
    pkoukk
        104
    pkoukk  
       2023-02-15 10:15:43 +08:00
    你可以用 C#
    Hayashikawa
        105
    Hayashikawa  
       2023-02-15 10:18:17 +08:00
    在情人节看到这个标题前半部分,我以为是在对单身人士钓鱼呢。
    Mexion
        106
    Mexion  
       2023-02-15 10:18:44 +08:00
    @pkoukk 有什么区别吗,C#也是纯 OOP 的语言。当然,我没有喷 OOP 不好的意思,我觉得挺好的
    fioncat
        107
    fioncat  
       2023-02-15 10:19:17 +08:00
    在 v2 喷 java 。。我只能祝 OP 好运
    godblessumilk
        108
    godblessumilk  
       2023-02-15 10:19:25 +08:00   ❤️ 3
    面向对象:我只需要一条香蕉🍌,但我得定义一片森林。

    面向过程:全局变量满天飞,写单元测试的时候能把人急得剁屌,因为不知道全部变量会被哪个函数修改污染
    kop1989smurf
        109
    kop1989smurf  
       2023-02-15 10:21:20 +08:00
    @Mexion #106 C#有一些函数式编程的语法糖,比如 LINQ
    godblessumilk
        110
    godblessumilk  
       2023-02-15 10:23:56 +08:00
    函数式:写时一时爽,维护火葬场
    godblessumilk
        111
    godblessumilk  
       2023-02-15 10:24:51 +08:00
    @godblessumilk 全部变量 -> 全局变量
    biantaoGG
        112
    biantaoGG  
       2023-02-15 10:28:52 +08:00
    @godblessumilk 笑死,老哥深受其苦啊
    lostsquirrelX
        113
    lostsquirrelX  
       2023-02-15 11:16:04 +08:00
    我们用汇编吧
    nyakoy
        114
    nyakoy  
       2023-02-15 11:25:06 +08:00
    V 站 block 得第 2 个人,整天在这里引战找存在感,前几天“只有我觉得 chatgpt 索然无味吗?”,今天“只有我觉得面向对象很蠢吗?”,你是电你是光,
    thinkershare
        115
    thinkershare  
       2023-02-15 11:25:34 +08:00
    典型的想的太多,写的太少。
    tool2d
        116
    tool2d  
       2023-02-15 11:29:14 +08:00
    @godblessumilk 全局变量满天飞很容易避免的吧。

    把需要用到的状态封装起来,放到函数参数里传入传出就可以了。

    我看以前 C 语言,函数一般都带一个 context 参数维护当前状态。
    alexzuo
        117
    alexzuo  
       2023-02-15 11:32:37 +08:00
    如果只拿一个场景就说一个编程范式糟糕,那我觉得可能是你没找到合适场景。
    就像你用大炮打蚊子,打起来很费劲,不是因为大炮糟糕。
    Mark24
        118
    Mark24  
       2023-02-15 11:34:01 +08:00
    学而不思则罔,思而不学则殆
    xFrye
        119
    xFrye  
       2023-02-15 11:36:19 +08:00
    op 是很缺铜币么? 上个帖子是 chatgpt ,这个是 Java 。如果真的缺那我建议后面你可以喷喷 iPhone mac 之类的,保证你挣得盆满钵满
    superedlimited
        120
    superedlimited  
       2023-02-15 11:38:11 +08:00
    @godblessumilk 不好意思,跑个题,为什么急的时候,要剁屌呢。
    krixaar
        121
    krixaar  
       2023-02-15 11:40:27 +08:00   ❤️ 1
    @tool2d #116 我怎么感觉按照这个逻辑,根据 DRY 原则,封装着封装着就把面向对象给做出来了呢🤣……
    uni
        122
    uni  
       2023-02-15 12:49:34 +08:00   ❤️ 3
    太同意了!!这么久了我也仍然保持着跟 lz 一样的想法,这也是我一直抗拒搞后端的原因

    前端的实践早就证明了不用面向对象,用偏向函数式的写法完全可以处理复杂的问题,我觉得那些眼里只有面向对象的人真的很落后
    bk201
        123
    bk201  
       2023-02-15 12:57:41 +08:00
    说了半天,你就 show 了我一个 hello world ,do not talk more ,show me your code
    uni
        124
    uni  
       2023-02-15 13:00:19 +08:00   ❤️ 1
    @546L5LiK6ZOt 我觉得这反而应该是软件工程应该反思的问题,人类对这个世界的思考与建模有着几千上万年的历史,而数学正是人类探索出来的对这个世界进行建模的伟大框架,看看其他学科(物理学、经济学等等)只要是涉及应用工程计算的都是在用数学作为其最底层的工具,而函数就是数学里面的一个最为基础的东西,所以函数对于人类的思维来说才是最自然的

    反而软件工程自己搞出的面向对象这种扭曲的东西,每次我用数学思考完问题之后写代码的时候又得被迫用面向对象来思考,感觉自己像被强奸一样
    WebKit
        125
    WebKit  
       2023-02-15 13:03:38 +08:00 via Android
    楼主多大了?
    krixaar
        126
    krixaar  
       2023-02-15 15:26:17 +08:00
    @uni #124 面向对象也是数学思想,“因为 X 是一种特殊的 Y ,所以 X 具有 Y 的性质,适用于 Y 的公式同样适用于 X”,甚至很多讲继承的教程都在用 class 正方形 extends 矩形 来举例,因为学数学 /物理的时候都是这么学的,从特殊的简单概念入手,一步步往更广的方向上推。
    只不过某些时候 OOP 非得 class 正方形 extends 矩形 extends 平行四边形 extends 四边形 extends 多边形 extends 平面图形 巴不得继承个祖宗十八代才是该喷的点。
    dqzcwxb
        127
    dqzcwxb  
       2023-02-15 16:12:23 +08:00
    DNA
        128
    DNA  
       2023-02-15 16:15:59 +08:00
    You can you up , no can no BB
    546L5LiK6ZOt
        129
    546L5LiK6ZOt  
       2023-02-15 17:09:55 +08:00
    @uni 我是实践派哈哈~ 数学是很好,但是不是所有人都懂。用数学语言跟各方人员沟通,感觉现实不太可行。。。
    netabare
        130
    netabare  
       2023-02-15 20:07:08 +08:00 via Android   ❤️ 1
    @tool2d 函数式编程不是写函数,是探讨怎么以函数为最小可复用单位去进行各种组合和抽象。状态与否也不是函数式所关心的,状态本身在常见的函数式编程语言里可以用数据结构来表达。

    如果您说的写函数是指,`void fun() { foo(); bar(); baz() }` 这种写法,这和函数式完全没有任何关系,这叫过程式,写的其实也只是子过程而已。

    函数式编程至少要求可组合的函数,比如说,`f x`,`g (f x)`,这里的函数和数学上的函数是可以一一对应的。那么对编程语言的要求也是最少要支持以函数为参数或者作为返回值来计算(也就是高阶函数)。至于其他更复杂的构造都是后话了。
    huijiewei
        131
    huijiewei  
       2023-02-15 20:38:47 +08:00
    我精通 100 种语言,都会写 hello world!

    我自己做了 200 种编程语言,都能输出 hello world!
    Cooky
        132
    Cooky  
       2023-02-15 20:56:44 +08:00
    这是 java 的问题,不是面向对象的问题

    java 的编程范式只适合堆屎山
    markx
        133
    markx  
       2023-02-16 03:14:31 +08:00
    你见过几种程范式和语言?
    apostleChan
        134
    apostleChan  
       2023-04-18 23:20:19 +08:00 via iPhone
    营销就是制造冲突
    soclearn
        135
    soclearn  
    OP
       2023-04-27 03:43:28 +08:00
    @netabare 才发现你说得这么好
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2056 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:37 · PVG 08:37 · LAX 16:37 · JFK 19:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.