首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

面试题: 了解OO的SOLID原则吗

这时,对正方形类设置不同的长和宽,计算面积的结果是最后设置那项的平方,而不是长*宽,从而发生了与长方形不一致的行为。如果程序依赖了长方形的面积计算方式,并使用正方形替换了长方形,实际表现与预期不符。...+/Java/Python/Ruby/C#都有深远影响。...实际上,依赖倒置是实现开闭原则的方法。 举例 开闭原则的场景仍然可以说明这个问题。以下换一种表现形式。 ?...依赖注入 一个类依赖另一个类的功能,那么就通过注入,如构造器、setter方法等,将这个类的实例引入。 侧重于实现。 控制反转 创建实例的控制权由一个实例的代码剥离到IOC容器控制,如xml配置中。...侧重于原理。 反转了什么:原先是由类本身去创建另一个类,控制反转后变成了被动等待这个类的注入。

1.1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    你真的理解 SOLID 面向对象设计原则吗?

    这时,对正方形类设置不同的长和宽,计算面积的结果是最后设置那项的平方,而不是长*宽,从而发生了与长方形不一致的行为。如果程序依赖了长方形的面积计算方式,并使用正方形替换了长方形,实际表现与预期不符。...+/Java/Python/Ruby/C#都有深远影响。...实际上,依赖倒置是实现开闭原则的方法。 举例 开闭原则的场景仍然可以说明这个问题。以下换一种表现形式。...依赖注入 一个类依赖另一个类的功能,那么就通过注入,如构造器、setter方法等,将这个类的实例引入。 侧重于实现。 控制反转 创建实例的控制权由一个实例的代码剥离到IOC容器控制,如xml配置中。...侧重于原理。 反转了什么:原先是由类本身去创建另一个类,控制反转后变成了被动等待这个类的注入。 后记 网络上很多文章中关于SOLID的介绍,语句都不通顺,徒增理解难度。

    75630

    写了这么多年代码,你真的了解SOLID吗?| 洞见

    先抛出我的观点: 单一职责是所有设计原则的基础,开闭原则是设计的终极目标。里氏替换原则强调的是子类替换父类后程序运行时的正确性,它用来帮助实现开闭原则。...就像计算机一样,组件可以轻松扩展。硬盘太小?直接换个大的,显示器不够大的?来个8K的怎么样? ? 什么时候应该应用开闭原则,怎么做到呢?...随着技术发展,我们有了更多的方法来实现开闭原则,包括接口、抽象类、策略模式等。 我们也许永远都无法完全做到开闭原则,但不妨碍它是设计的终极目标。...如果r是一个正方形,则面积为16 } 代码中testArea方法的参数如果是正方形,则面积是16,而不是期望的20,所以结果显然不正确了。...过程式编程的依赖没有倒置,A Simple DIP Example | Agile Principles, Patterns, and Practices in C#这篇文章以开关和灯的例子很好地说明了这一点

    83310

    Python计算三角形的面积

    1 问题 在学习中我们可以发现关于三角形面积的计算经常广泛运用到各种实际问题中,而本文将要针对如何用python计算三角形的面积展开探讨。...2 方法 解决问题的方法步骤: 首先要知道三角形是如何根据三边长度计算面积的,就要知道海伦公式 定义三个变量,用于表示三角形的三条边 引入海伦公式的计算方法,求取三角形面积 最后写上输出语句,对三角形的面积进行输出...float(input()) c = float(input()) p = (a+b+c)/2 x = p*(p-a)*(p-b)*(p-c)s = math.sqrt(x)print('面积...:' + str(s)) 3 结语 针对如何用python计算三角形的面积的问题,提出海伦公式的方法,通过python的运行实验,证明该方法是有效的。...通过各种资料查询知道,还有其他的方法计算此类问题,如普通面积公式法和if循环法,可以运用此类方法不断改进,找到最优方案。

    11510

    ACM成长之路(干货) 我爱ACM,与君共勉

    大学期间,ACM队队员必须要学好的课程有: l C/C++两种语言 l 高等数学 l 线性代数 l 数据结构 l 离散数学 l 数据库原理 l 操作系统原理 l 计算机组成原理 l 人工智能...计算几何初步 a) 三角形面积 b) 三点顺序 4. 学会简单计算程序的时间复杂度与空间复杂度 5. 二分查找法 6. 简单的排序算法 a) 冒泡排序法 b) 插入排序法 7....h) 求矩形的并的面积 i) 求多边形面积 j) 求多边形重心 k) 求凸包 选修 可以学习一种C++的开发框架来编写一些窗体程序玩玩(如MFC,Qt等)。...a) 各种旋转卡壳相关算法 b) 三维计算几何算法 理解数据库原理,学会SQL语句 学好计算机组成原理 学习Transact-SQL语言,学会使用触发器,存储过程,学会数据库事务等。...一些如蚁群算法,遗传算法,模拟退火算法等人工智能方面应用较广的随机性算法。 把编译原理上学的东西应用到编程中:如DFA,NFA,还有语法分析的各种方法等。

    1.2K50

    ROC曲线绘制原理及如何用SPSS绘制ROC曲线

    但是ROC曲线绘制的原理是什么,或者说如何一步步画出ROC曲线,以及如何用SPSS软件快速绘制出ROC曲线呢?对于很多新手朋友来说,对上述问题并不十分清楚。...ROC曲线的主要用途 前面已经提到,ROC曲线的主要用途有两个:1)评价某个/多个指标对两类被试(如病人和健康人)分类/诊断的效果。...通过画出某个指标的ROC曲线就可以很明确地看出其分类/诊断效果的好坏;另外,可以同时画出多个指标的ROC曲线并计算各自的AUC(area under ROC,ROC曲线下的面积),就可以知道哪个指标的分类...ROC曲线的绘制原理 ROC曲线是如何绘制出来的呢?在此之前,我们先学习几个基本的概念。...总结 本文主要对ROC曲线绘制的原理以及如何用SPSS软件快速绘制出ROC曲线进行了详细的阐述,希望对大家的研究有所帮助。

    5K11

    一周技术学习笔记(第85期)-两篇文章13个问题重入OO设计思想

    其实严格来说,也不能完全这么说,因为早在计算机诞生的时候(新增的过渡词),冯·诺依曼体系的中央处理器(CPU)的设计完美就已经体现了 “开闭原则” 的架构思想。...实践中,我们常常发现,来了个新需求,我们【要大面积修改以前的代码】。 我理解这样肯定不符合开闭原则。那我们在思考,是不是做需求的时候,我们要做些分析。...问题6:开闭原则\实践\反面2-“不修改” 那既然刚才提到,不能【大面积修改以前的代码】,那我们会不会走向另一个极端,比如我们的核心代码压根就不能修改!开闭原则中的“闭”,结合实践,具体要怎么拿捏?...比方说,我们原理都懂的了,但是开发需求的时候还是仍然不能应用得手,你怎么看呢? 目前来看,架构设计套路有限,设计原则也就是那些,也有限,但业务领域却是无限的。...3.开闭原则。 这是应对变化(主动的变化如功能扩展,被动的变化如故障修复)的最佳手段。

    48121

    Java设计模式之访问者模式

    访问者模式的工作原理在访问者模式中,访问者对象通过调用元素对象的 accept(Visitor) 方法,从而可以对元素对象进行访问。...假设我们有一个图形对象的结构,包含了不同类型的图形元素,我们希望实现一个访问者来计算每个图形元素的面积。...for (Element element : elements) { element.accept(visitor); } }}现在,可以使用访问者模式来计算图形元素的面积...最后,通过调用对象结构类的 accept() 方法来接受访问者对象,从而计算图形元素的面积。6....符合开闭原则:访问者模式通过将操作封装到访问者对象中,使得可以在不改变对象结构的情况下,增加新的访问者对象和操作,符合开闭原则。

    52410

    C# 中的灵活性:开闭原则

    遵循开闭原则能让你通过扩展现有类来添加新功能,这在大型团队协作中尤其有用,因为在这种情况下多个开发人员都依赖于相同的类。 如何在C#中运用开闭原则? 开闭原则可以通过继承或者接口来实现。...示例:违背开闭原则的不良设计 我们先从一个违反开闭原则的简单示例开始讲起。...这就违反了开闭原则,因为我们是在更改现有代码,而不是对其进行扩展(指CalculateDiscount方法)。 示例:遵循开闭原则的良好设计 让我们遵循开闭原则来避免上述问题。...我们将为折扣计算创建一个接口,然后针对每种客户类型去实现它。...每个类都会针对特定的客户类型计算折扣。

    5500

    面向对象设计的五项基本原则

    2.开放封闭原则(Open Closed Principle,OCP) 开闭原则指的是开放封闭原则,即对扩展开放,对修改封闭。 所谓修改封闭,就是之前设计好的类,不要去修改。...长方形类有两个成员变量,分别表示长和宽,有个计算面积的成员函数。假如计算面积的方法是virtual的,这样能实现多态。在先设定长和宽后再调用计算面积的方法。...我们知道正方形是长和宽相等的,如果设定长和宽的时候不是一样的,然后调用了正方形的面积计算公式,这样肯定就错了。你可能会问咋这么扯蛋啊,为啥把长和宽设成不一样啊。...C#中的有专门的接口interface,和类区分开来,而且C#中不像C++支持类的多继承,只支持接口的多继承,所以这里可以把接口理解成功能更小更特殊的类,一个接口可能就只要那么几个很少的方法就OK了。

    99220

    2022年Unity 面试题 |五萬字 二佰道| Unity面试题大全,面试题总结【全网最全,收藏一篇足够面试】

    C#中 委托和事件的区别 31. 结构体和类有何区别? 32. C#的委托是什么?有何用处? 33. foreach迭代器遍历和for循环遍历的区别 34. C#和C++的区别? 35....写出光照计算中的diffuse的计算公式? 33. LOD是什么,优缺点是什么? 33. 两种阴影判断的方法、工作原理? 34. Vertex Shader是什么,怎么计算? 35....C# 中不使用头文件。 C# 预处理器指令 异常处理:C#中引入了 finally 语句,这是C++没有的。 C# 运算符:C# 支持其他运算符,如 is 和 typeof。...对旋转角度进行计算时用到四元数 61. 将Camera组件的ClearFlags选项选成Depth only是什么意思?有何用处? 仅深度,该模式用于对象不被裁剪。 62....对于frag里的计算过程,如果可以抽出来放到CPU应用层、顶点阶段的优先放这里计算. 需要注意放到顶点阶段引起的平滑过渡问题. 如: eyeVec导致高光过渡问题.

    23.9K1731

    面向对象设计十条诫律

    遵循开闭原则 思考你的系统如何适应未来的变化。开闭原则指出: 一个系统应该以最小改变的代价添加新的功能,对于拓展是开放,对于修改则是闭合,也就是少修改成熟的代码,多拓展扩展新代码。...} } } } loan贷款类型有两个类型PersonalLoan和AutoLoan,当有新的贷款类型时如HomeLoan...采取下面结构则可以将新的类型作为子对象进行扩展,也就是使用继承扩展来应付新的贷款类型增加,符合开闭原则: public abstract class Loan { public abstract...“ 当你需要使用某个类的部分功能函数时,总是使用组合,因为使用继承就可能会在整个类型上与原始类绑定,绑定范围面积太大。如同男女上一次床就要结婚,这种绑定面积也是过大。...6.使得类内部高度聚合 不应该将数据和行为分散在多个类中,努力方向之一是尽量不要使得实现细节分离或泄露到其他类中,也意味着类的代码不能超出其存在的目的,有一些设计范式如CQRS能让你分离不同的行为在不同的类中

    24220

    C#开发BIMFACE系列49 Web网页中加载模型与图纸的技术方案

    24 服务端API之获取模型数据9: 获取单个房间信息 C#开发BIMFACE系列25 服务端API之获取模型数据10:获取楼层对应面积分区列表 C#开发BIMFACE系列26 服务端API之获取模型数据...11:获取单个面积分区列表 C#开发BIMFACE系列27 服务端API之获取模型数据12:获取构建分类树 C#开发BIMFACE系列28 服务端API之获取模型数据13:获取三维视点或二维视图列表...API之图纸拆分 C#开发BIMFACE系列44 服务端API之计算图纸对比差异项来源自哪个图框 C#开发BIMFACE系列45 服务端API之创建离线数据包 C#开发BIMFACE系列46 服务端API...可以在React里传递多种类型的参数,如声明代码,帮助你渲染出UI、也可以是静态的HTML DOM元素、也可以传递动态变量、甚至是可交互的应用组件。 Vue.js 作者尤雨溪,中国人。...jQuery AJAX 原始的Ajax使用较麻烦,jQuery Ajax是目前应用的首选,其内部实现原理是基于XMLHttpRequest对象封装了一些常用易用的方法。

    1.8K10
    领券