求详细解释,最好有简单程序代码

CCLOVEYA 2011-04-01 05:11:47
我想了解面对对象,面向过程,基于对象,是怎么区分,如果不从类的角度来看,我是这样理解,面对对象就是一种结构化的编程,由若干块组成整体,但是在c语言中,不是也有子函数吗?不也可以把它看做部分,作用是否相当于类的作用?我的理解是,区别在于子函数没有main函数,而类可单独成为一个函数,不知道这样理解是否正确,请大家帮我解决下疑问,补充一下,手机不能结帖,之前的帖,晚上回去电脑结!
...全文
374 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuStanly 2011-04-04
  • 打赏
  • 举报
回复
搬凳子听P哥上课.
zhlovewl1314 2011-04-03
  • 打赏
  • 举报
回复
前辈能不能指点我啊,拜托了。
vrhero 2011-04-03
  • 打赏
  • 举报
回复
当你只考虑x+y时,你不需要面向对象...因为根本没有对象...

面向对象思考的是宏观设计...简单地说就是Who、What、When、Where、Why...x是什么,它的业务意义是什么,由谁提供,谁要用,用来干什么,y同样,然后是x和y有什么关系,将来多了个z该怎么办等等...

小学生算1+1不需要任何数学模型...
wt_sanlian 2011-04-03
  • 打赏
  • 举报
回复
开放闭合原则
替代原则
接口依赖原则
类功能单一原则

还有23种设计模式。
。。。

面向对象编程,没有标准方案。 
skyaihuacai 2011-04-02
  • 打赏
  • 举报
回复
楼上大叔喝高了,一直在那啰嗦
chuanzhang5687 2011-04-02
  • 打赏
  • 举报
回复
要想学面相对象,不能光靠书上的理论,即使你书上的理论看懂了,过不了几天也会忘的,要多敲点代码,戏说面向对象这本书通俗易懂,你可看看,再给你个面试中比较常见的面相对象题
namespace 方块的体积
{
class Class2
{
private double length;
private double width;
private double higher;

public double Length
{
get { return this.length; }
set { this.length = value; }
}
public double Width
{
get { return this.width; }
set { this.width = value; }
}
public double Higher
{
get { return this.higher; }
set { this.higher = value; }
}

public Class2(double length, double width, double higher)
{
if (length > 0 && width > 0 && higher > 0)
{
this.length = length;
this.width = width;
this.higher = higher;
}
}
public double GetVoulumn()
{
return length * width * higher;
}
}



Main()
{
Class2 A=new Class2(10.0,20.0,30.0);
Console.WriteLine(A.GetVoulumn);
}
CCLOVEYA 2011-04-02
  • 打赏
  • 举报
回复
能对照给个面向过程的例子吗?不甚感谢!
CCLOVEYA 2011-04-01
  • 打赏
  • 举报
回复
谢谢大家的讲解,消化不少!
  • 打赏
  • 举报
回复
子函数没有main函数,而类可单独成为一个函数,这句话有问题
main函数,就像约定的名字一样,主函数——即表明它是一个程序的入口,有点像建筑物的的地基一样
设计多少类,以及类的结构和关系都是根据需求来的
cfvgodot 2011-04-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wujiafan520 的回复:]

楼上的大叔好厉害啊!好仰慕。~~
[/Quote]

你敢跟P哥叫叔。。。。还要不要在CSDN上混饭吃了!
cfvgodot 2011-04-01
  • 打赏
  • 举报
回复
面向对象是简单的,直观的,抽象的。。。

所以不用想的那么神秘,其实编程的时候多想着用上面向对象的三个特性就好了,继承 封装 多态!

可是用好哪个一个特性都不容易,这得靠代码堆出来,看书是没有P用的,号称神作的C++ PRIMER你看完之后照样云山雾罩。。。。不过等你堆够一定数量的代码之后你再回头看,你就知道那确是神作了!


简单来说,你尝试用C++或者C#去跟C比较,你用不同的语言去描述一类物品,比如说 笔 铅笔 钢笔 毛笔,你就会发现面向对象的描述方式很自然很接近人类的自然思维,代码也是一个树形结构的继承体制,而C语言就很蹩脚。。。你没办法给铅笔 钢笔 毛笔统一的归类。。你只能用数据结构上的关系树来描述他们,直白点说。。。用C来描述,很蛋疼!
cfvgodot 2011-04-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 ccloveya 的回复:]
我想了解面对对象,面向过程,基于对象,是怎么区分,如果不从类的角度来看,我是这样理解,面对对象就是一种结构化的编程,由若干块组成整体,但是在c语言中,不是也有子函数吗?不也可以把它看做部分,作用是否相当于类的作用?我的理解是,区别在于子函数没有main函数,而类可单独成为一个函数,不知道这样理解是否正确,请大家帮我解决下疑问,补充一下,手机不能结帖,之前的帖,晚上回去电脑结!
[/Quote]

我告诉你C和C++所谓面向对象的区别在哪里。。。

举例一下 C# 描述 人类 我=NEW 人类(); 我.眼睛

C 描述 #INCLUDE 人类.H 器官 眼睛 眼睛="我的眼睛"

这样不知道你看不看的懂!

差别就在那个“.”上边,“.”的左边就是对象,你所以的操作都是针对这个对象做的操作,而在C语言中,你没有办法实例一个对象出来!你只能对你自己本身操作!
=PNZ=BeijingL 2011-04-01
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 ccloveya 的回复:]

高手,能否看看十二楼我的理解是否靠边?我就是怕想以面向对象思想写程序,最终又回到过程当中,先彻底理解比较好,还有有什么范例可以参考?
[/Quote]

我觉得你还是先看看书中的介绍吧,然后找个例子照着写一写,理解会深刻一些
=PNZ=BeijingL 2011-04-01
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ccloveya 的回复:]

是不是可以这样理解,比如说我现在需要一个数值为二的结果,对于面向过程,结构化的编程,主程序我定义x,y=1,子函数是x y,这样调用子函数后会给我一个结果为二的数值,对于面向对象,是把二作为对象,除编程人员,其他的人并不知道这个值是怎么出来的,他把程序和相关数据融为一体,对象就是数值二,不知道这样理解是否正确?
[/Quote]
不是这样的,不是说吧参数二看做一个对象,是把生活中的万物看做对象,比如说人,狗,猫,
面向过程,是从一件事情触发,以参数为媒介一步步的吧要做的事情实现,
面向对象, 是以对象角度触发,以对象角度触发完成事情
两者思维方式不同,
举个例子:
假如你想实现X+Y的计算,
面向过程:会想整个过程应该是,输入X,输入Y 调用子函数实现ADD(X,Y)输出结果,实现是以参数为媒介
面向对象:会想把这个过程抽象出一个计算器类(这就是对象,你可以看做程序中的实物),有属性X,Y 有ADD(X,Y)的方法。这样在整个主程序中,需要用到计算调用这个计算器对象,让它实现加法。如果需要添加减,乘,除,直接在类里添加减,乘,除的方法,实现是以计算器对象为媒介

我是这么理解的,希望各位大师指正
CCLOVEYA 2011-04-01
  • 打赏
  • 举报
回复
高手,能否看看十二楼我的理解是否靠边?我就是怕想以面向对象思想写程序,最终又回到过程当中,先彻底理解比较好,还有有什么范例可以参考?
  • 打赏
  • 举报
回复
其实从某一方面看,结构化方法强调过程分解和模块内聚,而面向对象方法强调类型扩展和多种变化并存。
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 ccloveya 的回复:]

如果我的理解正确,若面向对象和面向过程中的数据,算法一样,可不可以说,他们相同的是内容,只是组织形式不同,表达方式不同!
[/Quote]

如果你仅仅考虑计算机领域的最基本的数据结构,又能找出多少面向对象设计的需求来呢?

早在十几年前,面向对象技术就以压倒优势战胜了传统的面向过程的设计方法。现在几乎所有使用者面向过程编程方法的人都在使用面向对象的编程语言,但是他们编写的代码未必就是面向对象的。

所以说到“数据、算法一样”,我是觉得没有什么内容。
CCLOVEYA 2011-04-01
  • 打赏
  • 举报
回复
上面的子函数是x+y
  • 打赏
  • 举报
回复
同时面向对象设计方法,强调使用对象的继承和多态来大规模地对设计进行解耦。比如说我们面对着30种ATM机器,200种银行卡,没有必要去设计6000种应用程序来描述其操作规则。而可能是仅仅开发为2种ATM机,3种银行卡,将其关联解耦为仅仅6种子系统来研究即可。然后每一种ATM机的扩展,都是仅仅关联与它的父类ATM机,跟银行卡的关系都是从父类继承的,而不需要特意去研究。

面向对象设计方法可以让我们先做出一个成功的原型系统,然后通过继承和扩展,在成功的系统上来小步、迅速地适应需求变化,而不是像传统的结构化工程方法那样总是在需求改变时动不动就将设计蓝图推倒重来。
=PNZ=BeijingL 2011-04-01
  • 打赏
  • 举报
回复

C语言是面向过程的思想,子函数,只是简单的实现了同一种功能的调用,结构上不易于扩展
向对象主要表现在 继承封装多态。通过面向对象思想设计的程序,代码复用上强很多,且易于扩展

你从网上找点面向对象项目的例子,好好看看就能感觉出来
加载更多回复(14)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧