OOP 有什么规则吗?

2024-01-06

最近听说OOP(Java)有9条规则。我只知道四种:抽象、多态、继承和封装。 OOP 还有更多规则吗?


似乎您正在寻找的是面向对象设计的原则 http://www.butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod.

总结自敏捷软件开发原则、模式和实践 https://rads.stackoverflow.com/amzn/click/com/0135974445。这些原则是数十年软件工程经验来之不易的产物。它们不是单一思想的产物,而是代表了大量软件开发人员和研究人员的集成和著作。尽管它们在这里作为面向对象设计的原则呈现,但它们实际上是长期存在的软件工程原则的特例。

SRP 单一职责原则一个类应该只有一个改变的理由。

OCP 开闭原则软件实体(类、包、方法等)应该对扩展开放,但对修改关闭。

LSP 里氏替换原则子类型必须可替换其基本类型。

DIP 依赖​​倒置原理抽象不应该依赖于细节。细节应该取决于抽象。

ISP接口隔离原则不应强迫客户依赖他们不使用的方法。接口属于客户端,而不属于层次结构。

REP 发布-重用等效原则再利用的颗粒就是释放的颗粒。

CCP 共同封闭原则包中的类应该针对相同类型的更改关闭在一起。影响已关闭包的更改会影响该包中的所有类,但不会影响其他包。

CRP 通用重用原则包中的类可以一起重用。如果重用包中的其中一个类,则可以重用所有类。

ADP 非循环依赖原则依赖图中不允许有循环。

SDP 稳定依赖原则取决于稳定的方向。

SAP 稳定抽象原则包应该既抽象又稳定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OOP 有什么规则吗? 的相关文章

  • 向类添加属性的更 Pythonic 方式?

    我正在使用来自两个不同网页的数据集 但对于同一个人 数据集是合法信息 一些数据在第一页上可用 因此我使用正确的信息初始化被告对象 并将我当前没有数据的属性设置为null 这是班级 class Defendant object holds d
  • 名称中带有点的 php 对象属性

    我有 mysql 表 其中包含 操作 日期 操作 名称 等列 将该表数据作为对象获取后 mysqli gt fetch object 我得到这个 行的 print r stdClass Object id gt 2 operation da
  • 棋子层次结构设计:继承与类型字段

    我有一个片段的基类 class piece 和一个包含派生对象的数组 piece board 8 8 优点 通过虚拟函数进行简洁的设计 缺点是 如果我必须在板上找到一块或比较一块 我必须恢复到动态铸造 或 typeid 它很丑陋 并且在发出
  • 如何使用工厂来创建使用策略模式的对象?

    假设我们的在线商店有一个简单的支付功能 我们希望使用不同的交易处理器来管理不同的交易 交易可以是付款或退款 交易处理器可以是 Paypal 或 Payplug 所以我们有以下课程 class PaymentTransaction imple
  • 注册模式和注册对象的延迟实例化

    让我们想象一下我们有注册表模式
  • 处理在没有全局变量的情况下跨函数使用的变量

    所以我正在开发一个基本的文字游戏 你会得到一只字母 手 字典对象 你可以用它来创建单词并获得分数 这个 手牌 被用在许多函数的参数中 计算玩家的分数 在玩家使用一个或多个字母后更新手牌中的字母数量 显示手牌 检查玩家单词的有效性 ETC 从
  • php oop 如何使用属性和方法形成类

    我是 php oop 的新手 我对类有一些想法 但我仍然不知道如何在创建的对象中使用它的属性和方法 我需要了解下面报告的代码是否正确 如果不正确我做错了什么 我假设我有一个可以为我做任何事情的课程 我们称之为 Class myClass 现
  • 作为属性的类引用

    谷歌对于这类搜索毫无用处 因为你会得到数亿个结果 其中没有一个与特定问题相关 问题很简单 Delphi 中是否可以有类引用属性 如果是这样 怎么办 这是我尝试过的 type TMyObject class end TMyObjectClas
  • 如何将一个窗格连接到另一个窗格

    如何将输出连接到paneWithList PaneWithList其上有一个监听器JList以便将所选行输出到控制台 我怎样才能将该输出定向到JTextPane关于输出 Could PaneWithList触发一个事件Main拿起 会属性更
  • PHP - 多个不同的数据库依赖注入类

    我花了过去几个小时试图找到 最佳 最合乎逻辑的方法的答案 以编写一个 php 数据库类以同时连接到一个 postgresql 数据库和一个 mysql 数据库 另外 我想采用依赖注入设计 但对整个概念还是陌生的 到目前为止我已经想出了 cl
  • 为什么c++中的构造函数不能声明为静态?

    我最近读完了第一卷 Bruce Eckel 的 Thinking in C 现在转向将这些知识应用到一些实际用途中 我最近正在使用静态成员函数 并尝试将构造函数设为静态 但编译器对此不满意 我查了书上的原因 但没有找到 谁能解释为什么 P
  • 参数过多的类:更好的设计策略?

    我正在研究神经元模型 我正在设计的一个类是细胞类 它是神经元 几个连接在一起的隔室 的拓扑描述 它有很多参数 但它们都是相关的 例如 轴突段数 顶端二纤化 体细胞长度 体细胞直径 顶端长度 分支随机性 分支长度等等等等 总共大约有15个参数
  • F# 对于 OO 或命令式来说缺少什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 Typescript 中从基类创建子类的新实例[重复]

    这个问题在这里已经有答案了 我想创建新实例Child班级来自Base类方法 这有点复杂 但我会尽力解释 这是一个例子 class Base constructor clone Here i want to create new instan
  • 我可以在 Laravel 5.2 中创建一个继承自 User 的新类吗?

    我对 Laravel 还很陌生 使用的是迄今为止的最新版本 5 2 因此我遇到了以下困境 我知道 Laravel 附带了一个User开箱即用的类 但我想开发一个系统 在其中我可以有另外两种类型的用户 称为Researcher and Adm
  • 为什么我们不能在函数式接口中重载抽象方法? (爪哇)

    所以我熟悉java中的函数式接口 以及它们与lambda表达式的使用 一个函数式接口只能包含一个抽象方法 当从 lambda 表达式使用这一孤独方法时 您不需要指定其名称 因为接口中只有一个抽象方法 编译器知道这就是您正在引用的方法 Exa
  • 避免重复 GNU Make 规则

    我一直在编写一个执行一些依赖项生成的 Makefile 我发现自己必须重复规则 因为 遗留 代码库包含以下内容的混合 cpp and cc文件 好像有点难看 无论如何 是否可以指定目标的先决条件可以是 cpp or cc files 所以而
  • 如何保证对象只有一个线程

    我有以下代码 class Service public void start creates thread which creates window and goes to message loop void stop sends WM C
  • 从父类调用重写的虚拟方法

    假设您正在编写原始 C Object类并且您想要以下功能 object1 object2将比较引用 除非该运算符被覆盖 object1 object2将始终返回对象实际值的倒数object1 object2 所以 举例来说 如果我有一个Bu
  • Javascript:我应该隐藏我的实现吗?

    作为一名 C 程序员 我有一个习惯 将可以而且应该私有的东西设为私有 当 JS 类型向我公开其所有私有部分时 我总是有一种奇怪的感觉 而且这种感觉并没有被 唤起 假设我有一个类型draw方法 内部调用drawBackground and d

随机推荐

  • WPF Groupbox高度需要动态改变?

    我正在 WPF 中使用组框 组框的内部是一个堆栈面板 堆栈面板中的项目已被删除并添加到其子项中 我遇到的问题是组框中的 Stackpanel 正在更改高度 但 GroupBox 没有 因此它会切断 stackpanel 中添加的其余项目 如
  • 来自最大子记录数的表约束

    考虑以下针对学生和几门课程的模式 Student Regno integer Sname string Degree string Age integer Course Coursecode string Cname string Cred
  • 如何访问 Cloud Firestore 规则内的自定义声明?

    我有一个用户具有以下自定义用户声明 customClaims role admin 如何在云 Firestore 规则中访问此角色属性 管理员 我正在使用下面的代码 但它不起作用 需要做什么才能工作 match companies docu
  • apache2 和 mod wsgi:目标 WSGI 脚本无法作为 Python 模块加载

    我正在尝试在 ubuntu 上的 apache2 上安装 mod wsgi 所以我安装了libapache2 mod wsgi包 我用a2enmod激活他 我有一个网站 languageAnalyz 我试图将其与 mod wsgi 一起使用
  • 判断鼠标是否在控件上? (在控制像素范围内)

    我正在尝试编写一个函数来确定鼠标是否超出像素范围 特定控件的像素范围 问题是该函数仅适用于Form 不适用于我测试过的按钮或任何其他控件 我缺少什么
  • 使用下载处理程序将 ggplot 图像保存为闪亮的

    我正在闪亮中开发一个应用程序 在闪亮中 我使用操作按钮渲染一个简单的绘图 我添加了一个下载按钮来下载用户界面中现在的绘图 从我的代码 plot3 我尝试了下面的代码来保存图像 但出现错误 未找到绘图输入 任何人都可以建议我哪里出错了 下面是
  • 限制 Subversion 存储库的大小

    您好 我想通过指定最大大小来限制存储库的大小 但是我找不到任何有关这样做的信息 这在技术上可能吗 编辑 抱歉 如果我不清楚 我想保留一个功能存储库 可以在其中继续提交补丁 但是可以自动删除至少有一个较新版本的文档的最旧版本 以保持在大小限制
  • 无法在 JAVA 中使用 SMACK api 显示收到的消息

    我在本地主机上使用 SMACK api 和 OpenFire 创建了一个简单的客户端 截至目前 我有两个用户说 X 和 Y 每当有人登录到客户端时 都会有一个发送按钮向用户 Y 发送消息 我已经检查了 XMPP 调试管理器 并且能够发送 在
  • 在目录的所有文件名中查找一个单词并将其替换为另一个单词

    我试图在目录 以及所有子目录 的所有文件名中将 所有者 一词替换为 用户 Ex owners controller gt users controller owner rb gt user rb 任何帮助 将不胜感激 Use find与 e
  • Java 8 流中按属性排序

    哦 那些带有 lambda 的棘手 Java 8 流 它们非常强大 但其中的复杂性需要花一些时间才能理解 假设我有一个User带有属性的类型User getName 假设我有这些用户的地图Map
  • C#中从DataGridView读取数据

    我怎样才能从中读取数据DataGridView在 C 中 我想读取表中出现的数据 如何浏览线路 就像是 for int rows 0 rows lt dataGrid Rows Count rows for int col 0 col lt
  • 如何使用 QSS 为禁用按钮设置不同的背景颜色?

    我已经尝试过使用disabled and enabled但它不起作用 这是我的 QSS 代码 QPushButton background color 44c767 border radius 5px border 1px solid 18
  • Javascript Chart.js 比例修复

    我有一个关于 Chart js 的简单问题 我想知道如何修复我的图表 我使用 Chart js 和 respChartJS https github com arifLogic respChartJS https github com ar
  • 如何记录 makefile?

    有没有办法在 Makefile 中编写 标准 注释 以便稍后将它们提供给类似 Doxygen 的程序 从而输出漂亮的 例如 HTML 或 man 文档 我想对我的主要目标有一个清晰的概述 但不要太花哨 以下是一个更简单的解决方案 不需要定义
  • “不变”属性是抽象定义的一部分吗?

    作为我学习的一部分 我认为我发现的抽象定义的最佳答案 有意义 来自 stackoverflow 什么是抽象 https stackoverflow com questions 7028242 what is abstraction 除此之外
  • 如何用ReentrantLock加锁?

    我希望以下测试仅打印 已锁定 一次 但它最终会打印该行 public class LocKTest Test public void testLock Lock lock new ReentrantLock while true if lo
  • Python 2.6 JSON解码性能

    我正在使用jsonPython 2 6 中的模块用于加载和解码 JSON 文件 然而 我目前的表现比预期的要慢 我正在使用一个大小为 6MB 的测试用例json loads 需要 20 秒 我以为json模块有一些本机代码来加速解码吗 我如
  • 你可以在 Laravel 中扩展 Command 类吗

    我目前正在开发一个使用 Laravel 4 的应用程序 我正在构建一个评论系统 并拥有用于创建 更新 删除的基本命令 接下来我要做的是为评论将附加到的特定对象 例如博客文章 创建命令 所以如果我的命令文件被调用CreateCommentCo
  • 即使 JSON feed 正确,fullCalendar 事件也不会显示

    与其他人一样 我在将 JSON feed 事件呈现在日历中时遇到问题 问题通常是错误的 JSON 格式 但事实并非如此 因为我已经使用 JSONlint 对其进行了验证 并在 Site Master 中对 JSON 提要进行了硬编码 并得到
  • OOP 有什么规则吗?

    最近听说OOP Java 有9条规则 我只知道四种 抽象 多态 继承和封装 OOP 还有更多规则吗 似乎您正在寻找的是面向对象设计的原则 http www butunclebob com ArticleS UncleBob Principl