OC面向对象 类与对象

面向对象

        面向对象是一种解决问题或处理事情的思想. 可以将复杂的事情简单化,将程序开发者从执行者转化成了指挥者

        面向对象编程的时候使用:1.找到对象(没有就创建对象)  2.使用对象实现我们的需求

    特点:    1.面向过程重点是过程及行为,而面向对象重点在于对象及结果.      

                 2.有需求时首先找对象.如果找不到对象则自己创建一个对象.

                 3.对象具有很强的复用性.

                 4.指挥者对对象本身执行过程不用关心,也不可控制.对象本身决定最终结果好坏.

                 5.一切事情都可以用面向对象来处理,万物皆对象.

             

类与对象

使用计算机语言就是不断的在描述现实生活中的事物,OC中描述事物通过类的形式体现,类是具体事物的抽象,是一个抽象概念.

而对象即是该类事物实实在在存在的个体.


分两大步骤:

一.类的声明->功能:做  成员变量(实例变量)(即属性) 和 方法(即行为)的声明

@interface Phone: NSObject{//大括号里面写属性

@public//表示这个属性能被外部访问

}

//方法的声明.不能在大括号里.   方法中的数据类型必须用小括号括起来

-(void) call;

@end

 
 
  1. /*
  2. 定义类并创建对象
  3. 1.定义一个手机类,包含屏幕尺寸与电池容量的属性,具有打电话的行为.
  4. 2.并创建一个手机对象
  5. 3.给这个对象的屏幕尺寸与电池容量赋值,并调用打电话的方法.
  6. */
  7.                  //类的名称遵循标识符的规则.类名首自母大写.
  8.                  //NSObject:类必须继承它才具有创建对象的功能.
  9. #import <Foundation/Foundation.h>
  10.                  //类的声名
  11. @interface Phone : NSObject{
  12.                //大括号里面写属性
  13.    @public          //表示这个属性能被外部访问
  14.    float screen;      //屏幕尺寸
  15.    int cell;              //电池容量
  16. }
  17.                //方法的声名. 注意:不能在大括号里面.  方法中的数据类型必须用小括号括起来
  18. -(void) call;     //声名一个打电话的方法
  19. @end         // 不能少的,必须有.
  20.              //类的实现:里面做类里面声名的方法的实现
  21. @implementation Phone
  22. -(void) call{  
  23.    NSLog(@"屏幕尺寸为%f,电池容量为:%d的手机打电话了....",screen,cell);
  24. }
  25. @end
  26. int main(){
  27.               //创建了一个对象,并取了一个名字p
  28.    Phone* p= [Phone new];
  29.            //  对象的属性没有赋值之前都是0.
  30.            // float fs=p->screen;
  31.            // int ic=p->cell;
  32.              //给成员变量赋值
  33.    p->screen=3.5f;
  34.    p->cell=1420;
  35.    float fs=p->screen;
  36.    int ic=p->cell;
  37.    NSLog(@"手机的屏幕尺寸是:%f, 手机的电池容量是:%d",fs,ic);
  38.                  //调用对象的方法
  39.                   //[p call];
  40.     Phone* p2= [Phone new];
  41.    NSLog(@"手机的屏幕尺寸是:%f, 手机的电池容量是:%d",p2->screen,p2->cell);
  42.    return 0;
  43. }


OC的有参方法

两个要点:1.参数的类型用()括起来.   2.参数用:(冒号)分割. 一个参数对应一个:(冒号)

如:定义一个两数相加的方法

简化版:不建议,除非有特殊要求.

-(int) add:(int) a :(int) b{

          return a+b;

     }

标准版:OC的规范:参数前面要有说明

-(int) addOfNum1:(int) a Num2:(int) b{

          return a+b;

     }

注意:方法中除了方法类型符,   参数名和数据类型的部分统称为方法名


  
  
  1.         //有参的方法的使用
  2. #import <Foundation/Foundation.h>
  3.          //定义一个计算器类,计算两个整数相加的值
  4. @interface Calculator : NSObject
  5.          //简化版
  6. -(int) add:(int) a :(int) b;
  7.           //标准版
  8. -(int) addOfNum1:(int) a Num2:(int) b;
  9.            //addOfNum1://方法名
  10.            //Num2:      //方法名
  11. -(int) chengOfNum1:(int) a Num2:(int) b;       //乘法
  12. -(double) chuOfNum1:(int) a Num2:(int) b;          //除法
  13. @end
  14. @implementation Calculator
  15. -(int) add:(int) a :(int) b{
  16.    return a+b;
  17. }
  18. -(int) addOfNum1:(int) a Num2:(int) b{
  19.    return a+b;
  20. }
  21. -(int) chengOfNum1:(int) a Num2:(int) b{
  22.    return a*b;
  23. }
  24. -(double) chuOfNum1:(int) a Num2:(int) b{
  25.    return (double)a/b;
  26. }
  27. @end
  28. int main(){
  29.   Calculator* c= [Calculator new];
  30.   int count= [c add:1:2];          //简化版调用这个对象的方法
  31.   NSLog(@"两个数相加的和是:%d",count);
  32.       //int count= [c addOfNum1:1 Num2:2];       //标准版本调用方法
  33.       //NSLog(@"两个数相加的和是:%d",count);
  34.    int value=[c chengOfNum1:4 Num2:5];
  35.    NSLog(@"两个数相乘的和是:%d",value);
  36.   double d=[c chuOfNum1:4 Num2:5];
  37.    NSLog(@"两个数相除的和是:%f",d);
  38.    return 0;
  39. }






类的设计与匿名对象

1.一个类中的属性可以是任何类型

2.类设计的原则,高内聚与低聚合.

高内聚:是把有关联的属性要封装起来,成为一个单一的模块.

低耦合:就是一个类中各模块应该尽量独立.

3.一个对象可以没有变量名直接使用.这个对象就称为匿名对象.

如:[Person new]->age;//直接用对象获取属性,而不是对象的指针.

  
  
  1.    Person *p=[Person new];    //获取对象的指针,并用指针操用对象
  2.    p->name="judy";
  3.    [p printMe];
  4.    
  5.    //调用属性--(没有意义的,用的极少).   //匿名对象--无法复用,仅一次有效.
  6.    [Person new]->name="fred";
  7.    NSLog(@"姓名:%s",[Person new]->name);
  8.    
  9.    //调用方法--当希望用一个对象的方法(仅此而已),不想用这个对象的其它操作时,就可以用匿名对象直接调用方法.一次有效.
  10.    [[Person new] printMe];



野指针:没有赋值的指针  (非全局指针)

全局指针被创建时默认赋值为0--空指针


类与对象的内存机制

 1.属性(成员变量)是在对象里

 2.方法是在类中.

 3.对象与类都会在内存开辟空间.

 同一个类的对象都含有这个类的一个isa指针.所有的对象都指向同一个类.

 4.对象的指针调用方法时,实际是发了一个消息给对象,对象根据消息去找到isa指针指向的类中对应的方法去执行.

 5.方法中如果调用属性,则是哪个对象的请求,就调用哪个对象的属性.






  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值