黑马程序员一OC面向对象语法

来源:互联网 发布:怎么从淘宝交水电费 编辑:程序博客网 时间:2024/05/16 05:45

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

.面向对象和面向过程思想

OC是面向对象的,C是面向过程的.面向对象和面向过程知识解决问题的两种不同思想;

 面向对象和面向过程区别

 1)以用电脑听歌为例子

     a)面向过程

      打开电脑

      播放电脑中的歌曲

      关闭电脑

     b)面向对象

      电脑开机

      播放歌曲

      电脑关机

  2)区别分析

    面向过程关注的时解决问题需要哪些步骤;面向对象关注的时解决问题需要哪些对象;

    没有开发经验很难感受到他们的区别,两种思想都能达到解决问题的目的,但是解决思路不一样;


.类和对象的关系

面向对象中有2个非常重要的概念:类和对象

1.如何创建对象

例如:创建汽车

  a)需要现有汽车的建造图纸,图纸上描述清楚汽车应该具备的属性和功能(行为)

   属性:轮子数,时速

   功能(行为):

  b)然后再根据图纸上的描述生成汽车

  c)每一辆汽车都是对象,都有自己具体的属性值,都是图纸的实例

  d)图纸是抽象的,汽车是具体的.图纸是对汽车对象的高度概括


2.OC中的面向对象

 1)OC中的类相当于图纸,用来描述一类事物,也就是说,要想创建对象,必须先有类

 2)OC利用类来创建对象,对象是类的具体存在

 3)因此,面向对象解决问题应该是先考虑需要设计哪些类,再利用类创建多少个对象


3.需要设计哪些类,如果设计类

 1)类的设计,只关心3样东西:

   事物名称(类名):(Person)

   属性:身高(height),年龄(age)

   行为(功能):(run),打架(fight)


 2)一般名词都是类


 3)拥有相同(或者类似)属性和行为的对象都可以抽象出一个类


.定义OC的类和创建OC的对象

1.类的声明

 1)代码编写

   定义一个Car,拥有2个属性:轮子数,时速,一个行为:

   类名\属性的命名规则:标示符的规则

   类名的命名规范:有意义,驼峰标识,首字母大写


#import <Foundation/Foundation.h>//类的声明@interface Car : NSObject{    @public    int wheels;//多少个轮子    int speed;//时速}-(void)run;//跑的行为@end


 2)成员变量

    @interface的大括号{}中声明的变量:wheels,speed

    @interface的大括号和函数的大括号是不一样的

   默认会初始化为0


 3)@public

    @public可以让Car对象的wheelsspeed属性被外界访问


 4)NSObject

    NSObject的目的是让Car类具备创建对象的能力




2.类的实现

//类的实现@implementation Car-(void) run{    NSObject(@"%i个轮子,%i时速的车子跑起来了",wheels,speed)<span style="font-family: 'Heiti SC Light';">;</span>}@end



3.创建对象

 代码编写

//主函数int main(){    //创建车子对像    Car *c = [Car new];    c->wheels = 3;    c->speed = 300;        [c run];    return 0;}


.set方法和get方法

1.set方法和get方法的使用场合

@public的成员可以被随意赋值,应该使用set方法和get方法来管理成员的访问


2.set方法

1)作用:用来设置成员变量,可以在方法里面过滤掉一些不合理的值

2)命名规范:

 方法都是以set开头,而且后面跟上成员变量名,成员变量名的首字母必须大写

 形参名称不要跟成员变量同名


3.get方法

1)作用:返回对象内部的成员变量

2)命名规范:get方法的名称一般就跟成员变量同名


4.成员变量的命名规范

 成员变量都以下划线 _开头

 可以跟get方法的名称区分开

 可以跟其他局部变量区分开,一看到下划线开头的变量,肯定是成员变量


5.代码示例

#import <Foundation/Foundation.h>//声明@interface Car : NSObject{    int _wheels;//轮子个数}//set方法- (void) setWheels : (int)wheels;//get方法- (int) wheels;@end@implementation Car//set方法实现-(void) setWheels : (int)wheels{    //对外面传进来的轮子数进行过滤    if (wheels <= 0 )    {        wheels = 1;    }    _wheels = wheels;}//get方法的实现- (int) wheels{    return _wheels;}@end


6.封装的好处

 过滤不合理的值

 屏蔽内部的赋值过程

 让外界不必关注内部的细节


.类方法

1.基本概念

直接可以用类名来执行的方法


2.类方法和对象方法对比

1)对象方法

 以减号 -开头

 只能让对象调用,没有对象,这个方法根本不可能被执行

 对象犯法能访问实例变量(成员)


2)类方法

 以加号 +开头

 只能用类名调用,对象不能调用

 类方法中不能访问实例变量(成员变量)

 使用场合:当不需要访问成员变量的时候,尽量用类方法

 类方法和对象方法可以同名


.self关键字

1.成员变量和局部变量同名

 当成员变量和局部变量同名时,采取就近原则,访问的时局部变量

 self访问成员变量,区分同名的局部变量


2.使用细节

1)出现的地方:所有的OC方法中(对象方法\类方法),不能出现在函数

2)所用

 使用"self->成员变量名"访问当前方法调用的成员变量

 使用"[self方法名];"来调用方法(对象方法\类方法)


3.常见错误

 低级错误:self去调用函数

 类方法中用self调用对象方法,对象方法中用self调用类方法

  self死循环






------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

0 0
原创粉丝点击