问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎么样才能更好的掌握面向对象编程思想(oop)啊?

发布网友 发布时间:2022-04-23 23:26

我来回答

3个回答

热心网友 时间:2022-04-13 16:45

面向对象是什么?你可以说出这个答案吗(相信没有正确答案)?我觉得面向对象只是软件工程中的一种工具而已。那软件工程的目的是什么?目的是编写出可靠、高效、灵活、易扩展、可复用的软件产品。既然面向对象是软件工程当中的一种工具,那我们使用面向对象的目的也应该是这些。就是说我们用面向对象的目的是编写出可靠、高效、灵活、易扩展、可复用的软件产品。我们一定要以这个目的为中心来学习和使用面向对象,不然你会失去方向。大多时候讲面向对象,多是讲面向对象本身,而不讲怎么利用面向对象去解决实际的问题,这样很容易误导初学者。再加上华丽的文字,很多人觉得只要面向对象了,什么事都可以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);

所以我们可以确定-同类型当中,只有提供从低到高类型的转换,才可以实现多态的效果(不知道,没有面向对象以前是什么概念)。当然,类作为数据类型,也需要这种转换了。但类是自定义类型,所以,哪个是高类型,哪个是低类型,必须要由我们来定义:父类是高类型、子类是低类型(继承是这么诞生的吗:))。继承让我们可以复用父类的代码,但在这个例子中我们可以看出,它的主要目的是在多态。

上面我们讨论了面向对象和它的三个特征,我们可以看到,这些都是编程当中常常用到的概念。我觉得最大的突破是给我们提供了新的思维模式、新的代码组织结构、定义了以前软件设计中比较模糊的概念(比如多态)。那我们怎么转换我们的思维呢?把你想象成公司的经理就可以了。你现在是一家公司的经理了,部门就是子系统,员工就是对象。你需要做的就是这些,

-每天会有很多事需要你处理,做好心里准备。
-公司做什么业务?
-要建立几个部门?,规定部门之间的沟通规则。
-需要什么样的职位?每个职位要做的事是什么?
-规定业务流程,业务流程中,需要哪个部门参与?需要哪个员工参与?他们之间怎么沟通?
-借鉴成功的管理模式,但要符合公司的情况,不要盲目地使用,因为代价太大了。
-不要设置太多的沟通环节,能简单就简单,只要完成目标就可以。
-准备应对变化。世界上没有对于错,永远是前进中不断修正。

就这些啦?恩,道理很简单,但要做一个好公司就非常困难了,因为变数太大了。面向对象也是一样的,需要付出努力,才可以做好。

热心网友 时间:2022-04-13 18:03

你可以这样想,你一个人,你是男的,能吃饭,睡觉,
class 你
{
属性 性别;
方法 吃饭();
方法 睡觉();
}
面向对象就是描述万象的特征和特点,功能.

热心网友 时间:2022-04-13 19:37

万物都是对象,所有的东西都看做是对象就好了.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎么样制作个人简历 上海海事大学对外交流多麽出国会不会容易一些 上海海事大学提前批今年要几号才能出来 怎么查找大学家长群 北京慧学堂在线教育学校的老师打电话来说要交3480元钱,给孩子半年的在... 左脸颊长青春痘是什么原因? 某商店上午9:00开始营业全天营业8小时下午几点关门 (2012?泗县模拟)某商店每天10:00-18:00营业,全天营业88小时. 某商店每天9:20-18:00营业,全天营业()小时。老师早上7:30到校,下午4... 商场营业时间是上午8:00-下午6:00,一位顾客向一位老先生嗯打听时间了... 面向对象编程的核心知识有哪些 英魂之刃,有一张英雄兑换卡,对英雄不怎么熟悉,求个很炫伤害高的英雄 简单面向对象编程的方法或思路 面向对象程序设计 学习这门课程需要什么基础吗? 新买的固态硬盘可以直接用U盘装系统吗 该怎么系统的学习面向对象编程? 英魂之刃十大必买英雄有哪些? 如何学习面向对象编程 车载磁带可以用磁带播放机播放吗? 汽车磁带机和普通MP3怎么对接 车载磁带机换MP3 如何将老式汽车磁带收音机改装mp3 怎么接汽车拆下来的磁带机? 汽车收放机(放磁带的)可以改做放mp3吗?有知道的作个答,谢了 可以放磁带的汽车是那种 谁能帮我修修车载磁带机 能否把H445JMC改装到磁带式收放机的车上 车用磁带机与mp3 想换掉车用磁带机,请教各位 汽车磁带机怎样增加usb接口 《面向对象程序设计》课程讲什么内容? 如何学习面向对象程序设计(C++) C++面向对象的编程怎么学? 试述面向过程的编程语言和面向对象的编程语言的概念、特点和区别。_百... 面向对象编程相对于面向过程编程有什么优点?二者有什么区别? 面向对象程序设计这门课程第四讲C#面向对象编程入门的知识点有哪些? 面向对象编程语言有哪些,哪个比较易上手 支付宝借呗欠款两万八逾期两年多今天委托方给我打电话说要起诉我是真的吗_百度问一问 被花呗借呗起诉会有什么影响呢? 花呗借呗30000逾期90接到电话说是要起诉? 花呗借呗逾期要被起诉怎么办? 欠花呗,借呗发律师函了,这是真的会被起诉吗? 借呗跟花呗逾期了今天收到短信说要起诉我 金凤花姑娘和三只小熊故事的梗概英文 支付宝借呗花呗逾期了两年多,会被起诉吗? 三只小熊英语版 三只小熊盖房子英语故事 急求三只小熊英文版歌词 帮忙翻译,谢谢了,谢谢了,急用,明天就要用。我们学校的看图讲故事,用英语。 求简单简单很简单的小学一年级英语故事!很短就行了,最好有中文翻译