面向对象=对象+分类+继承+通过消息的通信
-
对象:在面向对象编程中,对象是程序的基本单元。你可以把对象想象成现实生活中的事物,比如一辆车、一本书或一个人。每个对象都有自己的属性(比如车的颜色、品牌等)和行为(比如车可以启动、停止等)。
-
类:类是对一组具有相同属性和行为的对象的抽象描述。比如,“汽车”可以是一个类,而特定的品牌、颜色等信息就是这个类的不同实例。类就像是一个蓝图,用来创建具体的对象。
-
封装:封装是面向对象的一个重要特性,指的是将数据(属性)和操作这些数据的方法(行为)捆绑在一起,形成一个独立的实体。这样做的好处是可以隐藏对象内部的复杂性,并且保护对象的数据不被外部随意修改。
-
继承:继承允许我们定义一个类继承另一个类的特性。例如,我们可以定义一个“轿车”类继承“汽车”类的所有属性和方法,并且还可以添加新的属性或方法。这样可以减少代码重复,提高代码的复用性。
-
多态:多态是指允许不同类的对象对同一消息作出响应的能力。简单来说,就是同一个接口可以用多种方式实现。比如,不同的动物收到“叫”的指令时会有不同的反应——狗会汪汪叫,猫会喵喵叫。
-
消息:“消息”指的是一个对象请求另一个对象执行某个动作或获取某些信息的一种方式。当一个对象发送一条消息给另一个对象时,它实际上是在请求那个对象执行某项任务或回应某些数据。
举个例子,如果你有一个表示“按钮”的对象,你可能会给它发送一个“点击”消息。这个按钮对象接收到这个消息后,就会执行相应的动作,比如改变它的外观或者触发一个事件。
设计原则
-
单一职责原则
- 这个原则说的是一个类应该只有一个引起它变化的原因。换句话说,一个类只负责一项功能。比如,一个类如果是处理文件读写的,就不应该包含用户界面的操作。
-
开放封闭原则
- 这个原则主张软件实体(如类、模块、函数等)应该是对扩展开放的,但对修改封闭。也就是说,当需求发生变化时,可以通过增加新代码来扩展原有功能,而不是修改现有代码。这有助于保持代码的稳定性和可维护性。
-
里氏替换原则
- 这个原则强调子类必须能够替换其基类并且能保证程序正确运行。简单说,就是子类应该能够在任何需要父类的地方使用而不影响程序的逻辑。
-
依赖倒置原则
- 这个原则提倡高层模块不应该依赖于低层模块,二者都应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象。这样可以降低模块间的耦合度,提高系统的灵活性。
-
接口隔离原则
- 这个原则建议不要强迫客户程序依赖于它们不用的方法。如果一个接口太大,就需要将它分割成一些更小的和更具体的接口,这样客户端只需要知道它关心的那个接口。
-
迪米特法则
- 这个原则也称为最少知识原则,它鼓励一个对象应该对其它对象有尽可能少的了解。这样可以减少对象之间的耦合,提高系统的可维护性。
-
组合重用原则
-
组合重用原则主张通过对象的组合(即在一个类中使用其他类的对象作为成员变量)来达到代码重用的目的,而不是通过继承来重用代码。组合意味着将一个或多个类的对象作为另一个类的成员,这样就可以利用这些对象的功能。
-
设计模式
类型 | 模式名称 | 简要说明 |
---|---|---|
创建型模式 | 单例模式 | 确保一个类只有一个实例,并提供一个全局访问点。 |
工厂方法模式 | 定义一个创建产品对象的接口,但让子类决定实例化哪一个类。 | |
抽象工厂模式 | 提供一个创建一系列相关或依赖对象的接口,而无需指定它们具体的类。 | |
建造者模式 | 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 | |
原型模式 | 用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。 | |
结构型模式 | 适配器模式 | 将一个类的接口转换成客户希望的另一个接口。(转换接口) |
桥接模式 | 将抽象部分与它的实现部分分离,使它们都可以独立地变化。(继承树拆分) | |
组合模式 | 将对象组合成树形结构以表示“部分-整体”的层次结构。(树形目录结构) | |
装饰器模式 | 动态地给一个对象添加一些额外的职责。(附加职责) | |
外观模式 | 为子系统中的一组接口提供一个一致的界面。(对外统一接口) | |
享元模式 | 运用共享技术有效地支持大量细粒度的对象。 | |
代理模式 | 为其他对象提供一个代理以控制对这个对象的访问。 | |
行为型模式 | 策略模式 | 定义一系列算法,把它们一个个封装起来,并且使它们可相互替换。 |
模板方法模式 | 定义一个操作中的算法骨架,而将一些步骤延迟到子类中。 | |
观察者模式 | 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。 | |
命令模式 | 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化。(日志记录,可撤销) | |
迭代器模式 | 提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。 | |
中介者模式 | 用一个中介对象来封装一系列的对象交互。(不直接引用) | |
状态模式 | 允许一个对象在其内部状态改变时改变它的行为。 | |
访问者模式 | 表示一个作用于某对象结构中的各元素的操作。 | |
责任链模式 | 使多个对象都有机会处理请求,直到其中一个对象处理为止,从而避免请求的发送者和接收者之间的耦合关系。(传递职责) |