------<Java培训、Android培训、iOS培训、.Net培训期待与您交流>------
一、面向对象和面向过程
1、面向过程更取向与解决问题的过程和步骤,比如把衣服放进洗衣机 脱掉衣服,走到洗衣机,打开洗衣机,放进衣服,放进洗衣粉,
设置洗衣机洗衣服。
2、面向过程就是解决问题需要哪些对象
例如,洗衣服
洗衣机自己打开盖子
洗衣机放水
人放衣服
洗衣机洗启动
在面向对象的思想里万物都是对象!
面向对象的优点:大幅度增加项目的成功率、减少维护费用和提高可移植性和可靠性
3、面向对象与面向过程的区别
面向过程:
强调的是功能行为,关注的是解决问题需要那些步骤
面向对象:
将功能封装对象,强调具备了功能的对象
关注的是解决问题需要那些对象
面向对象是基于面向过程的
二、类和对象
类和对象 就好比是 建筑图纸与建筑
先有类,才能创建对象
1、类
类的命名规则
>1、类名的第一个字母必须是大写
>2 不能用下划线
>3多个英文单词必须用驼峰标识
类的构成
>1类名,例如:学生,老师,人,狗等
>2类的属性,比如学生的成绩、身高、体重
>3类的方法,对属性的操作的方法
2、类的声明和实现
@interface 类名
{
成员变量
……
}
- (void)方法名;
@end
类的实现
@implementation
- (void)方法名
{
方法的实现
}
@end
例子:
import<Foundation/foundation.h> //foundation.h 是oc语言的基础框架
//Nsobject 是一个父类,任何类都要继承Nsobject
@interface Person : NsObject //声明一个person类
{
@public //可以让外部访问成员变量,只需要定义一次
int weight;
int age; //定义成员变量
}
//实现对象方法,对象的方法必须用-号开头
//对象方法中任何数据类型都必须用()括住
- (void)Age; //定义方法
@end
//用来实现interface中声明的方法
@implementation Car
- (void)Age
{
Nslog(“@the person Age is %d”,age);
}
@end
int main()
{
//定义一个对象指针,指向新创建的对象
//执行了类的new行为创建对象
//[类名 new]每次都会创建一个新对象并且反悔新对象本身
Person *p=[Person new];
p->weight=100;
p->age=50;
//调用Age方法
[p Age];
Person *p1=[Person new];
p->weight=120;
p->age=40;
[p1 Age];
return 0;
}
三、类和成员变量常见的错误
1.只有类的声明没有类的实现
例如
#import <Foundation/Fondation.h>
@interface tom :NSObject
{
int age;
int weight;
}
-(void)run;
@end
int main()
{
return 0;
}
2.类和成员变量不能嵌套包含,只能一对一配对的@end,中间不能嵌套任何东西
在类里定义了方法,必须在implement
ation里面实现,
在implementation里实现的方法必须在interface里定义
3.成员变量必须在对象中调用,不能单独调用
成员变量的初始化定义值不能在interface里给成员变量赋值
例如:
@interface tom :NSObject
{
int age=4;//error;
int weight;
}
4 不能在interface里随便将c语言的变量来使用
@interface tom :NSObject
{
int age;
int weight;
Static int wheels;//error
}
三、oc中方法和函数的区别
对象方法:
1>对象方法只能声明在@interface和@end之间,oc方法不能独立于类存在
2>对象方法必须以-号开头
3>对象方法必须由对象调用,不能单独调用
4>对象方法属于类
函数:
1>函数可以存在与文件的任何位置
2>函数的调用不依赖对象,随时调用
3>函数内部不能通过成员变量访问某个成员变量
OC对象和函数的关系:
#import <Foundation/Foundation.h>
@interface Car : NSObject
{//成员变量
@public
int wheels;
int speed;
}
- (viod)run;
@end
@implemention Car
- (void)run
{
NSLog(@"%d个轮子,速度为%dkm/h的车子跑起来",wheels,speed);
}
@end
void test(int w,int s)
{
w=20;
s=200;
}
void test1(Car *newc)
{
newc->wheels=5;//函数只能通过对象来调用成员变量
}
void test2(Car *newc)
{
Car *d=[Car new];
d->wheels=7;
d->speed=300;
newc=d;
newc->wheels=6
}
int main()
{
Car *c = [Car new];
c->wheels=5;
c->speed=200;
test1(c);
test2(c);
return 0;
}
五、带参数的成员方法命名规则
- (返回类型)方法名:(参数类型)参数名:(参数类型)参数名
-(void)square:(double)number
例如
#import<Foundation/Foundation.h>
@interface jsq : NSObject
-(double) pi;
-(int)pingfang:(int)num;
@end
@implementation jsq
-(double) pi
{
return 3.14;
}
-(int)pingfang:(int)num
{
return num*num;
}
@end
int main()
{
jsq *p=[jsq new]
int a=[p pingfang:10];
NSLog(@"%d",a);
}