您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

写了十年代码,面向对象还是一知半解,这也不能全怪你

时间:2022-01-12 09:12:27  来源:  作者:腾飞说架构
写了十年代码,面向对象还是一知半解,这也不能全怪你

 

一、先说几个现象:

 

1.1

我曾经的团队中的几位优秀的架构师,写框架代码写的很不错的那种。他们为什么能写出好代码?为什么能做出复杂系统的设计? 他们自己好像也不能说出个所以然来。 我把这称之为意识流。(也就是大概是凭经验,靠感觉)并且,这种凭经验的说法也被不少DDD的专家大佬用来回答如何掌握领域建模能力上。

 

1.2

或者你也有一种感觉,你知道一些好的设计原则和模式,但是你不会用。 另外一种感觉就是UML的图你都会画,但是如果让你从0开始设计一套系统,你还是不知道如何开始。

 

1.3

只能凭经验这种说法,对于我一个管理者来说。它意味着不可快速培养,无法规模化;只能任由其自由生长,通过一个又一个项目来加强和验证一个人是否拥有良好的设计能力,是否有架构师的潜质 。 我始终无法接受这个结果。 虽然之前我也是一个经验和感觉型选手。

 

二、转机

 

2.1

转机的上半部分来自于我看了一书关于架构的神书《系统加构——复杂系统的产品设计与开发》 豆瓣评分达 9分。通常在8分以上就是值得一读的书了,9分的书读懂一本对某件事情的看法可能就会发生一些根本性的改观。这本书确实很难懂,至少我强行安利给了我身边的很多人,并且还组织过一段时间的读书分享小组。 这本书的作者对于架构的本质 ,以及如何来做架构是非常深的。虽然这本书的难懂确实让很多人放弃了,但我始终认为坚持看完3遍以上你对架构这件事情会产生很大的改观。

 

2.2

上面那本书虽然把架构的本质讲清楚了,但是并没有降低多少做架构的复杂度。直到我通过这种书里面用的概念建模语言OPM 找到了另一本书《基于模型的系统工程——综合运用OPM与SysML》 ,怎么说呢,我当时也是震惊的。因为这里面是这么说的:

 

功能是整个模型由此逐渐演变的种子。这条原理可能违反直觉。因为许多工程师倾向于从结构——对象、系统包括的实体,而不是功能开始建模。

 

也就是说它是从找到关键过程开始的,这有一种好像回到面向过程的方法里面去了。要知道在《面向对象分析与设计》里面,格雷迪大佬明确地表示这种结构化的设计过程是不可取的。

 

2.3

以公交车载客为例,如果是用面向对象的方式描述,就会把整个系统分为公交车,司机,乘客,车站等,然后分析它们在整个系统运作中的互动关系,关注的焦点是对象;而如果是面向过程,则会把整个从过程拆解为“开始跑路线-载客-启动-到站”,关注的焦点是过程。

 

面向对象的建模(当然,这是静态结构的建模,如果要对动态行为进行建模,我们还需要一个时序图来表示)

写了十年代码,面向对象还是一知半解,这也不能全怪你

 

我们可以用乘客和司机为主体找到这样几个关键过程。(有人可能会发现这跟UML里面的用例图是很像的)

写了十年代码,面向对象还是一知半解,这也不能全怪你

 

是的在OPM 里面会把角色也当成一个对象,它的类型是主体对象。主体对象作为一个人类对象操纵一个过程;但是如果接下来的操作可能会让你出乎意料了。

写了十年代码,面向对象还是一知半解,这也不能全怪你

 

当然我们通过一个“过程”,它可以作为一个抓手或者推导,帮我们很自然地找到相关的对象。比如:

  • 司机跑公交,用的是哪辆公交车?找到一个输入对象
  • 司机跑公交,跑的是哪条线路?找到另一个输入对象
  • 司机跑公交,会产生什么?一条在进行中的线路(Running Itinerary) ,找到一条受过程影响的对象 。
  •  

以乘客的上车和下车过程作为推导,你会找到什么?

 

三、OO VS OP

 

OO我们说的是面向过程,但是这里的OP 不是面向过程。而是对象过程 。OPM它的全称叫做Object Process Methodology 对象过程方法。是由以色列理工学院的Dov Dori教授研发出来的,它的目的是将面向对象的图表和面向过程的图表综合到一套方法中,更方便对系统架构进行描述。所以你看到上面将对象与过程放到了一张图里面。

 

它没有改变OO里面关于抽象、封装、模块化与层次的本质 。而区别于OO里面仅通过在总是域中找名称的形式来进行类的抽象,坦白讲这有点像老师跟你说你自己想一下。虽然这个道理很深奥,但是可能很难参透。

 

而OPM给我们带来的是找到关键过程,然后通过关键过程的链接(主体对象、工具对象、输入对象、受影响的对象)等,为我们搭建了一个桥梁,能够帮助我们降低抽象的门槛。并同时能够让我们利用OO的思想中的那些本质元素:抽象、封装、模块化与层次。 (OPM对于层次的建模不需要像UML那样分为多张图)

 

四、这是广告

 

我在我们一期功能架构训练营中将架构过程与OPM相结合,打造了一套科技学落地架构设计过程与方法。同学学完之后是这么说的:

学习这个打开了我的新世界 ,原来这个还有方法论。我也有下载你说的那个系统架构:复杂系统的产品设计与开发,用琐碎的时间看了前面2张,后面就扔掉了。从投资与回报来说,你的课程确实性价比特别高。

在前几天我还没有意识到虽然这个过程是已经存在的,但是它之前是被应用在更广泛的系统设计上(比如硬件或者其它系统),但是在软件设计领域,可能还没有。(如果有的话麻烦告诉我- -、) 想想这个过程可能拯救国内600万被OO搞的头大的程序员于水火之中,这件事情就值得我好好地去推广。



Tags:面向对象   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
C++的面向对象编程:深入解析与理解
当我们谈论C++时,面向对象编程(OOP)是一个无法回避的话题。那么,C++的面向对象究竟是什么?为什么它如此重要?本文将从基本概念到实际应用,为您详细解析C++中的面向对象编程。一、面...【详细内容】
2024-01-03  Search: 面向对象  点击:(103)  评论:(0)  加入收藏
谈谈面向过程、面向对象、面向切面三种编程思维
面向过程、面向对象、面向切面是三种不同的编程思维,它们有各自的特点、优缺点和应用场景。下面简单介绍一下:面向过程(Procedure Oriented Programming):是一种以事件为中心的编...【详细内容】
2023-11-30  Search: 面向对象  点击:(200)  评论:(0)  加入收藏
深入了解Python类与面向对象编程
在编程世界中,面向对象编程(OOP)是一种强大的编程范式,而Python是一门优雅而强大的编程语言。本文将带你深入探讨Python中的类与面向对象,为你揭示面向对象编程的奇妙世界。类与...【详细内容】
2023-10-13  Search: 面向对象  点击:(244)  评论:(0)  加入收藏
Python面向对象详解
下面从这几个方面来详细详解python面向对象: 初识对象 成员方法 类和对象 构造方法 其它内置方法 封装 继承 类型注解 多态 综合案例一、初识对象生活中数据的组织 学校开学...【详细内容】
2022-12-29  Search: 面向对象  点击:(349)  评论:(0)  加入收藏
C风格的面向对象,以及scf编译器框架对它的支持
C风格的面向对象设计,是从Linux内核代码流行开的一种设计模式。C++并不适合编写系统内核代码,但内核里的很多模块又非常的OOP[呲牙]所以Linux之父就想出了这么一套C风格的OOP,...【详细内容】
2022-09-25  Search: 面向对象  点击:(679)  评论:(0)  加入收藏
面向对象的SOLID五大原则
前序做C语言开发的应该都知道,C是面向过程开发的,而c++是面向对象开发的。而封装、继承与多态是面向对象开发的三大特征。但你可能不知道OOD(Object-Oriented Design)还有五大...【详细内容】
2022-07-29  Search: 面向对象  点击:(437)  评论:(0)  加入收藏
ch15、面向对象编程-行为的定义和实现
Is Go an object-oriented language?Yes and no. Although Go has types and methods and allows an object-oriented style of programming, there is no type hierarchy....【详细内容】
2022-07-27  Search: 面向对象  点击:(498)  评论:(0)  加入收藏
用面向对象的方式操作 JSON 甚至还能做四则运算 JSON 库
前言在之前实现的 JSON 解析器中当时只实现了将一个 JSON 字符串转换为一个 JSONObject,并没有将其映射为一个具体的 struct;如果想要获取值就需要先做断言将其转换为 map 或...【详细内容】
2022-07-05  Search: 面向对象  点击:(378)  评论:(0)  加入收藏
什么是面向对象编程?终于懂了
面向对象的编程(Object-Oriented Programming ,OOP),每当看到这个术语,我们就会把它与Java联系起来。事实上,Java普及了面向对象的编程风格,除了Java之外,还有很多OOP语言,例如,C++、C...【详细内容】
2022-06-15  Search: 面向对象  点击:(311)  评论:(0)  加入收藏
新手小白学JAVA 面向对象之多态
1. 概念多态是面向对象程序设计(OOP)的一个重要特征,指同一个实体同时具有多种形式,即同一个对象,在不同时刻,代表的对象不一样,指的是对象的多种形态。可以把不同的子类对象都当作...【详细内容】
2022-05-28  Search: 面向对象  点击:(342)  评论:(0)  加入收藏
▌简易百科推荐
Meta如何将缓存一致性提高到99.99999999%
介绍缓存是一种强大的技术,广泛应用于计算机系统的各个方面,从硬件缓存到操作系统、网络浏览器,尤其是后端开发。对于Meta这样的公司来说,缓存尤为重要,因为它有助于减少延迟、扩...【详细内容】
2024-04-15    dbaplus社群  Tags:Meta   点击:(1)  评论:(0)  加入收藏
SELECT COUNT(*) 会造成全表扫描?回去等通知吧
前言SELECT COUNT(*)会不会导致全表扫描引起慢查询呢?SELECT COUNT(*) FROM SomeTable网上有一种说法,针对无 where_clause 的 COUNT(*),MySQL 是有优化的,优化器会选择成本最小...【详细内容】
2024-04-11  dbaplus社群    Tags:SELECT   点击:(1)  评论:(0)  加入收藏
10年架构师感悟:从问题出发,而非技术
这些感悟并非来自于具体的技术实现,而是关于我在架构设计和实施过程中所体会到的一些软性经验和领悟。我希望通过这些分享,能够激发大家对于架构设计和技术实践的思考,帮助大家...【详细内容】
2024-04-11  dbaplus社群    Tags:架构师   点击:(2)  评论:(0)  加入收藏
Netflix 是如何管理 2.38 亿会员的
作者 | Surabhi Diwan译者 | 明知山策划 | TinaNetflix 高级软件工程师 Surabhi Diwan 在 2023 年旧金山 QCon 大会上发表了题为管理 Netflix 的 2.38 亿会员 的演讲。她在...【详细内容】
2024-04-08    InfoQ  Tags:Netflix   点击:(5)  评论:(0)  加入收藏
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(9)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(16)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(13)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(9)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(14)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(10)  评论:(0)  加入收藏
站内最新
站内热门
站内头条