网站首页 > java教程 正文
面向对象
面向对象就是一种思想,把任何事物都看作是一个对象,把它们之间的关系抽象成类、继承。 在软件开发方面,面向对象是指一种程序设计范型,同时也是一种程序开发的方法。
常见的几个方面是,面向对象的分析(OOA,Object Oriented Analysis),面向对象的设计(OOD,Object Oriented Design)、以及面向对象的编程实现(OOP,Object Oriented Programming)。
早期的计算机编程都是面向过程的,当需要处理的问题越来越复杂时,面向对象思想就应运而生了。
在计算机语言方面,纯面向对象语言的像Smalltalk在20世纪70年代出现,随后出现的C++是混合型,90年代出现了Java以及随后微软应对Java发表的C#都是面向对象的语言。
面向对象的三大特性
- 1、封装 将代码及其处理的数据绑定在一起,隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。 Java 语言的基本封装单位是类
- 2、继承 子类拥有父类的全部特征和行为,这是类之间的一种关系。提高代码复用性;继承是多态的前提。Java 只支持单继承。
- 3、多态 父类中定义的属性和方法被子类继承后,可以具有不同的属性或表现方式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。提高了程序的拓展性。
设计标准:高内聚与低耦合
- 内聚是指事物内部的联系紧密程度。在面向对象编程中,就是对象内各元素之间关系紧密程度。高内聚追求的是事物尽量只完成单一功能,以降低事物本身的复杂程度。
- 耦合是指事物之间的联系紧密程度。在面向对象编程中,就是对象与对象之间的关系紧密程度。低耦合追求的是事物尽量保持自身独立。
面向对象的五大基本原则:
- 1、单一职责原则SRP(Single Responsibility Principle) 类的功能要单一,仅有一个引起其变化的原因,提高高内聚来减少引起变化的原因。
- 2、开放封闭原则OCP(Open-Close Principle) 一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。抽象是关键,封装可变性。
- 3、里式替换原则LSP(the Liskov Substitution Principle LSP) 所有引用基类(父类)的地方必须能透明地使用其子类的对象,任何时候都可以用子类型替换掉父类型。这个原则依赖面向对象的继承特性和多态特性。
- 4、依赖倒置原则DIP(the Dependency Inversion Principle DIP) 抽象不应该依赖于细节,细节应当依赖于抽象;高层模块不应该依赖低层模块,两者都应该依赖其抽象。换言之,要针对接口编程,而不是针对实现编程。
- 5、接口分离原则ISP(the Interface Segregation Principle ISP) 使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。
面向对象的一个法则与复用原则
- 迪米特法则LOD/LKP(Law of Demeter 又名Least Knowledge Principle) 一个软件实体应当尽可能少地与其他实体发生相互作用。降低类之间的耦合。
- 合成复用原则CRP(Composite Reuse Principle) 要尽量使用合成和聚合,尽量不要使用继承。因为继承复用破坏包装,子类知道所有父类细节,而且父类变化总是引起子类变化。
面向对象的思维
- 先整体,再局部
- 先抽象,再具体
- 能做什么,再怎么做
猜你喜欢
- 2024-10-21 从零学java笔录-第39篇 基础第二阶段 1 面向对象思想及概述
- 2024-10-21 C/C++编程笔记:C++面向对象和Java面向对象的区别
- 2024-10-21 面向对象—java中类与对象#java基础
- 2024-10-21 Java面向对象特征(java的面向对象特征)
- 2024-10-21 Java基础语法之面向对象(java中的面向对象)
- 2024-10-21 Java面向对象概念解析(java面向对象的意思)
- 2024-10-21 java中的面向对象总结(java中的面向对象总结法是什么)
- 2024-10-21 有图有码,带你重新认识java面向对象三大特性!
- 2024-10-21 java面向对象总结(java面向对象知识点总结)
- 2024-10-21 Java基础:Java面向对象的特征(java面向对象的主要特征)
你 发表评论:
欢迎- 07-21如何将 iPhone 中的联系人导出到 Excel/CSV?
- 07-21sql查询的字段数据中有逗号。放到csv文件会分开,如何解决?
- 07-21在 WebAPI 里生成 csv zip 文件(webapi怎么发布在iis上)
- 07-21如何把csv格式转换成Excel格式(csv格式怎么转换)
- 07-21如何将高程导出为XYZ或CSV高程点(如何将高程数据导入cad)
- 07-21使用python把csv汇总成excel(python怎么将csv文件中的列存入列表)
- 07-21解决PHP导出CSV文件中文乱码问题(php导出excel文件)
- 07-21使用vba将Excel 文件转成 CSV 文件
- 最近发表
-
- 如何将 iPhone 中的联系人导出到 Excel/CSV?
- sql查询的字段数据中有逗号。放到csv文件会分开,如何解决?
- 在 WebAPI 里生成 csv zip 文件(webapi怎么发布在iis上)
- 如何把csv格式转换成Excel格式(csv格式怎么转换)
- 如何将高程导出为XYZ或CSV高程点(如何将高程数据导入cad)
- 使用python把csv汇总成excel(python怎么将csv文件中的列存入列表)
- 解决PHP导出CSV文件中文乱码问题(php导出excel文件)
- 使用vba将Excel 文件转成 CSV 文件
- python爬虫25 | 爬取的数据怎么保存?CSV了解一下
- MySQL 导出数据(mysql 导出数据 判断成功)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)