一、 面向对象,这个对象到底是什么?

 

这个对象不是C#中的实例,C#中我们把一个类的实例也叫做对象,这种对象严格的说应该是面向对象的编程实现(OOP)中的对象,面向对象编程,也不是面向类的实例编程。对象的定义是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。也有的定义为“一切都是对象”然而面向对象也不能简单的等价理解成面向任何事物编程,面对一切编程?开玩笑,呵呵。

因此面向对象这个对象,指的是客体。所谓客体是指客观存在的对象实体和主观抽象的概念。

二、 为什么要面向对象?

面向对象是为了解决系统的可维护性,可扩展性,可重用性,我们再进一步思考,面向对象为什么能解决系统的可维护性,可扩展性,可重用性?

面向对象产生的历史原因有下面两点:

1、 计算机是帮助人们解决问题的,然而计算机终究是个机器,他只会按照人所写的代码,一步一步的执行下去,最终得到了结果,因此无论程序多么的复杂,计算机总是能轻松应付,结构化编程,就是按照计算机的思维写出的代码,但是人看到这么复杂的逻辑,就无法维护和扩展了。

2、 结构化设计是以功能为目标来设计构造应用系统,这种做法导致我们设计程序时,不得不将客体所构成的现实世界映射到由功能模块组成的解空间中,这种转换过程,背离了人们观察和解决问题的基本思路。

可见结构化设计在设计系统的时候,无法解决重用、维护、扩展的问题,而且会导致逻辑过于复杂,代码晦涩难懂。于是人们就想,能不能让计算机直接模拟现实的环境,用人类解决问题的思路,习惯,步骤来设计相应的应用程序?这样的程序,人们在读它的时候,会更容易理解,也不需要再把现实世界和程序世界之间来回做转换。

与此同时,人们发现,在现实世界中存在的客体是问题域中的主角,所谓客体是指客观存在的对象实体和主观抽象的概念,这种客体具有属性和行为,而客体是稳定的,行为不稳定的,同时客体之间具有各种联系,因此面向客体编程,比面向行为编程,系统会更稳定,在面对频繁的需求更改时,改变的往往是行为,而客体一般不需要改变,所以我们就把行为封装起来,这样改变时候只需要改变行为即可,主架构则保持了稳定。

于是面向对象就产生了。

然而人们追求的系统可维护性,可扩展性,可重用性又是怎么在面向对象中体现出来的呢?

首先看看面向对象的三大特征

封装:找到变化并且把它封装起来,你就可以在不影响其它部分的情况下修改或扩展被封装的变化部分,这是所有设计模式的基础,就是封装变化,因此封装的作用,就解决了程序的可扩展性。

继承:子类继承父类,可以继承父类的方法及属性,实现了多态以及代码的重用,因此也解决了系统的重用性和扩展性,但是继承破坏了封装,因为他是对子类开放的,修改父类会导致所有子类的改变,因此继承一定程度上又破坏了系统的可扩展性,所以继承需要慎用,只有明确的IS-A关系才能使用,同时继承在在程序开发过程中重构得到的,而不是程序设计之初就使用继承,很多面向对象开发者滥用继承,结果造成后期的代码解决不了需求的变化了。因此优先使用组合,而不是继承,是面向对象开发中一个重要的经验。

多态:接口的多种不同的实现方式即为多态。接口是对行为的抽象,刚才在封装提到,找到变化部分并封装起来,但是封装起来后,怎么适应接下来的变化?这正是接口的作用,接口的主要目的是为不相关的类提供通用的处理服务,我们可以想象一下。比如鸟会飞,但是超人也会飞,通过飞这个接口,我们可以让鸟和超人,都实现这个接口,这就实现了系统的可维护性,可扩展性。

因此面向对象能实现人们追求的系统可维护性,可扩展性,可重用性。面向对象是一种编程思想,起初,“面向对象”是专指在程序设计中采用封装、继承、多态等设计方法,但面向对象的思想已经涉及到软件开发的各个方面,比如现在细分为了面向对象的分析(OOA),面向对象的设计(OOD),面向对象的编程实现(OOP)

三 面对对象编程,分为几个步骤? 

面向对象是一种思想,他让我们在分析和解决问题时,把思维和重点转向现实中的客体中来,然后通过UML工具理清这些客体之间的联系,最后用面向对象的语言实现这种客体以及客体之间的联系。它分为面向对象的分析(OOA),面向对象的设计(OOD),面向对象的编程实现(OOP)三个大的步骤。

1、首先是分析需求,先不要思考怎么用程序实现它,先分析需求中稳定不变的客体都是些什么,这些客体之间的关系是什么。

2、把第一步分析出来的需求,通过进一步扩充模型,变成可实现的、符合成本的、模块化的、低耦合高内聚的模型。

3、使用面向对象的实现模型

转载于:https://www.cnblogs.com/jiulinghoudabai/p/6721714.html

什么是面向对象,为什么要面向对象相关推荐

  1. python面向对象的优点_Python面向对象编程——总结面向对象的优点

    Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...

  2. java基础面向对象_Java基础面向对象

    一.面向过程的思想和面向对象的思想 面向对象和面向过程的思想有着本质上的区别,作为面向对象的思维来说,当你拿到一个问题时,你分析这个问题不再是第一步先做什么,第二步再做什么,这是面向过程的思维,你应该 ...

  3. python面向对象编程的优点-Python面向对象编程——总结面向对象的优点

    Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...

  4. python完全支持面向对象编程_Python 面向对象编程概要

    面向对象三大特性 面向对象的三大特性是指:封装.继承和多态. 封装 封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容. 所以,在使用面向对象的封装特性时,需要: 将内容封装到某处 ...

  5. php控制器面向对象编程,PHP 面向对象编程(2)

    一些内建方法: class Person { public $isAlive = true; function __construct($name) { //这里我们创建了一个name的属性 $thi ...

  6. Java面向对象的编程⑤面向对象

    今日内容:java面向对象 1面向对象的思想 面向对象和面向过程区别: 面向对象是相对于面向过程,面向过程指的功能行为,面向对象指将功能封装对象中,强调的是功能的对象 面向过程:打开门大象放进去关闭门 ...

  7. python 完全面向对象_python之面向对象

    Python Python开发 Python语言 python之面向对象 第一章 面向对象初识 面向对象的三大特性是什么? 抽象.继承.多态. 面向对象第一个优点:* 对相似功能的函数,同一个业务的函 ...

  8. 【Java开发语言 03】第三章 面向对象编程(面向对象与面向过程+类和对象+类成员一:属性+类成员二:方法+对象的创建和使用+封装和隐藏+构造器+关键字this,package,import)

    面向对象编程 1 面向对象与面向过程 1.1 java类及类的成员 2 java语言的基本元素:类和对象 2.1 类的语法格式 2.2 创建Java自定义类 2.3 对象的创建及使用 3 类的成员之一 ...

  9. 【廖雪峰python总结】python高级特性,函数式编程,面向对象编程,面向对象高级编程

    文章目录 python复习总结 python高级特性 函数式编程 面向对象编程 面向对象高级编程 python复习总结 python高级特性 python高级特性 函数式编程 函数式编程 函数式编程的 ...

  10. PHP什么是面向对象?PHP面向对象小结

    本篇文章给大家带来的内容是PHP什么是面向对象?PHP面向对象小结.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所助. 面向对象特性: *重用性 (每个模块都可以在项目中重复使用) *灵活 ...

最新文章

  1. STL中的map、unordered_map、hash_map
  2. 正确实现用spring扫描自定义的annotation
  3. Delphi的“Invalid pointer operation“异常的解决办法
  4. SQL Server快捷键
  5. html不间断滚动图片,Javascript实现图片不间断滚动的代码
  6. 问题.beego路由设置及请求参数传递
  7. linux 共享内存陷井,linux共享内存应用与陷阱
  8. 频域分析方法的理解(信号、频谱、能量谱、功率谱、倒频谱、小波分析)(终极教程)
  9. 01let和const
  10. 【软件测试】白盒测试与黑盒测试的区别(不同)
  11. 桌面支持--dcc打印机设置注意
  12. Android一行代码去掉百度导航的底部工具箱菜单
  13. iOS - UIButton连续点击事件控制
  14. 打开我的收藏夹 -- Python时间序列分析篇
  15. antd-design-pro实现多页签,切换页签保留缓存,keep-alive
  16. 通俗理解LDA主题模型(转载自 v_JULY_v 大佬)
  17. 算法时间复杂度计算方法
  18. bzoj1720[Usaco2006 Jan]Corral the Cows 奶牛围栏
  19. html+css简单下拉菜单制作
  20. Android系统修改默认语言为中文

热门文章

  1. VC++ (四)动态内存
  2. sql 删除重复记录
  3. DotNetTextBox编辑器
  4. string与byte[]之间的转换
  5. 【elasticsearch】elasticsearch--6.8.0报错信息如下: checksum failed (hardware problem?)
  6. 发现一个很nice的API调试工具
  7. hadoop 传感器数据_大数据时代Hadoop的本质,你有过认真了解吗?
  8. Python 字符串(二)
  9. Web前端现在薪资多少?企业喜欢什么样的Web前端工程师?
  10. linux 查看最近用户,Linux下查看用户列表