注意:以下代码示例只是为了简单对比面向过程和面向对象二者区别,并不代表实际项目中的解析和写入文件的最优解;
目录
第一部分:理论知识
一、面向对象与面向过程有何不同?
二、面向对象-选择类
三、面向对象-多态
四、面向对象-封装
五、面向接口编程,而不是实现
六、需要修改代码的四个方向
第二部分:代码示例
一、数据读取和写入文件的工具(面向过程)
二、数据读取和写入文件的工具(面向对象)
第一部分:理论知识
一、面向对象与面向过程有何不同?
1、面向过程的代码也使用对象,有对象并不一定是面向对象设计,即使在Java等必须使用对象的编程语言也一样;
2、面向对象与面向过程代码区别:职责的分配方式。
* 面向对象:将处理任务的职责转移到系统对象上,尽量减少依赖关系;
客户端调用层将无需感知读写实现细节,只需知道使用的对象有提供读写方法即可。
* 面向过程:一系列方法调用,自上而下的控制,会导致项目代码重复和相互依赖。
3、面向对象与面向过程代码区别:内聚
* 面向对象:把相关的处理集中在一个上下文;
* 面向过程:把同一个处理代码分散在多个函数之中;
4、面向对象与面向过程代码区别:耦合
* 面向对象:子类之间、子类与客户端之间,都解耦,新增一个需求,只需简单创建一个新的子类;
* 面向过程:各部分代码紧密捆绑在一起,当一个组件变化,其他组件也要跟着变化;
二、面向对象-选择类
模拟真实世界,面向系统经常就是真实世界的映射例如:Person、Invoice、Shop等,定义类找出系统中的事物,把类看作名词,即一系列动词的主语,让一个类只负担一个主要职责;
三、面向对象-多态
1、多态也称“类切换”,也是面向对象系统的基本特性之一;
2、多态是指一个共通接口后面有着多种实现:如果代码中存在很多条件分支语句时,就需要多态出场了,需要创建多个子类,实现抽象基类的方法;
3、多态并没有完全消除条件语句,例如在代码示例中,getInstance()就会用switch或者if来决定返回哪个对象;多态将条件语句集中在一起;
四、面向对象-封装
1、封装:对客户端隐藏数据和功能,也是面向对象重要概念之一;
2、实现封装最简单办法:将属性声明为private或proteced隐藏属性,避免对象数据被破坏;
3、多态也是另一种形式的封装,在共通接口后面提供不同实现,对客户端隐藏了实现的细节;
五、面向接口编程,而不是实现
从抽象基类的角度来思考,而不是具体的子类
六、需要修改代码的四个方向
1、代码重复,提取共通代码;
2、尽量让类只知道内部的事情;
3、万能的类:例举出类的职责;
4、条件语句:如果频繁检查某个条件,说明可能需要分为两个或多个类;
第二部分:代码示例
一、数据读取和写入文件的工具(面向过程)
说明:以下示例仅适用于场景简单的情况,如果增加需求,还需要支持读写xml格式文件,按照面向过程写法,在读文件函数readContent()和写文件函数writeContent(),都需要先判断文件格式,再根据格式转换;
问题点:如果加一个需求多一种文件格式解析,就需要把所有函数加上判断格式的检查;
php将文本内容写入一个文件(面向过程写法)-CSDN博客
二、数据读取和写入文件的工具(面向对象)
php将文本内容写入一个文件(面向对象写法)-CSDN博客