黑马程序员——pop与oop的区别

---------------------- <ahref="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<ahref="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

 

一、面向过程的程序设计POP

       基于功能分析的,以算法为中心的程序设计方法;

       程序=算法+数据结构

1. 核心思想:

       自顶向下,逐步求精;模块化设计,结构化编码。

2. 程序设计步骤:

       分析问题,建立数学模型

设计算法;

       编写程序;

       调试程序;

       运行程序;

3. 存在的问题:

       在基于功能分析的软件的开发成本中,维护的成本在70%左右,而在软件维护的费用中,65.4%是由于环境和用户需求的变化引起的,并且随着软件规模的增大,程序变得越来越难以管理。

4.举例说明

       a.课程成绩分析软件(给任课教师用)

       功能要求:

统计一个班的学生某门课程的总分、平均分及各分数段的人数及百分比。

       数据结构:

              学生成绩用一个一维数组来保存,总分、平均分及各分数段的人数用几个变量保存。

       算法:

输入学生成绩、进行数据统计、输出统计结果

       b.学生成绩查询软件(给任课教师)

       功能要求:

              能将输入的一个班的学生某门课程的成绩,并能将数据长期保存,可查询某个学生的成绩,可统计全班学生这门课程总分、平均分及各分数段的人数及百分比。

       数据结构:

              某个学生学号、姓名及成绩可用一个结构体变量保存,全班学生的成绩信息可用结构体数组保存,总分、平均分及各分数段的人数用几个变量保存。

       算法:

              显示系统功能菜单(成绩录入、成绩查询、成绩统计)、选择相应功能、调用相应函数完成功能

       c.学生信息管理软件(给班主任及辅导员用)

       功能要求:

              能保存全班学生的基本信息(学号、姓名、性别、年龄、电话、寝室号),能够方便地查询学生的基本信息,能够进行数据统计。

       数据结构:

              某个学生的基本信息可用一个结构体变量保存,全班学生的基本信息可用结构体数组保存,统计数据用变量保存。

       显示系统功能菜单(信息录入、信息查询、信息统计)、选择相应功能、调用相应函数完成功能

       考虑的问题:

       课程成绩分析软件、学生成绩查询软件、学生信息管理软件中有无共同的数据、相同的功能?能否实现代码的共用?

       若要求实现对全校学生的成绩及信息进行管理如何在已有的这三个软件的基础上进行升级改造?

 

二、面向对象的程序设计OOP

       基于结构分析的,以数据为中心的程序设计方法;

       程序=对象+消息传递

1. 核心思想:

       系统由一系列的对象构成,对象具有一定的属性(数据)和行为(功能),通过向对象发送消息可以激活对象的行为。

2. 程序设计步骤:

       分析问题,定义类;

创建对象,设计用户界面;

设置对象的属性,完善用户界面;

       编写程序,描述用户可向系统传递什么消息,系统将作出什么样的响应;

       调试程序;

       运行程序;

3. 几个重要的概念:

       类:对于具有相同的特征的对象的抽象及总体描述。

              包括:数据特征和行为特征。

       对象:是类的一个实例。

              包括:一个描述其数据特征的值集和一个描述其行为特征的作用于值集的操作集。

类是在对象之上的抽象,对象是类的实例。

       例如:学生是一个类,张三,李四是学生类的对象;from是一个类,from1、from2是from类的对象。

              学生类(学号、姓名、性别、年龄、成绩;报到、考试、毕业、就业;)

              张三    1101、张三、男、 18、  365

              李四    1102、李四、女、 21、  280

              报到:学校注册、专业注册、分配寝室、缴费、领军训物资

门是类,我刚打开的那扇门是对象。

电脑是类,联想电脑也是类,我正在用的这台电脑是对象。

       电脑类(CPU型号、类型、品牌、价格; 运算、存储、上网、)

       属性:用来描述对象的数据特征。不同的类可能有不同的属性,同一个类的不同对象可能有不同的属性值。

       方法:用来描述对象的行为特征。不同的类可能有不同的方法,也有可能有相同的方法,但表现形式可能不同。同一个类的不同对象应该有相同的方法,但表现形式可能是不同的。

      

       消息:对象之间的通信。

              发送方通过消息要求对象执行某种操作,接收方收到消息后经过解释,予以响应。

       例:张教官命令李四同学立正。

              张教官命令李四同学跑1000米。

              消息的内容:

                     接收消息的对象;

                     需要执行的操作;

                     需要传递的参数。

4. 面向对象的几个重要的特性:

       封装性:对象封装其的内部的数据,外部内能通过对象的外部接口才能访问。

              确保了数据的安全,也便于集成,提高效率,提高可靠性和可维护性。

              例如:张三同学的个人信息有(学号、姓名、性别、年龄、成绩、银行卡号、密码),找张老师报到时只能要求提供(学号、姓名、性别、年龄、成绩)等信息,不可提供银行卡号、密码等信息。到对面工行取钱时只要提供银行卡号、密码等信息,不可提供学号、姓名、性别、年龄、成绩等信息。

 

       继承性:子类可继承父类的所有特征(包括数据及行为),同时还增加了自己特有的数据和行为。

              提高代码的重用性。

              例如:人类有姓名、性别、年龄等属性,有吃饭、睡觉等方法。

                       学生是人类的子类,也有姓名、性别、年龄等属性,有吃饭、睡觉等方法,同时还有学号、成绩等属性,考试、上课等方法。

                       教师类的子类,也有姓名、性别、年龄等属性,有吃饭、睡觉等方法,同时还有工号、工资等属性,上课、备课等方法。

                     交通工具是父类,汽车是子类,交通工具有速度、载重量等属性,有运行、停止等方法,汽车也有速度、载重量等属性,也有运行、停止等方法,汽车有属性车轮子数、车门数等属性。

 

多态性:同一个类的不同对象对同一消息的响应可以产生不同的结果。例于函数重载,动态绑定。

       提高了灵活性、多样性。

例如:张教官命令李四同学跑步。结果李四跑了100米,用了13秒。

         张教官命令张三同学跑步。结果张三跑了10米,用了8秒。

张教官命令李四同学跑1000米。

 

5. 主要优点:

       易维护

采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。

 

质量高

在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。

 

效率高

在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。


易扩展

由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值