面向对象技术的基石是什么?它是由什么技术演变过来的 。(100分)

  • 主题发起人 主题发起人 ff_ff
  • 开始时间 开始时间
前帖在
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=3493831
 
面向对象技术是对面向过程技术的升华。从后者的视角看来,数据和代码的关系很松散;
而前者将数据和代码进行了有机的结合(类不但有成员变量,还有成员方法)。但是,我们
不能说面向过程是面向对象的基石。如果一定要找出“基石”的话,应该是人工智能。
 
这上问题还真不知道!不知哪位能详述一下!大家学习学习!
就知道C++出来以后就面向对象了!
觉得应该就是公共函数演化多了引起的吧!代码重用呗!
 
可能是虚拟函数表和动态函数表吧,面向对象技术的精华就是多态,而虚拟函数表和动态函数表是实现多态的很重要的一个关键点,我想可能是这个吧.呵呵.
 
人性化的思维,呵呵
 
creation-zy:
人工智能是什么?简单说说吧。孤陋寡闻 拉
 
大家对这个可能不感兴趣啊.
 
这就是一种软件分析, 设计, 开发的方式,或者技术了。

如果非要追源朔宗, 那么, 汇编的基石应该就是0101了。 C的基石是B。
delphi的基石是pascal。 oo的,那就是面向过程了。不过这样说很牵强。 没有说服力。
我认为他的技术基石肯定不用说了。 思想化的基石呢? 人性化思维,有点对。 我觉得就是对象思维了。 也是比较符合自然规律的一种思考方式, 一种启发式的思维方式。
 
>>面向对象技术的基石是什么?它是由什么技术演变过来的 。
问的实在太玄乎了~~~
技术演变?有这么一说吗?
面向对象是现实世界模型的自然延伸,或者说是人类对客观事务问题总结的一种思考方式
问它的基石是怎么来的嘛……这个,这个,只能说是人类进化过程的一种衍生物吧,哈
再问下去只能从盘古开天辟地说起,话说从前…………
 
面向对象继承,多态那么多特性,编译器是如何实现的。
比方说我定义了一个接口,你实现了接口中的方法。
调用我的接口时,却执行了你实现的方法。编译器是如何实现的呢?
问的不专业,大家知道我的意思了吗?
 
这不是编译器的问题吧,编译器只是完成类型校验,怎么调用执行接口的方法是你(接口定义者)的问题
比如说,你定义了一个接口:
public interface IConnection{
public Connection getConnection();
pullic void execute();
}

我实现了这个接口:
public class ActualConnection implements IConnection{
public Connection getConnection(){
//todo
}
pullic void execute(){
//todo
}
}

那么你怎么执行我这个接口实现类的方法呢?通常做法可以通过xml配置的方式,通过ClassLoader动态加载,如,配置驱动类
<?xml version=1.0 ?>
<connection>
<driver>com.xxx.xxx.ActualConnection</driver>
</connection>

那么你调用的时候可以通过:
public class Main {
public void Invoker(){
IConnection connection=(IConnection)getImplmenets();
connection.execute();
}
public IConnection getImplmenets(){
//读取配置文件,动态加载Class
ClassLoader.loadClass(xxxx);
//通过反射机制构造ActualConnection对象实例
return Constructs(xxxx);

}
}
这样就实现了“你定义接口,执行我的实现”,所以怎么执行具体接口实现类的方法,是“你”接口定义者的事情!
 
to ff_ff:
你还记得大学时学的谭浩强的《C语言程序设计》吗?在它的后面几章是关于方法指针的,你如果细读就可以基本明白那些所谓编译器到底是怎么实现的啦。如果你有汇编的功底,那么你可以理解得更深入一些。
 
举个例子吧: 面向过程时,方法就好像一些工具。工作需要时拿来就可用。设计得好,单独 Copy到哪都可用。
面向对象时,对象就像一个工人,它可以使用一些&quot;工具&quot;(操作数据的方法),本身又可以“知道”(存储)一些信息,需要时只需指使这个工人使用他的工具去完成即可。
 
面向对象技术是对面向过程技术的升华。从后者的视角看来,数据和代码的关系很松散;
而前者将数据和代码进行了有机的结合(类不但有成员变量,还有成员方法)。但是,我们
不能说面向过程是面向对象的基石。如果一定要找出“基石”的话,应该是人工智能。
 
习惯,或者说发展必然
 
低级语言 : 机器语言,汇编语言
高级语言 : Fortron,Basic
PASCAL开创面向过程,结构化设计,自顶向下设计的开创者.PASCAL之父的经典语录:数据结构+算法=程序
C语言继承了PASCAL的面向过程,最普及的面向过程语言.
SMALLTALK开创面向对象的先河.
C++,Object Pascal,Java, C#百花齐放.

其实最开始面向过程的时候就孕育了面向对象的朴素思想.比如说结构体就是类的原始形态.
面向对象应该是面向过程的自然延伸.
 
哈哈.很简单,比如说刚开始写软件时,一段代码有时拷来拷去,这样当维护时就会出现一有错误,要改多处,这也是过时的面像过程,到了面像对像,可以通过封装,继承,多态来使软件的开发更具有可读性.不过多态的主要难点在于VMT,DMT,其实也是指针的原理.哈哈.其实会了就认为很简单了....
 
http://www.sowto.com/Article/cxsj/200510/Article_1139.html ——这篇文章讲的比较透彻。

这里还有一段:
OOP方法是以“对象”为中心进行分析和设计,紧抓“模型化世界”的对象,使这些对象
形成了解决目标问题的基本构件,即解决从“用什么做”到“要做什么”。其解决过程从总
体上说是采用自底向上方法,先将问题空间划分为一系列对象的集合,再将对象集合进行分
类抽象,一些具有相同属性行为的对象被抽象为一个类,类还可抽象分为子类、超类(超类
是子类的抽象)。其间采用继承来建立这些类之间的联系,形成结构层次。同时对于每个具
体类的内部结构,又可采用自顶向下逐步细化的方法由粗到细精化之。调试运行时通过向类
对象发消息来完成,对象执行相应操作并返回结果,使对象集的初始状态变成了终态。故
OOP总体来说主要是不断设计新的类和创建对象的过程。
  与传统的SP相比,OOP方法具有许多优点,如采用“对象”为中心的设计方式,再现了
人类认识事物的思维方式和解决问题的工作方式;OOP方法以对象为唯一的语义模型,整个
软件任务是通过各对象(类)之间相互传递消息的手段协同完成。因此,能尽量逼真地模拟客
观世界及其事物;由对象和类实现了模块化,类继承实现了抽象对象,以及任一对象的内部
状态和功能的实现的细节对外都是不可见的,因此很好地实现信息隐藏。由此建立在类及其
继承性基础上的重用能力可应付复杂的大型的软件开发。面向对象方法使得软件具有良好的
体系结构、便于软件构件化、软件复用和良好的扩展性和维护性,抽象程度高,因而具有较
高的生产效率。目前,面向对象程序设计语言以Java、C++ 为代表。
(来源:希赛网)


我以为,面向对象和面向过程是平等的,都是一种“思考方式”。
面向过程的思考方式把一切逻辑都交给程序员——所有数据都堆在一起,函数库也是一个
大杂烩,由程序员来决定如何对数据进行处理。
面向对象的思考方式更加接近人脑的思考方式——水果有“重量”、“颜色”等属性,可
以“被吃”或者发生“腐败”。这样一来,我们在面对具体对象的时候所需要考虑的东西就
变得更加明确(除了对象本身以及和其它对象的关系之外,我们不能增加别的东西——比如
为水果加燃料、吃飞机)。程序员大脑中的知识被部分的转移到程序中,带来的就是生产效
率的大幅提高。
 
后退
顶部