一些面向对象的设计法则(4)

道家学派创始人老子,对 SAP ABAP 这门编程语言的客观评价 SAP HANA 之引入,使 ABAP 于处理大数据,云计算等新兴领域,展现新的生命力,如老吾老以及人之老,幼吾幼以及人之幼,扩展其在信息技术领域的应用,以涵养更广之需。ABAP 能以数据为基,流转于系统之中,如道法自然,顺应企业之生态,助之以高效运转,减少冗杂,简化管理,使企之运营,如小国寡民,无为而治。然 ABAP 如老树盘根,更替不易,面对新兴技术,如云计算、大数据等,其更新之速,未能与时俱进。如水之于渊,柔而能胜刚,ABAP 之发展,顺时而动,应需而变,其在编程领域,犹如道之于万物,渐不可或缺矣。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

法则4:Liskov替换法则(LSP)
使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。
[ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects Of Derived(Sub) Classes Without Knowing It ]

  • Liskov替换法则


    1.显而易见,Liskov替换法则(LSP)是根据我所熟知的"多态"而得出的。
    2.例如:

    方法drawShape应该可与Sharp超类的任何子类一起工作(或者,若Sharp为Java接口,则该方法可与任何实现了Sharp接口的类一起工作)
    但是当我们在实现子类时必须要谨慎对待,以确保我们不会无意中违背了LSP。

  • 3.若一个函数未能满足LSP,那么可能是因为它显式地引用了超类的一些或所有子类。这样的函数也违背了OCP,因为当我们创建一个新的子类时,会不得不进行代码的修改。

  • LSP示例

    1. 考虑下面Rectangle类:

    2.现在,Square类会如何呢?显然,一个正方形是一个四边形,因此Square类应该从Rectangle类派生而来,对否?让我们看一看!
    3.观察可得:
    a.正方形不需要将高和宽都作为属性,但是总之它将继承自Rectangle。因此,每一个Square对象会浪费一点内存,但这并不是一个主要问题。
    b.继承而来的setWidth()和setHeight()方法对于Square而言并非真正地适合,因为一个正方形的高和宽是相同。因此我们将需要重写setWidth()和setHeight()方法。不得不重写这些简单的方法有可能是一种不恰当的继承使用方式。

    3.Square类如下:


4. 看起来都还不错。但是让我们检验一下!

5. 测试程序输出:

6.看上去好像我们违背了LSP!

7.这里的问题出在哪里呢?编写testLsp()方法的程序员做了一个合理的假设,即改变Rectangle的宽而保持它的高不变。
8.在将一个Square对象传递给这样一个方法时产生了问题,显然是违背了LSP
9.Square和Rectangle类是相互一致和合法的。尽管程序员对基类作了合理的假设,但其所编写的方法仍然会导致设计模型的失败。
10.不能孤立地去看待解决方案,必须根据设计用户所做的合理假设来看待它们。

11. 一个数学意义上的正方形可能是一个四边形,但是一个Square对象不是一个Rectangle对象,因为一个Square对象的行为与一个Rectangle对象的行为是不一致的!
12.从行为上来说,一个Square不是一个Rectangle!一个Square对象与一个Rectangle对象之间不具有多态的特征。

  • 总结


    1.Liskov替换法则(LSP)清楚地表明了ISA关系全部都是与行为有关的。
    2.为了保持LSP(并与开放-封闭法则一起),所有子类必须符合使用基类的client所期望的行为。
    3.一个子类型不得具有比基类型(base type)更多的限制,可能这对于基类型来说是合法的,但是可能会因为违背子类型的其中一个额外限制,从而违背了LSP!
    4.LSP保证一个子类总是能够被用在其基类可以出现的地方!

一些面向对象的设计法则:(Bob Tarr 著,outmyth 译)

法则1:优先使用(对象)组合,而非(类)继承
法则2:针对接口编程,而非(接口的)实现
法则3:开放-封闭法则(OCP)
法则4:Liskov替换法则(LSP)

把慢点掰开看:在 SAP HANA 中启用 SQL 优化耗时跟踪 SqlOptTime 的实战指南 摘要:SAP HANA 性能排查中,常出现SQL查询时快时慢的现象,表面看似执行问题,实则是编译阶段耗时过长。通过SQL优化跟踪工具SqlOptStep和SqlOptTime,可精准区分编译与执行时间。SqlOptStep展示优化树变化过程,而SqlOptTime则记录各阶段耗时,帮助定位问题根源。启用SqlOptTime需配置traceprofile,建议限定特定用户以减少系统负载。实际案例显示,报表响应慢常由计算视图编译(CeQo)导致,而非执行阶段问题。解决方案包括调整计算视图展开方式或优化基础视图结 阅读详情

相关推荐

SAP采购订单行项目增强实战:用BADI ME_GUI_PO_CUST添加自定义字段(避坑指南)

本文详细解析了如何通过BADI ME_GUI_PO_CUST在SAP采购订单行项目中添加自定义字段,包括技术架构理解、字段扩展步骤、自定义函数组创建及BADI实现。文章特别强调了避开官方文档未提及的陷阱,如字段映射限制和屏幕显示问题,并提供了高级优化技巧和性能建议。

weixin_30402343的博客 595

从spring看面向对象的设计

spring的transactionTemplate实现原理 主要是spring事物管理方面的东东:在spring的配置文件中我们经常用到 .其实platformtransactionmanager中有三个方法:gettransaction();commit(); rollbasck(); abstractplatformtransactionmanager类中...

我的world 561

Cadence17.2 > OrCAD Capture CIS > 设计规则检查(Design Rule Check)DRC学习记录详解

选中设计完成的DSN文件,选择Tool->Design Rule Check,弹出下面对话框,详解如下。 一、Design Rule Check对话框选项详解 Design Rules Options tab Set the scope, mode and type of design rule (electrical and / or physical) test options for the design rules check. 为

DL_62532的专栏 1万+

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

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

670

python多线程实现http代理

python多线程实现http代理文章要求1.py socket模块2.py threading模块3.环境搭建3.1设置代理3.2搭建http简单服务器代码分析1.完整代码2.逻辑结构 文章要求 1.py socket模块 socket模块接触后很简单,我实现的是阻塞性的套接字。 需要了解到,连接套接字,监听套接字,和套接字accept()方法的返回值是元组 数据传递过程sock.recv(1024),sock.send()也不需要转换编码,直接以b"二进制流"传输 2.py threading模块 th

qq_43402663的博客 2508

三极管NPN与PNP的工作原理及快速识别技巧

本文深入浅出地解析了三极管NPN与PNP的核心工作原理。通过“水龙头”比喻,阐明其以小电流控制大电流的放大与开关本质。文章重点对比了NPN与PNP在电流方向、电位关系和控制逻辑上的根本区别,并提供了快速识别技巧与实用的选型、应用指南,帮助电子爱好者与工程师快速掌握这两种基础元件的关键知识。

neovim7hacker的博客 456

Java基础:面向对象编程的几个原则

     1. 开闭原则(the Open Closed Principle OCP)    一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。因此在进行面向对象设计时要尽量考虑接口封装机制、抽象机制和多态技术。该原则同样适合于非面向对象设计的方法,是软件工程设计方法的重要原则之一。我们以收音机的例子为例,讲述面向对象的开闭原则。我们收听节目时需要打开收音机电源,对准电台频率和进

技术收藏 743

西威SIEI变频器与电梯主板及驱动板原理图解析与详解(共二十九页原厂PDF图纸)

通过本文的分析,可以了解到西威变频器的技术特点、维修需求以及相关的图纸获取途径。在今后的工作中,维修人员需要充分了解设备的电路图和原理图,掌握正确的维修技术和方法,确保设备的正常运行和延长使用寿命。对于维修人员来说,获取准确的变频器图纸是进行维修工作的基础。这些图纸包含了变频器的电路图、原理图以及相关的元件布局等信息,是维修人员了解设备工作原理、确定维修步骤的重要依据。西威变频器是一种高效、可靠的电机控制设备,广泛应用于电梯、空调、风机等领域的电机控制中。目前,西威提供的维修图纸主要以PDF格式为主。

lXSqtACEzg的博客 1116

面向对象的设计法则4

法则4:Liskov替换法则(LSP)使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。[ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use

woxiaozhi的专栏 588

Qwen-Image LoRA训练实战:从数据准备到异常修复的全流程解析

本文详细解析了Qwen-Image LoRA训练的全流程,从数据准备到参数优化再到异常修复。通过实战案例展示了如何利用LoRA技术微调Qwen-Image模型,提升中文场景下的图像生成质量,特别针对手脚生成异常等问题提供了有效解决方案。文章还分享了中文提示词优化技巧和高级训练方法,帮助开发者高效训练出高质量的LoRA模型。

lemon的博客 969

ABAP CDS SELECT, parameters 全面解析:把参数化视图玩明白(含可运行示例)

这篇技术博客介绍了ABAP CDS中参数化视图的用法与实践。文章从业务需求出发,解释了参数化视图的必要性,并详细说明了语法规则、参数类型匹配、视图内部参数引用等关键点。重点展示了在JOIN和ASSOCIATION中传递参数的写法,提供了航线分析的完整业务案例和可运行代码示例。文章还总结了视图实体与DDIC视图的差异、会话变量使用技巧等实践要点,特别强调了JOIN中必须显式传参的语法要求。通过真实场景演示,帮助开发者掌握参数化CDS的高效应用。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 365

《软件工程与计算(卷二)》-Chapter14-4-迪米特法则-详细设计中面向对象方法下的模块化例题

AlphaCat的博客 532

AI人工智能领域多模态数据融合在智能诊断系统的应用案例

在医疗诊断领域,单一模态数据(如CT影像或电子病历)的局限性日益凸显——就像老中医只"望"不"闻"会漏掉关键线索。本文将深入解析多模态数据融合技术如何突破这一瓶颈:从生活化的"中医四诊"类比切入,拆解数据层/特征层/决策层融合的技术原理;结合肺癌智能诊断的真实案例,展示CT影像、病理文本、基因数据、生命体征的多模态融合全流程;最后探讨技术落地的核心挑战与未来方向。无论你是医疗从业者、AI开发者,还是对智能诊断感兴趣的爱好者,都能从中获得技术启发与应用思路。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 834

Bob Tarr:一些面向对象的设计法则(4):Open-Closed Principle

法则3:开放-封闭法则(OCP) 软件组成实体应该是可扩展的,但是不可修改的。 [ Software Entities Should Be Open For Extension, Yet Closed For Modification ] 开放-封闭法则 1.开放-封闭法则认为我们应该试图去设计出永远也不需要改变的模块。

bookjohn的专栏 865

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

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

一些面向对象的设计法则

一些面向对象的设计法则 Bob Tarr 著            outmyth 译     法则1:优先使用(对象)组合,而非(类)继承组合n         (对象)组合是一种通过创建一个组合了其它对象的对象,从而获得新功能的复用方法。n         将功能委托给所组合的一个对象,从而获得新功能。n         有些时候也称之为“聚合”(aggre

ewolf的工作专栏 1059

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

面向对象设计/编程的四大法则

一些面向对象的设计法则 Bob Tarr 著outmyth 译         法则1:优先使用(对象)组合,而非(类)继承[ Favor Composition Over Inheritance ]组合n         (对象)组合是一种通过创建一个组合了其它对象的对象,从而获得新功能的复用方法。n         将功能委托给所组合的一个对象,从而获得新功能。n         有些时候也称

T.johnny的专栏 922

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

软考高级系统架构设计师(七) 需求工程相关

需求工程 需求定义 需求验证 需求跟踪 需求变更管理 软件系统建模 结构化设计 面向对象设计 软件界面设计

我的E家 860

软考架构师软件工程(三):UML与软件设计4大核心考点(附速记口诀+做题技巧)

本文是软考高级系统架构设计师备考系列第3篇,重点解析UML与软件设计四大核心考点(七至十)。内容涵盖: UML:静态图与动态图分类、4大高频图特征、4+1视图(逻辑/实现/进程/部署/用例视图)及解题技巧; 人机界面设计:黄金三法则(用户控制、减少记忆负担、保持一致性); 结构化设计:概要/详细设计区别、四大原则(高内聚低耦合/多扇入少扇出等)、七级内聚与耦合判定标准; 面向对象设计:实体/边界/控制类识别方法、七大设计原则(开闭/里氏替换/依赖倒置等)。文末提供完整备考资料包获取方式,包含真题、论文模板等

ss1120623840的博客 196

面向对象7大设计原则(五)------ 迪米特法则

面向对象设计原则之迪米特法则 一、什么是迪米特法则 定义:一个软件实体应当尽可能少地与其他实体发生相互作用。 迪米特法则还有几种定义形式,包括:不要和“陌生人”说话、只与你的直接朋友通信等,在迪米特法则中,对于一个对象,其朋友包括以下几类: (1)当前对象本身(this); (2)以参数形式传入到当前对象方法中的对象; (3)当前对象的成员对象; (4)如果当前对象的成员对象是一个集合,那么集合中...

zcystrive的博客 360

SA 面向对象的设计法则

面向对象的设计法则 1. 优先使用组合(对象),而非继承(类) (1) 组合         优点:容器类仅能通过被包含对象的接口来对其进行访问 黑盒复用 相互依赖性比较小         缺点:导致系统中的对象比较多 为了能将多个不同的对象作为组合块,必须仔细定义接口 (2) 继承         优点:容易实现,多数方法都可以通过继承而来 易于修改或扩展那些被复用的实现

冲冲冲 696

面向对象的一些法则

面向对象的一些法则:法则1:优先使用(对象)组合,而非继承组合是一种通过创建一个组合了其它对象的对象,从而获得新功能的复用方 法有些时候也称之为“聚合”(aggregation)或“包容”containment)聚合:一个对象拥有另一个对象或对另一个对象负责(即一个对象包含另一个对象或是另一个对象的一部分),并且聚合对象和其所有者具有相同的生命周期。包容:一种特殊类型的组合,对于其它对象而言,容器

Ricmy的专栏 1430

【Java 设计模式】设计原则之迪米特法则

迪米特法则是由荷兰计算机科学家伊恩·荷尔姆·迪米特(Ian Holland Demeter)于1987年提出的。它规定一个对象应该对其他对象有最少的了解,即一个类不应该知道太多关于其他类的内部细节。迪米特法则有一个简洁的表述:“只与你的直接朋友通信,不跟陌生人说话”,其中“直接朋友”指的是当前对象的成员、方法参数、方法返回值中的对象。迪米特法则是一项有助于降低类之间耦合性的基本原则。通过遵循这一原则,我们可以创建更加灵活、可维护和可扩展的面向对象系统。

好久不见的流星 1835

一些面向对象设计的法则

一些面向对象的设计法则Bob Tarr 著outmyth 译         法则1:优先使用(对象)组合,而非(类)继承[ Favor Composition Over Inheritance ]组合n         (对象)组合是一种通过创建一个组合了其它对象的对象,从而获得新功能的复用方法。n         将功能委托给所组合的一个对象

Musicwind的专栏 1754

【设计模式-迪米特法则】

迪米特法则(Law of Demeter,LoD),也称为最少知识原则(Principle of Least Knowledge),是一种面向对象编程中的设计原则。它的核心思想是:一个对象应当尽可能少地了解其他对象,即只与直接相关的对象通信,而不要过度依赖外部对象的内部细节。通过减少对象之间的耦合度,提升代码的可维护性、可扩展性以及模块化程度。迪米特法则的定义可以简单概括为:根据迪米特法则,一个对象的方法只能调用以下几类对象的方法:这个原则的目的是减少不同类之间的耦合,使得一个模块或类不需要过多地了解另一个

严文文 Chris 1459

掌握面向对象设计的七大黄金法则

一个类应该只有一个发生变化的原因,如果有多个原因,那么类就可能需要被拆分。

m0_74482103的博客 680

面向对象设计原则之迪米特法则

迪米特法则来自于1987年美国东北大学(Northeastern University)一个名为“Demeter”的研究项目。迪米特法则又称为最少知识原则(LeastKnowledge Principle, LKP),其定义如下: 迪米特法则(Law of  Demeter, LoD):一个软件实体应当尽可能少地与其他实体发生相互作用。       如果一个

刘伟技术博客 4万+
上一篇: 一些面向对象的设计法则
下一篇: 谨防Java网络编程“陷阱”
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值