【转】是什么限制了我们面向对象(的开发)

【鸿蒙实战开发】HarmonyOS开发-面向对象 有很多小伙伴不知道该从哪里开始学习鸿蒙开发技术?也不知道鸿蒙开发的知识点重点掌握的又有哪些?自学时频繁踩坑,导致浪费大量时间。结果还是一知半解。所以有一份实用的鸿蒙(HarmonyOS NEXT)全栈开发资料用来跟着学习是非常有必要的。获取这份完整版高清学习路线,请点击→[鸿蒙全栈开发学习资料]这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了。 阅读详情

到底国内有多少公司在用OO的开发模式呢?又是什么限制了OO的开发模式呢?
也许这篇文章可以给我们一些启迪

           是什么限制了我们面向对象(的开发)

作者:LoveCherry
    今天看到优快云中的两个讨论贴,一个帖子在说技术经理不允许团队成员使用面向对象的方式开发程序,另外一个帖子(找不到地址了)说某个团队成员在尝试使用面向对象的方式设计和写程序,但是遭到了其它程序员的鄙视。
    或许你也在郁闷,为什么跳槽了这么多公司,想学一些面向对象的开发方式,怎么弄来弄去都还是基于对象(基于面向对象框架的开发)的开发呢?我想,其中的原因可以从几个方面来说:

公司
1.       公司性质
          如果公司本身就是一个面向小客户(比如制作小网站)、面向外包的小公司,或者公司并不小,但是公司的开发团队仅仅属于公司的后勤部门,开发的产品并不能给公司带来利润等等原因都可能使得开发向简单化、过程化发展。
2.      管理团队
         就像前面那个网友说的,技术经理不允许面向对象开发。可能技术经理看的是项目的维护性、看的是项目的进度,而没有看到项目远期的维护性和扩展性。也可能技术经理并不反对,而他的上司是非常看重眼前利益的,技术经理也无能为力。管理团队的任何一个层次都可能会对开发模式产生影响。

项目
      正因为有前面说的那些公司,导致项目往往有以下的特点:
1.       项目进度非常赶并且一个接一个。我们除了能运用成熟的开发流程、框架之外哪里还要时间思考过多的问题呢?
2.       项目的可维护性和可扩展性不重要,甚至有的项目要求就是可维护性差、可扩展性差(公司希望项目卖出去之后从客户那里获取更高的维护费用)。
3.       项目非常小,而且偏向于网站。由于网站以数据为中心、业务逻辑较少并且注重性能的特殊性,要在这样的项目中推行面向对象的开发确实是实际效果比较差的。


团队
    由于公司的性质或项目的性质就导致了产生了这样的一些团队:
1.       开发人员水平参差不齐。这里的水平包括基础、经验以及学习能力。由于面向对象需要开发人员有一定时间的OO思想的积累,对于这样一个团队,即使推行了OO,不知他们之间的协作会有什么问题呢?
2.       开发人员没有良好的OO背景。有些人以前是做ASP的,有些人以前是做VB的,可能对于做ASP.NET的开发人员来说有ASP和VB背景的人比较多。这样的话就会导致难以整体转化开发思想,即使转换了,代价也比较大。
3.       团队中没有对OO经验丰富的人,或者从组织结构上说,团队中并没有设计师的角色,项目经理手下都是普通“老百姓”。
4.       团队的学习气氛不好。很多团队死气沉沉,上班-下班,团队中也有很多年龄较大的程序员,要在这样的团队中推行新的开发思想确实很难。
5.       团队过于庞大。
6.       更极端的情况是,团队中所有人都是只会增删改的初级程序员,而项目经理完全不懂技术(招聘的时候只求工资低,面试只看是不是会使用控件进行增删改)。


技术
如果团队已经习惯了基于过程化的开发,那么要向面向对象开发进行转换还需要解决非常多的关键问题:
1.       持久化
          关系型数据库和领域(业务对象)模型之间有比较大的差异,我们不得不依靠一些ORM框架来实现业务对象的持久化,ORM框架的性能、ORM框架的学习难度、ORM框架的可靠性都是在把框架应用到项目中需要考虑的问题。
2.       对象呈现
          业务对象往往是相互关联的复杂结构,而UI往往是平面化(一维或二维)的趋向于关系型数据库一种表现方式,这个转换过程可能会很复杂,所谓的面向对象是不是没事找事把关系型数据转化为业务对象,再把业务对象格式化成UI喜欢的数据源(比如DataTable)呢?
3.       性能
          前面说的2点都可能会产生性能问题。首先,表现层是否需要完整的业务对象,其次,是否需要从数据库中获取完整的业务对象。如果界面上只希望显示10K数据,而ORM框架却从数据库中获取了100K数据并且把它们都传给了表现层,是不是不太合理?如果说还引入了分布式的话,那么网络上传输的代价就会更大。从小的层次来说,面向对象本身就或多或少降低了性能。


主观原因
    如果上述这些客观原因都不存在的话推行面向对象开发还有难度,那么可能还有一些主观原因存在:
1.       给自己很多不使用OO的理由。拿到项目了,总是想项目太小、进度太紧,算了这次不尝试OO了,以后遇到其它项目再来尝试吧。没有小项目的思考,怎么能遇到大项目而不慌乱呢?
2.       没有责任心。希望尽快结束项目,在项目可维护性变得很差连自己都不想维护的时候往往也是我们引咎辞职的时候。
3.       没有转换的动力。大家沉浸在一个不错的过程化开发过程中,宁可愿意把维护的工作留给新来的同事也不愿意去尝试新的开发过程。


理想的环境
    你或许一直在寻觅这样一个环境:
1.       不错的公司,从事大型企业级软件的开发,有着经验丰富并且开明的项目经理。
2.       项目周期长、项目大且复杂,客户对项目的维护性和扩展性要求比较高。
3.       团队中不乏经验丰富的构架师和OO达人,团队讨论气氛良好。
4.       有完整的基于面向对象的解决方案,开发流程非常正规。
说实话在国内确实很少。很多时候,我们能看到的也仅仅是在表面上非常好,而在真正的开发过程中发生
扭曲的环境。

说说我们的情况
1.       项目是为公司的产品服务的,团队的产出不会给公司带来直接利润,也不是公司的技术核心。
2.       团队不大,团队成员水平相差较大,以我为90分的话,那么团队中有20分的,也有80分的。几乎所有人都有非OO语言的背景,也可以说是由于ASP.NET而接触C#的,而不是由于C#而基础ASP.NET的,导致基本没有任何OO概念。
3.       项目都是不超过2个月的超小项目,甚至会有很多2天的“项目”(其实就是做一个页面)。项目基本都是以数据为中心的网站,而且对性能要求非常高。项目对时间要求非常苛刻,说好这个时间点连一天都不能晚。
        基于这些情况,我思考了很久还是决定以一套学习曲线低的构架、流程来开发这些项目。不过,这并不是说我们永远就是过程化开发了,我会在时机成熟的时候把一套合适的面向对象开发流程推给团队(请注意这里的“时机成熟”以及“合适的”两个词)。个人认为,只要有明确的开发方式、相对成熟的开发框架,上面的3点并不能挡住我们OO的脚步(“我们”仅指我们团队),只不过,我还在寻找一个合适的切入点。


讨论
       基于这些客观或主观原因(其实,往往这些原因是交错的,因为这个也就产生了那个),真正面向对象的开发(包括完善的开发流程)在国内大多数公司(包括我们公司)中难以推行,(由于快下班了,我并没有过多去思考改善的方法)请大家讨论…………(本文只是总结一下现况,并不表达过程化开发和面向对象开发的优劣)

原文地址:http://www.cnblogs.com/lovecherry/archive/2007/11/02/947321.html
 

Python中的面向对象程序设计 面向对象程序设计 面向对象程序设计是在面向过程程序设计的基础上发展而来的,它比面向编程具有更强的灵活性和扩展性,本次学习需要了解以下内容; ①了解什么是面向对象; ②掌握如何定义和使用类; ③掌握如何创建类的属性; ④掌握继承的基本语法; ⑤掌握方法重写; 1、面向对象概述 面向对象是一种设计思想,从20世纪60年代提出面向对象的概念到现在,它已经发展成为一种比较成熟的编程思想,并且逐步成为目前软... 阅读详情

相关推荐

面向对象的软件开发

面向对象的软件开发Linda M. Northrop(本文转载自软件工程专家网www.21cmm.com,不代表gigix观点)1 历史回顾   针对日趋复杂的软件需求的挑战,软件业界发展出了面向对象(OO)的软件开发模式。目前作为针对“软件危机”的最佳对策,OO技术已经引起人们的普遍关注。最初被多数人看作只是一种不切实际的方法和满足一时好奇心的研究

透明思考@优快云 4776

是什么限制了我们面向对象(的开发) (转)

今天看到优快云中的两个讨论贴,一个帖子在说技术经理不允许团队成员使用面向对象的方式开发程序,另外一个帖子(找不到地址了)说某个团队成员在尝试使用面向对象的方式设计和写程序,但是遭到了其它程序员的鄙视。 或许你也在郁闷,为什么跳槽了这么多公司,想学一些面向对象的开发方式,怎么弄来弄去都还是基于对象(基于面向对象框架的开发)的开发呢?我想,其中的原因可以从几个方面来说:   ...

weixin_33711641的博客 71

【设计模式】面向对象式开发的发展史

总的来说,面向过程式开发相对容易,但不容易应对变化;面向对象式开发困难,但却能更好的应对千变万化的世界。所以,现代的软件需要面向对象式开发,这是属于它的时代,但未来是谁的天下?!我们拭目以待。。

Dwyane 1615

是什么限制了我们面向对象(的开发)

今天看到优快云中的两个讨论贴,一个帖子在说技术经理不允许团队成员使用面向对象的方式开发程序,另外一个帖子(找不到地址了)说某个团队成员在尝试使用面向对象的方式设计和写程序,但是遭到了其它程序员的鄙视。或许你也在郁闷,为什么跳槽了这么多公司,想学一些面向对象的开发方式,怎么弄来弄去都还是基于对象(基于面向对象框架的开发)的开发呢?我想,其中的原因可以从几个方面来说: 公司 1.

ek_bin的专栏 466

python语言进阶之面向对象程序设计

python语言进阶之面向对象程序设计

weixin_73831735的博客 1378

Python面向对象之访问限制

为什么要做访问限制, 做访问限制,是为了程序的健壮性。如果可以从外部对函数里面重要的属性进行任意修改,有可能程序崩溃只是因为一次不经意地参数修改。 通过定义私有属性做访问限制 默认情况下,可从外部访问对象的属性。若让属性不能从对象外部访问,可将属性定义为私有。 私有属性只能通过存取器方法来访问 Python没有为私有属性提供直接的支持,要让方法或属性成为私有的(不能从外部访问),只需让其名称以两个下划线打头即可 class Apple(): def name(self,name):

weixin_42551921的博客 4806

Python 面向对象访问限制详解

在面向对象编程中,类就像一个蓝图,定义了对象的属性(数据)和方法(行为)。但不是所有的属性和方法都适合让外部随便访问。比如,一个银行账户的余额(balance),你肯定不希望随便谁都能改动它!访问限制就是用来控制这些“敏感”部分的,谁能访问,谁不能访问。公开成员是 Python 的默认设置。你定义的任何属性或方法,只要不加特殊前缀(像或__),就是公开的。类内部、子类、外部代码都能随便访问。

余子越的博客 895

FFmpeg视频缩放终极指南:从基础命令到保持宽高比的5种实战技巧

本文是FFmpeg视频缩放的终极指南,详细讲解了从基础命令到保持宽高比的5种实战技巧。针对不同平台(如抖音、B站、Instagram)的分辨率要求,提供了具体的参数模板和批量处理脚本,帮助内容创作者高效、精准地调整视频大小,避免画面变形或黑边问题,实现多平台适配。

juice的博客 462

Harmony 开发的艺术 面向对象

然后你可以创建多个子类,如“圆形”、“矩形”和“三角形”,它们都继承自“形状”类并实现了自己的“绘制”方法。尽管每个对象的类型可能不同(圆形、矩形、三角形等),但由于它们都继承了“形状”类并实现了相同的“绘制”方法,因此你可以通过父类引用来统一调用它们的方法。然后你可以创建一个“狗”类,它继承自“动物”类,并添加或覆盖一些特定的属性和方法(如“叫”和“摇尾巴”)。所以面向对象的三大特征(封装、继承、多态)在java语言中很容易实现的设计,搬到早期的JavaScript中,就变噩梦一样的存在。

不懂先生的博客 1458

Vue3 + OpenLayers 开发指南(一) - 环境搭建与基础配置

本文详细介绍了如何从零开始搭建Vue3与OpenLayers的集成开发环境。通过项目初始化、核心依赖安装、目录结构规划及基础配置,手把手引导开发者创建一个结构清晰、可维护的现代化WebGIS应用骨架,为后续添加地图图层和交互功能奠定坚实基础。

weixin_28049429的博客 342

【DRAM存储器六十二】DDR5介绍--引脚和基本功能简介

详述DDR5与DDR4的引脚区别和DDR5基本功能

highman110的博客 532

python_面向对象进阶之属性值的限制

需求:限制属性值age范围在0~88 代码如下: 装饰器@property:把age属性暴漏出去,函数名字就是属性名字 假设只暴露@property下的函数,没有暴露@age.setter下的函数:表示当前这个属性只允许去读,不允许去修改 @age.setter:表示当前age属性允许修改(赋值),其实真正的属性是_age 当只暴露@property下的函数 当我进行修改name的时候报错:AttributeError: can’t set attribute ...

python全栈 762

用 C# 快速构建一套可扩展的上位机框架(实战+源码思想)

本文介绍了一套基于C#的工业上位机开发框架设计方案。该框架通过模块化设计解决了上位机开发中的常见痛点,包括协议适配、通信管理、UI绑定等问题。核心架构采用分层设计,包含协议接口层、调度器层、通信抽象层和UI层,支持MVVM模式。框架提供了协议插件化扩展能力,通过JSON配置实现设备协议定义,同时封装了日志管理、异常处理等基础功能。该方案具有快速搭建、协议驱动、UI分离等特点,可显著提升上位机开发效率,适用于串口、TCP等多种通信场景,并能快速适配新设备协议。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 886

鸿蒙NEXT开发【面向对象】

**Harmony**应用的主要开发范式,是采用了类似面向对象的范式。

houxiliOH的博客 988

工业视觉降本300%实战:C# + 开源YOLO如何干掉Halcon/VisionPro?

在当前制造业普遍追求“降本增效”的大背景下,工业视觉检测系统作为产线的眼睛,其成本问题日益突出。通过该方案,我们成功帮助一家电子厂将单条产线的视觉检测成本从15万降低至不足5千(主要为工控机硬件成本),降本幅度超过95%,且系统稳定性经受住了6个月连续生产的考验。:C#负责“工程化”和“业务逻辑”,YOLO负责“智能算法”,二者结合,完美覆盖了工业视觉从算法到落地的全链路。的组合,构建一套高性能、低成本、易维护的工业视觉解决方案,并彻底替代昂贵的付费库。” 这是一个典型的误区。工业相机/USB相机。

2601_94871597的博客 431

【ArcGIS】07 ArcHydroTools对COM组件的调用返回了错误

在用Arc Hydro Tools提取流域时,在DEM Reconditioning时可能会遇到这个问题: 经过摸索,发现了问题产生的原因: 结果文件保存在了有中文的路径中。 解决的办法: 首先,把ArcGIS切换成英文版 搜索ArcGlS Administrator,以管理员方式打开 点击高级,选择语言为English 其次,新建mxd文档 删除原来的mxd文档,新建mxd文档,放置原来的图层文件。如果不这样做,最后一步的Map Name还会是“图层”这两个汉字。 最后,设置Arc Hydro T

记录专业模型开发、算法程序设计、软件学习笔记、生活日志。 4921

几种典型的面向对象开发方法

摘 要 自80年代后期以来,相继出现了多种面向对象开发方法,文章主要介绍了其中六种典型的面向对象开发方法,并对它们进行了比较。UML的出现意味着开发方法统一化、标准化的新发展,标志着软件自动化的进程又迈进了一步。关键字 面向对象开发方法 典型 比较 一、引言随着计算机科学的发展和应用领域的不断扩大,对计算机技术的要求越来越高。特别是当计算机硬件有了飞速发展之后,各种应用领域对软件提

苏的博客 1万+

使用再生龙备份还原liunx系统(精确每一步)

再生龙镜像可自行到官网下载(ISO/ZIP格式均可),然后使用tuxboot烧录工具制作启动盘,另外准备一个U盘用来存储备份的镜像文件,即再生龙盘和存储盘是两个分开的。当然也可以用分区工具把同一个硬盘分区来使用,比较方便,先学会基本的吧,只是告诉有个捷径,省个U盘。

米可的博客! 8382

面向对象软件开发和过程

面向对象发展到今天,已经出现了许许多多优秀的实践、方法和技术。很多的技术都能够有效地提高软件质量,而要用好这些技术,我们需要从过程和管理的角度来看待它们,而不是为了使用技术而使用技术。在一个有效的组织中,必定拥有杰出的一线人才。软件设计也是一样的,一线人才的素质决定了软件的质量。从敏捷的观点来看,代码是检验软件过程是否有效的最终标准。目前为止,以及在短时间的未来,我们都不太可能完全脱离代码进行

雪崩 的专栏 1703

【项目实战】自动化测试软件VectorCAST介绍

VectorCAST是一款先进的自动化测试软件。VectorCAST是一款功能强大、易于使用的自动化测试软件。VectorCAST适用于各种嵌入式系统的测试。VectorCAST为嵌入式系统的测试提供了一种高效、可靠的解决方案。VectorCAST提供了一整套完整的测试工具,包括测试管理、代码覆盖、缺陷定位、报告生成等,以帮助开发人员提高测试效率,确保软件质量。VectorCAST支持。

奶爸的编程之路,也就一周冷个三天 2013

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Python全栈开发(四)——python面向对象编程

我们前面讲完了全栈开发的第一部分——基础,今天我们说说第二部分——面向对象编程。我们从什么是类,什么是对象,以及面向对象的三要素等方面来说说。目录前言面向对象类是什么对象是什么对象都是某个类别的实例。python对象中的类成员方法属性面向对象三要素封装继承多态创建类类对象的使用抽象类python中的abc模块访问限制为什么要做访问限制通过定义私有属性做访问限制通过定义私有函数做访问限制;默认情况下,可从外部访问对象的属性。若让属性不能从对象外部访问,可将属性定义为私有。私有属性只能通过存取器方法来访问。

爱吃饼干的小白鼠的博客 1366

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

python面向对象编程(访问限制)

在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。 从Student类的定义来看,外部代码还是可以自由地修改一个实例的name、score属性 class Student(object): def __init__(self,name,score,ww): self.name=name self.score=score self.ww=ww def prins(se

weixin_49198853的博客 185

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: 数据表中遍历寻找子节点的三种实现方法
下一篇: 【转】动静之间,不变的本质--我的程序语言实践
SysBug
博客等级 码龄22年 3粉丝 14原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值