面对对象 究竟是什么思想?!

2024-12-28 07:53:41
推荐回答(5个)
回答1:

老实说,你老师说的不全准确!
老师所说的类与属性,还有所谓的封装、继承、多态(3大特征)主要停留在开发语言上,如C#是一门面向对象的语言,使用C#可以实现刚才的几大特征!
真正面向对象主要是指思想上的,如何将我们的业务封装成对象,如何使用面向对象的几大特征进行编码!
如我们可能有这样一种业务:打印机进行打印,看似很简单,以往面向过程的编程就是:
public class Function
{
public void Print()
{
}
}
如果有多种打印机打印呢?
public class Function
{
public void HPPrint()
{
}
public void CanonPrint(){}
.......
}
如果有多种打印方式呢,如彩打、喷打、打印到文件、图像等呢?这样方法就会越来越多,
如果打印机还有很多其他功能呢?如果又有其他的对象的其他功能呢,这样代码多且乱!而且代码冗余很多!
public class Function
{
public void HPPrint(){}
public void HPPrint1(){}

public void CanonPrint(){}
public void CanonPrint1(){}
.......
}
反正就是通过使用方法来实现多种功能,多一个功能就多加一个方法;
但使用面向对象的方式就不这样来写,我们可能要思考这里面所涉及的对象,
如打印机(如有必要可能要细分到如喷头、墨盒等)对象,打印是打印机的行为;
所以我们可以抽象出一个打印机类,类有方法打印
public class HPPrinter
{
public void Print(){}
}
public class CanonPrinter
{
public void Print(){}//而佳能的打印和HP的打印方式完全一样,肯能就材料什么的不一样,所以两个方法的代码冗余

}
因为所有的打印机都有Print方法,所以抽象一个基类
public abstract class Printer
{
public virtual void Print(){}//设置默认的打印方式,其他所有子类都具备了该打印方式,如果子类有特殊的打印方式只要重写就可以了
//如果要为所有的打印机再添加喷墨功能,只要在基类添加一个虚方法即可
public virtual void PenMoPrint(){}
//.......................
}
//上面的代码基本能满足需求,但问题又来了,随着科技的发展,能够打印的东西不是只有打印机才可以,电话机、传真机、照相机等也开始有了打印功能,那怎么办呢?
//我们可能这样实现:
public class TelePhone
{
public void Print(){}
}
public class Camera
{
public void Print(){}
}
//这样看好像没错,但从面向对象的方式思考,虽然各种各样的数码产品都具备了打印功能,但我们不会用啊
//,因为没有统一的方式告诉我们该东西可以打印以及怎么开始打印?
这时候就开始有了接口,比如usb接口,做笔记本的厂商是不是不需要知道以后USB接口上会插上什么东西?
所以就会这样实现:
public interface IPrinter
{
void Print();
}
public class TelePhone:IPrinter
{
public void Print(){}
}
public class Camera:IPrinter
{
public void Print(){}
}
public class HPPrinter:IPrinter
{
public void Print(){}
}
这样就不管是什么东西只要实现了打印接口就可以打印了!
有人会问了,那各种打印机的类都要实现打印接口吗?
因为只要是打印机就肯定具备打印功能,所以我们只要基类实现打印接口就可以了:
public abstract class Printer:IPrinter
{
public virtual void Print(){}//设置默认的打印方式,其他所有子类都具备了该打印方式,如果子类有特殊的打印方式只要重写就可以了
}
如果添加打印到文件功能,则再添加一个接口即可!
这样利用接口和继承来实现面向对象的思想!
大概的解释,希望能对你有所帮助!建议你去看看戏说面向对象编程!
http://119.147.41.16/down?cid=E4B7BDB5060E411D61F7569AAFE782756835B093&t=2&fmt=&usrinput=戏说面向对象&dt=2002000&ps=0_0&rt=0kbs&plt=0&spd=9

回答2:

应该是面向对象比较顺一点吧 我的理解就是 最先的编程是单纯的编代码 就是全是输入字符字母 当程序比较大的时候 这种情况就比较麻烦了 而且一个程序编久了长了自己前面编的也会有点混乱了 所以这时候迫切的需要图形的帮助 用一个可视化的窗口 将一段段常用的程序变成一个个块 然后我们再把需要用的块合理的连接再一起 这样基本上就是面向对象 或者也可以叫组态 要学好编程就要多多的参加学校的技术类竞赛 不断进取 至少C++要精通

回答3:

我给你举个例子吧!当然不一定恰当,但是比较好理解;
面向对象的语言简单的说就是把东西拿来用,而不用了解相关的问题。
拿我们的家用台式机来说;拿它比作一个对象,你要买电脑办公,你不用去学CPU的原理与制作,主板的原理与制作……你要做的只是把买(调用)回来用就可以。
类也一样(你可以自己写,也可以调用.NET平台现有的类,我们平常写的程序大多数都是调用微软开发好的类对象,比如SqlConnection),当你用的时候调用它,你可以不知道里面写的具体代码,只要知道它的类名以及它可以实现的功能就可以。这就是面向对象语言开发的好处。
以下是一些个人的建议,希望可以帮到你;
1、当然必须先看看谭浩强出的C语言程序设计这本书,无论从哪个角度来讲C语言是现代编程语言的一个鼻祖级别的语言,看三遍或者五遍就OK,反正书页不厚。
2、再看一下微软认证课程出的C#语言教材,这个时候你就会发现这个非常简单。
3、看微软教材的时候每节课课后的例子一定要认真的做一下。俗话说万事开头难,以后你就会知道基础打好有多么的重要
4、从网上下载一些实例来联系。
5、经常用的属性下面的所有的方法不能说都背下来但是也要看个眼熟。
6、把线性数学,离散数学……学好会大有用途。
7、锻炼自己的逻辑性思维,网上有很多的教程和题目。当然我推荐你一种方法;假如说你做在学校的大礼堂参加学校的典礼,那么主席台上肯定有瓶子或者是杯子,你可以大概的扫一眼(先不去数它)然后过几秒钟用脑子回想你刚才看到情景,再去数情景里的被子,这样很锻炼人的。

回答4:

你要玩过红警和星际争霸就好理解了。正好对应两种编程,面向对象,面向过程

下面有详细的解释,这是我喜欢的学习方法,哈哈。

我最开始玩的是红警,那时候一般只造一个兵营和一个机械厂,然后疯狂点兵,等着1个1个慢慢造出来(我只打电脑)。
后来接触星际了,开始非常的不习惯,因为它没有一个固定的界面,可以造各种单位,而是要先选取一个建筑,然后在屏幕右下角选兵来造。

后来又发现,星际里,都是要先选一个东西,然后右下角出现这个东西可以进行的操作,习惯了之后,觉得星际这样的设计更加合理,更加符合世界的本来面貌。

恰好那时学了java这门课,一直不太明白面向对象程序设计是什么意思,和面向过程有什么区别,突然我想到了星际,这不就是面向对象程序设计的经典案例吗?

让我们来看看java和星际的共同点。

面向对象程序设计的核心概念就是类和对象,星际里,一种单位就是一个类,这个单位的实例就是对象,
比如zealot是个类,而游戏中你造出的一个zealot就是一个对象。

类有数据成员和成员函数,星际里的一个单位,也有属性和它的方法,还是以zealot为例,他的属性有血量、攻击力、盔甲、是否被辐射等等很多很多,他的方法有移动,攻击,hold等等,就是右下角里显示的。
这些属性都是只读的,体现了类的封装性,你不可以直接修改zealot的血量,除非你通过方法,比如你A他,或者给他补血。

类的另一个重要特征是继承性,星际里,很多单位都有共同属性,比如血量,盔甲,是否中绿毒等等,还有很多共同方法,如move,stop等等。将这些特征抽象出来,组成一个基类,有这些特征的单位继承这个基类,当然这个基类在游戏中是不会出现实例的。
类还可以组合,如航母包括本体和小飞机,tank包括底座和炮台。

类还有多态性,比如对函数重载来说,同时点右键,却可以是移动,或攻击或修理,这取决于点中的单位是什么,好比调用相同名称的函数,具体是哪一个由参数决定。还有运行时的多态,比如相同的方法,不同的对象执行他有不同的含义,好比同是A键,有些单位是attack,mm却是补血。

红警是不是用面向过程语言写的我不敢肯定,但是他的操作方式无疑很符合面向过程的思想,他不是先选一个单位,然后进行操作,而是直接先选操作,然后看操作什么单位。相当于这个操作是个全局函数,参数是各个单位。显然,这是将操作与数据脱离了的,因为操作不属于任何一个类。

总结:星际这款游戏体现了面向对象思想的精髓,如果你打算学习java等面向对象语言,我建议你先学会打星际

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/njchenyi/archive/2008/01/24/2062422.aspx

回答5:

对象就是可以看到、感觉到、听到、触摸到、尝到、活闻到的东西。一切事物皆为对象,即所以的东西都是对象。准确的说,对象是一个自包含的实体,用一组可识别的特性和行为来标识。
类就是具有相同的属性和功能的对象的抽象的集合。
举个例子,比如你爸爸、妈妈、爷爷、奶奶和你都是对象。那门你们家所有人都属于 人类或者说people 这个 类。 你们家所有人就是继承了 people 类,是对people类进行实例化的对象;你们家每个人拥有people类的属性,如人的外表、可以运用语言来表达、拥有双手双脚、每个手有5个手指等等一切关于人类的属性。