java面向过程范式_编程范式分析(一)面向过程和面向对象

程序=数据结构+算法

数据结构可以看成 data ,算法就是所谓的code;程序就是代码和数据串接起来的一个逻辑体:

面向过程: data和code没有特别的亲疏关系

data独立,code独立;数据通过独立的变量或者函数参数在传递或者流动;

虽然有局部变量和全局变量,但是变量和代码没有聚合绑定;

程序是平坦的去组织,需要数据就定义数据变量,需要方法就定义函数,二者之间没有绑定;

面向过程的编程重点考虑的是流程,其写程序的方式更符合人的天然逻辑思考:

我的输入有哪些,我想要的结果是哪些,我要怎么的处理过程

输入->[处理过程]->输出

通过再进一步分析整个处理过程,把[处理过程] 再拆分出许多个 输入->[处理过程]->输出  子过程。

编程中关注点是code或者function,数据的组织是被动的,通过输入和输出参数来组织;

面向过程的编程中变量数据有四个需要思考的问题 :生存期,可见性,存放位置,初始值; 至于过程需要思考的问题是:输入,输出和算法。

为什么会出现面向对象的设计思想: 随着程序规模的扩大,数据和逻辑的复杂性越来越大,面向过程往往是线性的分析问题域,随着程序的参与实体越来越多,这其中的线性关系越来越复杂,线性路径也来越多,

程序的组织也就越来越困难;那为何不换一种思路:

1.大规模的程序中:数据和处理过程是有聚合性的:因为并不是所有的实体都同时参与程序的处理。

2.分析过程很复杂,但是实体有限的,围绕实体抽象数据,围绕实体抽象代码。这个就是类的雏形,同时也是面向对象的一个特征:封装。

3.实体之间有关系,这种关系在编写程序中是否可以复用,这个就是继承;

4.单单有继承程序还是不够灵活,我希望运行:子类对象指针赋值给父类指针,并且通过父类同名方法可以调用到子类的方法;这个好处就是:接收父类对象的代码一定,

但是传递不同的参数,其表现出不同的行为-这个是多态。多态的目的是:

1.代码的耦合性降低,基于父类的对象进行的编码,如果新增加子类后,不需要改写这些代码就可以编译运行;

2.增加代码的动态性,通过一套代码来调用不同子类的方法,实现不同逻辑

多态的开闭原则:

对扩展开放:增加子类不会影响原有代码;

对修改封闭:每个子类可以重写父类的方法

面向对象 这种将数据和程序绑定在一起考虑组织程序的方法被称之为面向对象的编程,这组组织结构我们称之为类,程序的驱动需要一个一个类的实体即对象间的相关调用来实现。

code和data被聚合在一起构成类;

编程者以类为代码组织单元,其也是编译器用来构建具体的的类的实体:对象。

一般情况下类的代码区只有一份,所有的对象共享类的代码段,但是个个对象有自己独立的数据段(在构建对象时),少数语言提供所有类变量(java static),所有对象共享一个变量数据拷贝,该变量空间被分配到代码区。

该种情况数据和代码的关系发生了根本性的变化:

对象就是:data(类变量) 和 code(类方法)发生聚合有编译器动态生成的一个逻辑体

1.程序不再是平坦的去组织,在设计程序时:先要考虑问题域中的实体,实体间直接的关系(能否继承),实体之间的交互关系,确定实体的数据域。

2.对象引用和指针是一种特殊的东西,其既可以向变量一样进行运算,也可以通过其调用对象的某个方法。所以实体对象之间的交互关系在代码的实现上是:通过在数据域中增加对象引用来实现数据的传递和方法的调用。

3.类中的每个方法的组织还是面向过程的的:可以有局部变量等;

4.通过继承和接口等一些辅助语言手段来优化语言设计,减少代码重复和类直接交互的复杂性:

继承是为了解决代码复用问题;

接口是为了解决类直接交互的无规则性和混乱性,如果没有接口,那代码之间的调用都是对对象的硬调用,代码的可扩展性非常的差,程序的封装性也变得很差。

多态是编译器提供的一种优化继承关系和调用的技术手段,它能使程序看起来具有动态性。

所以继承、接口、多态等都不是OO的最核心的东西,而只是一种语言设计技术(或者说优化技术);类才是面向对象编程中最核心的东西,是面向对象编程设计思想的灵魂。

面向对象编程入门难点 为什么刚开始接触面向对象编程会有那么多的困惑,或者根本搞不清编程的模式,原因有以下几点:

1.面向对象的程序组织形式和面向过程的完全不一样:思维方式不一样,程序组织不一样,面向过程是人类处理问题的基本思维方式,而面向对象的思维在日常生活中很少能接触,初始会感到陌生;

2.面向对象编程中编译器做了大量的工作,对于面向对象的程序的编译器的处理过程,国内的教学中基本没有涉及到,从写出面向对象的源程序到编译成可执行程序到程序运行,这个过程中到底发生了什么,

对于很多人来说是个空白,这也导致我们对面向对象编程的恐惧。

3.面向对象的程序编写依赖了大量的标准库,这些标准库的设计和实现细节初始大家并不清楚,而只是一味的调用,这个也导致对面向对象的编程一知半解。

4.某些面向对象的语言设计过于全面、臃肿、复制(比如c++),太多语言层面的特性(这些东西往往只是锦上添花的东西,很多东西可能是一辈子都不用一次),太纠结于语言语法规则,没有关注到真正的设计层面的东西。导致

写起程序很累。

5.面向对象的编程适合大规模程序编写,刚接触面向对象编程,我们的思维、经验、技能还不足以处理大规模复制问题,杀鸡用牛刀,难免会纠结和专注于刀(因为刀太沉),而不是纠结于鸡。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值