日期:2014-05-20  浏览次数:20731 次

何为面向对象?(具体的程序结构?设立思路?)
引用 2 楼 valen_gosu 的回复:

一种就是大一统的问题,这种问题最具代表性的就是说说什么是面向对象。


这个问题我也想请教一下了,面向对象具体在程序中是怎么体现的?

我是做C的MMI,就我现在的理解,面向对象是一种思想,不完全纠结于语言,就像目前我接触的一个平台:

Typedef struct A{
...
};

Typedef struct B{
A
...
};
这是一种简单的结构体间的继承关系。

还有
Handler_B()
{
......
//B's special handler
.....

Handler_A();
}
这是一种简单的处理函数的继承关系。
还有Func_tbl函数表的的简单继承/MapTbl的表驱动这些就不说了。
这些用C也可以实现。但我不知道为什么要叫面向对象?

或者说,比如以不同界面来划分来程序模块?这就叫面向对象的划分吗?
那以变量来记录状态,以mode方式进行划分呢?以状态机的方式进行驱动呢?


说实话,我google也搜索了一些东西,但是还是没搞清楚......面向对象在具体的程序结构/设计思想上到底是

指什么?

可能这个问题对于达人来说有些幼稚,但我希望能说得实际点,太抽象了我理解不能.......

我问这个是因为我目前发现了一个瓶颈,我写那些稍微复杂一点点的功能,比如说几千行的程序就可能debug的

时候发现改得很麻烦,总结的时候发现是设计时候考虑不周(设计时候如果不多花点时间,就一定会多花时间在debug上)。而我看到一些东西说,用面向对象的思维就很好解决这个问题......

------解决方案--------------------
1.这是类的例子,
以下面的程序为例:Car是一个类,Truck是一个类,Truck继承Car类.Truck将继承Car类的所有属性
当我们要调用Truck中的变量(如)时,需要创建一个Truck类的对象,通过Truck对象来调用Car的变量.
Class Car{//车辆
public String wheel;//汽车轮数:无轮,三轮,四轮,六轮
}
Class Truck extends Car{//卡车
private String num_ID;//汽车车牌
private int type;//汽车类别 卡车\轿车\bus
private String name;//生产厂家
private Date date;//出场日期
private String color;//汽车颜色
public void setNum_ID(String id){
num_ID=id;
}
public String getNum_ID(){
return num_ID;
}
}
public Class Test{
public static void main(String args[]){
Truck t=new Truck();
t.setNum_ID("吉-12580");
System.out.println(t.getNum_ID());
}
2
再举个对象的例子: 你,我,他都在一个类(人类)中,而 你,我,他 这些就是 人类的对象(也叫 实例),我想知道 你的身高\年龄,怎么办呢?
我 (对象已创建,没对象怎么调用,难道通过 人类来调用?) 问 你 (对象已创建) 来知道 你的身高!
这个过程就是 对象间 调用 变量.

因此, 人类 是 类
你 是 对象
他 是 对象
我 是 对象
我 通过 你 知道 你的 属性.
或者 我 通过 他 知道 你的 属性.(他 可能 知道,也可能 不知道)
而不能 人类 想要知道 你的 属性 吧.(Java中也可以通过类调用 静态变量,不过 没有实际意义 ) 

------解决方案--------------------
面向对象的实现差不多就是结构体里包含一些函数指针.

目的是方便,封装好一个对象后,用这个对象来代表具体的业务.

比原来的过程式语言要方便不少.

比如定义个类:声卡,我想要使用声卡,就很方便, 我想构造一个 PCI的AC97声卡,然后想听歌,就调用声卡的唱歌方法,想发出噪音就调用声的噪音方法, 想让声卡关闭,就使用关闭方法.这不是完全的我们的正常思维么?
------解决方案--------------------
我建议你先看完我的blog,
http://healerkx.cnblogs.com/
里面面向对象的若干个章节。