来源网站: http://wenwen.soso.com/z/q93753821.htm
声明: 在此网贴帖只是为了工作时方便查找答案和学习,因为目前本公司没有对此网站进行浏览屏蔽.
请不要对此贴进行评价.
面向对象是什么?你可以说出这个答案吗(相信没有正确答案)?我觉得面向对象只是软件工程中的一种工具而已。
那软件工程的目的是什么?目的是编写出可靠、高效、灵活、易扩展、可复用的软件产品。
既然面向对象是软件工程当中的一种工具,那我们使用面向对象的目的也应该是这些。
就是说我们用面向对象的目的是编写出可靠、高效、灵活、易扩展、可复用的软件产品。
我们一定要以这个目的为中心来学习和使用面向对象,不然你会失去方向。
大多时候讲面向对象,多是讲面向对象本身,而不讲怎么利用面向对象去解决实际的问题,这样很容易误导初学者。
再加上华丽的文字,很多人觉得只要面向对象了,什么事都可以OK了。
举个例子,给你一把最好的枪,教你如何使用它,过了一段时间你对这把枪了如指掌。
现在让你去打靶,结果100发子弹,一发都没有打中。咦,我不是用了最好的枪了吗?为什么一发都打不中?
因为你不知道射击要领,不知道如何瞄准靶心,结果当然可想而知了。
我们要OOP(Object-Oriented Programming),不要POO(Programming Object-Oriented)。
面向对象有3大特征(一般讲面向对象都会提到这三个),继承、封装、多态。按字面上理解,
对我们来说是全新的概念,但只要你分析一下,就会发现这些都是我们在编程中,常常用到的概念。
封装是什么?只有在面向对象里才有封装的概念吗?不是的,只要是程序就有封装。大家常常用的变量、函数就是封装。
举个例子,你写了取用户状态的函数,对调用这个函数的程序来说,取用户状态逻辑是封闭的,所以逻辑发生变化时,
不会对调用的程序造成影响。变量也是封装,你定义了一个int变量,无论你给它赋什么值,
对调用这个变量的程序来说,就是一个整数型类型的值。提到封装不得不提接口,因为封装是做接口的过程。
接口是什么?只有用了interface这个关键字才是接口吗?词典里的解释是物体的接触面、界面。
世界是由物体组成的,所以我们的生活当中到处是接口。你看到一个球,它是圆的,圆就是接口。
我们的程序也都是由接口组成的,数据类型、关键字、函数、变量等等。比如说看到int这个词,
你就知道它是整数型数据类型,我们可以说:int是整数型数据类型的接口。所以封装和接口不是面向对象特有的概念,
只不过在面向对象里它们的范围扩大了而已。我们在网上常常能看到面向对象和面向过程之间的讨论,说哪一个好。
其实,这些都是不重要的,因为用哪一个方法,都是做接口的过程。关键在于使用这些方法的程序员,
看你的抽象能力怎么样了。
多态可能是我们最难理解的一个概念,polymorphism这个词,因为大家没有学习过面向对象的话,是很难碰到的。
其实这个也是我们常常用到的一个概念,只不过没有给它命名而已(至少没用多态来命名它)。
看下面的例子, double a = 0,b=5,c=0;
a = 1;
c = a + b;
cout << c << endl;
a = 3.5f;
c = a + b;
cout << c endl;
输出结果是
6
8.5
我们先定义了三个变量,a、b、c,先后给A赋值1,3.5,然后输出a+b的结果,可以看到,
同样的逻辑随着a值的变化,输出的结果也是不一样的(多态的效果)。在这里double是高类型(相当于父类),
1、3.5(int,float)是低类型(相当于子类)。这个例子是变量的多态,那有没有函数多态的例子,当然有,
写过C的人都知道函数指针,它就是函数的多态。
终于要说说对象了,重点就在这里~ 第一,类是一个模块。以前我们的模块是一个文件,比如一个.c、.cpp等等。
一个模块文件里写什么功能函数没有限制(理论上没有明确定义该怎么写),按开发人员的经验来部署这些功能函数。
所以很容易写出超级模块(一个文件里有几十个、几百个函数),代码维护起来很不方便。
面向对象就很好的解决了这个问题,只要看过面向对象基础理论的程序员都知道,先定义类,然后把相关的函数放到类里。
面向对象里有一个原则,类单一职责原则,遵循这个原则的话,你可以写出很好的模块出来。
更重要的是我们沟通维护起来也很方便,比如以前沟通可能是这样的,修改customer.cpp文件里的某一个函数,
面向对象里呢,可以这样说修改客户类的某一个方法。这个非常重要,因为这个跟人的思维有密切关系。
比如我们到餐厅去吃饭,你对服务员说我要一瓶啤酒,我确信服务员会再问你一句:先生,你要什么牌子的啤酒?
但如果你说:我要一瓶百威啤酒,服务员肯定不会再问你。要是把一个系统看成生产线的话,类就是工人。
一个工人只负责一个操作,A负责打孔,B负责装螺丝钉,C负责包装。这样做非常有效率,而且出了问题,
很好确定问题出现在哪个工人。第二,类是一个自定义数据类型。理解了这点,你的思路会清晰起来,
也不会对面向对象感到陌生。看下面的简单例子,
//计算两个数的合
double sum(double a,double b);
int _tmain(int argc, _TCHAR* argv[])
{
double a=0,b=0;
a = 1;
b = 2;
cout << sum(a,b) << endl;
a = 1.2f;
b = 2.3f;
cout << sum(a,b) << endl;
return 0;
}
//计算两个数的合
double sum(double a,double b)
{
return a+b;
}
例子里,低类型的int和float赋值给了高类型的double,然后用sum函数它们的合。
如果编程语言不支持这种转换的话,我们只好写两个函数了,
//处理int的计算
int sum(int a,int b);
//处理float的计算
float sum(float a,float b);
所以我们可以确定-同类型当中,只有提供从低到高类型的转换,才可以实现多态的效果(不知道,
没有面向对象以前是什么概念)。当然,类作为数据类型,也需要这种转换了。但类是自定义类型,所以,
哪个是高类型,哪个是低类型,必须要由我们来定义:父类是高类型、子类是低类型(继承是这么诞生的吗:))。
继承让我们可以复用父类的代码,但在这个例子中我们可以看出,它的主要目的是在多态。
上面我们讨论了面向对象和它的三个特征,我们可以看到,这些都是编程当中常常用到的概念。
我觉得最大的突破是给我们提供了新的思维模式、新的代码组织结构、
定义了以前软件设计中比较模糊的概念(比如多态)。那我们怎么转换我们的思维呢?把你想象成公司的经理就可以了。
你现在是一家公司的经理了,部门就是子系统,员工就是对象。你需要做的就是这些,
-每天会有很多事需要你处理,做好心里准备。
-公司做什么业务?
-要建立几个部门?,规定部门之间的沟通规则。
-需要什么样的职位?每个职位要做的事是什么?
-规定业务流程,业务流程中,需要哪个部门参与?需要哪个员工参与?他们之间怎么沟通?
-借鉴成功的管理模式,但要符合公司的情况,不要盲目地使用,因为代价太大了。
-不要设置太多的沟通环节,能简单就简单,只要完成目标就可以。
-准备应对变化。世界上没有对于错,永远是前进中不断修正。
就这些啦?恩,道理很简单,但要做一个好公司就非常困难了,因为变数太大了。面向对象也是一样的,
需要付出努力,才可以做好。
分享到:
相关推荐
PLC(可编程逻辑控制器)面向对象编程是一种先进的编程模式,它借鉴了计算机高级语言中面向对象编程(OOP)的概念,并将其应用于工业控制系统中。尽管在PLC编程中无法完全实现面向对象语言的所有特点,比如“继承”...
这是对面向过程和面向对象的解释,个人参考一些文章后做的小总结。
面向对象是目前最流行的一种程序设计和实现思想,无论你是从事企业级开发、互联网应用开发,还是手 机软件开发,都会使用到面向对象的技术;主流的编程语言中,C++,Java,C#,PHP,Python等都是支持 面向对象的语言;...
Python 是一种面向对象的解释型语言,面向对象是其非常重要的特性。《Python 3面向对象编程》通过Python 的数据结构、语法、设计模式,从简单到复杂,从初级到高级,一步步通过例子来展示了Python 中面向对象的概念...
易语言面向对象学习 1 一.枯燥的理论 2 1.对象和类 2 2.类的“成员”与“方法” 2 3.实例化 2 4.继承 3 二.牛刀小试 3 1.定义一个类,生成实例对象 3 2.“_初始化” 与 “_销毁” 5 三.一个更丰富的“员工...
面向对象编程是计算机语言的一种先进的编程模式,在工业控制系统的PLC程序中也可以采用这种设计思想,虽然我们无法实现面向对象的很多特点如“继承”,甚至于它根本就不具备面向对象编程语言的特点,但面向对象编程...
本教程“实用面向对象软件工程教程”旨在深入探讨面向对象分析(OOA)和面向对象设计(OOD)的关键原则,帮助开发者构建高质量、可维护的软件系统。 在面向对象分析阶段,我们首先理解问题域,识别出关键实体和它们...
面向对象概要设计模板 面向对象设计是一种软件设计方法,它强调对象之间的交互和协作,以达到软件系统的高内聚、低耦合的目标。在软件设计中,面向对象设计方法可以帮助开发者更好地理解系统的需求和行为,从而提高...
借助于漫画展示的形式,面向对象的简、由类创建一个对象的方法、类的编写与对象的创建、类的构造函数、类的方法、修饰符、Java中的封装/继承/多态等特征、Java中的线程、用Java创建一个小世界、多线程共享数据,以及...
面向对象分析(Object-Oriented Analysis,OOA)是软件工程中的一种重要方法,它着重于从实际问题出发,抽象出问题域内的对象及其相互关系,以构建问题域模型。在“软件工程-张海藩编著--面向对象分析实验报告”中,...
面向对象软件测试综述 面向对象软件测试是面向对象软件开发的不可缺少的一环,是保证软件质量、提高软件可靠性的关键。结合传统软件测试的方法和技术,并针对面向对象软件所具有的特征,将面向对象软件测试层次划分...
面向对象的编程(OOP)是面向对象软件开发过程中的第三个阶段,是指将 OOD 的系统设计模型用面向对象的程序设计语言予以具体实现,具体而言,OOP 是实现在面向对象设计模型中的各个对象所规定的任务。面向对象的编程...
详细介绍了面向对象的分析与设计,全面探讨了面向对象概念、软件开发过程、UML和多层技术。本书使用最常见的技术和方法,通过一个贯穿全书的案例分析,对面向对象的软件开发过程和使用面向对象技术的编程过程进行了...
由于提供的文件内容不包含实际的文本信息,而是重复的URL链接,因此无法从该部分提供有关面向对象分析与设计(OOAD)的知识点。但是,我将尽可能详细地介绍面向对象分析与设计的相关知识点,以满足您的需求。 面向...
《面向对象软件工程》 作者:Stephen.R.Schach 学校:(美)范德比尔特大学 书名原名:Objected-Oriented Software Engineering 目录: 第一部分 面向对象软件工程简介 第一章 面向对象软件工程的范畴 第二章 ...
面向对象编程思想 面向对象编程思想是当前计算机界关心的重点,它是 90 年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用...
面向对象系统分析与设计是软件工程领域的一个重要部分,它涉及如何使用面向对象的方法来分析和设计软件系统。面向对象方法强调的是用现实世界中的概念来模拟软件系统中的实体和它们之间的交互。以下是一些在面向对象...
本书内容由浅入深,紧密结合实际,利用大量典型实例,详细讲解Java面向对象的编程思想、编程语法和设计模式,介绍常见Java类库的用法,总结优化 Java编程的各种宝贵经验,深入阐述Java虚拟机执行Java程序的原理。...
面向过程、面向对象、面向组件、面向服务软件架构的分析与比较 软件开发历程与架构演进 软件开发从汇编语言、过程式语言、面向对象、面向组件发展到面向服务,这一进程不仅反映了编程技术的不断进步,更是软件工程...