Java思维---POP向OPP转变时的思维重构

241 阅读6分钟

一、POP

(全称:Procedure Oriented Programming),即面向过程

是一种以过程为中心的思想。通过分析解决问题所需要的步骤,进而用函数解决一个又一个的步骤,最终调用一个个函数来实现。常见的POP语言为C语言。

解决问题时,通常考虑:

  1. 用伪代码写出实现目标的过程
  2. 利用结构体解决复杂问题
  3. 记录更多数据来满足程序需求

请添加图片描述 面向过程

其存在不适用于大众的问题

当目标明确时,将不在强调过程




二、POP(优缺点)

优点

性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。

缺点

没有面向对象易维护、易复用、易扩展




三、转换思路

  1. 大众化
  2. 强调目标
  3. 不再强调过程



四、OOP

OOP(全称:Object Oriented Programming),即面向对象

是一种对现实世界理解和抽象的方法,将程序模块化、对象化,把具体事物的特性属性和通过这些属性来实现一些动作的具体方法放到一个类里面。常见的OOP语言为Java、c++等。具有继承,封装,多态三大特征。


对象可以理解为目标,是站在更高的层面上看待事物。

实例是显示生活的一个东西,对抽象的东西进行表示

一个活生生存在的的事物,是实实在在的例子。

对象 > 实例


  1. 类是对象的抽象,对象是类的具体实例。
  2. 类是抽象的,不占用内存,对象是具体的,占存储空间。
  3. 类用于创建对象蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模版。


当目标明确时,我们选择让用户去自我记录,可以不再强调过程,解决问题时,通常考虑:

  • 明确目标
  • 计划、规划
  • 执行完计划
  • 达到目标 面向对象

用设计的思维去考虑,先考虑共性(公有的特性)

请添加图片描述




五、OOP(优缺点)

优点:

(1)易学好用。 传统的程序设计技术是面向过程的设计方法,这种方法以算法为核心,把数据和过程作为相互独立的部分,数据代表问题空间中的客体,程序代码则用于处理这些数据。把数据和代码代为分离的实体,反映了计算机的观点,因为在计算机的内部数据和程序是分开存放的。但是,这样做的时候总存在使用错误的数据调用正确的程序模块,或使用正确的数据调用错误的程序模块的危险。使数据和操作保持一致,是程序员一个沉重负担,在多人分工合作开发一个大型软件系统的过程中,如果负责设计数据结构的人中途改变了某个数据的结构而又没有及时通知所有人员,则会发生许多不该发生的错误。面向对象的软件技术为开发者**提供了随着对某个应用系统的认识逐步深入和具体化的过程,随着认识深入和具体化再逐步派生出更具体的派生类。**这样的开发过程符合人们认识客观世界,解决复杂问题时逐步深化渐进过程。

(2)稳定性好。 传统的软件开发方法以算法为核心,开发过程基于功能分析和功能分解。用传统方法所建立起来的软件系统的结构紧密依赖于系统所要完成的功能,用传统的面向过程方法来实现模块化技术时,一个很大的障碍是无法实现同一模块的多次同时运行,例如,假设一个完成银行日常业务的系统,其中一个小模块专门用来实现队列的功能,包括一些与队列有关的基本操作,如插入一个事物、删除一个事物、检测队列是否已满等。由于队列是一种常用的数据结构,在系统中可能会有多处同时使用,如未划转业务队列,未确认业务队列等。这些队列虽然有相同的操作,遵循相同的规则,但却是相互独立的。这样的要求用面向对象过程方法实现的模块是无法满足的。相反,用面向对象技术中的类来实现模块,用类的实例化,对象块用队列类来实现,类中包含了队列的各种操作。以这个队列为模板可以产生多个队列对象。每个对象都有相同的方法。但却可以独立地同时运行,应用于系统的不同场合,从而方便地解决了这个面向过程开发中颇为棘手的问题。

(3)可重用性。 为了能带来可观的商业利益,必须在更广泛范围中运用重用机制,而不是仅仅在程序设计这个层次上进行重用。因此,在OOA、OOD直到OOP中都显示表示问题域语义,其意义是十分深远的。随着时间的推移,软件开发组织既可能重用它在某个问题域内的OOA结果,也可能重用相应的OOD和OOP结果。

(4)维护性好。 尽管人们反复强调保持文档与源程序一致的必要性,但是,在实际工作中很难做到交付两类不同的文档,并使它们保持彼此完全一致,特别是考虑到进度、预算、能力和人员等限制因素时,做到两类文档完全一致几乎是不可能的。因此,维护人员最终面对的往往只有源程序本身。

缺点:

(1)运行效率较低。 类的大量加载会牺牲系统性能,降低运行速度。虽然CPU速度在提高,内存容量在增加,但这一问题仍会随着系统规模变大而逐渐显示出来,变得越发严重。

(2)类库庞大。 由于类库都过于庞大,程序员对它们的掌握需要一段时间,从普及、推广的角度来看,类库应在保证其功能完备的基础上进行相应的缩减。

(3)类库可靠性。 越庞大的系统必会存在我们无法预知的问题隐患,程序员无法完全保证类库中的每个类在各种环境中百分之百的正确,当使用的类发生了问题,就会影响后续工作,程序员也有可能推翻原来的全部工作。