OOP的思想想法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhanghuiqi205/article/details/84620309

面向对象的简单描述:

面向对象要模拟现实世界,并不模拟现实世界中所有的东西,只是模拟现实世界中以下的几种逻辑:

模拟类与对象;模拟对象所具有的属性及功能的所有权(所有权体现在是否能公开);模拟类与类之间的关系。

面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。

如果你代码能做到以下几点,那么你就正在OOD:

  • 面向对象
  • 复用
  • 能以最小的代价满足变化
  • 不用改变现有代码满足扩展

OOP 的核心是建模,将万事万物进行归类,抽象出属性和方法

四大基本特性:

抽象:提取现实世界中某事物的关键特性,为该事物构建模型的过程。对同一事物在不同的需求下,需要提取的特性可能不一样。得到的抽象模型中一般包含:属性(数据)和操作(行为)。这个抽象模型我们称之为。对类进行实例化得到对象。这一步需要一定的抽象思维,对现实的关系可以很好的提取出来。

封装:封装可以使类具有独立性和隔离性;保证类的高内聚。只暴露给类外部或者子类必须的属性和操作。类封装的实现依赖类的修饰符(public、protected和private等),也称作访问控制修饰限定符。

继承:对现有类的一种复用机制。一个类如果继承现有的类,则这个类将拥有被继承类的所有非私有特性(属性和操作)。这里指的继承包含:类的继承和接口的实现。

多态:多态是在继承的基础上实现的。多态的三个要素:继承、重写和父类引用指向子类对象。父类引用指向不同的子类对象时,调用相同的方法,呈现出不同的行为;就是类多态特性。多态可以分成编译时多态和运行时多态。

抽象、封装、继承和多态是面向对象的基础。在面向对象四大基础特性之上,我们在做面向对象编程设计时还需要遵循有一些基本的设计原则。

七大设计原则:

  • SOLID原则(单一职责原则、开放关闭原则、里氏替换原则、接口隔离原则和依赖倒置原则)
  • 迪米特法则
  • 组合优于继承原则(合成复用原则)
solid原则:
S = 单一职责原则 Single Responsibility Principle
O = 开放闭合原则 Opened Closed Principle 
L = Liscov替换原则 Liscov Substitution Principle
I = 接口隔离原则 Interface Segregation Principle
D = 依赖倒置原则 Dependency Inversion Principle

S:单一职责原则:引起类变化的因素永远不要多于一个。一个类,只做它的业务,不管其他类的事务;比如一个超市(项目),包含收银员,只负责收银,保安员,只负责维持秩序!等等
O:开放闭合原则::软件实体(类,模块,函数等等)应当对扩展开放,对修改闭合。" 装饰模式就是这个原则的实现, 可以动态的添加功能,但是不能修改主体代码;比如手机,可以贴膜,可以加保护盖,但是不能拆里面的零件;
L:李氏替换原则:子类型必须能够替换它们基类型,多态的思想; 策略模式就是这个原则的实现。 把会变化的方法封装起来,方便不同的实现;比如鸟类,有的会飞,有的不会飞;那么就把飞的方法单独设计成一个接口,鸡就继承不会飞的,燕子就继承会飞的;
I:接口隔离原则 "客户端不应该被迫依赖于它们不用的接口。"  把不必要的接口,不要设计在一起。也就是抽象类,只保留最核心的接口,其他的可以设计成扩展;比如鸟类,吃(),睡(),飞();  因为飞的函数,对于一些实现类是没有必要的,所以应该隔离掉;只保留核心部分;
D:依赖倒置原则:高层模块不应该依赖底层模块,两者都应该依赖其抽象";比如车(项目),包含引擎和轮胎两个属性,那么它们就可以设计成接口,然后各自有不同的实现,而且引擎和轮胎还可以复用到飞机,自行车中去,达到代码复用。

迪米特法则:
"迪米特法则" (Law of Demeter LoD)"你的类对其它类知道的越少越好" 门面模式(Facade)和中介模式(Mediator) 不好意思,这两个模式我还不知道,网上没找到满意的举例理解。
"共同封闭原则":这是说"相关类应该打包在一起";
"稳定抽象原则":这是说"类越稳定,越应该由抽象类组成";
组合替代(优于)继承(Composite/Aggregate Reuse Principle,CARP) 
这关系到 is a 是一个和  hava a 有一个; 比如一个轮胎类,一个车类,那么车需要使用轮胎,就必须要继承轮胎这个类吗? 代码可以这样写,但是不符合逻辑;所以可以把轮胎类当做属性,添加到车类中去,这就是组合,有继承的优点,而没有它的缺点,更加灵活。

设计模式:

  • 创建型模式:

  1.  简单工厂模式(不包含在gof23中)
  2. 工厂模式
  3. 抽象工厂模式
  4. 单例模式
  5. 原型模式
  6. 创建者模式
  • 结构型模式:
  1. 组合模式
  2. 装饰者模式
  3. 外观模式
  4. 适配器模式
  5. 代理模式
  6. 享元模式
  7. 桥接模式
  • 行为型模式:
  1. 观察者模式
  2. 策略模式
  3. 状态模式
  4. 中介模式
  5. 模板方法
  6. 命令模式
  7. 备忘录模式
  8. 访问者模式
  9. 解释器模式
  10. 迭代器模式
  11. 职责链模式

总结如下就是:

参考素材:面向对象编程思想  OOD与OOP的思想的感悟

猜你喜欢

转载自blog.csdn.net/zhanghuiqi205/article/details/84620309
今日推荐