zoukankan      html  css  js  c++  java
  • (1)面向对象和面向过程

    面向过程的程序设计

    什么是面向过程的程序设计

    即过程二字是核心,过程指的是解决问题的步骤,即先干什么再干什么。基于面向过程设计程序就好比在设计一条流水线,是一种机械式的思维方式。若程序一开始是要着手解决一个大的问题,面向过程的基本设计思路就是把这个大的问题分解成很多个小问题或者子过程,这些子过程在执行的过程中继续分解,直到小问题足够简单到可以在一个小步骤范围内解决

    面向过程的优点

    复杂的问题流程化,进而简单化(一个复杂的问题,分成一个个小的步骤去实现,实现小的步骤将会非常简单)

    面向过程的缺点

    一套流水线或者流程就是用来解决一个问题,比如生产汽水的流水线无法生产汽车。即便是能,也得进行大改造,该一个组件,与其相关的组件都得修改,牵一发而动全身,扩展性极差

    什么场景下需要用到面向过程

    面向过程的程序设计思想一般用于那些功能一旦实现后就很少需要改变的场景,如果你只是写一些简单的脚本,做一些一次性任务,用面向过程的方式是极好的。如果要处理的任务是复杂的,且需要不断迭代和维护,还是用面向对象最方便

    面向对象的程序设计

    什么是面向对象的程序设计

    即对象二字是核心,要理解对象为何物,必须把自己当成上帝,上帝视角世间存在的万物皆为对象,不存在的也可以创造出来。程序员基于面向对象设计程序就好比如来设计西游记,如果要解决问题就要把经书传给东土大唐,如来并没有考虑问题的解决流程,而是设计出了负责取经的师徒四人和负责骚扰的妖魔鬼怪,以及保护司徒四人的一众神仙,这些全都是对象,然后取经开始,司徒四人与妖魔鬼怪交互着直到完成任务。所以说基于面向对象设计程序就好比在创造一个世界,世界是由一个个对象组成,而你就是这个世界的上帝

    我们从西游记中任何一个人物不难总结出,对象是特征与技能的结合体。比如孙悟空的特征就是:毛脸雷公嘴,技能是七十二变、火眼金睛等

    面向对象的优点

    解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易

    面向对象的缺点

    1. 编程的复杂度远高于面向过程,不了解面向对象而立即上手基于它设计程序,极容易出现过度设计的问题。一些扩展性要求低的场景使用面向对象会徒增编程难度,比如管理linux系统的shell脚本就不适合用面向对象去设计,面向过程反而更加适合

    2. 无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题,即便是上帝也无法准确地预测最终结果。于是我们经常看到对战类游戏,新增一个游戏人物,在对战的过程中极容易出现阴霸的技能,一刀砍死3个人,这种情况是无法准确预知的,只有对象之间交互才能准确地知道最终的结果

    什么场景下需要用到面向对象

    需求经常变化的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方

    PS:面向对象的程序设计并不是全部。对于一个软件质量来说,面向对象的程序设计只是用来解决扩展性

     

    什么是类
    对象是特征与技能的结合体,类则是一系列对象相似的特征与技能的结合体
    ps:总结类与对象必须站在特定的角度去区分

    先有类or先有对象
    在现实世界中:先有的对象,再有类
    在程序中:务必保证先定义类,后调用类来产对象

  • 相关阅读:
    [Swift]LeetCode795. 区间子数组个数 | Number of Subarrays with Bounded Maximum
    [Swift]LeetCode794. 有效的井字游戏 | Valid Tic-Tac-Toe State
    [Swift]LeetCode793. 阶乘函数后K个零 | Preimage Size of Factorial Zeroes Function
    [Swift]LeetCode792. 匹配子序列的单词数 | Number of Matching Subsequences
    [Swift]LeetCode1012. 至少有 1 位重复的数字 | Numbers With 1 Repeated Digit
    [Swift]LeetCode1011. 在 D 天内送达包裹的能力 | Capacity To Ship Packages Within D Days
    [Swift]LeetCode1010. 总持续时间可被 60 整除的歌曲 | Pairs of Songs With Total Durations Divisible by 60
    [Swift]LeetCode1009. 十进制整数的补码 | Complement of Base 10 Integer
    [Swift]LeetCode791. 自定义字符串排序 | Custom Sort String
    转 OGG add trandata 到底做了什么
  • 原文地址:https://www.cnblogs.com/shizhengquan/p/10082996.html
Copyright © 2011-2022 走看看