里氏代换原则(LSP):如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有变化,那么类型T2是类型T1的子类型。换言之,一个软件实体如果使用的是一个基类的话,那么一定使用于其子类,而且它根本不能察觉出基类对象和子类对象的区别。
里氏代换原则是继承复用的基石。只有当衍生类可以替换掉基类,软件单位的功能不会受到影响时,基类才真正被复用,而衍生类也才能够在基类的基础上增加新的行为。
依赖倒转原则(DIP):要依赖于抽象,不要依赖于具体。
传统的过程性系统的设计方法倾向于使高层次的模块依赖于低层次的模块;抽象层依赖于具体层次 。倒转原则就是要把这种错误的依赖关系倒转过来。
三种耦合关系:
零耦合:如果两个类没有耦合关系,就称之为零耦合。
具体耦合:具体性耦合发生在两个具体的(可实例化)类之间,经由一个类对另一个具体类的直接引用造成。
抽象耦合:抽象耦合关系发生在一个具体类和一个抽象类(或者接口)之间,使两个必须发生关系的类之间存在有最大的灵活性。
依赖倒转原则要求客户端依赖于抽象耦合。
抽象不应当依赖于细节;细节应当依赖于抽象。
要针对接口编程,不要针对实现编程。
变量被声明时的类型叫做变量的静态类型,也叫做明显类型,变量所引用的对象的真实类型叫做变量的实际类型。
程序在需要引用一个对象时,应当尽可能的使用抽象类型作为变量的静态类型,这就是针对接口编程的含义。
分类:
读书笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构