oop面向对象的编程思想,真正的面向对象编程思想是怎样的

1,真正的面向对象编程思想是怎样的真正的面向对象编程思想就是忘掉一切关于计算机的东西,从问题领域考虑问题.1、将分析过程为抽象的过程:简言之:分成多个小问题(组成部分),直到无法再细;2、对每个对象(小问题)进行分析 , 抽象,提取处共同的内容(数据成员和操作方法),3、有相似的对象的 , 构造基类;再有基类派生出各个确定的对象(小问题);4、解决问题的过程就是操作这些对象的过程打个比方,比如盖房子,以前盖房子是用泥一点一点垒起来的,这种从泥到房子就是一个过程;而现在盖房子是用泥烧好砖,再用砖砌成房子,这种用现成的砖砌房子的思想就是我们所谓的面向对象的编程思想,盖房子所用的砖即是面向对象编程中所引用的类(也就是说编程时不需要从头到尾把源码写出来,中间可以引用封装在包里的具有各种功能的各个类来完成我们需要的动作或要求) 。
2 , OOP面对对象编程解释所谓面向对象 , 主要是在现代软件工程中的一种思想 。也就意味着,在开发流程中,主题都是对象 。简化了开发流程,也在其中包含了其他的特性,封装,继承,多态,抽象,重用等等等等 。多种特性的集合 , 也奠定了面向对象开发的霸主地位 。OOP: Object Oriented Programming,面向对象的程序设计 。所谓“对象”就是一个或一组数据以及处理这些数据的方法和过程的集合 。面向对象的程序设计完全不同于传统的面向过程程序设计,它大大地降低了软件开发的难度,使编程就像搭积木一样简单,是当今电脑编程的一股势不可挡的潮流 。面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构 。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成 。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性 。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息 。OOP 主要有以下的概念和组件:组件 - 数据和功能一起在运行着的计算机程序中形成的单元,组件在 OOP 计算机程序中是模块和结构化的基础 。抽象性 - 程序有能力忽略正在处理中信息的某些方面,即对信息主要方面关注的能力 。封装 - 也叫做信息封装:确保组件不会以不可预期的方式改变其它组件的内部状态;只有在那些提供了内部状态改变方法的组件中,才可以访问其内部状态 。每类组件都提供了一个与其它组件联系的接口,并规定了其它组件进行调用的方法 。多态性 - 组件的引用和类集会涉及到其它许多不同类型的组件,而且引用组件所产生的结果得依据实际调用的类型 。继承性 - 允许在现存的组件基础上创建子类组件,这统一并增强了多态性和封装性 。典型地来说就是用类来对组件进行分组,而且还可以定义新类为现存的类的扩展,这样就可以将类组织成树形或网状结构,这体现了动作的通用性 。由于抽象性、封装性、重用性以及便于使用等方面的原因,以组件为基础的编程在脚本语言中已经变得特别流行 。Python 和 Ruby 是最近才出现的语言,在开发时完全采用了 OOP 的思想,而流行的 Perl 脚本语言从版本5开始也慢慢地加入了新的面向对象的功能组件 。用组件代替“现实”上的实体成为 JavaScript(ECMAScript) 得以流行的原因,有论证表明对组件进行适当的组合就可以在英特网上代替 HTML 和 XML 的文档对象模型(DOM) 。【oop面向对象的编程思想,真正的面向对象编程思想是怎样的】
3,OOP思想应该怎样来理解它强调对象的“抽象”、“封装”、“继承”、“多态” 。一、oop的基本思想 OOP的许多原始思想都来之于Simula语言,并在Smalltalk语言的完善和标准化过程中得到更多的扩展和对以前的思想的重新注解 。可以说OO思想和OOPL几乎是同步发展相互促进的 。与函数式程序设计(functional-programming)和逻辑式程序设计(logic-programming)所代表的接近于机器的实际计算模型所不同的是,OOP几乎没有引入精确的数学描叙,而是倾向于建立一个对象模型 , 它能够近似的反映应用领域内的实体之间的关系 , 其本质是更接近于一种人类认知事物所采用的哲学观的计算模型 。由此,导致了一个自然的话题,那就是OOP到底是什么?[D&T 1988][B.S 1991] . 。在OOP中,对象作为计算主体,拥有自己的名称,状态以及接受外界消息的接口 。在对象模型中,产生新对象,旧对象销毁 , 发送消息 , 响应消息就构成OOP计算模型的根本 。对象的产生有两种基本方式 。一种是以原型(prototype)对象为基础产生新的对象 。一种是以类(class)为基础产生新对象 。原型的概念已经在认知心理学中被用来解释概念学习的递增特性,原型模型本身就是企图通过提供一个有代表性的对象为基础来产生各种新的对象,并由此继续产生更符合实际应用的对象 。而原型-委托也是OOP中的对象抽象,代码共享机制中的一种 。一个类提供了一个或者多个对象的通用性描叙 。从形式化的观点看,类与类型有关 , 因此一个类相当于是从该类中产生的实例的集合 。而这样的观点也会带来一些矛盾,比较典型的就是在继承体系下,子集(子类)对象和父集(父类)对象之间的行为相融性可能很难达到,这也就是OOP中常被引用的---子类型(subtype)不等于子类(subclass) [Budd 2002] 。而在一种所有皆对象的世界观背景下,在类模型基础上还诞生出了一种拥有元类(metaclass)的新对象模型 。即类本身也是一种其他类的对象 。以上三种根本不同的观点各自定义了三种基于类(class-based),基于原型(prototype-based)和基于元类(metaclass-based)的对象模型 。而这三种对象模型也就导致了许多不同的程序设计语言(如果我们暂时把静态与动态的差别放在一边) 。是的,我们经常接触的C++,Java都是使用基于类的对象模型,但除此之外还有很多我们所没有接触的OOPL采用了完全不一样的对象模型,他们是在用另外一种观点诠释OOP的内涵 。什么是oop的基本思想呢?把组件的实现和接口分开,并且让组件具有多态性 。不过,两者还是有根本的不同 。oop强调在程序构造中语言要素的语法 。你必须得继承,使用类,使用对象 , 对象传递消息 。gp不关心你继承或是不继承,它的开端是分析产品的分类,有些什么种类 , 他们的行为如何 。就是说,两件东西相等意味着什么?怎样正确地定义相等操作?不单单是相等操作那么简单,你往深处分析就会发现“相等”这个一般观念意味着两个对象部分 , 或者至少基本部分是相等的,据此我们就可以有一个通用的相等操作 。再说对象的种类 。假设存在一个顺序序列和一组对于顺序序列的操作 。那么这些操作的语义是什么?从复杂度权衡的角度看,我们应该向用户提供什么样的顺序序列?该种序列上存在那些操作?那种排序是我们需要的?只有对这些组件的概念型分类搞清楚了,我们才能提到实现的问题:使用模板、继承还是宏?使用什么语言和技术?gp的基本观点是把抽象的软件组件和它们的行为用标准的分类学分类,出发点就是要建造真实的、高效的和不取决于语言的算法和数据结构 。当然最终的载体还是语言,没有语言没法编程 。stl 使用c++ , 你也可以用ada来实现,用其他的语言来实现也行,结果会有所不同,但基本的东西是一样的 。到处都要用到二分查找和排序,而这就是人们正在做的 。对于容器的语义,不同的语言会带来轻微的不同 。但是基本的区别很清楚是gp所依存的语义,以及语义分解 。例如,我们决定需要一个组件swap , 然后指出这个组件在不同的语言中如果工作 。显然重点是语义以及语义分类 。而oop所强调的(我认为是过分强调的)是清楚的定义类之间的层次关系 。oop告诉了你如何建立层次关系,却没有告诉你这些关系的实质 。(这段不太好理解 , 有一些术语可能要过一段时间才会有合适的中文翻译——译者) 面向对象的编程方法OOP是九十年代才流行的一种软件编程方法 。它强调对象的“抽象”、“封装”、“继承”、“多态” 。我们讲程序设计是由“数据结构”+“算法”组成的 。从宏观的角度讲 , OOP下的对象是以编程为中心的,是面向程序的对象 。我们今天要讲的OOD是面向信息的对象,是以用户信息为中心的 。万物皆对象 , 把万物看作对象 ,对象有 方法(行为) 和 属性(特征)
4,怎么样才能更好的掌握面向对象编程思想oop啊面向对象是什么?你可以说出这个答案吗(相信没有正确答案)?我觉得面向对象只是软件工程中的一种工具而已 。那软件工程的目的是什么?目的是编写出可靠、高效、灵活、易扩展、可复用的软件产品 。既然面向对象是软件工程当中的一种工具 , 那我们使用面向对象的目的也应该是这些 。就是说我们用面向对象的目的是编写出可靠、高效、灵活、易扩展、可复用的软件产品 。我们一定要以这个目的为中心来学习和使用面向对象,不然你会失去方向 。大多时候讲面向对象,多是讲面向对象本身 , 而不讲怎么利用面向对象去解决实际的问题,这样很容易误导初学者 。再加上华丽的文字,很多人觉得只要面向对象了,什么事都可以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;输出结果是68.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);所以我们可以确定-同类型当中,只有提供从低到高类型的转换,才可以实现多态的效果(不知道,没有面向对象以前是什么概念) 。当然,类作为数据类型,也需要这种转换了 。但类是自定义类型 , 所以,哪个是高类型,哪个是低类型 , 必须要由我们来定义:父类是高类型、子类是低类型(继承是这么诞生的吗:)) 。继承让我们可以复用父类的代码,但在这个例子中我们可以看出,它的主要目的是在多态 。上面我们讨论了面向对象和它的三个特征,我们可以看到,这些都是编程当中常常用到的概念 。我觉得最大的突破是给我们提供了新的思维模式、新的代码组织结构、定义了以前软件设计中比较模糊的概念(比如多态) 。那我们怎么转换我们的思维呢?把你想象成公司的经理就可以了 。你现在是一家公司的经理了,部门就是子系统,员工就是对象 。你需要做的就是这些,-每天会有很多事需要你处理,做好心里准备 。-公司做什么业务?-要建立几个部门?,规定部门之间的沟通规则 。-需要什么样的职位?每个职位要做的事是什么?-规定业务流程 , 业务流程中,需要哪个部门参与?需要哪个员工参与?他们之间怎么沟通?-借鉴成功的管理模式 , 但要符合公司的情况,不要盲目地使用 , 因为代价太大了 。-不要设置太多的沟通环节,能简单就简单 , 只要完成目标就可以 。-准备应对变化 。世界上没有对于错,永远是前进中不断修正 。就这些啦?恩,道理很简单,但要做一个好公司就非常困难了,因为变数太大了 。面向对象也是一样的,需要付出努力,才可以做好 。你可以这样想,你一个人,你是男的,能吃饭,睡觉,class 你属性 性别;方法 吃饭();方法 睡觉();}面向对象就是描述万象的特征和特点,功能.所谓面向对象,主要是在现代软件工程中的一种思想 。也就意味着 , 在开发流程中,主题都是对象 。简化了开发流程,也在其中包含了其他的特性,封装,继承,多态,抽象,重用等等等等 。多种特性的集合,也奠定了面向对象开发的霸主地位 。

    推荐阅读