一提到“面向对象”,最多听到的是“一切皆对象”,“对象是属性和行为的结合”等等。但是你还是不懂。
其实和面向过程相比较或许更清楚明白。
以下是一个案例,其中要计算面积,应该是乘法*才是,但是下面使用了加法+,这暴露的问题就是,虽然我用struct定义了一个结构,即长方形的宽和高,但是我没有定义它们之间必须用乘法,而是在后面调用这两个数据的时候才使用算法,很不幸的是我们有可能把算法写错。这就是面向过程。
那么面向对象呢?就是不仅把数据定义出来,而且还定义了这两个数据之间只能相乘,那么我们再调用时就不会出错。这很类似于其他语言里面的函数,我们封装好一个计算面积的函数,调用时候只要传递参数(如宽和高)就行,而不用再写算法。
而这里面的数据(宽和高)就是对象的属性,相乘就是对象的行为。把这两者放在一个里面就是封装。
#import <Foundation/Foundation.h>
struct rectangle{
int width;
int height;
}
int main(int argc,const char *argv[]){
@autoreleasepool{
int area;
struct rectangle rec={10,12};
area=rec.width+rec.height; //计算错误
NSLog(@"面积是%d",area);
}
return 0;
}