今天下午没什么事,不上班了,课程设计也不急,本来叫人去逛街的,但现在也不想动,算了,那就不去了,那就来为大家说说objective-c面向对象吧。
我也是初步学objective-c,开这个博客,一方面是为我学习过程记录一下,以后需要回顾的时候好找,另外是想为像我这样已经有一些其他语言开发经验的人提供方便,让大家学起来更加容易,我计划等我把这块学完为这个开个专栏,名字就叫“不从零开始学objective-c”,呵呵``,只是计划,只是计划。
以前有很多很多人问我面向对象是怎么学的,我们学校也开面向对象的课,但大家还是不懂面向对象是怎么学的,每当同学或者朋友问起我都会淡定的打开高洛峰的《细说php》第二版224页有这么一句话:“面向对象这种编程思想是初学者最大的障碍,也是导致很多读者远离面向对象程序设计的一个原因,所以请读者将本章的内容完全掌握之后,再在以后的学习和实践中不断积累,慢慢去理解和掌握面向对象程序设计思想吧”;所以面向对象的思想有时候感觉不是学会的,是慢慢品味出来的,有的人不学多长时间,代码中就处处飘着面向对象的味道,有的人写了几年代码了就仍然是面向过程的代码编写方式,我的建议就是先学学面向对象的鼻祖语言java基础,也就是j2se,建立基本的面向思想,知道面向对象是什么,起码让你去写一个类能写出来,完了我建议去学学j2ee,去接触一下ssh框架,去看看java的设计模式,java的设计模式在ssh中体现的淋漓尽致,假如你学了ssh,你一定会感觉android是个小菜,我是先学的android,后来学校开了j2ee课接触了一下,并不是很熟,但能感觉出那真的很强大,在那里我更深刻的体会了工厂模式,单例模式,面向对象编程,面向接口编程,面向切面编程等等,思想觉悟提高不少,后来在外面做兼职,主要做android应用,就把好多j2ee的思想加了进去,后来做php的课程设计,我仍然使用面向对象,在php中加入了工厂模式还有j2ee的分层架构,感觉代码结构挺好的,这套方法后来也被好好同学学了去。
说这么多,主要是告诉大家,思想是得在实践中慢慢锻炼出来的,所以这不是一个可以急得事,慢慢来,相信我们都可以学好。
不说废话了,开始我们第一个面向对象的程序,我还用以前写的代码来讲:
#import <Foundation/Foundation.h>
@interface Fraction:NSObject
-(void) print;
-(void) clear;
-(void) setReuslt:(double) s;
-(void) add:(double) a;
-(void) substract:(double) s;
-(void) multipy:(double) m;
-(void) divide:(double) d;
@end
@implementation Fraction
{
double result;
}
-(void) print{
NSLog(@"%g",result);
}
-(void) clear{
result = 0.0;
}
-(void) setReuslt:(double) s{
result = s;
}
-(void) add:(double)a{
result += a;
}
-(void) substract:(double)s{
result -=s;
}
-(void) multipy:(double)m{
result *= m;
}
-(void) divide:(double)d{
result /= d;
}
@end
int main(int argc,const char * argv[])
{
@autoreleasepool {
double a;
scanf("%lg",&a);
Fraction *fraction = [[Fractionalloc] init];
[fractionsetReuslt:a];
[fractionadd:3];
[fractionprint];
[fractionsubstract:3];
[fractionprint];
[fractionmultipy:3];
[fractionprint];
[fractiondivide:3];
[fractionprint];
}
return 0;
}
这段代码可以分为三部分,interface/implemention/main
先说main部分,main部分就是main函数部分,这里的作用我就不细说了,程序的入口,等等说了另外两个部分,我来说说main中代码的意思
再说interface部分,我把这部分代码说一下,看下面注释
/*这是interface的开头,这部分可以在面向接口编程中叫做接口部分,也可以叫做声明部分,以@interface开头,@end结束,Fraction为类名,NSObject为父类名,objectve-c的祖宗类就是这玩意,它就好比java中的object类一样*/
@interface Fraction:NSObject
/*这是方法的声明,“-”代表这是对象级别的方法,(void)是该方法的返回值类型,print是方法名,要是有形参就看setResult方法那样“:(double) s”冒号后面是参数,(double)是型参的类型,a是形参名*/
-(void) print;
-(void) clear;
-(void) setReuslt:(double) s;
-(void) add:(double) a;
-(void) substract:(double) s;
-(void) multipy:(double) m;
-(void) divide:(double) d;
//这里结束
@end
下面看看implemention部分
/*这部分可以叫做实现部分,以@implementation开头,@end结束,Fraction是类名这个得和interface部分类名相同,这是在一个文件里面写着将来把类放在单独文件中,这些会自动生成*/
@implementation Fraction
//这里面定义全局变量,这里定义的变量都是私有变量,将来在类外面访问需要为这个变量提供访问方法,这些方法将来也可以自动生成,这里体现了良好的封装性
{
double result;
}
//下面是对interface中方法的实现,可以不全部实现
-(void) print{
NSLog(@"%g",result);
}
-(void) clear{
result = 0.0;
}
-(void) setReuslt:(double) s{
result = s;
}
-(void) add:(double)a{
result += a;
}
-(void) substract:(double)s{
result -=s;
}
-(void) multipy:(double)m{
result *= m;
}
-(void) divide:(double)d{
result /= d;
}
@end
int main(int argc, const char * argv[])
{
@autoreleasepool {
double a;
scanf("%lg",&a);
//这是生成该类对象,这句话可以分为三部分
//Fraction *fraction; 声明变量
//fraction = [Fraction alloc]; 为该对象分配内存(c语言的方式)
//fraction = [fraction init]; 初始化该对象
Fraction *fraction = [[Fraction alloc] init];
//调用方法,objective-c中方法调用都是[],后面会说到"."的调用方法,但是推荐[]
[fraction setReuslt:a];
[fraction add:3];
[fraction print];
[fraction substract:3];
[fraction print];
[fraction multipy:3];
[fraction print];
[fraction divide:3];
[fraction print];
}
return 0;
}
其实没说多少东西,希望对大家有帮助,如果有什么问题,欢迎留言