计算机思维
计算机思维的本质是抽象和自动化。
计算机思维特征:
- 设计
- 构造
在程序设计范畴,计算思维主要反映在理解问题的计算特性、将计算特性抽象为计算问题、通过程序设计语言实现问题的自动求解等几个方面。
面向过程POP(protocol-oriented programming)
一、自顶向下
自顶向下:用于解决复杂问题,其基本思想是以一个总问题开始,试图把它表达为很多小问题组成的解决方案。再用同样的技术一次攻破每个小问题,最终问题变得非常小,以至于可以很容易解决。然后只需把所有的碎片组合起来,就可以得到一个程序。以体育竞技为例,如下图所示,具体参考---python语言程序设计基础
二、顶层设计
自顶向下设计中最重要的是顶层设计。我们可以从问题的IPO描述开始,体育竞技分析从用户处得到模拟参数,最后输出结果。顶层设计一般不写出具体代码,仅给出函数定义。接下来的层理念大都相同,即接受输入,通过函数将中间细节封装或隐藏,返回输出。每层的输入以及输出是层设计的核心,其余的细节部分可以被忽略。这类似于抽象的概念,即仅仅关心典型特征,忽略其他细节。
关于抽象,我们使用抽象数据类型来提供数据对象的外观(其状态)及其可以执行的操作(其方法)的逻辑描述。 通过构建实现抽象数据类型的类,程序员可以利用抽象过程,同时提供在程序中实际使用抽象所需的详细信息。 每当我们想要实现抽象数据类型时,我们都会使用新类。
三、面向过程的程序设计 (结构化编程)
面向过程的程序设计是最自然的设计方法,程序执行过程为设计流程。
面向过程的程序设计基本步骤
- 第一步:分析程序从输入到输出的各步骤
- 第二步:按照执行过程,从前到后编写程序
- 第三步:将高耦合部分封装成模块或函数
- 第四步:输入参数,按照程序执行过程调试
python中面向对象编程-定义类
Python是一种面向对象的编程语言。面向对象更关注数据,然而它与面向过程并不冲突,甚至可以互相弥补。面向对象编程语言中最强大的功能之一是允许程序员(问题解决者)创建新类,以模拟解决问题所需的数据。
面向对象特点:
- 封装: 打包数据和操作。对象的实现与使用独立,支持代码复用。
- 多态: 同一函数名启用不同方法。例如列表包括Circle、Rectangle、Polygon,则使用obj.draw()则画出不同的形状。
- 继承:一个类(subclass)可以借用另一个类(superclass)的行为。优点,避免操作重复,提升代码复用程度。
一、面向对象程序设计的基本步骤
- 第一步:根据功能,抽象业务对象
- 第二步:构建独立地业务模块,利用封装、继承、多态等抽象业务需求。
- 第三步:编写程序
- 第四步:以对象为输入单位输入参数、开展测试
具体参考http://python.jobbole.com/83747/
二、自底向上
自底向上:测试中等程序的最好方法是从结构图最底层开始,而不是从顶部开始,然后逐步上升。即,执行测试每一个基本函数,再测试由基础函数组成的整体函数,这样有助于定位错误。面向对象遵循自底向上。
总结
通过模块化设计可以分解问题使得编写复杂程序成为可能,通过单元测试方法分解问题使运行和调试复杂程序成为可能。自顶向下和自底向上贯穿程序设计和执行的整个过程。两者比较如下
Difference between OOP and POP
Object Oriented Programming (OOP) | Procedure Oriented Programming (POP) | |
Problem Solving | Importance is given to objects. So to solve a problem, it is divided into smaller parts known as objects. | Importance is given to functions or procedures. So to solve a problem it is divided into smaller parts known as functions or procedures. |
Approach | It follows bottom up approach. | It follows top down approach. |
Code Reusability | The existing code can be reused by the feature called inheritance. | There is no such feature. |
Data Hiding | The data is kept secure in class using access specifiers private and protected. | The data is less secure as this paradigm doesn’t provide any way to hide it. |
Modification | Modification and addition of new feature is really easier. | Modification and addition of new feature is difficult. |
Problem Size | It is suitable for solving big problems. | It is not suitable for solving big problems. |
Example | C++, Java and Python are some examples of OOP languages. | C, Fortran and Pascal are some examples of POP languages. |
拓展:软件开发模型
软件开发模型是指软件开发全部过程、活动和任务的结构框架。软件开发包括需求、设计、编码和测试等阶段,有时也包括维护阶段。软件开发模型能清晰、直观地表达软件开发全过程,明确规定了要完成软件的主要活动和任务,用来做为软件项目工作的基础。对于不同的软件系统,可以采用不同的开发方法,使用不同的编程语言,组织不同技能的人员,运用不同的管理方法等。
参考
中文https://www.bilibili.com/video/av10681614/?p=47
中文https://github.com/facert/python-data-structure-cn/tree/master/1.%E4%BB%8B%E7%BB%8D
英文https://www.appcoda.com/pop-vs-oop/